44 public $errors = array();
56 public $discount_type;
60 public $multicurrency_amount_ht;
61 public $multicurrency_amount_tva;
62 public $multicurrency_amount_ttc;
87 public $fk_facture_line;
97 public $fk_facture_source;
98 public $ref_facture_source;
99 public $type_facture_source;
101 public $fk_invoice_supplier_source;
102 public $ref_invoice_supplier_source;
103 public $type_invoice_supplier_source;
124 public function fetch($rowid, $fk_facture_source = 0, $fk_invoice_supplier_source = 0)
129 if (!$rowid && !$fk_facture_source && !$fk_invoice_supplier_source)
131 $this->error =
'ErrorBadParameters';
135 $sql =
"SELECT sr.rowid, sr.fk_soc, sr.discount_type,";
136 $sql .=
" sr.fk_user,";
137 $sql .=
" sr.amount_ht, sr.amount_tva, sr.amount_ttc, sr.tva_tx, sr.vat_src_code,";
138 $sql .=
" sr.multicurrency_amount_ht, sr.multicurrency_amount_tva, sr.multicurrency_amount_ttc,";
139 $sql .=
" sr.fk_facture_line, sr.fk_facture, sr.fk_facture_source, sr.fk_invoice_supplier_line, sr.fk_invoice_supplier, sr.fk_invoice_supplier_source, sr.description,";
140 $sql .=
" sr.datec,";
141 $sql .=
" f.ref as ref_facture_source, f.type as type_facture_source,";
142 $sql .=
" fsup.ref as ref_invoice_supplier_source, fsup.type as type_invoice_supplier_source";
143 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as sr";
144 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"facture as f ON sr.fk_facture_source = f.rowid";
145 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"facture as fsup ON sr.fk_invoice_supplier_source = fsup.rowid";
146 $sql .=
" WHERE sr.entity IN (".getEntity(
'invoice').
")";
147 if ($rowid) $sql .=
" AND sr.rowid=".$rowid;
148 if ($fk_facture_source) $sql .=
" AND sr.fk_facture_source=".$fk_facture_source;
149 if ($fk_invoice_supplier_source) $sql .=
" AND sr.fk_invoice_supplier_source=".$fk_invoice_supplier_source;
151 dol_syslog(get_class($this).
"::fetch", LOG_DEBUG);
157 $obj = $this->
db->fetch_object(
$resql);
159 $this->
id = $obj->rowid;
160 $this->fk_soc = $obj->fk_soc;
161 $this->discount_type = $obj->discount_type;
163 $this->amount_ht = $obj->amount_ht;
164 $this->amount_tva = $obj->amount_tva;
165 $this->amount_ttc = $obj->amount_ttc;
167 $this->multicurrency_amount_ht = $this->multicurrency_subprice = $obj->multicurrency_amount_ht;
168 $this->multicurrency_amount_tva = $obj->multicurrency_amount_tva;
169 $this->multicurrency_amount_ttc = $obj->multicurrency_amount_ttc;
171 $this->tva_tx = $obj->tva_tx;
172 $this->vat_src_code = $obj->vat_src_code;
174 $this->fk_user = $obj->fk_user;
175 $this->fk_facture_line = $obj->fk_facture_line;
176 $this->fk_facture = $obj->fk_facture;
177 $this->fk_facture_source = $obj->fk_facture_source;
178 $this->ref_facture_source = $obj->ref_facture_source;
179 $this->type_facture_source = $obj->type_facture_source;
180 $this->fk_invoice_supplier_line = $obj->fk_invoice_supplier_line;
181 $this->fk_invoice_supplier = $obj->fk_invoice_supplier;
182 $this->fk_invoice_supplier_source = $obj->fk_invoice_supplier_source;
183 $this->ref_invoice_supplier_source = $obj->ref_invoice_supplier_source;
184 $this->type_invoice_supplier_source = $obj->type_invoice_supplier_source;
186 $this->datec = $this->
db->jdate($obj->datec);
195 $this->error = $this->
db->error();
209 global $conf, $langs;
212 $this->amount_ht =
price2num($this->amount_ht);
213 $this->amount_tva =
price2num($this->amount_tva);
214 $this->amount_ttc =
price2num($this->amount_ttc);
216 $this->tva_tx =
price2num($this->tva_tx);
218 $this->multicurrency_amount_ht =
price2num($this->multicurrency_amount_ht);
219 $this->multicurrency_amount_tva =
price2num($this->multicurrency_amount_tva);
220 $this->multicurrency_amount_ttc =
price2num($this->multicurrency_amount_ttc);
222 if (empty($this->multicurrency_amount_ht)) $this->multicurrency_amount_ht = 0;
223 if (empty($this->multicurrency_amount_tva)) $this->multicurrency_amount_tva = 0;
224 if (empty($this->multicurrency_amount_ttc)) $this->multicurrency_amount_ttc = 0;
225 if (empty($this->tva_tx)) $this->tva_tx = 0;
230 $this->error =
'BadValueForPropertyDescription';
231 dol_syslog(get_class($this).
"::create ".$this->error, LOG_ERR);
238 include_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
240 $tmpinvoice->fetch($this->fk_facture_source);
241 $userid = $tmpinvoice->fk_user_author;
245 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_remise_except";
246 $sql .=
" (entity, datec, fk_soc, discount_type, fk_user, description,";
247 $sql .=
" amount_ht, amount_tva, amount_ttc, tva_tx, vat_src_code,";
248 $sql .=
" multicurrency_amount_ht, multicurrency_amount_tva, multicurrency_amount_ttc,";
249 $sql .=
" fk_facture_source, fk_invoice_supplier_source";
251 $sql .=
" VALUES (".$conf->entity.
", '".$this->
db->idate($this->datec !=
'' ? $this->datec :
dol_now()).
"', ".$this->fk_soc.
", ".(empty($this->discount_type) ? 0 : intval($this->discount_type)).
", ".$userid.
", '".$this->db->escape($this->description).
"',";
252 $sql .=
" ".$this->amount_ht.
", ".$this->amount_tva.
", ".$this->amount_ttc.
", ".$this->tva_tx.
", '".$this->
db->escape($this->vat_src_code).
"',";
253 $sql .=
" ".$this->multicurrency_amount_ht.
", ".$this->multicurrency_amount_tva.
", ".$this->multicurrency_amount_ttc.
", ";
254 $sql .=
" ".($this->fk_facture_source ?
"'".$this->db->escape($this->fk_facture_source).
"'" :
"null").
",";
255 $sql .=
" ".($this->fk_invoice_supplier_source ?
"'".$this->db->escape($this->fk_invoice_supplier_source).
"'" :
"null");
258 dol_syslog(get_class($this).
"::create", LOG_DEBUG);
262 $this->
id = $this->
db->last_insert_id(MAIN_DB_PREFIX.
"societe_remise_except");
265 $this->error = $this->
db->lasterror().
' - sql='.$sql;
277 public function delete($user)
279 global $conf, $langs;
282 if ($this->fk_facture_source)
284 $sql =
"SELECT COUNT(rowid) as nb";
285 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except";
286 $sql .=
" WHERE (fk_facture_line IS NOT NULL";
287 $sql .=
" OR fk_facture IS NOT NULL)";
288 $sql .=
" AND fk_facture_source = ".$this->fk_facture_source;
291 dol_syslog(get_class($this).
"::delete Check if we can remove discount", LOG_DEBUG);
295 $obj = $this->
db->fetch_object(
$resql);
298 $this->error =
'ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved';
308 if ($this->fk_invoice_supplier_source)
310 $sql =
"SELECT COUNT(rowid) as nb";
311 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except";
312 $sql .=
" WHERE (fk_invoice_supplier_line IS NOT NULL";
313 $sql .=
" OR fk_invoice_supplier IS NOT NULL)";
314 $sql .=
" AND fk_invoice_supplier_source = ".$this->fk_invoice_supplier_source;
317 dol_syslog(get_class($this).
"::delete Check if we can remove discount", LOG_DEBUG);
321 $obj = $this->
db->fetch_object(
$resql);
324 $this->error =
'ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved';
336 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_remise_except ";
337 if ($this->fk_facture_source) $sql .=
" WHERE fk_facture_source = ".$this->fk_facture_source;
338 elseif ($this->fk_invoice_supplier_source) $sql .=
" WHERE fk_invoice_supplier_source = ".$this->fk_invoice_supplier_source;
339 else $sql .=
" WHERE rowid = ".$this->id;
340 $sql .=
" AND (fk_facture_line IS NULL";
341 $sql .=
" AND fk_facture IS NULL)";
342 $sql .=
" AND (fk_invoice_supplier_line IS NULL";
343 $sql .=
" AND fk_invoice_supplier IS NULL)";
345 dol_syslog(get_class($this).
"::delete Delete discount", LOG_DEBUG);
346 $result = $this->
db->query($sql);
350 if ($this->fk_facture_source)
352 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"facture";
353 $sql .=
" set paye=0, fk_statut=1";
354 $sql .=
" WHERE (type = 2 or type = 3) AND rowid=".$this->fk_facture_source;
356 dol_syslog(get_class($this).
"::delete Update credit note or deposit invoice statut", LOG_DEBUG);
357 $result = $this->
db->query($sql);
363 $this->error = $this->
db->lasterror();
364 $this->
db->rollback();
367 } elseif ($this->fk_invoice_supplier_source) {
368 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"facture_fourn";
369 $sql .=
" set paye=0, fk_statut=1";
370 $sql .=
" WHERE (type = 2 or type = 3) AND rowid=".$this->fk_invoice_supplier_source;
372 dol_syslog(get_class($this).
"::delete Update credit note or deposit invoice statut", LOG_DEBUG);
373 $result = $this->
db->query($sql);
379 $this->error = $this->
db->lasterror();
380 $this->
db->rollback();
388 $this->error = $this->
db->lasterror();
389 $this->
db->rollback();
410 if (!$rowidline && !$rowidinvoice)
412 $this->error =
'ErrorBadParameters';
415 if ($rowidline && $rowidinvoice)
417 $this->error =
'ErrorBadParameters';
421 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise_except";
422 if (!empty($this->discount_type)) {
423 if ($rowidline) $sql .=
" SET fk_invoice_supplier_line = ".$rowidline;
424 if ($rowidinvoice) $sql .=
" SET fk_invoice_supplier = ".$rowidinvoice;
426 if ($rowidline) $sql .=
" SET fk_facture_line = ".$rowidline;
427 if ($rowidinvoice) $sql .=
" SET fk_facture = ".$rowidinvoice;
429 $sql .=
" WHERE rowid = ".$this->id;
431 dol_syslog(get_class($this).
"::link_to_invoice", LOG_DEBUG);
435 if (!empty($this->discount_type)) {
436 $this->fk_invoice_supplier_line = $rowidline;
437 $this->fk_invoice_supplier = $rowidinvoice;
439 $this->fk_facture_line = $rowidline;
440 $this->fk_facture = $rowidinvoice;
444 $this->error = $this->
db->error();
460 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise_except";
461 if (!empty($this->discount_type)) {
462 $sql .=
" SET fk_invoice_supplier_line = NULL, fk_invoice_supplier = NULL";
464 $sql .=
" SET fk_facture_line = NULL, fk_facture = NULL";
466 $sql .=
" WHERE rowid = ".$this->id;
468 dol_syslog(get_class($this).
"::unlink_invoice", LOG_DEBUG);
474 $this->error = $this->
db->error();
491 public function getAvailableDiscounts($company =
'', $user =
'', $filter =
'', $maxvalue = 0, $discount_type = 0, $multicurrency = 0)
495 dol_syslog(get_class($this).
"::getAvailableDiscounts discount_type=".$discount_type, LOG_DEBUG);
497 $sql =
"SELECT SUM(rc.amount_ttc) as amount, SUM(rc.multicurrency_amount_ttc) as multicurrency_amount";
498 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as rc";
499 $sql .=
" WHERE rc.entity = ".$conf->entity;
500 $sql .=
" AND rc.discount_type=".intval($discount_type);
501 if (!empty($discount_type)) {
502 $sql .=
" AND (rc.fk_invoice_supplier IS NULL AND rc.fk_invoice_supplier_line IS NULL)";
504 $sql .=
" AND (rc.fk_facture IS NULL AND rc.fk_facture_line IS NULL)";
506 if (is_object($company)) $sql .=
" AND rc.fk_soc = ".$company->id;
507 if (is_object($user)) $sql .=
" AND rc.fk_user = ".$user->id;
508 if ($filter) $sql .=
' AND ('.$filter.
')';
509 if ($maxvalue) $sql .=
' AND rc.amount_ttc <= '.price2num($maxvalue);
514 $obj = $this->
db->fetch_object(
$resql);
522 return $obj->amount_multicurrency;
541 dol_syslog(get_class($this).
"::getSumDepositsUsed", LOG_DEBUG);
543 if ($invoice->element ==
'facture' || $invoice->element ==
'invoice')
545 $sql =
'SELECT sum(rc.amount_ttc) as amount, sum(rc.multicurrency_amount_ttc) as multicurrency_amount';
546 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe_remise_except as rc, '.MAIN_DB_PREFIX.
'facture as f';
547 $sql .=
' WHERE rc.fk_facture_source=f.rowid AND rc.fk_facture = '.$invoice->id;
548 $sql .=
' AND f.type = 3';
549 } elseif ($invoice->element ==
'invoice_supplier')
551 $sql =
'SELECT sum(rc.amount_ttc) as amount, sum(rc.multicurrency_amount_ttc) as multicurrency_amount';
552 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe_remise_except as rc, '.MAIN_DB_PREFIX.
'facture_fourn as f';
553 $sql .=
' WHERE rc.fk_invoice_supplier_source=f.rowid AND rc.fk_invoice_supplier = '.$invoice->id;
554 $sql .=
' AND f.type = 3';
556 $this->error = get_class($this).
"::getSumDepositsUsed was called with a bad object as a first parameter";
564 $obj = $this->
db->fetch_object(
$resql);
565 if ($multicurrency == 1)
return $obj->multicurrency_amount;
566 else return $obj->amount;
568 $this->error = $this->
db->lasterror();
582 dol_syslog(get_class($this).
"::getSumCreditNotesUsed", LOG_DEBUG);
584 if ($invoice->element ==
'facture' || $invoice->element ==
'invoice')
586 $sql =
'SELECT sum(rc.amount_ttc) as amount, sum(rc.multicurrency_amount_ttc) as multicurrency_amount';
587 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe_remise_except as rc, '.MAIN_DB_PREFIX.
'facture as f';
588 $sql .=
' WHERE rc.fk_facture_source=f.rowid AND rc.fk_facture = '.$invoice->id;
589 $sql .=
' AND f.type IN ('.$invoice::TYPE_STANDARD.
', '.$invoice::TYPE_CREDIT_NOTE.
', '.$invoice::TYPE_SITUATION.
')';
590 } elseif ($invoice->element ==
'invoice_supplier')
592 $sql =
'SELECT sum(rc.amount_ttc) as amount, sum(rc.multicurrency_amount_ttc) as multicurrency_amount';
593 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe_remise_except as rc, '.MAIN_DB_PREFIX.
'facture_fourn as f';
594 $sql .=
' WHERE rc.fk_invoice_supplier_source=f.rowid AND rc.fk_invoice_supplier = '.$invoice->id;
595 $sql .=
' AND f.type IN ('.$invoice::TYPE_STANDARD.
', '.$invoice::TYPE_CREDIT_NOTE.
')';
597 $this->error = get_class($this).
"::getSumCreditNotesUsed was called with a bad object as a first parameter";
605 $obj = $this->
db->fetch_object(
$resql);
606 if ($multicurrency == 1)
return $obj->multicurrency_amount;
607 else return $obj->amount;
609 $this->error = $this->
db->lasterror();
622 dol_syslog(get_class($this).
"::getSumCreditNotesUsed", LOG_DEBUG);
624 if ($invoice->element ==
'facture' || $invoice->element ==
'invoice')
626 $sql =
'SELECT sum(rc.amount_ttc) as amount, sum(rc.multicurrency_amount_ttc) as multicurrency_amount';
627 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe_remise_except as rc';
628 $sql .=
' WHERE rc.fk_facture IS NULL AND rc.fk_facture_source = '.$invoice->id;
629 } elseif ($invoice->element ==
'invoice_supplier')
631 $sql =
'SELECT sum(rc.amount_ttc) as amount, sum(rc.multicurrency_amount_ttc) as multicurrency_amount';
632 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe_remise_except as rc';
633 $sql .=
' WHERE rc.fk_invoice_supplier IS NULL AND rc.fk_invoice_supplier_source = '.$invoice->id;
635 $this->error = get_class($this).
"::getSumCreditNotesUsed was called with a bad object as a first parameter";
643 $obj = $this->
db->fetch_object(
$resql);
644 if ($multicurrency)
return $obj->multicurrency_amount;
645 else return $obj->amount;
647 $this->error = $this->
db->lasterror();
659 public function getNomUrl($withpicto, $option =
'invoice')
670 if ($option ==
'invoice') {
671 $facid = !empty($this->discount_type) ? $this->fk_invoice_supplier_source : $this->fk_facture_source;
672 $link = !empty($this->discount_type) ?
'/fourn/facture/card.php' :
'/compta/facture/card.php';
673 $label = $langs->trans(
"ShowSourceInvoice").
': '.$this->ref_facture_source;
674 $link =
'<a href="'.DOL_URL_ROOT.$link.
'?facid='.$facid.
'" title="'.
dol_escape_htmltag($label, 1).
'" class="classfortooltip">';
676 $ref = !empty($this->discount_type) ? $this->ref_invoice_supplier_source : $this->ref_facture_source;
679 if ($option ==
'discount') {
680 $label = $langs->trans(
"Discount");
681 $link =
'<a href="'.DOL_URL_ROOT.
'/comm/remx.php?id='.$this->fk_soc.
'" title="'.
dol_escape_htmltag($label, 1).
'" class="classfortooltip">';
683 $ref = $langs->trans(
"Discount");
688 if ($withpicto) $result .= ($link.img_object($label, $picto,
'class="classfortooltip"').$linkend);
689 if ($withpicto && $withpicto != 2) $result .=
' ';
690 $result .= $link.$ref.$linkend;
704 global $user, $langs, $conf;
707 $this->amount_ht = 10;
708 $this->amount_tva = 1.96;
709 $this->amount_ttc = 11.96;
710 $this->tva_tx = 19.6;
getSumCreditNotesUsed($invoice, $multicurrency=0)
Return amount (with tax) of all credit notes invoices + excess received used by invoice as a payment...
getSumDepositsUsed($invoice, $multicurrency=0)
Return amount (with tax) of all deposits invoices used by invoice as a payment.
</td > param sortfield sortorder printFieldListOption< tdclass="liste_titremaxwidthsearchright"></td ></tr >< trclass="liste_titre">< inputtype="checkbox"onClick="toggle(this)"/> Ref p ref Label p label Duration p duration center DesiredStock p desiredstock right StockLimitShort p seuil_stock_alerte right stock_physique right stock_real_warehouse right Ordered right StockToBuy right SupplierRef right param sortfield sortorder printFieldListTitle warehouseinternal SELECT description FROM product_lang WHERE qty< br > qty qty qty StockTooLow StockTooLow help help help< trclass="oddeven">< td >< inputtype="checkbox"class="check"name="choose'.$i.'"></td >< tdclass="nowrap"> stock</td >< td >< inputtype="hidden"name="desc'.$i.'"value="'.dol_escape_htmltag($objp-> description
Only used if Module[ID]Desc translation string is not found.
initAsSpecimen()
Initialise an instance with random values.
dol_now($mode= 'auto')
Return date for now.
fetch($rowid, $fk_facture_source=0, $fk_invoice_supplier_source=0)
Load object from database into memory.
$conf db
API class for accounts.
getAvailableDiscounts($company= '', $user= '', $filter= '', $maxvalue=0, $discount_type=0, $multicurrency=0)
Return amount (with tax) of discounts currently available for a company, user or other criteria...
getNomUrl($withpicto, $option= 'invoice')
Return clickable ref of object (with picto or not)
price2num($amount, $rounding= '', $option=0)
Function that return a number with universal decimal format (decimal separator is '...
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename= '', $restricttologhandler= '', $logcontext=null)
Write log message into outputs.
create($user)
Create a discount into database.
getSumFromThisCreditNotesNotUsed($invoice, $multicurrency=0)
Return amount (with tax) of all converted amount for this credit note.
link_to_invoice($rowidline, $rowidinvoice)
Link the discount to a particular invoice line or a particular invoice.
if(!empty($conf->facture->enabled)&&$user->rights->facture->lire) if((!empty($conf->fournisseur->enabled)&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)||!empty($conf->supplier_invoice->enabled))&&$user->rights->fournisseur->facture->lire) if(!empty($conf->don->enabled)&&$user->rights->don->lire) if(!empty($conf->tax->enabled)&&$user->rights->tax->charges->lire) if(!empty($conf->facture->enabled)&&!empty($conf->commande->enabled)&&$user->rights->commande->lire &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) if(!empty($conf->facture->enabled)&&$user->rights->facture->lire) if((!empty($conf->fournisseur->enabled)&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)||!empty($conf->supplier_invoice->enabled))&&$user->rights->fournisseur->facture->lire) $resql
Social contributions to pay.
dol_print_error($db= '', $error= '', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
Class to manage absolute discounts.
Class to manage invoices.
__construct($db)
Constructor.
unlink_invoice()
Link the discount to a particular invoice line or a particular invoice.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $keepmoretags= '', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields...