From f7556e7ad22779c0db2e24ee50744b9504e58f02 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 19 Oct 2017 19:06:48 +0200 Subject: [PATCH] FIX make of link to other object during creation --- htdocs/comm/propal/class/propal.class.php | 51 +++++++++++++++--- htdocs/commande/class/api_orders.class.php | 5 +- htdocs/commande/class/commande.class.php | 9 +++- .../facture/class/facture-rec.class.php | 47 +++++++++++----- htdocs/compta/facture/class/facture.class.php | 9 +++- htdocs/contrat/class/contrat.class.php | 11 ++-- .../class/fournisseur.commande.class.php | 53 +++++++++++++------ .../fourn/class/fournisseur.facture.class.php | 37 ++++++++++++- .../class/supplier_proposal.class.php | 41 +++++++++++--- 9 files changed, 208 insertions(+), 55 deletions(-) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index e7eeaab0c7e..25d488e7316 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -960,9 +960,51 @@ class Propal extends CommonObject $resql=$this->db->query($sql); if (! $resql) $error++; + if (! empty($this->linkedObjectsIds) && empty($this->linked_objects)) // To use new linkedObjectsIds instead of old linked_objects + { + $this->linked_objects = $this->linkedObjectsIds; // TODO Replace linked_objects with linkedObjectsIds + } + + // Add object linked + if (! $error && $this->id && is_array($this->linked_objects) && ! empty($this->linked_objects)) + { + foreach($this->linked_objects as $origin => $tmp_origin_id) + { + if (is_array($tmp_origin_id)) // New behaviour, if linked_object can have several links per type, so is something like array('contract'=>array(id1, id2, ...)) + { + foreach($tmp_origin_id as $origin_id) + { + $ret = $this->add_object_linked($origin, $origin_id); + if (! $ret) + { + $this->error=$this->db->lasterror(); + $error++; + } + } + } + else // Old behaviour, if linked_object has only one link per type, so is something like array('contract'=>id1)) + { + $origin_id = $tmp_origin_id; + $ret = $this->add_object_linked($origin, $origin_id); + if (! $ret) + { + $this->error=$this->db->lasterror(); + $error++; + } + } + } + } + + // Add linked object (deprecated, use ->linkedObjectsIds instead) + if (! $error && $this->origin && $this->origin_id) + { + $ret = $this->add_object_linked(); + if (! $ret) dol_print_error($this->db); + } + /* * Insertion du detail des produits dans la base - */ + */ if (! $error) { $fk_parent_line=0; @@ -1016,13 +1058,6 @@ class Propal extends CommonObject } } - // Add linked object - if (! $error && $this->origin && $this->origin_id) - { - $ret = $this->add_object_linked(); - if (! $ret) dol_print_error($this->db); - } - // Set delivery address if (! $error && $this->fk_delivery_address) { diff --git a/htdocs/commande/class/api_orders.class.php b/htdocs/commande/class/api_orders.class.php index 9acfd6cc245..f2c8de6da5b 100644 --- a/htdocs/commande/class/api_orders.class.php +++ b/htdocs/commande/class/api_orders.class.php @@ -196,6 +196,7 @@ class Orders extends DolibarrApi } $this->commande->lines = $lines; }*/ + if ($this->commande->create(DolibarrApiAccess::$user) < 0) { throw new RestException(500, "Error creating order", array_merge(array($this->commande->error), $this->commande->errors)); } @@ -386,7 +387,7 @@ class Orders extends DolibarrApi /** * Update order general fields (won't touch lines of order) * - * @param int $id Id of commande to update + * @param int $id Id of order to update * @param array $request_data Datas * * @return int @@ -398,7 +399,7 @@ class Orders extends DolibarrApi $result = $this->commande->fetch($id); if( ! $result ) { - throw new RestException(404, 'Commande not found'); + throw new RestException(404, 'Order not found'); } if( ! DolibarrApi::_checkAccessToResource('commande',$this->commande->id)) { diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 1eec56fdbab..c5271c34744 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -875,6 +875,11 @@ class Commande extends CommonOrder { $this->ref = $initialref; + if (! empty($this->linkedObjectsIds) && empty($this->linked_objects)) // To use new linkedObjectsIds instead of old linked_objects + { + $this->linked_objects = $this->linkedObjectsIds; // TODO Replace linked_objects with linkedObjectsIds + } + // Add object linked if (! $error && $this->id && is_array($this->linked_objects) && ! empty($this->linked_objects)) { @@ -887,7 +892,7 @@ class Commande extends CommonOrder $ret = $this->add_object_linked($origin, $origin_id); if (! $ret) { - dol_print_error($this->db); + $this->error=$this->db->lasterror(); $error++; } } @@ -898,7 +903,7 @@ class Commande extends CommonOrder $ret = $this->add_object_linked($origin, $origin_id); if (! $ret) { - dol_print_error($this->db); + $this->error=$this->db->lasterror(); $error++; } } diff --git a/htdocs/compta/facture/class/facture-rec.class.php b/htdocs/compta/facture/class/facture-rec.class.php index cbeba2828e7..779f4545f77 100644 --- a/htdocs/compta/facture/class/facture-rec.class.php +++ b/htdocs/compta/facture/class/facture-rec.class.php @@ -201,19 +201,40 @@ class FactureRec extends CommonInvoice } } - // Add object linked - if (! $error && $this->id && is_array($this->linked_objects) && ! empty($this->linked_objects)) - { - foreach($this->linked_objects as $origin => $origin_id) - { - $ret = $this->add_object_linked($origin, $origin_id); - if (! $ret) - { - $this->error=$this->db->lasterror(); - $error++; - } - } - } + if (! empty($this->linkedObjectsIds) && empty($this->linked_objects)) // To use new linkedObjectsIds instead of old linked_objects + { + $this->linked_objects = $this->linkedObjectsIds; // TODO Replace linked_objects with linkedObjectsIds + } + + // Add object linked + if (! $error && $this->id && is_array($this->linked_objects) && ! empty($this->linked_objects)) + { + foreach($this->linked_objects as $origin => $tmp_origin_id) + { + if (is_array($tmp_origin_id)) // New behaviour, if linked_object can have several links per type, so is something like array('contract'=>array(id1, id2, ...)) + { + foreach($tmp_origin_id as $origin_id) + { + $ret = $this->add_object_linked($origin, $origin_id); + if (! $ret) + { + $this->error=$this->db->lasterror(); + $error++; + } + } + } + else // Old behaviour, if linked_object has only one link per type, so is something like array('contract'=>id1)) + { + $origin_id = $tmp_origin_id; + $ret = $this->add_object_linked($origin, $origin_id); + if (! $ret) + { + $this->error=$this->db->lasterror(); + $error++; + } + } + } + } if ($error) { diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 37f5166bc53..c0be06da6bd 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -442,6 +442,11 @@ class Facture extends CommonInvoice $resql=$this->db->query($sql); if (! $resql) $error++; + if (! empty($this->linkedObjectsIds) && empty($this->linked_objects)) // To use new linkedObjectsIds instead of old linked_objects + { + $this->linked_objects = $this->linkedObjectsIds; // TODO Replace linked_objects with linkedObjectsIds + } + // Add object linked if (! $error && $this->id && is_array($this->linked_objects) && ! empty($this->linked_objects)) { @@ -454,7 +459,7 @@ class Facture extends CommonInvoice $ret = $this->add_object_linked($origin, $origin_id); if (! $ret) { - dol_print_error($this->db); + $this->error=$this->db->lasterror(); $error++; } } @@ -465,7 +470,7 @@ class Facture extends CommonInvoice $ret = $this->add_object_linked($origin, $origin_id); if (! $ret) { - dol_print_error($this->db); + $this->error=$this->db->lasterror(); $error++; } } diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 937cce82474..ca8d6fc9ddb 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -946,7 +946,12 @@ class Contrat extends CommonObject if (! $error) { - // Add object linked + if (! empty($this->linkedObjectsIds) && empty($this->linked_objects)) // To use new linkedObjectsIds instead of old linked_objects + { + $this->linked_objects = $this->linkedObjectsIds; // TODO Replace linked_objects with linkedObjectsIds + } + + // Add object linked if (! $error && $this->id && is_array($this->linked_objects) && ! empty($this->linked_objects)) { foreach($this->linked_objects as $origin => $tmp_origin_id) @@ -958,7 +963,7 @@ class Contrat extends CommonObject $ret = $this->add_object_linked($origin, $origin_id); if (! $ret) { - dol_print_error($this->db); + $this->error=$this->db->lasterror(); $error++; } } @@ -969,7 +974,7 @@ class Contrat extends CommonObject $ret = $this->add_object_linked($origin, $origin_id); if (! $ret) { - dol_print_error($this->db); + $this->error=$this->db->lasterror(); $error++; } } diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index eb872e17270..50e805f1089 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -1197,23 +1197,44 @@ class CommandeFournisseur extends CommonOrder { // Add link with price request and supplier order if ($this->id) - { - $this->ref="(PROV".$this->id.")"; + { + $this->ref="(PROV".$this->id.")"; - // Add object linked - if (is_array($this->linked_objects) && ! empty($this->linked_objects)) - { - foreach($this->linked_objects as $origin => $origin_id) - { - $ret = $this->add_object_linked($origin, $origin_id); - if (! $ret) - { - dol_print_error($this->db); - $error++; - } - } - } - } + if (! empty($this->linkedObjectsIds) && empty($this->linked_objects)) // To use new linkedObjectsIds instead of old linked_objects + { + $this->linked_objects = $this->linkedObjectsIds; // TODO Replace linked_objects with linkedObjectsIds + } + + // Add object linked + if (! $error && $this->id && is_array($this->linked_objects) && ! empty($this->linked_objects)) + { + foreach($this->linked_objects as $origin => $tmp_origin_id) + { + if (is_array($tmp_origin_id)) // New behaviour, if linked_object can have several links per type, so is something like array('contract'=>array(id1, id2, ...)) + { + foreach($tmp_origin_id as $origin_id) + { + $ret = $this->add_object_linked($origin, $origin_id); + if (! $ret) + { + dol_print_error($this->db); + $error++; + } + } + } + else // Old behaviour, if linked_object has only one link per type, so is something like array('contract'=>id1)) + { + $origin_id = $tmp_origin_id; + $ret = $this->add_object_linked($origin, $origin_id); + if (! $ret) + { + dol_print_error($this->db); + $error++; + } + } + } + } + } if (! $error) { diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index d4edc4a01cd..9a9702ab718 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -306,7 +306,42 @@ class FactureFournisseur extends CommonInvoice $resql=$this->db->query($sql); if (! $resql) $error++; - // Add object linked + if (! empty($this->linkedObjectsIds) && empty($this->linked_objects)) // To use new linkedObjectsIds instead of old linked_objects + { + $this->linked_objects = $this->linkedObjectsIds; // TODO Replace linked_objects with linkedObjectsIds + } + + // Add object linked + if (! $error && $this->id && is_array($this->linked_objects) && ! empty($this->linked_objects)) + { + foreach($this->linked_objects as $origin => $tmp_origin_id) + { + if (is_array($tmp_origin_id)) // New behaviour, if linked_object can have several links per type, so is something like array('contract'=>array(id1, id2, ...)) + { + foreach($tmp_origin_id as $origin_id) + { + $ret = $this->add_object_linked($origin, $origin_id); + if (! $ret) + { + dol_print_error($this->db); + $error++; + } + } + } + else // Old behaviour, if linked_object has only one link per type, so is something like array('contract'=>id1)) + { + $origin_id = $tmp_origin_id; + $ret = $this->add_object_linked($origin, $origin_id); + if (! $ret) + { + dol_print_error($this->db); + $error++; + } + } + } + } + + // Add linked object (deprecated, use ->linkedObjectsIds instead) if (! $error && $this->id && ! empty($this->origin) && ! empty($this->origin_id)) { $ret = $this->add_object_linked(); diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index c37555efdb7..2751e89763c 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -848,9 +848,41 @@ class SupplierProposal extends CommonObject $resql=$this->db->query($sql); if (! $resql) $error++; + if (! empty($this->linkedObjectsIds) && empty($this->linked_objects)) // To use new linkedObjectsIds instead of old linked_objects + { + $this->linked_objects = $this->linkedObjectsIds; // TODO Replace linked_objects with linkedObjectsIds + } + + // Add object linked + if (! $error && $this->id && is_array($this->linked_objects) && ! empty($this->linked_objects)) + { + foreach($this->linked_objects as $origin => $tmp_origin_id) + { + if (is_array($tmp_origin_id)) // New behaviour, if linked_object can have several links per type, so is something like array('contract'=>array(id1, id2, ...)) + { + foreach($tmp_origin_id as $origin_id) + { + $ret = $this->add_object_linked($origin, $origin_id); + if (! $ret) + { + dol_print_error($this->db); + $error++; + } + } + } + } + } + + // Add linked object (deprecated, use ->linkedObjectsIds instead) + if (! $error && $this->origin && $this->origin_id) + { + $ret = $this->add_object_linked(); + if (! $ret) dol_print_error($this->db); + } + /* * Insertion du detail des produits dans la base - */ + */ if (! $error) { $fk_parent_line=0; @@ -903,13 +935,6 @@ class SupplierProposal extends CommonObject } } - // Add linked object - if (! $error && $this->origin && $this->origin_id) - { - $ret = $this->add_object_linked(); - if (! $ret) dol_print_error($this->db); - } - if (! $error) { // Mise a jour infos denormalisees