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';
45 const TRIGGER_PREFIX =
'SUPPLIERBILLREC';
49 public $element =
'invoice_supplier_rec';
54 public $table_element =
'facture_fourn_rec';
59 public $table_element_line =
'facture_fourn_det_rec';
64 public $fk_element =
'fk_facture_fourn';
69 public $picto =
'bill';
130 public $vat_src_code;
156 public $mode_reglement_id;
160 public $mode_reglement_code;
164 public $cond_reglement_code;
168 public $cond_reglement_doc;
172 public $cond_reglement_id;
177 public $date_lim_reglement;
182 public $usenewprice = 0;
190 public $unit_frequency;
198 public $date_last_gen;
213 public $auto_validate;
217 public $generate_pdf;
223 public $lines = array();
266 public $fields = array(
267 'rowid' => array(
'type' =>
'integer',
'label' =>
'TechnicalID',
'enabled' => 1,
'visible' => -1,
'notnull' => 1,
'position' => 10),
268 'titre' => array(
'type' =>
'varchar(100)',
'label' =>
'Titre',
'enabled' => 1,
'showoncombobox' => 1,
'visible' => -1,
'position' => 15),
269 'ref_supplier' => array(
'type' =>
'varchar(180)',
'label' =>
'RefSupplier',
'enabled' => 1,
'showoncombobox' => 1,
'visible' => -1,
'position' => 20),
270 'entity' => array(
'type' =>
'integer',
'label' =>
'Entity',
'default' =>
'1',
'enabled' => 1,
'visible' => -2,
'notnull' => 1,
'position' => 25,
'index' => 1),
271 'fk_soc' => array(
'type' =>
'integer:Societe:societe/class/societe.class.php',
'label' =>
'ThirdParty',
'enabled' =>
'isModEnabled("societe")',
'visible' => -1,
'notnull' => 1,
'position' => 30),
272 'datec' => array(
'type' =>
'datetime',
'label' =>
'DateCreation',
'enabled' => 1,
'visible' => -1,
'position' => 35),
273 'tms' => array(
'type' =>
'timestamp',
'label' =>
'DateModification',
'enabled' => 1,
'visible' => -1,
'notnull' => 1,
'position' => 40),
274 'suspended' => array(
'type' =>
'integer',
'label' =>
'Suspended',
'enabled' => 1,
'visible' => -1,
'position' => 225),
275 'libelle' => array(
'type' =>
'varchar(100)',
'label' =>
'Libelle',
'enabled' => 1,
'showoncombobox' => 0,
'visible' => -1,
'position' => 15),
277 'localtax1' => array(
'type' =>
'double(24,8)',
'label' =>
'Localtax1',
'enabled' => 1,
'visible' => -1,
'position' => 60,
'isameasure' => 1),
278 'localtax2' => array(
'type' =>
'double(24,8)',
'label' =>
'Localtax2',
'enabled' => 1,
'visible' => -1,
'position' => 65,
'isameasure' => 1),
279 'total_ht' => array(
'type' =>
'double(24,8)',
'label' =>
'Total',
'enabled' => 1,
'visible' => -1,
'position' => 70,
'isameasure' => 1),
280 'total_tva' => array(
'type' =>
'double(24,8)',
'label' =>
'Tva',
'enabled' => 1,
'visible' => -1,
'position' => 55,
'isameasure' => 1),
281 'total_ttc' => array(
'type' =>
'double(24,8)',
'label' =>
'Total ttc',
'enabled' => 1,
'visible' => -1,
'position' => 75,
'isameasure' => 1),
283 'fk_user_author' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'Fk user author',
'enabled' => 1,
'visible' => -1,
'position' => 80),
284 'fk_user_modif' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserModif',
'enabled' => 1,
'visible' => -2,
'notnull' => -1,
'position' => 210),
285 '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),
286 'fk_account' => array(
'type' =>
'integer',
'label' =>
'Fk account',
'enabled' =>
'isModEnabled("bank")',
'visible' => -1,
'position' => 175),
287 'fk_cond_reglement' => array(
'type' =>
'integer',
'label' =>
'Fk cond reglement',
'enabled' => 1,
'visible' => -1,
'position' => 90),
288 'fk_mode_reglement' => array(
'type' =>
'integer',
'label' =>
'Fk mode reglement',
'enabled' => 1,
'visible' => -1,
'position' => 95),
289 'date_lim_reglement' => array(
'type' =>
'date',
'label' =>
'Date lim reglement',
'enabled' => 1,
'visible' => -1,
'position' => 100),
291 'note_private' => array(
'type' =>
'html',
'label' =>
'NotePublic',
'enabled' => 1,
'visible' => 0,
'position' => 105),
292 'note_public' => array(
'type' =>
'html',
'label' =>
'NotePrivate',
'enabled' => 1,
'visible' => 0,
'position' => 110),
293 'modelpdf' => array(
'type' =>
'varchar(255)',
'label' =>
'Modelpdf',
'enabled' => 1,
'visible' => -1,
'position' => 115),
295 'fk_multicurrency' => array(
'type' =>
'integer',
'label' =>
'Fk multicurrency',
'enabled' => 1,
'visible' => -1,
'position' => 180),
296 'multicurrency_code' => array(
'type' =>
'varchar(255)',
'label' =>
'Multicurrency code',
'enabled' => 1,
'visible' => -1,
'position' => 185),
297 'multicurrency_tx' => array(
'type' =>
'double(24,8)',
'label' =>
'Multicurrency tx',
'enabled' => 1,
'visible' => -1,
'position' => 190,
'isameasure' => 1),
298 'multicurrency_total_ht' => array(
'type' =>
'double(24,8)',
'label' =>
'Multicurrency total ht',
'enabled' => 1,
'visible' => -1,
'position' => 195,
'isameasure' => 1),
299 'multicurrency_total_tva' => array(
'type' =>
'double(24,8)',
'label' =>
'Multicurrency total tva',
'enabled' => 1,
'visible' => -1,
'position' => 200,
'isameasure' => 1),
300 'multicurrency_total_ttc' => array(
'type' =>
'double(24,8)',
'label' =>
'Multicurrency total ttc',
'enabled' => 1,
'visible' => -1,
'position' => 205,
'isameasure' => 1),
302 'usenewprice' => array(
'type' =>
'integer',
'label' =>
'UseNewPrice',
'enabled' => 1,
'visible' => 0,
'position' => 155),
303 'frequency' => array(
'type' =>
'integer',
'label' =>
'Frequency',
'enabled' => 1,
'visible' => -1,
'position' => 150),
304 'unit_frequency' => array(
'type' =>
'varchar(2)',
'label' =>
'Unit frequency',
'enabled' => 1,
'visible' => -1,
'position' => 125),
306 'date_when' => array(
'type' =>
'datetime',
'label' =>
'Date when',
'enabled' => 1,
'visible' => -1,
'position' => 130),
307 'date_last_gen' => array(
'type' =>
'datetime',
'label' =>
'Date last gen',
'enabled' => 1,
'visible' => -1,
'position' => 135),
308 'nb_gen_done' => array(
'type' =>
'integer',
'label' =>
'Nb gen done',
'enabled' => 1,
'visible' => -1,
'position' => 140),
309 'nb_gen_max' => array(
'type' =>
'integer',
'label' =>
'Nb gen max',
'enabled' => 1,
'visible' => -1,
'position' => 145),
310 'revenuestamp' => array(
'type' =>
'double(24,8)',
'label' =>
'RevenueStamp',
'enabled' => 1,
'visible' => -1,
'position' => 160,
'isameasure' => 1),
311 'auto_validate' => array(
'type' =>
'integer',
'label' =>
'Auto validate',
'enabled' => 1,
'visible' => -1,
'position' => 165),
312 'generate_pdf' => array(
'type' =>
'integer',
'label' =>
'Generate pdf',
'enabled' => 1,
'visible' => -1,
'position' => 170),
316 const STATUS_NOTSUSPENDED = 0;
317 const STATUS_SUSPENDED = 1;
340 public function create($user, $facFournId, $notrigger = 0, $onlylines = array())
348 $this->titre = empty($this->titre) ?
'' : $this->titre;
349 $this->title = empty($this->title) ?
'' : $this->title;
351 $this->
ref = $this->$keyforref;
353 $this->ref_supplier = empty($this->ref_supplier) ?
'' : $this->ref_supplier;
355 $this->usenewprice = empty($this->usenewprice) ? 0 : $this->usenewprice;
356 $this->suspended = empty($this->suspended) ? 0 : $this->suspended;
358 if (empty($this->frequency)) {
359 $this->frequency = 0;
360 $this->date_when =
null;
362 $this->frequency = abs($this->frequency);
363 $this->nb_gen_done = 0;
364 $this->nb_gen_max = empty($this->nb_gen_max) ? 0 : $this->nb_gen_max;
365 $this->auto_validate = empty($this->auto_validate) ? 0 : $this->auto_validate;
366 $this->generate_pdf = empty($this->generate_pdf) ? 0 : $this->generate_pdf;
372 $result = $facfourn_src->fetch($facFournId);
374 $sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'facture_fourn_rec (';
377 $sql .=
', ref_supplier';
381 $sql .=
', suspended';
383 $sql .=
', total_ttc';
384 $sql .=
', fk_user_author';
385 $sql .=
', fk_projet';
386 $sql .=
', fk_account';
387 $sql .=
', fk_cond_reglement';
388 $sql .=
', fk_mode_reglement';
389 $sql .=
', date_lim_reglement';
390 $sql .=
', note_private';
391 $sql .=
', note_public';
392 $sql .=
', modelpdf';
393 $sql .=
', fk_multicurrency';
394 $sql .=
', multicurrency_code';
395 $sql .=
', multicurrency_tx';
396 $sql .=
', usenewprice';
397 $sql .=
', frequency';
398 $sql .=
', unit_frequency';
399 $sql .=
', date_when';
400 $sql .=
', date_last_gen';
401 $sql .=
', nb_gen_done';
402 $sql .=
', nb_gen_max';
403 $sql .=
', auto_validate';
404 $sql .=
', generate_pdf';
405 $sql .=
') VALUES (';
406 $sql .=
"'".$this->db->escape($this->title).
"'";
407 $sql .=
", ".($this->subtype ?
"'".$this->db->escape((
string) $this->subtype).
"'" :
"null");
408 $sql .=
", '".$this->db->escape($this->ref_supplier).
"'";
409 $sql .=
", ".((int)
$conf->entity);
410 $sql .=
", ".((int) $facfourn_src->socid);
411 $sql .=
", '".$this->db->idate($now).
"'";
412 $sql .=
", ".((int) $this->suspended);
413 $sql .=
", '".$this->db->escape($this->libelle).
"'";
414 $sql .=
", " .(!empty($facfourn_src->total_ttc) ? (float) $facfourn_src->total_ttc :
'0');
415 $sql .=
", " .((int) $user->id);
416 $sql .=
", " .(!empty($this->fk_project) ? ((int) $this->fk_project) :
'NULL');
417 $sql .=
", " .(!empty($facfourn_src->fk_account) ? ((int) $facfourn_src->fk_account) :
'NULL');
418 $sql .=
", " .($this->cond_reglement_id > 0 ? (int) $this->cond_reglement_id :
'NULL');
419 $sql .=
", " .($this->mode_reglement_id > 0 ? (int) $this->mode_reglement_id :
'NULL');
420 $sql .=
", ".($facfourn_src->date_echeance > 0 ?
"'".$this->db->idate($facfourn_src->date_echeance).
"'" :
'NULL');
421 $sql .=
", " .(!empty($this->note_private) ?
"'".$this->db->escape($this->note_private).
"'" :
'NULL');
422 $sql .=
", " .(!empty($this->note_public) ?
"'".$this->db->escape($this->note_public).
"'" :
'NULL');
423 $sql .=
", " .(!empty($this->model_pdf) ?
"'".$this->db->escape($this->model_pdf).
"'" :
'NULL');
424 $sql .=
", " . (int) $facfourn_src->fk_multicurrency;
425 $sql .=
", '".$this->db->escape($facfourn_src->multicurrency_code).
"'";
426 $sql .=
", " . (float) $facfourn_src->multicurrency_tx;
427 $sql .=
", " . (int) $this->usenewprice;
428 $sql .=
", " . (int) $this->frequency;
429 $sql .=
", '".$this->db->escape($this->unit_frequency).
"'";
430 $sql .=
", " .(!empty($this->date_when) ?
"'".$this->db->idate($this->date_when).
"'" :
'NULL');
431 $sql .=
", " .(!empty($this->date_last_gen) ?
"'".$this->db->idate($this->date_last_gen).
"'" :
'NULL');
432 $sql .=
", " . (int) $this->nb_gen_done;
433 $sql .=
", " . (int) $this->nb_gen_max;
434 $sql .=
", " . (int) $this->auto_validate;
435 $sql .=
", " . (int) $this->generate_pdf;
438 if ($this->db->query($sql)) {
439 $this->
id = $this->db->last_insert_id(MAIN_DB_PREFIX.
'facture_fourn_rec');
442 $this->fk_multicurrency = $facfourn_src->fk_multicurrency;
444 $this->multicurrency_code = $facfourn_src->multicurrency_code;
445 $this->multicurrency_tx = $facfourn_src->multicurrency_tx;
448 $num = count($facfourn_src->lines);
449 for ($i = 0; $i < $num; $i++) {
450 $facfourn_line = $facfourn_src->lines[$i];
451 '@phan-var-force SupplierInvoiceLine $facfourn_line';
452 if (!empty($onlylines) && !in_array($facfourn_line->id, $onlylines)) {
456 $tva_tx = $facfourn_line->tva_tx;
457 if (!empty($facfourn_line->vat_src_code) && !preg_match(
'/\(/', (
string) $tva_tx)) {
458 $tva_tx .=
' ('.$facfourn_line->vat_src_code.
')';
461 $result_insert = $this->
addline(
462 $facfourn_line->fk_product,
463 $facfourn_line->ref_supplier,
464 $facfourn_line->product_label,
465 $facfourn_line->desc ? $facfourn_line->desc : $facfourn_line->description,
466 $facfourn_line->pu_ht,
467 $facfourn_line->pu_ttc,
469 $facfourn_line->remise_percent,
471 $facfourn_line->localtax1_tx,
472 $facfourn_line->localtax2_tx,
474 $facfourn_line->product_type,
475 $facfourn_line->date_start,
476 $facfourn_line->date_end,
477 $facfourn_line->info_bits,
478 $facfourn_line->special_code,
479 $facfourn_line->rang,
480 $facfourn_line->fk_unit
483 if ($result_insert < 0) {
488 $result2 = $objectline->fetch($result_insert);
491 if (method_exists($facfourn_line,
'fetch_optionals')) {
492 $facfourn_line->fetch_optionals($facfourn_line->id);
493 $objectline->array_options = $facfourn_line->array_options;
496 $result = $objectline->insertExtraFields();
500 } elseif ($result2 < 0) {
501 $this->errors[] = $objectline->error;
507 if (!empty($this->linkedObjectsIds) && empty($this->linked_objects)) {
508 $this->linked_objects = $this->linkedObjectsIds;
512 if (!$error && $this->
id && !empty($this->linked_objects) && is_array($this->linked_objects)) {
513 foreach ($this->linked_objects as $origin => $tmp_origin_id) {
514 if (is_array($tmp_origin_id)) {
515 foreach ($tmp_origin_id as $origin_id) {
518 $this->error = $this->db->lasterror();
523 $origin_id = $tmp_origin_id;
526 $this->error = $this->db->lasterror();
540 if (!$error && !$notrigger) {
542 $result = $this->
call_trigger(
'SUPPLIERBILLREC_CREATE', $user);
544 $this->db->rollback();
551 $this->db->rollback();
558 $this->error = $this->db->lasterror();
559 $this->db->rollback();
563 $this->db->rollback();
580 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"facture_fourn_rec SET";
581 $sql .=
" titre = '" . (!empty($this->title) ? $this->db->escape($this->title) :
"").
"'," ;
582 $sql .=
" subtype=".(isset($this->subtype) ? $this->db->escape((
string) $this->subtype) :
"null").
",";
583 $sql .=
" ref_supplier = '". (!empty($this->ref_supplier) ? $this->db->escape($this->ref_supplier) :
"").
"',";
584 $sql .=
" entity = ". (!empty($this->entity) ? ((int) $this->entity) : 1) .
',';
585 if (!empty($this->socid) && $this->socid > 0) {
586 $sql .=
" fk_soc = ". ((int) $this->socid).
',';
587 } elseif (!empty($this->fk_soc) && $this->fk_soc > 0) {
588 $sql .=
" fk_soc = ". ((int) $this->fk_soc).
',';
590 $sql .=
" suspended = ". (!empty($this->suspended) ? ((int) $this->suspended) : 0) .
',';
591 $sql .=
" libelle = ". (!empty($this->libelle) ?
"'".$this->db->escape($this->libelle).
"'" :
'NULL') .
",";
592 $sql .=
" vat_src_code = ". (!empty($this->vat_src_code) ?
"'".$this->db->escape($this->vat_src_code).
"'" :
'NULL') .
',';
593 $sql .=
" localtax1 = ". (!empty($this->localtax1) ? ((float) $this->localtax1) : 0.00) .
',';
594 $sql .=
" localtax2 = ". (!empty($this->localtax2) ? ((float) $this->localtax2) : 0.00) .
',';
595 $sql .=
" total_ht = ". (!empty($this->total_ht) ? ((float) $this->total_ht) : 0.00) .
',';
596 $sql .=
" total_tva = ". (!empty($this->total_tva) ? ((float) $this->total_tva) : 0.00) .
',';
597 $sql .=
" total_ttc = ". (!empty($this->total_ttc) ? ((float) $this->total_ttc) : 0.00) .
',';
598 $sql .=
" fk_user_modif = ". ((int) $user->id) .
',';
599 $sql .=
" fk_projet = ". (!empty($this->fk_project) ? ((int) $this->fk_project) :
'NULL') .
',';
600 $sql .=
" fk_account = ". (!empty($this->fk_account) ? ((int) $this->fk_account) :
'NULL') .
',';
601 $sql .=
" fk_mode_reglement = ". (!empty($this->mode_reglement_id) ? ((int) $this->mode_reglement_id) :
'NULL') .
',';
602 $sql .=
" fk_cond_reglement = ". (!empty($this->cond_reglement_id) ? ((int) $this->cond_reglement_id) :
'NULL') .
',';
603 $sql .=
" date_lim_reglement = ". (!empty($this->date_lim_reglement) ?
"'".$this->db->idate($this->date_lim_reglement).
"'" :
'NULL') .
',';
604 $sql .=
" note_private = '". (!empty($this->note_private) ? $this->db->escape($this->note_private) :
'') .
"',";
605 $sql .=
" note_public = '". (!empty($this->note_public) ? $this->db->escape($this->note_public) :
'') .
"',";
606 $sql .=
" modelpdf = ". (!empty($this->model_pdf) ?
"'".$this->db->escape($this->model_pdf).
"'" :
'NULL') .
",";
607 $sql .=
" fk_multicurrency = ". (!empty($this->fk_multicurrency) ? ((int) $this->fk_multicurrency) :
'NULL') .
',';
608 $sql .=
" multicurrency_code = ". (!empty($this->multicurrency_code) ?
"'".$this->db->escape($this->multicurrency_code).
"'" :
'NULL') .
",";
609 $sql .=
" multicurrency_tx = ". (!empty($this->multicurrency_tx) ? ((float) $this->multicurrency_tx) : 1) .
',';
610 $sql .=
" multicurrency_total_ht = ". (!empty($this->multicurrency_total_ht) ? ((float) $this->multicurrency_total_ht) : 0.00) .
',';
611 $sql .=
" multicurrency_total_tva = ". (!empty($this->multicurrency_total_tva) ? ((float) $this->multicurrency_total_tva) : 0.00) .
',';
612 $sql .=
" multicurrency_total_ttc = ". (!empty($this->multicurrency_total_ttc) ? ((float) $this->multicurrency_total_ttc) : 0.00) .
',';
613 $sql .=
" usenewprice = ". (!empty($this->usenewprice) ? ((int) $this->usenewprice) : 0) .
',';
614 $sql .=
" frequency = ". (!empty($this->frequency) ? ((int) $this->frequency) : 0).
',';
615 $sql .=
" unit_frequency = '". (!empty($this->unit_frequency) ? $this->db->escape($this->unit_frequency) :
'').
"',";
616 $sql .=
" date_when = ". (!empty($this->date_when) ?
"'".$this->db->idate($this->date_when).
"'" :
'NULL') .
',';
617 $sql .=
" date_last_gen = ". (!empty($this->date_last_gen) ?
"'".$this->db->idate($this->date_last_gen).
"'" :
'NULL') .
',';
618 $sql .=
" nb_gen_done = ". (!empty($this->nb_gen_done) ? ((int) $this->nb_gen_done) : 0) .
',';
619 $sql .=
" nb_gen_max = ". (!empty($this->nb_gen_max) ? ((int) $this->nb_gen_max) : 0) .
',';
620 $sql .=
" auto_validate = ". (!empty($this->auto_validate) ? ((int) $this->auto_validate) : 0);
621 $sql .=
" WHERE rowid = ". (int) $this->
id;
625 dol_syslog(get_class($this).
"::update", LOG_DEBUG);
626 $resql = $this->db->query($sql);
635 if (!$error && !$notrigger) {
637 $result = $this->
call_trigger(
'SUPPLIERBILLREC_MODIFY', $user);
639 $this->db->rollback();
647 $this->error = $this->db->lasterror();
648 $this->db->rollback();
661 public function fetch($rowid, $ref =
'', $ref_ext =
'')
663 $sql =
'SELECT f.rowid, f.titre as title, f.subtype, f.ref_supplier, f.entity, f.fk_soc';
664 $sql .=
', f.datec, f.tms, f.suspended';
665 $sql .=
', f.libelle as label';
666 $sql .=
', f.vat_src_code, f.localtax1, f.localtax2';
667 $sql .=
', f.total_tva, f.total_ht, f.total_ttc';
668 $sql .=
', f.fk_user_author, f.fk_user_modif';
669 $sql .=
', f.fk_projet as fk_project, f.fk_account';
670 $sql .=
', f.fk_mode_reglement, p.code as mode_reglement_code, p.libelle as mode_reglement_libelle';
671 $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';
672 $sql .=
', f.date_lim_reglement';
673 $sql .=
', f.note_private, f.note_public, f.modelpdf as model_pdf';
674 $sql .=
', f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht, f.multicurrency_total_tva, f.multicurrency_total_ttc';
675 $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';
676 $sql .=
', f.generate_pdf';
677 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec as f';
678 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_payment_term as c ON f.fk_cond_reglement = c.rowid';
679 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as p ON f.fk_mode_reglement = p.id';
680 $sql .=
' WHERE f.entity IN ('.getEntity(
'invoice').
')';
682 $sql .=
' AND f.rowid='. (int) $rowid;
684 $sql .=
" AND f.titre='".$this->db->escape($ref).
"'";
686 $sql .=
' AND f.rowid = 0';
689 $result = $this->db->query($sql);
691 if ($this->db->num_rows($result)) {
692 $obj = $this->db->fetch_object($result);
696 $this->
id = $obj->rowid;
697 $this->titre = $obj->title;
698 $this->title = $obj->title;
699 $this->subtype = $obj->subtype;
700 $this->
ref = $obj->title;
701 $this->ref_supplier = $obj->ref_supplier;
702 $this->entity = $obj->entity;
703 $this->socid = $obj->fk_soc;
704 $this->date_creation = $obj->datec;
705 $this->date_modification = $obj->tms;
706 $this->suspended = $obj->suspended;
707 $this->libelle = $obj->label;
708 $this->label = $obj->label;
709 $this->vat_src_code = $obj->vat_src_code;
710 $this->total_localtax1 = $obj->localtax1;
711 $this->total_localtax2 = $obj->localtax2;
712 $this->total_ht = $obj->total_ht;
713 $this->total_tva = $obj->total_tva;
714 $this->total_ttc = $obj->total_ttc;
715 $this->user_author = $obj->fk_user_author;
716 $this->user_modif = $obj->fk_user_modif;
717 $this->fk_project = $obj->fk_project;
718 $this->fk_account = $obj->fk_account;
719 $this->mode_reglement_id = $obj->fk_mode_reglement;
720 $this->mode_reglement_code = $obj->mode_reglement_code;
721 $this->mode_reglement = $obj->mode_reglement_libelle;
722 $this->cond_reglement_id = $obj->fk_cond_reglement;
723 $this->cond_reglement_code = $obj->cond_reglement_code;
724 $this->cond_reglement = $obj->cond_reglement_libelle;
725 $this->cond_reglement_doc = $obj->cond_reglement_libelle_doc;
726 $this->date_lim_reglement = $this->db->jdate($obj->date_lim_reglement);
727 $this->note_private = $obj->note_private;
728 $this->note_public = $obj->note_public;
729 $this->model_pdf = $obj->model_pdf;
732 $this->fk_multicurrency = $obj->fk_multicurrency;
733 $this->multicurrency_code = $obj->multicurrency_code;
734 $this->multicurrency_tx = $obj->multicurrency_tx;
735 $this->multicurrency_total_ht = $obj->multicurrency_total_ht;
736 $this->multicurrency_total_tva = $obj->multicurrency_total_tva;
737 $this->multicurrency_total_ttc = $obj->multicurrency_total_ttc;
739 $this->usenewprice = $obj->usenewprice;
740 $this->frequency = $obj->frequency;
741 $this->unit_frequency = $obj->unit_frequency;
742 $this->date_when = $this->db->jdate($obj->date_when);
743 $this->date_last_gen = $this->db->jdate($obj->date_last_gen);
744 $this->nb_gen_done = $obj->nb_gen_done;
745 $this->nb_gen_max = $obj->nb_gen_max;
746 $this->auto_validate = $obj->auto_validate;
747 $this->generate_pdf = $obj->generate_pdf;
758 $this->error = $this->db->lasterror();
763 $this->error =
'Bill with id '.$rowid.
' or ref '.$ref.
' not found';
764 dol_syslog(
'Facture::Fetch Error '.$this->error, LOG_ERR);
768 $this->error = $this->db->error();
793 $this->lines = array();
804 $sql =
'SELECT l.rowid,';
805 $sql .=
' l.fk_facture_fourn, l.fk_parent_line, l.fk_product, l.ref as ref_supplier, l.label, l.description as line_desc,';
806 $sql .=
' l.pu_ht, l.pu_ttc, l.qty, l.remise_percent, l.fk_remise_except, l.vat_src_code, l.tva_tx,';
807 $sql .=
' l.localtax1_tx, l.localtax2_tx, l.localtax1_type, l.localtax2_type,';
808 $sql .=
' l.total_ht, l.total_tva, l.total_ttc, total_localtax1, total_localtax2,';
809 $sql .=
' l.product_type, l.date_start, l.date_end,';
810 $sql .=
' l.info_bits, l.special_code, l.rang,';
811 $sql .=
' l.fk_unit, l.import_key, l.fk_user_author, l.fk_user_modif, l.extraparams,';
812 $sql .=
' l.fk_multicurrency, l.multicurrency_code, l.multicurrency_subprice, l.multicurrency_total_ht, l.multicurrency_total_tva, l.multicurrency_total_ttc,';
813 $sql .=
' p.ref as product_ref, p.fk_product_type as fk_product_type, p.label as product_label, p.description as product_desc';
814 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_det_rec as l';
815 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'product as p ON l.fk_product = p.rowid';
816 $sql .=
' WHERE l.fk_facture_fourn = '. (int) $this->
id;
817 $sql .=
' ORDER BY l.rang';
819 dol_syslog(
'FactureFournisseurRec::fetch_lines', LOG_DEBUG);
821 $result = $this->db->query($sql);
823 $num = $this->db->num_rows($result);
826 $objp = $this->db->fetch_object($result);
830 $line->id = $objp->rowid;
831 $line->fk_facture_fourn = $objp->fk_facture_fourn;
832 $line->fk_parent = $objp->fk_parent_line;
833 $line->fk_product = $objp->fk_product;
834 $line->ref = $objp->product_ref;
835 $line->product_ref = $objp->product_ref;
836 $line->product_label = $objp->product_label;
837 $line->product_desc = $objp->product_desc;
838 $line->ref_supplier = $objp->ref_supplier;
839 $line->label = $objp->label;
840 $line->description = $objp->line_desc;
841 $line->desc = $objp->line_desc;
842 $line->pu_ht = $objp->pu_ht;
843 $line->subprice = $objp->pu_ht;
844 $line->pu_ttc = $objp->pu_ttc;
845 $line->qty = $objp->qty;
846 $line->remise_percent = $objp->remise_percent;
847 $line->fk_remise_except = $objp->fk_remise_except;
848 $line->vat_src_code = $objp->vat_src_code;
849 $line->tva_tx = $objp->tva_tx;
850 $line->localtax1_tx = $objp->localtax1_tx;
851 $line->localtax1_type = $objp->localtax1_type;
852 $line->localtax2_tx = $objp->localtax2_tx;
853 $line->localtax2_type = $objp->localtax2_type;
854 $line->total_ht = $objp->total_ht;
855 $line->total_tva = $objp->total_tva;
856 $line->total_localtax1 = $objp->total_localtax1;
857 $line->total_localtax2 = $objp->total_localtax2;
858 $line->total_ttc = $objp->total_ttc;
859 $line->product_type = $objp->product_type;
860 $line->date_start = $this->db->jdate($objp->date_start);
861 $line->date_end = $this->db->jdate($objp->date_end);
862 $line->info_bits = $objp->info_bits ;
863 $line->special_code = $objp->special_code;
864 $line->rang = $objp->rang;
865 $line->fk_unit = $objp->fk_unit;
866 $line->import_key = $objp->import_key;
867 $line->fk_user_author = $objp->fk_user_author;
868 $line->fk_user_modif = $objp->fk_user_modif;
869 $this->extraparams = !empty($objp->extraparams) ? (array) json_decode($objp->extraparams,
true) : array();
870 $line->fk_multicurrency = $objp->fk_multicurrency;
871 $line->multicurrency_code = $objp->multicurrency_code;
872 $line->multicurrency_subprice = $objp->multicurrency_subprice;
873 $line->multicurrency_total_ht = $objp->multicurrency_total_ht;
874 $line->multicurrency_total_tva = $objp->multicurrency_total_tva;
875 $line->multicurrency_total_ttc = $objp->multicurrency_total_ttc;
877 $line->fetch_optionals();
879 $this->lines[$i] = $line;
884 $this->db->free($result);
887 $this->error = $this->db->lasterror();
901 public function delete(
User $user, $notrigger = 0, $idwarehouse = -1)
905 dol_syslog(get_class($this).
"::delete rowid=".((
int) $rowid), LOG_DEBUG);
910 $main = MAIN_DB_PREFIX.
'facture_fourn_det_rec';
911 $ef = $main.
"_extrafields";
913 $sqlef =
"DELETE FROM ".$ef.
" WHERE fk_object IN (SELECT rowid FROM ".$main.
" WHERE fk_facture_fourn = ". (int) $rowid .
")";
914 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"facture_fourn_det_rec WHERE fk_facture_fourn = ". (int) $rowid;
916 if ($this->db->query($sqlef) && $this->db->query($sql)) {
917 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"facture_fourn_rec WHERE rowid = ". (int) $rowid;
919 if ($this->db->query($sql)) {
931 $this->error = $this->db->lasterror();
935 $this->error = $this->db->lasterror();
938 if (!$error && !$notrigger) {
940 $result = $this->
call_trigger(
'SUPPLIERBILLREC_DELETE', $user);
950 $this->db->rollback();
981 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)
983 global $mysoc, $user;
985 include_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
989 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);
1001 if (preg_match(
'/\((.*)\)/', (
string) $txtva, $reg)) {
1002 $vat_src_code = $reg[1];
1003 $txtva = preg_replace(
'/\s*\(.*\)/',
'', (
string) $txtva);
1007 $fk_product = empty($fk_product) ? 0 : $fk_product;
1008 $label = empty($label) ?
'' : $label;
1009 $remise_percent = empty($remise_percent) ? 0 :
price2num($remise_percent);
1013 if (!preg_match(
'/\((.*)\)/', $txtva)) {
1018 $txtva = !empty($txtva) ? $txtva : 0;
1019 $txlocaltax1 = !empty($txlocaltax1) ? $txlocaltax1 : 0;
1020 $txlocaltax2 = !empty($txlocaltax2) ? $txlocaltax2 : 0;
1021 $info_bits = !empty($info_bits) ? $info_bits : 0;
1022 $info_bits = !empty($info_bits) ? $info_bits : 0;
1023 $pu = $price_base_type ==
'HT' ? $pu_ht : $pu_ttc;
1029 $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);
1030 $total_ht = $tabprice[0];
1031 $total_tva = $tabprice[1];
1032 $total_ttc = $tabprice[2];
1033 $total_localtax1 = $tabprice[9];
1034 $total_localtax2 = $tabprice[10];
1035 $pu_ht = $tabprice[3];
1038 $multicurrency_total_ht = $tabprice[16];
1039 $multicurrency_total_tva = $tabprice[17];
1040 $multicurrency_total_ttc = $tabprice[18];
1041 $pu_ht_devise = $tabprice[19];
1044 $product_type = $type;
1046 $product =
new Product($this->db);
1047 $result = $product->fetch($fk_product);
1051 $product_type = $product->type;
1052 if (empty($label)) {
1053 $label = $product->label;
1057 $sql =
'INSERT INTO ' . MAIN_DB_PREFIX .
'facture_fourn_det_rec (';
1058 $sql .=
'fk_facture_fourn';
1059 $sql .=
', fk_product';
1062 $sql .=
', description';
1066 $sql .=
', remise_percent';
1067 $sql .=
', fk_remise_except';
1068 $sql .=
', vat_src_code';
1070 $sql .=
', localtax1_tx';
1071 $sql .=
', localtax1_type';
1072 $sql .=
', localtax2_tx';
1073 $sql .=
', localtax2_type';
1074 $sql .=
', total_ht';
1075 $sql .=
', total_tva';
1076 $sql .=
', total_localtax1';
1077 $sql .=
', total_localtax2';
1078 $sql .=
', total_ttc';
1079 $sql .=
', product_type';
1080 $sql .=
', date_start';
1081 $sql .=
', date_end';
1082 $sql .=
', info_bits';
1083 $sql .=
', special_code';
1085 $sql .=
', fk_unit';
1086 $sql .=
', fk_user_author';
1087 $sql .=
', fk_multicurrency, multicurrency_code, multicurrency_subprice, multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc';
1088 $sql .=
') VALUES (';
1089 $sql .=
' ' . (int) $facid;
1090 $sql .=
', ' . (!empty($fk_product) ? ((int) $fk_product) :
'null');
1091 $sql .=
', ' . (!empty($ref) ?
"'" . $this->db->escape($ref) .
"'" :
'null');
1092 $sql .=
', ' . (!empty($label) ?
"'" . $this->db->escape($label) .
"'" :
'null');
1093 $sql .=
", '" . $this->db->escape($desc) .
"'";
1097 $sql .=
', ' .
price2num($remise_percent);
1099 $sql .=
", '" . $this->db->escape($vat_src_code) .
"'";
1102 $sql .=
", '" . $this->db->escape(isset($localtaxes_type[0]) ? $localtaxes_type[0] :
'') .
"'";
1104 $sql .=
", '" . $this->db->escape(isset($localtaxes_type[2]) ? $localtaxes_type[2] :
'') .
"'";
1107 $sql .=
', ' .
price2num($total_localtax1);
1108 $sql .=
', ' .
price2num($total_localtax2);
1110 $sql .=
', ' . (int) $product_type;
1111 $sql .=
', ' . ($date_start > 0 ? (int) $date_start :
'NULL');
1112 $sql .=
', ' . ($date_end > 0 ? (int) $date_end :
'NULL');
1113 $sql .=
', ' . (int) $info_bits;
1114 $sql .=
', ' . (int) $special_code;
1115 $sql .=
', ' . (int) $rang;
1116 $sql .=
', ' . ($fk_unit ? (int) $fk_unit :
'NULL');
1117 $sql .=
', ' . (int) $user->id;
1118 $sql .=
', ' . (int) $this->fk_multicurrency;
1119 $sql .=
", '" . $this->db->escape($this->multicurrency_code) .
"'";
1120 $sql .=
', ' .
price2num($pu_ht_devise,
'CU');
1121 $sql .=
', ' .
price2num($multicurrency_total_ht,
'CT');
1122 $sql .=
', ' .
price2num($multicurrency_total_tva,
'CT');
1123 $sql .=
', ' .
price2num($multicurrency_total_ttc,
'CT');
1126 dol_syslog(get_class($this).
'::addline', LOG_DEBUG);
1127 if ($this->db->query($sql)) {
1128 $lineId = $this->db->last_insert_id(MAIN_DB_PREFIX.
'facture_fourn_det_rec');
1131 $this->db->commit();
1134 $this->db->rollback();
1135 $this->error = $this->db->lasterror();
1168 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)
1170 global $mysoc, $user;
1174 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);
1175 include_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
1183 $fk_product = empty($fk_product) ? 0 : $fk_product;
1184 $label = empty($label) ?
'' : $label;
1185 $remise_percent = empty($remise_percent) ? 0 :
price2num($remise_percent);
1187 $info_bits = empty($info_bits) ? 0 : $info_bits;
1190 $pu_ht_devise =
price2num($pu_ht_devise);
1192 if (!preg_match(
'/\((.*)\)/', (
string) $txtva)) {
1196 $txlocaltax1 = empty($txlocaltax1) ? 0 :
price2num($txlocaltax1);
1197 $txlocaltax2 = empty($txlocaltax2) ? 0 :
price2num($txlocaltax2);
1198 $this->multicurrency_total_ht = empty($this->multicurrency_total_ht) ? 0 : $this->multicurrency_total_ht;
1199 $this->multicurrency_total_tva = empty($this->multicurrency_total_tva) ? 0 : $this->multicurrency_total_tva;
1200 $this->multicurrency_total_ttc = empty($this->multicurrency_total_ttc) ? 0 : $this->multicurrency_total_ttc;
1202 $pu = ($price_base_type ==
'HT' ? $pu_ht : $pu_ttc);
1214 if (preg_match(
'/\((.*)\)/', $txtva, $reg)) {
1215 $vat_src_code = $reg[1];
1216 $txtva = preg_replace(
'/\s*\(.*\)/',
'', $txtva);
1219 $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);
1221 $total_ht = $tabprice[0];
1222 $total_tva = $tabprice[1];
1223 $total_ttc = $tabprice[2];
1224 $total_localtax1 = $tabprice[9];
1225 $total_localtax2 = $tabprice[10];
1226 $pu_ht = $tabprice[3];
1227 $pu_tva = $tabprice[4];
1228 $pu_ttc = $tabprice[5];
1231 $multicurrency_total_ht = $tabprice[16];
1232 $multicurrency_total_tva = $tabprice[17];
1233 $multicurrency_total_ttc = $tabprice[18];
1234 $pu_ht_devise = $tabprice[19];
1236 $product_type = $type;
1238 $product =
new Product($this->db);
1239 $result = $product->fetch($fk_product);
1240 $product_type = $product->type;
1243 $sql =
'UPDATE ' . MAIN_DB_PREFIX .
'facture_fourn_det_rec SET';
1244 $sql .=
' fk_facture_fourn = ' . ((int) $facid);
1245 $sql .=
', fk_product = ' . ($fk_product > 0 ? ((int) $fk_product) :
'null');
1246 $sql .=
", ref = '" . $this->db->escape($ref) .
"'";
1247 $sql .=
", label = '" . $this->db->escape($label) .
"'";
1248 $sql .=
", description = '" . $this->db->escape($desc) .
"'";
1249 $sql .=
', pu_ht = ' .
price2num($pu_ht);
1251 $sql .=
", remise_percent = '" .
price2num($remise_percent) .
"'";
1252 $sql .=
", vat_src_code = '" . $this->db->escape($vat_src_code) .
"'";
1253 $sql .=
', tva_tx = ' .
price2num($txtva);
1254 $sql .=
', localtax1_tx = ' . (float) $txlocaltax1;
1255 $sql .=
", localtax1_type = '" . $this->db->escape($localtaxes_type[0]) .
"'";
1256 $sql .=
', localtax2_tx = ' . (float) $txlocaltax2;
1257 $sql .=
", localtax2_type = '" . $this->db->escape($localtaxes_type[2]) .
"'";
1258 $sql .=
", total_ht = '" .
price2num($total_ht) .
"'";
1259 $sql .=
", total_tva = '" .
price2num($total_tva) .
"'";
1260 $sql .=
", total_localtax1 = '" .
price2num($total_localtax1) .
"'";
1261 $sql .=
", total_localtax2 = '" .
price2num($total_localtax2) .
"'";
1262 $sql .=
", total_ttc = '" .
price2num($total_ttc) .
"'";
1263 $sql .=
', product_type = ' . (int) $product_type;
1264 $sql .=
', date_start = ' . (empty($date_start) ?
'NULL' : (int) $date_start);
1265 $sql .=
', date_end = ' . (empty($date_end) ?
'NULL' : (int) $date_end);
1266 $sql .=
', info_bits = ' . (int) $info_bits;
1267 $sql .=
', special_code = ' . (int) $special_code;
1268 $sql .=
', rang = ' . (int) $rang;
1269 $sql .=
', fk_unit = ' . ($fk_unit ?
"'" . $this->db->escape($fk_unit) .
"'" :
'null');
1270 $sql .=
', fk_user_modif = ' . (int) $user;
1271 $sql .=
', multicurrency_subprice = '.price2num($pu_ht_devise);
1272 $sql .=
', multicurrency_total_ht = '.price2num($multicurrency_total_ht);
1273 $sql .=
', multicurrency_total_tva = '.price2num($multicurrency_total_tva);
1274 $sql .=
', multicurrency_total_ttc = '.price2num($multicurrency_total_ttc);
1275 $sql .=
' WHERE rowid = ' . (int) $rowid;
1277 dol_syslog(get_class($this).
'::updateline', LOG_DEBUG);
1278 if ($this->db->query($sql)) {
1283 $this->error = $this->db->lasterror();
1309 if (empty($this->date_when)) {
1312 return dol_time_plus_duree((
int) $this->date_when, $this->frequency, $this->unit_frequency, 1);
1323 if ($this->nb_gen_max > 0 && ($this->nb_gen_done >= $this->nb_gen_max)) {
1338 return ($this->
isMaxNbGenReached() ?
'<strike>' :
'').$ret.($this->isMaxNbGenReached() ?
'</strike>' :
'');
1353 global
$conf, $langs, $db, $user, $hookmanager;
1359 $langs->loadLangs(array(
'main',
'bills'));
1363 $today =
dol_mktime(23, 59, 59, $tmparray[
'mon'], $tmparray[
'mday'], $tmparray[
'year']);
1365 dol_syslog(
'createRecurringInvoices restrictioninvoiceid=' .$restrictioninvoiceid.
' forcevalidation=' .$forcevalidation);
1367 $sql =
'SELECT rowid FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec';
1368 $sql .=
' WHERE frequency > 0';
1369 $sql .=
" AND (date_when IS NULL OR date_when <= '".$this->db->idate($today).
"')";
1370 $sql .=
' AND (nb_gen_done < nb_gen_max OR nb_gen_max = 0)';
1371 $sql .=
' AND suspended = 0';
1372 $sql .=
' AND entity = '. (int)
$conf->entity;
1373 if ($restrictioninvoiceid > 0) {
1374 $sql .=
' AND rowid = '. (int) $restrictioninvoiceid;
1376 $sql .= $this->db->order(
'entity',
'ASC');
1378 $sql .= $this->db->plimit(
getDolGlobalInt(
'NB_REC_FACT_GEN_BY_CALL'));
1381 $parameters = array(
1382 'restrictioninvoiceid' => $restrictioninvoiceid,
1383 'forcevalidation' => $forcevalidation,
1385 $reshook = $hookmanager->executeHooks(
'beforeCreationOfRecurringInvoices', $parameters, $sql);
1387 $resql = $this->db->query($sql);
1390 $num = $this->db->num_rows($resql);
1393 $this->output .= $langs->trans(
'FoundXQualifiedRecurringInvoiceTemplate', $num).
"\n";
1395 $this->output .= $langs->trans(
'NoQualifiedRecurringInvoiceTemplateFound');
1398 $saventity =
$conf->entity;
1402 $line = $this->db->fetch_object($resql);
1406 $invoiceidgenerated = 0;
1408 $new_fac_fourn =
null;
1410 $laststep =
"Fetch {$line->rowid}";
1411 $facturerec->fetch($line->rowid);
1413 if ($facturerec->id > 0) {
1415 $conf->entity = $facturerec->entity;
1417 dol_syslog(
'createRecurringInvoices Process invoice template id=' .$facturerec->id.
', ref=' .$facturerec->ref.
', entity=' .$facturerec->entity);
1420 $new_fac_fourn->fac_rec = $facturerec->id;
1421 $new_fac_fourn->fk_fac_rec_source = $facturerec->id;
1424 $new_fac_fourn->subtype = $facturerec->subtype;
1427 $new_fac_fourn->date = empty($facturerec->date_when) ? $now : $facturerec->date_when;
1428 $new_fac_fourn->socid = $facturerec->socid;
1429 $new_fac_fourn->lines = $facturerec->lines;
1430 $new_fac_fourn->ref_supplier = $facturerec->ref_supplier;
1431 $new_fac_fourn->model_pdf = $facturerec->model_pdf;
1432 $new_fac_fourn->fk_project = $facturerec->fk_project;
1433 $new_fac_fourn->label = $facturerec->label;
1434 $new_fac_fourn->libelle = $facturerec->label;
1436 $invoiceidgenerated = $new_fac_fourn->create($user);
1437 $laststep =
"Create invoiceidgenerated $invoiceidgenerated";
1438 if ($invoiceidgenerated <= 0) {
1439 $this->errors = $new_fac_fourn->errors;
1440 $this->error = $new_fac_fourn->error;
1443 if (!$error && ($facturerec->auto_validate || $forcevalidation)) {
1444 $result = $new_fac_fourn->validate($user);
1445 $laststep =
"Validate by user {$user->login}";
1447 $this->errors = $new_fac_fourn->errors;
1448 $this->error = $new_fac_fourn->error;
1453 if (!$error && $facturerec->generate_pdf) {
1455 $laststep =
"Refresh ".$new_fac_fourn->id;
1456 $new_fac_fourn->fetch($new_fac_fourn->id);
1457 $laststep =
"GenerateDocument ".$new_fac_fourn->id;
1458 $result = $new_fac_fourn->generateDocument($facturerec->model_pdf, $langs);
1460 $this->errors = $new_fac_fourn->errors;
1461 $this->error = $new_fac_fourn->error;
1467 $this->error =
'Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity.
"\n";
1468 $this->errors[] =
'Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity;
1469 dol_syslog(
'createRecurringInvoices Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity);
1472 if (!$error && $invoiceidgenerated >= 0) {
1473 $facturerec->nb_gen_done++;
1474 $facturerec->date_last_gen =
dol_now();
1475 $nextDate = $facturerec->getNextDate();
1476 $facturerec->date_when = (($nextDate ===
false) ?
null : $nextDate);
1477 $facturerec->update($user);
1478 $this->db->commit(
'createRecurringInvoices Process invoice template id=' .$facturerec->id.
', title=' .$facturerec->title);
1479 dol_syslog(
'createRecurringInvoices Process invoice template ' .$facturerec->title.
' is finished with a success generation');
1481 $this->output .= $langs->trans(
'InvoiceGeneratedFromTemplate', $new_fac_fourn->ref, $facturerec->title).
"\n";
1483 $this->db->rollback(
'createRecurringInvoices Process invoice template error='.$error.
' invoiceidgenerated='.$invoiceidgenerated.
' LastStep='.$laststep.
' id=' .$facturerec->id.
', title=' .$facturerec->title);
1486 $parameters = array(
1489 'errorCount' => $error,
1490 'invoiceidgenerated' => $invoiceidgenerated,
1491 'facturerec' => $facturerec,
1495 $reshook = $hookmanager->executeHooks(
'afterCreationOfRecurringInvoice', $parameters, $new_fac_fourn);
1500 $conf->entity = $saventity;
1505 $this->output = trim($this->output);
1507 return $error ? $error : 0;
1522 public function getNomUrl($withpicto = 0, $option =
'', $max = 0, $short = 0, $moretitle =
'', $notooltip = 0, $save_lastsearch_value = -1)
1524 global $langs, $hookmanager;
1528 $label =
'<u>'.$langs->trans(
'RepeatableInvoice').
'</u>';
1529 if (!empty($this->
ref)) {
1530 $label .=
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
1532 if ($this->frequency > 0) {
1533 $label .=
'<br><b>'.$langs->trans(
'Frequency').
':</b> '.$langs->trans(
'FrequencyPer_'.$this->unit_frequency, $this->frequency);
1535 if (!empty($this->date_last_gen)) {
1536 $label .=
'<br><b>'.$langs->trans(
'DateLastGeneration').
':</b> '.
dol_print_date($this->date_last_gen,
'dayhour');
1538 if ($this->frequency > 0) {
1539 if (!empty($this->date_when)) {
1540 $label .=
'<br><b>'.$langs->trans(
'NextDateToExecution').
':</b> ';
1541 $label .= (empty($this->suspended) ?
'' :
'<strike>').
dol_print_date($this->date_when,
'day').(empty($this->suspended) ?
'' :
'</strike>');
1542 if (!empty($this->suspended)) {
1543 $label .=
' ('.$langs->trans(
'Disabled').
')';
1548 $url = DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.$this->id;
1554 if ($option !=
'nolink') {
1556 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
1557 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
'PHP_SELF'])) {
1558 $add_save_lastsearch_values = 1;
1560 if ($add_save_lastsearch_values) {
1561 $url .=
'&save_lastsearch_values=1';
1565 $linkstart =
'<a href="'.$url.
'" title="'.
dol_escape_htmltag($label, 1).
'" class="classfortooltip">';
1568 $result .= $linkstart;
1570 $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);
1572 if ($withpicto != 2) {
1573 $result .= $this->ref;
1575 $result .= $linkend;
1577 $hookmanager->initHooks(array($this->element .
'dao'));
1578 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
1579 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
1581 $result = $hookmanager->resPrint;
1583 $result .= $hookmanager->resPrint;
1597 return $this->
LibStatut($this->frequency ? 1 : 0, $this->suspended, $mode, $alreadypaid, empty($this->
type) ? 0 : $this->type);
1612 public function LibStatut($recur, $status, $mode = 0, $alreadypaid = -1, $type = 0, $nbofopendirectdebitorcredittransfer = 0)
1616 $langs->load(
'bills');
1618 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1619 $statusType =
'status0';
1624 if ($status == self::STATUS_SUSPENDED) {
1625 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1627 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1630 if ($status == self::STATUS_SUSPENDED) {
1631 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1633 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1636 } elseif ($mode == 1) {
1639 if ($status == self::STATUS_SUSPENDED) {
1640 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1642 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1645 if ($status == self::STATUS_SUSPENDED) {
1646 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1648 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1651 } elseif ($mode == 2) {
1653 if ($status == self::STATUS_SUSPENDED) {
1654 $statusType =
'status6';
1655 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1657 $statusType =
'status4';
1658 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1661 if ($status == self::STATUS_SUSPENDED) {
1662 $statusType =
'status6';
1663 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1665 $statusType =
'status0';
1666 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1669 } elseif ($mode == 3) {
1672 if ($status == self::STATUS_SUSPENDED) {
1673 $statusType =
'status6';
1674 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1676 $statusType =
'status4';
1677 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1680 if ($status == self::STATUS_SUSPENDED) {
1681 $statusType =
'status6';
1682 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1684 $statusType =
'status0';
1685 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1688 } elseif ($mode == 4) {
1691 if ($status == self::STATUS_SUSPENDED) {
1692 $statusType =
'status6';
1693 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1695 $statusType =
'status4';
1696 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1699 if ($status == self::STATUS_SUSPENDED) {
1700 $statusType =
'status6';
1701 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1703 $statusType =
'status0';
1704 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1707 } elseif ($mode == 5 || $mode == 6) {
1713 if ($status == self::STATUS_SUSPENDED) {
1714 $statusType =
'status6';
1715 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1717 $statusType =
'status4';
1718 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1721 if ($status == self::STATUS_SUSPENDED) {
1722 $statusType =
'status6';
1723 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1725 $statusType =
'status0';
1726 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1731 $labelStatusShort = $labelStatus;
1733 return dolGetStatus($labelStatus, $labelStatusShort,
'', $statusType, $mode);
1746 global $user, $langs,
$conf;
1750 $nownotime =
dol_mktime(0, 0, 0, $arraynow[
'mon'], $arraynow[
'mday'], $arraynow[
'year']);
1756 $sql =
'SELECT rowid';
1757 $sql .=
' FROM ' .MAIN_DB_PREFIX.
'product';
1758 $sql .=
' WHERE entity IN (' .getEntity(
'product').
')';
1759 $sql .= $this->db->plimit(100);
1761 $resql = $this->db->query($sql);
1763 $num_prods = $this->db->num_rows($resql);
1765 while ($i < $num_prods) {
1767 $row = $this->db->fetch_row($resql);
1768 $prodids[$i] = $row[0];
1774 $this->
ref =
'SPECIMEN';
1775 $this->title =
'SPECIMEN';
1776 $this->specimen = 1;
1778 $this->date = $nownotime;
1779 $this->date_lim_reglement = $nownotime + 3600 * 24 * 30;
1780 $this->cond_reglement_id = 1;
1781 $this->cond_reglement_code =
'RECEP';
1783 $this->mode_reglement_id = 0;
1784 $this->mode_reglement_code =
'';
1785 $this->note_public =
'This is a comment (public)';
1786 $this->note_private =
'This is a comment (private)';
1787 $this->note =
'This is a comment (private)';
1788 $this->fk_incoterms = 0;
1789 $this->location_incoterms =
'';
1791 if (empty($option) || $option !=
'nolines') {
1795 while ($xnbp < $nbp) {
1797 $line->desc = $langs->trans(
'Description').
' ' .$xnbp;
1799 $line->subprice = 100;
1800 $line->tva_tx = 19.6;
1801 $line->localtax1_tx = 0;
1802 $line->localtax2_tx = 0;
1803 $line->remise_percent = 0;
1805 $prodid = mt_rand(1, $num_prods);
1806 $line->fk_product = $prodids[$prodid];
1808 $line->total_ht = -100;
1809 $line->total_ttc = -119.6;
1810 $line->total_tva = -19.6;
1811 } elseif ($xnbp == 2) {
1812 $line->subprice = -100;
1813 $line->total_ht = -100;
1814 $line->total_ttc = -119.6;
1815 $line->total_tva = -19.6;
1816 $line->remise_percent = 0;
1817 } elseif ($xnbp == 3) {
1818 $prodid = mt_rand(1, $num_prods);
1819 $line->fk_product = $prodids[$prodid];
1820 $line->total_ht = 50;
1821 $line->total_ttc = 59.8;
1822 $line->total_tva = 9.8;
1823 $line->remise_percent = 50;
1825 $prodid = mt_rand(1, $num_prods);
1826 $line->fk_product = $prodids[$prodid];
1827 $line->total_ht = 100;
1828 $line->total_ttc = 119.6;
1829 $line->total_tva = 19.6;
1830 $line->remise_percent = 00;
1833 $this->lines[$xnbp] = $line;
1836 $this->total_ht += $line->total_ht;
1837 $this->total_tva += $line->total_tva;
1838 $this->total_ttc += $line->total_ttc;
1840 $this->revenuestamp = 0;
1844 $line->desc = $langs->trans(
'Description').
' (offered line)';
1846 $line->subprice = 100;
1847 $line->tva_tx = 19.6;
1848 $line->localtax1_tx = 0;
1849 $line->localtax2_tx = 0;
1850 $line->remise_percent = 100;
1851 $line->total_ht = 0;
1852 $line->total_ttc = 0;
1853 $line->total_tva = 0;
1854 $prodid = mt_rand(1, $num_prods);
1855 $line->fk_product = $prodids[$prodid];
1857 $this->lines[$xnbp] = $line;
1861 $this->usenewprice = 0;
1892 if (!$this->table_element) {
1893 dol_syslog(get_class($this).
'::setFrequencyAndUnit was called on object with property table_element not defined', LOG_ERR);
1897 if (!empty($frequency) && empty($unit)) {
1898 dol_syslog(get_class($this).
'::setFrequencyAndUnit was called on object with params frequency defined but unit not defined', LOG_ERR);
1902 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1903 $sql .=
" SET frequency = ".($frequency ? ((int) $frequency) :
"NULL");
1904 if (!empty($unit)) {
1905 $sql .=
", unit_frequency = '".$this->db->escape($unit).
"'";
1907 $sql .=
" WHERE rowid = ".((int) $this->
id);
1909 dol_syslog(get_class($this).
'::setFrequencyAndUnit', LOG_DEBUG);
1911 if ($this->db->query($sql)) {
1912 $this->frequency = $frequency;
1913 if (!empty($unit)) {
1914 $this->unit_frequency = $unit;
1918 $this->error = $this->db->lasterror();
1932 if (!$this->table_element) {
1933 dol_syslog(get_class($this).
'::setNextDate was called on object with property table_element not defined', LOG_ERR);
1936 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1937 $sql .=
" SET date_when = " .($date ?
"'".$this->db->idate($date).
"'" :
"NULL");
1938 if ($increment_nb_gen_done > 0) {
1939 $sql .=
", nb_gen_done = nb_gen_done + 1";
1941 $sql .=
" WHERE rowid = " . (int) $this->
id;
1943 dol_syslog(get_class($this).
'::setNextDate', LOG_DEBUG);
1945 if ($this->db->query($sql)) {
1946 $this->date_when = $date;
1947 if ($increment_nb_gen_done > 0) {
1948 $this->nb_gen_done++;
1952 $this->error = $this->db->lasterror();
1965 if (!$this->table_element) {
1966 dol_syslog(get_class($this).
'::setMaxPeriod was called on object with property table_element not defined', LOG_ERR);
1974 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1975 $sql .=
" SET nb_gen_max = ". (int) $nb;
1976 $sql .=
" WHERE rowid = " . (int) $this->
id;
1978 dol_syslog(get_class($this).
'::setMaxPeriod', LOG_DEBUG);
1980 if ($this->db->query($sql)) {
1981 $this->nb_gen_max = $nb;
1997 if (!$this->table_element) {
1998 dol_syslog(get_class($this).
'::setAutoValidate was called on object with property table_element not defined', LOG_ERR);
2002 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2003 $sql .=
" SET auto_validate = ".((int) $validate);
2004 $sql .=
" WHERE rowid = " . (int) $this->
id;
2006 dol_syslog(get_class($this).
'::setAutoValidate', LOG_DEBUG);
2008 if ($this->db->query($sql)) {
2009 $this->auto_validate = $validate;
2025 if (!$this->table_element) {
2026 dol_syslog(get_class($this).
'::setGeneratePdf was called on object with property table_element not defined', LOG_ERR);
2030 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2031 $sql .=
" SET generate_pdf = ". (int) $validate;
2032 $sql .=
" WHERE rowid = " . (int) $this->
id;
2034 dol_syslog(get_class($this).
'::setGeneratePdf', LOG_DEBUG);
2036 if ($this->db->query($sql)) {
2037 $this->generate_pdf = $validate;
2053 if (!$this->table_element) {
2054 dol_syslog(get_class($this).
'::setModelPdf was called on object with property table_element not defined', LOG_ERR);
2058 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2059 $sql .=
" SET modelpdf = '".$this->db->escape($model).
"'";
2060 $sql .=
" WHERE rowid = " . (int) $this->
id;
2062 dol_syslog(get_class($this).
'::setModelPdf', LOG_DEBUG);
2064 if ($this->db->query($sql)) {
2065 $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.
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.
call_trigger($triggerName, $user)
Call trigger based on this instance.
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.
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
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)
dol_now($mode='auto')
Return date for now.
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.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dolGetStatus($statusLabel='', $statusLabelShort='', $html='', $statusType='status0', $displayMode=0, $url='', $params=array())
Output the badge of a status.
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...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
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(preg_match('/(crypted|dolcrypt):/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type