From e6a989e51a2670c0eaaa49e969f46c302a7ac8a5 Mon Sep 17 00:00:00 2001 From: kamel Date: Fri, 25 Mar 2022 17:00:23 +0100 Subject: [PATCH 1/6] FIX - Case of invoice situation at 100% with a credit note Set situation_final to 0 if is a credit note and the invoice source is a invoice situation (case when invoice situation is at 100%) when the credit note is validated So we can continue to create new invoice situation --- htdocs/compta/facture/class/facture.class.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 4feeb3d60b6..4caa9a8bca6 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2848,6 +2848,25 @@ class Facture extends CommonInvoice } } + /* + * Set situation_final to 0 if is a credit note and the invoice source is a invoice situation (case when invoice situation is at 100%) + * So we can continue to create new invoice situation + */ + if (!$error && $this->type == self::TYPE_CREDIT_NOTE && $this->fk_facture_source > 0) { + $invoice_situation = new Facture($this->db); + $result = $invoice_situation->fetch($this->fk_facture_source); + if ($result > 0) { + $invoice_situation->situation_final = 0; + // Disable triggers because module can force situation_final to 1 by triggers (ex: SubTotal) + $result = $invoice_situation->setFinal($user, 1); + } + if ($result < 0) { + $this->error = $invoice_situation->error; + $this->errors = $invoice_situation->errors; + $error++; + } + } + // Trigger calls if (!$error && !$notrigger) { // Call trigger From 2ca5c38f0acfe4b988c55ff98033afb1d47ca3bd Mon Sep 17 00:00:00 2001 From: kamel Date: Mon, 4 Apr 2022 10:40:10 +0200 Subject: [PATCH 2/6] Add test for checking if parent invoice is of type 'situation' --- htdocs/compta/facture/class/facture.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 939db98330c..29101108d00 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2902,7 +2902,7 @@ class Facture extends CommonInvoice if (!$error && $this->type == self::TYPE_CREDIT_NOTE && $this->fk_facture_source > 0) { $invoice_situation = new Facture($this->db); $result = $invoice_situation->fetch($this->fk_facture_source); - if ($result > 0) { + if ($result > 0 && $invoice_situation->type == self::TYPE_SITUATION && $invoice_situation->situation_final == 1) { $invoice_situation->situation_final = 0; // Disable triggers because module can force situation_final to 1 by triggers (ex: SubTotal) $result = $invoice_situation->setFinal($user, 1); From 8be15e8e27dc8c51dacb510febf64db34f4bf851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?This=20Charl=C3=A8ne?= <1179011+defrance@users.noreply.github.com> Date: Mon, 11 Jul 2022 07:11:45 +0200 Subject: [PATCH 3/6] php v8 fix warning missing and bad name variables --- htdocs/commande/card.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 22505f6b921..c407d80c727 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1609,7 +1609,7 @@ if ($action == 'create' && $usercancreate) { $fk_account = $soc->fk_account; $availability_id = 0; $shipping_method_id = $soc->shipping_method_id; - $warehouse_id = $soc->warehouse_id; + $warehouse_id = $soc->fk_warehouse; $demand_reason_id = $soc->demand_reason_id; $remise_percent = $soc->remise_percent; $remise_absolue = 0; @@ -1722,7 +1722,7 @@ if ($action == 'create' && $usercancreate) { // Date delivery planned print ''.$langs->trans("DateDeliveryPlanned").''; print ''; - $date_delivery = ($date_delivery ? $date_delivery : $object->date_delivery); + $date_delivery = ($date_delivery ? $date_delivery : $object->delivery_date); print $form->selectDate($date_delivery ? $date_delivery : -1, 'liv_', 1, 1, 1); print "\n"; print ''; @@ -1803,7 +1803,10 @@ if ($action == 'create' && $usercancreate) { } // Other attributes - $parameters = array('objectsrc' => $objectsrc, 'socid'=>$socid); + if (!empty($origin) && !empty($originid) && is_object($objectsrc)) + $parameters['objectsrc'] = $objectsrc; + $parameters['socid'] = $socid; + // Note that $action and $object may be modified by hook $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); print $hookmanager->resPrint; From 796f718012be642b8812ddcd15eaf251904e0412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?This=20Charl=C3=A8ne?= <1179011+defrance@users.noreply.github.com> Date: Mon, 11 Jul 2022 07:14:46 +0200 Subject: [PATCH 4/6] Update card.php --- htdocs/commande/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index c407d80c727..5f90927860d 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1698,7 +1698,7 @@ if ($action == 'create' && $usercancreate) { // Contacts (ask contact only if thirdparty already defined). print "".$langs->trans("DefaultContact").''; print img_picto('', 'contact', 'class="pictofixedwidth"'); - print $form->selectcontacts($soc->id, $contactid, 'contactid', 1, $srccontactslist, '', 1, 'maxwidth200 widthcentpercentminusx'); + print $form->selectcontacts($soc->id, $contactid, 'contactid', 1, !empty($srccontactslist)?$srccontactslist:"", '', 1, 'maxwidth200 widthcentpercentminusx'); print ''; // Ligne info remises tiers From 204bf2e61878376e82d92f3cbf850ea466aa0895 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 11 Jul 2022 10:54:23 +0200 Subject: [PATCH 5/6] Update card.php --- htdocs/commande/card.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 5f90927860d..1e6a33e8ae8 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1803,8 +1803,10 @@ if ($action == 'create' && $usercancreate) { } // Other attributes - if (!empty($origin) && !empty($originid) && is_object($objectsrc)) + $parameters = array(); + if (!empty($origin) && !empty($originid) && is_object($objectsrc)) { $parameters['objectsrc'] = $objectsrc; + } $parameters['socid'] = $socid; // Note that $action and $object may be modified by hook From 490944baac510625944a2f3102df3abc8e11d4bb Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Mon, 11 Jul 2022 17:29:26 +0200 Subject: [PATCH 6/6] Fix php 8 warning --- htdocs/comm/action/card.php | 2 +- htdocs/core/class/commonobject.class.php | 50 ++++++++++--------- htdocs/fourn/commande/list.php | 2 +- .../template/myobject_agenda.php | 2 +- 4 files changed, 29 insertions(+), 27 deletions(-) diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index 351ab9212bc..933f6534d55 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -1031,7 +1031,7 @@ if ($action == 'create') { // Recurring event $userepeatevent = ($conf->global->MAIN_FEATURES_LEVEL == 2 ? 1 : 0); - if ($userepeatevent) { + if ($userepeatevent && !empty($object->recurid)) { // Repeat //print ''; print '        
'; diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index a6d29aa6fab..8a2d093448c 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -4986,7 +4986,7 @@ abstract class CommonObject } $text .= ' - '.(!empty($line->label) ? $line->label : $label); - $description .= (!empty($conf->global->PRODUIT_DESC_IN_FORM) ? '' : dol_htmlentitiesbr($line->description)); // Description is what to show on popup. We shown nothing if already into desc. + $description .= (!empty($conf->global->PRODUIT_DESC_IN_FORM) ? '' : (!empty($line->description) ? dol_htmlentitiesbr($line->description) : '')); // Description is what to show on popup. We shown nothing if already into desc. } $line->pu_ttc = price2num((!empty($line->subprice) ? $line->subprice : 0) * (1 + ((!empty($line->tva_tx) ? $line->tva_tx : 0) / 100)), 'MU'); @@ -7495,33 +7495,35 @@ abstract class CommonObject $resql = $this->db->query($sql); if ($resql) { $value = ''; // value was used, so now we reste it to use it to build final output + $numrows = $this->db->num_rows($resql); + if ($numrows) { + $obj = $this->db->fetch_object($resql); - $obj = $this->db->fetch_object($resql); + // Several field into label (eq table:code|libelle:rowid) + $fields_label = explode('|', $InfoFieldList[1]); - // Several field into label (eq table:code|libelle:rowid) - $fields_label = explode('|', $InfoFieldList[1]); - - if (is_array($fields_label) && count($fields_label) > 1) { - foreach ($fields_label as $field_toshow) { - $translabel = ''; - if (!empty($obj->$field_toshow)) { - $translabel = $langs->trans($obj->$field_toshow); + if (is_array($fields_label) && count($fields_label) > 1) { + foreach ($fields_label as $field_toshow) { + $translabel = ''; + if (!empty($obj->$field_toshow)) { + $translabel = $langs->trans($obj->$field_toshow); + } + if ($translabel != $field_toshow) { + $value .= dol_trunc($translabel, 18).' '; + } else { + $value .= $obj->$field_toshow.' '; + } } - if ($translabel != $field_toshow) { - $value .= dol_trunc($translabel, 18).' '; - } else { - $value .= $obj->$field_toshow.' '; - } - } - } else { - $translabel = ''; - if (!empty($obj->{$InfoFieldList[1]})) { - $translabel = $langs->trans($obj->{$InfoFieldList[1]}); - } - if ($translabel != $obj->{$InfoFieldList[1]}) { - $value = dol_trunc($translabel, 18); } else { - $value = $obj->{$InfoFieldList[1]}; + $translabel = ''; + if (!empty($obj->{$InfoFieldList[1]})) { + $translabel = $langs->trans($obj->{$InfoFieldList[1]}); + } + if ($translabel != $obj->{$InfoFieldList[1]}) { + $value = dol_trunc($translabel, 18); + } else { + $value = $obj->{$InfoFieldList[1]}; + } } } } else { diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 22c4921b5b1..91b92523e11 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -1122,7 +1122,7 @@ if ($resql) { $url .= '&socid='.((int) $socid); $url .= '&backtopage='.urlencode(DOL_URL_ROOT.'/fourn/commande/list.php?socid='.((int) $socid)); } - $newcardbutton = dolGetButtonTitle($langs->trans('NewSupplierOrderShort'), '', 'fa fa-plus-circle', $url, '', $permissitiontoadd); + $newcardbutton = dolGetButtonTitle($langs->trans('NewSupplierOrderShort'), '', 'fa fa-plus-circle', $url, '', $permissiontoadd); // Lines of title fields print '
'; diff --git a/htdocs/modulebuilder/template/myobject_agenda.php b/htdocs/modulebuilder/template/myobject_agenda.php index 6b6f60bf8c6..740d419719a 100644 --- a/htdocs/modulebuilder/template/myobject_agenda.php +++ b/htdocs/modulebuilder/template/myobject_agenda.php @@ -290,7 +290,7 @@ if ($object->id > 0) { print '
'; if (isModEnabled('agenda') && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read))) { - $param = '&id='.$object->id.'&socid='.$socid; + $param = '&id='.$object->id.(!empty($socid) ? '&socid='.$socid : ''); if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { $param .= '&contextpage='.urlencode($contextpage); }