2
0
forked from Wavyzz/dolibarr

Merge pull request #23758 from marcusdeangabriel/PROPALE_MODIFY_MARGIN_RATES

NEW Can modify margin rates in offers like VAT rates.
This commit is contained in:
Laurent Destailleur
2023-02-22 17:29:20 +01:00
committed by GitHub
4 changed files with 44 additions and 1 deletions

View File

@@ -914,6 +914,37 @@ if (empty($reshook)) {
foreach ($object->lines as $line) { foreach ($object->lines as $line) {
$result = $object->updateline($line->id, $line->subprice, $line->qty, $remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, $line->desc, 'HT', $line->info_bits, $line->special_code, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->product_type, $line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice); $result = $object->updateline($line->id, $line->subprice, $line->qty, $remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, $line->desc, 'HT', $line->info_bits, $line->special_code, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->product_type, $line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice);
} }
} elseif ($action == 'addline' && GETPOST('submitforallmargins', 'alpha') && GETPOST('marginforalllines') !== '' && $usercancreate) {
// Define margin
$margin_rate = (GETPOST('marginforalllines') ? GETPOST('marginforalllines') : 0);
foreach ($object->lines as &$line) {
$subprice = price2num($line->pa_ht * (1 + $margin_rate/100), 'MU');
$prod = new Product($db);
$prod->fetch($line->fk_product);
if ($prod->price_min > $subprice) {
$price_subprice = price($subprice, 0, $outlangs, 1, -1, -1, 'auto');
$price_price_min = price($prod->price_min, 0, $outlangs, 1, -1, -1, 'auto');
setEventMessages($prod->ref.' - '.$prod->label.' ('.$price_subprice.' < '.$price_price_min.' '.strtolower($langs->trans("MinPrice")).')'."\n", null, 'warnings');
}
// Manage $line->subprice and $line->multicurrency_subprice
$multicurrency_subprice = $subprice * $line->multicurrency_subprice / $line->subprice;
// Update DB
$result = $object->updateline($line->id, $subprice, $line->qty, $line->remise_percent, $line->tva_tx, $line->localtax1_rate, $line->localtax2_rate, $line->desc, 'HT', $line->info_bits, $line->special_code, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->product_type, $line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $multicurrency_subprice);
// Update $object with new margin info
$line->price = $subprice;
$line->marge_tx = $margin_rate;
$line->marque_tx = $margin_rate * $line->pa_ht / $subprice;
$line->total_ht = $line->qty * $subprice;
$line->total_tva = $line->tva_tx * $line->qty * $subprice;
$line->total_ttc = (1 + $line->tva_tx) * $line->qty * $subprice;
// Manage $line->subprice and $line->multicurrency_subprice
$line->multicurrency_total_ht = $line->qty * $subprice * $line->multicurrency_subprice / $line->subprice;
$line->multicurrency_total_tva = $line->tva_tx * $line->qty * $subprice * $line->multicurrency_subprice / $line->subprice;
$line->multicurrency_total_ttc = (1 + $line->tva_tx) * $line->qty * $subprice * $line->multicurrency_subprice / $line->subprice;
// Used previous $line->subprice and $line->multicurrency_subprice above, now they can be set to their new values
$line->subprice = $subprice;
$line->multicurrency_subprice = $multicurrency_subprice;
}
} elseif ($action == 'addline' && $usercancreate) { // Add line } elseif ($action == 'addline' && $usercancreate) { // Add line
// Set if we used free entry or predefined product // Set if we used free entry or predefined product
$predef = ''; $predef = '';

View File

@@ -141,7 +141,17 @@ if ($usemargins && isModEnabled('margin') && empty($user->socid)) {
} }
if (!empty($conf->global->DISPLAY_MARGIN_RATES) && $user->rights->margins->liretous) { if (!empty($conf->global->DISPLAY_MARGIN_RATES) && $user->rights->margins->liretous) {
print '<th class="linecolmargin2 margininfos right" style="width: 50px">'.$langs->trans('MarginRate').'</th>'; print '<th class="linecolmargin2 margininfos right" style="width: 50px">'.$langs->trans('MarginRate');
if ($user->hasRight("propal", "creer")) {
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?mode=marginforalllines&id='.$object->id.'">'.img_edit($langs->trans("UpdateForAllLines"), 0, 'class="clickmarginforalllines opacitymedium paddingleft cursorpointer"').'</a>';
if (GETPOST('mode', 'aZ09') == 'marginforalllines') {
print '<div class="classmarginforalllines inline-block nowraponall">';
print '<input type="number" name="marginforalllines" min="0" max="999.9" value="20.0" step="0.1"><label>%</label>';
print '<input class="inline-block button smallpaddingimp" type="submit" name="submitforallmargins" value="'.$langs->trans("Update").'">';
print '</div>';
}
}
print '</th>';
} }
if (!empty($conf->global->DISPLAY_MARK_RATES) && $user->rights->margins->liretous) { if (!empty($conf->global->DISPLAY_MARK_RATES) && $user->rights->margins->liretous) {
print '<th class="linecolmargin2 margininfos right" style="width: 50px">'.$langs->trans('MarkRate').'</th>'; print '<th class="linecolmargin2 margininfos right" style="width: 50px">'.$langs->trans('MarkRate').'</th>';

View File

@@ -6,6 +6,7 @@ TotalMargin=Total Margin
MarginOnProducts=Margin / Products MarginOnProducts=Margin / Products
MarginOnServices=Margin / Services MarginOnServices=Margin / Services
MarginRate=Margin rate MarginRate=Margin rate
ModifyMarginRates=Modify margin rates
MarkRate=Mark rate MarkRate=Mark rate
DisplayMarginRates=Display margin rates DisplayMarginRates=Display margin rates
DisplayMarkRates=Display mark rates DisplayMarkRates=Display mark rates

View File

@@ -8,6 +8,7 @@ MarginOnServices=Marge / Services
MarginRate=Taux de marge MarginRate=Taux de marge
MarkRate=Taux de marque MarkRate=Taux de marque
DisplayMarginRates=Afficher les taux de marge DisplayMarginRates=Afficher les taux de marge
ModifyMarginRates=Modifier les taux de marge
DisplayMarkRates=Afficher les taux de marque DisplayMarkRates=Afficher les taux de marque
InputPrice=Saisir un prix InputPrice=Saisir un prix
margin=Gestion des marges margin=Gestion des marges