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' =>
'Project',
'enabled' =>
"isModEnabled('project')",
'visible' => -1,
'position' => 85),
290 'fk_account' => array(
'type' =>
'integer',
'label' =>
'BankAccount',
'enabled' =>
'isModEnabled("bank")',
'visible' => -1,
'position' => 175),
291 'fk_cond_reglement' => array(
'type' =>
'integer',
'label' =>
'PaymentTerm',
'enabled' => 1,
'visible' => -1,
'position' => 90),
292 'fk_mode_reglement' => array(
'type' =>
'integer',
'label' =>
'PaymentMode',
'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' =>
'Currency',
'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())
351 $label = $this->label ?? $this->libelle;
354 $this->titre = empty($this->titre) ?
'' : $this->titre;
355 $this->title = empty($this->title) ?
'' : $this->title;
357 $this->
ref = $this->$keyforref;
359 $this->ref_supplier = empty($this->ref_supplier) ?
'' : $this->ref_supplier;
361 $this->usenewprice = empty($this->usenewprice) ? 0 : $this->usenewprice;
362 $this->suspended = empty($this->suspended) ? 0 : $this->suspended;
364 if (empty($this->frequency)) {
365 $this->frequency = 0;
366 $this->date_when =
null;
368 $this->frequency = abs($this->frequency);
369 $this->nb_gen_done = 0;
370 $this->nb_gen_max = empty($this->nb_gen_max) ? 0 : $this->nb_gen_max;
371 $this->auto_validate = empty($this->auto_validate) ? 0 : $this->auto_validate;
372 $this->generate_pdf = empty($this->generate_pdf) ? 0 : $this->generate_pdf;
378 $result = $facfourn_src->fetch($facFournId);
380 $sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'facture_fourn_rec (';
383 $sql .=
', ref_supplier';
387 $sql .=
', suspended';
389 $sql .=
', total_ttc';
390 $sql .=
', fk_user_author';
391 $sql .=
', fk_projet';
392 $sql .=
', fk_account';
393 $sql .=
', fk_cond_reglement';
394 $sql .=
', fk_mode_reglement';
395 $sql .=
', date_lim_reglement';
396 $sql .=
', note_private';
397 $sql .=
', note_public';
398 $sql .=
', modelpdf';
399 $sql .=
', fk_multicurrency';
400 $sql .=
', multicurrency_code';
401 $sql .=
', multicurrency_tx';
402 $sql .=
', usenewprice';
403 $sql .=
', frequency';
404 $sql .=
', unit_frequency';
405 $sql .=
', date_when';
406 $sql .=
', date_last_gen';
407 $sql .=
', nb_gen_done';
408 $sql .=
', nb_gen_max';
409 $sql .=
', auto_validate';
410 $sql .=
', generate_pdf';
411 $sql .=
') VALUES (';
412 $sql .=
"'".$this->db->escape($this->title).
"'";
413 $sql .=
", ".(isset($this->subtype) ? (int) $this->subtype :
"NULL");
414 $sql .=
", '".$this->db->escape($this->ref_supplier).
"'";
415 $sql .=
", ".((int)
$conf->entity);
416 $sql .=
", ".((int) $facfourn_src->socid);
417 $sql .=
", '".$this->db->idate($now).
"'";
418 $sql .=
", ".((int) $this->suspended);
419 $sql .=
", '".$this->db->escape($label).
"'";
420 $sql .=
", " .(!empty($facfourn_src->total_ttc) ? (float) $facfourn_src->total_ttc :
'0');
421 $sql .=
", " .((int) $user->id);
422 $sql .=
", " .(!empty($this->fk_project) ? ((int) $this->fk_project) :
'NULL');
423 $sql .=
", " .(!empty($facfourn_src->fk_account) ? ((int) $facfourn_src->fk_account) :
'NULL');
424 $sql .=
", " .($this->cond_reglement_id > 0 ? (int) $this->cond_reglement_id :
'NULL');
425 $sql .=
", " .($this->mode_reglement_id > 0 ? (int) $this->mode_reglement_id :
'NULL');
426 $sql .=
", ".($facfourn_src->date_echeance > 0 ?
"'".$this->db->idate($facfourn_src->date_echeance).
"'" :
'NULL');
427 $sql .=
", " .(!empty($this->note_private) ?
"'".$this->db->escape($this->note_private).
"'" :
'NULL');
428 $sql .=
", " .(!empty($this->note_public) ?
"'".$this->db->escape($this->note_public).
"'" :
'NULL');
429 $sql .=
", " .(!empty($this->model_pdf) ?
"'".$this->db->escape($this->model_pdf).
"'" :
'NULL');
430 $sql .=
", " . (int) $facfourn_src->fk_multicurrency;
431 $sql .=
", '".$this->db->escape($facfourn_src->multicurrency_code).
"'";
432 $sql .=
", " . (float) $facfourn_src->multicurrency_tx;
433 $sql .=
", " . (int) $this->usenewprice;
434 $sql .=
", " . (int) $this->frequency;
435 $sql .=
", '".$this->db->escape($this->unit_frequency).
"'";
436 $sql .=
", " .(!empty($this->date_when) ?
"'".$this->db->idate($this->date_when).
"'" :
'NULL');
437 $sql .=
", " .(!empty($this->date_last_gen) ?
"'".$this->db->idate($this->date_last_gen).
"'" :
'NULL');
438 $sql .=
", " . (int) $this->nb_gen_done;
439 $sql .=
", " . (int) $this->nb_gen_max;
440 $sql .=
", " . (int) $this->auto_validate;
441 $sql .=
", " . (int) $this->generate_pdf;
444 if ($this->db->query($sql)) {
445 $this->
id = $this->db->last_insert_id(MAIN_DB_PREFIX.
'facture_fourn_rec');
448 $this->fk_multicurrency = $facfourn_src->fk_multicurrency;
450 $this->multicurrency_code = $facfourn_src->multicurrency_code;
451 $this->multicurrency_tx = $facfourn_src->multicurrency_tx;
454 $num = count($facfourn_src->lines);
455 for ($i = 0; $i < $num; $i++) {
456 $facfourn_line = $facfourn_src->lines[$i];
457 '@phan-var-force SupplierInvoiceLine $facfourn_line';
458 if (!empty($onlylines) && !in_array($facfourn_line->id, $onlylines)) {
462 $tva_tx = $facfourn_line->tva_tx;
463 if (!empty($facfourn_line->vat_src_code) && !preg_match(
'/\(/', (
string) $tva_tx)) {
464 $tva_tx .=
' ('.$facfourn_line->vat_src_code.
')';
467 $result_insert = $this->
addline(
468 $facfourn_line->fk_product,
469 $facfourn_line->ref_supplier,
470 $facfourn_line->product_label,
471 $facfourn_line->desc ? $facfourn_line->desc : $facfourn_line->description,
472 $facfourn_line->pu_ht,
473 $facfourn_line->pu_ttc,
475 $facfourn_line->remise_percent,
477 $facfourn_line->localtax1_tx,
478 $facfourn_line->localtax2_tx,
480 $facfourn_line->product_type,
481 $facfourn_line->date_start,
482 $facfourn_line->date_end,
483 $facfourn_line->info_bits,
484 $facfourn_line->special_code,
485 $facfourn_line->rang,
486 $facfourn_line->fk_unit
489 if ($result_insert < 0) {
494 $result2 = $objectline->fetch($result_insert);
497 if (method_exists($facfourn_line,
'fetch_optionals')) {
498 $facfourn_line->fetch_optionals($facfourn_line->id);
499 $objectline->array_options = $facfourn_line->array_options;
502 $result = $objectline->insertExtraFields();
506 } elseif ($result2 < 0) {
507 $this->errors[] = $objectline->error;
513 if (!empty($this->linkedObjectsIds) && empty($this->linked_objects)) {
514 $this->linked_objects = $this->linkedObjectsIds;
518 if (!$error && $this->
id && !empty($this->linked_objects) && is_array($this->linked_objects)) {
519 foreach ($this->linked_objects as $origin => $tmp_origin_id) {
520 if (is_array($tmp_origin_id)) {
521 foreach ($tmp_origin_id as $origin_id) {
524 $this->error = $this->db->lasterror();
529 $origin_id = $tmp_origin_id;
532 $this->error = $this->db->lasterror();
546 if (!$error && !$notrigger) {
548 $result = $this->call_trigger(
'SUPPLIERBILLREC_CREATE', $user);
550 $this->db->rollback();
557 $this->db->rollback();
564 $this->error = $this->db->lasterror();
565 $this->db->rollback();
569 $this->db->rollback();
586 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"facture_fourn_rec SET";
587 $sql .=
" titre = '" . (!empty($this->title) ? $this->db->escape($this->title) :
"").
"'," ;
588 $sql .=
" subtype=".(isset($this->subtype) ? (int) $this->subtype :
"NULL").
",";
589 $sql .=
" ref_supplier = '". (!empty($this->ref_supplier) ? $this->db->escape($this->ref_supplier) :
"").
"',";
590 $sql .=
" entity = ". (!empty($this->entity) ? ((int) $this->entity) : 1) .
',';
591 if (!empty($this->socid) && $this->socid > 0) {
592 $sql .=
" fk_soc = ". ((int) $this->socid).
',';
593 } elseif (!empty($this->fk_soc) && $this->fk_soc > 0) {
594 $sql .=
" fk_soc = ". ((int) $this->fk_soc).
',';
596 $sql .=
" suspended = ". (!empty($this->suspended) ? ((int) $this->suspended) : 0) .
',';
597 $sql .=
" libelle = ". (!empty($this->libelle) ?
"'".$this->db->escape($this->libelle).
"'" :
'NULL') .
",";
598 $sql .=
" vat_src_code = ". (!empty($this->vat_src_code) ?
"'".$this->db->escape($this->vat_src_code).
"'" :
'NULL') .
',';
599 $sql .=
" localtax1 = ". (!empty($this->localtax1) ? ((float) $this->localtax1) : 0.00) .
',';
600 $sql .=
" localtax2 = ". (!empty($this->localtax2) ? ((float) $this->localtax2) : 0.00) .
',';
601 $sql .=
" total_ht = ". (!empty($this->total_ht) ? ((float) $this->total_ht) : 0.00) .
',';
602 $sql .=
" total_tva = ". (!empty($this->total_tva) ? ((float) $this->total_tva) : 0.00) .
',';
603 $sql .=
" total_ttc = ". (!empty($this->total_ttc) ? ((float) $this->total_ttc) : 0.00) .
',';
604 $sql .=
" fk_user_modif = ". ((int) $user->id) .
',';
605 $sql .=
" fk_projet = ". (!empty($this->fk_project) ? ((int) $this->fk_project) :
'NULL') .
',';
606 $sql .=
" fk_account = ". (!empty($this->fk_account) ? ((int) $this->fk_account) :
'NULL') .
',';
607 $sql .=
" fk_mode_reglement = ". (!empty($this->mode_reglement_id) ? ((int) $this->mode_reglement_id) :
'NULL') .
',';
608 $sql .=
" fk_cond_reglement = ". (!empty($this->cond_reglement_id) ? ((int) $this->cond_reglement_id) :
'NULL') .
',';
609 $sql .=
" date_lim_reglement = ". (!empty($this->date_lim_reglement) ?
"'".$this->db->idate($this->date_lim_reglement).
"'" :
'NULL') .
',';
610 $sql .=
" note_private = '". (!empty($this->note_private) ? $this->db->escape($this->note_private) :
'') .
"',";
611 $sql .=
" note_public = '". (!empty($this->note_public) ? $this->db->escape($this->note_public) :
'') .
"',";
612 $sql .=
" modelpdf = ". (!empty($this->model_pdf) ?
"'".$this->db->escape($this->model_pdf).
"'" :
'NULL') .
",";
613 $sql .=
" fk_multicurrency = ". (!empty($this->fk_multicurrency) ? ((int) $this->fk_multicurrency) :
'NULL') .
',';
614 $sql .=
" multicurrency_code = ". (!empty($this->multicurrency_code) ?
"'".$this->db->escape($this->multicurrency_code).
"'" :
'NULL') .
",";
615 $sql .=
" multicurrency_tx = ". (!empty($this->multicurrency_tx) ? ((float) $this->multicurrency_tx) : 1) .
',';
616 $sql .=
" multicurrency_total_ht = ". (!empty($this->multicurrency_total_ht) ? ((float) $this->multicurrency_total_ht) : 0.00) .
',';
617 $sql .=
" multicurrency_total_tva = ". (!empty($this->multicurrency_total_tva) ? ((float) $this->multicurrency_total_tva) : 0.00) .
',';
618 $sql .=
" multicurrency_total_ttc = ". (!empty($this->multicurrency_total_ttc) ? ((float) $this->multicurrency_total_ttc) : 0.00) .
',';
619 $sql .=
" usenewprice = ". (!empty($this->usenewprice) ? ((int) $this->usenewprice) : 0) .
',';
620 $sql .=
" frequency = ". (!empty($this->frequency) ? ((int) $this->frequency) : 0).
',';
621 $sql .=
" unit_frequency = '". (!empty($this->unit_frequency) ? $this->db->escape($this->unit_frequency) :
'').
"',";
622 $sql .=
" date_when = ". (!empty($this->date_when) ?
"'".$this->db->idate($this->date_when).
"'" :
'NULL') .
',';
623 $sql .=
" date_last_gen = ". (!empty($this->date_last_gen) ?
"'".$this->db->idate($this->date_last_gen).
"'" :
'NULL') .
',';
624 $sql .=
" nb_gen_done = ". (!empty($this->nb_gen_done) ? ((int) $this->nb_gen_done) : 0) .
',';
625 $sql .=
" nb_gen_max = ". (!empty($this->nb_gen_max) ? ((int) $this->nb_gen_max) : 0) .
',';
626 $sql .=
" auto_validate = ". (!empty($this->auto_validate) ? ((int) $this->auto_validate) : 0);
627 $sql .=
" WHERE rowid = ". (int) $this->
id;
631 dol_syslog(get_class($this).
"::update", LOG_DEBUG);
632 $resql = $this->db->query($sql);
641 if (!$error && !$notrigger) {
643 $result = $this->call_trigger(
'SUPPLIERBILLREC_MODIFY', $user);
645 $this->db->rollback();
653 $this->error = $this->db->lasterror();
654 $this->db->rollback();
667 public function fetch($rowid, $ref =
'', $ref_ext =
'')
669 $sql =
'SELECT f.rowid, f.titre as title, f.subtype, f.ref_supplier, f.entity, f.fk_soc';
670 $sql .=
', f.datec, f.tms, f.suspended';
671 $sql .=
', f.libelle as label';
672 $sql .=
', f.vat_src_code, f.localtax1, f.localtax2';
673 $sql .=
', f.total_tva, f.total_ht, f.total_ttc';
674 $sql .=
', f.fk_user_author, f.fk_user_modif';
675 $sql .=
', f.fk_projet as fk_project, f.fk_account';
676 $sql .=
', f.fk_mode_reglement, p.code as mode_reglement_code, p.libelle as mode_reglement_libelle';
677 $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';
678 $sql .=
', f.date_lim_reglement';
679 $sql .=
', f.note_private, f.note_public, f.modelpdf as model_pdf';
680 $sql .=
', f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht, f.multicurrency_total_tva, f.multicurrency_total_ttc';
681 $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';
682 $sql .=
', f.generate_pdf';
683 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec as f';
684 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_payment_term as c ON f.fk_cond_reglement = c.rowid';
685 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as p ON f.fk_mode_reglement = p.id';
686 $sql .=
' WHERE f.entity IN ('.getEntity(
'invoice').
')';
688 $sql .=
' AND f.rowid='. (int) $rowid;
690 $sql .=
" AND f.titre='".$this->db->escape($ref).
"'";
692 $sql .=
' AND f.rowid = 0';
695 $result = $this->db->query($sql);
697 if ($this->db->num_rows($result)) {
698 $obj = $this->db->fetch_object($result);
702 $this->
id = $obj->rowid;
703 $this->titre = $obj->title;
704 $this->title = $obj->title;
705 $this->subtype = $obj->subtype;
706 $this->
ref = $obj->title;
707 $this->ref_supplier = $obj->ref_supplier;
708 $this->entity = $obj->entity;
709 $this->socid = $obj->fk_soc;
710 $this->date_creation = $obj->datec;
711 $this->date_modification = $obj->tms;
713 $this->
status = $obj->suspended;
714 $this->suspended = $obj->suspended;
716 $this->label = $obj->label;
717 $this->vat_src_code = $obj->vat_src_code;
718 $this->total_localtax1 = $obj->localtax1;
719 $this->total_localtax2 = $obj->localtax2;
720 $this->total_ht = $obj->total_ht;
721 $this->total_tva = $obj->total_tva;
722 $this->total_ttc = $obj->total_ttc;
723 $this->user_creation_id = $obj->fk_user_author;
724 $this->user_modif = $obj->fk_user_modif;
725 $this->fk_project = $obj->fk_project;
726 $this->fk_account = $obj->fk_account;
727 $this->mode_reglement_id = $obj->fk_mode_reglement;
728 $this->mode_reglement_code = $obj->mode_reglement_code;
729 $this->mode_reglement = $obj->mode_reglement_libelle;
730 $this->cond_reglement_id = $obj->fk_cond_reglement;
731 $this->cond_reglement_code = $obj->cond_reglement_code;
732 $this->cond_reglement = $obj->cond_reglement_libelle;
733 $this->cond_reglement_doc = $obj->cond_reglement_libelle_doc;
734 $this->date_lim_reglement = $this->db->jdate($obj->date_lim_reglement);
735 $this->note_private = $obj->note_private;
736 $this->note_public = $obj->note_public;
737 $this->model_pdf = $obj->model_pdf;
740 $this->fk_multicurrency = $obj->fk_multicurrency;
741 $this->multicurrency_code = $obj->multicurrency_code;
742 $this->multicurrency_tx = $obj->multicurrency_tx;
743 $this->multicurrency_total_ht = $obj->multicurrency_total_ht;
744 $this->multicurrency_total_tva = $obj->multicurrency_total_tva;
745 $this->multicurrency_total_ttc = $obj->multicurrency_total_ttc;
747 $this->usenewprice = $obj->usenewprice;
748 $this->frequency = $obj->frequency;
749 $this->unit_frequency = $obj->unit_frequency;
750 $this->date_when = $this->db->jdate($obj->date_when);
751 $this->date_last_gen = $this->db->jdate($obj->date_last_gen);
752 $this->nb_gen_done = $obj->nb_gen_done;
753 $this->nb_gen_max = $obj->nb_gen_max;
754 $this->auto_validate = $obj->auto_validate;
755 $this->generate_pdf = $obj->generate_pdf;
766 $this->error = $this->db->lasterror();
771 $this->error =
'Bill with id '.$rowid.
' or ref '.$ref.
' not found';
772 dol_syslog(
'Facture::Fetch Error '.$this->error, LOG_ERR);
776 $this->error = $this->db->error();
801 $this->lines = array();
812 $sql =
'SELECT l.rowid,';
813 $sql .=
' l.fk_facture_fourn, l.fk_parent_line, l.fk_product, l.ref as ref_supplier, l.label, l.description as line_desc,';
814 $sql .=
' l.pu_ht, l.pu_ttc, l.qty, l.remise_percent, l.fk_remise_except, l.vat_src_code, l.tva_tx,';
815 $sql .=
' l.localtax1_tx, l.localtax2_tx, l.localtax1_type, l.localtax2_type,';
816 $sql .=
' l.total_ht, l.total_tva, l.total_ttc, total_localtax1, total_localtax2,';
817 $sql .=
' l.product_type, l.date_start, l.date_end,';
818 $sql .=
' l.info_bits, l.special_code, l.rang,';
819 $sql .=
' l.fk_unit, l.import_key, l.fk_user_author, l.fk_user_modif, l.extraparams,';
820 $sql .=
' l.fk_multicurrency, l.multicurrency_code, l.multicurrency_subprice, l.multicurrency_total_ht, l.multicurrency_total_tva, l.multicurrency_total_ttc,';
821 $sql .=
' p.ref as product_ref, p.fk_product_type as fk_product_type, p.label as product_label, p.description as product_desc';
822 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_det_rec as l';
823 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'product as p ON l.fk_product = p.rowid';
824 $sql .=
' WHERE l.fk_facture_fourn = '. (int) $this->
id;
825 $sql .=
' ORDER BY l.rang';
827 dol_syslog(
'FactureFournisseurRec::fetch_lines', LOG_DEBUG);
829 $result = $this->db->query($sql);
831 $num = $this->db->num_rows($result);
834 $objp = $this->db->fetch_object($result);
838 $line->id = $objp->rowid;
839 $line->fk_facture_fourn = $objp->fk_facture_fourn;
840 $line->fk_parent = $objp->fk_parent_line;
841 $line->fk_product = $objp->fk_product;
842 $line->ref = $objp->product_ref;
843 $line->product_ref = $objp->product_ref;
844 $line->product_label = $objp->product_label;
845 $line->product_desc = $objp->product_desc;
846 $line->ref_supplier = $objp->ref_supplier;
847 $line->label = $objp->label;
848 $line->description = $objp->line_desc;
849 $line->desc = $objp->line_desc;
850 $line->pu_ht = $objp->pu_ht;
851 $line->subprice = $objp->pu_ht;
852 $line->pu_ttc = $objp->pu_ttc;
853 $line->subprice_ttc = $objp->pu_ttc;
854 $line->qty = $objp->qty;
855 $line->remise_percent = $objp->remise_percent;
856 $line->fk_remise_except = $objp->fk_remise_except;
857 $line->vat_src_code = $objp->vat_src_code;
858 $line->tva_tx = $objp->tva_tx;
859 $line->localtax1_tx = $objp->localtax1_tx;
860 $line->localtax1_type = $objp->localtax1_type;
861 $line->localtax2_tx = $objp->localtax2_tx;
862 $line->localtax2_type = $objp->localtax2_type;
863 $line->total_ht = $objp->total_ht;
864 $line->total_tva = $objp->total_tva;
865 $line->total_localtax1 = $objp->total_localtax1;
866 $line->total_localtax2 = $objp->total_localtax2;
867 $line->total_ttc = $objp->total_ttc;
868 $line->product_type = $objp->product_type;
869 $line->date_start = $objp->date_start;
870 $line->date_end = $objp->date_end;
871 $line->info_bits = $objp->info_bits ;
872 $line->special_code = $objp->special_code;
873 $line->rang = $objp->rang;
874 $line->fk_unit = $objp->fk_unit;
875 $line->import_key = $objp->import_key;
876 $line->fk_user_author = $objp->fk_user_author;
877 $line->fk_user_modif = $objp->fk_user_modif;
878 $this->extraparams = !empty($objp->extraparams) ? (array) json_decode($objp->extraparams,
true) : array();
879 $line->fk_multicurrency = $objp->fk_multicurrency;
880 $line->multicurrency_code = $objp->multicurrency_code;
881 $line->multicurrency_subprice = $objp->multicurrency_subprice;
882 $line->multicurrency_total_ht = $objp->multicurrency_total_ht;
883 $line->multicurrency_total_tva = $objp->multicurrency_total_tva;
884 $line->multicurrency_total_ttc = $objp->multicurrency_total_ttc;
886 $line->fetch_optionals();
888 $this->lines[$i] = $line;
893 $this->db->free($result);
896 $this->error = $this->db->lasterror();
910 public function delete(
User $user, $notrigger = 0, $idwarehouse = -1)
914 dol_syslog(get_class($this).
"::delete rowid=".((
int) $rowid), LOG_DEBUG);
919 $sql_main_table = MAIN_DB_PREFIX.
'facture_fourn_det_rec';
920 $sql_ef_table = $sql_main_table.
"_extrafields";
922 $sqlef =
"DELETE FROM ".$sql_ef_table.
" WHERE fk_object IN (SELECT rowid FROM ".$sql_main_table.
" WHERE fk_facture_fourn = ". (int) $rowid .
")";
923 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"facture_fourn_det_rec WHERE fk_facture_fourn = ". (int) $rowid;
925 if ($this->db->query($sqlef) && $this->db->query($sql)) {
926 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"facture_fourn_rec WHERE rowid = ". (int) $rowid;
928 if ($this->db->query($sql)) {
940 $this->error = $this->db->lasterror();
944 $this->error = $this->db->lasterror();
947 if (!$error && !$notrigger) {
949 $result = $this->call_trigger(
'SUPPLIERBILLREC_DELETE', $user);
959 $this->db->rollback();
990 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)
994 include_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
998 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);
1010 if (preg_match(
'/\((.*)\)/', (
string) $txtva, $reg)) {
1011 $vat_src_code = $reg[1];
1012 $txtva = preg_replace(
'/\s*\(.*\)/',
'', (
string) $txtva);
1016 $fk_product = empty($fk_product) ? 0 : $fk_product;
1017 $label = empty($label) ?
'' : $label;
1018 $remise_percent = empty($remise_percent) ? 0 :
price2num($remise_percent);
1022 if (!preg_match(
'/\((.*)\)/', $txtva)) {
1027 $txtva = !empty($txtva) ? $txtva : 0;
1028 $txlocaltax1 = !empty($txlocaltax1) ? $txlocaltax1 : 0;
1029 $txlocaltax2 = !empty($txlocaltax2) ? $txlocaltax2 : 0;
1030 $info_bits = !empty($info_bits) ? $info_bits : 0;
1031 $info_bits = !empty($info_bits) ? $info_bits : 0;
1033 $pu = ($price_base_type ==
'HT' ? $pu_ht : $pu_ttc);
1039 $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);
1040 $total_ht = $tabprice[0];
1041 $total_tva = $tabprice[1];
1042 $total_ttc = $tabprice[2];
1043 $total_localtax1 = $tabprice[9];
1044 $total_localtax2 = $tabprice[10];
1045 $pu_ht = $tabprice[3];
1048 $multicurrency_total_ht = $tabprice[16];
1049 $multicurrency_total_tva = $tabprice[17];
1050 $multicurrency_total_ttc = $tabprice[18];
1051 $pu_ht_devise = $tabprice[19];
1054 $product_type = $type;
1056 $product =
new Product($this->db);
1057 $result = $product->fetch($fk_product);
1061 $product_type = $product->type;
1062 if (empty($label)) {
1063 $label = $product->label;
1067 $sql =
'INSERT INTO ' . MAIN_DB_PREFIX .
'facture_fourn_det_rec (';
1068 $sql .=
'fk_facture_fourn';
1069 $sql .=
', fk_product';
1072 $sql .=
', description';
1076 $sql .=
', remise_percent';
1077 $sql .=
', fk_remise_except';
1078 $sql .=
', vat_src_code';
1080 $sql .=
', localtax1_tx';
1081 $sql .=
', localtax1_type';
1082 $sql .=
', localtax2_tx';
1083 $sql .=
', localtax2_type';
1084 $sql .=
', total_ht';
1085 $sql .=
', total_tva';
1086 $sql .=
', total_localtax1';
1087 $sql .=
', total_localtax2';
1088 $sql .=
', total_ttc';
1089 $sql .=
', product_type';
1090 $sql .=
', date_start';
1091 $sql .=
', date_end';
1092 $sql .=
', info_bits';
1093 $sql .=
', special_code';
1095 $sql .=
', fk_unit';
1096 $sql .=
', fk_user_author';
1097 $sql .=
', fk_multicurrency, multicurrency_code, multicurrency_subprice, multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc';
1098 $sql .=
') VALUES (';
1099 $sql .=
' ' . (int) $facid;
1100 $sql .=
', ' . (!empty($fk_product) ? ((int) $fk_product) :
'null');
1101 $sql .=
', ' . (!empty($ref) ?
"'" . $this->db->escape($ref) .
"'" :
'null');
1102 $sql .=
', ' . (!empty($label) ?
"'" . $this->db->escape($label) .
"'" :
'null');
1103 $sql .=
", '" . $this->db->escape($desc) .
"'";
1107 $sql .=
', ' .
price2num($remise_percent);
1109 $sql .=
", '" . $this->db->escape($vat_src_code) .
"'";
1112 $sql .=
", '" . $this->db->escape(isset($localtaxes_type[0]) ? $localtaxes_type[0] :
'') .
"'";
1114 $sql .=
", '" . $this->db->escape(isset($localtaxes_type[2]) ? $localtaxes_type[2] :
'') .
"'";
1117 $sql .=
', ' .
price2num($total_localtax1);
1118 $sql .=
', ' .
price2num($total_localtax2);
1120 $sql .=
', ' . (int) $product_type;
1122 $sql .=
', ' . ($date_end > 0 ? (int) $date_end :
'NULL');
1123 $sql .=
', ' . (int) $info_bits;
1124 $sql .=
', ' . (int) $special_code;
1125 $sql .=
', ' . (int) $rang;
1126 $sql .=
', ' . ($fk_unit ? (int) $fk_unit :
'NULL');
1127 $sql .=
', ' . (int) $user->id;
1128 $sql .=
', ' . (int) $this->fk_multicurrency;
1129 $sql .=
", '" . $this->db->escape($this->multicurrency_code) .
"'";
1130 $sql .=
', ' .
price2num($pu_ht_devise,
'CU');
1131 $sql .=
', ' .
price2num($multicurrency_total_ht,
'CT');
1132 $sql .=
', ' .
price2num($multicurrency_total_tva,
'CT');
1133 $sql .=
', ' .
price2num($multicurrency_total_ttc,
'CT');
1136 dol_syslog(get_class($this).
'::addline', LOG_DEBUG);
1137 if ($this->db->query($sql)) {
1138 $lineId = $this->db->last_insert_id(MAIN_DB_PREFIX.
'facture_fourn_det_rec');
1141 $this->db->commit();
1144 $this->db->rollback();
1145 $this->error = $this->db->lasterror();
1178 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)
1183 $this->error =
'ErrorLineIDDoesNotMatchWithObjectID';
1189 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);
1190 include_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
1198 $fk_product = empty($fk_product) ? 0 : $fk_product;
1199 $label = empty($label) ?
'' : $label;
1200 $remise_percent = empty($remise_percent) ? 0 :
price2num($remise_percent);
1202 $info_bits = empty($info_bits) ? 0 : $info_bits;
1205 $pu_ht_devise =
price2num($pu_ht_devise);
1207 if (!preg_match(
'/\((.*)\)/', (
string) $txtva)) {
1211 $txlocaltax1 = empty($txlocaltax1) ? 0 :
price2num($txlocaltax1);
1212 $txlocaltax2 = empty($txlocaltax2) ? 0 :
price2num($txlocaltax2);
1213 $this->multicurrency_total_ht = empty($this->multicurrency_total_ht) ? 0 : $this->multicurrency_total_ht;
1214 $this->multicurrency_total_tva = empty($this->multicurrency_total_tva) ? 0 : $this->multicurrency_total_tva;
1215 $this->multicurrency_total_ttc = empty($this->multicurrency_total_ttc) ? 0 : $this->multicurrency_total_ttc;
1217 $pu = ($price_base_type ==
'HT' ? $pu_ht : $pu_ttc);
1229 if (preg_match(
'/\((.*)\)/', $txtva, $reg)) {
1230 $vat_src_code = $reg[1];
1231 $txtva = preg_replace(
'/\s*\(.*\)/',
'', $txtva);
1234 $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);
1236 $total_ht = $tabprice[0];
1237 $total_tva = $tabprice[1];
1238 $total_ttc = $tabprice[2];
1239 $total_localtax1 = $tabprice[9];
1240 $total_localtax2 = $tabprice[10];
1241 $pu_ht = $tabprice[3];
1242 $pu_tva = $tabprice[4];
1243 $pu_ttc = $tabprice[5];
1246 $multicurrency_total_ht = $tabprice[16];
1247 $multicurrency_total_tva = $tabprice[17];
1248 $multicurrency_total_ttc = $tabprice[18];
1249 $pu_ht_devise = $tabprice[19];
1251 $product_type = $type;
1253 $product =
new Product($this->db);
1254 $result = $product->fetch($fk_product);
1255 $product_type = $product->type;
1258 $sql =
'UPDATE ' . MAIN_DB_PREFIX .
'facture_fourn_det_rec SET';
1259 $sql .=
' fk_facture_fourn = ' . ((int) $facid);
1260 $sql .=
', fk_product = ' . ($fk_product > 0 ? ((int) $fk_product) :
'null');
1261 $sql .=
", ref = '" . $this->db->escape($ref) .
"'";
1262 $sql .=
", label = '" . $this->db->escape($label) .
"'";
1263 $sql .=
", description = '" . $this->db->escape($desc) .
"'";
1264 $sql .=
', pu_ht = ' .
price2num($pu_ht);
1266 $sql .=
", remise_percent = '" .
price2num($remise_percent) .
"'";
1267 $sql .=
", vat_src_code = '" . $this->db->escape($vat_src_code) .
"'";
1268 $sql .=
', tva_tx = ' .
price2num($txtva);
1269 $sql .=
', localtax1_tx = ' . (float) $txlocaltax1;
1270 $sql .=
", localtax1_type = '" . $this->db->escape($localtaxes_type[0]) .
"'";
1271 $sql .=
', localtax2_tx = ' . (float) $txlocaltax2;
1272 $sql .=
", localtax2_type = '" . $this->db->escape($localtaxes_type[2]) .
"'";
1273 $sql .=
", total_ht = '" .
price2num($total_ht) .
"'";
1274 $sql .=
", total_tva = '" .
price2num($total_tva) .
"'";
1275 $sql .=
", total_localtax1 = '" .
price2num($total_localtax1) .
"'";
1276 $sql .=
", total_localtax2 = '" .
price2num($total_localtax2) .
"'";
1277 $sql .=
", total_ttc = '" .
price2num($total_ttc) .
"'";
1278 $sql .=
', product_type = ' . (int) $product_type;
1280 $sql .=
', date_end = ' . (empty($date_end) ?
'NULL' : (int) $date_end);
1281 $sql .=
', info_bits = ' . (int) $info_bits;
1282 $sql .=
', special_code = ' . (int) $special_code;
1283 $sql .=
', rang = ' . (int) $rang;
1284 $sql .=
', fk_unit = ' . ($fk_unit ?
"'" . $this->db->escape($fk_unit) .
"'" :
'null');
1285 $sql .=
', fk_user_modif = ' . (int) $user->id;
1286 $sql .=
', multicurrency_subprice = '.price2num($pu_ht_devise);
1287 $sql .=
', multicurrency_total_ht = '.price2num($multicurrency_total_ht);
1288 $sql .=
', multicurrency_total_tva = '.price2num($multicurrency_total_tva);
1289 $sql .=
', multicurrency_total_ttc = '.price2num($multicurrency_total_ttc);
1290 $sql .=
' WHERE rowid = ' . (int) $rowid;
1292 dol_syslog(get_class($this).
'::updateline', LOG_DEBUG);
1293 if ($this->db->query($sql)) {
1298 $this->error = $this->db->lasterror();
1324 if (empty($this->date_when)) {
1327 return dol_time_plus_duree((
int) $this->date_when, $this->frequency, $this->unit_frequency, 1);
1338 if ($this->nb_gen_max > 0 && ($this->nb_gen_done >= $this->nb_gen_max)) {
1353 return ($this->
isMaxNbGenReached() ?
'<strike>' :
'').$ret.($this->isMaxNbGenReached() ?
'</strike>' :
'');
1368 global
$conf, $langs, $db, $user, $hookmanager;
1374 $langs->loadLangs(array(
'main',
'bills'));
1378 $today =
dol_mktime(23, 59, 59, $tmparray[
'mon'], $tmparray[
'mday'], $tmparray[
'year']);
1380 dol_syslog(
'createRecurringInvoices restrictioninvoiceid=' .$restrictioninvoiceid.
' forcevalidation=' .$forcevalidation);
1382 $sql =
'SELECT rowid FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec';
1383 $sql .=
' WHERE frequency > 0';
1384 $sql .=
" AND (date_when IS NULL OR date_when <= '".$this->db->idate($today).
"')";
1385 $sql .=
' AND (nb_gen_done < nb_gen_max OR nb_gen_max = 0)';
1386 $sql .=
' AND suspended = 0';
1387 $sql .=
' AND entity = '. (int)
$conf->entity;
1388 if ($restrictioninvoiceid > 0) {
1389 $sql .=
' AND rowid = '. (int) $restrictioninvoiceid;
1391 $sql .= $this->db->order(
'entity',
'ASC');
1393 $sql .= $this->db->plimit(
getDolGlobalInt(
'NB_REC_FACT_GEN_BY_CALL'));
1396 $parameters = array(
1397 'restrictioninvoiceid' => $restrictioninvoiceid,
1398 'forcevalidation' => $forcevalidation,
1400 $reshook = $hookmanager->executeHooks(
'beforeCreationOfRecurringInvoices', $parameters, $sql);
1402 $resql = $this->db->query($sql);
1405 $num = $this->db->num_rows($resql);
1408 $this->output .= $langs->trans(
'FoundXQualifiedRecurringInvoiceTemplate', $num).
"\n";
1410 $this->output .= $langs->trans(
'NoQualifiedRecurringInvoiceTemplateFound');
1413 $saventity =
$conf->entity;
1417 $line = $this->db->fetch_object($resql);
1421 $invoiceidgenerated = 0;
1423 $new_fac_fourn =
null;
1425 $laststep =
"Fetch {$line->rowid}";
1426 $facturerec->fetch($line->rowid);
1428 if ($facturerec->id > 0) {
1430 $conf->entity = $facturerec->entity;
1432 dol_syslog(
'createRecurringInvoices Process invoice template id=' .$facturerec->id.
', ref=' .$facturerec->ref.
', entity=' .$facturerec->entity);
1435 $new_fac_fourn->fac_rec = $facturerec->id;
1436 $new_fac_fourn->fk_fac_rec_source = $facturerec->id;
1439 $new_fac_fourn->subtype = $facturerec->subtype;
1442 $new_fac_fourn->date = empty($facturerec->date_when) ? $now : $facturerec->date_when;
1443 $new_fac_fourn->socid = $facturerec->socid;
1444 $new_fac_fourn->lines = $facturerec->lines;
1445 $new_fac_fourn->ref_supplier = $facturerec->ref_supplier;
1446 $new_fac_fourn->model_pdf = $facturerec->model_pdf;
1447 $new_fac_fourn->fk_project = $facturerec->fk_project;
1448 $new_fac_fourn->label = $facturerec->label;
1449 $new_fac_fourn->libelle = $facturerec->label;
1451 $invoiceidgenerated = $new_fac_fourn->create($user);
1452 $laststep =
"Create invoiceidgenerated $invoiceidgenerated";
1453 if ($invoiceidgenerated <= 0) {
1457 if (!$error && ($facturerec->auto_validate || $forcevalidation)) {
1458 $result = $new_fac_fourn->validate($user);
1459 $laststep =
"Validate by user {$user->login}";
1466 if (!$error && $facturerec->generate_pdf) {
1468 $laststep =
"Refresh ".$new_fac_fourn->id;
1469 $new_fac_fourn->fetch($new_fac_fourn->id);
1470 $laststep =
"GenerateDocument ".$new_fac_fourn->id;
1471 $result = $new_fac_fourn->generateDocument($facturerec->model_pdf, $langs);
1479 $this->error =
'Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity.
"\n";
1480 $this->errors[] =
'Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity;
1481 dol_syslog(
'createRecurringInvoices Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity);
1484 if (!$error && $invoiceidgenerated >= 0) {
1485 $facturerec->nb_gen_done++;
1486 $facturerec->date_last_gen =
dol_now();
1487 $nextDate = $facturerec->getNextDate();
1488 $facturerec->date_when = (($nextDate ===
false) ?
null : $nextDate);
1489 $facturerec->update($user);
1490 $this->db->commit(
'createRecurringInvoices Process invoice template id=' .$facturerec->id.
', title=' .$facturerec->title);
1491 dol_syslog(
'createRecurringInvoices Process invoice template ' .$facturerec->title.
' is finished with a success generation');
1493 $this->output .= $langs->trans(
'InvoiceGeneratedFromTemplate', $new_fac_fourn->ref, $facturerec->title).
"\n";
1495 $this->db->rollback(
'createRecurringInvoices Process invoice template error='.$error.
' invoiceidgenerated='.$invoiceidgenerated.
' LastStep='.$laststep.
' id=' .$facturerec->id.
', title=' .$facturerec->title);
1498 $parameters = array(
1501 'errorCount' => $error,
1502 'invoiceidgenerated' => $invoiceidgenerated,
1503 'facturerec' => $facturerec,
1507 $reshook = $hookmanager->executeHooks(
'afterCreationOfRecurringInvoice', $parameters, $new_fac_fourn);
1512 $conf->entity = $saventity;
1514 dol_print_error($this->db);
1517 $this->output = trim($this->output);
1519 return $error ? $error : 0;
1534 public function getNomUrl($withpicto = 0, $option =
'', $max = 0, $short = 0, $moretitle =
'', $notooltip = 0, $save_lastsearch_value = -1)
1536 global $langs, $hookmanager;
1540 $label =
'<u>'.$langs->trans(
'RepeatableInvoice').
'</u>';
1541 if (!empty($this->
ref)) {
1542 $label .=
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
1544 if ($this->frequency > 0) {
1545 $label .=
'<br><b>'.$langs->trans(
'Frequency').
':</b> '.$langs->trans(
'FrequencyPer_'.$this->unit_frequency, $this->frequency);
1547 if (!empty($this->date_last_gen)) {
1548 $label .=
'<br><b>'.$langs->trans(
'DateLastGeneration').
':</b> '.
dol_print_date($this->date_last_gen,
'dayhour');
1550 if ($this->frequency > 0) {
1551 if (!empty($this->date_when)) {
1552 $label .=
'<br><b>'.$langs->trans(
'NextDateToExecution').
':</b> ';
1553 $label .= (empty($this->suspended) ?
'' :
'<strike>').
dol_print_date($this->date_when,
'day').(empty($this->suspended) ?
'' :
'</strike>');
1554 if (!empty($this->suspended)) {
1555 $label .=
' ('.$langs->trans(
'Disabled').
')';
1560 $url = DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.$this->id;
1566 if ($option !=
'nolink') {
1568 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
1569 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
'PHP_SELF'])) {
1570 $add_save_lastsearch_values = 1;
1572 if ($add_save_lastsearch_values) {
1573 $url .=
'&save_lastsearch_values=1';
1577 $linkstart =
'<a href="'.$url.
'" title="'.
dol_escape_htmltag($label, 1).
'" class="classfortooltip">';
1580 $result .= $linkstart;
1582 $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);
1584 if ($withpicto != 2) {
1585 $result .= $this->ref;
1587 $result .= $linkend;
1589 $hookmanager->initHooks(array($this->element .
'dao'));
1590 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
1591 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
1593 $result = $hookmanager->resPrint;
1595 $result .= $hookmanager->resPrint;
1609 return $this->
LibStatut($this->frequency ? 1 : 0, $this->suspended, $mode, $alreadypaid, empty($this->
type) ? 0 : $this->type);
1624 public function LibStatut($recur, $status, $mode = 0, $alreadypaid = -1, $type = 0, $nbofopendirectdebitorcredittransfer = 0)
1628 $langs->load(
'bills');
1630 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1631 $statusType =
'status0';
1636 if ($status == self::STATUS_SUSPENDED) {
1637 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1639 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1642 if ($status == self::STATUS_SUSPENDED) {
1643 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1645 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1648 } elseif ($mode == 1) {
1651 if ($status == self::STATUS_SUSPENDED) {
1652 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1654 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1657 if ($status == self::STATUS_SUSPENDED) {
1658 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1660 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1663 } elseif ($mode == 2) {
1665 if ($status == self::STATUS_SUSPENDED) {
1666 $statusType =
'status6';
1667 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1669 $statusType =
'status4';
1670 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1673 if ($status == self::STATUS_SUSPENDED) {
1674 $statusType =
'status6';
1675 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1677 $statusType =
'status0';
1678 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1681 } elseif ($mode == 3) {
1684 if ($status == self::STATUS_SUSPENDED) {
1685 $statusType =
'status6';
1686 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1688 $statusType =
'status4';
1689 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1692 if ($status == self::STATUS_SUSPENDED) {
1693 $statusType =
'status6';
1694 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1696 $statusType =
'status0';
1697 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1700 } elseif ($mode == 4) {
1703 if ($status == self::STATUS_SUSPENDED) {
1704 $statusType =
'status6';
1705 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1707 $statusType =
'status4';
1708 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1711 if ($status == self::STATUS_SUSPENDED) {
1712 $statusType =
'status6';
1713 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1715 $statusType =
'status0';
1716 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1719 } elseif ($mode == 5 || $mode == 6) {
1725 if ($status == self::STATUS_SUSPENDED) {
1726 $statusType =
'status6';
1727 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1729 $statusType =
'status4';
1730 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1733 if ($status == self::STATUS_SUSPENDED) {
1734 $statusType =
'status6';
1735 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1737 $statusType =
'status0';
1738 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1743 $labelStatusShort = $labelStatus;
1745 return dolGetStatus($labelStatus, $labelStatusShort,
'', $statusType, $mode);
1758 global $user, $langs,
$conf;
1762 $nownotime =
dol_mktime(0, 0, 0, $arraynow[
'mon'], $arraynow[
'mday'], $arraynow[
'year']);
1768 $sql =
'SELECT rowid';
1769 $sql .=
' FROM ' .MAIN_DB_PREFIX.
'product';
1770 $sql .=
' WHERE entity IN (' .getEntity(
'product').
')';
1771 $sql .= $this->db->plimit(100);
1773 $resql = $this->db->query($sql);
1775 $num_prods = $this->db->num_rows($resql);
1777 while ($i < $num_prods) {
1779 $row = $this->db->fetch_row($resql);
1780 $prodids[$i] = $row[0];
1786 $this->
ref =
'SPECIMEN';
1787 $this->title =
'SPECIMEN';
1788 $this->specimen = 1;
1790 $this->
date = $nownotime;
1791 $this->date_lim_reglement = $nownotime + 3600 * 24 * 30;
1792 $this->cond_reglement_id = 1;
1793 $this->cond_reglement_code =
'RECEP';
1795 $this->mode_reglement_id = 0;
1796 $this->mode_reglement_code =
'';
1797 $this->note_public =
'This is a comment (public)';
1798 $this->note_private =
'This is a comment (private)';
1799 $this->note =
'This is a comment (private)';
1800 $this->fk_incoterms = 0;
1801 $this->location_incoterms =
'';
1803 if (empty($option) || $option !=
'nolines') {
1807 while ($xnbp < $nbp) {
1809 $line->desc = $langs->trans(
'Description').
' ' .$xnbp;
1811 $line->subprice = 100;
1812 $line->tva_tx = 19.6;
1813 $line->localtax1_tx = 0;
1814 $line->localtax2_tx = 0;
1815 $line->remise_percent = 0;
1817 $prodid = mt_rand(1, $num_prods);
1818 $line->fk_product = $prodids[$prodid];
1820 $line->total_ht = -100;
1821 $line->total_ttc = -119.6;
1822 $line->total_tva = -19.6;
1823 } elseif ($xnbp == 2) {
1824 $line->subprice = -100;
1825 $line->total_ht = -100;
1826 $line->total_ttc = -119.6;
1827 $line->total_tva = -19.6;
1828 $line->remise_percent = 0;
1829 } elseif ($xnbp == 3) {
1830 $prodid = mt_rand(1, $num_prods);
1831 $line->fk_product = $prodids[$prodid];
1832 $line->total_ht = 50;
1833 $line->total_ttc = 59.8;
1834 $line->total_tva = 9.8;
1835 $line->remise_percent = 50;
1837 $prodid = mt_rand(1, $num_prods);
1838 $line->fk_product = $prodids[$prodid];
1839 $line->total_ht = 100;
1840 $line->total_ttc = 119.6;
1841 $line->total_tva = 19.6;
1842 $line->remise_percent = 00;
1845 $this->lines[$xnbp] = $line;
1848 $this->total_ht += $line->total_ht;
1849 $this->total_tva += $line->total_tva;
1850 $this->total_ttc += $line->total_ttc;
1852 $this->revenuestamp = 0;
1856 $line->desc = $langs->trans(
'Description').
' (offered line)';
1858 $line->subprice = 100;
1859 $line->tva_tx = 19.6;
1860 $line->localtax1_tx = 0;
1861 $line->localtax2_tx = 0;
1862 $line->remise_percent = 100;
1863 $line->total_ht = 0;
1864 $line->total_ttc = 0;
1865 $line->total_tva = 0;
1866 $prodid = mt_rand(1, $num_prods);
1867 $line->fk_product = $prodids[$prodid];
1869 $this->lines[$xnbp] = $line;
1873 $this->usenewprice = 0;
1904 if (!$this->table_element) {
1905 dol_syslog(get_class($this).
'::setFrequencyAndUnit was called on object with property table_element not defined', LOG_ERR);
1909 if (!empty($frequency) && empty($unit)) {
1910 dol_syslog(get_class($this).
'::setFrequencyAndUnit was called on object with params frequency defined but unit not defined', LOG_ERR);
1914 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1915 $sql .=
" SET frequency = ".($frequency ? ((int) $frequency) :
"NULL");
1916 if (!empty($unit)) {
1917 $sql .=
", unit_frequency = '".$this->db->escape($unit).
"'";
1919 $sql .=
" WHERE rowid = ".((int) $this->
id);
1921 dol_syslog(get_class($this).
'::setFrequencyAndUnit', LOG_DEBUG);
1923 if ($this->db->query($sql)) {
1924 $this->frequency = $frequency;
1925 if (!empty($unit)) {
1926 $this->unit_frequency = $unit;
1930 $this->error = $this->db->lasterror();
1944 if (!$this->table_element) {
1945 dol_syslog(get_class($this).
'::setNextDate was called on object with property table_element not defined', LOG_ERR);
1948 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1949 $sql .=
" SET date_when = " .($date ?
"'".$this->db->idate($date).
"'" :
"NULL");
1950 if ($increment_nb_gen_done > 0) {
1951 $sql .=
", nb_gen_done = nb_gen_done + 1";
1953 $sql .=
" WHERE rowid = " . (int) $this->
id;
1955 dol_syslog(get_class($this).
'::setNextDate', LOG_DEBUG);
1957 if ($this->db->query($sql)) {
1958 $this->date_when = $date;
1959 if ($increment_nb_gen_done > 0) {
1960 $this->nb_gen_done++;
1964 $this->error = $this->db->lasterror();
1977 if (!$this->table_element) {
1978 dol_syslog(get_class($this).
'::setMaxPeriod was called on object with property table_element not defined', LOG_ERR);
1986 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1987 $sql .=
" SET nb_gen_max = ". (int) $nb;
1988 $sql .=
" WHERE rowid = " . (int) $this->
id;
1990 dol_syslog(get_class($this).
'::setMaxPeriod', LOG_DEBUG);
1992 if ($this->db->query($sql)) {
1993 $this->nb_gen_max = $nb;
1996 dol_print_error($this->db);
2009 if (!$this->table_element) {
2010 dol_syslog(get_class($this).
'::setAutoValidate was called on object with property table_element not defined', LOG_ERR);
2014 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2015 $sql .=
" SET auto_validate = ".((int) $validate);
2016 $sql .=
" WHERE rowid = " . (int) $this->
id;
2018 dol_syslog(get_class($this).
'::setAutoValidate', LOG_DEBUG);
2020 if ($this->db->query($sql)) {
2021 $this->auto_validate = $validate;
2024 dol_print_error($this->db);
2037 if (!$this->table_element) {
2038 dol_syslog(get_class($this).
'::setGeneratePdf was called on object with property table_element not defined', LOG_ERR);
2042 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2043 $sql .=
" SET generate_pdf = ". (int) $validate;
2044 $sql .=
" WHERE rowid = " . (int) $this->
id;
2046 dol_syslog(get_class($this).
'::setGeneratePdf', LOG_DEBUG);
2048 if ($this->db->query($sql)) {
2049 $this->generate_pdf = $validate;
2052 dol_print_error($this->db);
2065 if (!$this->table_element) {
2066 dol_syslog(get_class($this).
'::setModelPdf was called on object with property table_element not defined', LOG_ERR);
2070 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2071 $sql .=
" SET modelpdf = '".$this->db->escape($model).
"'";
2072 $sql .=
" WHERE rowid = " . (int) $this->
id;
2074 dol_syslog(get_class($this).
'::setModelPdf', LOG_DEBUG);
2076 if ($this->db->query($sql)) {
2077 $this->model_pdf = $model;
2080 dol_print_error($this->db);
$propal type
'integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter[:Sortfield]]]',...
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)
Add a delay to a date.
$date_start
Variables from include:
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...
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
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.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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_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)
calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocaltax1_rate, $uselocaltax2_rate, $notused, $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.
print $langs trans('Date')." left Ref 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 Paid right PaymentTypeShortLIQ right SELECT p pos_change as p datep as date