Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

This commit is contained in:
Laurent Destailleur 2023-02-23 12:17:55 +01:00
commit ead1f15838
10 changed files with 69 additions and 9 deletions

View File

@ -914,6 +914,37 @@ if (empty($reshook)) {
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);
}
} 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
// Set if we used free entry or predefined product
$predef = '';

View File

@ -30,6 +30,11 @@
*/
class CGenericDic
{
/**
* @var DoliDB Database handler.
*/
public $db;
/**
* @var string Id to identify managed objects
*/

View File

@ -61,6 +61,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php';
*/
abstract class CommonStickerGenerator
{
/**
* @var DoliDB Database handler.
*/
public $db;
public $code; // Code of format
/**

View File

@ -41,6 +41,9 @@ class Translate
public $cache_labels = array(); // Cache for labels return by getLabelFromKey method
public $cache_currencies = array(); // Cache to store currency symbols
private $cache_currencies_all_loaded = false;
public $origlang;
public $error;
public $errors = array();
/**
@ -416,7 +419,7 @@ class Translate
*
* Value for hash are: 1:Loaded from disk, 2:Not found, 3:Loaded from cache
*
* @param Database $db Database handler
* @param DoliDB $db Database handler
* @return int <0 if KO, 0 if already loaded or loading not required, >0 if OK
*/
public function loadFromDatabase($db)

View File

@ -13,7 +13,7 @@
* Copyright (C) 2014 Cédric GROSS <c.gross@kreiz-it.fr>
* Copyright (C) 2014-2015 Marcos García <marcosgdf@gmail.com>
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
* Copyright (C) 2018-2022 Frédéric France <frederic.france@netlogic.fr>
* Copyright (C) 2018-2023 Frédéric France <frederic.france@netlogic.fr>
* Copyright (C) 2019-2022 Thibault Foucart <support@ptibogxiv.net>
* Copyright (C) 2020 Open-Dsi <support@open-dsi.fr>
* Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
@ -8890,7 +8890,7 @@ function dol_osencode($str)
}
if ($tmp == 'iso-8859-1') {
return utf8_decode($str);
return mb_convert_encoding($str, 'ISO-8859-1', 'UTF-8');
}
return $str;
}

View File

@ -178,9 +178,9 @@ function dol_print_file($langs, $filename, $searchalt = 0)
$content = file_get_contents($formfilealt);
$isutf8 = utf8_check($content);
if (!$isutf8 && $conf->file->character_set_client == 'UTF-8') {
print utf8_encode($content);
print mb_convert_encoding($content, 'UTF-8', 'ISO-8859-1');
} elseif ($isutf8 && $conf->file->character_set_client == 'ISO-8859-1') {
print utf8_decode($content);
print mb_convert_encoding($content, 'ISO-8859-1', 'UTF-8');
} else {
print $content;
}

View File

@ -141,7 +141,17 @@ if ($usemargins && isModEnabled('margin') && empty($user->socid)) {
}
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) {
print '<th class="linecolmargin2 margininfos right" style="width: 50px">'.$langs->trans('MarkRate').'</th>';

View File

@ -6,7 +6,7 @@
* Copyright (C) 2013 Cédric Salvador <csalvador@gpcsolutions.fr>
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
* Copyright (C) 2021 Frédéric France <frederic.france@netlogic.fr>
* Copyright (C) 2021-2023 Frédéric France <frederic.france@netlogic.fr>
* Copyright (C) 2022 Charlène Benke <charlene@patas-monkey.com>
*
* This program is free software; you can redistribute it and/or modify
@ -574,8 +574,12 @@ if (!empty($arrayfields['f.note_private']['checked'])) {
// Status
if (!empty($arrayfields['f.fk_statut']['checked'])) {
print '<td class="liste_titre right parentonrightofpage">';
$tmp = $objectstatic->LibStatut(0); // To load $this->statuts_short
$liststatus = $objectstatic->statuts_short;
$liststatus = [
$object::STATUS_DRAFT => $langs->transnoentitiesnoconv('Draft'),
$object::STATUS_VALIDATED => $langs->transnoentitiesnoconv('Validated'),
$object::STATUS_BILLED => $langs->transnoentitiesnoconv('StatusInterInvoiced'),
$object::STATUS_CLOSED => $langs->transnoentitiesnoconv('Done'),
];
if (empty($conf->global->FICHINTER_CLASSIFY_BILLED)) {
unset($liststatus[2]); // Option deprecated. In a future, billed must be managed with a dedicated field to 0 or 1
}

View File

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

View File

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