wdrożenia PrestaShop

Aktualizacja kombinacji (wpływ na cenę)

  • 1 Odpowiedzi
  • 2875 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline zielu84

  • Nowy
  • *
  • 1
  • 0
  • PrestaShop
  • PrestaShop: 1.7
  • Status: Programista
Aktualizacja kombinacji (wpływ na cenę)
« dnia: Październik 21, 2017, 12:03:14 pm »
Taki oto problem napotkałem i pytanie jest - czy również na niego wpadliście i jak sobie z nim poradziliście (bez oczywiście modyfikowania plików źródłowych PS)?

PS 1.7.2.3

Jest dodane kilka produktów ze swoją ceną.
Do produktów mam atrybuty. Niektóre z atrybutów wpływają na końcową cenę produktu.
Na podstawie tych atrybutów mam wygenerowane kombinacje dla produktów

Jeśli zmodyfikuję kilka kombinacji na raz z poziomu listy kombinacji (dodam wpływ na cenę np. "0.8 PLN") to poprawnie mi się te kombinacje zapisują.

Jeśli wejdę w edycję pojedynczej kombinacji i zmienię wpływ na cenę to również poprawnie się kombinacja zapisuje.
Niestety poprzednie kombinacje się "zerują", czyli ich wpływ na cenę przestawia się na wartość "0 PLN".

Czy jesteście w stanie coś poratować?

*

Offline skorupa12

  • Nowy
  • *
  • 1
  • 0
  • PrestaShop
  • PrestaShop: 1.7
  • Status: Programista
Odp: Aktualizacja kombinacji (wpływ na cenę)
« Odpowiedź #1 dnia: Listopad 02, 2017, 12:50:16 pm »
Niestety, nie ma możliwości rozwiązania tego problemu bez modyfikacji plików PrestaShop.

Bug został zgłoszony tutaj: http://forge.prestashop.com/browse/BOOM-4176

A rozwiązanie które u nas zadziałało wygląda tak że trzeba zmienić plik: src/PrestaShopBundle/Model/Product/AdminModelAdapter.php

znaleźć linijki 257-298 i zmodyfikować żeby były podobne do tego:
        //map combinations and impact price/weight/unit price
        foreach ($form_data['combinations'] as $k => $combination) {
            $floatParser = new FloatParser();
            $combination['attribute_price'] = $floatParser->fromString($combination['attribute_price']);
            $combination['attribute_weight'] = $floatParser->fromString($combination['attribute_weight']);
            $combination['attribute_unity'] = $floatParser->fromString($combination['attribute_unity']);
           
            $form_data['combinations'][$k]['attribute_price_impact'] = 0;
            $form_data['combinations'][$k]['attribute_weight_impact'] = 0;
            $form_data['combinations'][$k]['attribute_unit_impact'] = 0;
 
            if ($combination['attribute_price'] > 0) {
                $form_data['combinations'][$k]['attribute_price_impact'] = 1;
            } elseif ($combination['attribute_price'] < 0) {
                $form_data['combinations'][$k]['attribute_price_impact'] = -1;
            }
 
            if ($combination['attribute_weight'] > 0) {
                $form_data['combinations'][$k]['attribute_weight_impact'] = 1;
            } elseif ($combination['attribute_weight'] < 0) {
                $form_data['combinations'][$k]['attribute_weight_impact'] = -1;
            }
 
            if ($combination['attribute_unity'] > 0) {
                $form_data['combinations'][$k]['attribute_unit_impact'] = 1;
            } elseif ($combination['attribute_unity'] < 0) {
                $form_data['combinations'][$k]['attribute_unit_impact'] = -1;
            }
 
            $form_data['combinations'][$k]['attribute_price'] = abs($combination['attribute_price']);
            $form_data['combinations'][$k]['attribute_weight'] = abs($combination['attribute_weight']);
            $form_data['combinations'][$k]['attribute_unity'] = abs($combination['attribute_unity']);
        }

Źródłem problemu jest kropka i przecinek używana w ułamkach dziesiętnych i to jak później system to interpretuje.