33require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
34require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
35require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
36require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture-rec.ligne.class.php';
37require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
49 public $TRIGGER_PREFIX =
'SUPPLIERBILLREC';
54 public $element =
'invoice_supplier_rec';
59 public $table_element =
'facture_fourn_rec';
64 public $table_element_line =
'facture_fourn_det_rec';
69 public $fk_element =
'fk_facture_fourn';
74 public $picto =
'supplier_invoice';
135 public $vat_src_code;
161 public $mode_reglement_id;
165 public $mode_reglement_code;
169 public $cond_reglement_code;
173 public $cond_reglement_doc;
177 public $cond_reglement_id;
182 public $date_lim_reglement;
187 public $usenewprice = 0;
195 public $unit_frequency;
203 public $date_last_gen;
218 public $auto_validate;
222 public $generate_pdf;
228 public $lines = array();
270 public $fields = array(
271 'rowid' => array(
'type' =>
'integer',
'label' =>
'TechnicalID',
'enabled' => 1,
'visible' => -1,
'notnull' => 1,
'position' => 10),
272 'titre' => array(
'type' =>
'varchar(100)',
'label' =>
'Titre',
'enabled' => 1,
'showoncombobox' => 1,
'visible' => -1,
'position' => 15),
273 'ref_supplier' => array(
'type' =>
'varchar(180)',
'label' =>
'RefSupplier',
'enabled' => 1,
'showoncombobox' => 1,
'visible' => -1,
'position' => 20),
274 'entity' => array(
'type' =>
'integer',
'label' =>
'Entity',
'default' =>
'1',
'enabled' => 1,
'visible' => -2,
'notnull' => 1,
'position' => 25,
'index' => 1),
275 'fk_soc' => array(
'type' =>
'integer:Societe:societe/class/societe.class.php',
'label' =>
'ThirdParty',
'enabled' =>
'isModEnabled("societe")',
'visible' => -1,
'notnull' => 1,
'position' => 30),
276 'datec' => array(
'type' =>
'datetime',
'label' =>
'DateCreation',
'enabled' => 1,
'visible' => -1,
'position' => 35),
277 'tms' => array(
'type' =>
'timestamp',
'label' =>
'DateModification',
'enabled' => 1,
'visible' => -1,
'notnull' => 1,
'position' => 40),
278 'suspended' => array(
'type' =>
'integer',
'label' =>
'Suspended',
'enabled' => 1,
'visible' => -1,
'position' => 225),
279 'libelle' => array(
'type' =>
'varchar(100)',
'label' =>
'Libelle',
'enabled' => 1,
'showoncombobox' => 0,
'visible' => -1,
'position' => 15),
281 'localtax1' => array(
'type' =>
'double(24,8)',
'label' =>
'Localtax1',
'enabled' => 1,
'visible' => -1,
'position' => 60,
'isameasure' => 1),
282 'localtax2' => array(
'type' =>
'double(24,8)',
'label' =>
'Localtax2',
'enabled' => 1,
'visible' => -1,
'position' => 65,
'isameasure' => 1),
283 'total_ht' => array(
'type' =>
'double(24,8)',
'label' =>
'Total',
'enabled' => 1,
'visible' => -1,
'position' => 70,
'isameasure' => 1),
284 'total_tva' => array(
'type' =>
'double(24,8)',
'label' =>
'Tva',
'enabled' => 1,
'visible' => -1,
'position' => 55,
'isameasure' => 1),
285 'total_ttc' => array(
'type' =>
'double(24,8)',
'label' =>
'Total ttc',
'enabled' => 1,
'visible' => -1,
'position' => 75,
'isameasure' => 1),
287 'fk_user_author' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserAuthor',
'enabled' => 1,
'visible' => -1,
'position' => 80),
288 'fk_user_modif' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserModif',
'enabled' => 1,
'visible' => -2,
'notnull' => -1,
'position' => 210),
289 'fk_projet' => array(
'type' =>
'integer:Project:projet/class/project.class.php:1:fk_statut=1',
'label' =>
'Fk projet',
'enabled' =>
"isModEnabled('project')",
'visible' => -1,
'position' => 85),
290 'fk_account' => array(
'type' =>
'integer',
'label' =>
'Fk account',
'enabled' =>
'isModEnabled("bank")',
'visible' => -1,
'position' => 175),
291 'fk_cond_reglement' => array(
'type' =>
'integer',
'label' =>
'Fk cond reglement',
'enabled' => 1,
'visible' => -1,
'position' => 90),
292 'fk_mode_reglement' => array(
'type' =>
'integer',
'label' =>
'Fk mode reglement',
'enabled' => 1,
'visible' => -1,
'position' => 95),
293 'date_lim_reglement' => array(
'type' =>
'date',
'label' =>
'Date lim reglement',
'enabled' => 1,
'visible' => -1,
'position' => 100),
295 'note_private' => array(
'type' =>
'html',
'label' =>
'NotePublic',
'enabled' => 1,
'visible' => 0,
'position' => 105),
296 'note_public' => array(
'type' =>
'html',
'label' =>
'NotePrivate',
'enabled' => 1,
'visible' => 0,
'position' => 110),
297 'modelpdf' => array(
'type' =>
'varchar(255)',
'label' =>
'Modelpdf',
'enabled' => 1,
'visible' => -1,
'position' => 115),
299 'fk_multicurrency' => array(
'type' =>
'integer',
'label' =>
'Fk multicurrency',
'enabled' => 1,
'visible' => -1,
'position' => 180),
300 'multicurrency_code' => array(
'type' =>
'varchar(255)',
'label' =>
'Multicurrency code',
'enabled' => 1,
'visible' => -1,
'position' => 185),
301 'multicurrency_tx' => array(
'type' =>
'double(24,8)',
'label' =>
'Multicurrency tx',
'enabled' => 1,
'visible' => -1,
'position' => 190,
'isameasure' => 1),
302 'multicurrency_total_ht' => array(
'type' =>
'double(24,8)',
'label' =>
'Multicurrency total ht',
'enabled' => 1,
'visible' => -1,
'position' => 195,
'isameasure' => 1),
303 'multicurrency_total_tva' => array(
'type' =>
'double(24,8)',
'label' =>
'Multicurrency total tva',
'enabled' => 1,
'visible' => -1,
'position' => 200,
'isameasure' => 1),
304 'multicurrency_total_ttc' => array(
'type' =>
'double(24,8)',
'label' =>
'Multicurrency total ttc',
'enabled' => 1,
'visible' => -1,
'position' => 205,
'isameasure' => 1),
306 'usenewprice' => array(
'type' =>
'integer',
'label' =>
'UseNewPrice',
'enabled' => 1,
'visible' => 0,
'position' => 155),
307 'frequency' => array(
'type' =>
'integer',
'label' =>
'Frequency',
'enabled' => 1,
'visible' => -1,
'position' => 150),
308 'unit_frequency' => array(
'type' =>
'varchar(2)',
'label' =>
'Unit frequency',
'enabled' => 1,
'visible' => -1,
'position' => 125),
310 'date_when' => array(
'type' =>
'datetime',
'label' =>
'Date when',
'enabled' => 1,
'visible' => -1,
'position' => 130),
311 'date_last_gen' => array(
'type' =>
'datetime',
'label' =>
'Date last gen',
'enabled' => 1,
'visible' => -1,
'position' => 135),
312 'nb_gen_done' => array(
'type' =>
'integer',
'label' =>
'Nb gen done',
'enabled' => 1,
'visible' => -1,
'position' => 140),
313 'nb_gen_max' => array(
'type' =>
'integer',
'label' =>
'Nb gen max',
'enabled' => 1,
'visible' => -1,
'position' => 145),
314 'revenuestamp' => array(
'type' =>
'double(24,8)',
'label' =>
'RevenueStamp',
'enabled' => 1,
'visible' => -1,
'position' => 160,
'isameasure' => 1),
315 'auto_validate' => array(
'type' =>
'integer',
'label' =>
'Auto validate',
'enabled' => 1,
'visible' => -1,
'position' => 165),
316 'generate_pdf' => array(
'type' =>
'integer',
'label' =>
'Generate pdf',
'enabled' => 1,
'visible' => -1,
'position' => 170),
320 const STATUS_NOTSUSPENDED = 0;
321 const STATUS_SUSPENDED = 1;
344 public function create($user, $facFournId, $notrigger = 0, $onlylines = array())
352 $this->titre = empty($this->titre) ?
'' : $this->titre;
353 $this->title = empty($this->title) ?
'' : $this->title;
355 $this->
ref = $this->$keyforref;
357 $this->ref_supplier = empty($this->ref_supplier) ?
'' : $this->ref_supplier;
359 $this->usenewprice = empty($this->usenewprice) ? 0 : $this->usenewprice;
360 $this->suspended = empty($this->suspended) ? 0 : $this->suspended;
362 if (empty($this->frequency)) {
363 $this->frequency = 0;
364 $this->date_when =
null;
366 $this->frequency = abs($this->frequency);
367 $this->nb_gen_done = 0;
368 $this->nb_gen_max = empty($this->nb_gen_max) ? 0 : $this->nb_gen_max;
369 $this->auto_validate = empty($this->auto_validate) ? 0 : $this->auto_validate;
370 $this->generate_pdf = empty($this->generate_pdf) ? 0 : $this->generate_pdf;
376 $result = $facfourn_src->fetch($facFournId);
378 $sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'facture_fourn_rec (';
381 $sql .=
', ref_supplier';
385 $sql .=
', suspended';
387 $sql .=
', total_ttc';
388 $sql .=
', fk_user_author';
389 $sql .=
', fk_projet';
390 $sql .=
', fk_account';
391 $sql .=
', fk_cond_reglement';
392 $sql .=
', fk_mode_reglement';
393 $sql .=
', date_lim_reglement';
394 $sql .=
', note_private';
395 $sql .=
', note_public';
396 $sql .=
', modelpdf';
397 $sql .=
', fk_multicurrency';
398 $sql .=
', multicurrency_code';
399 $sql .=
', multicurrency_tx';
400 $sql .=
', usenewprice';
401 $sql .=
', frequency';
402 $sql .=
', unit_frequency';
403 $sql .=
', date_when';
404 $sql .=
', date_last_gen';
405 $sql .=
', nb_gen_done';
406 $sql .=
', nb_gen_max';
407 $sql .=
', auto_validate';
408 $sql .=
', generate_pdf';
409 $sql .=
') VALUES (';
410 $sql .=
"'".$this->db->escape($this->title).
"'";
411 $sql .=
", ".(isset($this->subtype) ? (int) $this->subtype :
"NULL");
412 $sql .=
", '".$this->db->escape($this->ref_supplier).
"'";
413 $sql .=
", ".((int) $conf->entity);
414 $sql .=
", ".((int) $facfourn_src->socid);
415 $sql .=
", '".$this->db->idate($now).
"'";
416 $sql .=
", ".((int) $this->suspended);
417 $sql .=
", '".$this->db->escape($this->libelle).
"'";
418 $sql .=
", " .(!empty($facfourn_src->total_ttc) ? (float) $facfourn_src->total_ttc :
'0');
419 $sql .=
", " .((int) $user->id);
420 $sql .=
", " .(!empty($this->fk_project) ? ((int) $this->fk_project) :
'NULL');
421 $sql .=
", " .(!empty($facfourn_src->fk_account) ? ((int) $facfourn_src->fk_account) :
'NULL');
422 $sql .=
", " .($this->cond_reglement_id > 0 ? (int) $this->cond_reglement_id :
'NULL');
423 $sql .=
", " .($this->mode_reglement_id > 0 ? (int) $this->mode_reglement_id :
'NULL');
424 $sql .=
", ".($facfourn_src->date_echeance > 0 ?
"'".$this->db->idate($facfourn_src->date_echeance).
"'" :
'NULL');
425 $sql .=
", " .(!empty($this->note_private) ?
"'".$this->db->escape($this->note_private).
"'" :
'NULL');
426 $sql .=
", " .(!empty($this->note_public) ?
"'".$this->db->escape($this->note_public).
"'" :
'NULL');
427 $sql .=
", " .(!empty($this->model_pdf) ?
"'".$this->db->escape($this->model_pdf).
"'" :
'NULL');
428 $sql .=
", " . (int) $facfourn_src->fk_multicurrency;
429 $sql .=
", '".$this->db->escape($facfourn_src->multicurrency_code).
"'";
430 $sql .=
", " . (float) $facfourn_src->multicurrency_tx;
431 $sql .=
", " . (int) $this->usenewprice;
432 $sql .=
", " . (int) $this->frequency;
433 $sql .=
", '".$this->db->escape($this->unit_frequency).
"'";
434 $sql .=
", " .(!empty($this->date_when) ?
"'".$this->db->idate($this->date_when).
"'" :
'NULL');
435 $sql .=
", " .(!empty($this->date_last_gen) ?
"'".$this->db->idate($this->date_last_gen).
"'" :
'NULL');
436 $sql .=
", " . (int) $this->nb_gen_done;
437 $sql .=
", " . (int) $this->nb_gen_max;
438 $sql .=
", " . (int) $this->auto_validate;
439 $sql .=
", " . (int) $this->generate_pdf;
442 if ($this->db->query($sql)) {
443 $this->
id = $this->db->last_insert_id(MAIN_DB_PREFIX.
'facture_fourn_rec');
446 $this->fk_multicurrency = $facfourn_src->fk_multicurrency;
448 $this->multicurrency_code = $facfourn_src->multicurrency_code;
449 $this->multicurrency_tx = $facfourn_src->multicurrency_tx;
452 $num = count($facfourn_src->lines);
453 for ($i = 0; $i < $num; $i++) {
454 $facfourn_line = $facfourn_src->lines[$i];
455 '@phan-var-force SupplierInvoiceLine $facfourn_line';
456 if (!empty($onlylines) && !in_array($facfourn_line->id, $onlylines)) {
460 $tva_tx = $facfourn_line->tva_tx;
461 if (!empty($facfourn_line->vat_src_code) && !preg_match(
'/\(/', (
string) $tva_tx)) {
462 $tva_tx .=
' ('.$facfourn_line->vat_src_code.
')';
465 $result_insert = $this->
addline(
466 $facfourn_line->fk_product,
467 $facfourn_line->ref_supplier,
468 $facfourn_line->product_label,
469 $facfourn_line->desc ? $facfourn_line->desc : $facfourn_line->description,
470 $facfourn_line->pu_ht,
471 $facfourn_line->pu_ttc,
473 $facfourn_line->remise_percent,
475 $facfourn_line->localtax1_tx,
476 $facfourn_line->localtax2_tx,
478 $facfourn_line->product_type,
479 $facfourn_line->date_start,
480 $facfourn_line->date_end,
481 $facfourn_line->info_bits,
482 $facfourn_line->special_code,
483 $facfourn_line->rang,
484 $facfourn_line->fk_unit
487 if ($result_insert < 0) {
492 $result2 = $objectline->fetch($result_insert);
495 if (method_exists($facfourn_line,
'fetch_optionals')) {
496 $facfourn_line->fetch_optionals($facfourn_line->id);
497 $objectline->array_options = $facfourn_line->array_options;
500 $result = $objectline->insertExtraFields();
504 } elseif ($result2 < 0) {
505 $this->errors[] = $objectline->error;
511 if (!empty($this->linkedObjectsIds) && empty($this->linked_objects)) {
512 $this->linked_objects = $this->linkedObjectsIds;
516 if (!$error && $this->
id && !empty($this->linked_objects) && is_array($this->linked_objects)) {
517 foreach ($this->linked_objects as $origin => $tmp_origin_id) {
518 if (is_array($tmp_origin_id)) {
519 foreach ($tmp_origin_id as $origin_id) {
522 $this->error = $this->db->lasterror();
527 $origin_id = $tmp_origin_id;
530 $this->error = $this->db->lasterror();
544 if (!$error && !$notrigger) {
546 $result = $this->call_trigger(
'SUPPLIERBILLREC_CREATE', $user);
548 $this->db->rollback();
555 $this->db->rollback();
562 $this->error = $this->db->lasterror();
563 $this->db->rollback();
567 $this->db->rollback();
584 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"facture_fourn_rec SET";
585 $sql .=
" titre = '" . (!empty($this->title) ? $this->db->escape($this->title) :
"").
"'," ;
586 $sql .=
" subtype=".(isset($this->subtype) ? (int) $this->subtype :
"NULL").
",";
587 $sql .=
" ref_supplier = '". (!empty($this->ref_supplier) ? $this->db->escape($this->ref_supplier) :
"").
"',";
588 $sql .=
" entity = ". (!empty($this->entity) ? ((int) $this->entity) : 1) .
',';
589 if (!empty($this->socid) && $this->socid > 0) {
590 $sql .=
" fk_soc = ". ((int) $this->socid).
',';
591 } elseif (!empty($this->fk_soc) && $this->fk_soc > 0) {
592 $sql .=
" fk_soc = ". ((int) $this->fk_soc).
',';
594 $sql .=
" suspended = ". (!empty($this->suspended) ? ((int) $this->suspended) : 0) .
',';
595 $sql .=
" libelle = ". (!empty($this->libelle) ?
"'".$this->db->escape($this->libelle).
"'" :
'NULL') .
",";
596 $sql .=
" vat_src_code = ". (!empty($this->vat_src_code) ?
"'".$this->db->escape($this->vat_src_code).
"'" :
'NULL') .
',';
597 $sql .=
" localtax1 = ". (!empty($this->localtax1) ? ((float) $this->localtax1) : 0.00) .
',';
598 $sql .=
" localtax2 = ". (!empty($this->localtax2) ? ((float) $this->localtax2) : 0.00) .
',';
599 $sql .=
" total_ht = ". (!empty($this->total_ht) ? ((float) $this->total_ht) : 0.00) .
',';
600 $sql .=
" total_tva = ". (!empty($this->total_tva) ? ((float) $this->total_tva) : 0.00) .
',';
601 $sql .=
" total_ttc = ". (!empty($this->total_ttc) ? ((float) $this->total_ttc) : 0.00) .
',';
602 $sql .=
" fk_user_modif = ". ((int) $user->id) .
',';
603 $sql .=
" fk_projet = ". (!empty($this->fk_project) ? ((int) $this->fk_project) :
'NULL') .
',';
604 $sql .=
" fk_account = ". (!empty($this->fk_account) ? ((int) $this->fk_account) :
'NULL') .
',';
605 $sql .=
" fk_mode_reglement = ". (!empty($this->mode_reglement_id) ? ((int) $this->mode_reglement_id) :
'NULL') .
',';
606 $sql .=
" fk_cond_reglement = ". (!empty($this->cond_reglement_id) ? ((int) $this->cond_reglement_id) :
'NULL') .
',';
607 $sql .=
" date_lim_reglement = ". (!empty($this->date_lim_reglement) ?
"'".$this->db->idate($this->date_lim_reglement).
"'" :
'NULL') .
',';
608 $sql .=
" note_private = '". (!empty($this->note_private) ? $this->db->escape($this->note_private) :
'') .
"',";
609 $sql .=
" note_public = '". (!empty($this->note_public) ? $this->db->escape($this->note_public) :
'') .
"',";
610 $sql .=
" modelpdf = ". (!empty($this->model_pdf) ?
"'".$this->db->escape($this->model_pdf).
"'" :
'NULL') .
",";
611 $sql .=
" fk_multicurrency = ". (!empty($this->fk_multicurrency) ? ((int) $this->fk_multicurrency) :
'NULL') .
',';
612 $sql .=
" multicurrency_code = ". (!empty($this->multicurrency_code) ?
"'".$this->db->escape($this->multicurrency_code).
"'" :
'NULL') .
",";
613 $sql .=
" multicurrency_tx = ". (!empty($this->multicurrency_tx) ? ((float) $this->multicurrency_tx) : 1) .
',';
614 $sql .=
" multicurrency_total_ht = ". (!empty($this->multicurrency_total_ht) ? ((float) $this->multicurrency_total_ht) : 0.00) .
',';
615 $sql .=
" multicurrency_total_tva = ". (!empty($this->multicurrency_total_tva) ? ((float) $this->multicurrency_total_tva) : 0.00) .
',';
616 $sql .=
" multicurrency_total_ttc = ". (!empty($this->multicurrency_total_ttc) ? ((float) $this->multicurrency_total_ttc) : 0.00) .
',';
617 $sql .=
" usenewprice = ". (!empty($this->usenewprice) ? ((int) $this->usenewprice) : 0) .
',';
618 $sql .=
" frequency = ". (!empty($this->frequency) ? ((int) $this->frequency) : 0).
',';
619 $sql .=
" unit_frequency = '". (!empty($this->unit_frequency) ? $this->db->escape($this->unit_frequency) :
'').
"',";
620 $sql .=
" date_when = ". (!empty($this->date_when) ?
"'".$this->db->idate($this->date_when).
"'" :
'NULL') .
',';
621 $sql .=
" date_last_gen = ". (!empty($this->date_last_gen) ?
"'".$this->db->idate($this->date_last_gen).
"'" :
'NULL') .
',';
622 $sql .=
" nb_gen_done = ". (!empty($this->nb_gen_done) ? ((int) $this->nb_gen_done) : 0) .
',';
623 $sql .=
" nb_gen_max = ". (!empty($this->nb_gen_max) ? ((int) $this->nb_gen_max) : 0) .
',';
624 $sql .=
" auto_validate = ". (!empty($this->auto_validate) ? ((int) $this->auto_validate) : 0);
625 $sql .=
" WHERE rowid = ". (int) $this->
id;
629 dol_syslog(get_class($this).
"::update", LOG_DEBUG);
630 $resql = $this->db->query($sql);
639 if (!$error && !$notrigger) {
641 $result = $this->call_trigger(
'SUPPLIERBILLREC_MODIFY', $user);
643 $this->db->rollback();
651 $this->error = $this->db->lasterror();
652 $this->db->rollback();
665 public function fetch($rowid, $ref =
'', $ref_ext =
'')
667 $sql =
'SELECT f.rowid, f.titre as title, f.subtype, f.ref_supplier, f.entity, f.fk_soc';
668 $sql .=
', f.datec, f.tms, f.suspended';
669 $sql .=
', f.libelle as label';
670 $sql .=
', f.vat_src_code, f.localtax1, f.localtax2';
671 $sql .=
', f.total_tva, f.total_ht, f.total_ttc';
672 $sql .=
', f.fk_user_author, f.fk_user_modif';
673 $sql .=
', f.fk_projet as fk_project, f.fk_account';
674 $sql .=
', f.fk_mode_reglement, p.code as mode_reglement_code, p.libelle as mode_reglement_libelle';
675 $sql .=
', f.fk_cond_reglement, c.code as cond_reglement_code, c.libelle as cond_reglement_libelle, c.libelle_facture as cond_reglement_libelle_doc';
676 $sql .=
', f.date_lim_reglement';
677 $sql .=
', f.note_private, f.note_public, f.modelpdf as model_pdf';
678 $sql .=
', f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht, f.multicurrency_total_tva, f.multicurrency_total_ttc';
679 $sql .=
', f.usenewprice, f.frequency, f.unit_frequency, f.date_when, f.date_last_gen, f.nb_gen_done, f.nb_gen_max, f.auto_validate';
680 $sql .=
', f.generate_pdf';
681 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec as f';
682 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_payment_term as c ON f.fk_cond_reglement = c.rowid';
683 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as p ON f.fk_mode_reglement = p.id';
684 $sql .=
' WHERE f.entity IN ('.getEntity(
'invoice').
')';
686 $sql .=
' AND f.rowid='. (int) $rowid;
688 $sql .=
" AND f.titre='".$this->db->escape($ref).
"'";
690 $sql .=
' AND f.rowid = 0';
693 $result = $this->db->query($sql);
695 if ($this->db->num_rows($result)) {
696 $obj = $this->db->fetch_object($result);
700 $this->
id = $obj->rowid;
701 $this->titre = $obj->title;
702 $this->title = $obj->title;
703 $this->subtype = $obj->subtype;
704 $this->
ref = $obj->title;
705 $this->ref_supplier = $obj->ref_supplier;
706 $this->entity = $obj->entity;
707 $this->socid = $obj->fk_soc;
708 $this->date_creation = $obj->datec;
709 $this->date_modification = $obj->tms;
710 $this->
status = $obj->suspended;
711 $this->suspended = $obj->suspended;
712 $this->libelle = $obj->label;
713 $this->label = $obj->label;
714 $this->vat_src_code = $obj->vat_src_code;
715 $this->total_localtax1 = $obj->localtax1;
716 $this->total_localtax2 = $obj->localtax2;
717 $this->total_ht = $obj->total_ht;
718 $this->total_tva = $obj->total_tva;
719 $this->total_ttc = $obj->total_ttc;
720 $this->user_creation_id = $obj->fk_user_author;
721 $this->user_modif = $obj->fk_user_modif;
722 $this->fk_project = $obj->fk_project;
723 $this->fk_account = $obj->fk_account;
724 $this->mode_reglement_id = $obj->fk_mode_reglement;
725 $this->mode_reglement_code = $obj->mode_reglement_code;
726 $this->mode_reglement = $obj->mode_reglement_libelle;
727 $this->cond_reglement_id = $obj->fk_cond_reglement;
728 $this->cond_reglement_code = $obj->cond_reglement_code;
729 $this->cond_reglement = $obj->cond_reglement_libelle;
730 $this->cond_reglement_doc = $obj->cond_reglement_libelle_doc;
731 $this->date_lim_reglement = $this->db->jdate($obj->date_lim_reglement);
732 $this->note_private = $obj->note_private;
733 $this->note_public = $obj->note_public;
734 $this->model_pdf = $obj->model_pdf;
737 $this->fk_multicurrency = $obj->fk_multicurrency;
738 $this->multicurrency_code = $obj->multicurrency_code;
739 $this->multicurrency_tx = $obj->multicurrency_tx;
740 $this->multicurrency_total_ht = $obj->multicurrency_total_ht;
741 $this->multicurrency_total_tva = $obj->multicurrency_total_tva;
742 $this->multicurrency_total_ttc = $obj->multicurrency_total_ttc;
744 $this->usenewprice = $obj->usenewprice;
745 $this->frequency = $obj->frequency;
746 $this->unit_frequency = $obj->unit_frequency;
747 $this->date_when = $this->db->jdate($obj->date_when);
748 $this->date_last_gen = $this->db->jdate($obj->date_last_gen);
749 $this->nb_gen_done = $obj->nb_gen_done;
750 $this->nb_gen_max = $obj->nb_gen_max;
751 $this->auto_validate = $obj->auto_validate;
752 $this->generate_pdf = $obj->generate_pdf;
763 $this->error = $this->db->lasterror();
768 $this->error =
'Bill with id '.$rowid.
' or ref '.$ref.
' not found';
769 dol_syslog(
'Facture::Fetch Error '.$this->error, LOG_ERR);
773 $this->error = $this->db->error();
798 $this->lines = array();
809 $sql =
'SELECT l.rowid,';
810 $sql .=
' l.fk_facture_fourn, l.fk_parent_line, l.fk_product, l.ref as ref_supplier, l.label, l.description as line_desc,';
811 $sql .=
' l.pu_ht, l.pu_ttc, l.qty, l.remise_percent, l.fk_remise_except, l.vat_src_code, l.tva_tx,';
812 $sql .=
' l.localtax1_tx, l.localtax2_tx, l.localtax1_type, l.localtax2_type,';
813 $sql .=
' l.total_ht, l.total_tva, l.total_ttc, total_localtax1, total_localtax2,';
814 $sql .=
' l.product_type, l.date_start, l.date_end,';
815 $sql .=
' l.info_bits, l.special_code, l.rang,';
816 $sql .=
' l.fk_unit, l.import_key, l.fk_user_author, l.fk_user_modif, l.extraparams,';
817 $sql .=
' l.fk_multicurrency, l.multicurrency_code, l.multicurrency_subprice, l.multicurrency_total_ht, l.multicurrency_total_tva, l.multicurrency_total_ttc,';
818 $sql .=
' p.ref as product_ref, p.fk_product_type as fk_product_type, p.label as product_label, p.description as product_desc';
819 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_det_rec as l';
820 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'product as p ON l.fk_product = p.rowid';
821 $sql .=
' WHERE l.fk_facture_fourn = '. (int) $this->
id;
822 $sql .=
' ORDER BY l.rang';
824 dol_syslog(
'FactureFournisseurRec::fetch_lines', LOG_DEBUG);
826 $result = $this->db->query($sql);
828 $num = $this->db->num_rows($result);
831 $objp = $this->db->fetch_object($result);
835 $line->id = $objp->rowid;
836 $line->fk_facture_fourn = $objp->fk_facture_fourn;
837 $line->fk_parent = $objp->fk_parent_line;
838 $line->fk_product = $objp->fk_product;
839 $line->ref = $objp->product_ref;
840 $line->product_ref = $objp->product_ref;
841 $line->product_label = $objp->product_label;
842 $line->product_desc = $objp->product_desc;
843 $line->ref_supplier = $objp->ref_supplier;
844 $line->label = $objp->label;
845 $line->description = $objp->line_desc;
846 $line->desc = $objp->line_desc;
847 $line->pu_ht = $objp->pu_ht;
848 $line->subprice = $objp->pu_ht;
849 $line->pu_ttc = $objp->pu_ttc;
850 $line->subprice_ttc = $objp->pu_ttc;
851 $line->qty = $objp->qty;
852 $line->remise_percent = $objp->remise_percent;
853 $line->fk_remise_except = $objp->fk_remise_except;
854 $line->vat_src_code = $objp->vat_src_code;
855 $line->tva_tx = $objp->tva_tx;
856 $line->localtax1_tx = $objp->localtax1_tx;
857 $line->localtax1_type = $objp->localtax1_type;
858 $line->localtax2_tx = $objp->localtax2_tx;
859 $line->localtax2_type = $objp->localtax2_type;
860 $line->total_ht = $objp->total_ht;
861 $line->total_tva = $objp->total_tva;
862 $line->total_localtax1 = $objp->total_localtax1;
863 $line->total_localtax2 = $objp->total_localtax2;
864 $line->total_ttc = $objp->total_ttc;
865 $line->product_type = $objp->product_type;
866 $line->date_start = $this->db->jdate($objp->date_start);
867 $line->date_end = $this->db->jdate($objp->date_end);
868 $line->info_bits = $objp->info_bits ;
869 $line->special_code = $objp->special_code;
870 $line->rang = $objp->rang;
871 $line->fk_unit = $objp->fk_unit;
872 $line->import_key = $objp->import_key;
873 $line->fk_user_author = $objp->fk_user_author;
874 $line->fk_user_modif = $objp->fk_user_modif;
875 $this->extraparams = !empty($objp->extraparams) ? (array) json_decode($objp->extraparams,
true) : array();
876 $line->fk_multicurrency = $objp->fk_multicurrency;
877 $line->multicurrency_code = $objp->multicurrency_code;
878 $line->multicurrency_subprice = $objp->multicurrency_subprice;
879 $line->multicurrency_total_ht = $objp->multicurrency_total_ht;
880 $line->multicurrency_total_tva = $objp->multicurrency_total_tva;
881 $line->multicurrency_total_ttc = $objp->multicurrency_total_ttc;
883 $line->fetch_optionals();
885 $this->lines[$i] = $line;
890 $this->db->free($result);
893 $this->error = $this->db->lasterror();
907 public function delete(
User $user, $notrigger = 0, $idwarehouse = -1)
911 dol_syslog(get_class($this).
"::delete rowid=".((
int) $rowid), LOG_DEBUG);
916 $main = MAIN_DB_PREFIX.
'facture_fourn_det_rec';
917 $ef = $main.
"_extrafields";
919 $sqlef =
"DELETE FROM ".$ef.
" WHERE fk_object IN (SELECT rowid FROM ".$main.
" WHERE fk_facture_fourn = ". (int) $rowid .
")";
920 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"facture_fourn_det_rec WHERE fk_facture_fourn = ". (int) $rowid;
922 if ($this->db->query($sqlef) && $this->db->query($sql)) {
923 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"facture_fourn_rec WHERE rowid = ". (int) $rowid;
925 if ($this->db->query($sql)) {
937 $this->error = $this->db->lasterror();
941 $this->error = $this->db->lasterror();
944 if (!$error && !$notrigger) {
946 $result = $this->call_trigger(
'SUPPLIERBILLREC_DELETE', $user);
956 $this->db->rollback();
987 public function addline($fk_product, $ref, $label, $desc, $pu_ht, $pu_ttc, $qty, $remise_percent, $txtva, $txlocaltax1 = 0, $txlocaltax2 = 0, $price_base_type =
'HT', $type = 0, $date_start = 0, $date_end = 0, $info_bits = 0, $special_code = 0, $rang = -1, $fk_unit =
null, $pu_ht_devise = 0)
991 include_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
995 dol_syslog(get_class($this).
"::addline facid=$facid,desc=$desc,pu_ht=$pu_ht,qty=$qty,txtva=$txtva,txlocaltax1=$txlocaltax1,txlocaltax2=$txlocaltax2,fk_product=$fk_product,remise_percent=$remise_percent,info_bits=$info_bits,price_base_type=$price_base_type,pu_ttc=$pu_ttc,type=$type,fk_unit=$fk_unit,pu_ht_devise=$pu_ht_devise,date_start_fill=$date_start,date_end_fill=$date_end", LOG_DEBUG);
1007 if (preg_match(
'/\((.*)\)/', (
string) $txtva, $reg)) {
1008 $vat_src_code = $reg[1];
1009 $txtva = preg_replace(
'/\s*\(.*\)/',
'', (
string) $txtva);
1013 $fk_product = empty($fk_product) ? 0 : $fk_product;
1014 $label = empty($label) ?
'' : $label;
1015 $remise_percent = empty($remise_percent) ? 0 :
price2num($remise_percent);
1019 if (!preg_match(
'/\((.*)\)/', $txtva)) {
1024 $txtva = !empty($txtva) ? $txtva : 0;
1025 $txlocaltax1 = !empty($txlocaltax1) ? $txlocaltax1 : 0;
1026 $txlocaltax2 = !empty($txlocaltax2) ? $txlocaltax2 : 0;
1027 $info_bits = !empty($info_bits) ? $info_bits : 0;
1028 $info_bits = !empty($info_bits) ? $info_bits : 0;
1029 $pu = $price_base_type ==
'HT' ? $pu_ht : $pu_ttc;
1035 $tabprice =
calcul_price_total((
float) $qty, (
float) $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type,
$mysoc, $localtaxes_type, 100, $this->multicurrency_tx, $pu_ht_devise);
1036 $total_ht = $tabprice[0];
1037 $total_tva = $tabprice[1];
1038 $total_ttc = $tabprice[2];
1039 $total_localtax1 = $tabprice[9];
1040 $total_localtax2 = $tabprice[10];
1041 $pu_ht = $tabprice[3];
1044 $multicurrency_total_ht = $tabprice[16];
1045 $multicurrency_total_tva = $tabprice[17];
1046 $multicurrency_total_ttc = $tabprice[18];
1047 $pu_ht_devise = $tabprice[19];
1050 $product_type = $type;
1052 $product =
new Product($this->db);
1053 $result = $product->fetch($fk_product);
1057 $product_type = $product->type;
1058 if (empty($label)) {
1059 $label = $product->label;
1063 $sql =
'INSERT INTO ' . MAIN_DB_PREFIX .
'facture_fourn_det_rec (';
1064 $sql .=
'fk_facture_fourn';
1065 $sql .=
', fk_product';
1068 $sql .=
', description';
1072 $sql .=
', remise_percent';
1073 $sql .=
', fk_remise_except';
1074 $sql .=
', vat_src_code';
1076 $sql .=
', localtax1_tx';
1077 $sql .=
', localtax1_type';
1078 $sql .=
', localtax2_tx';
1079 $sql .=
', localtax2_type';
1080 $sql .=
', total_ht';
1081 $sql .=
', total_tva';
1082 $sql .=
', total_localtax1';
1083 $sql .=
', total_localtax2';
1084 $sql .=
', total_ttc';
1085 $sql .=
', product_type';
1086 $sql .=
', date_start';
1087 $sql .=
', date_end';
1088 $sql .=
', info_bits';
1089 $sql .=
', special_code';
1091 $sql .=
', fk_unit';
1092 $sql .=
', fk_user_author';
1093 $sql .=
', fk_multicurrency, multicurrency_code, multicurrency_subprice, multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc';
1094 $sql .=
') VALUES (';
1095 $sql .=
' ' . (int) $facid;
1096 $sql .=
', ' . (!empty($fk_product) ? ((int) $fk_product) :
'null');
1097 $sql .=
', ' . (!empty($ref) ?
"'" . $this->db->escape($ref) .
"'" :
'null');
1098 $sql .=
', ' . (!empty($label) ?
"'" . $this->db->escape($label) .
"'" :
'null');
1099 $sql .=
", '" . $this->db->escape($desc) .
"'";
1103 $sql .=
', ' .
price2num($remise_percent);
1105 $sql .=
", '" . $this->db->escape($vat_src_code) .
"'";
1108 $sql .=
", '" . $this->db->escape(isset($localtaxes_type[0]) ? $localtaxes_type[0] :
'') .
"'";
1110 $sql .=
", '" . $this->db->escape(isset($localtaxes_type[2]) ? $localtaxes_type[2] :
'') .
"'";
1113 $sql .=
', ' .
price2num($total_localtax1);
1114 $sql .=
', ' .
price2num($total_localtax2);
1116 $sql .=
', ' . (int) $product_type;
1117 $sql .=
', ' . ($date_start > 0 ? (int) $date_start :
'NULL');
1118 $sql .=
', ' . ($date_end > 0 ? (int) $date_end :
'NULL');
1119 $sql .=
', ' . (int) $info_bits;
1120 $sql .=
', ' . (int) $special_code;
1121 $sql .=
', ' . (int) $rang;
1122 $sql .=
', ' . ($fk_unit ? (int) $fk_unit :
'NULL');
1123 $sql .=
', ' . (int) $user->id;
1124 $sql .=
', ' . (int) $this->fk_multicurrency;
1125 $sql .=
", '" . $this->db->escape($this->multicurrency_code) .
"'";
1126 $sql .=
', ' .
price2num($pu_ht_devise,
'CU');
1127 $sql .=
', ' .
price2num($multicurrency_total_ht,
'CT');
1128 $sql .=
', ' .
price2num($multicurrency_total_tva,
'CT');
1129 $sql .=
', ' .
price2num($multicurrency_total_ttc,
'CT');
1132 dol_syslog(get_class($this).
'::addline', LOG_DEBUG);
1133 if ($this->db->query($sql)) {
1134 $lineId = $this->db->last_insert_id(MAIN_DB_PREFIX.
'facture_fourn_det_rec');
1137 $this->db->commit();
1140 $this->db->rollback();
1141 $this->error = $this->db->lasterror();
1174 public function updateline($rowid, $fk_product, $ref, $label, $desc, $pu_ht, $qty, $remise_percent, $txtva, $txlocaltax1 = 0, $txlocaltax2 = 0, $price_base_type =
'HT', $type = 0, $date_start = 0, $date_end = 0, $info_bits = 0, $special_code = 0, $rang = -1, $fk_unit =
null, $pu_ht_devise = 0, $pu_ttc = 0)
1179 $this->error =
'ErrorLineIDDoesNotMatchWithObjectID';
1185 dol_syslog(get_class($this).
'::updateline facid=' .$facid.
" rowid=$rowid, desc=$desc, pu_ht=$pu_ht, qty=$qty, txtva=$txtva, txlocaltax1=$txlocaltax1, txlocaltax2=$txlocaltax2, fk_product=$fk_product, remise_percent=$remise_percent, info_bits=$info_bits, price_base_type=$price_base_type, pu_ttc=$pu_ttc, type=$type, fk_unit=$fk_unit, pu_ht_devise=$pu_ht_devise", LOG_DEBUG);
1186 include_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
1194 $fk_product = empty($fk_product) ? 0 : $fk_product;
1195 $label = empty($label) ?
'' : $label;
1196 $remise_percent = empty($remise_percent) ? 0 :
price2num($remise_percent);
1198 $info_bits = empty($info_bits) ? 0 : $info_bits;
1201 $pu_ht_devise =
price2num($pu_ht_devise);
1203 if (!preg_match(
'/\((.*)\)/', (
string) $txtva)) {
1207 $txlocaltax1 = empty($txlocaltax1) ? 0 :
price2num($txlocaltax1);
1208 $txlocaltax2 = empty($txlocaltax2) ? 0 :
price2num($txlocaltax2);
1209 $this->multicurrency_total_ht = empty($this->multicurrency_total_ht) ? 0 : $this->multicurrency_total_ht;
1210 $this->multicurrency_total_tva = empty($this->multicurrency_total_tva) ? 0 : $this->multicurrency_total_tva;
1211 $this->multicurrency_total_ttc = empty($this->multicurrency_total_ttc) ? 0 : $this->multicurrency_total_ttc;
1213 $pu = ($price_base_type ==
'HT' ? $pu_ht : $pu_ttc);
1225 if (preg_match(
'/\((.*)\)/', $txtva, $reg)) {
1226 $vat_src_code = $reg[1];
1227 $txtva = preg_replace(
'/\s*\(.*\)/',
'', $txtva);
1230 $tabprice =
calcul_price_total((
float) $qty, (
float) $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type,
$mysoc, $localtaxes_type, 100, $this->multicurrency_tx, (
float) $pu_ht_devise);
1232 $total_ht = $tabprice[0];
1233 $total_tva = $tabprice[1];
1234 $total_ttc = $tabprice[2];
1235 $total_localtax1 = $tabprice[9];
1236 $total_localtax2 = $tabprice[10];
1237 $pu_ht = $tabprice[3];
1238 $pu_tva = $tabprice[4];
1239 $pu_ttc = $tabprice[5];
1242 $multicurrency_total_ht = $tabprice[16];
1243 $multicurrency_total_tva = $tabprice[17];
1244 $multicurrency_total_ttc = $tabprice[18];
1245 $pu_ht_devise = $tabprice[19];
1247 $product_type = $type;
1249 $product =
new Product($this->db);
1250 $result = $product->fetch($fk_product);
1251 $product_type = $product->type;
1254 $sql =
'UPDATE ' . MAIN_DB_PREFIX .
'facture_fourn_det_rec SET';
1255 $sql .=
' fk_facture_fourn = ' . ((int) $facid);
1256 $sql .=
', fk_product = ' . ($fk_product > 0 ? ((int) $fk_product) :
'null');
1257 $sql .=
", ref = '" . $this->db->escape($ref) .
"'";
1258 $sql .=
", label = '" . $this->db->escape($label) .
"'";
1259 $sql .=
", description = '" . $this->db->escape($desc) .
"'";
1260 $sql .=
', pu_ht = ' .
price2num($pu_ht);
1262 $sql .=
", remise_percent = '" .
price2num($remise_percent) .
"'";
1263 $sql .=
", vat_src_code = '" . $this->db->escape($vat_src_code) .
"'";
1264 $sql .=
', tva_tx = ' .
price2num($txtva);
1265 $sql .=
', localtax1_tx = ' . (float) $txlocaltax1;
1266 $sql .=
", localtax1_type = '" . $this->db->escape($localtaxes_type[0]) .
"'";
1267 $sql .=
', localtax2_tx = ' . (float) $txlocaltax2;
1268 $sql .=
", localtax2_type = '" . $this->db->escape($localtaxes_type[2]) .
"'";
1269 $sql .=
", total_ht = '" .
price2num($total_ht) .
"'";
1270 $sql .=
", total_tva = '" .
price2num($total_tva) .
"'";
1271 $sql .=
", total_localtax1 = '" .
price2num($total_localtax1) .
"'";
1272 $sql .=
", total_localtax2 = '" .
price2num($total_localtax2) .
"'";
1273 $sql .=
", total_ttc = '" .
price2num($total_ttc) .
"'";
1274 $sql .=
', product_type = ' . (int) $product_type;
1275 $sql .=
', date_start = ' . (empty($date_start) ?
'NULL' : (int) $date_start);
1276 $sql .=
', date_end = ' . (empty($date_end) ?
'NULL' : (int) $date_end);
1277 $sql .=
', info_bits = ' . (int) $info_bits;
1278 $sql .=
', special_code = ' . (int) $special_code;
1279 $sql .=
', rang = ' . (int) $rang;
1280 $sql .=
', fk_unit = ' . ($fk_unit ?
"'" . $this->db->escape($fk_unit) .
"'" :
'null');
1281 $sql .=
', fk_user_modif = ' . (int) $user;
1282 $sql .=
', multicurrency_subprice = '.price2num($pu_ht_devise);
1283 $sql .=
', multicurrency_total_ht = '.price2num($multicurrency_total_ht);
1284 $sql .=
', multicurrency_total_tva = '.price2num($multicurrency_total_tva);
1285 $sql .=
', multicurrency_total_ttc = '.price2num($multicurrency_total_ttc);
1286 $sql .=
' WHERE rowid = ' . (int) $rowid;
1288 dol_syslog(get_class($this).
'::updateline', LOG_DEBUG);
1289 if ($this->db->query($sql)) {
1294 $this->error = $this->db->lasterror();
1320 if (empty($this->date_when)) {
1324 return dol_time_plus_duree((
int) $this->date_when, $this->frequency, $this->unit_frequency, 1,
'tzserver');
1335 if ($this->nb_gen_max > 0 && ($this->nb_gen_done >= $this->nb_gen_max)) {
1350 return ($this->
isMaxNbGenReached() ?
'<strike>' :
'').$ret.($this->isMaxNbGenReached() ?
'</strike>' :
'');
1365 global $conf, $langs, $db, $user, $hookmanager;
1371 $langs->loadLangs(array(
'main',
'bills'));
1375 $today =
dol_mktime(23, 59, 59, $tmparray[
'mon'], $tmparray[
'mday'], $tmparray[
'year']);
1377 dol_syslog(
'createRecurringInvoices restrictioninvoiceid=' .$restrictioninvoiceid.
' forcevalidation=' .$forcevalidation);
1379 $sql =
'SELECT rowid FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec';
1380 $sql .=
' WHERE frequency > 0';
1381 $sql .=
" AND (date_when IS NULL OR date_when <= '".$this->db->idate($today).
"')";
1382 $sql .=
' AND (nb_gen_done < nb_gen_max OR nb_gen_max = 0)';
1383 $sql .=
' AND suspended = 0';
1384 $sql .=
' AND entity = '. (int) $conf->entity;
1385 if ($restrictioninvoiceid > 0) {
1386 $sql .=
' AND rowid = '. (int) $restrictioninvoiceid;
1388 $sql .= $this->db->order(
'entity',
'ASC');
1390 $sql .= $this->db->plimit(
getDolGlobalInt(
'NB_REC_FACT_GEN_BY_CALL'));
1393 $parameters = array(
1394 'restrictioninvoiceid' => $restrictioninvoiceid,
1395 'forcevalidation' => $forcevalidation,
1397 $reshook = $hookmanager->executeHooks(
'beforeCreationOfRecurringInvoices', $parameters, $sql);
1399 $resql = $this->db->query($sql);
1402 $num = $this->db->num_rows($resql);
1405 $this->output .= $langs->trans(
'FoundXQualifiedRecurringInvoiceTemplate', $num).
"\n";
1407 $this->output .= $langs->trans(
'NoQualifiedRecurringInvoiceTemplateFound');
1410 $saventity = $conf->entity;
1414 $line = $this->db->fetch_object($resql);
1418 $invoiceidgenerated = 0;
1420 $new_fac_fourn =
null;
1422 $laststep =
"Fetch {$line->rowid}";
1423 $facturerec->fetch($line->rowid);
1425 if ($facturerec->id > 0) {
1427 $conf->entity = $facturerec->entity;
1429 dol_syslog(
'createRecurringInvoices Process invoice template id=' .$facturerec->id.
', ref=' .$facturerec->ref.
', entity=' .$facturerec->entity);
1432 $new_fac_fourn->fac_rec = $facturerec->id;
1433 $new_fac_fourn->fk_fac_rec_source = $facturerec->id;
1436 $new_fac_fourn->subtype = $facturerec->subtype;
1439 $new_fac_fourn->date = empty($facturerec->date_when) ? $now : $facturerec->date_when;
1440 $new_fac_fourn->socid = $facturerec->socid;
1441 $new_fac_fourn->lines = $facturerec->lines;
1442 $new_fac_fourn->ref_supplier = $facturerec->ref_supplier;
1443 $new_fac_fourn->model_pdf = $facturerec->model_pdf;
1444 $new_fac_fourn->fk_project = $facturerec->fk_project;
1445 $new_fac_fourn->label = $facturerec->label;
1446 $new_fac_fourn->libelle = $facturerec->label;
1448 $invoiceidgenerated = $new_fac_fourn->create($user);
1449 $laststep =
"Create invoiceidgenerated $invoiceidgenerated";
1450 if ($invoiceidgenerated <= 0) {
1454 if (!$error && ($facturerec->auto_validate || $forcevalidation)) {
1455 $result = $new_fac_fourn->validate($user);
1456 $laststep =
"Validate by user {$user->login}";
1463 if (!$error && $facturerec->generate_pdf) {
1465 $laststep =
"Refresh ".$new_fac_fourn->id;
1466 $new_fac_fourn->fetch($new_fac_fourn->id);
1467 $laststep =
"GenerateDocument ".$new_fac_fourn->id;
1468 $result = $new_fac_fourn->generateDocument($facturerec->model_pdf, $langs);
1476 $this->error =
'Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity.
"\n";
1477 $this->errors[] =
'Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity;
1478 dol_syslog(
'createRecurringInvoices Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity);
1481 if (!$error && $invoiceidgenerated >= 0) {
1482 $facturerec->nb_gen_done++;
1483 $facturerec->date_last_gen =
dol_now();
1484 $nextDate = $facturerec->getNextDate();
1485 $facturerec->date_when = (($nextDate ===
false) ?
null : $nextDate);
1486 $facturerec->update($user);
1487 $this->db->commit(
'createRecurringInvoices Process invoice template id=' .$facturerec->id.
', title=' .$facturerec->title);
1488 dol_syslog(
'createRecurringInvoices Process invoice template ' .$facturerec->title.
' is finished with a success generation');
1490 $this->output .= $langs->trans(
'InvoiceGeneratedFromTemplate', $new_fac_fourn->ref, $facturerec->title).
"\n";
1492 $this->db->rollback(
'createRecurringInvoices Process invoice template error='.$error.
' invoiceidgenerated='.$invoiceidgenerated.
' LastStep='.$laststep.
' id=' .$facturerec->id.
', title=' .$facturerec->title);
1495 $parameters = array(
1498 'errorCount' => $error,
1499 'invoiceidgenerated' => $invoiceidgenerated,
1500 'facturerec' => $facturerec,
1504 $reshook = $hookmanager->executeHooks(
'afterCreationOfRecurringInvoice', $parameters, $new_fac_fourn);
1509 $conf->entity = $saventity;
1514 $this->output = trim($this->output);
1516 return $error ? $error : 0;
1531 public function getNomUrl($withpicto = 0, $option =
'', $max = 0, $short = 0, $moretitle =
'', $notooltip = 0, $save_lastsearch_value = -1)
1533 global $langs, $hookmanager;
1537 $label =
'<u>'.$langs->trans(
'RepeatableInvoice').
'</u>';
1538 if (!empty($this->
ref)) {
1539 $label .=
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
1541 if ($this->frequency > 0) {
1542 $label .=
'<br><b>'.$langs->trans(
'Frequency').
':</b> '.$langs->trans(
'FrequencyPer_'.$this->unit_frequency, $this->frequency);
1544 if (!empty($this->date_last_gen)) {
1545 $label .=
'<br><b>'.$langs->trans(
'DateLastGeneration').
':</b> '.
dol_print_date($this->date_last_gen,
'dayhour');
1547 if ($this->frequency > 0) {
1548 if (!empty($this->date_when)) {
1549 $label .=
'<br><b>'.$langs->trans(
'NextDateToExecution').
':</b> ';
1550 $label .= (empty($this->suspended) ?
'' :
'<strike>').
dol_print_date($this->date_when,
'day').(empty($this->suspended) ?
'' :
'</strike>');
1551 if (!empty($this->suspended)) {
1552 $label .=
' ('.$langs->trans(
'Disabled').
')';
1557 $url = DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.$this->id;
1563 if ($option !=
'nolink') {
1565 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
1566 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
'PHP_SELF'])) {
1567 $add_save_lastsearch_values = 1;
1569 if ($add_save_lastsearch_values) {
1570 $url .=
'&save_lastsearch_values=1';
1574 $linkstart =
'<a href="'.$url.
'" title="'.
dol_escape_htmltag($label, 1).
'" class="classfortooltip">';
1577 $result .= $linkstart;
1579 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), ($notooltip ? (($withpicto != 2) ?
'class="paddingright"' :
'') :
'class="'.(($withpicto != 2) ?
'paddingright ' :
'').
'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
1581 if ($withpicto != 2) {
1582 $result .= $this->ref;
1584 $result .= $linkend;
1586 $hookmanager->initHooks(array($this->element .
'dao'));
1587 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
1588 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
1590 $result = $hookmanager->resPrint;
1592 $result .= $hookmanager->resPrint;
1606 return $this->
LibStatut($this->frequency ? 1 : 0, $this->suspended, $mode, $alreadypaid, empty($this->
type) ? 0 : $this->type);
1621 public function LibStatut($recur, $status, $mode = 0, $alreadypaid = -1, $type = 0, $nbofopendirectdebitorcredittransfer = 0)
1625 $langs->load(
'bills');
1627 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1628 $statusType =
'status0';
1633 if ($status == self::STATUS_SUSPENDED) {
1634 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1636 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1639 if ($status == self::STATUS_SUSPENDED) {
1640 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1642 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1645 } elseif ($mode == 1) {
1648 if ($status == self::STATUS_SUSPENDED) {
1649 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1651 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1654 if ($status == self::STATUS_SUSPENDED) {
1655 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1657 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1660 } elseif ($mode == 2) {
1662 if ($status == self::STATUS_SUSPENDED) {
1663 $statusType =
'status6';
1664 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1666 $statusType =
'status4';
1667 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1670 if ($status == self::STATUS_SUSPENDED) {
1671 $statusType =
'status6';
1672 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1674 $statusType =
'status0';
1675 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1678 } elseif ($mode == 3) {
1681 if ($status == self::STATUS_SUSPENDED) {
1682 $statusType =
'status6';
1683 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1685 $statusType =
'status4';
1686 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1689 if ($status == self::STATUS_SUSPENDED) {
1690 $statusType =
'status6';
1691 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1693 $statusType =
'status0';
1694 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1697 } elseif ($mode == 4) {
1700 if ($status == self::STATUS_SUSPENDED) {
1701 $statusType =
'status6';
1702 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1704 $statusType =
'status4';
1705 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1708 if ($status == self::STATUS_SUSPENDED) {
1709 $statusType =
'status6';
1710 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1712 $statusType =
'status0';
1713 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1716 } elseif ($mode == 5 || $mode == 6) {
1722 if ($status == self::STATUS_SUSPENDED) {
1723 $statusType =
'status6';
1724 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1726 $statusType =
'status4';
1727 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1730 if ($status == self::STATUS_SUSPENDED) {
1731 $statusType =
'status6';
1732 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1734 $statusType =
'status0';
1735 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1740 $labelStatusShort = $labelStatus;
1742 return dolGetStatus($labelStatus, $labelStatusShort,
'', $statusType, $mode);
1755 global $user, $langs, $conf;
1759 $nownotime =
dol_mktime(0, 0, 0, $arraynow[
'mon'], $arraynow[
'mday'], $arraynow[
'year']);
1765 $sql =
'SELECT rowid';
1766 $sql .=
' FROM ' .MAIN_DB_PREFIX.
'product';
1767 $sql .=
' WHERE entity IN (' .getEntity(
'product').
')';
1768 $sql .= $this->db->plimit(100);
1770 $resql = $this->db->query($sql);
1772 $num_prods = $this->db->num_rows($resql);
1774 while ($i < $num_prods) {
1776 $row = $this->db->fetch_row($resql);
1777 $prodids[$i] = $row[0];
1783 $this->
ref =
'SPECIMEN';
1784 $this->title =
'SPECIMEN';
1785 $this->specimen = 1;
1787 $this->
date = $nownotime;
1788 $this->date_lim_reglement = $nownotime + 3600 * 24 * 30;
1789 $this->cond_reglement_id = 1;
1790 $this->cond_reglement_code =
'RECEP';
1792 $this->mode_reglement_id = 0;
1793 $this->mode_reglement_code =
'';
1794 $this->note_public =
'This is a comment (public)';
1795 $this->note_private =
'This is a comment (private)';
1796 $this->note =
'This is a comment (private)';
1797 $this->fk_incoterms = 0;
1798 $this->location_incoterms =
'';
1800 if (empty($option) || $option !=
'nolines') {
1804 while ($xnbp < $nbp) {
1806 $line->desc = $langs->trans(
'Description').
' ' .$xnbp;
1808 $line->subprice = 100;
1809 $line->tva_tx = 19.6;
1810 $line->localtax1_tx = 0;
1811 $line->localtax2_tx = 0;
1812 $line->remise_percent = 0;
1814 $prodid = mt_rand(1, $num_prods);
1815 $line->fk_product = $prodids[$prodid];
1817 $line->total_ht = -100;
1818 $line->total_ttc = -119.6;
1819 $line->total_tva = -19.6;
1820 } elseif ($xnbp == 2) {
1821 $line->subprice = -100;
1822 $line->total_ht = -100;
1823 $line->total_ttc = -119.6;
1824 $line->total_tva = -19.6;
1825 $line->remise_percent = 0;
1826 } elseif ($xnbp == 3) {
1827 $prodid = mt_rand(1, $num_prods);
1828 $line->fk_product = $prodids[$prodid];
1829 $line->total_ht = 50;
1830 $line->total_ttc = 59.8;
1831 $line->total_tva = 9.8;
1832 $line->remise_percent = 50;
1834 $prodid = mt_rand(1, $num_prods);
1835 $line->fk_product = $prodids[$prodid];
1836 $line->total_ht = 100;
1837 $line->total_ttc = 119.6;
1838 $line->total_tva = 19.6;
1839 $line->remise_percent = 00;
1842 $this->lines[$xnbp] = $line;
1845 $this->total_ht += $line->total_ht;
1846 $this->total_tva += $line->total_tva;
1847 $this->total_ttc += $line->total_ttc;
1849 $this->revenuestamp = 0;
1853 $line->desc = $langs->trans(
'Description').
' (offered line)';
1855 $line->subprice = 100;
1856 $line->tva_tx = 19.6;
1857 $line->localtax1_tx = 0;
1858 $line->localtax2_tx = 0;
1859 $line->remise_percent = 100;
1860 $line->total_ht = 0;
1861 $line->total_ttc = 0;
1862 $line->total_tva = 0;
1863 $prodid = mt_rand(1, $num_prods);
1864 $line->fk_product = $prodids[$prodid];
1866 $this->lines[$xnbp] = $line;
1870 $this->usenewprice = 0;
1901 if (!$this->table_element) {
1902 dol_syslog(get_class($this).
'::setFrequencyAndUnit was called on object with property table_element not defined', LOG_ERR);
1906 if (!empty($frequency) && empty($unit)) {
1907 dol_syslog(get_class($this).
'::setFrequencyAndUnit was called on object with params frequency defined but unit not defined', LOG_ERR);
1911 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1912 $sql .=
" SET frequency = ".($frequency ? ((int) $frequency) :
"NULL");
1913 if (!empty($unit)) {
1914 $sql .=
", unit_frequency = '".$this->db->escape($unit).
"'";
1916 $sql .=
" WHERE rowid = ".((int) $this->
id);
1918 dol_syslog(get_class($this).
'::setFrequencyAndUnit', LOG_DEBUG);
1920 if ($this->db->query($sql)) {
1921 $this->frequency = $frequency;
1922 if (!empty($unit)) {
1923 $this->unit_frequency = $unit;
1927 $this->error = $this->db->lasterror();
1941 if (!$this->table_element) {
1942 dol_syslog(get_class($this).
'::setNextDate was called on object with property table_element not defined', LOG_ERR);
1945 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1946 $sql .=
" SET date_when = " .($date ?
"'".$this->db->idate($date).
"'" :
"NULL");
1947 if ($increment_nb_gen_done > 0) {
1948 $sql .=
", nb_gen_done = nb_gen_done + 1";
1950 $sql .=
" WHERE rowid = " . (int) $this->
id;
1952 dol_syslog(get_class($this).
'::setNextDate', LOG_DEBUG);
1954 if ($this->db->query($sql)) {
1955 $this->date_when = $date;
1956 if ($increment_nb_gen_done > 0) {
1957 $this->nb_gen_done++;
1961 $this->error = $this->db->lasterror();
1974 if (!$this->table_element) {
1975 dol_syslog(get_class($this).
'::setMaxPeriod was called on object with property table_element not defined', LOG_ERR);
1983 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1984 $sql .=
" SET nb_gen_max = ". (int) $nb;
1985 $sql .=
" WHERE rowid = " . (int) $this->
id;
1987 dol_syslog(get_class($this).
'::setMaxPeriod', LOG_DEBUG);
1989 if ($this->db->query($sql)) {
1990 $this->nb_gen_max = $nb;
2006 if (!$this->table_element) {
2007 dol_syslog(get_class($this).
'::setAutoValidate was called on object with property table_element not defined', LOG_ERR);
2011 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2012 $sql .=
" SET auto_validate = ".((int) $validate);
2013 $sql .=
" WHERE rowid = " . (int) $this->
id;
2015 dol_syslog(get_class($this).
'::setAutoValidate', LOG_DEBUG);
2017 if ($this->db->query($sql)) {
2018 $this->auto_validate = $validate;
2034 if (!$this->table_element) {
2035 dol_syslog(get_class($this).
'::setGeneratePdf was called on object with property table_element not defined', LOG_ERR);
2039 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2040 $sql .=
" SET generate_pdf = ". (int) $validate;
2041 $sql .=
" WHERE rowid = " . (int) $this->
id;
2043 dol_syslog(get_class($this).
'::setGeneratePdf', LOG_DEBUG);
2045 if ($this->db->query($sql)) {
2046 $this->generate_pdf = $validate;
2062 if (!$this->table_element) {
2063 dol_syslog(get_class($this).
'::setModelPdf was called on object with property table_element not defined', LOG_ERR);
2067 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2068 $sql .=
" SET modelpdf = '".$this->db->escape($model).
"'";
2069 $sql .=
" WHERE rowid = " . (int) $this->
id;
2071 dol_syslog(get_class($this).
'::setModelPdf', LOG_DEBUG);
2073 if ($this->db->query($sql)) {
2074 $this->model_pdf = $model;
Superclass for invoice classes.
const TYPE_STANDARD
Standard invoice.
calculate_date_lim_reglement($cond_reglement=0)
Returns an invoice payment deadline based on the invoice settlement conditions and billing date.
const STATUS_DRAFT
Draft status.
fetch_optionals($rowid=null, $optionsArray=null)
Function to get extra fields of an object into $this->array_options This method is in most cases call...
update_price($exclspec=0, $roundingadjust='auto', $nodatabaseupdate=0, $seller=null)
Update total_ht, total_ttc, total_vat, total_localtax1, total_localtax2 for an object (sum of lines).
add_object_linked($origin=null, $origin_id=null, $f_user=null, $notrigger=0)
Add an object link into llx_element_element.
deleteObjectLinked($sourceid=null, $sourcetype='', $targetid=null, $targettype='', $rowid=0, $f_user=null, $notrigger=0)
Delete all links between an object $this.
setErrorsFromObject($object)
setErrorsFromObject
isLineOfObject($lineid)
Check that a line belongs to this object, using $this->table_element_line and $this->fk_element.
deleteExtraFields()
Delete all extra fields values for the current object.
static commonReplaceThirdparty(DoliDB $dbs, $origin_id, $dest_id, array $tables, $ignoreerrors=0)
Function used to replace a thirdparty id with another one.
insertExtraFields($trigger='', $userused=null)
Add/Update all extra fields values for the current object.
Class to manage Dolibarr database access.
Class to manage suppliers invoices.
Class to manage supplier invoice lines of templates.
Class to manage invoice templates.
setModelPdf($model)
Update the model for documents.
fetch($rowid, $ref='', $ref_ext='')
Load object and lines.
strikeIfMaxNbGenReached($ret)
Format string to output with by striking the string if max number of generation was reached.
setFrequencyAndUnit($frequency, $unit)
Update frequency and unit.
getNextNumRef($soc, $mode='next')
Return next reference of invoice not already used (or last reference)
setGeneratePdf($validate)
Update the auto generate documents.
getLinesArray()
Create an array of invoice lines.
initAsSpecimen($option='')
Initialise an instance with random values.
updateline($rowid, $fk_product, $ref, $label, $desc, $pu_ht, $qty, $remise_percent, $txtva, $txlocaltax1=0, $txlocaltax2=0, $price_base_type='HT', $type=0, $date_start=0, $date_end=0, $info_bits=0, $special_code=0, $rang=-1, $fk_unit=null, $pu_ht_devise=0, $pu_ttc=0)
Update a line to supplier invoice template.
isMaxNbGenReached()
Return if maximum number of generation is reached.
LibStatut($recur, $status, $mode=0, $alreadypaid=-1, $type=0, $nbofopendirectdebitorcredittransfer=0)
Return label of a status.
setAutoValidate($validate)
Update the auto validate flag of invoice.
static replaceThirdparty(DoliDB $dbs, $origin_id, $dest_id)
Function used to replace a thirdparty id with another one.
getNextDate()
Return the next date of.
__construct($db)
Constructor.
fetch_lines()
Get lines of template invoices into this->lines.
getLibStatut($mode=0, $alreadypaid=-1)
Return label of object status.
setNextDate($date, $increment_nb_gen_done=0)
Update the next date of execution.
setMaxPeriod($nb)
Update the maximum period.
createRecurringInvoices($restrictioninvoiceid=0, $forcevalidation=0)
Create all recurrents supplier invoices (for all entities if multicompany is used).
update(User $user, $notrigger=0)
Update fourn_invoice_rec.
addline($fk_product, $ref, $label, $desc, $pu_ht, $pu_ttc, $qty, $remise_percent, $txtva, $txlocaltax1=0, $txlocaltax2=0, $price_base_type='HT', $type=0, $date_start=0, $date_end=0, $info_bits=0, $special_code=0, $rang=-1, $fk_unit=null, $pu_ht_devise=0)
Add a line to recursive supplier invoice.
getNomUrl($withpicto=0, $option='', $max=0, $short=0, $moretitle='', $notooltip=0, $save_lastsearch_value=-1)
Return clickable name (with picto eventually)
create($user, $facFournId, $notrigger=0, $onlylines=array())
Create a predefined supplier invoice.
Class to manage invoice lines.
Class to manage products or services.
Class to manage Dolibarr users.
print $langs trans("Ref").' m titre as m m statut as status
Or an array listing all the potential status of the object: array: int of the status => translated la...
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0, $tz='')
Add a delay to a date.
dol_now($mode='gmt')
Return date for now.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $allowothertags=array())
Show a picto called object_picto (generic function)
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
getLocalTaxesFromRate($vatrate, $local, $buyer, $seller, $firstparamisid=0)
Get type and rate of localtaxes for a particular vat rate/country of a thirdparty.
dolGetStatus($statusLabel='', $statusLabelShort='', $html='', $statusType='status0', $displayMode=0, $url='', $params=array())
Output the badge of a status.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocaltax1_rate, $uselocaltax2_rate, $remise_percent_global, $price_base_type, $info_bits, $type, $seller=null, $localtaxes_array=[], $progress=100, $multicurrency_tx=1, $pu_devise=0, $multicurrency_code='')
Calculate totals (net, vat, ...) of a line.
if(getDolGlobalString( 'TAKEPOS_SHOW_CUSTOMER')) print $langs trans('Date')." left Label right Qty right Price right TotalHT right TotalTTC right right right right right right right right right centpercent right TotalHT right n right VAT right n right TotalVAT right n No sujeto a RE IRPF right TotalLT1 right n right TotalLT2 right n right TotalTTC right n takeposcustomercurrency takeposcustomercurrency takeposcustomercurrency takeposcustomercurrency right TotalTTC takeposcustomercurrency right takeposcustomercurrency n right PaymentTypeShortLIQ right SELECT p pos_change as p datep as date
if(preg_match('/(crypted|dolcrypt):/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
'integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter[:Sortfield]]]',...