FIX Duplicate creation of invoice when closing shipment linked to order
This commit is contained in:
parent
035448c66e
commit
4e4b0e0039
@ -4160,7 +4160,7 @@ abstract class CommonObject
|
|||||||
* @param int $status Status to set
|
* @param int $status Status to set
|
||||||
* @param int $elementId Id of element to force (use this->id by default if null)
|
* @param int $elementId Id of element to force (use this->id by default if null)
|
||||||
* @param string $elementType Type of element to force (use this->table_element by default)
|
* @param string $elementType Type of element to force (use this->table_element by default)
|
||||||
* @param string $trigkey Trigger key to use for trigger. Use '' means automatic but it not recommended and is deprecated.
|
* @param string $trigkey Trigger key to use for trigger. Use '' means automatic but it is not recommended and is deprecated.
|
||||||
* @param string $fieldstatus Name of status field in this->table_element
|
* @param string $fieldstatus Name of status field in this->table_element
|
||||||
* @return int <0 if KO, >0 if OK
|
* @return int <0 if KO, >0 if OK
|
||||||
*/
|
*/
|
||||||
@ -4210,41 +4210,49 @@ abstract class CommonObject
|
|||||||
if ($status == 1 && in_array($elementTable, array('inventory'))) {
|
if ($status == 1 && in_array($elementTable, array('inventory'))) {
|
||||||
$sql .= ", date_validation = '".$this->db->idate(dol_now())."'";
|
$sql .= ", date_validation = '".$this->db->idate(dol_now())."'";
|
||||||
}
|
}
|
||||||
$sql .= " WHERE rowid=".((int) $elementId);
|
$sql .= " WHERE rowid = ".((int) $elementId);
|
||||||
|
$sql .= " AND ".$fieldstatus." <> ".((int) $status); // We avoid update if status already correct
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::setStatut", LOG_DEBUG);
|
dol_syslog(get_class($this)."::setStatut", LOG_DEBUG);
|
||||||
if ($this->db->query($sql)) {
|
$resql = $this->db->query($sql);
|
||||||
|
if ($resql) {
|
||||||
$error = 0;
|
$error = 0;
|
||||||
|
|
||||||
// Try autoset of trigkey
|
$nb_rows_affected = $this->db->affected_rows($resql); // should be 1 or 0 if status was already correct
|
||||||
if (empty($trigkey)) {
|
|
||||||
if ($this->element == 'supplier_proposal' && $status == 2) {
|
|
||||||
$trigkey = 'SUPPLIER_PROPOSAL_SIGN'; // 2 = SupplierProposal::STATUS_SIGNED. Can't use constant into this generic class
|
|
||||||
}
|
|
||||||
if ($this->element == 'supplier_proposal' && $status == 3) {
|
|
||||||
$trigkey = 'SUPPLIER_PROPOSAL_REFUSE'; // 3 = SupplierProposal::STATUS_REFUSED. Can't use constant into this generic class
|
|
||||||
}
|
|
||||||
if ($this->element == 'supplier_proposal' && $status == 4) {
|
|
||||||
$trigkey = 'SUPPLIER_PROPOSAL_CLOSE'; // 4 = SupplierProposal::STATUS_CLOSED. Can't use constant into this generic class
|
|
||||||
}
|
|
||||||
if ($this->element == 'fichinter' && $status == 3) {
|
|
||||||
$trigkey = 'FICHINTER_CLASSIFY_DONE';
|
|
||||||
}
|
|
||||||
if ($this->element == 'fichinter' && $status == 2) {
|
|
||||||
$trigkey = 'FICHINTER_CLASSIFY_BILLED';
|
|
||||||
}
|
|
||||||
if ($this->element == 'fichinter' && $status == 1) {
|
|
||||||
$trigkey = 'FICHINTER_CLASSIFY_UNBILLED';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($trigkey) {
|
if ($nb_rows_affected >= 0) {
|
||||||
// Call trigger
|
if (empty($trigkey)) {
|
||||||
$result = $this->call_trigger($trigkey, $user);
|
// Try to guess trigkey (for backward compatibility, now we should have trigkey defined into the call of setStatus)
|
||||||
if ($result < 0) {
|
if ($this->element == 'supplier_proposal' && $status == 2) {
|
||||||
$error++;
|
$trigkey = 'SUPPLIER_PROPOSAL_SIGN'; // 2 = SupplierProposal::STATUS_SIGNED. Can't use constant into this generic class
|
||||||
|
}
|
||||||
|
if ($this->element == 'supplier_proposal' && $status == 3) {
|
||||||
|
$trigkey = 'SUPPLIER_PROPOSAL_REFUSE'; // 3 = SupplierProposal::STATUS_REFUSED. Can't use constant into this generic class
|
||||||
|
}
|
||||||
|
if ($this->element == 'supplier_proposal' && $status == 4) {
|
||||||
|
$trigkey = 'SUPPLIER_PROPOSAL_CLOSE'; // 4 = SupplierProposal::STATUS_CLOSED. Can't use constant into this generic class
|
||||||
|
}
|
||||||
|
if ($this->element == 'fichinter' && $status == 3) {
|
||||||
|
$trigkey = 'FICHINTER_CLASSIFY_DONE';
|
||||||
|
}
|
||||||
|
if ($this->element == 'fichinter' && $status == 2) {
|
||||||
|
$trigkey = 'FICHINTER_CLASSIFY_BILLED';
|
||||||
|
}
|
||||||
|
if ($this->element == 'fichinter' && $status == 1) {
|
||||||
|
$trigkey = 'FICHINTER_CLASSIFY_UNBILLED';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// End call triggers
|
|
||||||
|
if ($trigkey) {
|
||||||
|
// Call trigger
|
||||||
|
$result = $this->call_trigger($trigkey, $user);
|
||||||
|
if ($result < 0) {
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
// End call triggers
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// The status was probably already good. We do nothing more, no triggers.
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
|
|||||||
@ -2167,7 +2167,7 @@ class Expedition extends CommonObject
|
|||||||
|
|
||||||
$this->db->begin();
|
$this->db->begin();
|
||||||
|
|
||||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.'expedition SET fk_statut='.self::STATUS_CLOSED;
|
$sql = 'UPDATE '.MAIN_DB_PREFIX.'expedition SET fk_statut = '.self::STATUS_CLOSED;
|
||||||
$sql .= " WHERE rowid = ".((int) $this->id).' AND fk_statut > 0';
|
$sql .= " WHERE rowid = ".((int) $this->id).' AND fk_statut > 0';
|
||||||
|
|
||||||
$resql = $this->db->query($sql);
|
$resql = $this->db->query($sql);
|
||||||
@ -2191,8 +2191,9 @@ class Expedition extends CommonObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($shipments_match_order) {
|
if ($shipments_match_order) {
|
||||||
dol_syslog("Qty for the ".count($order->lines)." lines of order have same value for shipments with status Expedition::STATUS_CLOSED=".self::STATUS_CLOSED.', so we close order');
|
dol_syslog("Qty for the ".count($order->lines)." lines of the origin order is same than qty for lines in the shipment we close (shipments_match_order is true), with new status Expedition::STATUS_CLOSED=".self::STATUS_CLOSED.', so we close order');
|
||||||
$order->cloture($user);
|
// We close the order
|
||||||
|
$order->cloture($user); // Note this may also create an invoice if module workflow ask it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user