Polskie wsparcie PrestaShop
PrestaShop => PrestaShop 1.7 => Wątek zaczęty 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ć?
-
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.