diff --git a/htdocs/core/modules/modWorkflow.class.php b/htdocs/core/modules/modWorkflow.class.php index 08f02c03b6a..eee276f29ad 100644 --- a/htdocs/core/modules/modWorkflow.class.php +++ b/htdocs/core/modules/modWorkflow.class.php @@ -95,7 +95,8 @@ class modWorkflow extends DolibarrModules 8 => array('WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER', 'chaine', '1', 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER', 0, 'current', 0), 10 => array('WORKFLOW_TICKET_LINK_CONTRACT', 'chaine', '0', 'Automatically link a ticket to available contracts', 0, 'current', 0), 11 => array('WORKFLOW_TICKET_USE_PARENT_COMPANY_CONTRACTS', 'chaine', '0', 'Search among parent companies contracts when automatically linking a ticket to available contracts', 0, 'current', 0), - 12 => array('WORKFLOW_TICKET_CREATE_INTERVENTION', 'chaine', '0', 'WORKFLOW_TICKET_CREATE_INTERVENTION', 0, 'current', 0) + 12 => array('WORKFLOW_TICKET_CREATE_INTERVENTION', 'chaine', '0', 'WORKFLOW_TICKET_CREATE_INTERVENTION', 0, 'current', 0), + 13 => array('WORKFLOW_SUM_INVOICES_AMOUNT_CLASSIFY_BILLED_ORDER', 'chaine', '0', 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER', 0, 'current', 0), ); // Boxes diff --git a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php index 785aac5f0fc..561916d200a 100644 --- a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php +++ b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php @@ -231,6 +231,36 @@ class InterfaceWorkflowManager extends DolibarrTriggers } } + // First classify billed the order to allow the proposal classify process + if (isModEnabled('order') && isModEnabled('workflow') && getDolGlobalString('WORKFLOW_SUM_INVOICES_AMOUNT_CLASSIFY_BILLED_ORDER')) { + $object->fetchObjectLinked('', 'commande', $object->id, $object->element); + if (count($object->linkedObjects['commande']) == 1) { // If the invoice has only 1 source order + $orderLinked = reset($object->linkedObjects['commande']); + $orderLinked->fetchObjectLinked($orderLinked->id, '', $orderLinked->element); + if (count($orderLinked->linkedObjects['facture']) >= 1) { + $totalHTInvoices = 0; + $areAllInvoicesValidated = true; + foreach ($orderLinked->linkedObjects['facture'] as $key => $invoice) { + if ($invoice->statut == Facture::STATUS_VALIDATED || $object->id == $invoice->id) { + $totalHTInvoices += (float) $invoice->total_ht; + } else { + $areAllInvoicesValidated = false; + break; + } + } + if ($areAllInvoicesValidated) { + $isSameTotal = (price2num($totalHTInvoices, 'MT') == price2num($orderLinked->total_ht, 'MT')); + dol_syslog("Amount of linked invoices = ".$totalHTInvoices.", of order = ".$orderLinked->total_ht.", isSameTotal = ".(string) $isSameTotal, LOG_DEBUG); + if ($isSameTotal) { + $ret = $orderLinked->classifyBilled($user); + if ($ret < 0) { + return $ret; + } + } + } + } + } + } return $ret; } diff --git a/htdocs/langs/fr_FR/workflow.lang b/htdocs/langs/fr_FR/workflow.lang index 3112b83df20..ff9ea089388 100644 --- a/htdocs/langs/fr_FR/workflow.lang +++ b/htdocs/langs/fr_FR/workflow.lang @@ -9,10 +9,13 @@ descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Créer une facture client automatiqueme descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Créer automatiquement une facture client à la cloture d'un commande (la facture sera du même montant que la commande) descWORKFLOW_TICKET_CREATE_INTERVENTION=Crée une intervention automatiquement à la création d'un ticket # Autoclassify customer proposal or order + descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classer la/les proposition(s) commerciale(s) source(s) facturée(s) au classement facturé de la commande (et si le montant de la commande est le même que le total des propositions liées) descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classer la/les proposition(s) commerciale(s) source facturée(s) à la validation d'une facture client (et si le montant de la facture est le même que la somme des propositions liées) descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classer la/les commande(s) client(s) source(s) liées à facturée(s) quand une facture client est validée (et si le montant de la facture est le même que le montant total des commandes liées). Si vous avez une facture validée pour n commandes, cela peut également classer toutes les commandes sur Facturée. descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classer la/les commande(s) client(s) source(s) à Facturée quand une facture client est passée à Payé (et si le montant de la facture est identique à la somme des commandes sources). Si vous avez une facture définie facturée pour n commandes, cela peut aussi classer toutes les commandes sur Facturée. +descWORKFLOW_SUM_INVOICES_AMOUNT_CLASSIFY_BILLED_ORDER=Classer la/les commande(s) client(s) à Facturée si la somme du montant des factures liées est égale au montant total de la commande + descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classer les commandes client source liées comme expédiées lorsqu'une expédition est validée (et si la quantité expédiée par toutes les expéditions est la même que dans le commande à mettre à jour) descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED=Classer la commande client source liée à expédiée lorsqu'une expédition est fermée (et si la quantité expédiée par toutes les expéditions est la même que dans la commande à mettre à jour) # Autoclassify purchase proposal