Merge pull request #27 from altairis-melina/fix_customer_prices_multiprices

Fix customer prices multiprices
This commit is contained in:
Noé Cendrier
2025-02-17 10:14:11 +01:00
committed by GitHub

View File

@@ -500,52 +500,6 @@ if (empty($reshook)) {
// If price has changed, we update it
if (!array_key_exists($key, $object->multiprices) || $object->multiprices[$key] != $newprice || $object->multiprices_min[$key] != $newprice_min || $object->multiprices_base_type[$key] != $val['price_base_type'] || $object->multiprices_tva_tx[$key] != $newvattx) {
$res = $object->updatePrice($newprice, $val['price_base_type'], $user, $val['vat_tx'], $newprice_min, $key, $val['npr'], $psq, 0, $val['localtaxes_array'], $val['default_vat_code'], $val['price_label']);
if ($res > 0) {
$extralabels = $extrafields->fetch_name_optionals_label("product");
if (!getDolGlobalString('PRODUIT_MULTIPRICES') && !getDolGlobalString('PRODUIT_CUSTOMER_PRICES_AND_MULTIPRICES') && !empty($extralabels)) {
// Default price
$extrafield_values = $extrafields->getOptionalsFromPost("product");
foreach ($extrafield_values as $efkey => $value) {
$object->array_options[$efkey] = $value;
}
$result = $object->insertExtraFields();
if ($result < 0) {
$error++;
}
} elseif ((getDolGlobalString('PRODUIT_MULTIPRICES') || getDolGlobalString('PRODUIT_CUSTOMER_PRICES_AND_MULTIPRICES')) && !empty($extralabels)) {
$price_extralabels = $extrafields->fetch_name_optionals_label("product_price");
$sql = "SELECT rowid";
$sql .= " FROM ".$object->db->prefix()."product_price";
$sql .= " WHERE entity IN (".getEntity('productprice').")";
$sql .= " AND price_level=".((int) $key); // $i
$sql .= " AND fk_product = ".((int) $object->id);
$sql .= " ORDER BY date_price DESC, rowid DESC";
$sql .= " LIMIT 1";
$resql = $object->db->query($sql);
if ($resql) {
$lineid = $object->db->fetch_object($resql);
$db->free($resql);
}
if (!empty($lineid->rowid)) {
if (!empty($price_extralabels) && is_array($price_extralabels)) {
foreach ($price_extralabels as $code => $label) {
$code_array = GETPOST($code, 'array');
$object->array_options['options_'.$code] = $code_array[$key];
}
// We need to force table to update product_price and not product extrafields
$object->id = $lineid->rowid;
$object->table_element = 'product_price';
$result = $object->insertExtraFields();
}
// Back to product table
$object->id = $id;
$object->table_element = 'product';
if ($result < 0) {
$error++;
}
}
}
}
} else {
$res = 0;
}
@@ -555,6 +509,41 @@ if (empty($reshook)) {
setEventMessages($object->error, $object->errors, 'errors');
break;
}
// Update level price extrafields
$price_extralabels = $extrafields->fetch_name_optionals_label("product_price");
if ((getDolGlobalString('PRODUIT_MULTIPRICES') || getDolGlobalString('PRODUIT_CUSTOMER_PRICES_AND_MULTIPRICES')) && !empty($price_extralabels)) {
$sql = "SELECT rowid";
$sql .= " FROM ".$object->db->prefix()."product_price";
$sql .= " WHERE entity IN (".getEntity('productprice').")";
$sql .= " AND price_level=".((int) $key); // $i
$sql .= " AND fk_product = ".((int) $object->id);
$sql .= " ORDER BY date_price DESC, rowid DESC";
$sql .= " LIMIT 1";
$resql = $object->db->query($sql);
if ($resql) {
$lineid = $object->db->fetch_object($resql);
$db->free($resql);
}
if (!empty($lineid->rowid)) {
if (!empty($price_extralabels) && is_array($price_extralabels)) {
foreach ($price_extralabels as $code => $label) {
$code_array = GETPOST($code, 'array');
$object->array_options['options_'.$code] = $code_array[$key];
}
// We need to force table to update product_price and not product extrafields
$object->id = $lineid->rowid;
$object->table_element = 'product_price';
$result = $object->insertExtraFields();
}
// Back to product table
$object->id = $id;
$object->table_element = 'product';
if ($result < 0) {
$error++;
}
}
}
}
}
@@ -1515,39 +1504,6 @@ if (getDolGlobalString('PRODUIT_MULTIPRICES') || getDolGlobalString('PRODUIT_CUS
}
print '</td></tr>';
}
// Extrafields
$extrafields->fetch_name_optionals_label("product");
$extralabels = !empty($extrafields->attributes["product"]['label']) ? $extrafields->attributes["product"]['label'] : [];
$extrafield_values = $extrafields->getOptionalsFromPost("product");
$sql = "SELECT";
$sql .= " fk_object";
foreach ($extralabels as $key => $value) {
$sql .= ", ".$key;
}
$sql .= " FROM ".MAIN_DB_PREFIX."product_extrafields";
$sql .= " WHERE fk_object = ".((int) $object->id);
$resql = $db->query($sql);
if ($resql) {
$obj = $db->fetch_object($resql);
foreach ($extralabels as $key => $value) {
if (!empty($extrafields->attributes["product"]['list'][$key]) && ($extrafields->attributes["product"]['list'][$key] == 1 || $extrafields->attributes["product"]['list'][$key] == 3 || ($action == "edit_price" && $extrafields->attributes["product"]['list'][$key] == 4))) {
if (!empty($extrafields->attributes["product"]['langfile'][$key])) {
$langs->load($extrafields->attributes["product"]['langfile'][$key]);
}
print '<tr><td'.($extrafields->attributes["product"]['required'][$key] ? ' class="fieldrequired"' : '').'>';
if (!empty($extrafields->attributes["product"]['help'][$key])) {
print $form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes["product"]['help'][$key]));
} else {
print $langs->trans($value);
}
print '<td align="left">'.$extrafields->showOutputField($key, $obj->{$key}, '', 'product')."</td></tr>";
}
}
$db->free($resql);
}
}
print "</table>\n";
@@ -1751,59 +1707,6 @@ if (($action == 'edit_price' || $action == 'edit_level_price') && $object->getRi
print '</td>';
print '</tr>';
// Extrafields
$extrafields->fetch_name_optionals_label("product");
$extralabels = !empty($extrafields->attributes["product"]['label']) ? $extrafields->attributes["product"]['label'] : '';
$extrafield_values = $extrafields->getOptionalsFromPost("product");
if (!empty($extralabels)) {
if (empty($object->id)) {
foreach ($extralabels as $key => $value) {
if (!empty($extrafields->attributes["product"]['list'][$key]) && ($extrafields->attributes["product"]['list'][$key] == 1 || $extrafields->attributes["product"]['list'][$key] == 3 || ($action == "edit_price" && $extrafields->attributes["product"]['list'][$key] == 4))) {
if (!empty($extrafields->attributes["product"]['langfile'][$key])) {
$langs->load($extrafields->attributes["product"]['langfile'][$key]);
}
print '<tr><td'.($extrafields->attributes["product"]['required'][$key] ? ' class="fieldrequired"' : '').'>';
if (!empty($extrafields->attributes["product"]['help'][$key])) {
print $form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes["product"]['help'][$key]));
} else {
print $langs->trans($value);
}
print '</td><td>'.$extrafields->showInputField($key, GETPOSTISSET('options_'.$key) ? $extrafield_values['options_'.$key] : '', '', '', '', '', 0, 'product').'</td></tr>';
}
}
} else {
$sql = "SELECT";
$sql .= " fk_object";
foreach ($extralabels as $key => $value) {
$sql .= ", ".$key;
}
$sql .= " FROM ".MAIN_DB_PREFIX."product_extrafields";
$sql .= " WHERE fk_object = ".((int) $object->id);
$resql = $db->query($sql);
if ($resql) {
$obj = $db->fetch_object($resql);
foreach ($extralabels as $key => $value) {
if (!empty($extrafields->attributes["product"]['list'][$key]) && ($extrafields->attributes["product"]['list'][$key] == 1 || $extrafields->attributes["product"]['list'][$key] == 3 || ($action == "edit_price" && $extrafields->attributes["product"]['list'][$key] == 4))) {
if (!empty($extrafields->attributes["product"]['langfile'][$key])) {
$langs->load($extrafields->attributes["product"]['langfile'][$key]);
}
print '<tr><td'.($extrafields->attributes["product"]['required'][$key] ? ' class="fieldrequired"' : '').'>';
if (!empty($extrafields->attributes["product"]['help'][$key])) {
print $form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes["product"]['help'][$key]));
} else {
print $langs->trans($value);
}
print '</td><td>'.$extrafields->showInputField($key, GETPOSTISSET('options_'.$key) ? $extrafield_values['options_'.$key] : $obj->{$key}, '', '', '', '', 0, 'product');
print '</td></tr>';
}
}
$db->free($resql);
}
}
}
$parameters = array();
$reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
@@ -2458,6 +2361,8 @@ if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES') || getDolGlobalString('PRODUIT
print '<table class="liste centpercent">'."\n";
if (count($prodcustprice->lines) > 0 || $search_soc) {
$extrafields->fetch_name_optionals_label("product_customer_price");
$custom_price_extralabels = !empty($extrafields->attributes["product_customer_price"]['label']) ? $extrafields->attributes["product_customer_price"]['label'] : '';
if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES_AND_MULTIPRICES')) {
$colspan = 10;
} else {
@@ -2466,8 +2371,8 @@ if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES') || getDolGlobalString('PRODUIT
if ($mysoc->localtax1_assuj == "1" || $mysoc->localtax2_assuj == "1") {
$colspan++;
}
if (!empty($price_extralabels) && is_array($price_extralabels)) {
$colspan += count($price_extralabels);
if (!empty($custom_price_extralabels) && is_array($custom_price_extralabels)) {
$colspan += count($custom_price_extralabels);
}
print '<tr class="liste_titre">';