Merge pull request #10922 from altatof/cloneorder

clone of order like in propal (ref_client, contacts)
This commit is contained in:
Laurent Destailleur 2019-03-31 18:25:48 +02:00 committed by GitHub
commit 31963be6a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1075,7 +1075,7 @@ class Commande extends CommonOrder
*/ */
public function createFromClone($socid = 0) public function createFromClone($socid = 0)
{ {
global $user,$hookmanager; global $conf, $user,$hookmanager;
$error=0; $error=0;
@ -1085,69 +1085,88 @@ class Commande extends CommonOrder
foreach($this->lines as $line) foreach($this->lines as $line)
$line->fetch_optionals(); $line->fetch_optionals();
// Load source object // Load source object
$objFrom = clone $this; $objFrom = clone $this;
// Change socid if needed // Change socid if needed
if (! empty($socid) && $socid != $this->socid) if (! empty($socid) && $socid != $this->socid)
{
$objsoc = new Societe($this->db);
if ($objsoc->fetch($socid)>0)
{ {
$objsoc = new Societe($this->db); $this->socid = $objsoc->id;
$this->cond_reglement_id = (! empty($objsoc->cond_reglement_id) ? $objsoc->cond_reglement_id : 0);
if ($objsoc->fetch($socid)>0) $this->mode_reglement_id = (! empty($objsoc->mode_reglement_id) ? $objsoc->mode_reglement_id : 0);
{ $this->fk_project = 0;
$this->socid = $objsoc->id; $this->fk_delivery_address = 0;
$this->cond_reglement_id = (! empty($objsoc->cond_reglement_id) ? $objsoc->cond_reglement_id : 0);
$this->mode_reglement_id = (! empty($objsoc->mode_reglement_id) ? $objsoc->mode_reglement_id : 0);
$this->fk_project = 0;
$this->fk_delivery_address = 0;
}
// TODO Change product price if multi-prices
} }
$this->id=0; // TODO Change product price if multi-prices
$this->ref = ''; }
$this->statut=self::STATUS_DRAFT;
// Clear fields $this->id=0;
$this->user_author_id = $user->id; $this->ref = '';
$this->user_valid = ''; $this->statut=self::STATUS_DRAFT;
$this->date = dol_now();
$this->date_commande = dol_now();
$this->date_creation = '';
$this->date_validation = '';
$this->ref_client = '';
// Create clone // Clear fields
$this->context['createfromclone'] = 'createfromclone'; $this->user_author_id = $user->id;
$result=$this->create($user); $this->user_valid = '';
if ($result < 0) $error++; $this->date = dol_now();
$this->date_commande = dol_now();
$this->date_creation = '';
$this->date_validation = '';
if (empty($conf->global->MAIN_KEEP_REF_CUSTOMER_ON_CLONING)) $this->ref_client = '';
if (! $error) // Create clone
$this->context['createfromclone'] = 'createfromclone';
$result=$this->create($user);
if ($result < 0) $error++;
if (! $error)
{
// copy internal contacts
if ($this->copy_linked_contact($objFrom, 'internal') < 0)
{ {
// Hook of thirdparty module $error++;
if (is_object($hookmanager))
{
$parameters=array('objFrom'=>$objFrom);
$action='';
$reshook=$hookmanager->executeHooks('createFrom', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) $error++;
}
} }
}
unset($this->context['createfromclone']); if (! $error)
{
// copy external contacts if same company
if ($this->socid == $objFrom->socid)
{
if ($this->copy_linked_contact($objFrom, 'external') < 0)
$error++;
}
}
// End if (! $error)
if (! $error) {
// Hook of thirdparty module
if (is_object($hookmanager))
{ {
$this->db->commit(); $parameters=array('objFrom'=>$objFrom);
return $this->id; $action='';
} $reshook=$hookmanager->executeHooks('createFrom', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
else if ($reshook < 0) $error++;
{
$this->db->rollback();
return -1;
} }
}
unset($this->context['createfromclone']);
// End
if (! $error)
{
$this->db->commit();
return $this->id;
}
else
{
$this->db->rollback();
return -1;
}
} }
@ -1367,7 +1386,7 @@ class Commande extends CommonOrder
// Check parameters // Check parameters
if ($type < 0) return -1; if ($type < 0) return -1;
if ($date_start && $date_end && $date_start > $date_end) { if ($date_start && $date_end && $date_start > $date_end) {
$langs->load("errors"); $langs->load("errors");
$this->error=$langs->trans('ErrorStartDateGreaterEnd'); $this->error=$langs->trans('ErrorStartDateGreaterEnd');
@ -2947,7 +2966,7 @@ class Commande extends CommonOrder
if (empty($txlocaltax2)) $txlocaltax2=0; if (empty($txlocaltax2)) $txlocaltax2=0;
if (empty($remise_percent)) $remise_percent=0; if (empty($remise_percent)) $remise_percent=0;
if (empty($special_code) || $special_code == 3) $special_code=0; if (empty($special_code) || $special_code == 3) $special_code=0;
if ($date_start && $date_end && $date_start > $date_end) { if ($date_start && $date_end && $date_start > $date_end) {
$langs->load("errors"); $langs->load("errors");
$this->error=$langs->trans('ErrorStartDateGreaterEnd'); $this->error=$langs->trans('ErrorStartDateGreaterEnd');
@ -2962,7 +2981,7 @@ class Commande extends CommonOrder
$txtva=price2num($txtva); $txtva=price2num($txtva);
$txlocaltax1=price2num($txlocaltax1); $txlocaltax1=price2num($txlocaltax1);
$txlocaltax2=price2num($txlocaltax2); $txlocaltax2=price2num($txlocaltax2);
$this->db->begin(); $this->db->begin();
// Calcul du total TTC et de la TVA pour la ligne a partir de // Calcul du total TTC et de la TVA pour la ligne a partir de