Merge branch '17.0' of git@github.com:Dolibarr/dolibarr.git into 17.0
This commit is contained in:
commit
1f97fcd2eb
@ -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();
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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) : '';
|
||||
|
||||
@ -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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)) {
|
||||
|
||||
@ -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";
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user