Polskie wsparcie PrestaShop

PrestaShop => PrestaShop 1.7 => Wątek zaczęty przez: zielu84 w Październik 21, 2017, 12:03:14 pm

Tytuł: Aktualizacja kombinacji (wpływ na cenę)
Wiadomość wysłana przez: zielu84 w 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ć?
Tytuł: Odp: Aktualizacja kombinacji (wpływ na cenę)
Wiadomość wysłana przez: skorupa12 w 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.