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

This commit is contained in:
Laurent Destailleur 2023-04-26 13:27:06 +02:00
commit 1f97fcd2eb
6 changed files with 31 additions and 89 deletions

View File

@ -318,7 +318,7 @@ function getIbanHumanReadable(Account $account)
{
if ($account->getCountryCode() == 'FR') {
require_once DOL_DOCUMENT_ROOT.'/includes/php-iban/oophp-iban.php';
$ibantoprint = preg_replace('/[^a-zA-Z0-9]/', '', $account->iban);
$ibantoprint = preg_replace('/[^a-zA-Z0-9]/', '', empty($account->iban)?'':$account->iban);
$iban = new PHP_IBAN\IBAN($ibantoprint);
return $iban->HumanFormat();
}

View File

@ -414,7 +414,7 @@ if ($outputalsopricetotalwithtax) {
if ($this->statut == 0 && !empty($object_rights->creer) && $action != 'selectlines') {
$situationinvoicelinewithparent = 0;
if ($line->fk_prev_id != null && in_array($object->element, array('facture', 'facturedet'))) {
if (isset($line->fk_prev_id) && in_array($object->element, array('facture', 'facturedet'))) {
if ($object->type == $object::TYPE_SITUATION) { // The constant TYPE_SITUATION exists only for object invoice
// Set constant to disallow editing during a situation cycle
$situationinvoicelinewithparent = 1;

View File

@ -347,6 +347,12 @@ if ($result) {
}
// Show total margin
if (!isset($cumul_achat)) {
$cumul_achat = 0;
}
if (!isset($cumul_vente)) {
$cumul_vente = 0;
}
$totalMargin = $cumul_vente - $cumul_achat;
$marginRate = ($cumul_achat != 0) ? (100 * $totalMargin / $cumul_achat) : '';

View File

@ -612,11 +612,6 @@ class Mo extends CommonObject
$error++;
}
$result = $this->updateProduction($user, $notrigger);
if ($result <= 0) {
$error++;
}
if (!$error) {
$this->db->commit();
return 1;
@ -636,93 +631,28 @@ class Mo extends CommonObject
public function updateProduction(User $user, $notrigger = true)
{
$error = 0;
$role = "";
if ($this->status != self::STATUS_DRAFT) {
//$this->error = 'BadStatusForUpdateProduction';
//return -1;
return 1;
}
if ($this->status != self::STATUS_DRAFT) return 1;
$this->db->begin();
// Insert lines in mrp_production table from BOM data
if (!$error) {
// TODO Check that production has not started. If yes, we stop here.
$oldQty = $this->oldQty;
$newQty = $this->qty;
if ($newQty != $oldQty && !empty($this->oldQty)) {
$sql = "SELECT rowid FROM " . MAIN_DB_PREFIX . "mrp_production WHERE fk_mo = " . (int) $this->id;
$resql = $this->db->query($sql);
if ($resql) {
while ($obj = $this->db->fetch_object($resql)) {
$moLine = new MoLine($this->db);
$res = $moLine->fetch($obj->rowid);
if (!$res) $error++;
$sql = 'DELETE FROM '.MAIN_DB_PREFIX.'mrp_production WHERE fk_mo = '.((int) $this->id);
$this->db->query($sql);
$moline = new MoLine($this->db);
// Line to produce
$moline->fk_mo = $this->id;
$moline->qty = $this->qty;
$moline->fk_product = $this->fk_product;
$moline->position = 1;
if ($this->fk_bom > 0) { // If a BOM is defined, we know what to produce.
include_once DOL_DOCUMENT_ROOT.'/bom/class/bom.class.php';
$bom = new Bom($this->db);
$bom->fetch($this->fk_bom);
if ($bom->bomtype == 1) {
$role = 'toproduce';
$moline->role = 'toconsume';
} else {
$role = 'toconsume';
$moline->role = 'toproduce';
}
} else {
if ($this->mrptype == 1) {
$moline->role = 'toconsume';
} else {
$moline->role = 'toproduce';
}
}
$resultline = $moline->create($user, false); // Never use triggers here
if ($resultline <= 0) {
$error++;
$this->error = $moline->error;
$this->errors = $moline->errors;
dol_print_error($this->db, $moline->error, $moline->errors);
}
if ($this->fk_bom > 0) { // If a BOM is defined, we know what to consume.
if ($bom->id > 0) {
// Lines to consume
if (!$error) {
foreach ($bom->lines as $line) {
$moline = new MoLine($this->db);
$moline->fk_mo = $this->id;
$moline->origin_id = $line->id;
$moline->origin_type = 'bomline';
if ($line->qty_frozen) {
$moline->qty = $line->qty; // Qty to consume does not depends on quantity to produce
} else {
$moline->qty = price2num(($line->qty / ( !empty($bom->qty) ? $bom->qty : 1 ) ) * $this->qty / ( !empty($line->efficiency) ? $line->efficiency : 1 ), 'MS'); // Calculate with Qty to produce and more presition
}
if ($moline->qty <= 0) {
$error++;
$this->error = "BadValueForquantityToConsume";
break;
} else {
$moline->fk_product = $line->fk_product;
$moline->role = $role;
$moline->position = $line->position;
$moline->qty_frozen = $line->qty_frozen;
$moline->disable_stock_change = $line->disable_stock_change;
$resultline = $moline->create($user, false); // Never use triggers here
if ($resultline <= 0) {
$error++;
$this->error = $moline->error;
$this->errors = $moline->errors;
dol_print_error($this->db, $moline->error, $moline->errors);
break;
}
}
if ($moLine->role == 'toconsume' || $moLine->role == 'toproduce') {
if (empty($moLine->qty_frozen)) {
$qty = $newQty * $moLine->qty / $oldQty;
$moLine->qty = price2num($qty * (!empty($line->efficiency) ? $line->efficiency : 1 ), 'MS'); // Calculate with Qty to produce and more presition
$res = $moLine->update($user);
if (!$res) $error++;
}
}
}

View File

@ -123,6 +123,8 @@ if (empty($reshook)) {
$backurlforlist = dol_buildpath('/mrp/mo_list.php', 1);
$object->oldQty = $object->qty;
if (empty($backtopage) || ($cancel && empty($id))) {
if (empty($backtopage) || ($cancel && strpos($backtopage, '__ID__'))) {
if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) {

View File

@ -1259,6 +1259,10 @@ foreach ($listofreferent as $key => $value) {
if (!empty($element->ref_customer)) {
print ' - '.$element->ref_customer;
}
// Compatibility propale
if (empty($element->ref_customer) && !empty($element->ref_client)) {
print ' - '.$element->ref_client;
}
}
print "</td>\n";