Ejemplo n.º 1
0
 /**
  *  Mets a jour une ligne de contrat
  *
  *  @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  int			$date_start       	Date de debut prevue
  *  @param  int			$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  int|string	$date_debut_reel  	Date de debut reelle
  *  @param  int|string	$date_fin_reel    	Date de fin reelle
  *	@param	string		$price_base_type	HT or TTC
  * 	@param  int			$info_bits			Bits de type de lignes
  * 	@param  int			$fk_fournprice		Fourn price id
  *  @param  int			$pa_ht				Buying price HT
  *  @param	array		$array_options		extrafields array
  * 	@param 	string		$fk_unit 			Code of the unit to use. Null to use the default one
  *  @return int              				< 0 si erreur, > 0 si ok
  */
 function updateline($rowid, $desc, $pu, $qty, $remise_percent, $date_start, $date_end, $tvatx, $localtax1tx = 0.0, $localtax2tx = 0.0, $date_debut_reel = '', $date_fin_reel = '', $price_base_type = 'HT', $info_bits = 0, $fk_fournprice = null, $pa_ht = 0, $array_options = 0, $fk_unit = null)
 {
     global $user, $conf, $langs, $mysoc;
     // Nettoyage parametres
     $qty = trim($qty);
     $desc = trim($desc);
     $desc = trim($desc);
     $price = price2num($pu);
     $tvatx = price2num($tvatx);
     $localtax1tx = price2num($localtax1tx);
     $localtax2tx = price2num($localtax2tx);
     $pa_ht = price2num($pa_ht);
     $subprice = $price;
     $remise = 0;
     if (dol_strlen($remise_percent) > 0) {
         $remise = round($pu * $remise_percent / 100, 2);
         $price = $pu - $remise;
     } else {
         $remise_percent = 0;
     }
     dol_syslog(get_class($this) . "::updateline {$rowid}, {$desc}, {$pu}, {$qty}, {$remise_percent}, {$date_start}, {$date_end}, {$date_debut_reel}, {$date_fin_reel}, {$tvatx}, {$localtax1tx}, {$localtax2tx}, {$price_base_type}, {$info_bits}");
     $this->db->begin();
     // Calcul du total TTC et de la TVA pour la ligne a partir de
     // qty, pu, remise_percent et tvatx
     // 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.
     $localtaxes_type = getLocalTaxesFromRate($tvatx, 0, $this->societe, $mysoc);
     $txtva = preg_replace('/\\s*\\(.*\\)/', '', $txtva);
     // Remove code into vatrate.
     $tabprice = calcul_price_total($qty, $pu, $remise_percent, $tvatx, $localtax1tx, $localtax2tx, 0, $price_base_type, $info_bits, 1, $mysoc, $localtaxes_type);
     $total_ht = $tabprice[0];
     $total_tva = $tabprice[1];
     $total_ttc = $tabprice[2];
     $total_localtax1 = $tabprice[9];
     $total_localtax2 = $tabprice[10];
     $localtax1_type = $localtaxes_type[0];
     $localtax2_type = $localtaxes_type[2];
     // TODO A virer
     // Anciens indicateurs: $price, $remise (a ne plus utiliser)
     $remise = 0;
     $price = price2num(round($pu, 2));
     if (dol_strlen($remise_percent) > 0) {
         $remise = round($pu * $remise_percent / 100, 2);
         $price = $pu - $remise;
     }
     if (empty($pa_ht)) {
         $pa_ht = 0;
     }
     // if buy price not defined, define buyprice as configured in margin admin
     if ($this->pa_ht == 0) {
         if (($result = $this->defineBuyPrice($pu_ht, $remise_percent)) < 0) {
             return $result;
         } else {
             $pa_ht = $result;
         }
     }
     $sql = "UPDATE " . MAIN_DB_PREFIX . "contratdet set description='" . $this->db->escape($desc) . "'";
     $sql .= ",price_ht='" . price2num($price) . "'";
     $sql .= ",subprice='" . price2num($subprice) . "'";
     $sql .= ",remise='" . price2num($remise) . "'";
     $sql .= ",remise_percent='" . price2num($remise_percent) . "'";
     $sql .= ",qty='" . $qty . "'";
     $sql .= ",tva_tx='" . price2num($tvatx) . "'";
     $sql .= ",localtax1_tx='" . price2num($localtax1tx) . "'";
     $sql .= ",localtax2_tx='" . price2num($localtax2tx) . "'";
     $sql .= ",localtax1_type='" . $localtax1_type . "'";
     $sql .= ",localtax2_type='" . $localtax2_type . "'";
     $sql .= ", total_ht='" . price2num($total_ht) . "'";
     $sql .= ", total_tva='" . price2num($total_tva) . "'";
     $sql .= ", total_localtax1='" . price2num($total_localtax1) . "'";
     $sql .= ", total_localtax2='" . price2num($total_localtax2) . "'";
     $sql .= ", total_ttc='" . price2num($total_ttc) . "'";
     $sql .= ", fk_product_fournisseur_price='" . $fk_fournprice . "'";
     $sql .= ", buy_price_ht='" . price2num($pa_ht) . "'";
     if ($date_start > 0) {
         $sql .= ",date_ouverture_prevue='" . $this->db->idate($date_start) . "'";
     } else {
         $sql .= ",date_ouverture_prevue=null";
     }
     if ($date_end > 0) {
         $sql .= ",date_fin_validite='" . $this->db->idate($date_end) . "'";
     } else {
         $sql .= ",date_fin_validite=null";
     }
     if ($date_debut_reel > 0) {
         $sql .= ",date_ouverture='" . $this->db->idate($date_debut_reel) . "'";
     } else {
         $sql .= ",date_ouverture=null";
     }
     if ($date_fin_reel > 0) {
         $sql .= ",date_cloture='" . $this->db->idate($date_fin_reel) . "'";
     } else {
         $sql .= ",date_cloture=null";
     }
     $sql .= ", fk_unit=" . ($fk_unit ? "'" . $this->db->escape($fk_unit) . "'" : "null");
     $sql .= " WHERE rowid = " . $rowid;
     dol_syslog(get_class($this) . "::updateline", LOG_DEBUG);
     $result = $this->db->query($sql);
     if ($result) {
         $result = $this->update_statut($user);
         if ($result >= 0) {
             if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($array_options) && count($array_options) > 0) {
                 $contractline = new ContratLigne($this->db);
                 $contractline->array_options = $array_option;
                 $contractline->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $contractline->table_element);
                 $result = $contractline->insertExtraFields();
                 if ($result < 0) {
                     $this->error[] = $contractline->error;
                     $error++;
                 }
             }
             if (empty($error)) {
                 // Call trigger
                 $result = $this->call_trigger('LINECONTRACT_UPDATE', $user);
                 if ($result < 0) {
                     $this->db->rollback();
                     return -3;
                 }
                 // End call triggers
                 $this->db->commit();
                 return 1;
             }
         } else {
             $this->db->rollback();
             dol_syslog(get_class($this) . "::updateligne Erreur -2");
             return -2;
         }
     } else {
         $this->db->rollback();
         $this->error = $this->db->error();
         dol_syslog(get_class($this) . "::updateligne Erreur -1");
         return -1;
     }
 }