diff --git a/build/rpm/conf.php b/build/rpm/conf.php index 78ac824b12f..2e8bd46cf0f 100755 --- a/build/rpm/conf.php +++ b/build/rpm/conf.php @@ -1,8 +1,8 @@ \ No newline at end of file diff --git a/htdocs/cashdesk/class/Facturation.class.php b/htdocs/cashdesk/class/Facturation.class.php index f5c28edfab4..fcad5848c17 100644 --- a/htdocs/cashdesk/class/Facturation.class.php +++ b/htdocs/cashdesk/class/Facturation.class.php @@ -75,7 +75,7 @@ class Facturation public function Facturation() { $this->raz(); - $this->raz_pers(); + $this->razPers(); } @@ -115,7 +115,7 @@ class Facturation // Define part of HT, VAT, TTC - $resultarray=calcul_price_total($this->qte,$this->prix(),$this->remise_percent(),$vat_rate,0,0,0,'HT',0); + $resultarray=calcul_price_total($this->qte,$this->prix(),$this->remisePercent(),$vat_rate,0,0,0,'HT',0); // Calcul du total ht sans remise $total_ht = $resultarray[0]; @@ -123,14 +123,14 @@ class Facturation $total_ttc = $resultarray[2]; // Calcul du montant de la remise - if ($this->remise_percent()) + if ($this->remisePercent()) { - $remise_percent = $this->remise_percent(); + $remise_percent = $this->remisePercent(); } else { $remise_percent = 0; } $montant_remise_ht = ($resultarray[6] - $resultarray[0]); - $this->montant_remise($montant_remise_ht); + $this->montantRemise($montant_remise_ht); $product = new Product($db); $product->fetch($this->id); @@ -234,8 +234,8 @@ class Facturation $this->ref('RESET'); $this->qte('RESET'); $this->stock('RESET'); - $this->remise_percent('RESET'); - $this->montant_remise('RESET'); + $this->remisePercent('RESET'); + $this->montantRemise('RESET'); $this->prix('RESET'); $this->tva('RESET'); } @@ -245,13 +245,13 @@ class Facturation * * @return void */ - public function raz_pers() + private function razPers() { - $this->num_facture('RESET'); + $this->numInvoice('RESET'); $this->getSetPaymentMode('RESET'); - $this->montant_encaisse('RESET'); - $this->montant_rendu('RESET'); - $this->paiement_le('RESET'); + $this->montantEncaisse('RESET'); + $this->montantRendu('RESET'); + $this->paiementLe('RESET'); $this->prix_total_ht('RESET'); $this->montant_tva('RESET'); @@ -368,7 +368,7 @@ class Facturation * @param string $aRemisePercent Discount * @return string Discount */ - public function remise_percent($aRemisePercent=null) + public function remisePercent($aRemisePercent=null) { if ( !$aRemisePercent ) @@ -392,7 +392,7 @@ class Facturation * @param int $aMontantRemise Amount * @return string Amount */ - public function montant_remise($aMontantRemise=null) + public function montantRemise($aMontantRemise=null) { if ( !$aMontantRemise ) { @@ -467,7 +467,7 @@ class Facturation * @param string $aNumFacture Invoice ref * @return string Invoice ref */ - public function num_facture( $aNumFacture=null ) + public function numInvoice( $aNumFacture=null ) { if ( !$aNumFacture ) { @@ -516,7 +516,7 @@ class Facturation * @param int $aMontantEncaisse Amount * @return int Amount */ - public function montant_encaisse( $aMontantEncaisse=null ) + public function montantEncaisse( $aMontantEncaisse=null ) { if ( !$aMontantEncaisse ) { @@ -541,7 +541,7 @@ class Facturation * @param int $aMontantRendu Amount * @return int Amount */ - public function montant_rendu( $aMontantRendu=null ) + public function montantRendu( $aMontantRendu=null ) { if ( !$aMontantRendu ) { @@ -565,7 +565,7 @@ class Facturation * @param date $aPaiementLe Date * @return date Date */ - public function paiement_le( $aPaiementLe=null ) + public function paiementLe( $aPaiementLe=null ) { if ( !$aPaiementLe ) { diff --git a/htdocs/cashdesk/facturation.php b/htdocs/cashdesk/facturation.php index 310ee0af9da..3d1f28768bf 100644 --- a/htdocs/cashdesk/facturation.php +++ b/htdocs/cashdesk/facturation.php @@ -154,9 +154,9 @@ $tab_tva = $ret; // Reinitialisation du mode de paiement, en cas de retour aux achats apres validation $obj_facturation->getSetPaymentMode('RESET'); -$obj_facturation->montant_encaisse('RESET'); -$obj_facturation->montant_rendu('RESET'); -$obj_facturation->paiement_le('RESET'); +$obj_facturation->montantEncaisse('RESET'); +$obj_facturation->montantRendu('RESET'); +$obj_facturation->paiementLe('RESET'); // Affichage des templates diff --git a/htdocs/cashdesk/facturation_verif.php b/htdocs/cashdesk/facturation_verif.php index 556f895e1df..408e36bc725 100644 --- a/htdocs/cashdesk/facturation_verif.php +++ b/htdocs/cashdesk/facturation_verif.php @@ -36,7 +36,7 @@ switch ( $_GET['action'] ) $sql.= " FROM ".MAIN_DB_PREFIX."product as p"; if ($conf->stock->enabled && !empty($conf_fkentrepot)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_stock as ps ON p.rowid = ps.fk_product AND ps.fk_entrepot = ".$conf_fkentrepot; $sql.= " WHERE p.entity IN (".getEntity('product', 1).")"; - + // Recuperation des donnees en fonction de la source (liste deroulante ou champ texte) ... if ( $_POST['hdnSource'] == 'LISTE' ) { @@ -138,7 +138,7 @@ switch ( $_GET['action'] ) { $obj_facturation->qte($_POST['txtQte']); $obj_facturation->tva($_POST['selTva']); - $obj_facturation->remise_percent($_POST['txtRemise']); + $obj_facturation->remisePercent($_POST['txtRemise']); $obj_facturation->ajoutArticle(); } diff --git a/htdocs/cashdesk/tpl/validation1.tpl.php b/htdocs/cashdesk/tpl/validation1.tpl.php index 040f0f8fd4b..fdcda6e3e7c 100644 --- a/htdocs/cashdesk/tpl/validation1.tpl.php +++ b/htdocs/cashdesk/tpl/validation1.tpl.php @@ -25,7 +25,7 @@ $langs->load("main"); - + load("main"); // Affichage des infos en fonction du mode de paiement if ( $obj_facturation->getsetPaymentMode() == 'DIF' ) { - echo (''); + echo (''); } else { - echo (''); + echo (''); } // Affichage du montant rendu (reglement en especes) - if ( $obj_facturation->montant_rendu() ) { + if ( $obj_facturation->montantRendu() ) { - echo (''); + echo (''); } diff --git a/htdocs/cashdesk/validation_verif.php b/htdocs/cashdesk/validation_verif.php index 5c149ed7b02..5bf7bdab68b 100644 --- a/htdocs/cashdesk/validation_verif.php +++ b/htdocs/cashdesk/validation_verif.php @@ -50,7 +50,7 @@ switch ($action) $invoice->type=0; $num=$invoice->getNextNumRef($company); - $obj_facturation->num_facture($num); + $obj_facturation->numInvoice($num); $obj_facturation->getSetPaymentMode($_POST['hdnChoix']); @@ -63,20 +63,20 @@ switch ($action) } if ( $mode_reglement != 'DIF') { - $obj_facturation->montant_encaisse($montant); + $obj_facturation->montantEncaisse($montant); //Determination de la somme rendue $total = $obj_facturation->prix_total_ttc(); - $encaisse = $obj_facturation->montant_encaisse(); + $encaisse = $obj_facturation->montantEncaisse(); - $obj_facturation->montant_rendu($encaisse - $total); + $obj_facturation->montantRendu($encaisse - $total); } else { //$txtDatePaiement=$_POST['txtDatePaiement']; $datePaiement=dol_mktime(0,0,0,$_POST['txtDatePaiementmonth'],$_POST['txtDatePaiementday'],$_POST['txtDatePaiementyear']); $txtDatePaiement=dol_print_date($datePaiement,'dayrfc'); - $obj_facturation->paiement_le($txtDatePaiement); + $obj_facturation->paiementLe($txtDatePaiement); } $redirection = 'affIndex.php?menu=validation'; @@ -115,8 +115,8 @@ switch ($action) $mode_reglement_id = dol_getIdFromCode($db,'LIQ','c_paiement'); $cond_reglement_id = 0; $note .= $langs->trans("Cash")."\n"; - $note .= $langs->trans("Received").' : '.$obj_facturation->montant_encaisse()." ".$conf->currency."\n"; - $note .= $langs->trans("Rendu").' : '.$obj_facturation->montant_rendu()." ".$conf->currency."\n"; + $note .= $langs->trans("Received").' : '.$obj_facturation->montantEncaisse()." ".$conf->currency."\n"; + $note .= $langs->trans("Rendu").' : '.$obj_facturation->montantRendu()." ".$conf->currency."\n"; $note .= "\n"; $note .= '--------------------------------------'."\n\n"; break; @@ -209,10 +209,10 @@ switch ($action) // Si paiement differe ... if ( $obj_facturation->getSetPaymentMode() == 'DIF' ) { - $resultcreate=$invoice->create($user,0,dol_stringtotime($obj_facturation->paiement_le())); + $resultcreate=$invoice->create($user,0,dol_stringtotime($obj_facturation->paiementLe())); if ($resultcreate > 0) { - $resultvalid=$invoice->validate($user,$obj_facturation->num_facture()); + $resultvalid=$invoice->validate($user,$obj_facturation->numInvoice()); } else { @@ -226,7 +226,7 @@ switch ($action) $resultcreate=$invoice->create($user,0,0); if ($resultcreate > 0) { - $resultvalid=$invoice->validate($user, $obj_facturation->num_facture(), (isset($_SESSION["CASHDESK_ID_WAREHOUSE"])?$_SESSION["CASHDESK_ID_WAREHOUSE"]:0)); + $resultvalid=$invoice->validate($user, $obj_facturation->numInvoice(), (isset($_SESSION["CASHDESK_ID_WAREHOUSE"])?$_SESSION["CASHDESK_ID_WAREHOUSE"]:0)); $id = $invoice->id; @@ -235,7 +235,7 @@ switch ($action) $payment->datepaye=$now; $payment->bank_account=$conf_fkaccount; $payment->amounts[$invoice->id]=$obj_facturation->prix_total_ttc(); - $payment->note=$langs->trans("Payment").' '.$langs->trans("Invoice").' '.$obj_facturation->num_facture(); + $payment->note=$langs->trans("Payment").' '.$langs->trans("Invoice").' '.$obj_facturation->numInvoice(); $payment->paiementid=$invoice->mode_reglement_id; $payment->num_paiement=''; diff --git a/htdocs/comm/mailing/class/mailing.class.php b/htdocs/comm/mailing/class/mailing.class.php index 489a7b8398f..0dd7b00c318 100644 --- a/htdocs/comm/mailing/class/mailing.class.php +++ b/htdocs/comm/mailing/class/mailing.class.php @@ -77,9 +77,10 @@ class Mailing extends CommonObject } /** - * \brief Create an EMailing - * \param user Object of user making creation - * \return -1 if error, Id of created object if OK + * Create an EMailing + * + * @param User $user Object of user making creation + * @return int -1 if error, Id of created object if OK */ function create($user) { @@ -133,9 +134,10 @@ class Mailing extends CommonObject } /** - * \brief Update emailing record - * \param user Object of user making change - * \return < 0 if KO, > 0 if OK + * Update emailing record + * + * @param User $user Object of user making change + * @return int < 0 if KO, > 0 if OK */ function update($user) { @@ -165,9 +167,10 @@ class Mailing extends CommonObject } /** - * \brief Get object from database - * \param rowid id du mailing - * \return int + * Get object from database + * + * @param int $rowid Id of emailing + * @return int <0 if KO, >0 if OK */ function fetch($rowid) { @@ -227,9 +230,10 @@ class Mailing extends CommonObject /** - * \brief Load an object from its id and create a new one in database - * \param fromid Id of object to clone - * \return int New id of clone + * Load an object from its id and create a new one in database + * + * @param int $fromid Id of object to clone + * @return int New id of clone */ function createFromClone($fromid,$option1,$option2) { @@ -303,9 +307,10 @@ class Mailing extends CommonObject } /** - * \brief Validate emailing - * \param user Objet user qui valide - * \return int <0 if KO, >0 if OK + * Validate emailing + * + * @param User $user Objet user qui valide + * @return int <0 if KO, >0 if OK */ function valid($user) { @@ -328,9 +333,10 @@ class Mailing extends CommonObject /** - * \brief Delete emailing - * \param rowid id du mailing a supprimer - * \return int 1 en cas de succes + * Delete emailing + * + * @param int $rowid id du mailing a supprimer + * @return int 1 en cas de succes */ function delete($rowid) { @@ -353,9 +359,10 @@ class Mailing extends CommonObject /** - * \brief Change status of each recipient - * \param user Objet user qui valide - * \return int <0 if KO, >0 if OK + * Change status of each recipient + * + * @param User $user Objet user qui valide + * @return int <0 if KO, >0 if OK */ function reset_targets_status($user) { @@ -379,9 +386,10 @@ class Mailing extends CommonObject /** - * \brief Retourne le libelle du statut d'un mailing (brouillon, validee, ... - * \param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long - * \return string Libelle + * Retourne le libelle du statut d'un mailing (brouillon, validee, ... + * + * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long + * @return string Label */ function getLibStatut($mode=0) { @@ -389,10 +397,11 @@ class Mailing extends CommonObject } /** - * \brief Renvoi le libelle d'un statut donn� - * \param statut Id statut - * \param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto - * \return string Libelle du statut + * Renvoi le libelle d'un statut donne + * + * @param int $statut Id statut + * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto + * @return string Label */ function LibStatut($statut,$mode=0) { diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index bfb34473086..89d172b48da 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1,32 +1,32 @@ * Copyright (C) 2004 Eric Seigne - * Copyright (C) 2004-2011 Laurent Destailleur - * Copyright (C) 2005 Marc Barilley - * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2006 Andre Cianfarani - * Copyright (C) 2008 Raphael Bertrand - * Copyright (C) 2010-2011 Juanjo Menent - * Copyright (C) 2010-2011 Philippe Grand - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ +* Copyright (C) 2004-2011 Laurent Destailleur +* Copyright (C) 2005 Marc Barilley +* Copyright (C) 2005-2012 Regis Houssin +* Copyright (C) 2006 Andre Cianfarani +* Copyright (C) 2008 Raphael Bertrand +* Copyright (C) 2010-2011 Juanjo Menent +* Copyright (C) 2010-2011 Philippe Grand +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*/ /** * \file htdocs/comm/propal/class/propal.class.php - * \brief Fichier de la classe des propales - */ +* \brief Fichier de la classe des propales +*/ require_once(DOL_DOCUMENT_ROOT ."/core/class/commonobject.class.php"); require_once(DOL_DOCUMENT_ROOT ."/product/class/product.class.php"); @@ -39,2355 +39,2367 @@ require_once(DOL_DOCUMENT_ROOT ."/contact/class/contact.class.php"); */ class Propal extends CommonObject { - public $element='propal'; - public $table_element='propal'; - public $table_element_line='propaldet'; - public $fk_element='fk_propal'; - protected $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe - - var $id; - - var $socid; // Id client - var $client; // Objet societe client (a charger par fetch_client) - - var $contactid; - var $fk_project; - var $author; - var $ref; - var $ref_client; - var $statut; // 0 (draft), 1 (validated), 2 (signed), 3 (not signed), 4 (billed) - var $datec; // Date of creation - var $datev; // Date of validation - var $date; // Date of proposal - var $datep; // Same than date - var $date_livraison; - var $fin_validite; - - var $user_author_id; - var $user_valid_id; - var $user_close_id; - - var $total_ht; // Total net of tax - var $total_tva; // Total VAT - var $total_localtax1; // Total Local Taxes 1 - var $total_localtax2; // Total Local Taxes 2 - var $total_ttc; // Total with tax - var $price; // deprecated (for compatibility) - var $tva; // deprecated (for compatibility) - var $total; // deprecated (for compatibility) - - var $cond_reglement_id; - var $cond_reglement_code; - var $mode_reglement_id; - var $mode_reglement_code; - var $remise; - var $remise_percent; - var $remise_absolue; - var $note; // deprecated (for compatibility) - var $note_private; - var $note_public; - var $fk_delivery_address; // deprecated (for compatibility) - var $fk_address; - var $address_type; - var $adresse; - var $availability_id; - var $availability_code; - var $demand_reason_id; - var $demand_reason_code; - - var $products=array(); - var $extraparams=array(); - - var $lines = array(); - var $line; - - var $origin; - var $origin_id; - - var $labelstatut=array(); - var $labelstatut_short=array(); - - // Pour board - var $nbtodo; - var $nbtodolate; - - var $specimen; - - - /** - * Constructor - * - * @param DoliDB $db Database handler - * @param int $socid Id third party - * @param int $propalid Id proposal - */ - function Propal($db, $socid="", $propalid=0) - { - global $conf,$langs; - - $this->db = $db; - $this->socid = $socid; - $this->id = $propalid; - $this->products = array(); - $this->remise = 0; - $this->remise_percent = 0; - $this->remise_absolue = 0; - - $this->duree_validite=$conf->global->PROPALE_VALIDITY_DURATION; - - $langs->load("propal"); - $this->labelstatut[0]=(! empty($conf->global->PROPAL_STATUS_DRAFT_LABEL) ? $conf->global->PROPAL_STATUS_DRAFT_LABEL : $langs->trans("PropalStatusDraft")); - $this->labelstatut[1]=(! empty($conf->global->PROPAL_STATUS_VALIDATED_LABEL) ? $conf->global->PROPAL_STATUS_VALIDATED_LABEL : $langs->trans("PropalStatusValidated")); - $this->labelstatut[2]=(! empty($conf->global->PROPAL_STATUS_SIGNED_LABEL) ? $conf->global->PROPAL_STATUS_SIGNED_LABEL : $langs->trans("PropalStatusSigned")); - $this->labelstatut[3]=(! empty($conf->global->PROPAL_STATUS_NOTSIGNED_LABEL) ? $conf->global->PROPAL_STATUS_NOTSIGNED_LABEL : $langs->trans("PropalStatusNotSigned")); - $this->labelstatut[4]=(! empty($conf->global->PROPAL_STATUS_BILLED_LABEL) ? $conf->global->PROPAL_STATUS_BILLED_LABEL : $langs->trans("PropalStatusBilled")); - $this->labelstatut_short[0]=(! empty($conf->global->PROPAL_STATUS_DRAFTSHORT_LABEL) ? $conf->global->PROPAL_STATUS_DRAFTSHORT_LABEL : $langs->trans("PropalStatusDraftShort")); - $this->labelstatut_short[1]=(! empty($conf->global->PROPAL_STATUS_VALIDATEDSHORT_LABEL) ? $conf->global->PROPAL_STATUS_VALIDATEDSHORT_LABEL : $langs->trans("Opened")); - $this->labelstatut_short[2]=(! empty($conf->global->PROPAL_STATUS_SIGNEDSHORT_LABEL) ? $conf->global->PROPAL_STATUS_SIGNEDSHORT_LABEL : $langs->trans("PropalStatusSignedShort")); - $this->labelstatut_short[3]=(! empty($conf->global->PROPAL_STATUS_NOTSIGNEDSHORT_LABEL) ? $conf->global->PROPAL_STATUS_NOTSIGNEDSHORT_LABEL : $langs->trans("PropalStatusNotSignedShort")); - $this->labelstatut_short[4]=(! empty($conf->global->PROPAL_STATUS_BILLEDSHORT_LABEL) ? $conf->global->PROPAL_STATUS_BILLEDSHORT_LABEL : $langs->trans("PropalStatusBilledShort")); - } - - - /** - * Add line into array products - * $this->client doit etre charge - * - * @param int $idproduct Product Id to add - * @param int $qty Quantity - * @param int $remise_percent Discount effected on Product - * - * TODO Remplacer les appels a cette fonction par generation objet Ligne - * insere dans tableau $this->products - */ - function add_product($idproduct, $qty, $remise_percent=0) - { - global $conf, $mysoc; - - if (! $qty) $qty = 1; - - dol_syslog("Propal::add_product $idproduct, $qty, $remise_percent"); - if ($idproduct > 0) - { - $prod=new Product($this->db); - $prod->fetch($idproduct); - - $productdesc = $prod->description; - - $tva_tx = get_default_tva($mysoc,$this->client,$prod->id); - // local taxes - $localtax1_tx = get_default_localtax($mysoc,$this->client,1,$prod->tva_tx); - $localtax2_tx = get_default_localtax($mysoc,$this->client,2,$prod->tva_tx); - - // multiprix - if($conf->global->PRODUIT_MULTIPRICES && $this->client->price_level) - { - $price = $prod->multiprices[$this->client->price_level]; - } - else - { - $price = $prod->price; - } - - $line = new PropaleLigne($this->db); - - $line->fk_product=$idproduct; - $line->desc=$productdesc; - $line->qty=$qty; - $line->subprice=$price; - $line->remise_percent=$remise_percent; - $line->tva_tx=$tva_tx; - - $this->products[]=$line; - } - } - - /** - * Adding line of fixed discount in the proposal in DB - * - * @param int @idremise Id of fixed discount - * @return int >0 si ok, <0 si ko - */ - function insert_discount($idremise) - { - global $langs; - - include_once(DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php'); - include_once(DOL_DOCUMENT_ROOT.'/core/class/discount.class.php'); - - $this->db->begin(); - - $remise=new DiscountAbsolute($this->db); - $result=$remise->fetch($idremise); - - if ($result > 0) - { - if ($remise->fk_facture) // Protection against multiple submission - { - $this->error=$langs->trans("ErrorDiscountAlreadyUsed"); - $this->db->rollback(); - return -5; - } - - $propalligne=new PropaleLigne($this->db); - $propalligne->fk_propal=$this->id; - $propalligne->fk_remise_except=$remise->id; - $propalligne->desc=$remise->description; // Description ligne - $propalligne->tva_tx=$remise->tva_tx; - $propalligne->subprice=-$remise->amount_ht; - $propalligne->fk_product=0; // Id produit predefini - $propalligne->qty=1; - $propalligne->remise=0; - $propalligne->remise_percent=0; - $propalligne->rang=-1; - $propalligne->info_bits=2; - - // TODO deprecated - $propalligne->price=-$remise->amount_ht; - - $propalligne->total_ht = -$remise->amount_ht; - $propalligne->total_tva = -$remise->amount_tva; - $propalligne->total_ttc = -$remise->amount_ttc; - - $result=$propalligne->insert(); - if ($result > 0) - { - $result=$this->update_price(1); - if ($result > 0) - { - $this->db->commit(); - return 1; - } - else - { - $this->db->rollback(); - return -1; - } - } - else - { - $this->error=$propalligne->error; - $this->db->rollback(); - return -2; - } - } - else - { - $this->db->rollback(); - return -2; - } - } - - /** - * Add a proposal line into database (linked to product/service or not) - * Les parametres sont deja cense etre juste et avec valeurs finales a l'appel - * de cette methode. Aussi, pour le taux tva, il doit deja avoir ete defini - * par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,'',produit) - * et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue) - * - * @param int $propalid Id de la propale - * @param string $desc Description de la ligne - * @param double $pu_ht Prix unitaire - * @param double $qty Quantite - * @param double $txtva Taux de tva - * @param double $txlocaltax1 Local tax 1 rate - * @param double $txlocaltax2 Local tax 2 rate - * @param int $fk_product Id du produit/service predefini - * @param double $remise_percent Pourcentage de remise de la ligne - * @param string $price_base_type HT or TTC - * @param dobule $pu_ttc Prix unitaire TTC - * @param int $info_bits Bits de type de lignes - * @param int $type Type of line (product, service) - * @param int $rang Position of line - * @param int $special_code Special code - * @param int $fk_parent_line Id of parent line - * @return int >0 if OK, <0 if KO - * - * @see add_product - */ - function addline($propalid, $desc, $pu_ht, $qty, $txtva, $txlocaltax1=0, $txlocaltax2=0, $fk_product=0, $remise_percent=0, $price_base_type='HT', $pu_ttc=0, $info_bits=0, $type=0, $rang=-1, $special_code=0, $fk_parent_line=0) - { - global $conf; - - dol_syslog("Propal::Addline propalid=$propalid, desc=$desc, pu_ht=$pu_ht, qty=$qty, txtva=$txtva, fk_product=$fk_product, remise_except=$remise_percent, price_base_type=$price_base_type, pu_ttc=$pu_ttc, info_bits=$info_bits, type=$type"); - include_once(DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php'); - - // Clean parameters - if (empty($remise_percent)) $remise_percent=0; - if (empty($qty)) $qty=0; - if (empty($info_bits)) $info_bits=0; - if (empty($rang)) $rang=0; - if (empty($fk_parent_line) || $fk_parent_line < 0) $fk_parent_line=0; - - $remise_percent=price2num($remise_percent); - $qty=price2num($qty); - $pu_ht=price2num($pu_ht); - $pu_ttc=price2num($pu_ttc); - $txtva=price2num($txtva); - $txlocaltax1=price2num($txlocaltax1); - $txlocaltax2=price2num($txlocaltax2); - if ($price_base_type=='HT') - { - $pu=$pu_ht; - } - else - { - $pu=$pu_ttc; - } - - // Check parameters - if ($type < 0) return -1; - - if ($this->statut == 0) - { - $this->db->begin(); - - // Calcul du total TTC et de la TVA pour la ligne a partir de - // qty, pu, remise_percent et txtva - // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker - // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. - $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits); - $total_ht = $tabprice[0]; - $total_tva = $tabprice[1]; - $total_ttc = $tabprice[2]; - $total_localtax1 = $tabprice[9]; - $total_localtax2 = $tabprice[10]; - - // Rang to use - $rangtouse = $rang; - if ($rangtouse == -1) - { - $rangmax = $this->line_max($fk_parent_line); - $rangtouse = $rangmax + 1; - } - - // TODO A virer - // Anciens indicateurs: $price, $remise (a ne plus utiliser) - $price = $pu; - $remise = 0; - if ($remise_percent > 0) - { - $remise = round(($pu * $remise_percent / 100), 2); - $price = $pu - $remise; - } - - // Insert line - $this->line=new PropaleLigne($this->db); - - $this->line->fk_propal=$propalid; - $this->line->desc=$desc; - $this->line->qty=$qty; - $this->line->tva_tx=$txtva; - $this->line->localtax1_tx=$txlocaltax1; - $this->line->localtax2_tx=$txlocaltax2; - $this->line->fk_product=$fk_product; - $this->line->remise_percent=$remise_percent; - $this->line->subprice=$pu_ht; - $this->line->rang=$rangtouse; - $this->line->info_bits=$info_bits; - $this->line->total_ht=$total_ht; - $this->line->total_tva=$total_tva; - $this->line->total_localtax1=$total_localtax1; - $this->line->total_localtax2=$total_localtax2; - $this->line->total_ttc=$total_ttc; - $this->line->product_type=$type; - $this->line->special_code=$special_code; - $this->line->fk_parent_line=$fk_parent_line; - - // Mise en option de la ligne - //if ($conf->global->PROPALE_USE_OPTION_LINE && !$qty) $ligne->special_code=3; - if (empty($qty) && empty($special_code)) $this->line->special_code=3; - - // TODO deprecated - $this->line->price=$price; - $this->line->remise=$remise; - - $result=$this->line->insert(); - if ($result > 0) - { - // Reorder if child line - if (! empty($fk_parent_line)) $this->line_order(true,'DESC'); - - // Mise a jour informations denormalisees au niveau de la propale meme - $result=$this->update_price(1); - if ($result > 0) - { - $this->db->commit(); - return $this->line->rowid; - } - else - { - $this->error=$this->db->error(); - dol_syslog("Error sql=$sql, error=".$this->error,LOG_ERR); - $this->db->rollback(); - return -1; - } - } - else - { - $this->error=$this->line->error; - $this->db->rollback(); - return -2; - } - } - } - - - /** - * Update a proposal line - * - * @param int $rowid Id de la ligne - * @param double $pu Prix unitaire (HT ou TTC selon price_base_type) - * @param double $qty Quantity - * @param double $remise_percent Remise effectuee sur le produit - * @param double $txtva Taux de TVA - * @param double $txlocaltax1 Local tax 1 rate - * @param double $txlocaltax2 Local tax 2 rate - * @param string $desc Description - * @param double $price_base_type HT ou TTC - * @param int $info_bits Miscellanous informations - * @param int $special_code Set special code ('' = we don't change it) - * @param int $fk_parent_line Id of line parent - * @param int $skip_update_total Skip update total - * @return int 0 if OK, <0 if KO - */ - function updateline($rowid, $pu, $qty, $remise_percent=0, $txtva, $txlocaltax1=0, $txlocaltax2=0, $desc='', $price_base_type='HT', $info_bits=0, $special_code=0, $fk_parent_line=0, $skip_update_total=0) - { - global $conf,$user,$langs; - - dol_syslog("Propal::UpdateLine $rowid, $pu, $qty, $remise_percent, $txtva, $desc, $price_base_type, $info_bits"); - include_once(DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php'); - - // Clean parameters - $remise_percent=price2num($remise_percent); - $qty=price2num($qty); - $pu = price2num($pu); - $txtva = price2num($txtva); - $txlocaltax1=price2num($txlocaltax1); - $txlocaltax2=price2num($txlocaltax2); - if (empty($qty) && empty($special_code)) $special_code=3; // Set option tag - if (! empty($qty) && $special_code == 3) $special_code=0; // Remove option tag - - if ($this->statut == 0) - { - $this->db->begin(); - - // Calcul du total TTC et de la TVA pour la ligne a partir de - // qty, pu, remise_percent et txtva - // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker - // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. - $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits); - $total_ht = $tabprice[0]; - $total_tva = $tabprice[1]; - $total_ttc = $tabprice[2]; - $total_localtax1 = $tabprice[9]; - $total_localtax2 = $tabprice[10]; - - // Anciens indicateurs: $price, $remise (a ne plus utiliser) - $price = $pu; - if ($remise_percent > 0) - { - $remise = round(($pu * $remise_percent / 100), 2); - $price = $pu - $remise; - } - - // Update line - $this->line=new PropaleLigne($this->db); - - // Stock previous line records - $staticline=new PropaleLigne($this->db); - $staticline->fetch($rowid); - $this->line->oldline = $staticline; - - // Reorder if fk_parent_line change - if (! empty($fk_parent_line) && ! empty($staticline->fk_parent_line) && $fk_parent_line != $staticline->fk_parent_line) - { - $rangmax = $this->line_max($fk_parent_line); - $this->line->rang = $rangmax + 1; - } - - $this->line->rowid = $rowid; - $this->line->desc = $desc; - $this->line->qty = $qty; - $this->line->tva_tx = $txtva; - $this->line->localtax1_tx = $txlocaltax1; - $this->line->localtax2_tx = $txlocaltax2; - $this->line->remise_percent = $remise_percent; - $this->line->subprice = $pu; - $this->line->info_bits = $info_bits; - $this->line->total_ht = $total_ht; - $this->line->total_tva = $total_tva; - $this->line->total_localtax1 = $total_localtax1; - $this->line->total_localtax2 = $total_localtax2; - $this->line->total_ttc = $total_ttc; - $this->line->special_code = $special_code; - $this->line->fk_parent_line = $fk_parent_line; - $this->line->skip_update_total = $skip_update_total; - - // TODO deprecated - $this->line->price=$price; - $this->line->remise=$remise; - - $result=$this->line->update(); - if ($result > 0) - { - // Reorder if child line - if (! empty($fk_parent_line)) $this->line_order(true,'DESC'); - - $this->update_price(1); - - $this->fk_propal = $this->id; - $this->rowid = $rowid; - - $this->db->commit(); - return $result; - } - else - { - $this->error=$this->db->error(); - $this->db->rollback(); - dol_syslog("Propal::UpdateLine Error=".$this->error, LOG_ERR); - return -1; - } - } - else - { - dol_syslog("Propal::UpdateLigne Erreur -2 Propal en mode incompatible pour cette action"); - return -2; - } - } - - - /** - * Delete detail line - * - * @param int $lineid Id of line to delete - * @return int >0 if OK, <0 if KO - */ - function deleteline($lineid) - { - if ($this->statut == 0) - { - $line=new PropaleLigne($this->db); - - // For triggers - $line->fetch($lineid); - - if ($line->delete() > 0) - { - $this->update_price(1); - - return 1; - } - else - { - return -1; - } - } - else - { - return -2; - } - } - - - /** - * Create commercial proposal into database - * this->ref can be set or empty. If empty, we will use "(PROVid)" - * - * @param User $user User that create - * @param int $notrigger 1=Does not execute triggers, 0= execuete triggers - * @return int <0 if KO, >=0 if OK - */ - function create($user='', $notrigger=0) - { - global $langs,$conf,$mysoc; - $error=0; - - $now=dol_now(); - - // Clean parameters - if (empty($this->date)) $this->date=$this->datep; - $this->fin_validite = $this->date + ($this->duree_validite * 24 * 3600); + public $element='propal'; + public $table_element='propal'; + public $table_element_line='propaldet'; + public $fk_element='fk_propal'; + protected $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe + + var $id; + + var $socid; // Id client + var $client; // Objet societe client (a charger par fetch_client) + + var $contactid; + var $fk_project; + var $author; + var $ref; + var $ref_client; + var $statut; // 0 (draft), 1 (validated), 2 (signed), 3 (not signed), 4 (billed) + var $datec; // Date of creation + var $datev; // Date of validation + var $date; // Date of proposal + var $datep; // Same than date + var $date_livraison; + var $fin_validite; + + var $user_author_id; + var $user_valid_id; + var $user_close_id; + + var $total_ht; // Total net of tax + var $total_tva; // Total VAT + var $total_localtax1; // Total Local Taxes 1 + var $total_localtax2; // Total Local Taxes 2 + var $total_ttc; // Total with tax + var $price; // deprecated (for compatibility) + var $tva; // deprecated (for compatibility) + var $total; // deprecated (for compatibility) + + var $cond_reglement_id; + var $cond_reglement_code; + var $mode_reglement_id; + var $mode_reglement_code; + var $remise; + var $remise_percent; + var $remise_absolue; + var $note; // deprecated (for compatibility) + var $note_private; + var $note_public; + var $fk_delivery_address; // deprecated (for compatibility) + var $fk_address; + var $address_type; + var $adresse; + var $availability_id; + var $availability_code; + var $demand_reason_id; + var $demand_reason_code; + + var $products=array(); + var $extraparams=array(); + + var $lines = array(); + var $line; + + var $origin; + var $origin_id; + + var $labelstatut=array(); + var $labelstatut_short=array(); + + // Pour board + var $nbtodo; + var $nbtodolate; + + var $specimen; + + + /** + * Constructor + * + * @param DoliDB $db Database handler + * @param int $socid Id third party + * @param int $propalid Id proposal + */ + function Propal($db, $socid="", $propalid=0) + { + global $conf,$langs; + + $this->db = $db; + $this->socid = $socid; + $this->id = $propalid; + $this->products = array(); + $this->remise = 0; + $this->remise_percent = 0; + $this->remise_absolue = 0; + + $this->duree_validite=$conf->global->PROPALE_VALIDITY_DURATION; + + $langs->load("propal"); + $this->labelstatut[0]=(! empty($conf->global->PROPAL_STATUS_DRAFT_LABEL) ? $conf->global->PROPAL_STATUS_DRAFT_LABEL : $langs->trans("PropalStatusDraft")); + $this->labelstatut[1]=(! empty($conf->global->PROPAL_STATUS_VALIDATED_LABEL) ? $conf->global->PROPAL_STATUS_VALIDATED_LABEL : $langs->trans("PropalStatusValidated")); + $this->labelstatut[2]=(! empty($conf->global->PROPAL_STATUS_SIGNED_LABEL) ? $conf->global->PROPAL_STATUS_SIGNED_LABEL : $langs->trans("PropalStatusSigned")); + $this->labelstatut[3]=(! empty($conf->global->PROPAL_STATUS_NOTSIGNED_LABEL) ? $conf->global->PROPAL_STATUS_NOTSIGNED_LABEL : $langs->trans("PropalStatusNotSigned")); + $this->labelstatut[4]=(! empty($conf->global->PROPAL_STATUS_BILLED_LABEL) ? $conf->global->PROPAL_STATUS_BILLED_LABEL : $langs->trans("PropalStatusBilled")); + $this->labelstatut_short[0]=(! empty($conf->global->PROPAL_STATUS_DRAFTSHORT_LABEL) ? $conf->global->PROPAL_STATUS_DRAFTSHORT_LABEL : $langs->trans("PropalStatusDraftShort")); + $this->labelstatut_short[1]=(! empty($conf->global->PROPAL_STATUS_VALIDATEDSHORT_LABEL) ? $conf->global->PROPAL_STATUS_VALIDATEDSHORT_LABEL : $langs->trans("Opened")); + $this->labelstatut_short[2]=(! empty($conf->global->PROPAL_STATUS_SIGNEDSHORT_LABEL) ? $conf->global->PROPAL_STATUS_SIGNEDSHORT_LABEL : $langs->trans("PropalStatusSignedShort")); + $this->labelstatut_short[3]=(! empty($conf->global->PROPAL_STATUS_NOTSIGNEDSHORT_LABEL) ? $conf->global->PROPAL_STATUS_NOTSIGNEDSHORT_LABEL : $langs->trans("PropalStatusNotSignedShort")); + $this->labelstatut_short[4]=(! empty($conf->global->PROPAL_STATUS_BILLEDSHORT_LABEL) ? $conf->global->PROPAL_STATUS_BILLEDSHORT_LABEL : $langs->trans("PropalStatusBilledShort")); + } + + + /** + * Add line into array products + * $this->client doit etre charge + * + * @param int $idproduct Product Id to add + * @param int $qty Quantity + * @param int $remise_percent Discount effected on Product + * @return int <0 if KO, >0 if OK + * + * TODO Remplacer les appels a cette fonction par generation objet Ligne + * insere dans tableau $this->products + */ + function add_product($idproduct, $qty, $remise_percent=0) + { + global $conf, $mysoc; + + if (! $qty) $qty = 1; + + dol_syslog("Propal::add_product $idproduct, $qty, $remise_percent"); + if ($idproduct > 0) + { + $prod=new Product($this->db); + $prod->fetch($idproduct); + + $productdesc = $prod->description; + + $tva_tx = get_default_tva($mysoc,$this->client,$prod->id); + // local taxes + $localtax1_tx = get_default_localtax($mysoc,$this->client,1,$prod->tva_tx); + $localtax2_tx = get_default_localtax($mysoc,$this->client,2,$prod->tva_tx); + + // multiprix + if($conf->global->PRODUIT_MULTIPRICES && $this->client->price_level) + { + $price = $prod->multiprices[$this->client->price_level]; + } + else + { + $price = $prod->price; + } + + $line = new PropaleLigne($this->db); + + $line->fk_product=$idproduct; + $line->desc=$productdesc; + $line->qty=$qty; + $line->subprice=$price; + $line->remise_percent=$remise_percent; + $line->tva_tx=$tva_tx; + + $this->products[]=$line; + } + } + + /** + * Adding line of fixed discount in the proposal in DB + * + * @param int @idremise Id of fixed discount + * @return int >0 si ok, <0 si ko + */ + function insert_discount($idremise) + { + global $langs; + + include_once(DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php'); + include_once(DOL_DOCUMENT_ROOT.'/core/class/discount.class.php'); + + $this->db->begin(); + + $remise=new DiscountAbsolute($this->db); + $result=$remise->fetch($idremise); + + if ($result > 0) + { + if ($remise->fk_facture) // Protection against multiple submission + { + $this->error=$langs->trans("ErrorDiscountAlreadyUsed"); + $this->db->rollback(); + return -5; + } + + $propalligne=new PropaleLigne($this->db); + $propalligne->fk_propal=$this->id; + $propalligne->fk_remise_except=$remise->id; + $propalligne->desc=$remise->description; // Description ligne + $propalligne->tva_tx=$remise->tva_tx; + $propalligne->subprice=-$remise->amount_ht; + $propalligne->fk_product=0; // Id produit predefini + $propalligne->qty=1; + $propalligne->remise=0; + $propalligne->remise_percent=0; + $propalligne->rang=-1; + $propalligne->info_bits=2; + + // TODO deprecated + $propalligne->price=-$remise->amount_ht; + + $propalligne->total_ht = -$remise->amount_ht; + $propalligne->total_tva = -$remise->amount_tva; + $propalligne->total_ttc = -$remise->amount_ttc; + + $result=$propalligne->insert(); + if ($result > 0) + { + $result=$this->update_price(1); + if ($result > 0) + { + $this->db->commit(); + return 1; + } + else + { + $this->db->rollback(); + return -1; + } + } + else + { + $this->error=$propalligne->error; + $this->db->rollback(); + return -2; + } + } + else + { + $this->db->rollback(); + return -2; + } + } + + /** + * Add a proposal line into database (linked to product/service or not) + * Les parametres sont deja cense etre juste et avec valeurs finales a l'appel + * de cette methode. Aussi, pour le taux tva, il doit deja avoir ete defini + * par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,'',produit) + * et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue) + * + * @param int $propalid Id de la propale + * @param string $desc Description de la ligne + * @param double $pu_ht Prix unitaire + * @param double $qty Quantite + * @param double $txtva Taux de tva + * @param double $txlocaltax1 Local tax 1 rate + * @param double $txlocaltax2 Local tax 2 rate + * @param int $fk_product Id du produit/service predefini + * @param double $remise_percent Pourcentage de remise de la ligne + * @param string $price_base_type HT or TTC + * @param dobule $pu_ttc Prix unitaire TTC + * @param int $info_bits Bits de type de lignes + * @param int $type Type of line (product, service) + * @param int $rang Position of line + * @param int $special_code Special code + * @param int $fk_parent_line Id of parent line + * @return int >0 if OK, <0 if KO + * + * @see add_product + */ + function addline($propalid, $desc, $pu_ht, $qty, $txtva, $txlocaltax1=0, $txlocaltax2=0, $fk_product=0, $remise_percent=0, $price_base_type='HT', $pu_ttc=0, $info_bits=0, $type=0, $rang=-1, $special_code=0, $fk_parent_line=0) + { + global $conf; + + dol_syslog("Propal::Addline propalid=$propalid, desc=$desc, pu_ht=$pu_ht, qty=$qty, txtva=$txtva, fk_product=$fk_product, remise_except=$remise_percent, price_base_type=$price_base_type, pu_ttc=$pu_ttc, info_bits=$info_bits, type=$type"); + include_once(DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php'); + + // Clean parameters + if (empty($remise_percent)) $remise_percent=0; + if (empty($qty)) $qty=0; + if (empty($info_bits)) $info_bits=0; + if (empty($rang)) $rang=0; + if (empty($fk_parent_line) || $fk_parent_line < 0) $fk_parent_line=0; + + $remise_percent=price2num($remise_percent); + $qty=price2num($qty); + $pu_ht=price2num($pu_ht); + $pu_ttc=price2num($pu_ttc); + $txtva=price2num($txtva); + $txlocaltax1=price2num($txlocaltax1); + $txlocaltax2=price2num($txlocaltax2); + if ($price_base_type=='HT') + { + $pu=$pu_ht; + } + else + { + $pu=$pu_ttc; + } + + // Check parameters + if ($type < 0) return -1; + + if ($this->statut == 0) + { + $this->db->begin(); + + // Calcul du total TTC et de la TVA pour la ligne a partir de + // qty, pu, remise_percent et txtva + // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker + // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits); + $total_ht = $tabprice[0]; + $total_tva = $tabprice[1]; + $total_ttc = $tabprice[2]; + $total_localtax1 = $tabprice[9]; + $total_localtax2 = $tabprice[10]; + + // Rang to use + $rangtouse = $rang; + if ($rangtouse == -1) + { + $rangmax = $this->line_max($fk_parent_line); + $rangtouse = $rangmax + 1; + } + + // TODO A virer + // Anciens indicateurs: $price, $remise (a ne plus utiliser) + $price = $pu; + $remise = 0; + if ($remise_percent > 0) + { + $remise = round(($pu * $remise_percent / 100), 2); + $price = $pu - $remise; + } + + // Insert line + $this->line=new PropaleLigne($this->db); + + $this->line->fk_propal=$propalid; + $this->line->desc=$desc; + $this->line->qty=$qty; + $this->line->tva_tx=$txtva; + $this->line->localtax1_tx=$txlocaltax1; + $this->line->localtax2_tx=$txlocaltax2; + $this->line->fk_product=$fk_product; + $this->line->remise_percent=$remise_percent; + $this->line->subprice=$pu_ht; + $this->line->rang=$rangtouse; + $this->line->info_bits=$info_bits; + $this->line->total_ht=$total_ht; + $this->line->total_tva=$total_tva; + $this->line->total_localtax1=$total_localtax1; + $this->line->total_localtax2=$total_localtax2; + $this->line->total_ttc=$total_ttc; + $this->line->product_type=$type; + $this->line->special_code=$special_code; + $this->line->fk_parent_line=$fk_parent_line; + + // Mise en option de la ligne + //if ($conf->global->PROPALE_USE_OPTION_LINE && !$qty) $ligne->special_code=3; + if (empty($qty) && empty($special_code)) $this->line->special_code=3; + + // TODO deprecated + $this->line->price=$price; + $this->line->remise=$remise; + + $result=$this->line->insert(); + if ($result > 0) + { + // Reorder if child line + if (! empty($fk_parent_line)) $this->line_order(true,'DESC'); + + // Mise a jour informations denormalisees au niveau de la propale meme + $result=$this->update_price(1); + if ($result > 0) + { + $this->db->commit(); + return $this->line->rowid; + } + else + { + $this->error=$this->db->error(); + dol_syslog("Error sql=$sql, error=".$this->error,LOG_ERR); + $this->db->rollback(); + return -1; + } + } + else + { + $this->error=$this->line->error; + $this->db->rollback(); + return -2; + } + } + } + + + /** + * Update a proposal line + * + * @param int $rowid Id de la ligne + * @param double $pu Prix unitaire (HT ou TTC selon price_base_type) + * @param double $qty Quantity + * @param double $remise_percent Remise effectuee sur le produit + * @param double $txtva Taux de TVA + * @param double $txlocaltax1 Local tax 1 rate + * @param double $txlocaltax2 Local tax 2 rate + * @param string $desc Description + * @param double $price_base_type HT ou TTC + * @param int $info_bits Miscellanous informations + * @param int $special_code Set special code ('' = we don't change it) + * @param int $fk_parent_line Id of line parent + * @param int $skip_update_total Skip update total + * @return int 0 if OK, <0 if KO + */ + function updateline($rowid, $pu, $qty, $remise_percent, $txtva, $txlocaltax1=0, $txlocaltax2=0, $desc='', $price_base_type='HT', $info_bits=0, $special_code=0, $fk_parent_line=0, $skip_update_total=0) + { + global $conf,$user,$langs; + + dol_syslog("Propal::UpdateLine $rowid, $pu, $qty, $remise_percent, $txtva, $desc, $price_base_type, $info_bits"); + include_once(DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php'); + + // Clean parameters + $remise_percent=price2num($remise_percent); + $qty=price2num($qty); + $pu = price2num($pu); + $txtva = price2num($txtva); + $txlocaltax1=price2num($txlocaltax1); + $txlocaltax2=price2num($txlocaltax2); + if (empty($qty) && empty($special_code)) $special_code=3; // Set option tag + if (! empty($qty) && $special_code == 3) $special_code=0; // Remove option tag + + if ($this->statut == 0) + { + $this->db->begin(); + + // Calcul du total TTC et de la TVA pour la ligne a partir de + // qty, pu, remise_percent et txtva + // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker + // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits); + $total_ht = $tabprice[0]; + $total_tva = $tabprice[1]; + $total_ttc = $tabprice[2]; + $total_localtax1 = $tabprice[9]; + $total_localtax2 = $tabprice[10]; + + // Anciens indicateurs: $price, $remise (a ne plus utiliser) + $price = $pu; + if ($remise_percent > 0) + { + $remise = round(($pu * $remise_percent / 100), 2); + $price = $pu - $remise; + } + + // Update line + $this->line=new PropaleLigne($this->db); + + // Stock previous line records + $staticline=new PropaleLigne($this->db); + $staticline->fetch($rowid); + $this->line->oldline = $staticline; + + // Reorder if fk_parent_line change + if (! empty($fk_parent_line) && ! empty($staticline->fk_parent_line) && $fk_parent_line != $staticline->fk_parent_line) + { + $rangmax = $this->line_max($fk_parent_line); + $this->line->rang = $rangmax + 1; + } + + $this->line->rowid = $rowid; + $this->line->desc = $desc; + $this->line->qty = $qty; + $this->line->tva_tx = $txtva; + $this->line->localtax1_tx = $txlocaltax1; + $this->line->localtax2_tx = $txlocaltax2; + $this->line->remise_percent = $remise_percent; + $this->line->subprice = $pu; + $this->line->info_bits = $info_bits; + $this->line->total_ht = $total_ht; + $this->line->total_tva = $total_tva; + $this->line->total_localtax1 = $total_localtax1; + $this->line->total_localtax2 = $total_localtax2; + $this->line->total_ttc = $total_ttc; + $this->line->special_code = $special_code; + $this->line->fk_parent_line = $fk_parent_line; + $this->line->skip_update_total = $skip_update_total; + + // TODO deprecated + $this->line->price=$price; + $this->line->remise=$remise; + + $result=$this->line->update(); + if ($result > 0) + { + // Reorder if child line + if (! empty($fk_parent_line)) $this->line_order(true,'DESC'); + + $this->update_price(1); + + $this->fk_propal = $this->id; + $this->rowid = $rowid; + + $this->db->commit(); + return $result; + } + else + { + $this->error=$this->db->error(); + $this->db->rollback(); + dol_syslog("Propal::UpdateLine Error=".$this->error, LOG_ERR); + return -1; + } + } + else + { + dol_syslog("Propal::UpdateLigne Erreur -2 Propal en mode incompatible pour cette action"); + return -2; + } + } + + + /** + * Delete detail line + * + * @param int $lineid Id of line to delete + * @return int >0 if OK, <0 if KO + */ + function deleteline($lineid) + { + if ($this->statut == 0) + { + $line=new PropaleLigne($this->db); + + // For triggers + $line->fetch($lineid); + + if ($line->delete() > 0) + { + $this->update_price(1); + + return 1; + } + else + { + return -1; + } + } + else + { + return -2; + } + } + + + /** + * Create commercial proposal into database + * this->ref can be set or empty. If empty, we will use "(PROVid)" + * + * @param User $user User that create + * @param int $notrigger 1=Does not execute triggers, 0= execuete triggers + * @return int <0 if KO, >=0 if OK + */ + function create($user='', $notrigger=0) + { + global $langs,$conf,$mysoc; + $error=0; + + $now=dol_now(); + + // Clean parameters + if (empty($this->date)) $this->date=$this->datep; + $this->fin_validite = $this->date + ($this->duree_validite * 24 * 3600); if (empty($this->availability_id)) $this->availability_id=0; if (empty($this->demand_reason_id)) $this->demand_reason_id=0; - dol_syslog(get_class($this)."::create"); + dol_syslog(get_class($this)."::create"); - // Check parameters - $soc = new Societe($this->db); - $result=$soc->fetch($this->socid); - if ($result < 0) - { - $this->error="Failed to fetch company"; - dol_syslog(get_class($this)."::create ".$this->error, LOG_ERR); - return -3; - } - if (empty($this->date)) - { - $this->error="Date of proposal is required"; - dol_syslog(get_class($this)."::create ".$this->error, LOG_ERR); - return -4; - } - if (! empty($this->ref)) - { - $result=$this->verifyNumRef(); // Check ref is not yet used - } + // Check parameters + $soc = new Societe($this->db); + $result=$soc->fetch($this->socid); + if ($result < 0) + { + $this->error="Failed to fetch company"; + dol_syslog(get_class($this)."::create ".$this->error, LOG_ERR); + return -3; + } + if (empty($this->date)) + { + $this->error="Date of proposal is required"; + dol_syslog(get_class($this)."::create ".$this->error, LOG_ERR); + return -4; + } + if (! empty($this->ref)) + { + $result=$this->verifyNumRef(); // Check ref is not yet used + } - $this->db->begin(); + $this->db->begin(); - $this->fetch_thirdparty(); + $this->fetch_thirdparty(); - // Insert into database - $sql = "INSERT INTO ".MAIN_DB_PREFIX."propal ("; - $sql.= "fk_soc"; - $sql.= ", price"; - $sql.= ", remise"; - $sql.= ", remise_percent"; - $sql.= ", remise_absolue"; - $sql.= ", tva"; - $sql.= ", total"; - $sql.= ", datep"; - $sql.= ", datec"; - $sql.= ", ref"; - $sql.= ", fk_user_author"; - $sql.= ", note"; - $sql.= ", note_public"; - $sql.= ", model_pdf"; - $sql.= ", fin_validite"; - $sql.= ", fk_cond_reglement"; - $sql.= ", fk_mode_reglement"; - $sql.= ", ref_client"; - $sql.= ", date_livraison"; - $sql.= ", fk_availability"; - $sql.= ", fk_demand_reason"; - $sql.= ", fk_projet"; - $sql.= ", entity"; - $sql.= ") "; - $sql.= " VALUES ("; - $sql.= $this->socid; - $sql.= ", 0"; - $sql.= ", ".$this->remise; - $sql.= ", ".($this->remise_percent?$this->remise_percent:'null'); - $sql.= ", ".($this->remise_absolue?$this->remise_absolue:'null'); - $sql.= ", 0"; - $sql.= ", 0"; - $sql.= ", '".$this->db->idate($this->date)."'"; - $sql.= ", '".$this->db->idate($now)."'"; - $sql.= ", '(PROV)'"; - $sql.= ", ".($user->id > 0 ? "'".$user->id."'":"null"); - $sql.= ", '".$this->db->escape($this->note)."'"; - $sql.= ", '".$this->db->escape($this->note_public)."'"; - $sql.= ", '".$this->modelpdf."'"; - $sql.= ", ".($this->fin_validite!=''?"'".$this->db->idate($this->fin_validite)."'":"null"); - $sql.= ", ".$this->cond_reglement_id; - $sql.= ", ".$this->mode_reglement_id; - $sql.= ", '".$this->db->escape($this->ref_client)."'"; - $sql.= ", ".($this->date_livraison!=''?"'".$this->db->idate($this->date_livraison)."'":"null"); - $sql.= ", ".$this->availability_id; - $sql.= ", ".$this->demand_reason_id; - $sql.= ", ".($this->fk_project?$this->fk_project:"null"); - $sql.= ", ".$conf->entity; - $sql.= ")"; + // Insert into database + $sql = "INSERT INTO ".MAIN_DB_PREFIX."propal ("; + $sql.= "fk_soc"; + $sql.= ", price"; + $sql.= ", remise"; + $sql.= ", remise_percent"; + $sql.= ", remise_absolue"; + $sql.= ", tva"; + $sql.= ", total"; + $sql.= ", datep"; + $sql.= ", datec"; + $sql.= ", ref"; + $sql.= ", fk_user_author"; + $sql.= ", note"; + $sql.= ", note_public"; + $sql.= ", model_pdf"; + $sql.= ", fin_validite"; + $sql.= ", fk_cond_reglement"; + $sql.= ", fk_mode_reglement"; + $sql.= ", ref_client"; + $sql.= ", date_livraison"; + $sql.= ", fk_availability"; + $sql.= ", fk_demand_reason"; + $sql.= ", fk_projet"; + $sql.= ", entity"; + $sql.= ") "; + $sql.= " VALUES ("; + $sql.= $this->socid; + $sql.= ", 0"; + $sql.= ", ".$this->remise; + $sql.= ", ".($this->remise_percent?$this->remise_percent:'null'); + $sql.= ", ".($this->remise_absolue?$this->remise_absolue:'null'); + $sql.= ", 0"; + $sql.= ", 0"; + $sql.= ", '".$this->db->idate($this->date)."'"; + $sql.= ", '".$this->db->idate($now)."'"; + $sql.= ", '(PROV)'"; + $sql.= ", ".($user->id > 0 ? "'".$user->id."'":"null"); + $sql.= ", '".$this->db->escape($this->note)."'"; + $sql.= ", '".$this->db->escape($this->note_public)."'"; + $sql.= ", '".$this->modelpdf."'"; + $sql.= ", ".($this->fin_validite!=''?"'".$this->db->idate($this->fin_validite)."'":"null"); + $sql.= ", ".$this->cond_reglement_id; + $sql.= ", ".$this->mode_reglement_id; + $sql.= ", '".$this->db->escape($this->ref_client)."'"; + $sql.= ", ".($this->date_livraison!=''?"'".$this->db->idate($this->date_livraison)."'":"null"); + $sql.= ", ".$this->availability_id; + $sql.= ", ".$this->demand_reason_id; + $sql.= ", ".($this->fk_project?$this->fk_project:"null"); + $sql.= ", ".$conf->entity; + $sql.= ")"; - dol_syslog(get_class($this)."::create sql=".$sql, LOG_DEBUG); - $resql=$this->db->query($sql); - if ($resql) - { - $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."propal"); + dol_syslog(get_class($this)."::create sql=".$sql, LOG_DEBUG); + $resql=$this->db->query($sql); + if ($resql) + { + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."propal"); - if ($this->id) - { - if (empty($this->ref)) $this->ref='(PROV'.$this->id.')'; - $sql = 'UPDATE '.MAIN_DB_PREFIX."propal SET ref='".$this->ref."' WHERE rowid=".$this->id; + if ($this->id) + { + if (empty($this->ref)) $this->ref='(PROV'.$this->id.')'; + $sql = 'UPDATE '.MAIN_DB_PREFIX."propal SET ref='".$this->ref."' WHERE rowid=".$this->id; - dol_syslog(get_class($this)."::create sql=".$sql); - $resql=$this->db->query($sql); - if (! $resql) $error++; + dol_syslog(get_class($this)."::create sql=".$sql); + $resql=$this->db->query($sql); + if (! $resql) $error++; - /* - * Insertion du detail des produits dans la base - */ - if (! $error) - { - $fk_parent_line=0; - $num=count($this->lines); + /* + * Insertion du detail des produits dans la base + */ + if (! $error) + { + $fk_parent_line=0; + $num=count($this->lines); - for ($i=0;$i<$num;$i++) - { - // Reset fk_parent_line for no child products and special product - if (($this->lines[$i]->product_type != 9 && empty($this->lines[$i]->fk_parent_line)) || $this->lines[$i]->product_type == 9) { - $fk_parent_line = 0; - } + for ($i=0;$i<$num;$i++) + { + // Reset fk_parent_line for no child products and special product + if (($this->lines[$i]->product_type != 9 && empty($this->lines[$i]->fk_parent_line)) || $this->lines[$i]->product_type == 9) { + $fk_parent_line = 0; + } - $result = $this->addline( - $this->id, - $this->lines[$i]->desc, - $this->lines[$i]->subprice, - $this->lines[$i]->qty, - $this->lines[$i]->tva_tx, - $this->lines[$i]->localtax1_tx, - $this->lines[$i]->localtax2_tx, - $this->lines[$i]->fk_product, - $this->lines[$i]->remise_percent, - 'HT', - 0, - 0, - $this->lines[$i]->product_type, - $this->lines[$i]->rang, - $this->lines[$i]->special_code, - $fk_parent_line - ); + $result = $this->addline( + $this->id, + $this->lines[$i]->desc, + $this->lines[$i]->subprice, + $this->lines[$i]->qty, + $this->lines[$i]->tva_tx, + $this->lines[$i]->localtax1_tx, + $this->lines[$i]->localtax2_tx, + $this->lines[$i]->fk_product, + $this->lines[$i]->remise_percent, + 'HT', + 0, + 0, + $this->lines[$i]->product_type, + $this->lines[$i]->rang, + $this->lines[$i]->special_code, + $fk_parent_line + ); - if ($result < 0) - { - $error++; - $this->error=$this->db->error; - dol_print_error($this->db); - break; - } - // Defined the new fk_parent_line - if ($result > 0 && $this->lines[$i]->product_type == 9) { - $fk_parent_line = $result; - } - } - } + if ($result < 0) + { + $error++; + $this->error=$this->db->error; + dol_print_error($this->db); + break; + } + // Defined the new fk_parent_line + if ($result > 0 && $this->lines[$i]->product_type == 9) { + $fk_parent_line = $result; + } + } + } - // Add linked object - if (! $error && $this->origin && $this->origin_id) - { - $ret = $this->add_object_linked(); - if (! $ret) dol_print_error($this->db); - } + // 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) - { - $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; - $sql.= " SET fk_adresse_livraison = ".$this->fk_delivery_address; - $sql.= " WHERE ref = '".$this->ref."'"; - $sql.= " AND entity = ".$conf->entity; + // Set delivery address + if (! $error && $this->fk_delivery_address) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; + $sql.= " SET fk_adresse_livraison = ".$this->fk_delivery_address; + $sql.= " WHERE ref = '".$this->ref."'"; + $sql.= " AND entity = ".$conf->entity; - $result=$this->db->query($sql); - } + $result=$this->db->query($sql); + } - if (! $error) - { - // Mise a jour infos denormalisees - $resql=$this->update_price(1); - if ($resql) - { - if (! $notrigger) - { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PROPAL_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - } - } - else - { - $error++; - } - } - } - else - { - $error++; - } + if (! $error) + { + // Mise a jour infos denormalisees + $resql=$this->update_price(1); + if ($resql) + { + if (! $notrigger) + { + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('PROPAL_CREATE',$this,$user,$langs,$conf); + if ($result < 0) { + $error++; $this->errors=$interface->errors; + } + // Fin appel triggers + } + } + else + { + $error++; + } + } + } + else + { + $error++; + } - if (! $error) - { - $this->db->commit(); - dol_syslog(get_class($this)."::create done id=".$this->id); - return $this->id; - } - else - { - $this->error=$this->db->error(); - dol_syslog(get_class($this)."::create -2 ".$this->error, LOG_ERR); - $this->db->rollback(); - return -2; - } - } - else - { - $this->error=$this->db->error(); - dol_syslog(get_class($this)."::create -1 ".$this->error, LOG_ERR); - $this->db->rollback(); - return -1; - } - } + if (! $error) + { + $this->db->commit(); + dol_syslog(get_class($this)."::create done id=".$this->id); + return $this->id; + } + else + { + $this->error=$this->db->error(); + dol_syslog(get_class($this)."::create -2 ".$this->error, LOG_ERR); + $this->db->rollback(); + return -2; + } + } + else + { + $this->error=$this->db->error(); + dol_syslog(get_class($this)."::create -1 ".$this->error, LOG_ERR); + $this->db->rollback(); + return -1; + } + } - /** - * Insert into DB a proposal object completely defined by its data members (ex, results from copy). - * @param User $user User that create - * @return int Id of the new object if ok, <0 if ko - * @see create - */ - function create_from($user) - { - $this->products=$this->lines; + /** + * Insert into DB a proposal object completely defined by its data members (ex, results from copy). + * @param User $user User that create + * @return int Id of the new object if ok, <0 if ko + * @see create + */ + function create_from($user) + { + $this->products=$this->lines; - return $this->create(); - } + return $this->create(); + } - /** - * Load an object from its id and create a new one in database - * - * @param int $socid Id of thirdparty - * @param HookManager $hookmanager Hook manager instance - * @return int New id of clone - */ - function createFromClone($socid=0,$hookmanager=false) - { - global $user,$langs,$conf; + /** + * Load an object from its id and create a new one in database + * + * @param int $socid Id of thirdparty + * @param HookManager $hookmanager Hook manager instance + * @return int New id of clone + */ + function createFromClone($socid=0,$hookmanager=false) + { + global $user,$langs,$conf; - $error=0; - $now=dol_now(); + $error=0; + $now=dol_now(); - $this->db->begin(); + $this->db->begin(); - // Load source object - $objFrom = dol_clone($this); + // Load source object + $objFrom = dol_clone($this); - $objsoc=new Societe($this->db); + $objsoc=new Societe($this->db); - // Change socid if needed - if (! empty($socid) && $socid != $this->socid) - { - if ($objsoc->fetch($socid) > 0) - { - $this->socid = $objsoc->id; - $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 = ''; - $this->fk_delivery_address = ''; - } + // Change socid if needed + if (! empty($socid) && $socid != $this->socid) + { + if ($objsoc->fetch($socid) > 0) + { + $this->socid = $objsoc->id; + $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 = ''; + $this->fk_delivery_address = ''; + } - // TODO Change product price if multi-prices - } - else - { - $objsoc->fetch($this->socid); - } + // TODO Change product price if multi-prices + } + else + { + $objsoc->fetch($this->socid); + } - $this->id=0; - $this->statut=0; + $this->id=0; + $this->statut=0; - if (empty($conf->global->PROPALE_ADDON) || ! is_readable(DOL_DOCUMENT_ROOT ."/core/modules/propale/".$conf->global->PROPALE_ADDON.".php")) - { - $this->error='ErrorSetupNotComplete'; - return -1; - } + if (empty($conf->global->PROPALE_ADDON) || ! is_readable(DOL_DOCUMENT_ROOT ."/core/modules/propale/".$conf->global->PROPALE_ADDON.".php")) + { + $this->error='ErrorSetupNotComplete'; + return -1; + } - // Clear fields - $this->user_author = $user->id; - $this->user_valid = ''; - $this->date = $now; - $this->datep = $now; // deprecated - $this->fin_validite = $this->date + ($this->duree_validite * 24 * 3600); - $this->ref_client = ''; + // Clear fields + $this->user_author = $user->id; + $this->user_valid = ''; + $this->date = $now; + $this->datep = $now; // deprecated + $this->fin_validite = $this->date + ($this->duree_validite * 24 * 3600); + $this->ref_client = ''; - // Set ref - require_once(DOL_DOCUMENT_ROOT ."/core/modules/propale/".$conf->global->PROPALE_ADDON.".php"); - $obj = $conf->global->PROPALE_ADDON; - $modPropale = new $obj; - $this->ref = $modPropale->getNextValue($objsoc,$this); + // Set ref + require_once(DOL_DOCUMENT_ROOT ."/core/modules/propale/".$conf->global->PROPALE_ADDON.".php"); + $obj = $conf->global->PROPALE_ADDON; + $modPropale = new $obj; + $this->ref = $modPropale->getNextValue($objsoc,$this); - // Create clone - $result=$this->create($user); - if ($result < 0) $error++; + // Create clone + $result=$this->create($user); + if ($result < 0) $error++; - if (! $error) - { - // Hook of thirdparty module - 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++; - } + if (! $error) + { + // Hook of thirdparty module + 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++; + } - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PROPAL_CLONE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - } + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('PROPAL_CLONE',$this,$user,$langs,$conf); + if ($result < 0) { + $error++; $this->errors=$interface->errors; + } + // Fin appel triggers + } - // End - if (! $error) - { - $this->db->commit(); - return $this->id; - } - else - { - $this->db->rollback(); - return -1; - } - } + // End + if (! $error) + { + $this->db->commit(); + return $this->id; + } + else + { + $this->db->rollback(); + return -1; + } + } - /** - * Load a proposal from database and its ligne array - * - * @param int $rowid id of object to load - * @param string $ref Ref of proposal - * @return int >0 if OK, <0 if KO - */ - function fetch($rowid,$ref='') - { - global $conf; + /** + * Load a proposal from database and its ligne array + * + * @param int $rowid id of object to load + * @param string $ref Ref of proposal + * @return int >0 if OK, <0 if KO + */ + function fetch($rowid,$ref='') + { + global $conf; - $sql = "SELECT p.rowid, p.ref, p.remise, p.remise_percent, p.remise_absolue, p.fk_soc"; - $sql.= ", p.total, p.tva, p.localtax1, p.localtax2, p.total_ht"; - $sql.= ", p.datec"; - $sql.= ", p.date_valid as datev"; - $sql.= ", p.datep as dp"; - $sql.= ", p.fin_validite as dfv"; - $sql.= ", p.date_livraison as date_livraison"; - $sql.= ", p.model_pdf, p.ref_client, p.extraparams"; - $sql.= ", p.note as note_private, p.note_public"; - $sql.= ", p.fk_projet, p.fk_statut"; - $sql.= ", p.fk_user_author, p.fk_user_valid, p.fk_user_cloture"; - $sql.= ", p.fk_adresse_livraison"; - $sql.= ", p.fk_availability"; - $sql.= ", p.fk_demand_reason"; - $sql.= ", p.fk_cond_reglement"; - $sql.= ", p.fk_mode_reglement"; - $sql.= ", c.label as statut_label"; - $sql.= ", ca.code as availability_code, ca.label as availability"; - $sql.= ", dr.code as demand_reason_code, dr.label as demand_reason"; - $sql.= ", cr.code as cond_reglement_code, cr.libelle as cond_reglement, cr.libelle_facture as cond_reglement_libelle_doc"; - $sql.= ", cp.code as mode_reglement_code, cp.libelle as mode_reglement"; - $sql.= " FROM ".MAIN_DB_PREFIX."c_propalst as c, ".MAIN_DB_PREFIX."propal as p"; - $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as cp ON p.fk_mode_reglement = cp.id'; - $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_payment_term as cr ON p.fk_cond_reglement = cr.rowid'; - $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_availability as ca ON p.fk_availability = ca.rowid'; - $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_input_reason as dr ON p.fk_demand_reason = dr.rowid'; - $sql.= " WHERE p.fk_statut = c.id"; - $sql.= " AND p.entity = ".$conf->entity; - if ($ref) $sql.= " AND p.ref='".$ref."'"; - else $sql.= " AND p.rowid=".$rowid; + $sql = "SELECT p.rowid, p.ref, p.remise, p.remise_percent, p.remise_absolue, p.fk_soc"; + $sql.= ", p.total, p.tva, p.localtax1, p.localtax2, p.total_ht"; + $sql.= ", p.datec"; + $sql.= ", p.date_valid as datev"; + $sql.= ", p.datep as dp"; + $sql.= ", p.fin_validite as dfv"; + $sql.= ", p.date_livraison as date_livraison"; + $sql.= ", p.model_pdf, p.ref_client, p.extraparams"; + $sql.= ", p.note as note_private, p.note_public"; + $sql.= ", p.fk_projet, p.fk_statut"; + $sql.= ", p.fk_user_author, p.fk_user_valid, p.fk_user_cloture"; + $sql.= ", p.fk_adresse_livraison"; + $sql.= ", p.fk_availability"; + $sql.= ", p.fk_demand_reason"; + $sql.= ", p.fk_cond_reglement"; + $sql.= ", p.fk_mode_reglement"; + $sql.= ", c.label as statut_label"; + $sql.= ", ca.code as availability_code, ca.label as availability"; + $sql.= ", dr.code as demand_reason_code, dr.label as demand_reason"; + $sql.= ", cr.code as cond_reglement_code, cr.libelle as cond_reglement, cr.libelle_facture as cond_reglement_libelle_doc"; + $sql.= ", cp.code as mode_reglement_code, cp.libelle as mode_reglement"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_propalst as c, ".MAIN_DB_PREFIX."propal as p"; + $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as cp ON p.fk_mode_reglement = cp.id'; + $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_payment_term as cr ON p.fk_cond_reglement = cr.rowid'; + $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_availability as ca ON p.fk_availability = ca.rowid'; + $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_input_reason as dr ON p.fk_demand_reason = dr.rowid'; + $sql.= " WHERE p.fk_statut = c.id"; + $sql.= " AND p.entity = ".$conf->entity; + if ($ref) $sql.= " AND p.ref='".$ref."'"; + else $sql.= " AND p.rowid=".$rowid; - dol_syslog(get_class($this)."::fetch sql=".$sql, LOG_DEBUG); - $resql=$this->db->query($sql); - if ($resql) - { - if ($this->db->num_rows($resql)) - { - $obj = $this->db->fetch_object($resql); + dol_syslog(get_class($this)."::fetch sql=".$sql, LOG_DEBUG); + $resql=$this->db->query($sql); + if ($resql) + { + if ($this->db->num_rows($resql)) + { + $obj = $this->db->fetch_object($resql); - $this->id = $obj->rowid; + $this->id = $obj->rowid; - $this->ref = $obj->ref; - $this->ref_client = $obj->ref_client; - $this->remise = $obj->remise; - $this->remise_percent = $obj->remise_percent; - $this->remise_absolue = $obj->remise_absolue; - $this->total = $obj->total; // TODO obsolete - $this->total_ht = $obj->total_ht; - $this->total_tva = $obj->tva; - $this->total_localtax1 = $obj->localtax1; - $this->total_localtax2 = $obj->localtax2; - $this->total_ttc = $obj->total; - $this->socid = $obj->fk_soc; - $this->fk_project = $obj->fk_projet; - $this->modelpdf = $obj->model_pdf; - $this->note = $obj->note_private; // TODO obsolete - $this->note_private = $obj->note_private; - $this->note_public = $obj->note_public; - $this->statut = $obj->fk_statut; - $this->statut_libelle = $obj->statut_label; + $this->ref = $obj->ref; + $this->ref_client = $obj->ref_client; + $this->remise = $obj->remise; + $this->remise_percent = $obj->remise_percent; + $this->remise_absolue = $obj->remise_absolue; + $this->total = $obj->total; // TODO obsolete + $this->total_ht = $obj->total_ht; + $this->total_tva = $obj->tva; + $this->total_localtax1 = $obj->localtax1; + $this->total_localtax2 = $obj->localtax2; + $this->total_ttc = $obj->total; + $this->socid = $obj->fk_soc; + $this->fk_project = $obj->fk_projet; + $this->modelpdf = $obj->model_pdf; + $this->note = $obj->note_private; // TODO obsolete + $this->note_private = $obj->note_private; + $this->note_public = $obj->note_public; + $this->statut = $obj->fk_statut; + $this->statut_libelle = $obj->statut_label; - $this->datec = $this->db->jdate($obj->datec); // TODO obsolete - $this->datev = $this->db->jdate($obj->datev); // TODO obsolete - $this->date_creation = $this->db->jdate($obj->datec); //Creation date + $this->datec = $this->db->jdate($obj->datec); // TODO obsolete + $this->datev = $this->db->jdate($obj->datev); // TODO obsolete + $this->date_creation = $this->db->jdate($obj->datec); //Creation date $this->date_validation = $this->db->jdate($obj->datev); //Validation date - $this->date = $this->db->jdate($obj->dp); // Proposal date - $this->datep = $this->db->jdate($obj->dp); // deprecated - $this->fin_validite = $this->db->jdate($obj->dfv); - $this->date_livraison = $this->db->jdate($obj->date_livraison); - $this->availability_id = $obj->fk_availability; - $this->availability_code = $obj->availability_code; - $this->availability = $obj->availability; - $this->demand_reason_id = $obj->fk_demand_reason; - $this->demand_reason_code = $obj->demand_reason_code; - $this->demand_reason = $obj->demand_reason; - $this->fk_delivery_address = $obj->fk_adresse_livraison; // TODO obsolete - $this->fk_address = $obj->fk_adresse_livraison; + $this->date = $this->db->jdate($obj->dp); // Proposal date + $this->datep = $this->db->jdate($obj->dp); // deprecated + $this->fin_validite = $this->db->jdate($obj->dfv); + $this->date_livraison = $this->db->jdate($obj->date_livraison); + $this->availability_id = $obj->fk_availability; + $this->availability_code = $obj->availability_code; + $this->availability = $obj->availability; + $this->demand_reason_id = $obj->fk_demand_reason; + $this->demand_reason_code = $obj->demand_reason_code; + $this->demand_reason = $obj->demand_reason; + $this->fk_delivery_address = $obj->fk_adresse_livraison; // TODO obsolete + $this->fk_address = $obj->fk_adresse_livraison; - $this->mode_reglement_id = $obj->fk_mode_reglement; - $this->mode_reglement_code = $obj->mode_reglement_code; - $this->mode_reglement = $obj->mode_reglement; - $this->cond_reglement_id = $obj->fk_cond_reglement; - $this->cond_reglement_code = $obj->cond_reglement_code; - $this->cond_reglement = $obj->cond_reglement; - $this->cond_reglement_doc = $obj->cond_reglement_libelle_doc; - - $this->extraparams = (array) dol_json_decode($obj->extraparams, true); + $this->mode_reglement_id = $obj->fk_mode_reglement; + $this->mode_reglement_code = $obj->mode_reglement_code; + $this->mode_reglement = $obj->mode_reglement; + $this->cond_reglement_id = $obj->fk_cond_reglement; + $this->cond_reglement_code = $obj->cond_reglement_code; + $this->cond_reglement = $obj->cond_reglement; + $this->cond_reglement_doc = $obj->cond_reglement_libelle_doc; - $this->user_author_id = $obj->fk_user_author; - $this->user_valid_id = $obj->fk_user_valid; - $this->user_close_id = $obj->fk_user_cloture; + $this->extraparams = (array) dol_json_decode($obj->extraparams, true); - if ($obj->fk_statut == 0) - { - $this->brouillon = 1; - } + $this->user_author_id = $obj->fk_user_author; + $this->user_valid_id = $obj->fk_user_valid; + $this->user_close_id = $obj->fk_user_cloture; - $this->db->free($resql); + if ($obj->fk_statut == 0) + { + $this->brouillon = 1; + } - $this->lines = array(); + $this->db->free($resql); - /* - * Lignes propales liees a un produit ou non - */ - $sql = "SELECT d.rowid, d.fk_propal, d.fk_parent_line, d.description, d.price, d.tva_tx, d.localtax1_tx, d.localtax2_tx, d.qty, d.fk_remise_except, d.remise_percent, d.subprice, d.fk_product,"; - $sql.= " d.info_bits, d.total_ht, d.total_tva, d.total_localtax1, d.total_localtax2, d.total_ttc, d.marge_tx, d.marque_tx, d.special_code, d.rang, d.product_type,"; + $this->lines = array(); + + /* + * Lignes propales liees a un produit ou non + */ + $sql = "SELECT d.rowid, d.fk_propal, d.fk_parent_line, d.description, d.price, d.tva_tx, d.localtax1_tx, d.localtax2_tx, d.qty, d.fk_remise_except, d.remise_percent, d.subprice, d.fk_product,"; + $sql.= " d.info_bits, d.total_ht, d.total_tva, d.total_localtax1, d.total_localtax2, d.total_ttc, d.marge_tx, d.marque_tx, d.special_code, d.rang, d.product_type,"; $sql.= ' p.ref as product_ref, p.description as product_desc, p.fk_product_type, p.label as product_label'; - $sql.= " FROM ".MAIN_DB_PREFIX."propaldet as d"; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON d.fk_product = p.rowid"; - $sql.= " WHERE d.fk_propal = ".$this->id; - $sql.= " ORDER by d.rang"; + $sql.= " FROM ".MAIN_DB_PREFIX."propaldet as d"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON d.fk_product = p.rowid"; + $sql.= " WHERE d.fk_propal = ".$this->id; + $sql.= " ORDER by d.rang"; - $result = $this->db->query($sql); - if ($result) - { - $num = $this->db->num_rows($result); - $i = 0; + $result = $this->db->query($sql); + if ($result) + { + $num = $this->db->num_rows($result); + $i = 0; - while ($i < $num) - { - $objp = $this->db->fetch_object($result); + while ($i < $num) + { + $objp = $this->db->fetch_object($result); - $line = new PropaleLigne($this->db); + $line = new PropaleLigne($this->db); - $line->rowid = $objp->rowid; - $line->fk_propal = $objp->fk_propal; - $line->fk_parent_line = $objp->fk_parent_line; - $line->product_type = $objp->product_type; - $line->desc = $objp->description; // Description ligne - $line->qty = $objp->qty; - $line->tva_tx = $objp->tva_tx; - $line->localtax1_tx = $objp->localtax1_tx; - $line->localtax2_tx = $objp->localtax2_tx; - $line->subprice = $objp->subprice; - $line->fk_remise_except = $objp->fk_remise_except; - $line->remise_percent = $objp->remise_percent; - $line->price = $objp->price; // TODO deprecated + $line->rowid = $objp->rowid; + $line->fk_propal = $objp->fk_propal; + $line->fk_parent_line = $objp->fk_parent_line; + $line->product_type = $objp->product_type; + $line->desc = $objp->description; // Description ligne + $line->qty = $objp->qty; + $line->tva_tx = $objp->tva_tx; + $line->localtax1_tx = $objp->localtax1_tx; + $line->localtax2_tx = $objp->localtax2_tx; + $line->subprice = $objp->subprice; + $line->fk_remise_except = $objp->fk_remise_except; + $line->remise_percent = $objp->remise_percent; + $line->price = $objp->price; // TODO deprecated - $line->info_bits = $objp->info_bits; - $line->total_ht = $objp->total_ht; - $line->total_tva = $objp->total_tva; - $line->total_localtax1 = $objp->total_localtax1; - $line->total_localtax2 = $objp->total_localtax2; - $line->total_ttc = $objp->total_ttc; - $line->marge_tx = $objp->marge_tx; - $line->marque_tx = $objp->marque_tx; - $line->special_code = $objp->special_code; - $line->rang = $objp->rang; + $line->info_bits = $objp->info_bits; + $line->total_ht = $objp->total_ht; + $line->total_tva = $objp->total_tva; + $line->total_localtax1 = $objp->total_localtax1; + $line->total_localtax2 = $objp->total_localtax2; + $line->total_ttc = $objp->total_ttc; + $line->marge_tx = $objp->marge_tx; + $line->marque_tx = $objp->marque_tx; + $line->special_code = $objp->special_code; + $line->rang = $objp->rang; - $line->fk_product = $objp->fk_product; + $line->fk_product = $objp->fk_product; $line->ref = $objp->product_ref; // TODO deprecated $line->product_ref = $objp->product_ref; $line->libelle = $objp->product_label; // TODO deprecated $line->label = $objp->product_label; // TODO deprecated $line->product_label = $objp->product_label; - $line->product_desc = $objp->product_desc; // Description produit + $line->product_desc = $objp->product_desc; // Description produit $line->fk_product_type = $objp->fk_product_type; - $this->lines[$i] = $line; - //dol_syslog("1 ".$line->fk_product); - //print "xx $i ".$this->lines[$i]->fk_product; - $i++; - } - $this->db->free($result); - } - else - { - $this->error=$this->db->error(); - dol_syslog(get_class($this)."::fetch Error ".$this->error, LOG_ERR); - return -1; - } - - return 1; - } - - $this->error="Record Not Found"; - return 0; - } - else - { - $this->error=$this->db->error(); - dol_syslog(get_class($this)."::fetch Error ".$this->error, LOG_ERR); - return -1; - } - } - - /** - * Set status to validated - * - * @param User $user Object user that validate - * @param int $notrigger 1=Does not execute triggers, 0= execuete triggers - * @return int <0 if KO, >=0 if OK - */ - function valid($user, $notrigger=0) - { - global $conf,$langs; - - $error=0; - $now=dol_now(); - - if ($user->rights->propale->valider) - { - $this->db->begin(); - - $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; - $sql.= " SET fk_statut = 1, date_valid='".$this->db->idate($now)."', fk_user_valid=".$user->id; - $sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; - - dol_syslog(get_class($this).'::valid sql='.$sql); - if ($this->db->query($sql)) - { - if (! $notrigger) - { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PROPAL_VALIDATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - } - - if (! $error) - { - $this->brouillon=0; - $this->statut = 1; - $this->user_valid_id=$user->id; - $this->datev=$now; - $this->db->commit(); - return 1; - } - else - { - $this->db->rollback(); - return -2; - } - } - else - { - $this->db->rollback(); - return -1; - } - } - } - - - /** - * Define proposal date - * - * @param User $user Object user that modify - * @param timestamp $date Date - * @return int <0 if KO, >0 if OK - */ - function set_date($user, $date) - { - if (empty($date)) - { - $this->error='ErrorBadParameter'; - dol_syslog(get_class($this)."::set_date ".$this->error, LOG_ERR); - return -1; - } - - if ($user->rights->propale->creer) - { - $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET datep = '".$this->db->idate($date)."'"; - $sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; - - dol_syslog(get_class($this)."::set_date sql=".$sql); - if ($this->db->query($sql) ) - { - $this->date = $date; - $this->datep = $date; // deprecated - return 1; - } - else - { - $this->error=$this->db->lasterror(); - dol_syslog(get_class($this)."::set_date ".$this->error, LOG_ERR); - return -1; - } - } - } - - /** - * Define end validity date - * - * @param User $user Object user that modify - * @param timestamp $date_fin_validite End of validity date - * @return int <0 if KO, >0 if OK - */ - function set_echeance($user, $date_fin_validite) - { - if ($user->rights->propale->creer) - { - $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET fin_validite = ".($date_fin_validite!=''?"'".$this->db->idate($date_fin_validite)."'":'null'); - $sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; - if ($this->db->query($sql) ) - { - $this->fin_validite = $date_fin_validite; - return 1; - } - else - { - $this->error=$this->db->error(); - dol_syslog(get_class($this)."::set_echeance Erreur SQL".$this->error, LOG_ERR); - return -1; - } - } - } - - /** - * Set delivery date - * - * @param User $user Object user that modify - * @param timestamp $date_livraison Delivery date - * @return int <0 if ko, >0 if ok - */ - function set_date_livraison($user, $date_livraison) - { - if ($user->rights->propale->creer) - { - $sql = "UPDATE ".MAIN_DB_PREFIX."propal "; - $sql.= " SET date_livraison = ".($date_livraison!=''?"'".$this->db->idate($date_livraison)."'":'null'); - $sql.= " WHERE rowid = ".$this->id; - - if ($this->db->query($sql)) - { - $this->date_livraison = $date_livraison; - return 1; - } - else - { - $this->error=$this->db->error(); - dol_syslog(get_class($this)."::set_date_livraison Erreur SQL"); - return -1; - } - } - } - - /** - * Set delivery - * - * @param User $user Object user that modify - * @param int $id Availability id - * @return int <0 if KO, >0 if OK - */ - function set_availability($user, $id) - { - if ($user->rights->propale->creer) - { - $sql = "UPDATE ".MAIN_DB_PREFIX."propal "; - $sql.= " SET fk_availability = '".$id."'"; - $sql.= " WHERE rowid = ".$this->id; - - if ($this->db->query($sql)) - { - $this->fk_availability = $id; - return 1; - } - else - { - $this->error=$this->db->error(); - dol_syslog("Propal::set_availability Erreur SQL"); - return -1; - } - } - } - - /** - * Set source of demand - * - * @param User $user Object user that modify - * @param int $id Input reason id - * @return int <0 if KO, >0 if OK - */ - function set_demand_reason($user, $id) - { - if ($user->rights->propale->creer) - { - $sql = "UPDATE ".MAIN_DB_PREFIX."propal "; - $sql.= " SET fk_demand_reason = '".$id."'"; - $sql.= " WHERE rowid = ".$this->id; - - if ($this->db->query($sql)) - { - $this->fk_demand_reason = $id; - return 1; - } - else - { - $this->error=$this->db->error(); - dol_syslog("Propal::set_demand_reason Erreur SQL"); - return -1; - } - } - } - - /** - * Set customer reference number - * - * @param User $user Object user that modify - * @param string $ref_client Customer reference - * @return int <0 if ko, >0 if ok - */ - function set_ref_client($user, $ref_client) - { - if ($user->rights->propale->creer) - { - dol_syslog('Propale::set_ref_client this->id='.$this->id.', ref_client='.$ref_client); - - $sql = 'UPDATE '.MAIN_DB_PREFIX.'propal SET ref_client = '.(empty($ref_client) ? 'NULL' : '\''.$this->db->escape($ref_client).'\''); - $sql.= ' WHERE rowid = '.$this->id; - if ($this->db->query($sql) ) - { - $this->ref_client = $ref_client; - return 1; - } - else - { - $this->error=$this->db->error(); - dol_syslog('Propale::set_ref_client Erreur '.$this->error.' - '.$sql); - return -2; - } - } - else - { - return -1; - } - } - - /** - * Set an overall discount on the proposal - * - * @param User $user Object user that modify - * @param double $remise Amount discount - * @return int <0 if ko, >0 if ok - */ - function set_remise_percent($user, $remise) - { - $remise=trim($remise)?trim($remise):0; - - if ($user->rights->propale->creer) - { - $remise = price2num($remise); - - $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET remise_percent = ".$remise; - $sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; - - if ($this->db->query($sql) ) - { - $this->remise_percent = $remise; - $this->update_price(1); - return 1; - } - else - { - $this->error=$this->db->error(); - dol_syslog("Propal::set_remise_percent Error sql=$sql"); - return -1; - } - } - } - - - /** - * Set an absolute overall discount on the proposal - * - * @param User $user Object user that modify - * @param double $remise Amount discount - * @return int <0 if ko, >0 if ok - */ - function set_remise_absolue($user, $remise) - { - $remise=trim($remise)?trim($remise):0; - - if ($user->rights->propale->creer) - { - $remise = price2num($remise); - - $sql = "UPDATE ".MAIN_DB_PREFIX."propal "; - $sql.= " SET remise_absolue = ".$remise; - $sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; - - if ($this->db->query($sql) ) - { - $this->remise_absolue = $remise; - $this->update_price(1); - return 1; - } - else - { - $this->error=$this->db->error(); - dol_syslog("Propal::set_remise_absolue Error sql=$sql"); - return -1; - } - } - } - - - - /** - * Close the commercial proposal - * - * @param User $user Object user that close - * @param int $statut Statut - * @param text $note Comment - * @return int <0 if KO, >0 if OK - */ - function reopen($user, $statut, $note) - { - global $langs,$conf; - - $this->statut = $statut; - $error=0; - - $this->db->begin(); - - $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; - $sql.= " SET fk_statut = ".$statut.", note = '".$this->db->escape($note)."', date_cloture=".$this->db->idate(mktime()).", fk_user_cloture=".$user->id; - $sql.= " WHERE rowid = ".$this->id; - - $resql=$this->db->query($sql); - if ($resql) - { - - } - } - - - /** - * Close the commercial proposal - * - * @param User $user Object user that close - * @param int $statut Statut - * @param text $note Comment - * @return int <0 if KO, >0 if OK - */ - function cloture($user, $statut, $note) - { - global $langs,$conf; - - $this->statut = $statut; - $error=0; - - $this->db->begin(); - - $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; - $sql.= " SET fk_statut = ".$statut.", note = '".$this->db->escape($note)."', date_cloture=".$this->db->idate(mktime()).", fk_user_cloture=".$user->id; - $sql.= " WHERE rowid = ".$this->id; - - $resql=$this->db->query($sql); - if ($resql) - { - if ($statut == 2) - { - // Classe la societe rattachee comme client - $soc=new Societe($this->db); - $soc->id = $this->socid; - $result=$soc->set_as_client(); - - if ($result < 0) - { - $this->error=$this->db->error(); - $this->db->rollback(); - return -2; - } - - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PROPAL_CLOSE_SIGNED',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - } - else - { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PROPAL_CLOSE_REFUSED',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - } - - $this->db->commit(); - return 1; - } - else - { - $this->error=$this->db->error(); - $this->db->rollback(); - return -1; - } - } - - /** - * Class invoiced the Propal - * - * @return int <0 si ko, >0 si ok - */ - function classer_facturee() - { - $sql = 'UPDATE '.MAIN_DB_PREFIX.'propal SET fk_statut = 4'; - $sql .= ' WHERE rowid = '.$this->id.' AND fk_statut > 0 ;'; - if ($this->db->query($sql) ) - { - return 1; - } - else - { - dol_print_error($this->db); - } - } - - /** - * Set draft status - * - * @param User $user Object user that modify - * @return int <0 if KO, >0 if OK - */ - function set_draft($user) - { - global $conf,$langs; - - $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET fk_statut = 0"; - $sql.= " WHERE rowid = ".$this->id; - - if ($this->db->query($sql)) - { - $this->statut = 0; - return 1; - } - else - { - return -1; - } - } - - - /** - * Return list of proposal (eventually filtered on user) into an array - * - * @param int $shortlist 0=Return array[id]=ref, 1=Return array[](id=>id,ref=>ref) - * @param int $draft 0=not draft, 1=draft - * @param int $notcurrentuser 0=current user, 1=not current user - * @param int $socid Id third pary - * @param int $limit For pagination - * @param int $offset For pagination - * @param string $sortfield Sort criteria - * @param string $sortorder Sort order - * @return int -1 if KO, array with result if OK - */ - function liste_array($shortlist=0, $draft=0, $notcurrentuser=0, $socid=0, $limit=0, $offset=0, $sortfield='p.datep', $sortorder='DESC') - { - global $conf,$user; - - $ga = array(); - - $sql = "SELECT s.nom, s.rowid, p.rowid as propalid, p.fk_statut, p.total_ht, p.ref, p.remise, "; - $sql.= " p.datep as dp, p.fin_validite as datelimite"; - $sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."propal as p, ".MAIN_DB_PREFIX."c_propalst as c"; - $sql.= " WHERE p.entity = ".$conf->entity; - $sql.= " AND p.fk_soc = s.rowid"; - $sql.= " AND p.fk_statut = c.id"; - if ($socid) $sql.= " AND s.rowid = ".$socid; - if ($draft) $sql.= " AND p.fk_statut = 0"; - if ($notcurrentuser) $sql.= " AND p.fk_user_author <> ".$user->id; - $sql.= $this->db->order($sortfield,$sortorder); - $sql.= $this->db->plimit($limit,$offset); - - $result=$this->db->query($sql); - if ($result) - { - $num = $this->db->num_rows($result); - if ($num) - { - $i = 0; - while ($i < $num) - { - $obj = $this->db->fetch_object($result); - - if ($shortlist) - { - $ga[$obj->propalid] = $obj->ref; - } - else - { - $ga[$i]['id'] = $obj->propalid; - $ga[$i]['ref'] = $obj->ref; - } - - $i++; - } - } - return $ga; - } - else - { - dol_print_error($this->db); - return -1; - } - } - - /** - * Returns an array with the numbers of related invoices - * - * @return array Array of invoices - */ - function getInvoiceArrayList() - { - return $this->InvoiceArrayList($this->id); - } - - /** - * Returns an array with id and ref of related invoices - * - * @param int $id Id propal - * @return array Array of invoices id - */ - function InvoiceArrayList($id) - { - $ga = array(); - $linkedInvoices = array(); - - $this->fetchObjectLinked($id,$this->element); - foreach($this->linkedObjectsIds as $objecttype => $objectid) - { - $numi=count($objectid); - for ($i=0;$i<$numi;$i++) - { - // Cas des factures liees directement - if ($objecttype == 'facture') - { - $linkedInvoices[] = $objectid[$i]; - } - // Cas des factures liees via la commande - else - { - $this->fetchObjectLinked($objectid[$i],$objecttype); - foreach($this->linkedObjectsIds as $subobjecttype => $subobjectid) - { - $numj=count($subobjectid); - for ($j=0;$j<$numj;$j++) - { - $linkedInvoices[] = $subobjectid[$j]; - } - } - } - } - } - - if (count($linkedInvoices) > 0) - { - $sql= "SELECT rowid as facid, facnumber, total, datef as df, fk_user_author, fk_statut, paye"; - $sql.= " FROM ".MAIN_DB_PREFIX."facture"; - $sql.= " WHERE rowid IN (".implode(',',$linkedInvoices).")"; - - dol_syslog("Propal::InvoiceArrayList sql=".$sql); - $resql=$this->db->query($sql); - - if ($resql) - { - $tab_sqlobj=array(); - $nump = $this->db->num_rows($resql); - for ($i = 0;$i < $nump;$i++) - { - $sqlobj = $this->db->fetch_object($resql); - $tab_sqlobj[] = $sqlobj; - } - $this->db->free($resql); - - $nump = count($tab_sqlobj); - - if ($nump) - { - $i = 0; - while ($i < $nump) - { - $obj = array_shift($tab_sqlobj); - - $ga[$i] = $obj; - - $i++; - } - } - return $ga; - } - else - { - return -1; - } - } - else return $ga; - } - - /** - * Delete proposal - * - * @param User $user Object user that delete - * @param int $notrigger 1=Does not execute triggers, 0= execuete triggers - * @return int 1 if ok, otherwise if error - */ - function delete($user, $notrigger=0) - { - global $conf,$langs; + $this->lines[$i] = $line; + //dol_syslog("1 ".$line->fk_product); + //print "xx $i ".$this->lines[$i]->fk_product; + $i++; + } + $this->db->free($result); + } + else + { + $this->error=$this->db->error(); + dol_syslog(get_class($this)."::fetch Error ".$this->error, LOG_ERR); + return -1; + } + + return 1; + } + + $this->error="Record Not Found"; + return 0; + } + else + { + $this->error=$this->db->error(); + dol_syslog(get_class($this)."::fetch Error ".$this->error, LOG_ERR); + return -1; + } + } + + /** + * Set status to validated + * + * @param User $user Object user that validate + * @param int $notrigger 1=Does not execute triggers, 0= execuete triggers + * @return int <0 if KO, >=0 if OK + */ + function valid($user, $notrigger=0) + { + global $conf,$langs; + + $error=0; + $now=dol_now(); + + if ($user->rights->propale->valider) + { + $this->db->begin(); + + $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; + $sql.= " SET fk_statut = 1, date_valid='".$this->db->idate($now)."', fk_user_valid=".$user->id; + $sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; + + dol_syslog(get_class($this).'::valid sql='.$sql); + if ($this->db->query($sql)) + { + if (! $notrigger) + { + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('PROPAL_VALIDATE',$this,$user,$langs,$conf); + if ($result < 0) { + $error++; $this->errors=$interface->errors; + } + // Fin appel triggers + } + + if (! $error) + { + $this->brouillon=0; + $this->statut = 1; + $this->user_valid_id=$user->id; + $this->datev=$now; + $this->db->commit(); + return 1; + } + else + { + $this->db->rollback(); + return -2; + } + } + else + { + $this->db->rollback(); + return -1; + } + } + } + + + /** + * Define proposal date + * + * @param User $user Object user that modify + * @param timestamp $date Date + * @return int <0 if KO, >0 if OK + */ + function set_date($user, $date) + { + if (empty($date)) + { + $this->error='ErrorBadParameter'; + dol_syslog(get_class($this)."::set_date ".$this->error, LOG_ERR); + return -1; + } + + if ($user->rights->propale->creer) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET datep = '".$this->db->idate($date)."'"; + $sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; + + dol_syslog(get_class($this)."::set_date sql=".$sql); + if ($this->db->query($sql) ) + { + $this->date = $date; + $this->datep = $date; // deprecated + return 1; + } + else + { + $this->error=$this->db->lasterror(); + dol_syslog(get_class($this)."::set_date ".$this->error, LOG_ERR); + return -1; + } + } + } + + /** + * Define end validity date + * + * @param User $user Object user that modify + * @param timestamp $date_fin_validite End of validity date + * @return int <0 if KO, >0 if OK + */ + function set_echeance($user, $date_fin_validite) + { + if ($user->rights->propale->creer) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET fin_validite = ".($date_fin_validite!=''?"'".$this->db->idate($date_fin_validite)."'":'null'); + $sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; + if ($this->db->query($sql) ) + { + $this->fin_validite = $date_fin_validite; + return 1; + } + else + { + $this->error=$this->db->error(); + dol_syslog(get_class($this)."::set_echeance Erreur SQL".$this->error, LOG_ERR); + return -1; + } + } + } + + /** + * Set delivery date + * + * @param User $user Object user that modify + * @param timestamp $date_livraison Delivery date + * @return int <0 if ko, >0 if ok + */ + function set_date_livraison($user, $date_livraison) + { + if ($user->rights->propale->creer) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."propal "; + $sql.= " SET date_livraison = ".($date_livraison!=''?"'".$this->db->idate($date_livraison)."'":'null'); + $sql.= " WHERE rowid = ".$this->id; + + if ($this->db->query($sql)) + { + $this->date_livraison = $date_livraison; + return 1; + } + else + { + $this->error=$this->db->error(); + dol_syslog(get_class($this)."::set_date_livraison Erreur SQL"); + return -1; + } + } + } + + /** + * Set delivery + * + * @param User $user Object user that modify + * @param int $id Availability id + * @return int <0 if KO, >0 if OK + */ + function set_availability($user, $id) + { + if ($user->rights->propale->creer) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."propal "; + $sql.= " SET fk_availability = '".$id."'"; + $sql.= " WHERE rowid = ".$this->id; + + if ($this->db->query($sql)) + { + $this->fk_availability = $id; + return 1; + } + else + { + $this->error=$this->db->error(); + dol_syslog("Propal::set_availability Erreur SQL"); + return -1; + } + } + } + + /** + * Set source of demand + * + * @param User $user Object user that modify + * @param int $id Input reason id + * @return int <0 if KO, >0 if OK + */ + function set_demand_reason($user, $id) + { + if ($user->rights->propale->creer) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."propal "; + $sql.= " SET fk_demand_reason = '".$id."'"; + $sql.= " WHERE rowid = ".$this->id; + + if ($this->db->query($sql)) + { + $this->fk_demand_reason = $id; + return 1; + } + else + { + $this->error=$this->db->error(); + dol_syslog("Propal::set_demand_reason Erreur SQL"); + return -1; + } + } + } + + /** + * Set customer reference number + * + * @param User $user Object user that modify + * @param string $ref_client Customer reference + * @return int <0 if ko, >0 if ok + */ + function set_ref_client($user, $ref_client) + { + if ($user->rights->propale->creer) + { + dol_syslog('Propale::set_ref_client this->id='.$this->id.', ref_client='.$ref_client); + + $sql = 'UPDATE '.MAIN_DB_PREFIX.'propal SET ref_client = '.(empty($ref_client) ? 'NULL' : '\''.$this->db->escape($ref_client).'\''); + $sql.= ' WHERE rowid = '.$this->id; + if ($this->db->query($sql) ) + { + $this->ref_client = $ref_client; + return 1; + } + else + { + $this->error=$this->db->error(); + dol_syslog('Propale::set_ref_client Erreur '.$this->error.' - '.$sql); + return -2; + } + } + else + { + return -1; + } + } + + /** + * Set an overall discount on the proposal + * + * @param User $user Object user that modify + * @param double $remise Amount discount + * @return int <0 if ko, >0 if ok + */ + function set_remise_percent($user, $remise) + { + $remise=trim($remise)?trim($remise):0; + + if ($user->rights->propale->creer) + { + $remise = price2num($remise); + + $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET remise_percent = ".$remise; + $sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; + + if ($this->db->query($sql) ) + { + $this->remise_percent = $remise; + $this->update_price(1); + return 1; + } + else + { + $this->error=$this->db->error(); + dol_syslog("Propal::set_remise_percent Error sql=$sql"); + return -1; + } + } + } + + + /** + * Set an absolute overall discount on the proposal + * + * @param User $user Object user that modify + * @param double $remise Amount discount + * @return int <0 if ko, >0 if ok + */ + function set_remise_absolue($user, $remise) + { + $remise=trim($remise)?trim($remise):0; + + if ($user->rights->propale->creer) + { + $remise = price2num($remise); + + $sql = "UPDATE ".MAIN_DB_PREFIX."propal "; + $sql.= " SET remise_absolue = ".$remise; + $sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; + + if ($this->db->query($sql) ) + { + $this->remise_absolue = $remise; + $this->update_price(1); + return 1; + } + else + { + $this->error=$this->db->error(); + dol_syslog("Propal::set_remise_absolue Error sql=$sql"); + return -1; + } + } + } + + + + /** + * Close the commercial proposal + * + * @param User $user Object user that close + * @param int $statut Statut + * @param text $note Comment + * @return int <0 if KO, >0 if OK + */ + function reopen($user, $statut, $note) + { + global $langs,$conf; + + $this->statut = $statut; + $error=0; + + $this->db->begin(); + + $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; + $sql.= " SET fk_statut = ".$statut.", note = '".$this->db->escape($note)."', date_cloture=".$this->db->idate(mktime()).", fk_user_cloture=".$user->id; + $sql.= " WHERE rowid = ".$this->id; + + $resql=$this->db->query($sql); + if ($resql) + { + + } + } + + + /** + * Close the commercial proposal + * + * @param User $user Object user that close + * @param int $statut Statut + * @param text $note Comment + * @return int <0 if KO, >0 if OK + */ + function cloture($user, $statut, $note) + { + global $langs,$conf; + + $this->statut = $statut; + $error=0; + + $this->db->begin(); + + $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; + $sql.= " SET fk_statut = ".$statut.", note = '".$this->db->escape($note)."', date_cloture=".$this->db->idate(mktime()).", fk_user_cloture=".$user->id; + $sql.= " WHERE rowid = ".$this->id; + + $resql=$this->db->query($sql); + if ($resql) + { + if ($statut == 2) + { + // Classe la societe rattachee comme client + $soc=new Societe($this->db); + $soc->id = $this->socid; + $result=$soc->set_as_client(); + + if ($result < 0) + { + $this->error=$this->db->error(); + $this->db->rollback(); + return -2; + } + + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('PROPAL_CLOSE_SIGNED',$this,$user,$langs,$conf); + if ($result < 0) { + $error++; $this->errors=$interface->errors; + } + // Fin appel triggers + } + else + { + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('PROPAL_CLOSE_REFUSED',$this,$user,$langs,$conf); + if ($result < 0) { + $error++; $this->errors=$interface->errors; + } + // Fin appel triggers + } + + $this->db->commit(); + return 1; + } + else + { + $this->error=$this->db->error(); + $this->db->rollback(); + return -1; + } + } + + /** + * Class invoiced the Propal + * + * @return int <0 si ko, >0 si ok + */ + function classer_facturee() + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'propal SET fk_statut = 4'; + $sql .= ' WHERE rowid = '.$this->id.' AND fk_statut > 0 ;'; + if ($this->db->query($sql) ) + { + return 1; + } + else + { + dol_print_error($this->db); + } + } + + /** + * Set draft status + * + * @param User $user Object user that modify + * @return int <0 if KO, >0 if OK + */ + function set_draft($user) + { + global $conf,$langs; + + $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET fk_statut = 0"; + $sql.= " WHERE rowid = ".$this->id; + + if ($this->db->query($sql)) + { + $this->statut = 0; + return 1; + } + else + { + return -1; + } + } + + + /** + * Return list of proposal (eventually filtered on user) into an array + * + * @param int $shortlist 0=Return array[id]=ref, 1=Return array[](id=>id,ref=>ref) + * @param int $draft 0=not draft, 1=draft + * @param int $notcurrentuser 0=current user, 1=not current user + * @param int $socid Id third pary + * @param int $limit For pagination + * @param int $offset For pagination + * @param string $sortfield Sort criteria + * @param string $sortorder Sort order + * @return int -1 if KO, array with result if OK + */ + function liste_array($shortlist=0, $draft=0, $notcurrentuser=0, $socid=0, $limit=0, $offset=0, $sortfield='p.datep', $sortorder='DESC') + { + global $conf,$user; + + $ga = array(); + + $sql = "SELECT s.nom, s.rowid, p.rowid as propalid, p.fk_statut, p.total_ht, p.ref, p.remise, "; + $sql.= " p.datep as dp, p.fin_validite as datelimite"; + $sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."propal as p, ".MAIN_DB_PREFIX."c_propalst as c"; + $sql.= " WHERE p.entity = ".$conf->entity; + $sql.= " AND p.fk_soc = s.rowid"; + $sql.= " AND p.fk_statut = c.id"; + if ($socid) $sql.= " AND s.rowid = ".$socid; + if ($draft) $sql.= " AND p.fk_statut = 0"; + if ($notcurrentuser) $sql.= " AND p.fk_user_author <> ".$user->id; + $sql.= $this->db->order($sortfield,$sortorder); + $sql.= $this->db->plimit($limit,$offset); + + $result=$this->db->query($sql); + if ($result) + { + $num = $this->db->num_rows($result); + if ($num) + { + $i = 0; + while ($i < $num) + { + $obj = $this->db->fetch_object($result); + + if ($shortlist) + { + $ga[$obj->propalid] = $obj->ref; + } + else + { + $ga[$i]['id'] = $obj->propalid; + $ga[$i]['ref'] = $obj->ref; + } + + $i++; + } + } + return $ga; + } + else + { + dol_print_error($this->db); + return -1; + } + } + + /** + * Returns an array with the numbers of related invoices + * + * @return array Array of invoices + */ + function getInvoiceArrayList() + { + return $this->InvoiceArrayList($this->id); + } + + /** + * Returns an array with id and ref of related invoices + * + * @param int $id Id propal + * @return array Array of invoices id + */ + function InvoiceArrayList($id) + { + $ga = array(); + $linkedInvoices = array(); + + $this->fetchObjectLinked($id,$this->element); + foreach($this->linkedObjectsIds as $objecttype => $objectid) + { + $numi=count($objectid); + for ($i=0;$i<$numi;$i++) + { + // Cas des factures liees directement + if ($objecttype == 'facture') + { + $linkedInvoices[] = $objectid[$i]; + } + // Cas des factures liees via la commande + else + { + $this->fetchObjectLinked($objectid[$i],$objecttype); + foreach($this->linkedObjectsIds as $subobjecttype => $subobjectid) + { + $numj=count($subobjectid); + for ($j=0;$j<$numj;$j++) + { + $linkedInvoices[] = $subobjectid[$j]; + } + } + } + } + } + + if (count($linkedInvoices) > 0) + { + $sql= "SELECT rowid as facid, facnumber, total, datef as df, fk_user_author, fk_statut, paye"; + $sql.= " FROM ".MAIN_DB_PREFIX."facture"; + $sql.= " WHERE rowid IN (".implode(',',$linkedInvoices).")"; + + dol_syslog("Propal::InvoiceArrayList sql=".$sql); + $resql=$this->db->query($sql); + + if ($resql) + { + $tab_sqlobj=array(); + $nump = $this->db->num_rows($resql); + for ($i = 0;$i < $nump;$i++) + { + $sqlobj = $this->db->fetch_object($resql); + $tab_sqlobj[] = $sqlobj; + } + $this->db->free($resql); + + $nump = count($tab_sqlobj); + + if ($nump) + { + $i = 0; + while ($i < $nump) + { + $obj = array_shift($tab_sqlobj); + + $ga[$i] = $obj; + + $i++; + } + } + return $ga; + } + else + { + return -1; + } + } + else return $ga; + } + + /** + * Delete proposal + * + * @param User $user Object user that delete + * @param int $notrigger 1=Does not execute triggers, 0= execuete triggers + * @return int 1 if ok, otherwise if error + */ + function delete($user, $notrigger=0) + { + global $conf,$langs; require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"); - $error=0; + $error=0; - $this->db->begin(); - - if (! $error && ! $notrigger) - { - // Call triggers - include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PROPAL_DELETE',$this,$user,$langs,$conf); - if ($result < 0) { - $error++; $this->errors=$interface->errors; - } - // End call triggers - } - - if (! $error) - { - $sql = "DELETE FROM ".MAIN_DB_PREFIX."propaldet WHERE fk_propal = ".$this->id; - if ($this->db->query($sql)) - { - $sql = "DELETE FROM ".MAIN_DB_PREFIX."propal WHERE rowid = ".$this->id; - if ($this->db->query($sql)) - { - // Delete linked object - $res = $this->deleteObjectLinked(); - if ($res < 0) $error++; - - // Delete linked contacts - $res = $this->delete_linked_contact(); - if ($res < 0) $error++; - - if (! $error) - { - // We remove directory - $propalref = dol_sanitizeFileName($this->ref); - if ($conf->propale->dir_output) - { - $dir = $conf->propale->dir_output . "/" . $propalref ; - $file = $conf->propale->dir_output . "/" . $propalref . "/" . $propalref . ".pdf"; - if (file_exists($file)) - { - dol_delete_preview($this); - - if (!dol_delete_file($file)) - { - $this->error='ErrorFailToDeleteFile'; - $this->db->rollback(); - return 0; - } - } - if (file_exists($dir)) - { - $res=@dol_delete_dir($dir); - if (! $res) - { - $this->error='ErrorFailToDeleteDir'; - $this->db->rollback(); - return 0; - } - } - } - } - - if (! $error) - { - dol_syslog(get_class($this)."::delete $this->id by $user->id", LOG_DEBUG); - $this->db->commit(); - return 1; - } - else - { - $this->error=$this->db->lasterror(); - dol_syslog(get_class($this)."::delete ".$this->error, LOG_ERR); - $this->db->rollback(); - return 0; - } - } - else - { - $this->error=$this->db->lasterror(); - dol_syslog(get_class($this)."::delete ".$this->error, LOG_ERR); - $this->db->rollback(); - return -3; - } - } - else - { - $this->error=$this->db->lasterror(); - dol_syslog(get_class($this)."::delete ".$this->error, LOG_ERR); - $this->db->rollback(); - return -2; - } - } - else - { - $this->error=$this->db->lasterror(); - dol_syslog(get_class($this)."::delete ".$this->error, LOG_ERR); - $this->db->rollback(); - return -1; - } - } + $this->db->begin(); - /** - * Change the delivery time - * - * @param int $availability_id Id of new delivery time - * @return int >0 if OK, <0 if KO - */ - function availability($availability_id) - { - dol_syslog('Propale::availability('.$availability_id.')'); - if ($this->statut >= 0) - { - $sql = 'UPDATE '.MAIN_DB_PREFIX.'propal'; - $sql .= ' SET fk_availability = '.$availability_id; - $sql .= ' WHERE rowid='.$this->id; - if ( $this->db->query($sql) ) - { - $this->availability_id = $availability_id; - return 1; - } - else - { - dol_syslog('Propale::availability Erreur '.$sql.' - '.$this->db->error()); - $this->error=$this->db->error(); - return -1; - } - } - else - { - dol_syslog('Propale::availability, etat propale incompatible'); - $this->error='Etat propale incompatible '.$this->statut; - return -2; - } - } + if (! $error && ! $notrigger) + { + // Call triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('PROPAL_DELETE',$this,$user,$langs,$conf); + if ($result < 0) { + $error++; $this->errors=$interface->errors; + } + // End call triggers + } - /** - * Change source demand - * - * @param int $demand_reason_id Id of new source demand - * @return int >0 si ok, <0 si ko - */ - function demand_reason($demand_reason_id) - { - dol_syslog('Propale::demand_reason('.$demand_reason_id.')'); - if ($this->statut >= 0) - { - $sql = 'UPDATE '.MAIN_DB_PREFIX.'propal'; - $sql .= ' SET fk_demand_reason = '.$demand_reason_id; - $sql .= ' WHERE rowid='.$this->id; - if ( $this->db->query($sql) ) - { - $this->demand_reason_id = $demand_reason_id; - return 1; - } - else - { - dol_syslog('Propale::demand_reason Erreur '.$sql.' - '.$this->db->error()); - $this->error=$this->db->error(); - return -1; - } - } - else - { - dol_syslog('Propale::demand_reason, etat propale incompatible'); - $this->error='Etat propale incompatible '.$this->statut; - return -2; - } - } + if (! $error) + { + $sql = "DELETE FROM ".MAIN_DB_PREFIX."propaldet WHERE fk_propal = ".$this->id; + if ($this->db->query($sql)) + { + $sql = "DELETE FROM ".MAIN_DB_PREFIX."propal WHERE rowid = ".$this->id; + if ($this->db->query($sql)) + { + // Delete linked object + $res = $this->deleteObjectLinked(); + if ($res < 0) $error++; + + // Delete linked contacts + $res = $this->delete_linked_contact(); + if ($res < 0) $error++; + + if (! $error) + { + // We remove directory + $propalref = dol_sanitizeFileName($this->ref); + if ($conf->propale->dir_output) + { + $dir = $conf->propale->dir_output . "/" . $propalref ; + $file = $conf->propale->dir_output . "/" . $propalref . "/" . $propalref . ".pdf"; + if (file_exists($file)) + { + dol_delete_preview($this); + + if (!dol_delete_file($file)) + { + $this->error='ErrorFailToDeleteFile'; + $this->db->rollback(); + return 0; + } + } + if (file_exists($dir)) + { + $res=@dol_delete_dir($dir); + if (! $res) + { + $this->error='ErrorFailToDeleteDir'; + $this->db->rollback(); + return 0; + } + } + } + } + + if (! $error) + { + dol_syslog(get_class($this)."::delete $this->id by $user->id", LOG_DEBUG); + $this->db->commit(); + return 1; + } + else + { + $this->error=$this->db->lasterror(); + dol_syslog(get_class($this)."::delete ".$this->error, LOG_ERR); + $this->db->rollback(); + return 0; + } + } + else + { + $this->error=$this->db->lasterror(); + dol_syslog(get_class($this)."::delete ".$this->error, LOG_ERR); + $this->db->rollback(); + return -3; + } + } + else + { + $this->error=$this->db->lasterror(); + dol_syslog(get_class($this)."::delete ".$this->error, LOG_ERR); + $this->db->rollback(); + return -2; + } + } + else + { + $this->error=$this->db->lasterror(); + dol_syslog(get_class($this)."::delete ".$this->error, LOG_ERR); + $this->db->rollback(); + return -1; + } + } + + /** + * Change the delivery time + * + * @param int $availability_id Id of new delivery time + * @return int >0 if OK, <0 if KO + */ + function availability($availability_id) + { + dol_syslog('Propale::availability('.$availability_id.')'); + if ($this->statut >= 0) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'propal'; + $sql .= ' SET fk_availability = '.$availability_id; + $sql .= ' WHERE rowid='.$this->id; + if ( $this->db->query($sql) ) + { + $this->availability_id = $availability_id; + return 1; + } + else + { + dol_syslog('Propale::availability Erreur '.$sql.' - '.$this->db->error()); + $this->error=$this->db->error(); + return -1; + } + } + else + { + dol_syslog('Propale::availability, etat propale incompatible'); + $this->error='Etat propale incompatible '.$this->statut; + return -2; + } + } + + /** + * Change source demand + * + * @param int $demand_reason_id Id of new source demand + * @return int >0 si ok, <0 si ko + */ + function demand_reason($demand_reason_id) + { + dol_syslog('Propale::demand_reason('.$demand_reason_id.')'); + if ($this->statut >= 0) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'propal'; + $sql .= ' SET fk_demand_reason = '.$demand_reason_id; + $sql .= ' WHERE rowid='.$this->id; + if ( $this->db->query($sql) ) + { + $this->demand_reason_id = $demand_reason_id; + return 1; + } + else + { + dol_syslog('Propale::demand_reason Erreur '.$sql.' - '.$this->db->error()); + $this->error=$this->db->error(); + return -1; + } + } + else + { + dol_syslog('Propale::demand_reason, etat propale incompatible'); + $this->error='Etat propale incompatible '.$this->statut; + return -2; + } + } - /** - * Object Proposal Information - * - * @param int $id Proposal id - */ - function info($id) - { - $sql = "SELECT c.rowid, "; - $sql.= " c.datec, c.date_valid as datev, c.date_cloture as dateo,"; - $sql.= " c.fk_user_author, c.fk_user_valid, c.fk_user_cloture"; - $sql.= " FROM ".MAIN_DB_PREFIX."propal as c"; - $sql.= " WHERE c.rowid = ".$id; + /** + * Object Proposal Information + * + * @param int $id Proposal id + * @return void + */ + function info($id) + { + $sql = "SELECT c.rowid, "; + $sql.= " c.datec, c.date_valid as datev, c.date_cloture as dateo,"; + $sql.= " c.fk_user_author, c.fk_user_valid, c.fk_user_cloture"; + $sql.= " FROM ".MAIN_DB_PREFIX."propal as c"; + $sql.= " WHERE c.rowid = ".$id; - $result = $this->db->query($sql); + $result = $this->db->query($sql); - if ($result) - { - if ($this->db->num_rows($result)) - { - $obj = $this->db->fetch_object($result); + if ($result) + { + if ($this->db->num_rows($result)) + { + $obj = $this->db->fetch_object($result); - $this->id = $obj->rowid; + $this->id = $obj->rowid; - $this->date_creation = $this->db->jdate($obj->datec); - $this->date_validation = $this->db->jdate($obj->datev); - $this->date_cloture = $this->db->jdate($obj->dateo); + $this->date_creation = $this->db->jdate($obj->datec); + $this->date_validation = $this->db->jdate($obj->datev); + $this->date_cloture = $this->db->jdate($obj->dateo); - $cuser = new User($this->db); - $cuser->fetch($obj->fk_user_author); - $this->user_creation = $cuser; + $cuser = new User($this->db); + $cuser->fetch($obj->fk_user_author); + $this->user_creation = $cuser; - if ($obj->fk_user_valid) - { - $vuser = new User($this->db); - $vuser->fetch($obj->fk_user_valid); - $this->user_validation = $vuser; - } + if ($obj->fk_user_valid) + { + $vuser = new User($this->db); + $vuser->fetch($obj->fk_user_valid); + $this->user_validation = $vuser; + } - if ($obj->fk_user_cloture) - { - $cluser = new User($this->db); - $cluser->fetch($obj->fk_user_cloture); - $this->user_cloture = $cluser; - } + if ($obj->fk_user_cloture) + { + $cluser = new User($this->db); + $cluser->fetch($obj->fk_user_cloture); + $this->user_cloture = $cluser; + } - } - $this->db->free($result); + } + $this->db->free($result); - } - else - { - dol_print_error($this->db); - } - } + } + else + { + dol_print_error($this->db); + } + } - /** - * Return label of status of proposal (draft, validated, ...) - * - * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto - * @return string Label - */ - function getLibStatut($mode=0) - { - return $this->LibStatut($this->statut,$mode); - } + /** + * Return label of status of proposal (draft, validated, ...) + * + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto + * @return string Label + */ + function getLibStatut($mode=0) + { + return $this->LibStatut($this->statut,$mode); + } - /** - * Return label of a status (draft, validated, ...) - * - * @param int $statut id statut - * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto - * @return string Label - */ - function LibStatut($statut,$mode=1) - { - global $langs; - $langs->load("propal"); + /** + * Return label of a status (draft, validated, ...) + * + * @param int $statut id statut + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto + * @return string Label + */ + function LibStatut($statut,$mode=1) + { + global $langs; + $langs->load("propal"); - if ($mode == 0) - { - return $this->labelstatut[$statut]; - } - if ($mode == 1) - { - return $this->labelstatut_short[$statut]; - } - if ($mode == 2) - { - if ($statut==0) return img_picto($langs->trans('PropalStatusDraftShort'),'statut0').' '.$this->labelstatut_short[$statut]; - if ($statut==1) return img_picto($langs->trans('PropalStatusOpenedShort'),'statut1').' '.$this->labelstatut_short[$statut]; - if ($statut==2) return img_picto($langs->trans('PropalStatusSignedShort'),'statut3').' '.$this->labelstatut_short[$statut]; - if ($statut==3) return img_picto($langs->trans('PropalStatusNotSignedShort'),'statut5').' '.$this->labelstatut_short[$statut]; - if ($statut==4) return img_picto($langs->trans('PropalStatusBilledShort'),'statut6').' '.$this->labelstatut_short[$statut]; - } - if ($mode == 3) - { - if ($statut==0) return img_picto($langs->trans('PropalStatusDraftShort'),'statut0'); - if ($statut==1) return img_picto($langs->trans('PropalStatusOpenedShort'),'statut1'); - if ($statut==2) return img_picto($langs->trans('PropalStatusSignedShort'),'statut3'); - if ($statut==3) return img_picto($langs->trans('PropalStatusNotSignedShort'),'statut5'); - if ($statut==4) return img_picto($langs->trans('PropalStatusBilledShort'),'statut6'); - } - if ($mode == 4) - { - if ($statut==0) return img_picto($langs->trans('PropalStatusDraft'),'statut0').' '.$this->labelstatut[$statut]; - if ($statut==1) return img_picto($langs->trans('PropalStatusOpened'),'statut1').' '.$this->labelstatut[$statut]; - if ($statut==2) return img_picto($langs->trans('PropalStatusSigned'),'statut3').' '.$this->labelstatut[$statut]; - if ($statut==3) return img_picto($langs->trans('PropalStatusNotSigned'),'statut5').' '.$this->labelstatut[$statut]; - if ($statut==4) return img_picto($langs->trans('PropalStatusBilled'),'statut6').' '.$this->labelstatut[$statut]; - } - if ($mode == 5) - { - if ($statut==0) return $this->labelstatut_short[$statut].' '.img_picto($langs->trans('PropalStatusDraftShort'),'statut0'); - if ($statut==1) return $this->labelstatut_short[$statut].' '.img_picto($langs->trans('PropalStatusOpenedShort'),'statut1'); - if ($statut==2) return $this->labelstatut_short[$statut].' '.img_picto($langs->trans('PropalStatusSignedShort'),'statut3'); - if ($statut==3) return $this->labelstatut_short[$statut].' '.img_picto($langs->trans('PropalStatusNotSignedShort'),'statut5'); - if ($statut==4) return $this->labelstatut_short[$statut].' '.img_picto($langs->trans('PropalStatusBilledShort'),'statut6'); - } - } + if ($mode == 0) + { + return $this->labelstatut[$statut]; + } + if ($mode == 1) + { + return $this->labelstatut_short[$statut]; + } + if ($mode == 2) + { + if ($statut==0) return img_picto($langs->trans('PropalStatusDraftShort'),'statut0').' '.$this->labelstatut_short[$statut]; + if ($statut==1) return img_picto($langs->trans('PropalStatusOpenedShort'),'statut1').' '.$this->labelstatut_short[$statut]; + if ($statut==2) return img_picto($langs->trans('PropalStatusSignedShort'),'statut3').' '.$this->labelstatut_short[$statut]; + if ($statut==3) return img_picto($langs->trans('PropalStatusNotSignedShort'),'statut5').' '.$this->labelstatut_short[$statut]; + if ($statut==4) return img_picto($langs->trans('PropalStatusBilledShort'),'statut6').' '.$this->labelstatut_short[$statut]; + } + if ($mode == 3) + { + if ($statut==0) return img_picto($langs->trans('PropalStatusDraftShort'),'statut0'); + if ($statut==1) return img_picto($langs->trans('PropalStatusOpenedShort'),'statut1'); + if ($statut==2) return img_picto($langs->trans('PropalStatusSignedShort'),'statut3'); + if ($statut==3) return img_picto($langs->trans('PropalStatusNotSignedShort'),'statut5'); + if ($statut==4) return img_picto($langs->trans('PropalStatusBilledShort'),'statut6'); + } + if ($mode == 4) + { + if ($statut==0) return img_picto($langs->trans('PropalStatusDraft'),'statut0').' '.$this->labelstatut[$statut]; + if ($statut==1) return img_picto($langs->trans('PropalStatusOpened'),'statut1').' '.$this->labelstatut[$statut]; + if ($statut==2) return img_picto($langs->trans('PropalStatusSigned'),'statut3').' '.$this->labelstatut[$statut]; + if ($statut==3) return img_picto($langs->trans('PropalStatusNotSigned'),'statut5').' '.$this->labelstatut[$statut]; + if ($statut==4) return img_picto($langs->trans('PropalStatusBilled'),'statut6').' '.$this->labelstatut[$statut]; + } + if ($mode == 5) + { + if ($statut==0) return $this->labelstatut_short[$statut].' '.img_picto($langs->trans('PropalStatusDraftShort'),'statut0'); + if ($statut==1) return $this->labelstatut_short[$statut].' '.img_picto($langs->trans('PropalStatusOpenedShort'),'statut1'); + if ($statut==2) return $this->labelstatut_short[$statut].' '.img_picto($langs->trans('PropalStatusSignedShort'),'statut3'); + if ($statut==3) return $this->labelstatut_short[$statut].' '.img_picto($langs->trans('PropalStatusNotSignedShort'),'statut5'); + if ($statut==4) return $this->labelstatut_short[$statut].' '.img_picto($langs->trans('PropalStatusBilledShort'),'statut6'); + } + } - /** + /** * Load indicators for dashboard (this->nbtodo and this->nbtodolate) * * @param User $user Object user * @param int $mode "opened" for proposal to close, "signed" for proposal to invoice * @return int <0 if KO, >0 if OK - */ - function load_board($user,$mode) - { - global $conf, $user; + */ + function load_board($user,$mode) + { + global $conf, $user; - $now=gmmktime(); + $now=gmmktime(); - $this->nbtodo=$this->nbtodolate=0; - $clause = " WHERE"; + $this->nbtodo=$this->nbtodolate=0; + $clause = " WHERE"; - $sql = "SELECT p.rowid, p.ref, p.datec as datec, p.fin_validite as datefin"; - $sql.= " FROM ".MAIN_DB_PREFIX."propal as p"; - if (!$user->rights->societe->client->voir && !$user->societe_id) - { - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON p.fk_soc = sc.fk_soc"; - $sql.= " WHERE sc.fk_user = " .$user->id; - $clause = " AND"; - } - $sql.= $clause." p.entity = ".$conf->entity; - if ($mode == 'opened') $sql.= " AND p.fk_statut = 1"; - if ($mode == 'signed') $sql.= " AND p.fk_statut = 2"; - if ($user->societe_id) $sql.= " AND p.fk_soc = ".$user->societe_id; + $sql = "SELECT p.rowid, p.ref, p.datec as datec, p.fin_validite as datefin"; + $sql.= " FROM ".MAIN_DB_PREFIX."propal as p"; + if (!$user->rights->societe->client->voir && !$user->societe_id) + { + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON p.fk_soc = sc.fk_soc"; + $sql.= " WHERE sc.fk_user = " .$user->id; + $clause = " AND"; + } + $sql.= $clause." p.entity = ".$conf->entity; + if ($mode == 'opened') $sql.= " AND p.fk_statut = 1"; + if ($mode == 'signed') $sql.= " AND p.fk_statut = 2"; + if ($user->societe_id) $sql.= " AND p.fk_soc = ".$user->societe_id; - $resql=$this->db->query($sql); - if ($resql) - { - if ($mode == 'opened') $delay_warning=$conf->propal->cloture->warning_delay; - if ($mode == 'signed') $delay_warning=$conf->propal->facturation->warning_delay; + $resql=$this->db->query($sql); + if ($resql) + { + if ($mode == 'opened') $delay_warning=$conf->propal->cloture->warning_delay; + if ($mode == 'signed') $delay_warning=$conf->propal->facturation->warning_delay; - while ($obj=$this->db->fetch_object($resql)) - { - $this->nbtodo++; - if ($mode == 'opened') - { - $datelimit = $this->db->jdate($obj->datefin); - if ($datelimit < ($now - $delay_warning)) - { - $this->nbtodolate++; - } - } - // TODO Definir regle des propales a facturer en retard - // if ($mode == 'signed' && ! count($this->FactureListeArray($obj->rowid))) $this->nbtodolate++; - } - return 1; - } - else - { - $this->error=$this->db->error(); - return -1; - } - } + while ($obj=$this->db->fetch_object($resql)) + { + $this->nbtodo++; + if ($mode == 'opened') + { + $datelimit = $this->db->jdate($obj->datefin); + if ($datelimit < ($now - $delay_warning)) + { + $this->nbtodolate++; + } + } + // TODO Definir regle des propales a facturer en retard + // if ($mode == 'signed' && ! count($this->FactureListeArray($obj->rowid))) $this->nbtodolate++; + } + return 1; + } + else + { + $this->error=$this->db->error(); + return -1; + } + } - /** + /** * Initialise an instance with random values. * Used to build previews or test instances. * id must be 0 if object instance is a specimen. * * @return void - */ - function initAsSpecimen() - { - global $user,$langs,$conf; + */ + function initAsSpecimen() + { + global $user,$langs,$conf; - // Charge tableau des produits prodids - $prodids = array(); - $sql = "SELECT rowid"; - $sql.= " FROM ".MAIN_DB_PREFIX."product"; - $sql.= " WHERE entity IN (".getEntity('product', 1).")"; - $resql = $this->db->query($sql); - if ($resql) - { - $num_prods = $this->db->num_rows($resql); - $i = 0; - while ($i < $num_prods) - { - $i++; - $row = $this->db->fetch_row($resql); - $prodids[$i] = $row[0]; - } - } + // Charge tableau des produits prodids + $prodids = array(); + $sql = "SELECT rowid"; + $sql.= " FROM ".MAIN_DB_PREFIX."product"; + $sql.= " WHERE entity IN (".getEntity('product', 1).")"; + $resql = $this->db->query($sql); + if ($resql) + { + $num_prods = $this->db->num_rows($resql); + $i = 0; + while ($i < $num_prods) + { + $i++; + $row = $this->db->fetch_row($resql); + $prodids[$i] = $row[0]; + } + } - // Initialise parametres - $this->id=0; - $this->ref = 'SPECIMEN'; - $this->ref_client='NEMICEPS'; - $this->specimen=1; - $this->socid = 1; - $this->date = time(); - $this->fin_validite = $this->date+3600*24*30; - $this->cond_reglement_id = 1; - $this->cond_reglement_code = 'RECEP'; - $this->mode_reglement_id = 7; - $this->mode_reglement_code = 'CHQ'; - $this->availability_id = 1; - $this->availability_code = 'DSP'; - $this->demand_reason_id = 1; - $this->demand_reason_code = 'SRC_00'; - $this->note_public='This is a comment (public)'; - $this->note='This is a comment (private)'; - // Lines - $nbp = 5; - $xnbp = 0; - while ($xnbp < $nbp) - { - $line=new PropaleLigne($this->db); - $line->desc=$langs->trans("Description")." ".$xnbp; - $line->qty=1; - $line->subprice=100; - $line->price=100; - $line->tva_tx=19.6; + // Initialise parametres + $this->id=0; + $this->ref = 'SPECIMEN'; + $this->ref_client='NEMICEPS'; + $this->specimen=1; + $this->socid = 1; + $this->date = time(); + $this->fin_validite = $this->date+3600*24*30; + $this->cond_reglement_id = 1; + $this->cond_reglement_code = 'RECEP'; + $this->mode_reglement_id = 7; + $this->mode_reglement_code = 'CHQ'; + $this->availability_id = 1; + $this->availability_code = 'DSP'; + $this->demand_reason_id = 1; + $this->demand_reason_code = 'SRC_00'; + $this->note_public='This is a comment (public)'; + $this->note='This is a comment (private)'; + // Lines + $nbp = 5; + $xnbp = 0; + while ($xnbp < $nbp) + { + $line=new PropaleLigne($this->db); + $line->desc=$langs->trans("Description")." ".$xnbp; + $line->qty=1; + $line->subprice=100; + $line->price=100; + $line->tva_tx=19.6; $line->localtax1_tx=0; $line->localtax2_tx=0; - if ($xnbp == 2) - { - $line->total_ht=50; - $line->total_ttc=59.8; - $line->total_tva=9.8; - $line->remise_percent=50; - } - else - { - $line->total_ht=100; - $line->total_ttc=119.6; - $line->total_tva=19.6; - $line->remise_percent=00; - } + if ($xnbp == 2) + { + $line->total_ht=50; + $line->total_ttc=59.8; + $line->total_tva=9.8; + $line->remise_percent=50; + } + else + { + $line->total_ht=100; + $line->total_ttc=119.6; + $line->total_tva=19.6; + $line->remise_percent=00; + } - $prodid = rand(1, $num_prods); - $line->fk_product=$prodids[$prodid]; + $prodid = rand(1, $num_prods); + $line->fk_product=$prodids[$prodid]; - $this->lines[$xnbp]=$line; + $this->lines[$xnbp]=$line; - $this->total_ht += $line->total_ht; - $this->total_tva += $line->total_tva; - $this->total_ttc += $line->total_ttc; + $this->total_ht += $line->total_ht; + $this->total_tva += $line->total_tva; + $this->total_ttc += $line->total_ttc; - $xnbp++; - } - } + $xnbp++; + } + } - /** - * Charge indicateurs this->nb de tableau de bord - * - * @return int <0 if ko, >0 if ok - */ - function load_state_board() - { - global $conf, $user; + /** + * Charge indicateurs this->nb de tableau de bord + * + * @return int <0 if ko, >0 if ok + */ + function load_state_board() + { + global $conf, $user; - $this->nb=array(); - $clause = "WHERE"; + $this->nb=array(); + $clause = "WHERE"; - $sql = "SELECT count(p.rowid) as nb"; - $sql.= " FROM ".MAIN_DB_PREFIX."propal as p"; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON p.fk_soc = s.rowid"; - if (!$user->rights->societe->client->voir && !$user->societe_id) - { - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc"; - $sql.= " WHERE sc.fk_user = " .$user->id; - $clause = "AND"; - } - $sql.= " ".$clause." p.entity = ".$conf->entity; + $sql = "SELECT count(p.rowid) as nb"; + $sql.= " FROM ".MAIN_DB_PREFIX."propal as p"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON p.fk_soc = s.rowid"; + if (!$user->rights->societe->client->voir && !$user->societe_id) + { + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc"; + $sql.= " WHERE sc.fk_user = " .$user->id; + $clause = "AND"; + } + $sql.= " ".$clause." p.entity = ".$conf->entity; - $resql=$this->db->query($sql); - if ($resql) - { - while ($obj=$this->db->fetch_object($resql)) - { - $this->nb["proposals"]=$obj->nb; - } - return 1; - } - else - { - dol_print_error($this->db); - $this->error=$this->db->error(); - return -1; - } - } + $resql=$this->db->query($sql); + if ($resql) + { + while ($obj=$this->db->fetch_object($resql)) + { + $this->nb["proposals"]=$obj->nb; + } + return 1; + } + else + { + dol_print_error($this->db); + $this->error=$this->db->error(); + return -1; + } + } - /** - * Returns the reference to the following non used Proposal used depending on the active numbering module - * defined into PROPALE_ADDON - * - * @param Societe $soc Object thirdparty - * @return string Reference libre pour la propale - */ - function getNextNumRef($soc) - { - global $conf, $db, $langs; - $langs->load("propal"); + /** + * Returns the reference to the following non used Proposal used depending on the active numbering module + * defined into PROPALE_ADDON + * + * @param Societe $soc Object thirdparty + * @return string Reference libre pour la propale + */ + function getNextNumRef($soc) + { + global $conf, $db, $langs; + $langs->load("propal"); - $dir = DOL_DOCUMENT_ROOT . "/core/modules/propale/"; + $dir = DOL_DOCUMENT_ROOT . "/core/modules/propale/"; - if (! empty($conf->global->PROPALE_ADDON)) - { - $file = $conf->global->PROPALE_ADDON.".php"; + if (! empty($conf->global->PROPALE_ADDON)) + { + $file = $conf->global->PROPALE_ADDON.".php"; - // Chargement de la classe de numerotation - $classname = $conf->global->PROPALE_ADDON; - require_once($dir.$file); + // Chargement de la classe de numerotation + $classname = $conf->global->PROPALE_ADDON; + require_once($dir.$file); - $obj = new $classname(); + $obj = new $classname(); - $numref = ""; - $numref = $obj->getNextValue($soc,$this); + $numref = ""; + $numref = $obj->getNextValue($soc,$this); - if ( $numref != "") - { - return $numref; - } - else - { - $this->error=$obj->error; - //dol_print_error($db,"Propale::getNextNumRef ".$obj->error); - return ""; - } - } - else - { - $langs->load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); - return ""; - } - } + if ( $numref != "") + { + return $numref; + } + else + { + $this->error=$obj->error; + //dol_print_error($db,"Propale::getNextNumRef ".$obj->error); + return ""; + } + } + else + { + $langs->load("errors"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + return ""; + } + } - /** - * Return clicable link of object (with eventually picto) - * - * @param int $withpicto Add picto into link - * @param string $option Where point the link ('compta', 'expedition', 'document', ...) - * @param string $get_params Parametres added to url - * @return string String with URL - */ - function getNomUrl($withpicto=0,$option='', $get_params='') - { - global $langs; + /** + * Return clicable link of object (with eventually picto) + * + * @param int $withpicto Add picto into link + * @param string $option Where point the link ('compta', 'expedition', 'document', ...) + * @param string $get_params Parametres added to url + * @return string String with URL + */ + function getNomUrl($withpicto=0,$option='', $get_params='') + { + global $langs; - $result=''; - if ($option == '') - { - $lien = ''; - } - if ($option == 'compta') // deprecated - { - $lien = ''; - } - if ($option == 'expedition') - { - $lien = ''; - } - if ($option == 'document') - { - $lien = ''; - } - $lienfin=''; + $result=''; + if ($option == '') + { + $lien = ''; + } + if ($option == 'compta') // deprecated + { + $lien = ''; + } + if ($option == 'expedition') + { + $lien = ''; + } + if ($option == 'document') + { + $lien = ''; + } + $lienfin=''; - $picto='propal'; - $label=$langs->trans("ShowPropal").': '.$this->ref; + $picto='propal'; + $label=$langs->trans("ShowPropal").': '.$this->ref; - if ($withpicto) $result.=($lien.img_object($label,$picto).$lienfin); - if ($withpicto && $withpicto != 2) $result.=' '; - $result.=$lien.$this->ref.$lienfin; - return $result; - } + if ($withpicto) $result.=($lien.img_object($label,$picto).$lienfin); + if ($withpicto && $withpicto != 2) $result.=' '; + $result.=$lien.$this->ref.$lienfin; + return $result; + } - /** - * Retrieve an array of propal lines - * - * @return int <0 if ko, >0 if ok - */ - function getLinesArray() - { - $sql = 'SELECT pt.rowid, pt.description, pt.fk_product, pt.fk_remise_except,'; - $sql.= ' pt.qty, pt.tva_tx, pt.remise_percent, pt.subprice, pt.info_bits,'; - $sql.= ' pt.total_ht, pt.total_tva, pt.total_ttc, pt.marge_tx, pt.marque_tx, pt.pa_ht, pt.special_code,'; - $sql.= ' pt.date_start, pt.date_end, pt.product_type, pt.rang,'; - $sql.= ' p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid,'; - $sql.= ' p.description as product_desc'; - $sql.= ' FROM '.MAIN_DB_PREFIX.'propaldet as pt'; - $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product=p.rowid'; - $sql.= ' WHERE pt.fk_propal = '.$this->id; - $sql.= ' ORDER BY pt.rang ASC, pt.rowid'; + /** + * Retrieve an array of propal lines + * + * @return int <0 if ko, >0 if ok + */ + function getLinesArray() + { + $sql = 'SELECT pt.rowid, pt.description, pt.fk_product, pt.fk_remise_except,'; + $sql.= ' pt.qty, pt.tva_tx, pt.remise_percent, pt.subprice, pt.info_bits,'; + $sql.= ' pt.total_ht, pt.total_tva, pt.total_ttc, pt.marge_tx, pt.marque_tx, pt.pa_ht, pt.special_code,'; + $sql.= ' pt.date_start, pt.date_end, pt.product_type, pt.rang,'; + $sql.= ' p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid,'; + $sql.= ' p.description as product_desc'; + $sql.= ' FROM '.MAIN_DB_PREFIX.'propaldet as pt'; + $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product=p.rowid'; + $sql.= ' WHERE pt.fk_propal = '.$this->id; + $sql.= ' ORDER BY pt.rang ASC, pt.rowid'; - $resql = $this->db->query($sql); - if ($resql) - { - $num = $this->db->num_rows($resql); - $i = 0; + $resql = $this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + $i = 0; - while ($i < $num) - { - $obj = $this->db->fetch_object($resql); + while ($i < $num) + { + $obj = $this->db->fetch_object($resql); - $this->lines[$i]->id = $obj->rowid; - $this->lines[$i]->description = $obj->description; - $this->lines[$i]->fk_product = $obj->fk_product; - $this->lines[$i]->ref = $obj->ref; - $this->lines[$i]->product_label = $obj->product_label; - $this->lines[$i]->product_desc = $obj->product_desc; - $this->lines[$i]->fk_product_type = $obj->fk_product_type; // deprecated - $this->lines[$i]->product_type = $obj->product_type; - $this->lines[$i]->qty = $obj->qty; - $this->lines[$i]->subprice = $obj->subprice; - $this->lines[$i]->pa_ht = $obj->pa_ht; - $this->lines[$i]->fk_remise_except = $obj->fk_remise_except; - $this->lines[$i]->remise_percent = $obj->remise_percent; - $this->lines[$i]->tva_tx = $obj->tva_tx; - $this->lines[$i]->info_bits = $obj->info_bits; - $this->lines[$i]->total_ht = $obj->total_ht; - $this->lines[$i]->total_tva = $obj->total_tva; - $this->lines[$i]->total_ttc = $obj->total_ttc; - $this->lines[$i]->marge_tx = $obj->marge_tx; - $this->lines[$i]->marque_tx = $obj->marque_tx; - $this->lines[$i]->special_code = $obj->special_code; - $this->lines[$i]->rang = $obj->rang; - $this->lines[$i]->date_start = $this->db->jdate($obj->date_start); - $this->lines[$i]->date_end = $this->db->jdate($obj->date_end); + $this->lines[$i]->id = $obj->rowid; + $this->lines[$i]->description = $obj->description; + $this->lines[$i]->fk_product = $obj->fk_product; + $this->lines[$i]->ref = $obj->ref; + $this->lines[$i]->product_label = $obj->product_label; + $this->lines[$i]->product_desc = $obj->product_desc; + $this->lines[$i]->fk_product_type = $obj->fk_product_type; // deprecated + $this->lines[$i]->product_type = $obj->product_type; + $this->lines[$i]->qty = $obj->qty; + $this->lines[$i]->subprice = $obj->subprice; + $this->lines[$i]->pa_ht = $obj->pa_ht; + $this->lines[$i]->fk_remise_except = $obj->fk_remise_except; + $this->lines[$i]->remise_percent = $obj->remise_percent; + $this->lines[$i]->tva_tx = $obj->tva_tx; + $this->lines[$i]->info_bits = $obj->info_bits; + $this->lines[$i]->total_ht = $obj->total_ht; + $this->lines[$i]->total_tva = $obj->total_tva; + $this->lines[$i]->total_ttc = $obj->total_ttc; + $this->lines[$i]->marge_tx = $obj->marge_tx; + $this->lines[$i]->marque_tx = $obj->marque_tx; + $this->lines[$i]->special_code = $obj->special_code; + $this->lines[$i]->rang = $obj->rang; + $this->lines[$i]->date_start = $this->db->jdate($obj->date_start); + $this->lines[$i]->date_end = $this->db->jdate($obj->date_end); - $i++; - } - $this->db->free($resql); + $i++; + } + $this->db->free($resql); - return 1; - } - else - { - $this->error=$this->db->error(); - dol_syslog("Error sql=$sql, error=".$this->error,LOG_ERR); - return -1; - } - } + return 1; + } + else + { + $this->error=$this->db->error(); + dol_syslog("Error sql=$sql, error=".$this->error,LOG_ERR); + return -1; + } + } } @@ -2398,363 +2410,371 @@ class Propal extends CommonObject */ class PropaleLigne { - var $db; - var $error; + var $db; + var $error; - var $oldline; + var $oldline; - // From llx_propaldet - var $rowid; - var $fk_propal; - var $fk_parent_line; - var $desc; // Description ligne - var $fk_product; // Id produit predefini - var $product_type = 0; // Type 0 = product, 1 = Service + // From llx_propaldet + var $rowid; + var $fk_propal; + var $fk_parent_line; + var $desc; // Description ligne + var $fk_product; // Id produit predefini + var $product_type = 0; // Type 0 = product, 1 = Service - var $qty; - var $tva_tx; - var $subprice; - var $remise_percent; - var $fk_remise_except; + var $qty; + var $tva_tx; + var $subprice; + var $remise_percent; + var $fk_remise_except; - var $rang = 0; - var $marge_tx; - var $marque_tx; + var $rang = 0; + var $marge_tx; + var $marque_tx; - var $special_code; // Liste d'options non cumulabels: - // 1: frais de port - // 2: ecotaxe - // 3: ?? + var $special_code; // Liste d'options non cumulabels: + // 1: frais de port + // 2: ecotaxe + // 3: ?? - var $info_bits = 0; // Liste d'options cumulables: - // Bit 0: 0 si TVA normal - 1 si TVA NPR - // Bit 1: 0 ligne normale - 1 si ligne de remise fixe + var $info_bits = 0; // Liste d'options cumulables: + // Bit 0: 0 si TVA normal - 1 si TVA NPR + // Bit 1: 0 ligne normale - 1 si ligne de remise fixe - var $total_ht; // Total HT de la ligne toute quantite et incluant la remise ligne - var $total_tva; // Total TVA de la ligne toute quantite et incluant la remise ligne - var $total_ttc; // Total TTC de la ligne toute quantite et incluant la remise ligne + var $total_ht; // Total HT de la ligne toute quantite et incluant la remise ligne + var $total_tva; // Total TVA de la ligne toute quantite et incluant la remise ligne + var $total_ttc; // Total TTC de la ligne toute quantite et incluant la remise ligne - // Ne plus utiliser - var $remise; - var $price; + // Ne plus utiliser + var $remise; + var $price; - // From llx_product - var $ref; // Reference produit - var $libelle; // Label produit - var $product_desc; // Description produit + // From llx_product + var $ref; // Reference produit + var $libelle; // Label produit + var $product_desc; // Description produit - var $localtax1_tx; - var $localtax2_tx; - var $total_localtax1; - var $total_localtax2; + var $localtax1_tx; + var $localtax2_tx; + var $total_localtax1; + var $total_localtax2; - var $skip_update_total; // Skip update price total for special lines + var $skip_update_total; // Skip update price total for special lines - /** - * Class line Contructor - * - * @param DoliDB $DB Database handler - */ - function PropaleLigne($DB) - { - $this->db= $DB; - } + /** + * Class line Contructor + * + * @param DoliDB $DB Database handler + */ + function PropaleLigne($DB) + { + $this->db= $DB; + } - /** - * Retrieve the propal line object - * - * @param int $rowid propal line id - */ - function fetch($rowid) - { - $sql = 'SELECT pd.rowid, pd.fk_propal, pd.fk_parent_line, pd.fk_product, pd.description, pd.price, pd.qty, pd.tva_tx,'; - $sql.= ' pd.remise, pd.remise_percent, pd.fk_remise_except, pd.subprice,'; - $sql.= ' pd.info_bits, pd.total_ht, pd.total_tva, pd.total_ttc, pd.marge_tx, pd.marque_tx, pd.special_code, pd.rang,'; - $sql.= ' p.ref as product_ref, p.label as product_libelle, p.description as product_desc'; - $sql.= ' FROM '.MAIN_DB_PREFIX.'propaldet as pd'; - $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pd.fk_product = p.rowid'; - $sql.= ' WHERE pd.rowid = '.$rowid; - $result = $this->db->query($sql); - if ($result) - { - $objp = $this->db->fetch_object($result); + /** + * Retrieve the propal line object + * + * @param int $rowid Propal line id + * @return int <0 if KO, >0 if OK + */ + function fetch($rowid) + { + $sql = 'SELECT pd.rowid, pd.fk_propal, pd.fk_parent_line, pd.fk_product, pd.description, pd.price, pd.qty, pd.tva_tx,'; + $sql.= ' pd.remise, pd.remise_percent, pd.fk_remise_except, pd.subprice,'; + $sql.= ' pd.info_bits, pd.total_ht, pd.total_tva, pd.total_ttc, pd.marge_tx, pd.marque_tx, pd.special_code, pd.rang,'; + $sql.= ' p.ref as product_ref, p.label as product_libelle, p.description as product_desc'; + $sql.= ' FROM '.MAIN_DB_PREFIX.'propaldet as pd'; + $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pd.fk_product = p.rowid'; + $sql.= ' WHERE pd.rowid = '.$rowid; + $result = $this->db->query($sql); + if ($result) + { + $objp = $this->db->fetch_object($result); - $this->rowid = $objp->rowid; - $this->fk_propal = $objp->fk_propal; - $this->fk_parent_line = $objp->fk_parent_line; - $this->desc = $objp->description; - $this->qty = $objp->qty; - $this->price = $objp->price; // deprecated - $this->subprice = $objp->subprice; - $this->tva_tx = $objp->tva_tx; - $this->remise = $objp->remise; - $this->remise_percent = $objp->remise_percent; - $this->fk_remise_except = $objp->fk_remise_except; - $this->fk_product = $objp->fk_product; - $this->info_bits = $objp->info_bits; + $this->rowid = $objp->rowid; + $this->fk_propal = $objp->fk_propal; + $this->fk_parent_line = $objp->fk_parent_line; + $this->desc = $objp->description; + $this->qty = $objp->qty; + $this->price = $objp->price; // deprecated + $this->subprice = $objp->subprice; + $this->tva_tx = $objp->tva_tx; + $this->remise = $objp->remise; + $this->remise_percent = $objp->remise_percent; + $this->fk_remise_except = $objp->fk_remise_except; + $this->fk_product = $objp->fk_product; + $this->info_bits = $objp->info_bits; - $this->total_ht = $objp->total_ht; - $this->total_tva = $objp->total_tva; - $this->total_ttc = $objp->total_ttc; + $this->total_ht = $objp->total_ht; + $this->total_tva = $objp->total_tva; + $this->total_ttc = $objp->total_ttc; - $this->marge_tx = $objp->marge_tx; - $this->marque_tx = $objp->marque_tx; - $this->special_code = $objp->special_code; - $this->rang = $objp->rang; + $this->marge_tx = $objp->marge_tx; + $this->marque_tx = $objp->marque_tx; + $this->special_code = $objp->special_code; + $this->rang = $objp->rang; - $this->ref = $objp->product_ref; // deprecated + $this->ref = $objp->product_ref; // deprecated $this->product_ref = $objp->product_ref; $this->libelle = $objp->product_libelle; // deprecated $this->product_label = $objp->product_libelle; - $this->product_desc = $objp->product_desc; + $this->product_desc = $objp->product_desc; - $this->db->free($result); - } - else - { - dol_print_error($this->db); - } - } + $this->db->free($result); + } + else + { + dol_print_error($this->db); + } + } - /** - * Insert object line propal in database - * - * @param int $notrigger 1=Does not execute triggers, 0= execuete triggers - * @return int <0 if KO, >0 if OK - */ - function insert($notrigger=0) - { - global $conf,$langs,$user; + /** + * Insert object line propal in database + * + * @param int $notrigger 1=Does not execute triggers, 0= execuete triggers + * @return int <0 if KO, >0 if OK + */ + function insert($notrigger=0) + { + global $conf,$langs,$user; - $error=0; + $error=0; - dol_syslog("PropaleLigne::insert rang=".$this->rang); + dol_syslog("PropaleLigne::insert rang=".$this->rang); - // Clean parameters - if (empty($this->tva_tx)) $this->tva_tx=0; - if (empty($this->localtax1_tx)) $this->localtax1_tx=0; - if (empty($this->localtax2_tx)) $this->localtax2_tx=0; - if (empty($this->total_localtax1)) $this->total_localtax1=0; - if (empty($this->total_localtax2)) $this->total_localtax2=0; - if (empty($this->rang)) $this->rang=0; - if (empty($this->remise)) $this->remise=0; - if (empty($this->remise_percent)) $this->remise_percent=0; - if (empty($this->info_bits)) $this->info_bits=0; - if (empty($this->special_code)) $this->special_code=0; - if (empty($this->fk_parent_line)) $this->fk_parent_line=0; + // Clean parameters + if (empty($this->tva_tx)) $this->tva_tx=0; + if (empty($this->localtax1_tx)) $this->localtax1_tx=0; + if (empty($this->localtax2_tx)) $this->localtax2_tx=0; + if (empty($this->total_localtax1)) $this->total_localtax1=0; + if (empty($this->total_localtax2)) $this->total_localtax2=0; + if (empty($this->rang)) $this->rang=0; + if (empty($this->remise)) $this->remise=0; + if (empty($this->remise_percent)) $this->remise_percent=0; + if (empty($this->info_bits)) $this->info_bits=0; + if (empty($this->special_code)) $this->special_code=0; + if (empty($this->fk_parent_line)) $this->fk_parent_line=0; - // Check parameters - if ($this->product_type < 0) return -1; + // Check parameters + if ($this->product_type < 0) return -1; - $this->db->begin(); + $this->db->begin(); - // Insert line into database - $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'propaldet'; - $sql.= ' (fk_propal, fk_parent_line, description, fk_product, product_type, fk_remise_except, qty, tva_tx, localtax1_tx, localtax2_tx,'; - $sql.= ' subprice, remise_percent, '; - $sql.= ' info_bits, '; - $sql.= ' total_ht, total_tva, total_localtax1, total_localtax2, total_ttc, special_code, rang, marge_tx, marque_tx)'; - $sql.= " VALUES (".$this->fk_propal.","; - $sql.= " ".($this->fk_parent_line>0?"'".$this->fk_parent_line."'":"null").","; - $sql.= " '".$this->db->escape($this->desc)."',"; - $sql.= " ".($this->fk_product?"'".$this->fk_product."'":"null").","; - $sql.= " '".$this->product_type."',"; - $sql.= " ".($this->fk_remise_except?"'".$this->fk_remise_except."'":"null").","; - $sql.= " ".price2num($this->qty).","; - $sql.= " ".price2num($this->tva_tx).","; - $sql.= " ".price2num($this->localtax1_tx).","; - $sql.= " ".price2num($this->localtax2_tx).","; - $sql.= " ".($this->subprice?price2num($this->subprice):'null').","; - $sql.= " ".price2num($this->remise_percent).","; - $sql.= " '".$this->info_bits."',"; - $sql.= " ".price2num($this->total_ht).","; - $sql.= " ".price2num($this->total_tva).","; - $sql.= " ".price2num($this->total_localtax1).","; - $sql.= " ".price2num($this->total_localtax2).","; - $sql.= " ".price2num($this->total_ttc).","; - $sql.= ' '.$this->special_code.','; - $sql.= ' '.$this->rang.','; - if (isset($this->marge_tx)) $sql.= ' '.$this->marge_tx.','; - else $sql.= ' null,'; - if (isset($this->marque_tx)) $sql.= ' '.$this->marque_tx; - else $sql.= ' null'; - $sql.= ')'; + // Insert line into database + $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'propaldet'; + $sql.= ' (fk_propal, fk_parent_line, description, fk_product, product_type, fk_remise_except, qty, tva_tx, localtax1_tx, localtax2_tx,'; + $sql.= ' subprice, remise_percent, '; + $sql.= ' info_bits, '; + $sql.= ' total_ht, total_tva, total_localtax1, total_localtax2, total_ttc, special_code, rang, marge_tx, marque_tx)'; + $sql.= " VALUES (".$this->fk_propal.","; + $sql.= " ".($this->fk_parent_line>0?"'".$this->fk_parent_line."'":"null").","; + $sql.= " '".$this->db->escape($this->desc)."',"; + $sql.= " ".($this->fk_product?"'".$this->fk_product."'":"null").","; + $sql.= " '".$this->product_type."',"; + $sql.= " ".($this->fk_remise_except?"'".$this->fk_remise_except."'":"null").","; + $sql.= " ".price2num($this->qty).","; + $sql.= " ".price2num($this->tva_tx).","; + $sql.= " ".price2num($this->localtax1_tx).","; + $sql.= " ".price2num($this->localtax2_tx).","; + $sql.= " ".($this->subprice?price2num($this->subprice):'null').","; + $sql.= " ".price2num($this->remise_percent).","; + $sql.= " '".$this->info_bits."',"; + $sql.= " ".price2num($this->total_ht).","; + $sql.= " ".price2num($this->total_tva).","; + $sql.= " ".price2num($this->total_localtax1).","; + $sql.= " ".price2num($this->total_localtax2).","; + $sql.= " ".price2num($this->total_ttc).","; + $sql.= ' '.$this->special_code.','; + $sql.= ' '.$this->rang.','; + if (isset($this->marge_tx)) $sql.= ' '.$this->marge_tx.','; + else $sql.= ' null,'; + if (isset($this->marque_tx)) $sql.= ' '.$this->marque_tx; + else $sql.= ' null'; + $sql.= ')'; - dol_syslog("PropaleLigne::insert sql=$sql"); - $resql=$this->db->query($sql); - if ($resql) - { - $this->rowid=$this->db->last_insert_id(MAIN_DB_PREFIX.'propaldet'); - if (! $notrigger) - { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result = $interface->run_triggers('LINEPROPAL_INSERT',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - } + dol_syslog("PropaleLigne::insert sql=$sql"); + $resql=$this->db->query($sql); + if ($resql) + { + $this->rowid=$this->db->last_insert_id(MAIN_DB_PREFIX.'propaldet'); + if (! $notrigger) + { + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result = $interface->run_triggers('LINEPROPAL_INSERT',$this,$user,$langs,$conf); + if ($result < 0) { + $error++; $this->errors=$interface->errors; + } + // Fin appel triggers + } - $this->db->commit(); - return 1; - } - else - { - $this->error=$this->db->error()." sql=".$sql; - dol_syslog("PropaleLigne::insert Error ".$this->error, LOG_ERR); - $this->db->rollback(); - return -1; - } - } + $this->db->commit(); + return 1; + } + else + { + $this->error=$this->db->error()." sql=".$sql; + dol_syslog("PropaleLigne::insert Error ".$this->error, LOG_ERR); + $this->db->rollback(); + return -1; + } + } - /** - * Delete line in database - * @return int <0 if ko, >0 if ok - */ - function delete() - { - global $conf,$langs,$user; + /** + * Delete line in database + * + * @return int <0 if ko, >0 if ok + */ + function delete() + { + global $conf,$langs,$user; - $error=0; - $this->db->begin(); + $error=0; + $this->db->begin(); - $sql = "DELETE FROM ".MAIN_DB_PREFIX."propaldet WHERE rowid = ".$this->rowid; - dol_syslog("PropaleLigne::delete sql=".$sql, LOG_DEBUG); - if ($this->db->query($sql) ) - { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result = $interface->run_triggers('LINEPROPAL_DELETE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + $sql = "DELETE FROM ".MAIN_DB_PREFIX."propaldet WHERE rowid = ".$this->rowid; + dol_syslog("PropaleLigne::delete sql=".$sql, LOG_DEBUG); + if ($this->db->query($sql) ) + { + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result = $interface->run_triggers('LINEPROPAL_DELETE',$this,$user,$langs,$conf); + if ($result < 0) { + $error++; $this->errors=$interface->errors; + } + // Fin appel triggers - $this->db->commit(); + $this->db->commit(); - return 1; - } - else - { - $this->error=$this->db->error()." sql=".$sql; - dol_syslog("PropaleLigne::delete Error ".$this->error, LOG_ERR); - $this->db->rollback(); - return -1; - } - } + return 1; + } + else + { + $this->error=$this->db->error()." sql=".$sql; + dol_syslog("PropaleLigne::delete Error ".$this->error, LOG_ERR); + $this->db->rollback(); + return -1; + } + } - /** - * Update propal line object into DB - * - * @param int $notrigger 1=Does not execute triggers, 0= execuete triggers - * @return int <0 if ko, >0 if ok - */ - function update($notrigger=0) - { - global $conf,$langs,$user; + /** + * Update propal line object into DB + * + * @param int $notrigger 1=Does not execute triggers, 0= execuete triggers + * @return int <0 if ko, >0 if ok + */ + function update($notrigger=0) + { + global $conf,$langs,$user; - $error=0; + $error=0; - // Clean parameters - if (empty($this->tva_tx)) $this->tva_tx=0; - if (empty($this->localtax1_tx)) $this->localtax1_tx=0; - if (empty($this->localtax2_tx)) $this->localtax2_tx=0; - if (empty($this->total_localtax1)) $this->total_localtax1=0; - if (empty($this->total_localtax2)) $this->total_localtax2=0; - if (empty($this->marque_tx)) $this->marque_tx=0; - if (empty($this->marge_tx)) $this->marge_tx=0; - if (empty($this->remise)) $this->remise=0; - if (empty($this->remise_percent)) $this->remise_percent=0; - if (empty($this->info_bits)) $this->info_bits=0; - if (empty($this->special_code)) $this->special_code=0; - if (empty($this->fk_parent_line)) $this->fk_parent_line=0; + // Clean parameters + if (empty($this->tva_tx)) $this->tva_tx=0; + if (empty($this->localtax1_tx)) $this->localtax1_tx=0; + if (empty($this->localtax2_tx)) $this->localtax2_tx=0; + if (empty($this->total_localtax1)) $this->total_localtax1=0; + if (empty($this->total_localtax2)) $this->total_localtax2=0; + if (empty($this->marque_tx)) $this->marque_tx=0; + if (empty($this->marge_tx)) $this->marge_tx=0; + if (empty($this->remise)) $this->remise=0; + if (empty($this->remise_percent)) $this->remise_percent=0; + if (empty($this->info_bits)) $this->info_bits=0; + if (empty($this->special_code)) $this->special_code=0; + if (empty($this->fk_parent_line)) $this->fk_parent_line=0; - $this->db->begin(); + $this->db->begin(); - // Mise a jour ligne en base - $sql = "UPDATE ".MAIN_DB_PREFIX."propaldet SET"; - $sql.= " description='".$this->db->escape($this->desc)."'"; - $sql.= " , tva_tx='".price2num($this->tva_tx)."'"; - $sql.= " , localtax1_tx=".price2num($this->localtax1_tx); - $sql.= " , localtax2_tx=".price2num($this->localtax2_tx); - $sql.= " , qty='".price2num($this->qty)."'"; - $sql.= " , subprice=".price2num($this->subprice).""; - $sql.= " , remise_percent=".price2num($this->remise_percent).""; - $sql.= " , price=".price2num($this->price).""; // TODO A virer - $sql.= " , remise=".price2num($this->remise).""; // TODO A virer - $sql.= " , info_bits='".$this->info_bits."'"; - if (empty($this->skip_update_total)) - { - $sql.= " , total_ht=".price2num($this->total_ht).""; - $sql.= " , total_tva=".price2num($this->total_tva).""; - $sql.= " , total_ttc=".price2num($this->total_ttc).""; - } - $sql.= " , marge_tx='".$this->marge_tx."'"; - $sql.= " , marque_tx='".$this->marque_tx."'"; - $sql.= " , info_bits=".$this->info_bits; - if (strlen($this->special_code)) $sql.= " , special_code=".$this->special_code; - $sql.= " , fk_parent_line=".($this->fk_parent_line>0?$this->fk_parent_line:"null"); - if (! empty($this->rang)) $sql.= ", rang=".$this->rang; - $sql.= " WHERE rowid = ".$this->rowid; + // Mise a jour ligne en base + $sql = "UPDATE ".MAIN_DB_PREFIX."propaldet SET"; + $sql.= " description='".$this->db->escape($this->desc)."'"; + $sql.= " , tva_tx='".price2num($this->tva_tx)."'"; + $sql.= " , localtax1_tx=".price2num($this->localtax1_tx); + $sql.= " , localtax2_tx=".price2num($this->localtax2_tx); + $sql.= " , qty='".price2num($this->qty)."'"; + $sql.= " , subprice=".price2num($this->subprice).""; + $sql.= " , remise_percent=".price2num($this->remise_percent).""; + $sql.= " , price=".price2num($this->price).""; // TODO A virer + $sql.= " , remise=".price2num($this->remise).""; // TODO A virer + $sql.= " , info_bits='".$this->info_bits."'"; + if (empty($this->skip_update_total)) + { + $sql.= " , total_ht=".price2num($this->total_ht).""; + $sql.= " , total_tva=".price2num($this->total_tva).""; + $sql.= " , total_ttc=".price2num($this->total_ttc).""; + } + $sql.= " , marge_tx='".$this->marge_tx."'"; + $sql.= " , marque_tx='".$this->marque_tx."'"; + $sql.= " , info_bits=".$this->info_bits; + if (strlen($this->special_code)) $sql.= " , special_code=".$this->special_code; + $sql.= " , fk_parent_line=".($this->fk_parent_line>0?$this->fk_parent_line:"null"); + if (! empty($this->rang)) $sql.= ", rang=".$this->rang; + $sql.= " WHERE rowid = ".$this->rowid; - dol_syslog(get_class($this)."::update sql=".$sql, LOG_DEBUG); - $resql=$this->db->query($sql); - if ($resql) - { - if (! $notrigger) - { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result = $interface->run_triggers('LINEPROPAL_UPDATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - } + dol_syslog(get_class($this)."::update sql=".$sql, LOG_DEBUG); + $resql=$this->db->query($sql); + if ($resql) + { + if (! $notrigger) + { + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result = $interface->run_triggers('LINEPROPAL_UPDATE',$this,$user,$langs,$conf); + if ($result < 0) { + $error++; $this->errors=$interface->errors; + } + // Fin appel triggers + } - $this->db->commit(); - return 1; - } - else - { - $this->error=$this->db->error(); - dol_syslog(get_class($this)."::update Error ".$this->error, LOG_ERR); - $this->db->rollback(); - return -2; - } - } + $this->db->commit(); + return 1; + } + else + { + $this->error=$this->db->error(); + dol_syslog(get_class($this)."::update Error ".$this->error, LOG_ERR); + $this->db->rollback(); + return -2; + } + } - /** - * Update DB line fields total_xxx - * Used by migration - * - * @return int <0 if ko, >0 if ok - */ - function update_total() - { - $this->db->begin(); + /** + * Update DB line fields total_xxx + * Used by migration + * + * @return int <0 if ko, >0 if ok + */ + function update_total() + { + $this->db->begin(); - // Mise a jour ligne en base - $sql = "UPDATE ".MAIN_DB_PREFIX."propaldet SET"; - $sql.= " total_ht=".price2num($this->total_ht,'MT').""; - $sql.= ",total_tva=".price2num($this->total_tva,'MT').""; - $sql.= ",total_ttc=".price2num($this->total_ttc,'MT').""; - $sql.= " WHERE rowid = ".$this->rowid; + // Mise a jour ligne en base + $sql = "UPDATE ".MAIN_DB_PREFIX."propaldet SET"; + $sql.= " total_ht=".price2num($this->total_ht,'MT').""; + $sql.= ",total_tva=".price2num($this->total_tva,'MT').""; + $sql.= ",total_ttc=".price2num($this->total_ttc,'MT').""; + $sql.= " WHERE rowid = ".$this->rowid; - dol_syslog("PropaleLigne::update_total sql=$sql"); + dol_syslog("PropaleLigne::update_total sql=$sql"); - $resql=$this->db->query($sql); - if ($resql) - { - $this->db->commit(); - return 1; - } - else - { - $this->error=$this->db->error(); - dol_syslog("PropaleLigne::update_total Error ".$this->error, LOG_ERR); - $this->db->rollback(); - return -2; - } - } + $resql=$this->db->query($sql); + if ($resql) + { + $this->db->commit(); + return 1; + } + else + { + $this->error=$this->db->error(); + dol_syslog("PropaleLigne::update_total Error ".$this->error, LOG_ERR); + $this->db->rollback(); + return -2; + } + } } diff --git a/htdocs/comm/prospect/class/prospect.class.php b/htdocs/comm/prospect/class/prospect.class.php index 7a5928058e1..f4813d96da8 100644 --- a/htdocs/comm/prospect/class/prospect.class.php +++ b/htdocs/comm/prospect/class/prospect.class.php @@ -50,8 +50,9 @@ class Prospect extends Societe /** - * \brief Charge indicateurs this->nb de tableau de bord - * \return int <0 if KO, >0 if OK + * Charge indicateurs this->nb de tableau de bord + * + * @return int <0 if KO, >0 if OK */ function load_state_board() { @@ -92,9 +93,10 @@ class Prospect extends Societe /** - * \brief Return status of prospect - * \param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long - * \return string Libelle + * Return status of prospect + * + * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long + * @return string Libelle */ function getLibProspStatut($mode=0) { @@ -102,10 +104,11 @@ class Prospect extends Societe } /** - * \brief Return label of a given status - * \param statut Id statut - * \param mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto - * \return string Libelle du statut + * Return label of a given status + * + * @param int $statut Id statut + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto + * @return string Libelle du statut */ function LibProspStatut($statut,$mode=0) { @@ -141,8 +144,9 @@ class Prospect extends Societe } /** - * \brief Renvoi le libelle du niveau - * \return string Libelle + * Renvoi le libelle du niveau + * + * @return string Libelle */ function getLibLevel() { @@ -150,9 +154,10 @@ class Prospect extends Societe } /** - * \brief Renvoi le libelle du niveau - * \param fk_prospectlevel Prospect level - * \return string Libelle du niveau + * Renvoi le libelle du niveau + * + * @param int $fk_prospectlevel Prospect level + * @return string Libelle du niveau */ function LibLevel($fk_prospectlevel) { diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 6e7ef80e739..1c1f3467f68 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -510,6 +510,7 @@ class Commande extends CommonObject * Cancel an order * If stock is decremented on order validation, we must reincrement it * + * @param User $user Object user * @param int $idwarehouse Id warehouse to use for stock change. * @return int <0 if KO, >0 if OK */ @@ -588,7 +589,7 @@ class Commande extends CommonObject * Note that this->ref can be set or empty. If empty, we will use "(PROV)" * * @param User $user Objet user that make creation - * @param int notrigger Disable all triggers + * @param int $notrigger Disable all triggers * @return int <0 if KO, >0 if OK */ function create($user, $notrigger=0) @@ -671,25 +672,25 @@ class Commande extends CommonObject } $result = $this->addline( - $this->id, - $this->lines[$i]->desc, - $this->lines[$i]->subprice, - $this->lines[$i]->qty, - $this->lines[$i]->tva_tx, - $this->lines[$i]->localtax1_tx, - $this->lines[$i]->localtax2_tx, - $this->lines[$i]->fk_product, - $this->lines[$i]->remise_percent, - $this->lines[$i]->info_bits, - $this->lines[$i]->fk_remise_except, - 'HT', - 0, - $this->lines[$i]->date_start, - $this->lines[$i]->date_end, - $this->lines[$i]->product_type, - $this->lines[$i]->rang, - $this->lines[$i]->special_code, - $fk_parent_line + $this->id, + $this->lines[$i]->desc, + $this->lines[$i]->subprice, + $this->lines[$i]->qty, + $this->lines[$i]->tva_tx, + $this->lines[$i]->localtax1_tx, + $this->lines[$i]->localtax2_tx, + $this->lines[$i]->fk_product, + $this->lines[$i]->remise_percent, + $this->lines[$i]->info_bits, + $this->lines[$i]->fk_remise_except, + 'HT', + 0, + $this->lines[$i]->date_start, + $this->lines[$i]->date_end, + $this->lines[$i]->product_type, + $this->lines[$i]->rang, + $this->lines[$i]->special_code, + $fk_parent_line ); if ($result < 0) { @@ -711,7 +712,7 @@ class Commande extends CommonObject if ($this->id) { $this->ref="(PROV".$this->id.")"; - + // Add object linked if (is_array($this->linked_objects) && ! empty($this->linked_objects)) { @@ -723,25 +724,25 @@ class Commande extends CommonObject dol_print_error($this->db); $error++; } - + // TODO mutualiser if ($origin == 'propal' && $origin_id) { // On recupere les differents contact interne et externe $prop = new Propal($this->db, $this->socid, $origin_id); - + // On recupere le commercial suivi propale $this->userid = $prop->getIdcontact('internal', 'SALESREPFOLL'); - + if ($this->userid) { //On passe le commercial suivi propale en commercial suivi commande $this->add_contact($this->userid[0], 'SALESREPFOLL', 'internal'); } - + // On recupere le contact client suivi propale $this->contactid = $prop->getIdcontact('external', 'CUSTOMER'); - + if ($this->contactid) { //On passe le contact client suivi propale en contact client suivi commande @@ -922,7 +923,7 @@ class Commande extends CommonObject $this->origin = $object->element; $this->origin_id = $object->id; - + // Possibility to add external linked objects with hooks $this->linked_objects[$this->origin] = $this->origin_id; if (is_array($object->other_linked_objects) && ! empty($object->other_linked_objects)) @@ -985,6 +986,8 @@ class Commande extends CommonObject * @param timestamp $date_end End date of the line - Added by Matelli (See http://matelli.fr/showcases/patchs-dolibarr/add-dates-in-order-lines.html) * @param int $type Type of line (0=product, 1=service) * @param int $rang Position of line + * @param int $special_code Special code + * @param int $fk_parent_line Parent line * @return int >0 if OK, <0 if KO * * @see add_product @@ -1289,7 +1292,7 @@ class Commande extends CommonObject $this->date_livraison = $this->db->jdate($obj->date_livraison); $this->fk_delivery_address = $obj->fk_adresse_livraison; $this->propale_id = $obj->fk_source; - + $this->extraparams = (array) dol_json_decode($obj->extraparams, true); $this->lines = array(); @@ -1571,6 +1574,8 @@ class Commande extends CommonObject /** * Returns a array with expeditions lines number * + * @return int Nb of shipments + * * TODO deprecated, move to Shipping class */ function nb_expedition() @@ -2035,6 +2040,7 @@ class Commande extends CommonObject /** * Set customer ref + * * @param User $user User that make change * @param string $ref_client Customer ref * @return int <0 if KO, >0 if OK @@ -2113,6 +2119,8 @@ class Commande extends CommonObject * @param timestamp $date_start Start date of the line * @param timestamp $date_end End date of the line * @param int $type Type of line (0=product, 1=service) + * @param int $fk_parent_line Parent line id + * @param int $skip_update_total Skip update of total * @return int < 0 if KO, > 0 if OK */ function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva, $txlocaltax1=0,$txlocaltax2=0, $price_base_type='HT', $info_bits=0, $date_start='', $date_end='', $type=0, $fk_parent_line=0, $skip_update_total=0) @@ -2244,7 +2252,7 @@ class Commande extends CommonObject $error = 0; $this->db->begin(); - + if (! $error && ! $notrigger) { // Appel des triggers @@ -2256,7 +2264,7 @@ class Commande extends CommonObject } // Fin appel triggers } - + if (! $error) { // Delete order details @@ -2267,7 +2275,7 @@ class Commande extends CommonObject dol_syslog(get_class($this)."::delete error", LOG_ERR); $error++; } - + // Delete order $sql = 'DELETE FROM '.MAIN_DB_PREFIX."commande WHERE rowid = ".$this->id; dol_syslog(get_class($this)."::delete sql=".$sql, LOG_DEBUG); @@ -2276,15 +2284,15 @@ class Commande extends CommonObject dol_syslog(get_class($this)."::delete error", LOG_ERR); $error++; } - + // Delete linked object $res = $this->deleteObjectLinked(); if ($res < 0) $error++; - + // Delete linked contacts $res = $this->delete_linked_contact(); if ($res < 0) $error++; - + // On efface le repertoire de pdf provisoire $comref = dol_sanitizeFileName($this->ref); if ($conf->commande->dir_output) @@ -2294,7 +2302,7 @@ class Commande extends CommonObject if (file_exists($file)) // We must delete all files before deleting directory { dol_delete_preview($this); - + if (!dol_delete_file($file)) { $this->error=$langs->trans("ErrorCanNotDeleteFile",$file); @@ -2313,7 +2321,7 @@ class Commande extends CommonObject } } } - + if (! $error) { dol_syslog(get_class($this)."::delete $this->id by $user->id", LOG_DEBUG); @@ -2421,7 +2429,7 @@ class Commande extends CommonObject if ($statut==3 && ! $facturee) return $langs->trans('StatusOrderToBill'); if ($statut==3 && $facturee) return $langs->trans('StatusOrderProcessed'); } - if ($mode == 1) + elseif ($mode == 1) { if ($statut==-1) return $langs->trans('StatusOrderCanceledShort'); if ($statut==0) return $langs->trans('StatusOrderDraftShort'); @@ -2430,7 +2438,7 @@ class Commande extends CommonObject if ($statut==3 && ! $facturee) return $langs->trans('StatusOrderToBillShort'); if ($statut==3 && $facturee) return $langs->trans('StatusOrderProcessed'); } - if ($mode == 2) + elseif ($mode == 2) { if ($statut==-1) return img_picto($langs->trans('StatusOrderCanceled'),'statut5').' '.$langs->trans('StatusOrderCanceledShort'); if ($statut==0) return img_picto($langs->trans('StatusOrderDraft'),'statut0').' '.$langs->trans('StatusOrderDraftShort'); @@ -2439,7 +2447,7 @@ class Commande extends CommonObject if ($statut==3 && ! $facturee) return img_picto($langs->trans('StatusOrderToBill'),'statut7').' '.$langs->trans('StatusOrderToBillShort'); if ($statut==3 && $facturee) return img_picto($langs->trans('StatusOrderProcessed'),'statut6').' '.$langs->trans('StatusOrderProcessedShort'); } - if ($mode == 3) + elseif ($mode == 3) { if ($statut==-1) return img_picto($langs->trans('StatusOrderCanceled'),'statut5'); if ($statut==0) return img_picto($langs->trans('StatusOrderDraft'),'statut0'); @@ -2448,7 +2456,7 @@ class Commande extends CommonObject if ($statut==3 && ! $facturee) return img_picto($langs->trans('StatusOrderToBill'),'statut7'); if ($statut==3 && $facturee) return img_picto($langs->trans('StatusOrderProcessed'),'statut6'); } - if ($mode == 4) + elseif ($mode == 4) { if ($statut==-1) return img_picto($langs->trans('StatusOrderCanceled'),'statut5').' '.$langs->trans('StatusOrderCanceled'); if ($statut==0) return img_picto($langs->trans('StatusOrderDraft'),'statut0').' '.$langs->trans('StatusOrderDraft'); @@ -2457,7 +2465,7 @@ class Commande extends CommonObject if ($statut==3 && ! $facturee) return img_picto($langs->trans('StatusOrderToBill'),'statut7').' '.$langs->trans('StatusOrderToBill'); if ($statut==3 && $facturee) return img_picto($langs->trans('StatusOrderProcessed'),'statut6').' '.$langs->trans('StatusOrderProcessed'); } - if ($mode == 5) + elseif ($mode == 5) { if ($statut==-1) return $langs->trans('StatusOrderCanceledShort').' '.img_picto($langs->trans('StatusOrderCanceled'),'statut5'); if ($statut==0) return $langs->trans('StatusOrderDraftShort').' '.img_picto($langs->trans('StatusOrderDraft'),'statut0'); @@ -2505,7 +2513,8 @@ class Commande extends CommonObject /** * Charge les informations d'ordre info dans l'objet commande * - * @param int $id Id of order + * @param int $id Id of order + * @return void */ function info($id) { @@ -2820,7 +2829,8 @@ class OrderLine /** * Load line order * - * @param rowid id line order + * @param int $rowid Id line order + * @return int <0 if KO, >0 if OK */ function fetch($rowid) { diff --git a/htdocs/commande/class/commandestats.class.php b/htdocs/commande/class/commandestats.class.php index bc8ca78ad55..7aa1f4280b6 100644 --- a/htdocs/commande/class/commandestats.class.php +++ b/htdocs/commande/class/commandestats.class.php @@ -51,11 +51,11 @@ class CommandeStats extends Stats * @param string $mode Option * @param int $userid Id user for filter */ - function CommandeStats($DB, $socid=0, $mode, $userid=0) + function CommandeStats($db, $socid, $mode, $userid=0) { global $user, $conf; - $this->db = $DB; + $this->db = $db; $this->socid = $socid; $this->userid = $userid; @@ -88,7 +88,7 @@ class CommandeStats extends Stats /** * Return orders number by month for a year - * + * * @param int $year year for stats * @return array array with number by month */ @@ -110,7 +110,7 @@ class CommandeStats extends Stats /** * Return orders number by year - * + * * @return array array with number by year * */ @@ -175,7 +175,7 @@ class CommandeStats extends Stats /** * Return nb, total and average - * + * * @return array Array of values */ function getAllByYear() diff --git a/htdocs/compta/bank/bilan.php b/htdocs/compta/bank/bilan.php index 63aab99a330..d12b2560f97 100644 --- a/htdocs/compta/bank/bilan.php +++ b/htdocs/compta/bank/bilan.php @@ -28,6 +28,12 @@ if (!$user->rights->banque->lire) accessforbidden(); +/** + * Get result of sql for field amount + * + * @param string $sql SQL string + * @return int Amount + */ function valeur($sql) { global $db; diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php index 8b2e472b257..f1595f8a86b 100644 --- a/htdocs/compta/bank/class/account.class.php +++ b/htdocs/compta/bank/class/account.class.php @@ -130,12 +130,12 @@ class Account extends CommonObject /** * Add a link between bank line record and its source * - * @param line_id Id ecriture bancaire - * @param url_id Id parametre url - * @param url Url - * @param label Link label - * @param type Type of link ('payment', 'company', 'member', ...) - * @return int <0 if KO, id line if OK + * @param int $line_id Id ecriture bancaire + * @param int $url_id Id parametre url + * @param string $url Url + * @param string $label Link label + * @param string $type Type of link ('payment', 'company', 'member', ...) + * @return int <0 if KO, id line if OK */ function add_url_line($line_id, $url_id, $url, $label, $type) { @@ -171,10 +171,10 @@ class Account extends CommonObject * TODO Move this into AccountLine * Return array with links from llx_bank_url * - * @param fk_bank To search using bank transaction id - * @param url_id To search using link to - * @param type To search using type - * @return array Array of links + * @param int $fk_bank To search using bank transaction id + * @param int $url_id To search using link to + * @param string $type To search using type + * @return array Array of links */ function get_url($fk_bank='', $url_id='', $type='') { @@ -227,18 +227,18 @@ class Account extends CommonObject /** * Add an entry into table ".MAIN_DB_PREFIX."bank * - * @param $date Date operation - * @param $oper 1,2,3,4... (deprecated) or TYP,VIR,PRE,LIQ,VAD,CB,CHQ... - * @param $label Descripton - * @param $amount Amount - * @param $num_chq Numero cheque ou virement - * @param $categorie Categorie optionnelle - * @param $user User that create - * @param $emetteur Name of cheque writer - * @param $banque Bank of cheque writer - * @return int Rowid of added entry, <0 if KO + * @param timsestmap $date Date operation + * @param string $oper 1,2,3,4... (deprecated) or TYP,VIR,PRE,LIQ,VAD,CB,CHQ... + * @param string $label Descripton + * @param float $amount Amount + * @param string $num_chq Numero cheque ou virement + * @param string $categorie Categorie optionnelle + * @param User $user User that create + * @param string $emetteur Name of cheque writer + * @param string $banque Bank of cheque writer + * @return int Rowid of added entry, <0 if KO */ - function addline($date, $oper, $label, $amount, $num_chq='', $categorie='', $user, $emetteur='',$banque='') + function addline($date, $oper, $label, $amount, $num_chq, $categorie, $user, $emetteur='',$banque='') { // Clean parameters $emetteur=trim($emetteur); @@ -344,10 +344,10 @@ class Account extends CommonObject } /** - * Create bank account into database + * Create bank account into database * - * @param user Object user making action - * @return int < 0 if KO, > 0 if OK + * @param User $user Object user making action + * @return int < 0 if KO, > 0 if OK */ function create($user='') { @@ -455,8 +455,8 @@ class Account extends CommonObject /** * Update bank account card * - * @param user Object user making action - * @return int <0 si ko, >0 si ok + * @param User $user Object user making action + * @return int <0 si ko, >0 si ok */ function update($user='') { @@ -520,8 +520,8 @@ class Account extends CommonObject /** * Update BBAN (RIB) account fields * - * @param user Object user making update - * @return int <0 if KO, >0 if OK + * @param User $user Object user making update + * @return int <0 if KO, >0 if OK */ function update_bban($user='') { @@ -574,9 +574,10 @@ class Account extends CommonObject /** * Load a bank account into memory from database * - * @param id Id of bank account to get - * @param ref Ref of bank account to get - * @param ref_ext External ref of bank account to get + * @param int $id Id of bank account to get + * @param string $ref Ref of bank account to get + * @param string $ref_ext External ref of bank account to get + * @return int <0 if KO, >0 if OK */ function fetch($id,$ref='',$ref_ext='') { @@ -697,8 +698,8 @@ class Account extends CommonObject /** * Retourne le libelle du statut d'une facture (brouillon, validee, abandonnee, payee) * - * @param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long - * @return string Libelle + * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long + * @return string Libelle */ function getLibStatut($mode=0) { @@ -706,10 +707,11 @@ class Account extends CommonObject } /** - * Renvoi le libelle d'un statut donne - * @param statut Id statut - * @param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto - * @return string Libelle du statut + * Renvoi le libelle d'un statut donne + * + * @param int $statut Id statut + * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto + * @return string Libelle du statut */ function LibStatut($statut,$mode=0) { @@ -751,6 +753,7 @@ class Account extends CommonObject /** * Renvoi si un compte peut etre supprimer ou non (sans mouvements) + * * @return boolean vrai si peut etre supprime, faux sinon */ function can_be_deleted() @@ -775,6 +778,8 @@ class Account extends CommonObject /** * Return error + * + * @return string Error string */ function error() { @@ -856,9 +861,10 @@ class Account extends CommonObject /** * Renvoie nom clicable (avec eventuellement le picto) - * @param withpicto Inclut le picto dans le lien - * @param mode ''=Link to card, 'transactions'=Link to transactions card - * @return string Chaine avec URL + * + * @param int $withpicto Inclut le picto dans le lien + * @param string $mode ''=Link to card, 'transactions'=Link to transactions card + * @return string Chaine avec URL */ function getNomUrl($withpicto=0, $mode='') { @@ -888,6 +894,7 @@ class Account extends CommonObject /** * Return if an account has valid information + * * @return int 1 if correct, <=0 if wrong */ function verif() @@ -913,7 +920,8 @@ class Account extends CommonObject /** * Return account country code - * @return String country code + * + * @return string country code */ function getCountryCode() { @@ -948,6 +956,7 @@ class Account extends CommonObject /** * Return if a bank account is defined with detailed information (bank code, desk code, number and key) + * * @return int 0=Use only an account number * 1=Need Bank, Desk, Number and Key (France, Spain, ...) * 2=Neek Bank only (BSB for Australia) @@ -989,8 +998,7 @@ class Account extends CommonObject /** - * \class AccountLine - * \brief Class to manage bank transaction lines + * Class to manage bank transaction lines */ class AccountLine extends CommonObject { @@ -1032,10 +1040,11 @@ class AccountLine extends CommonObject /** * Load into memory content of a bank transaction line - * @param rowid Id of bank transaction to load - * @param ref Ref of bank transaction to load - * @param num External num to load (ex: num of transaction for paypal fee) - * @return int <0 if KO, >0 if OK + * + * @param int $rowid Id of bank transaction to load + * @param string $ref Ref of bank transaction to load + * @param string $num External num to load (ex: num of transaction for paypal fee) + * @return int <0 if KO, >0 if OK */ function fetch($rowid,$ref='',$num='') { @@ -1104,8 +1113,8 @@ class AccountLine extends CommonObject /** * Delete transaction bank line record * - * @param user User object that delete - * @return int <0 if KO, >0 if OK + * @param User $user User object that delete + * @return int <0 if KO, >0 if OK */ function delete($user=0) { @@ -1153,8 +1162,8 @@ class AccountLine extends CommonObject /** * Delete bank line records * - * @param user User object that delete - * @return int <0 if KO, >0 if OK + * @param User $user User object that delete + * @return int <0 if KO, >0 if OK */ function delete_urls($user=0) { @@ -1190,9 +1199,9 @@ class AccountLine extends CommonObject /** * Update bank account record in database * - * @param user Object user making update - * @param notrigger 0=Disable all triggers - * @return int <0 if KO, >0 if OK + * @param User $user Object user making update + * @param int $notrigger 0=Disable all triggers + * @return int <0 if KO, >0 if OK */ function update($user,$notrigger=0) { @@ -1224,9 +1233,9 @@ class AccountLine extends CommonObject /** * Update conciliation field * - * @param user Objet user making update - * @param cat Category id - * @return int <0 if KO, >0 if OK + * @param User $user Objet user making update + * @param int $cat Category id + * @return int <0 if KO, >0 if OK */ function update_conciliation($user,$cat) { @@ -1274,8 +1283,8 @@ class AccountLine extends CommonObject /** * Increase/decrease value date of a rowid * - * @param int $rowid - * @param int sign 1 or -1 + * @param int $rowid Id of line + * @param int $sign 1 or -1 * @return int >0 if OK, 0 if KO */ function datev_change($rowid,$sign=1) @@ -1335,7 +1344,8 @@ class AccountLine extends CommonObject /** * Charge les informations d'ordre info dans l'objet * - * @param rowid Id of object + * @param int $rowid Id of object + * @return void */ function info($rowid) { @@ -1380,10 +1390,10 @@ class AccountLine extends CommonObject /** * Renvoie nom clicable (avec eventuellement le picto) * - * @param withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul - * @param maxlen Longueur max libelle - * @param option Option ('showall') - * @return string Chaine avec URL + * @param int $withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul + * @param int $maxlen Longueur max libelle + * @param string $option Option ('showall') + * @return string Chaine avec URL */ function getNomUrl($withpicto=0,$maxlen=0,$option='') { diff --git a/htdocs/compta/bank/class/bankcateg.class.php b/htdocs/compta/bank/class/bankcateg.class.php index 061d7055637..4bcc156c417 100644 --- a/htdocs/compta/bank/class/bankcateg.class.php +++ b/htdocs/compta/bank/class/bankcateg.class.php @@ -58,9 +58,9 @@ class BankCateg // extends CommonObject /** * Create in database * - * @param user User that create - * @param notrigger 0=launch triggers after, 1=disable triggers - * @return int <0 if KO, Id of created object if OK + * @param User $user User that create + * @param int $notrigger 0=launch triggers after, 1=disable triggers + * @return int <0 if KO, Id of created object if OK */ function create($user, $notrigger=0) { @@ -126,9 +126,10 @@ class BankCateg // extends CommonObject /** - * \brief Load object in memory from database - * \param id id object - * \return int <0 if KO, >0 if OK + * Load object in memory from database + * + * @param int $id Id object + * @return int <0 if KO, >0 if OK */ function fetch($id) { @@ -166,10 +167,11 @@ class BankCateg // extends CommonObject /** - * \brief Update database - * \param user User that modify - * \param notrigger 0=launch triggers after, 1=disable triggers - * \return int <0 if KO, >0 if OK + * Update database + * + * @param User $user User that modify + * @param int $notrigger 0=launch triggers after, 1=disable triggers + * @return int <0 if KO, >0 if OK */ function update($user=0, $notrigger=0) { @@ -230,10 +232,11 @@ class BankCateg // extends CommonObject /** - * \brief Delete object in database - * \param user User that delete - * \param notrigger 0=launch triggers after, 1=disable triggers - * \return int <0 if KO, >0 if OK + * Delete object in database + * + * @param User $user User that delete + * @param int $notrigger 0=launch triggers after, 1=disable triggers + * @return int <0 if KO, >0 if OK */ function delete($user, $notrigger=0) { @@ -287,9 +290,10 @@ class BankCateg // extends CommonObject /** - * \brief Load an object from its id and create a new one in database - * \param fromid Id of object to clone - * \return int New id of clone + * Load an object from its id and create a new one in database + * + * @param int $fromid Id of object to clone + * @return int New id of clone */ function createFromClone($fromid) { diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index 0d924bbc0d5..f32d0c615f0 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -229,7 +229,7 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) // Sort array if (! $error) { - array_multisort ($tab_sqlobjOrder,$tab_sqlobj); + array_multisort($tab_sqlobjOrder,$tab_sqlobj); //Apply distinct filter foreach ($tab_sqlobj as $key=>$value) { diff --git a/htdocs/compta/deplacement/class/deplacementstats.class.php b/htdocs/compta/deplacement/class/deplacementstats.class.php index 9ad9791293c..68a8608fd09 100644 --- a/htdocs/compta/deplacement/class/deplacementstats.class.php +++ b/htdocs/compta/deplacement/class/deplacementstats.class.php @@ -108,9 +108,10 @@ class DeplacementStats extends Stats /** - * \brief Renvoie le montant de facture par mois pour une annee donnee - * \param year Year to scan - * \return array Array of values + * Renvoie le montant de facture par mois pour une annee donnee + * + * @param int $year Year to scan + * @return array Array of values */ function getAmountByMonth($year) { @@ -127,9 +128,10 @@ class DeplacementStats extends Stats } /** - * \brief Return average amount - * \param year Year to scan - * \return array Array of values + * Return average amount + * + * @param int $year Year to scan + * @return array Array of values */ function getAverageByMonth($year) { @@ -144,8 +146,9 @@ class DeplacementStats extends Stats } /** - * \brief Return nb, total and average - * \return array Array of values + * Return nb, total and average + * + * @return array Array of values */ function getAllByYear() { diff --git a/htdocs/compta/deplacement/fiche.php b/htdocs/compta/deplacement/fiche.php index 09cb5c2166a..95ed1c35a4e 100644 --- a/htdocs/compta/deplacement/fiche.php +++ b/htdocs/compta/deplacement/fiche.php @@ -2,17 +2,17 @@ /* Copyright (C) 2003 Rodolphe Quiedeville * Copyright (C) 2004-2012 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ @@ -178,7 +178,7 @@ else if ($action == 'update' && $user->rights->deplacement->creer) { $result = $object->fetch($id); - $object->date = dol_mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); + $object->date = dol_mktime(12, 0, 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); $object->km = $_POST["km"]; $object->type = $_POST["type"]; $object->fk_user = $_POST["fk_user"]; @@ -494,9 +494,9 @@ else if ($id) // Statut print ''; - + print "
trans("Invoice"); ?>num_facture(); ?>
trans("Invoice"); ?>numInvoice(); ?>
trans("TotalHT"); ?>prix_total_ht(),'MT').' '.$conf->currency; ?>
'.$langs->trans("DateEcheance").''.$obj_facturation->paiement_le().'
'.$langs->trans("DateEcheance").''.$obj_facturation->paiementLe().'
'.$langs->trans("Received").''.price2num($obj_facturation->montant_encaisse(),'MT').' '.$conf->currency.'
'.$langs->trans("Received").''.price2num($obj_facturation->montantEncaisse(),'MT').' '.$conf->currency.'
'.$langs->trans("Change").''.price2num($obj_facturation->montant_rendu(),'MT').' '.$conf->currency.'
'.$langs->trans("Change").''.price2num($obj_facturation->montantRendu(),'MT').' '.$conf->currency.'
'.$langs->trans("Status").''.$object->getLibStatut(4).'

"; - + // Notes $blocname = 'notes'; $title = $langs->trans('Notes'); diff --git a/htdocs/compta/deplacement/list.php b/htdocs/compta/deplacement/list.php index cc3d4542316..881fb54cbc0 100755 --- a/htdocs/compta/deplacement/list.php +++ b/htdocs/compta/deplacement/list.php @@ -75,7 +75,7 @@ if (trim($search_ref) != '') $sql.= ' AND d.rowid LIKE \'%'.$db->escape(trim($search_ref)) . '%\''; } $sql.= $db->order($sortfield,$sortorder); -$sql.= $db->plimit($limit + 1 ,$offset); +$sql.= $db->plimit($limit + 1, $offset); //print $sql; $resql=$db->query($sql); diff --git a/htdocs/compta/localtax/class/localtax.class.php b/htdocs/compta/localtax/class/localtax.class.php index 97683e912b8..6c1ef48f957 100644 --- a/htdocs/compta/localtax/class/localtax.class.php +++ b/htdocs/compta/localtax/class/localtax.class.php @@ -64,7 +64,7 @@ class localtax extends CommonObject global $conf, $langs; $error=0; - + // Clean parameters $this->amount=trim($this->amount); $this->label=trim($this->label); @@ -131,7 +131,7 @@ class localtax extends CommonObject global $conf, $langs; $error=0; - + // Clean parameters $this->amount=trim($this->amount); $this->label=trim($this->label); @@ -250,7 +250,7 @@ class localtax extends CommonObject global $conf, $langs; $error=0; - + $sql = "DELETE FROM ".MAIN_DB_PREFIX."localtax"; $sql.= " WHERE rowid=".$this->id; @@ -300,6 +300,8 @@ class localtax extends CommonObject /** * Hum la fonction s'appelle 'Solde' elle doit a mon avis calcluer le solde de localtax, non ? * + * @param int $year Year + * @return int ??? */ function solde($year = 0) { @@ -317,8 +319,9 @@ class localtax extends CommonObject /** * Total de la localtax des factures emises par la societe. * + * @param int $year Year + * @return int ??? */ - function localtax_sum_collectee($year = 0) { @@ -357,8 +360,9 @@ class localtax extends CommonObject /** * localtax payed * + * @param int $year Year + * @return int ??? */ - function localtax_sum_payee($year = 0) { @@ -398,8 +402,9 @@ class localtax extends CommonObject * localtax payed * Total de la localtax payed * + * @param int $year Year + * @return int ??? */ - function localtax_sum_reglee($year = 0) { diff --git a/htdocs/compta/paiement/avalider.php b/htdocs/compta/paiement/avalider.php index 1fde3bd1a19..7cfe2104b45 100644 --- a/htdocs/compta/paiement/avalider.php +++ b/htdocs/compta/paiement/avalider.php @@ -71,7 +71,7 @@ if ($socid) } $sql.= " AND p.statut = 0"; $sql.= " ORDER BY $sortfield $sortorder"; -$sql.= $db->plimit($limit +1 ,$offset); +$sql.= $db->plimit($limit+1, $offset); $resql = $db->query($sql); if ($resql) @@ -96,7 +96,7 @@ if ($resql) $objp = $db->fetch_object($resql); $var=!$var; print ""; - print ''.''.img_object($langs->trans("ShowPayment"),"payment").' '.$objp->rowid.''; + print ''.img_object($langs->trans("ShowPayment"),"payment").' '.$objp->rowid.''; print ''.dol_print_date($db->jdate($objp->dp),'day')."\n"; print "$objp->paiement_type $objp->num_paiement\n"; print ''.price($objp->amount).''; diff --git a/htdocs/compta/paiement/cheque/class/remisecheque.class.php b/htdocs/compta/paiement/cheque/class/remisecheque.class.php index f031189d25c..7967db52988 100644 --- a/htdocs/compta/paiement/cheque/class/remisecheque.class.php +++ b/htdocs/compta/paiement/cheque/class/remisecheque.class.php @@ -72,7 +72,7 @@ class RemiseCheque extends CommonObject $sql.= " WHERE bc.entity = ".$conf->entity; if ($id) $sql.= " AND bc.rowid = ".$id; if ($ref) $sql.= " AND bc.number = '".$this->db->escape($ref)."'"; - + dol_syslog("RemiseCheque::fetch sql=".$sql, LOG_DEBUG); $resql = $this->db->query($sql); if ($resql) @@ -113,13 +113,13 @@ class RemiseCheque extends CommonObject /** * Create a receipt to send cheques * - * @param user User making creation - * @param account_id Bank account for cheque receipt - * @param limit Limit number of cheque to this - * @param toRemise array with cheques to remise - * @return int <0 if KO, >0 if OK + * @param User $user User making creation + * @param int $account_id Bank account for cheque receipt + * @param int $limit Limit number of cheque to this + * @param array $toRemise array with cheques to remise + * @return int <0 if KO, >0 if OK */ - function create($user, $account_id, $limit=40,$toRemise) + function create($user, $account_id, $limit=40, $toRemise) { global $conf; @@ -271,7 +271,8 @@ class RemiseCheque extends CommonObject /** * Supprime la remise en base * - * @param user utilisateur qui effectue l'operation + * @param User $user Utilisateur qui effectue l'operation + * @return void */ function delete($user='') { @@ -326,8 +327,8 @@ class RemiseCheque extends CommonObject /** * Validate a receipt * - * @param user User - * @return int <0 if KO, >0 if OK + * @param User $user User + * @return int <0 if KO, >0 if OK */ function validate($user) { @@ -472,11 +473,11 @@ class RemiseCheque extends CommonObject /** * Build document * - * @param model Model name - * @param outputlangs Object langs - * @return int <0 if KO, >0 if OK + * @param string $model Model name + * @param Tranlsate $outputlangs Object langs + * @return int <0 if KO, >0 if OK */ - function generatePdf($model='blochet', $outputlangs) + function generatePdf($model, $outputlangs) { global $langs,$conf; @@ -555,8 +556,9 @@ class RemiseCheque extends CommonObject } /** - * \brief Mets a jour le montant total - * \return int 0 en cas de succes + * Mets a jour le montant total + * + * @return int 0 en cas de succes */ function updateAmount() { @@ -614,9 +616,10 @@ class RemiseCheque extends CommonObject } /** - * \brief Insere la remise en base - * \param account_id Compte bancaire concerne - * \return int + * Insere la remise en base + * + * @param int $account_id Compte bancaire concerne + * @return int */ function removeCheck($account_id) { @@ -643,8 +646,9 @@ class RemiseCheque extends CommonObject return 0; } /** - * \brief Charge les proprietes ref_previous et ref_next - * \return int <0 si ko, 0 si ok + * Charge les proprietes ref_previous et ref_next + * + * @return int <0 if KO, 0 if OK */ function load_previous_next_id() { @@ -684,9 +688,10 @@ class RemiseCheque extends CommonObject /** * Set the creation date - * @param user Object user - * @param date Date creation - * @return int <0 if KO, >0 if OK + * + * @param User $user Object user + * @param timestamp $date Date creation + * @return int <0 if KO, >0 if OK */ function set_date($user, $date) { @@ -719,9 +724,10 @@ class RemiseCheque extends CommonObject /** * Renvoie nom clicable (avec eventuellement le picto) - * @param withpicto Inclut le picto dans le lien - * @param option Sur quoi pointe le lien - * @return string Chaine avec URL + * + * @param int $withpicto Inclut le picto dans le lien + * @param string $option Sur quoi pointe le lien + * @return string Chaine avec URL */ function getNomUrl($withpicto=0,$option='') { @@ -741,9 +747,10 @@ class RemiseCheque extends CommonObject } /** - * \brief Retourne le libelle du statut d'une facture (brouillon, validee, abandonnee, payee) - * \param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto - * \return string Libelle + * Retourne le libelle du statut d'une facture (brouillon, validee, abandonnee, payee) + * + * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto + * @return string Libelle */ function getLibStatut($mode=0) { @@ -751,10 +758,11 @@ class RemiseCheque extends CommonObject } /** - * Return label of a status - * @param status Statut - * @param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto - * @return string Libelle du statut + * Return label of a status + * + * @param int $status Statut + * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto + * @return string Libelle du statut */ function LibStatut($status,$mode=0) { diff --git a/htdocs/compta/paiement/cheque/index.php b/htdocs/compta/paiement/cheque/index.php index 4ddf75a2887..9b0168bd0c2 100644 --- a/htdocs/compta/paiement/cheque/index.php +++ b/htdocs/compta/paiement/cheque/index.php @@ -44,7 +44,7 @@ $accountstatic=new Account($db); llxHeader('',$langs->trans("ChequesArea")); -print_fiche_titre($langs->trans("ChequesArea") ); +print_fiche_titre($langs->trans("ChequesArea")); print ''; diff --git a/htdocs/compta/paiement/cheque/liste.php b/htdocs/compta/paiement/cheque/liste.php index b454b56bdc5..4ccdef894d3 100644 --- a/htdocs/compta/paiement/cheque/liste.php +++ b/htdocs/compta/paiement/cheque/liste.php @@ -66,7 +66,7 @@ if ($_GET["search_montant"]) $sql.=" AND bc.amount=".price2num($_GET["search_montant"]); } $sql.= " ORDER BY $sortfield $sortorder"; -$sql.= $db->plimit($limit+1 ,$offset); +$sql.= $db->plimit($limit+1, $offset); //print "$sql"; $resql = $db->query($sql); diff --git a/htdocs/compta/paiement/cheque/pre.inc.php b/htdocs/compta/paiement/cheque/pre.inc.php index f0d49b6b3d1..98ed62325d6 100644 --- a/htdocs/compta/paiement/cheque/pre.inc.php +++ b/htdocs/compta/paiement/cheque/pre.inc.php @@ -32,14 +32,16 @@ $langs->load("categories"); /** * Replace the default llxHeader function - * @param $head - * @param $title - * @param $help_url - * @param $target - * @param $disablejs - * @param $disablehead - * @param $arrayofjs - * @param $arrayofcss + * + * @param string $head Optionnal head lines + * @param string $title HTML title + * @param string $help_url Link to online url help to show on left menu + * @param string $target Force target on menu links + * @param int $disablejs More content into html header + * @param int $disablehead More content into html header + * @param array $arrayofjs Array of complementary js files + * @param array $arrayofcss Array of complementary css files + * @return none */ function llxHeader($head = '', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='') { diff --git a/htdocs/compta/paiement/liste.php b/htdocs/compta/paiement/liste.php index b7c53db2c67..e09dfbaf7be 100644 --- a/htdocs/compta/paiement/liste.php +++ b/htdocs/compta/paiement/liste.php @@ -115,7 +115,7 @@ else if ($_REQUEST["search_company"]) $sql .=" AND s.nom LIKE '%".$db->escape($_REQUEST["search_company"])."%'"; } $sql.= $db->order($sortfield,$sortorder); -$sql.= $db->plimit($limit+1 ,$offset); +$sql.= $db->plimit($limit+1, $offset); //print "$sql"; $resql = $db->query($sql); diff --git a/htdocs/compta/tva/class/tva.class.php b/htdocs/compta/tva/class/tva.class.php index 8dc51a45b4e..0f141549ab1 100644 --- a/htdocs/compta/tva/class/tva.class.php +++ b/htdocs/compta/tva/class/tva.class.php @@ -75,7 +75,7 @@ class Tva extends CommonObject global $conf, $langs; $error=0; - + // Clean parameters $this->amount=trim($this->amount); $this->label=trim($this->label); @@ -147,7 +147,7 @@ class Tva extends CommonObject global $conf, $langs; $error=0; - + // Clean parameters $this->amount=trim($this->amount); $this->label=trim($this->label); @@ -273,7 +273,7 @@ class Tva extends CommonObject global $conf, $langs; $error=0; - + $sql = "DELETE FROM ".MAIN_DB_PREFIX."tva"; $sql.= " WHERE rowid=".$this->id; @@ -460,9 +460,10 @@ class Tva extends CommonObject /** - * \brief Ajoute un paiement de TVA - * \param user Object user that insert - * \return int <0 if KO, rowid in tva table if OK + * Ajoute un paiement de TVA + * + * @param User $user Object user that insert + * @return int <0 if KO, rowid in tva table if OK */ function addPayment($user) { @@ -572,9 +573,10 @@ class Tva extends CommonObject } /** - * \brief Mise a jour du lien entre le paiement tva et la ligne g�n�r�e dans llx_bank - * \param id_bank Id compte bancaire - * \return int <0 if KO, >0 if OK + * Mise a jour du lien entre le paiement tva et la ligne g�n�r�e dans llx_bank + * + * @param int $id_bank Id compte bancaire + * @return int <0 if KO, >0 if OK */ function update_fk_bank($id_bank) { @@ -594,11 +596,12 @@ class Tva extends CommonObject /** - \brief Renvoie nom clicable (avec eventuellement le picto) - \param withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul - \param option Sur quoi pointe le lien - \return string Chaine avec URL - */ + * Renvoie nom clicable (avec eventuellement le picto) + * + * @param int $withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul + * @param string $option Sur quoi pointe le lien + * @return string Chaine avec URL + */ function getNomUrl($withpicto=0,$option='') { global $langs; diff --git a/htdocs/compta/tva/quadri.php b/htdocs/compta/tva/quadri.php index 70eb871b5c8..d6dd4cf00ec 100644 --- a/htdocs/compta/tva/quadri.php +++ b/htdocs/compta/tva/quadri.php @@ -51,9 +51,10 @@ $result = restrictedArea($user, 'tax', '', '', 'charges'); * to report the amounts for different VAT rates as different lines. * This function also accounts recurrent invoices. * - * @param db Database handler - * @param y Year - * @param q Year quarter (1-4) + * @param DoliDB $db Database handler + * @param int $y Year + * @param int $q Year quarter (1-4) + * @return void */ function tva_coll($db,$y,$q) { @@ -118,9 +119,10 @@ function tva_coll($db,$y,$q) * The function gets the VAT in split results, as the VAT declaration asks * to report the amounts for different VAT rates as different lines * - * @param DoliDB $db Database handler object - * @param int $y Year - * @param int $q Year quarter (1-4) + * @param DoliDB $db Database handler object + * @param int $y Year + * @param int $q Year quarter (1-4) + * @return void */ function tva_paye($db, $y,$q) { @@ -289,16 +291,16 @@ if ($conf->global->COMPTA_MODE == "CREANCES-DETTES") $i++; } - print '' . - '' . - '' . - '' . - '' . - '' . - '' . - '' . - ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; print ''; } diff --git a/htdocs/contact/canvas/actions_contactcard_common.class.php b/htdocs/contact/canvas/actions_contactcard_common.class.php index 2d5e6c62eed..dafb75b4e04 100644 --- a/htdocs/contact/canvas/actions_contactcard_common.class.php +++ b/htdocs/contact/canvas/actions_contactcard_common.class.php @@ -70,8 +70,8 @@ abstract class ActionsContactCardCommon /** * Get object * - * @param int Object id - * @return object Object loaded + * @param int $id Object id + * @return object Object loaded */ function getObject($id) { @@ -226,8 +226,8 @@ abstract class ActionsContactCardCommon /** * Set content of ->tpl array, to use into template * - * @param string $action Type of action - * @return string HTML output + * @param string &$action Type of action + * @return string HTML output */ function assign_values(&$action) { diff --git a/htdocs/contact/canvas/default/actions_contactcard_default.class.php b/htdocs/contact/canvas/default/actions_contactcard_default.class.php index fdaa07825ef..ed186b92348 100644 --- a/htdocs/contact/canvas/default/actions_contactcard_default.class.php +++ b/htdocs/contact/canvas/default/actions_contactcard_default.class.php @@ -52,9 +52,12 @@ class ActionsContactCardDefault extends ActionsContactCardCommon $this->canvas = $canvas; $this->card = $card; } - + /** * Return the title of card + * + * @param string $action Code action + * @return string Title */ private function getTitle($action) { @@ -65,21 +68,22 @@ class ActionsContactCardDefault extends ActionsContactCardCommon if ($action == 'view') $out.= (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("Contact") : $langs->trans("ContactAddress")); if ($action == 'edit') $out.= (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("EditContact") : $langs->trans("EditContactAddress")); if ($action == 'create') $out.= (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("NewContact") : $langs->trans("NewContactAddress")); - + return $out; } /** * Assign custom values for canvas * - * @param string $action Type of action - * @return void + * @param string &$action Type of action + * @param int $id Id + * @return void */ function assign_values(&$action, $id) { global $conf, $db, $langs, $user; global $form; - + $ret = $this->getObject($id); parent::assign_values($action); diff --git a/htdocs/contact/fiche.php b/htdocs/contact/fiche.php index 0431f65f993..120aa9c2edf 100644 --- a/htdocs/contact/fiche.php +++ b/htdocs/contact/fiche.php @@ -324,7 +324,7 @@ else // Show tabs $head = contact_prepare_head($object); - + $title = (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("Contacts") : $langs->trans("ContactsAddresses")); dol_fiche_head($head, 'card', $title, 0, 'contact'); } @@ -350,7 +350,7 @@ else $object->country_code = $tmparray['code']; $object->country = $tmparray['label']; } - + $title = $addcontact = (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("AddContact") : $langs->trans("AddContactAddress")); print_fiche_titre($title); @@ -576,7 +576,7 @@ else print $formcompany->select_civility(isset($_POST["civilite_id"])?$_POST["civilite_id"]:$object->civilite_id); print ''; - print ''; + print ''; // Address print ''; @@ -762,7 +762,7 @@ else print ''; // Role - print ''; + print ''; // Address print '
'.$langs->trans("Total").':'.price($subtot_coll_total).''.price($subtot_coll_vat).''.price($subtot_paye_total).''.price($subtot_paye_vat).''.price($total).'' . - '
'.$langs->trans("Total").':'.price($subtot_coll_total).''.price($subtot_coll_vat).''.price($subtot_paye_total).''.price($subtot_paye_vat).''.price($total).''; + print '
'.$langs->trans("PostOrFunction" ).'poste).'">
'.$langs->trans("PostOrFunction").'poste).'">
'.$langs->trans("Address").'
'.$langs->trans("PostOrFunction" ).''.$object->poste.'
'.$langs->trans("PostOrFunction").''.$object->poste.'
'.$langs->trans("Address").''; diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 0dae374edfd..40573e77a7f 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -61,9 +61,9 @@ class Contrat extends CommonObject var $note_public; var $fk_projet; - + var $extraparams=array(); - + var $lines=array(); @@ -128,12 +128,12 @@ class Contrat extends CommonObject /** * Activate a contract line * - * @param user Objet User qui active le contrat - * @param line_id Id de la ligne de detail a activer - * @param date Date d'ouverture - * @param date_end Date fin prevue - * @param comment A comment typed by user - * @return int <0 if KO, >0 if OK + * @param User $user Objet User qui active le contrat + * @param int $line_id Id de la ligne de detail a activer + * @param timestamp $date Date d'ouverture + * @param timestamp $date_end Date fin prevue + * @param string $comment A comment typed by user + * @return int <0 if KO, >0 if OK */ function active_line($user, $line_id, $date, $date_end='', $comment='') { @@ -178,11 +178,11 @@ class Contrat extends CommonObject /** * Close a contract line * - * @param user Objet User qui active le contrat - * @param line_id Id de la ligne de detail a activer - * @param date_end Date fin - * @param comment A comment typed by user - * @return int <0 if KO, >0 if OK + * @param User $user Objet User qui active le contrat + * @param int $line_id Id de la ligne de detail a activer + * @param timestamp $date_end Date fin + * @param string $comment A comment typed by user + * @return int <0 if KO, >0 if OK */ function close_line($user, $line_id, $date_end, $comment='') { @@ -276,10 +276,10 @@ class Contrat extends CommonObject /** * Validate a contract * - * @param user Objet User - * @param langs Environnement langue de l'utilisateur - * @param conf Environnement de configuration lors de l'operation - * @return int <0 if KO, >0 if OK + * @param User $user Objet User + * @param Translate $langs Environnement langue de l'utilisateur + * @param Conf $conf Environnement de configuration lors de l'operation + * @return int <0 if KO, >0 if OK */ function validate($user,$langs,$conf) { @@ -312,6 +312,7 @@ class Contrat extends CommonObject * Load a contract from database * * @param int $id Id of contract to load + * @param string $ref Ref * @return int <0 if KO, id of contract if OK */ function fetch($id,$ref='') @@ -353,7 +354,7 @@ class Contrat extends CommonObject $this->socid = $result["fk_soc"]; $this->fk_soc = $result["fk_soc"]; - + $this->extraparams = (array) dol_json_decode($result["extraparams"], true); $this->db->free($resql); @@ -690,10 +691,10 @@ class Contrat extends CommonObject /** * Supprime l'objet de la base * - * @param user Utilisateur qui supprime - * @param langs Environnement langue de l'utilisateur - * @param conf Environnement de configuration lors de l'operation - * @return int < 0 si erreur, > 0 si ok + * @param User $user Utilisateur qui supprime + * @param Translate $langs Environnement langue de l'utilisateur + * @param Conf $conf Environnement de configuration lors de l'operation + * @return int < 0 si erreur, > 0 si ok */ function delete($user,$langs='',$conf='') { @@ -810,22 +811,22 @@ class Contrat extends CommonObject /** * Ajoute une ligne de contrat en base * - * @param desc Description de la ligne - * @param pu_ht Prix unitaire HT - * @param qty Quantite - * @param txtva Taux tva - * @param txlocaltax1 Local tax 1 rate - * @param txlocaltax2 Local tax 2 rate - * @param fk_product Id produit - * @param remise_percent Pourcentage de remise de la ligne - * @param date_start Date de debut prevue - * @param date_end Date de fin prevue - * @param price_base_type HT ou TTC - * @param pu_ttc Prix unitaire TTC - * @param info_bits Bits de type de lignes - * @return int <0 si erreur, >0 si ok + * @param string $desc Description de la ligne + * @param float $pu_ht Prix unitaire HT + * @param int $qty Quantite + * @param float $txtva Taux tva + * @param float $txlocaltax1 Local tax 1 rate + * @param float $txlocaltax2 Local tax 2 rate + * @param int $fk_product Id produit + * @param float $remise_percent Pourcentage de remise de la ligne + * @param timestamp $date_start Date de debut prevue + * @param timestamp $date_end Date de fin prevue + * @param float $price_base_type HT ou TTC + * @param float $pu_ttc Prix unitaire TTC + * @param int $info_bits Bits de type de lignes + * @return int <0 si erreur, >0 si ok */ - function addline($desc, $pu_ht, $qty, $txtva, $txlocaltax1=0, $txlocaltax2=0, $fk_product=0, $remise_percent=0, $date_start, $date_end, $price_base_type='HT', $pu_ttc=0, $info_bits=0) + function addline($desc, $pu_ht, $qty, $txtva, $txlocaltax1, $txlocaltax2, $fk_product, $remise_percent, $date_start, $date_end, $price_base_type='HT', $pu_ttc=0, $info_bits=0) { global $user, $langs, $conf; @@ -936,21 +937,21 @@ class Contrat extends CommonObject /** * Mets a jour une ligne de contrat * - * @param rowid Id de la ligne de facture - * @param desc Description de la ligne - * @param pu Prix unitaire - * @param qty Quantite - * @param remise_percent Pourcentage de remise de la ligne - * @param date_start Date de debut prevue - * @param date_end Date de fin prevue - * @param tvatx Taux TVA - * @param localtax1tx Local tax 1 rate - * @param localtax2tx Local tax 2 rate - * @param date_debut_reel Date de debut reelle - * @param date_fin_reel Date de fin reelle - * @return int < 0 si erreur, > 0 si ok + * @param int $rowid Id de la ligne de facture + * @param string $desc Description de la ligne + * @param float $pu Prix unitaire + * @param int $qty Quantite + * @param float $remise_percent Pourcentage de remise de la ligne + * @param timestamp $date_start Date de debut prevue + * @param timestamp $date_end Date de fin prevue + * @param float $tvatx Taux TVA + * @param float $localtax1tx Local tax 1 rate + * @param float $localtax2tx Local tax 2 rate + * @param timestamp $date_debut_reel Date de debut reelle + * @param timestamp $date_fin_reel Date de fin reelle + * @return int < 0 si erreur, > 0 si ok */ - function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $date_start='', $date_end='', $tvatx, $localtax1tx=0, $localtax2tx=0, $date_debut_reel='', $date_fin_reel='') + function updateline($rowid, $desc, $pu, $qty, $remise_percent, $date_start, $date_end, $tvatx, $localtax1tx=0, $localtax2tx=0, $date_debut_reel='', $date_fin_reel='') { global $user, $conf, $langs; @@ -1026,9 +1027,9 @@ class Contrat extends CommonObject /** * Delete a contract line * - * @param idline Id of line to delete - * @param user User that delete - * @return int >0 if OK, <0 if KO + * @param int $idline Id of line to delete + * @param User $user User that delete + * @return int >0 if OK, <0 if KO */ function deleteline($idline,$user) { @@ -1069,7 +1070,8 @@ class Contrat extends CommonObject /** * Update statut of contract according to services * - * @return int <0 if KO, >0 if OK + * @param User $user Object user + * @return int <0 if KO, >0 if OK */ function update_statut($user) { @@ -1092,8 +1094,8 @@ class Contrat extends CommonObject /** * Return label of a contract status * - * @param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Long label of all services, 5=Libelle court + Picto, 6=Picto of all services - * @return string Label + * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Long label of all services, 5=Libelle court + Picto, 6=Picto of all services + * @return string Label */ function getLibStatut($mode) { @@ -1103,9 +1105,9 @@ class Contrat extends CommonObject /** * Renvoi label of a given contrat status * - * @param statut Status id - * @param mode 0=Long label, 1=Short label, 2=Picto + Libelle court, 3=Picto, 4=Picto + Long label of all services, 5=Libelle court + Picto, 6=Picto of all services - * @return string Label + * @param int $statut Status id + * @param int $mode 0=Long label, 1=Short label, 2=Picto + Libelle court, 3=Picto, 4=Picto + Long label of all services, 5=Libelle court + Picto, 6=Picto of all services + * @return string Label */ function LibStatut($statut,$mode) { @@ -1238,8 +1240,8 @@ class Contrat extends CommonObject /** * Return list of line rowid * - * @param statut Status of lines to get - * @return array Array of line's rowid + * @param int $statut Status of lines to get + * @return array Array of line's rowid */ function array_detail($statut=-1) { @@ -1274,8 +1276,8 @@ class Contrat extends CommonObject /** * Return list of other contracts for same company than current contract * - * @param option 'all' or 'others' - * @return array Array of contracts id + * @param string $option 'all' or 'others' + * @return array Array of contracts id */ function getListOfContracts($option='all') { @@ -1313,9 +1315,9 @@ class Contrat extends CommonObject /** * Load indicators for dashboard (this->nbtodo and this->nbtodolate) * - * @param user Objet user - * @param mode "inactive" pour services a activer, "expired" pour services expires - * @return int <0 if KO, >0 if OK + * @param User $user Objet user + * @param string $mode "inactive" pour services a activer, "expired" pour services expires + * @return int <0 if KO, >0 if OK */ function load_board($user,$mode) { @@ -1510,8 +1512,7 @@ class Contrat extends CommonObject /** - * \class ContratLigne - * \brief Classe permettant la gestion des lignes de contrats + * Classe permettant la gestion des lignes de contrats */ class ContratLigne { @@ -1570,10 +1571,10 @@ class ContratLigne /** - * Return label of this contract line status + * Return label of this contract line status * - * @param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto - * @return string Libelle + * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto + * @return string Libelle */ function getLibStatut($mode) { @@ -1581,12 +1582,12 @@ class ContratLigne } /** - * Return label of a contract line status + * Return label of a contract line status * - * @param statut id statut - * @param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto - * @param expired 0=Not expired, 1=Expired, -1=Both or unknown - * @return string Libelle + * @param int $statut Id statut + * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto + * @param int $expired 0=Not expired, 1=Expired, -1=Both or unknown + * @return string Libelle */ function LibStatut($statut,$mode,$expired=-1) { @@ -1645,8 +1646,9 @@ class ContratLigne /** * Renvoie nom clicable (avec eventuellement le picto) * - * @param withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul - * @return string Chaine avec URL + * @param int $withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul + * @param int $maxlength Max length + * @return string Chaine avec URL */ function getNomUrl($withpicto=0,$maxlength=0) { @@ -1670,9 +1672,9 @@ class ContratLigne /** * Load object in memory from database * - * @param id id object - * @param ref Ref of contract - * @return int <0 if KO, >0 if OK + * @param int $id Id object + * @param string $ref Ref of contract + * @return int <0 if KO, >0 if OK */ function fetch($id, $ref='') { diff --git a/htdocs/contrat/liste.php b/htdocs/contrat/liste.php index ea8ff2a549a..177e27f2598 100644 --- a/htdocs/contrat/liste.php +++ b/htdocs/contrat/liste.php @@ -85,7 +85,7 @@ if ($sall) $sql.= " AND (s.nom like '%".$db->escape($sall)."%' OR cd. $sql.= " GROUP BY c.rowid, c.ref, c.datec, c.date_contrat, c.statut,"; $sql.= " s.nom, s.rowid"; $sql.= " ORDER BY $sortfield $sortorder"; -$sql.= $db->plimit($conf->liste_limit + 1 ,$offset); +$sql.= $db->plimit($conf->liste_limit + 1, $offset); $resql=$db->query($sql); if ($resql) diff --git a/htdocs/contrat/services.php b/htdocs/contrat/services.php index 30e0e81a72c..433df3249d8 100644 --- a/htdocs/contrat/services.php +++ b/htdocs/contrat/services.php @@ -101,7 +101,7 @@ $filter_date2=dol_mktime(0,0,0,$_REQUEST['op2month'],$_REQUEST['op2day'],$_REQUE if (! empty($_REQUEST['filter_op1']) && $_REQUEST['filter_op1'] != -1 && $filter_date1 != '') $sql.= " AND date_ouverture_prevue ".$_REQUEST['filter_op1']." ".$db->idate($filter_date1); if (! empty($_REQUEST['filter_op2']) && $_REQUEST['filter_op2'] != -1 && $filter_date2 != '') $sql.= " AND date_fin_validite ".$_REQUEST['filter_op2']." ".$db->idate($filter_date2); $sql .= $db->order($sortfield,$sortorder); -$sql .= $db->plimit($limit + 1 ,$offset); +$sql .= $db->plimit($limit + 1, $offset); //print $sql; dol_syslog("contrat/services.php sql=".$sql); diff --git a/htdocs/core/datepicker.php b/htdocs/core/datepicker.php index dca5f86b829..54f811ef3e8 100644 --- a/htdocs/core/datepicker.php +++ b/htdocs/core/datepicker.php @@ -115,8 +115,14 @@ else print ''."\n"; - -function xyzToUnixTimestamp($mysqldate){ +/** + * Convert date to timestamp + * + * @param string $mysqldate Date YYYMMDD + * @return timestamp Timestamp + */ +function xyzToUnixTimestamp($mysqldate) +{ $year=substr($mysqldate,0,4); $month=substr($mysqldate,4,2); $day=substr($mysqldate,6,2); @@ -124,6 +130,14 @@ function xyzToUnixTimestamp($mysqldate){ return $unixtimestamp; } +/** + * Show box + * + * @param string $selectedDate Date YYYMMDD + * @param int $month Month + * @param int $year Year + * @return void + */ function displayBox($selectedDate,$month,$year) { global $langs,$conf; diff --git a/htdocs/core/lib/doc.lib.php b/htdocs/core/lib/doc.lib.php index 1338bb2e6f3..a96a08f93b2 100644 --- a/htdocs/core/lib/doc.lib.php +++ b/htdocs/core/lib/doc.lib.php @@ -31,7 +31,6 @@ /** * Return line description translated in outputlangs and encoded into UTF8 * - * @param Object $object Object * @param Line $line Current line number (0 = first line, 1 = second line, ...) * @param Translate $outputlangs Object langs for output * @param int $hideref Hide reference diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 875c1277210..93827c7107c 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1463,8 +1463,8 @@ function isValidEmail($address) /** * Return true if phone number syntax is ok * - * @param string $address phone (Ex: "0601010101") - * @return boolean true if phone syntax is OK, false if KO or empty string + * @param string $phone phone (Ex: "0601010101") + * @return boolean true if phone syntax is OK, false if KO or empty string */ function isValidPhone($phone) { diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 30137ca7963..88fb0549e90 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -664,11 +664,14 @@ function pdf_pagefoot(&$pdf,$outputlangs,$paramfreetext,$fromcompany,$marge_bass /** * Show linked objects for PDF generation * - * @param PDF &$pdf Object PDF - * @param object $object Object - * @param Translate $outputlangs Object lang - * @param int $curx X - * @param int $cury Y + * @param PDF &$pdf Object PDF + * @param object $object Object + * @param Translate $outputlangs Object lang + * @param int $curx X + * @param int $cury Y + * @param int $align Align + * @param string $default_font_size Font size + * @param HookManager $hookmanager Hook manager object * @return void */ function pdf_writeLinkedObjects(&$pdf,$object,$outputlangs,$posx,$posy,$align,$default_font_size,$hookmanager=false) @@ -682,7 +685,7 @@ function pdf_writeLinkedObjects(&$pdf,$object,$outputlangs,$posx,$posy,$align,$d $pdf->SetXY($posx,$posy); $pdf->SetFont('','', $default_font_size - 2); $pdf->MultiCell(100, 3, $linkedobject["ref_title"].' : '.$linkedobject["ref_value"], '', $align); - + if (! empty($linkedobject["date_title"]) && ! empty($linkedobject["date_value"])) { $posy+=3; @@ -691,7 +694,7 @@ function pdf_writeLinkedObjects(&$pdf,$object,$outputlangs,$posx,$posy,$align,$d } } } - + return $pdf->getY(); } @@ -1292,13 +1295,13 @@ function pdf_getTotalQty($object,$type,$outputlangs,$hookmanager=false) function pdf_getCurrencySymbol(&$pdf, $currency_code) { global $db, $form; - + $currency_sign = ''; - + if (! is_object($form)) $form = new Form($db); - + $form->load_cache_currencies(); - + if (is_array($form->cache_currencies[$currency_code]['unicode']) && ! empty($form->cache_currencies[$currency_code]['unicode'])) { foreach($form->cache_currencies[$currency_code]['unicode'] as $unicode) @@ -1310,13 +1313,13 @@ function pdf_getCurrencySymbol(&$pdf, $currency_code) { $currency_sign = $currency_code; } - + return $currency_sign; } /** * Return linked objects - * + * * @param object $object Object * @param Translate $outputlangs Object lang for output * @param HookManager $hookmanager Hook manager instance @@ -1325,7 +1328,7 @@ function pdf_getCurrencySymbol(&$pdf, $currency_code) function pdf_getLinkedObjects($object,$outputlangs,$hookmanager=false) { $linkedobjects=array(); - + $object->fetchObjectLinked(); foreach($object->linkedObjects as $objecttype => $objects) @@ -1355,7 +1358,7 @@ function pdf_getLinkedObjects($object,$outputlangs,$hookmanager=false) } } } - + // For add external linked objects if (is_object($hookmanager)) { diff --git a/htdocs/core/lib/product.lib.php b/htdocs/core/lib/product.lib.php index 52e14a638d9..f025a34e045 100644 --- a/htdocs/core/lib/product.lib.php +++ b/htdocs/core/lib/product.lib.php @@ -139,6 +139,7 @@ function product_prepare_head($object, $user) * Return array head with list of tabs to view object informations. * * @param Object $object Product +* @param string $tab Tab id * @return array head array with tabs */ function product_admin_prepare_head($object, $tab) @@ -171,10 +172,11 @@ function product_admin_prepare_head($object, $tab) /** + * Show stats for company * - * Enter description here ... - * @param unknown_type $product - * @param unknown_type $socid + * @param Product $product Product object + * @param int $socid Thirdparty id + * @return void */ function show_stats_for_company($product,$socid) { diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index 9cec0d5222c..dedd9f320a1 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -266,6 +266,7 @@ function select_projects($socid=-1, $selected='', $htmlname='projectid', $maxlen * @param int $showproject Show project columns * @param int &$taskrole Array of roles of user for each tasks * @param int $projectsListId List of id of project allowed to user (separated with comma) + * @return void */ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$taskrole, $projectsListId='') { diff --git a/htdocs/core/login/functions_myopenid.php b/htdocs/core/login/functions_myopenid.php index c8c5e28cecb..6cde7eb820f 100644 --- a/htdocs/core/login/functions_myopenid.php +++ b/htdocs/core/login/functions_myopenid.php @@ -137,26 +137,56 @@ class SimpleOpenID } } + /** + * SetOpenIDServer + * + * @param string $a Server + * @return void + */ function SetOpenIDServer($a) { $this->URLs['openid_server'] = $a; } + /** + * SetOpenIDServer + * + * @param string $a Server + * @return void + */ function SetTrustRoot($a) { $this->URLs['trust_root'] = $a; } + /** + * SetOpenIDServer + * + * @param string $a Server + * @return void + */ function SetCancelURL($a) { $this->URLs['cancel'] = $a; } + /** + * SetApprovedURL + * + * @param string $a Server + * @return void + */ function SetApprovedURL($a) { $this->URLs['approved'] = $a; } + /** + * SetRequiredFields + * + * @param string $a Server + * @return void + */ function SetRequiredFields($a) { if (is_array($a)){ @@ -166,6 +196,12 @@ class SimpleOpenID } } + /** + * SetOptionalFields + * + * @param string $a Server + * @return void + */ function SetOptionalFields($a) { if (is_array($a)){ @@ -175,6 +211,12 @@ class SimpleOpenID } } + /** + * SetIdentity + * + * @param string $a Server + * @return void + */ function SetIdentity($a) { // Set Identity URL if ((stripos($a, 'http://') === false) @@ -197,17 +239,35 @@ class SimpleOpenID $this->openid_url_identity = $a; } + /** + * GetIdentity + * + * @param string $a Server + * @return void + */ function GetIdentity() { // Get Identity return $this->openid_url_identity; } + /** + * SetOpenIDServer + * + * @param string $a Server + * @return void + */ function GetError() { $e = $this->error; return array('code'=>$e[0],'description'=>$e[1]); } + /** + * ErrorStore + * + * @param string $a Server + * @return void + */ function ErrorStore($code, $desc = null) { $errs['OPENID_NOSERVERSFOUND'] = 'Cannot find OpenID Server TAG on Identity page.'; @@ -217,6 +277,12 @@ class SimpleOpenID $this->error = array($code,$desc); } + /** + * IsError + * + * @param string $a Server + * @return void + */ function IsError() { if (count($this->error) > 0){ @@ -226,6 +292,12 @@ class SimpleOpenID } } + /** + * splitResponse + * + * @param string $a Server + * @return void + */ function splitResponse($response) { $r = array(); @@ -240,6 +312,12 @@ class SimpleOpenID return $r; } + /** + * OpenID_Standarize + * + * @param string $a Server + * @return void + */ function OpenID_Standarize($openid_identity = null) { if ($openid_identity === null) @@ -353,6 +431,12 @@ class SimpleOpenID return $servers[0]; } + /** + * GetRedirectURL + * + * @param string $a Server + * @return void + */ function GetRedirectURL() { $params = array(); @@ -372,18 +456,33 @@ class SimpleOpenID return $this->URLs['openid_server'] . "?". $this->array2url($params); } + /** + * Redirect + * + * @param string $a Server + * @return void + */ function Redirect() { $redirect_to = $this->GetRedirectURL(); - if (headers_sent()){ // Use JavaScript to redirect if content has been previously sent (not recommended, but safe) + if (headers_sent()) + { // Use JavaScript to redirect if content has been previously sent (not recommended, but safe) echo ''; - }else{ // Default Header Redirect + } + else + { // Default Header Redirect header('Location: ' . $redirect_to); } } + /** + * ValidateWithServer + * + * @param string $a Server + * @return void + */ function ValidateWithServer() { $params = array( @@ -405,14 +504,18 @@ class SimpleOpenID $params['openid.mode'] = "check_authentication"; $openid_server = $this->GetOpenIDServer(); - if ($openid_server == false){ + if ($openid_server == false) + { return false; } $response = $this->CURL_Request($openid_server,'POST',$params); $data = $this->splitResponse($response); - if ($data['is_valid'] == "true") { + if ($data['is_valid'] == "true") + { return true; - }else{ + } + else + { return false; } } diff --git a/htdocs/core/triggers/interface_20_all_Logevents.class.php b/htdocs/core/triggers/interface_20_all_Logevents.class.php index 508cfa19541..cffce2e3329 100755 --- a/htdocs/core/triggers/interface_20_all_Logevents.class.php +++ b/htdocs/core/triggers/interface_20_all_Logevents.class.php @@ -39,7 +39,7 @@ class InterfaceLogevents /** * Constructor - * + * * @param DoliDB $db Database handler */ function InterfaceLogevents($db) @@ -55,6 +55,7 @@ class InterfaceLogevents /** * Return name of trigger file + * * @return string Name of trigger file */ function getName() @@ -64,6 +65,7 @@ class InterfaceLogevents /** * Return description of trigger file + * * @return string Description of trigger file */ function getDesc() @@ -73,6 +75,7 @@ class InterfaceLogevents /** * Return version of trigger file + * * @return string Version of trigger file */ function getVersion() @@ -89,6 +92,7 @@ class InterfaceLogevents /** * Function called when a Dolibarrr business event is done. * All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers + * * @param action Code de l'evenement * @param object Objet concerne * @param user Objet user diff --git a/htdocs/core/triggers/interface_20_modPaypal_PaypalWorkflow.class.php b/htdocs/core/triggers/interface_20_modPaypal_PaypalWorkflow.class.php index 219087a0922..5aac808f549 100755 --- a/htdocs/core/triggers/interface_20_modPaypal_PaypalWorkflow.class.php +++ b/htdocs/core/triggers/interface_20_modPaypal_PaypalWorkflow.class.php @@ -32,7 +32,7 @@ class InterfacePaypalWorkflow /** * Constructor - * + * * @param DoliDB $db Database handler */ function InterfacePaypalWorkflow($db) @@ -48,8 +48,9 @@ class InterfacePaypalWorkflow /** - * \brief Renvoi nom du lot de triggers - * \return string Nom du lot de triggers + * Renvoi nom du lot de triggers + * + * @return string Nom du lot de triggers */ function getName() { @@ -57,8 +58,9 @@ class InterfacePaypalWorkflow } /** - * \brief Renvoi descriptif du lot de triggers - * \return string Descriptif du lot de triggers + * Renvoi descriptif du lot de triggers + * + * @return string Descriptif du lot de triggers */ function getDesc() { @@ -66,8 +68,9 @@ class InterfacePaypalWorkflow } /** - * \brief Renvoi version du lot de triggers - * \return string Version du lot de triggers + * Renvoi version du lot de triggers + * + * @return string Version du lot de triggers */ function getVersion() { @@ -88,7 +91,7 @@ class InterfacePaypalWorkflow * @param string $action Code de l'evenement * @param CommonObject $object Objet concerne * @param User $user Objet user - * @param Translate $lang Objet lang + * @param Translate $langs Objet lang * @param Conf $conf Objet conf * @return int <0 if fatal error, 0 si nothing done, >0 if ok */ diff --git a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php index 4d9c5a42ac0..4fbaacfca67 100755 --- a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php +++ b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php @@ -34,7 +34,7 @@ class InterfaceWorkflowManager /** * Constructor - * + * * @param DoliDB $db Database handler */ function InterfaceWorkflowManager($db) @@ -51,6 +51,7 @@ class InterfaceWorkflowManager /** * Return name of trigger file + * * @return string Name of trigger file */ function getName() @@ -60,6 +61,7 @@ class InterfaceWorkflowManager /** * Return description of trigger file + * * @return string Description of trigger file */ function getDesc() @@ -69,6 +71,7 @@ class InterfaceWorkflowManager /** * Return version of trigger file + * * @return string Version of trigger file */ function getVersion() diff --git a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php index 77d4755134e..f303d8514f1 100755 --- a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php +++ b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php @@ -40,7 +40,7 @@ class InterfaceActionsAuto /** * Constructor - * + * * @param DoliDB $db Database handler */ function InterfaceActionsAuto($db) @@ -56,6 +56,7 @@ class InterfaceActionsAuto /** * Return name of trigger file + * * @return string Name of trigger file */ function getName() @@ -65,6 +66,7 @@ class InterfaceActionsAuto /** * Return description of trigger file + * * @return string Description of trigger file */ function getDesc() @@ -74,6 +76,7 @@ class InterfaceActionsAuto /** * Return version of trigger file + * * @return string Version of trigger file */ function getVersion() diff --git a/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php b/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php index 89595d96169..dd1d1d316f0 100755 --- a/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php +++ b/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php @@ -35,7 +35,7 @@ class InterfaceLdapsynchro /** * Constructor - * + * * @param DoliDB $db Database handler */ function InterfaceLdapsynchro($db) @@ -51,6 +51,7 @@ class InterfaceLdapsynchro /** * Return name of trigger file + * * @return string Name of trigger file */ function getName() @@ -60,6 +61,7 @@ class InterfaceLdapsynchro /** * Return description of trigger file + * * @return string Description of trigger file */ function getDesc() @@ -69,6 +71,7 @@ class InterfaceLdapsynchro /** * Return version of trigger file + * * @return string Version of trigger file */ function getVersion() @@ -85,6 +88,7 @@ class InterfaceLdapsynchro /** * Function called when a Dolibarrr business event is done. * All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers + * * @param action Event code (COMPANY_CREATE, PROPAL_VALIDATE, ...) * @param object Object action is done on * @param user Object user @@ -117,7 +121,7 @@ class InterfaceLdapsynchro $result=$ldap->add($dn,$info,$user); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -148,7 +152,7 @@ class InterfaceLdapsynchro $result=$ldap->update($dn,$info,$user,$olddn); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -179,7 +183,7 @@ class InterfaceLdapsynchro $result=$ldap->update($dn,$info,$user,$olddn); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -202,7 +206,7 @@ class InterfaceLdapsynchro $result=$ldap->delete($dn,$info,$user); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -226,7 +230,7 @@ class InterfaceLdapsynchro $result=$ldap->add($dn,$info,$user); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -256,7 +260,7 @@ class InterfaceLdapsynchro $result=$ldap->update($dn,$info,$user,$olddn); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -274,7 +278,7 @@ class InterfaceLdapsynchro $result=$ldap->delete($dn,$info,$user); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -295,7 +299,7 @@ class InterfaceLdapsynchro $result=$ldap->add($dn,$info,$user); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -326,7 +330,7 @@ class InterfaceLdapsynchro $result=$ldap->update($dn,$info,$user,$olddn); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -345,7 +349,7 @@ class InterfaceLdapsynchro $result=$ldap->delete($dn,$info,$user); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -366,7 +370,7 @@ class InterfaceLdapsynchro $result=$ldap->add($dn,$info,$user); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -389,7 +393,7 @@ class InterfaceLdapsynchro $result=$ldap->update($dn,$info,$user,$olddn); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -417,7 +421,7 @@ class InterfaceLdapsynchro $result=$ldap->update($dn,$info,$user,$olddn); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -449,7 +453,7 @@ class InterfaceLdapsynchro $result=$ldap->update($dn,$info,$user,$olddn); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -472,7 +476,7 @@ class InterfaceLdapsynchro $result=$ldap->update($dn,$info,$user,$olddn); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -496,7 +500,7 @@ class InterfaceLdapsynchro $result=$ldap->update($dn,$info,$user,$olddn); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } @@ -516,7 +520,7 @@ class InterfaceLdapsynchro $result=$ldap->delete($dn,$info,$user); if ($result < 0) { - $this->error="ErrorLDAP"." ".$ldap->error; + $this->error="ErrorLDAP ".$ldap->error; } return $result; } diff --git a/htdocs/core/triggers/interface_50_modNotification_Notification.class.php b/htdocs/core/triggers/interface_50_modNotification_Notification.class.php index d98c1ec0b93..eeb1b5c34db 100755 --- a/htdocs/core/triggers/interface_50_modNotification_Notification.class.php +++ b/htdocs/core/triggers/interface_50_modNotification_Notification.class.php @@ -35,7 +35,7 @@ class InterfaceNotification /** * Constructor - * + * * @param DoliDB $db Database handler */ function InterfaceNotification($db) @@ -51,6 +51,7 @@ class InterfaceNotification /** * Return name of trigger file + * * @return string Name of trigger file */ function getName() @@ -60,6 +61,7 @@ class InterfaceNotification /** * Return description of trigger file + * * @return string Description of trigger file */ function getDesc() @@ -69,6 +71,7 @@ class InterfaceNotification /** * Return version of trigger file + * * @return string Version of trigger file */ function getVersion() @@ -85,6 +88,7 @@ class InterfaceNotification /** * Function called when a Dolibarrr business event is done. * All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers + * * @param action Event code (COMPANY_CREATE, PROPAL_VALIDATE, ...) * @param object Object action is done on * @param user Object user @@ -202,6 +206,7 @@ class InterfaceNotification /** * Return list of events managed by notification module + * * @return array Array of events managed by notification module */ function getListOfManagedEvents()