From 4f6304624ad111f3b35e98da7ff78b9d20dd964e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 26 Oct 2017 12:32:22 +0200 Subject: [PATCH] NEW Add api validate and close on contracts --- htdocs/contrat/class/api_contracts.class.php | 70 +++++++++++++++++--- htdocs/contrat/class/contrat.class.php | 50 ++++++++++---- htdocs/langs/en_US/website.lang | 1 + 3 files changed, 100 insertions(+), 21 deletions(-) diff --git a/htdocs/contrat/class/api_contracts.class.php b/htdocs/contrat/class/api_contracts.class.php index 69f1d541988..da364e925e4 100644 --- a/htdocs/contrat/class/api_contracts.class.php +++ b/htdocs/contrat/class/api_contracts.class.php @@ -269,8 +269,8 @@ class Contracts extends DolibarrApi $request_data->localtax2_tx, $request_data->fk_product, $request_data->remise_percent, - $request_data->date_start, // date ouverture = date_start_real - $request_data->date_end, // date_cloture = date_end_real + $request_data->date_start, // date_start = date planned start, date ouverture = date_start_real + $request_data->date_end, // date_end = date planned end, date_cloture = date_end_real $request_data->HT, $request_data->subprice_excl_tax, $request_data->info_bits, @@ -450,7 +450,6 @@ class Contracts extends DolibarrApi * Validate an contract * * @param int $id Contract ID - * @param int $idwarehouse Warehouse ID * @param int $notrigger 1=Does not execute triggers, 0= execute triggers * * @url POST {id}/validate @@ -460,12 +459,10 @@ class Contracts extends DolibarrApi * Error message: "Forbidden: Content type `text/plain` is not supported." * Workaround: send this in the body * { - * "idwarehouse": 0, * "notrigger": 0 * } */ - /* - function validate($id, $idwarehouse=0, $notrigger=0) + function validate($id, $notrigger=0) { if(! DolibarrApiAccess::$user->rights->contrat->creer) { throw new RestException(401); @@ -479,7 +476,7 @@ class Contracts extends DolibarrApi throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); } - $result = $this->contract->valid(DolibarrApiAccess::$user, $idwarehouse, $notrigger); + $result = $this->contract->validate(DolibarrApiAccess::$user, '', $notrigger); if ($result == 0) { throw new RestException(500, 'Error nothing done. May be object is already validated'); } @@ -494,7 +491,54 @@ class Contracts extends DolibarrApi ) ); } - */ + + /** + * Close all services of a contract + * + * @param int $id Contract ID + * @param int $notrigger 1=Does not execute triggers, 0= execute triggers + * + * @url POST {id}/close + * + * @return array + * FIXME An error 403 is returned if the request has an empty body. + * Error message: "Forbidden: Content type `text/plain` is not supported." + * Workaround: send this in the body + * { + * "notrigger": 0 + * } + */ + function close($id, $notrigger=0) + { + if(! DolibarrApiAccess::$user->rights->contrat->creer) { + throw new RestException(401); + } + $result = $this->contract->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Contract not found'); + } + + if( ! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $result = $this->contract->closeAll(DolibarrApiAccess::$user, $notrigger); + if ($result == 0) { + throw new RestException(500, 'Error nothing done. May be object is already close'); + } + if ($result < 0) { + throw new RestException(500, 'Error when closing Contract: '.$this->contract->error); + } + + return array( + 'success' => array( + 'code' => 200, + 'message' => 'Contract closed (Ref='.$this->contract->ref.'). All services were closed.' + ) + ); + } + + /** * Clean sensible object datas @@ -508,6 +552,16 @@ class Contracts extends DolibarrApi unset($object->address); + unset($object->date_ouverture_prevue); + unset($object->date_ouverture); + unset($object->date_fin_validite); + unset($object->date_cloture); + unset($object->date_debut_prevue); + unset($object->date_debut_reel); + unset($object->date_fin_prevue); + unset($object->date_fin_reel); + unset($object->civility_id); + return $object; } diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 86c85b19d0a..6012b7430ce 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -298,12 +298,13 @@ class Contrat extends CommonObject } /** - * Close all lines of a contract + * Close all lines of a contract * - * @param User $user Object User making action - * @return int <0 if KO, >0 if OK + * @param User $user Object User making action + * @param int $notrigger 1=Does not execute triggers, 0= execute triggers + * @return int <0 if KO, >0 if OK */ - function closeAll($user) + function closeAll(User $user, $notrigger=0) { $this->db->begin(); @@ -330,7 +331,7 @@ class Contrat extends CommonObject if ($this->statut == 0) { - $result=$this->validate($user); + $result=$this->validate($user, '', $notrigger); if ($result < 0) $ok=false; } @@ -355,7 +356,7 @@ class Contrat extends CommonObject * @param int $notrigger 1=Does not execute triggers, 0= execute triggers * @return int <0 if KO, >0 if OK */ - function validate($user, $force_number='', $notrigger=0) + function validate(User $user, $force_number='', $notrigger=0) { require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; global $langs, $conf; @@ -741,12 +742,12 @@ class Contrat extends CommonObject $line->fk_unit = $objp->fk_unit; $line->ref = $objp->product_ref; // deprecated - if (empty($objp->fk_product)) + if (empty($objp->fk_product)) { $line->label = ''; // deprecated $line->libelle = $objp->description; // deprecated } - else + else { $line->label = $objp->product_label; // deprecated $line->libelle = $objp->product_label; // deprecated @@ -757,11 +758,15 @@ class Contrat extends CommonObject $line->description = $objp->description; + $line->date_start = $this->db->jdate($objp->date_ouverture_prevue); + $line->date_start_real = $this->db->jdate($objp->date_ouverture); + $line->date_end = $this->db->jdate($objp->date_fin_validite); + $line->date_end_real = $this->db->jdate($objp->date_cloture); + // For backward compatibility $line->date_ouverture_prevue = $this->db->jdate($objp->date_ouverture_prevue); $line->date_ouverture = $this->db->jdate($objp->date_ouverture); $line->date_fin_validite = $this->db->jdate($objp->date_fin_validite); $line->date_cloture = $this->db->jdate($objp->date_cloture); - // For backward compatibility $line->date_debut_prevue = $this->db->jdate($objp->date_ouverture_prevue); $line->date_debut_reel = $this->db->jdate($objp->date_ouverture); $line->date_fin_prevue = $this->db->jdate($objp->date_fin_validite); @@ -2242,10 +2247,10 @@ class Contrat extends CommonObject $line->total_ht=90; $line->total_ttc=107.64; // 90 * 1.196 $line->total_tva=17.64; - $line->date_ouverture = dol_now() - 200000; - $line->date_ouverture_prevue = dol_now() - 500000; - $line->date_fin_validite = dol_now() + 500000; - $line->date_cloture = dol_now() - 100000; + $line->date_start = dol_now() - 500000; + $line->date_start_real = dol_now() - 200000; + $line->date_end = dol_now() + 500000; + $line->date_end_real = dol_now() - 100000; if ($num_prods > 0) { $prodid = mt_rand(1, $num_prods); @@ -2458,6 +2463,12 @@ class ContratLigne extends CommonObjectLine var $product_label; var $date_commande; + + var $date_start; // date start planned + var $date_start_real; // date start real + var $date_end; // date end planned + var $date_end_real; // date end real + // For backward compatibility var $date_ouverture_prevue; // date start planned var $date_ouverture; // date start real var $date_fin_validite; // date end planned @@ -2693,10 +2704,17 @@ class ContratLigne extends CommonObjectLine $this->label = $obj->label; // deprecated. We do not use this field. Only ref and label of product, and description of contract line $this->description = $obj->description; $this->date_commande = $this->db->jdate($obj->date_commande); + + $this->date_start = $this->db->jdate($obj->date_ouverture_prevue); + $this->date_start_real = $this->db->jdate($obj->date_ouverture); + $this->date_end = $this->db->jdate($obj->date_fin_validite); + $this->date_end_real = $this->db->jdate($obj->date_cloture); + // For backward compatibility $this->date_ouverture_prevue = $this->db->jdate($obj->date_ouverture_prevue); $this->date_ouverture = $this->db->jdate($obj->date_ouverture); $this->date_fin_validite = $this->db->jdate($obj->date_fin_validite); $this->date_cloture = $this->db->jdate($obj->date_cloture); + $this->tva_tx = $obj->tva_tx; $this->vat_src_code = $obj->vat_src_code; $this->localtax1_tx = $obj->localtax1_tx; @@ -2784,6 +2802,12 @@ class ContratLigne extends CommonObjectLine if (empty($this->localtax1_tx)) $this->localtax1_tx = 0; if (empty($this->localtax2_tx)) $this->localtax2_tx = 0; if (empty($this->remise_percent)) $this->remise_percent = 0; + // For backward compatibility + if (empty($this->date_start)) $this->date_start=$this->date_ouverture_prevue; + if (empty($this->date_start_real)) $this->date_start=$this->date_ouverture; + if (empty($this->date_end)) $this->date_start=$this->date_fin_validite; + if (empty($this->date_end_real)) $this->date_start=$this->date_cloture; + // Check parameters // Put here code to add control on parameters values diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index eb1bab43905..567d152b281 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -41,6 +41,7 @@ YouCanEditHtmlSourceckeditor=You can edit HTML source code using the "Source" bu YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $langs, $db, $mysoc, $user, $website.

You can also include content of another Page/Container with the following syntax:
<?php dolIncludeHtmlContent($websitekey.'/alias_of_container_to_include.php'); ?>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=relative_dir/filename.ext">
For same file into documents/ecm (open access using the sharing hash key), syntax is:
<a href="/document.php?modulepart=ecm&file=relative_dir/filename.ext&hashp=publicsharekeyoffile">
For a file into documents/media (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=relative_dir/filename.ext">

To include an image stored into the documents directory, use the viewimage.php wrapper:
Example, for an image into documents/media (open access), syntax is:
<a href="/viewimage.php?modulepart=medias&file=relative_dir/filename.ext">
ClonePage=Clone page/container CloneSite=Clone site +SiteAdded=Web site added ConfirmClonePage=Please enter code/alias of new page and if it is a translation of the cloned page. PageIsANewTranslation=The new page is a translation of the current page ? LanguageMustNotBeSameThanClonedPage=You clone a page as a translation. The language of the new page must be different than language of source page.