31 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
32 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
33 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
34 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
42 const TRIGGER_PREFIX =
'SUPPLIERBILLREC';
46 public $element =
'invoice_supplier_rec';
51 public $table_element =
'facture_fourn_rec';
56 public $table_element_line =
'facture_fourn_det_rec';
61 public $fk_element =
'fk_facture_fourn';
66 public $picto =
'bill';
103 public $mode_reglement_id;
104 public $mode_reglement_code;
105 public $cond_reglement_code;
106 public $cond_reglement_doc;
107 public $cond_reglement_id;
109 public $date_lim_reglement;
111 public $fk_multicurrency;
112 public $multicurrency_code;
113 public $multicurrency_tx;
114 public $multicurrency_total_ht;
115 public $multicurrency_total_tva;
116 public $multicurrency_total_ttc;
118 public $usenewprice = 0;
120 public $unit_frequency;
122 public $date_last_gen;
125 public $auto_validate;
126 public $generate_pdf;
134 public $lines = array();
179 public $fields = array(
180 'rowid' =>array(
'type'=>
'integer',
'label'=>
'TechnicalID',
'enabled'=>1,
'visible'=>-1,
'notnull'=>1,
'position'=>10),
181 'titre' =>array(
'type'=>
'varchar(100)',
'label'=>
'Titre',
'enabled'=>1,
'showoncombobox' => 1,
'visible'=>-1,
'position'=>15),
182 'ref_supplier' =>array(
'type'=>
'varchar(180)',
'label'=>
'RefSupplier',
'enabled'=>1,
'showoncombobox' => 1,
'visible'=>-1,
'position'=>20),
183 'entity' =>array(
'type'=>
'integer',
'label'=>
'Entity',
'default'=>1,
'enabled'=>1,
'visible'=>-2,
'notnull'=>1,
'position'=>25,
'index'=>1),
184 'fk_soc' =>array(
'type'=>
'integer:Societe:societe/class/societe.class.php',
'label'=>
'ThirdParty',
'enabled'=>
'isModEnabled("societe")',
'visible'=>-1,
'notnull'=>1,
'position'=>30),
185 'datec' =>array(
'type'=>
'datetime',
'label'=>
'DateCreation',
'enabled'=>1,
'visible'=>-1,
'position'=>35),
186 'tms' =>array(
'type'=>
'timestamp',
'label'=>
'DateModification',
'enabled'=>1,
'visible'=>-1,
'notnull'=>1,
'position'=>40),
187 'suspended' =>array(
'type'=>
'integer',
'label'=>
'Suspended',
'enabled'=>1,
'visible'=>-1,
'position'=>225),
188 'libelle' =>array(
'type'=>
'varchar(100)',
'label'=>
'Libelle',
'enabled'=>1,
'showoncombobox' => 0,
'visible'=>-1,
'position'=>15),
190 'localtax1' =>array(
'type'=>
'double(24,8)',
'label'=>
'Localtax1',
'enabled'=>1,
'visible'=>-1,
'position'=>60,
'isameasure'=>1),
191 'localtax2' =>array(
'type'=>
'double(24,8)',
'label'=>
'Localtax2',
'enabled'=>1,
'visible'=>-1,
'position'=>65,
'isameasure'=>1),
192 'total_ht' =>array(
'type'=>
'double(24,8)',
'label'=>
'Total',
'enabled'=>1,
'visible'=>-1,
'position'=>70,
'isameasure'=>1),
193 'total_tva' =>array(
'type'=>
'double(24,8)',
'label'=>
'Tva',
'enabled'=>1,
'visible'=>-1,
'position'=>55,
'isameasure'=>1),
194 'total_ttc' =>array(
'type'=>
'double(24,8)',
'label'=>
'Total ttc',
'enabled'=>1,
'visible'=>-1,
'position'=>75,
'isameasure'=>1),
196 'fk_user_author' =>array(
'type'=>
'integer:User:user/class/user.class.php',
'label'=>
'Fk user author',
'enabled'=>1,
'visible'=>-1,
'position'=>80),
197 'fk_user_modif' =>array(
'type'=>
'integer:User:user/class/user.class.php',
'label'=>
'UserModif',
'enabled'=>1,
'visible'=>-2,
'notnull'=>-1,
'position'=>210),
198 '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),
199 'fk_account' =>array(
'type'=>
'integer',
'label'=>
'Fk account',
'enabled'=>
'isModEnabled("banque")',
'visible'=>-1,
'position'=>175),
200 'fk_cond_reglement' =>array(
'type'=>
'integer',
'label'=>
'Fk cond reglement',
'enabled'=>1,
'visible'=>-1,
'position'=>90),
201 'fk_mode_reglement' =>array(
'type'=>
'integer',
'label'=>
'Fk mode reglement',
'enabled'=>1,
'visible'=>-1,
'position'=>95),
202 'date_lim_reglement' =>array(
'type'=>
'date',
'label'=>
'Date lim reglement',
'enabled'=>1,
'visible'=>-1,
'position'=>100),
204 'note_private' =>array(
'type'=>
'html',
'label'=>
'NotePublic',
'enabled'=>1,
'visible'=>0,
'position'=>105),
205 'note_public' =>array(
'type'=>
'html',
'label'=>
'NotePrivate',
'enabled'=>1,
'visible'=>0,
'position'=>110),
206 'modelpdf' =>array(
'type'=>
'varchar(255)',
'label'=>
'Modelpdf',
'enabled'=>1,
'visible'=>-1,
'position'=>115),
208 'fk_multicurrency' =>array(
'type'=>
'integer',
'label'=>
'Fk multicurrency',
'enabled'=>1,
'visible'=>-1,
'position'=>180),
209 'multicurrency_code' =>array(
'type'=>
'varchar(255)',
'label'=>
'Multicurrency code',
'enabled'=>1,
'visible'=>-1,
'position'=>185),
210 'multicurrency_tx' =>array(
'type'=>
'double(24,8)',
'label'=>
'Multicurrency tx',
'enabled'=>1,
'visible'=>-1,
'position'=>190,
'isameasure'=>1),
211 'multicurrency_total_ht' =>array(
'type'=>
'double(24,8)',
'label'=>
'Multicurrency total ht',
'enabled'=>1,
'visible'=>-1,
'position'=>195,
'isameasure'=>1),
212 'multicurrency_total_tva' =>array(
'type'=>
'double(24,8)',
'label'=>
'Multicurrency total tva',
'enabled'=>1,
'visible'=>-1,
'position'=>200,
'isameasure'=>1),
213 'multicurrency_total_ttc' =>array(
'type'=>
'double(24,8)',
'label'=>
'Multicurrency total ttc',
'enabled'=>1,
'visible'=>-1,
'position'=>205,
'isameasure'=>1),
215 'usenewprice' =>array(
'type'=>
'integer',
'label'=>
'UseNewPrice',
'enabled'=>1,
'visible'=>0,
'position'=>155),
216 'frequency' =>array(
'type'=>
'integer',
'label'=>
'Frequency',
'enabled'=>1,
'visible'=>-1,
'position'=>150),
217 'unit_frequency' =>array(
'type'=>
'varchar(2)',
'label'=>
'Unit frequency',
'enabled'=>1,
'visible'=>-1,
'position'=>125),
219 'date_when' =>array(
'type'=>
'datetime',
'label'=>
'Date when',
'enabled'=>1,
'visible'=>-1,
'position'=>130),
220 'date_last_gen' =>array(
'type'=>
'datetime',
'label'=>
'Date last gen',
'enabled'=>1,
'visible'=>-1,
'position'=>135),
221 'nb_gen_done' =>array(
'type'=>
'integer',
'label'=>
'Nb gen done',
'enabled'=>1,
'visible'=>-1,
'position'=>140),
222 'nb_gen_max' =>array(
'type'=>
'integer',
'label'=>
'Nb gen max',
'enabled'=>1,
'visible'=>-1,
'position'=>145),
223 'revenuestamp' =>array(
'type'=>
'double(24,8)',
'label'=>
'RevenueStamp',
'enabled'=>1,
'visible'=>-1,
'position'=>160,
'isameasure'=>1),
224 'auto_validate' =>array(
'type'=>
'integer',
'label'=>
'Auto validate',
'enabled'=>1,
'visible'=>-1,
'position'=>165),
225 'generate_pdf' =>array(
'type'=>
'integer',
'label'=>
'Generate pdf',
'enabled'=>1,
'visible'=>-1,
'position'=>170),
230 const STATUS_NOTSUSPENDED = 0;
231 const STATUS_SUSPENDED = 1;
253 public function create($user, $facFournId, $notrigger = 0)
261 $this->titre = empty($this->titre) ?
'' : $this->titre;
263 $this->
ref = $this->$keyforref;
264 $this->ref_supplier = empty($this->ref_supplier) ?
'' : $this->ref_supplier;
265 $this->usenewprice = empty($this->usenewprice) ? 0 : $this->usenewprice;
266 $this->suspended = empty($this->suspended) ? 0 : $this->suspended;
268 if (empty($this->frequency)) {
269 $this->frequency = 0;
270 $this->date_when =
null;
272 $this->frequency = abs($this->frequency);
273 $this->nb_gen_done = 0;
274 $this->nb_gen_max = empty($this->nb_gen_max) ? 0 : $this->nb_gen_max;
275 $this->auto_validate = empty($this->auto_validate) ? 0 : $this->auto_validate;
276 $this->generate_pdf = empty($this->generate_pdf) ? 0 : $this->generate_pdf;
282 $result = $facfourn_src->fetch($facFournId);
284 $sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'facture_fourn_rec (';
286 $sql .=
', ref_supplier';
290 $sql .=
', suspended';
292 $sql .=
', total_ttc';
293 $sql .=
', fk_user_author';
294 $sql .=
', fk_projet';
295 $sql .=
', fk_account';
296 $sql .=
', fk_cond_reglement';
297 $sql .=
', fk_mode_reglement';
298 $sql .=
', date_lim_reglement';
299 $sql .=
', note_private';
300 $sql .=
', note_public';
301 $sql .=
', modelpdf';
302 $sql .=
', fk_multicurrency';
303 $sql .=
', multicurrency_code';
304 $sql .=
', multicurrency_tx';
305 $sql .=
', usenewprice';
306 $sql .=
', frequency';
307 $sql .=
', unit_frequency';
308 $sql .=
', date_when';
309 $sql .=
', date_last_gen';
310 $sql .=
', nb_gen_done';
311 $sql .=
', nb_gen_max';
312 $sql .=
', auto_validate';
313 $sql .=
', generate_pdf';
314 $sql .=
') VALUES (';
315 $sql .=
"'".$this->db->escape($this->titre).
"'";
316 $sql .=
", '".$this->db->escape($this->ref_supplier).
"'";
317 $sql .=
", ".((int) $conf->entity);
318 $sql .=
", ".((int) $facfourn_src->socid);
319 $sql .=
", '".$this->db->idate($now).
"'";
320 $sql .=
", ".((int) $this->suspended);
321 $sql .=
", '".$this->db->escape($this->libelle).
"'";
322 $sql .=
", " .(!empty($facfourn_src->total_ttc) ? (
float) $facfourn_src->total_ttc :
'0');
323 $sql .=
", " .((int) $user->id);
324 $sql .=
", " .(!empty($this->fk_project) ? ((int) $this->fk_project) :
'NULL');
325 $sql .=
", " .(!empty($facfourn_src->fk_account) ? ((int) $facfourn_src->fk_account) :
'NULL');
326 $sql .=
", " .($this->cond_reglement_id > 0 ? (int) $this->cond_reglement_id :
'NULL');
327 $sql .=
", " .($this->mode_reglement_id > 0 ? (int) $this->mode_reglement_id :
'NULL');
328 $sql .=
", ".($facfourn_src->date_echeance > 0 ?
"'".$this->db->idate($facfourn_src->date_echeance).
"'" :
'NULL');
329 $sql .=
", " .(!empty($this->note_private) ?
"'".$this->db->escape($this->note_private).
"'" :
'NULL');
330 $sql .=
", " .(!empty($this->note_public) ?
"'".$this->db->escape($this->note_public).
"'" :
'NULL');
331 $sql .=
", " .(!empty($this->model_pdf) ?
"'".$this->db->escape($this->model_pdf).
"'" :
'NULL');
332 $sql .=
", " . (int) $facfourn_src->fk_multicurrency;
333 $sql .=
", '".$this->db->escape($facfourn_src->multicurrency_code).
"'";
334 $sql .=
", " . (
float) $facfourn_src->multicurrency_tx;
335 $sql .=
", " . (
int) $this->usenewprice;
336 $sql .=
", " . (int) $this->frequency;
337 $sql .=
", '".$this->db->escape($this->unit_frequency).
"'";
338 $sql .=
", " .(!empty($this->date_when) ?
"'".$this->db->idate($this->date_when).
"'" :
'NULL');
339 $sql .=
", " .(!empty($this->date_last_gen) ?
"'".$this->db->idate($this->date_last_gen).
"'" :
'NULL');
340 $sql .=
", " . (int) $this->nb_gen_done;
341 $sql .=
", " . (int) $this->nb_gen_max;
342 $sql .=
", " . (int) $this->auto_validate;
343 $sql .=
", " . (int) $this->generate_pdf;
346 if ($this->db->query(
$sql)) {
347 $this->
id = $this->db->last_insert_id(MAIN_DB_PREFIX.
'facture_fourn_rec');
350 $this->fk_multicurrency = $facfourn_src->fk_multicurrency;
352 $this->multicurrency_code = $facfourn_src->multicurrency_code;
353 $this->multicurrency_tx = $facfourn_src->multicurrency_tx;
356 $num = count($facfourn_src->lines);
357 for ($i = 0; $i < $num; $i++) {
358 $tva_tx = $facfourn_src->lines[$i]->tva_tx;
359 if (!empty($facfourn_src->lines[$i]->vat_src_code) && !preg_match(
'/\(/', $tva_tx)) {
360 $tva_tx .=
' ('.$facfourn_src->lines[$i]->vat_src_code.
')';
363 $result_insert = $this->
addline(
364 $facfourn_src->lines[$i]->fk_product,
365 $facfourn_src->lines[$i]->ref_supplier,
366 $facfourn_src->lines[$i]->label,
367 $facfourn_src->lines[$i]->description,
368 $facfourn_src->lines[$i]->pu_ht,
369 $facfourn_src->lines[$i]->pu_ttc,
370 $facfourn_src->lines[$i]->qty,
371 $facfourn_src->lines[$i]->remise_percent,
373 $facfourn_src->lines[$i]->localtax1_tx,
374 $facfourn_src->lines[$i]->localtax2_tx,
376 $facfourn_src->lines[$i]->product_type,
377 $facfourn_src->lines[$i]->date_start,
378 $facfourn_src->lines[$i]->date_end,
379 $facfourn_src->lines[$i]->info_bits,
380 $facfourn_src->lines[$i]->special_code,
381 $facfourn_src->lines[$i]->rang,
382 $facfourn_src->lines[$i]->fk_unit
385 if ($result_insert < 0) {
390 $result2 = $objectline->fetch($result_insert);
393 if (method_exists($facfourn_src->lines[$i],
'fetch_optionals')) {
394 $facfourn_src->lines[$i]->fetch_optionals($facfourn_src->lines[$i]->id);
395 $objectline->array_options = $facfourn_src->lines[$i]->array_options;
398 $result = $objectline->insertExtraFields();
402 } elseif ($result2 < 0) {
403 $this->errors[] = $objectline->error;
409 if (!empty($this->linkedObjectsIds) && empty($this->linked_objects)) {
410 $this->linked_objects = $this->linkedObjectsIds;
414 if (!$error && $this->
id && !empty($this->linked_objects) && is_array($this->linked_objects)) {
415 foreach ($this->linked_objects as $origin => $tmp_origin_id) {
416 if (is_array($tmp_origin_id)) {
417 foreach ($tmp_origin_id as $origin_id) {
420 $this->error = $this->db->lasterror();
426 $origin_id = $tmp_origin_id;
429 $this->error = $this->db->lasterror();
443 if (!$error && !$notrigger) {
445 $result = $this->
call_trigger(
'SUPPLIERBILLREC_CREATE', $user);
447 $this->db->rollback();
454 $this->db->rollback();
461 $this->error = $this->db->lasterror();
462 $this->db->rollback();
466 $this->db->rollback();
485 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"facture_fourn_rec SET";
486 $sql .=
" titre = '" . (!empty($this->titre) ? $this->db->escape($this->titre) :
"").
"'," ;
487 $sql .=
" ref_supplier = '". (!empty($this->ref_supplier) ? $this->db->escape($this->ref_supplier) :
"").
"',";
488 $sql .=
" entity = ". (!empty($this->entity) ? ((int) $this->entity) : 1) .
',';
489 if ($this->fk_soc > 0)
$sql .=
" fk_soc = ". (int) $this->fk_soc.
',';
490 $sql .=
" suspended = ". (!empty($this->suspended) ? ((int) $this->suspended) : 0) .
',';
491 $sql .=
" libelle = ". (!empty($this->libelle) ?
"'".$this->db->escape($this->libelle).
"'" :
'NULL') .
",";
492 $sql .=
" vat_src_code = ". (!empty($this->vat_src_code) ?
"'".$this->db->escape($this->vat_src_code).
"'" :
'NULL') .
',';
493 $sql .=
" localtax1 = ". (!empty($this->localtax1) ? ((
float) $this->localtax1) : 0.00) .
',';
494 $sql .=
" localtax2 = ". (!empty($this->localtax2) ? ((
float) $this->localtax2) : 0.00) .
',';
495 $sql .=
" total_ht = ". (!empty($this->total_ht) ? ((
float) $this->total_ht) : 0.00) .
',';
496 $sql .=
" total_tva = ". (!empty($this->total_tva) ? ((
float) $this->total_tva) : 0.00) .
',';
497 $sql .=
" total_ttc = ". (!empty($this->total_ttc) ? ((
float) $this->total_ttc) : 0.00) .
',';
498 $sql .=
" fk_user_modif = ". ((int) $user->id) .
',';
499 $sql .=
" fk_projet = ". (!empty($this->fk_project) ? ((int) $this->fk_project) :
'NULL') .
',';
500 $sql .=
" fk_account = ". (!empty($this->fk_account) ? ((int) $this->fk_account) :
'NULL') .
',';
501 $sql .=
" fk_mode_reglement = ". (!empty($this->mode_reglement_id) ? ((int) $this->mode_reglement_id) :
'NULL') .
',';
502 $sql .=
" fk_cond_reglement = ". (!empty($this->cond_reglement_id) ? ((int) $this->cond_reglement_id) :
'NULL') .
',';
503 $sql .=
" date_lim_reglement = ". (!empty($this->date_lim_reglement) ?
"'".$this->db->idate($this->date_lim_reglement).
"'" :
'NULL') .
',';
504 $sql .=
" note_private = '". (!empty($this->note_private) ? $this->db->escape($this->note_private) :
'') .
"',";
505 $sql .=
" note_public = '". (!empty($this->note_public) ? $this->db->escape($this->note_public) :
'') .
"',";
506 $sql .=
" modelpdf = ". (!empty($this->model_pdf) ?
"'".$this->db->escape($this->model_pdf).
"'" :
'NULL') .
",";
507 $sql .=
" fk_multicurrency = ". (!empty($this->fk_multicurrency) ? ((int) $this->fk_multicurrency) :
'NULL') .
',';
508 $sql .=
" multicurrency_code = ". (!empty($this->multicurrency_code) ?
"'".$this->db->escape($this->multicurrency_code).
"'" :
'NULL') .
",";
509 $sql .=
" multicurrency_tx = ". (!empty($this->multicurrency_tx) ? ((
float) $this->multicurrency_tx) : 1) .
',';
510 $sql .=
" multicurrency_total_ht = ". (!empty($this->multicurrency_total_ht) ? ((
float) $this->multicurrency_total_ht) : 0.00) .
',';
511 $sql .=
" multicurrency_total_tva = ". (!empty($this->multicurrency_total_tva) ? ((
float) $this->multicurrency_total_tva) : 0.00) .
',';
512 $sql .=
" multicurrency_total_ttc = ". (!empty($this->multicurrency_total_ttc) ? ((
float) $this->multicurrency_total_ttc) : 0.00) .
',';
513 $sql .=
" usenewprice = ". (!empty($this->usenewprice) ? ((int) $this->usenewprice) : 0) .
',';
514 $sql .=
" frequency = ". (!empty($this->frequency) ? ((int) $this->frequency) : 0).
',';
515 $sql .=
" unit_frequency = '". (!empty($this->unit_frequency) ? $this->db->escape($this->unit_frequency) :
'').
"',";
516 $sql .=
" date_when = ". (!empty($this->date_when) ?
"'".$this->db->idate($this->date_when).
"'" :
'NULL') .
',';
517 $sql .=
" date_last_gen = ". (!empty($this->date_last_gen) ?
"'".$this->db->idate($this->date_last_gen).
"'" :
'NULL') .
',';
518 $sql .=
" nb_gen_done = ". (!empty($this->nb_gen_done) ? ((int) $this->nb_gen_done) : 0) .
',';
519 $sql .=
" nb_gen_max = ". (!empty($this->nb_gen_max) ? ((int) $this->nb_gen_max) : 0) .
',';
520 $sql .=
" auto_validate = ". (!empty($this->auto_validate) ? ((int) $this->auto_validate) : 0);
521 $sql .=
" WHERE rowid = ". (int) $this->
id;
523 dol_syslog(get_class($this).
"::update", LOG_DEBUG);
524 $resql = $this->db->query(
$sql);
533 if (!$error && !$notrigger) {
535 $result = $this->
call_trigger(
'SUPPLIERBILLREC_MODIFY', $user);
537 $this->db->rollback();
545 $this->error = $this->db->lasterror();
546 $this->db->rollback();
559 public function fetch($rowid, $ref =
'', $ref_ext =
'')
561 $sql =
'SELECT f.rowid, f.titre, f.ref_supplier, f.entity, f.fk_soc';
562 $sql .=
', f.datec, f.tms, f.suspended';
563 $sql .=
', f.libelle as label';
564 $sql .=
', f.vat_src_code, f.localtax1, f.localtax2';
565 $sql .=
', f.total_tva, f.total_ht, f.total_ttc';
566 $sql .=
', f.fk_user_author, f.fk_user_modif';
567 $sql .=
', f.fk_projet as fk_project, f.fk_account';
568 $sql .=
', f.fk_mode_reglement, p.code as mode_reglement_code, p.libelle as mode_reglement_libelle';
569 $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';
570 $sql .=
', f.date_lim_reglement';
571 $sql .=
', f.note_private, f.note_public, f.modelpdf';
572 $sql .=
', f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht, f.multicurrency_total_tva, f.multicurrency_total_ttc';
573 $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';
574 $sql .=
', f.generate_pdf';
575 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec as f';
576 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_payment_term as c ON f.fk_cond_reglement = c.rowid';
577 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as p ON f.fk_mode_reglement = p.id';
578 $sql .=
' WHERE f.entity IN ('.getEntity(
'invoice').
')';
580 $sql .=
' AND f.rowid='. (int) $rowid;
582 $sql .=
" AND f.titre='".$this->db->escape($ref).
"'";
584 $sql .=
' AND f.rowid = 0';
587 $result = $this->db->query(
$sql);
589 if ($this->db->num_rows($result)) {
590 $obj = $this->db->fetch_object($result);
594 $this->
id = $obj->rowid;
595 $this->titre = $obj->titre;
596 $this->
ref = $obj->$keyforref;
597 $this->ref_supplier = $obj->ref_supplier;
598 $this->entity = $obj->entity;
599 $this->socid = $obj->fk_soc;
600 $this->date_creation = $obj->datec;
601 $this->date_modification = $obj->tms;
602 $this->suspended = $obj->suspended;
603 $this->libelle = $obj->label;
604 $this->label = $obj->label;
605 $this->vat_src_code = $obj->vat_src_code;
606 $this->total_localtax1 = $obj->localtax1;
607 $this->total_localtax2 = $obj->localtax2;
608 $this->total_ht = $obj->total_ht;
609 $this->total_tva = $obj->total_tva;
610 $this->total_ttc = $obj->total_ttc;
611 $this->user_author = $obj->fk_user_author;
612 $this->user_modif = $obj->fk_user_modif;
613 $this->fk_project = $obj->fk_project;
614 $this->fk_account = $obj->fk_account;
615 $this->mode_reglement_id = $obj->fk_mode_reglement;
616 $this->mode_reglement_code = $obj->mode_reglement_code;
617 $this->mode_reglement = $obj->mode_reglement_libelle;
618 $this->cond_reglement_id = $obj->fk_cond_reglement;
619 $this->cond_reglement_code = $obj->cond_reglement_code;
620 $this->cond_reglement = $obj->cond_reglement_libelle;
621 $this->cond_reglement_doc = $obj->cond_reglement_libelle_doc;
622 $this->date_lim_reglement = $this->db->jdate($obj->date_lim_reglement);
623 $this->note_private = $obj->note_private;
624 $this->note_public = $obj->note_public;
625 $this->model_pdf = $obj->modelpdf;
628 $this->fk_multicurrency = $obj->fk_multicurrency;
629 $this->multicurrency_code = $obj->multicurrency_code;
630 $this->multicurrency_tx = $obj->multicurrency_tx;
631 $this->multicurrency_total_ht = $obj->multicurrency_total_ht;
632 $this->multicurrency_total_tva = $obj->multicurrency_total_tva;
633 $this->multicurrency_total_ttc = $obj->multicurrency_total_ttc;
635 $this->usenewprice = $obj->usenewprice;
636 $this->frequency = $obj->frequency;
637 $this->unit_frequency = $obj->unit_frequency;
638 $this->date_when = $this->db->jdate($obj->date_when);
639 $this->date_last_gen = $this->db->jdate($obj->date_last_gen);
640 $this->nb_gen_done = $obj->nb_gen_done;
641 $this->nb_gen_max = $obj->nb_gen_max;
642 $this->auto_validate = $obj->auto_validate;
643 $this->generate_pdf = $obj->generate_pdf;
646 if ($this->statut == self::STATUS_DRAFT) {
647 $this->brouillon = 1;
659 $this->error = $this->db->lasterror();
664 $this->error =
'Bill with id '.$rowid.
' or ref '.$ref.
' not found';
665 dol_syslog(
'Facture::Fetch Error '.$this->error, LOG_ERR);
669 $this->error = $this->db->error();
694 $this->lines = array();
705 $sql =
'SELECT l.rowid,';
706 $sql .=
' l.fk_facture_fourn, l.fk_parent_line, l.fk_product, l.ref, l.label, l.description,';
707 $sql .=
' l.pu_ht, l.pu_ttc, l.qty, l.remise_percent, l.fk_remise_except, l.vat_src_code, l.tva_tx,';
708 $sql .=
' l.localtax1_tx, l.localtax2_tx, l.localtax1_type, l.localtax2_type,';
709 $sql .=
' l.total_ht, l.total_tva, l.total_ttc, total_localtax1, total_localtax2,';
710 $sql .=
' l.product_type, l.date_start, l.date_end,';
711 $sql .=
' l.info_bits, l.special_code, l.rang,';
712 $sql .=
' l.fk_unit, l.import_key, l.fk_user_author, l.fk_user_modif,';
713 $sql .=
' l.fk_multicurrency, l.multicurrency_code, l.multicurrency_subprice, l.multicurrency_total_ht, l.multicurrency_total_tva, l.multicurrency_total_ttc,';
714 $sql .=
' p.ref as product_ref, p.fk_product_type as fk_product_type, p.label as product_label, p.description as product_desc';
715 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_det_rec as l';
716 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'product as p ON l.fk_product = p.rowid';
717 $sql .=
' WHERE l.fk_facture_fourn = '. (int) $this->
id;
718 $sql .=
' ORDER BY l.rang';
720 dol_syslog(
'FactureFournisseurRec::fetch_lines', LOG_DEBUG);
722 $result = $this->db->query(
$sql);
724 $num = $this->db->num_rows($result);
727 $objp = $this->db->fetch_object($result);
731 $line->id = $objp->rowid;
732 $line->fk_facture_fourn = $objp->fk_facture_fourn;
733 $line->fk_parent = $objp->fk_parent_line;
734 $line->fk_product = $objp->fk_product;
735 $line->ref_supplier = $objp->ref;
736 $line->label = $objp->label;
737 $line->description = $objp->description;
738 $line->pu_ht = $objp->pu_ht;
739 $line->pu_ttc = $objp->pu_ttc;
740 $line->qty = $objp->qty;
741 $line->remise_percent = $objp->remise_percent;
742 $line->fk_remise_except = $objp->fk_remise_except;
743 $line->vat_src_code = $objp->vat_src_code;
744 $line->tva_tx = $objp->tva_tx;
745 $line->localtax1_tx = $objp->localtax1_tx;
746 $line->localtax1_type = $objp->localtax1_type;
747 $line->localtax2_tx = $objp->localtax2_tx;
748 $line->localtax2_type = $objp->localtax2_type;
749 $line->total_ht = $objp->total_ht;
750 $line->total_tva = $objp->total_tva;
751 $line->total_localtax1 = $objp->total_localtax1;
752 $line->total_localtax2 = $objp->total_localtax2;
753 $line->total_ttc = $objp->total_ttc;
754 $line->product_type = $objp->product_type;
755 $line->date_start = $objp->date_start;
756 $line->date_end = $objp->date_end;
757 $line->info_bits = $objp->info_bits ;
758 $line->special_code = $objp->special_code;
759 $line->rang = $objp->rang;
760 $line->fk_unit = $objp->fk_unit;
761 $line->import_key = $objp->import_key;
762 $line->fk_user_author = $objp->fk_user_author;
763 $line->fk_user_modif = $objp->fk_user_modif;
764 $line->fk_multicurrency = $objp->fk_multicurrency;
765 $line->multicurrency_code = $objp->multicurrency_code;
766 $line->multicurrency_subprice = $objp->multicurrency_subprice;
767 $line->multicurrency_total_ht = $objp->multicurrency_total_ht;
768 $line->multicurrency_total_tva = $objp->multicurrency_total_tva;
769 $line->multicurrency_total_ttc = $objp->multicurrency_total_ttc;
771 $line->fetch_optionals();
773 $this->lines[$i] = $line;
778 $this->db->free($result);
781 $this->error = $this->db->lasterror();
795 public function delete(
User $user, $notrigger = 0, $idwarehouse = -1)
799 dol_syslog(get_class($this).
"::delete rowid=".((
int) $rowid), LOG_DEBUG);
804 $main = MAIN_DB_PREFIX.
'facture_fourn_det_rec';
805 $ef = $main.
"_extrafields";
807 $sqlef =
"DELETE FROM ".$ef.
" WHERE fk_object IN (SELECT rowid FROM ".$main.
" WHERE fk_facture_fourn = ". (int) $rowid .
")";
808 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"facture_fourn_det_rec WHERE fk_facture_fourn = ". (int) $rowid;
810 if ($this->db->query($sqlef) && $this->db->query(
$sql)) {
811 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"facture_fourn_rec WHERE rowid = ". (int) $rowid;
813 if ($this->db->query(
$sql)) {
825 $this->error = $this->db->lasterror();
829 $this->error = $this->db->lasterror();
832 if (!$error && !$notrigger) {
834 $result = $this->
call_trigger(
'SUPPLIERBILLREC_DELETE', $user);
844 $this->db->rollback();
875 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)
877 global $mysoc, $user;
879 include_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
883 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);
890 if ($this->suspended == self::STATUS_NOTSUSPENDED) {
896 if (preg_match(
'/\((.*)\)/', $txtva, $reg)) {
897 $vat_src_code = $reg[1];
898 $txtva = preg_replace(
'/\s*\(.*\)/',
'', $txtva);
902 $fk_product = empty($fk_product) ? 0 : $fk_product;
903 $label = empty($label) ?
'' : $label;
904 $remise_percent = empty($remise_percent) ? 0 :
price2num($remise_percent);
908 if (!preg_match(
'/\((.*)\)/', $txtva)) {
913 $txtva = !empty($txtva) ? $txtva : 0;
914 $txlocaltax1 = !empty($txlocaltax1) ? $txlocaltax1 : 0;
915 $txlocaltax2 = !empty($txlocaltax2) ? $txlocaltax2 : 0;
916 $info_bits = !empty($info_bits) ? $info_bits : 0;
917 $info_bits = !empty($info_bits) ? $info_bits : 0;
918 $pu = $price_base_type ==
'HT' ? $pu_ht : $pu_ttc;
924 $tabprice =
calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $mysoc, $localtaxes_type, 100, $this->multicurrency_tx, $pu_ht_devise);
925 $total_ht = $tabprice[0];
926 $total_tva = $tabprice[1];
927 $total_ttc = $tabprice[2];
928 $total_localtax1 = $tabprice[9];
929 $total_localtax2 = $tabprice[10];
930 $pu_ht = $tabprice[3];
933 $multicurrency_total_ht = $tabprice[16];
934 $multicurrency_total_tva = $tabprice[17];
935 $multicurrency_total_ttc = $tabprice[18];
936 $pu_ht_devise = $tabprice[19];
939 $product_type = $type;
941 $product =
new Product($this->db);
942 $result = $product->fetch($fk_product);
946 $product_type = $product->type;
948 $label = $product->label;
952 $sql =
'INSERT INTO ' . MAIN_DB_PREFIX .
'facture_fourn_det_rec (';
953 $sql .=
'fk_facture_fourn';
954 $sql .=
', fk_product';
957 $sql .=
', description';
961 $sql .=
', remise_percent';
962 $sql .=
', fk_remise_except';
963 $sql .=
', vat_src_code';
965 $sql .=
', localtax1_tx';
966 $sql .=
', localtax1_type';
967 $sql .=
', localtax2_tx';
968 $sql .=
', localtax2_type';
969 $sql .=
', total_ht';
970 $sql .=
', total_tva';
971 $sql .=
', total_localtax1';
972 $sql .=
', total_localtax2';
973 $sql .=
', total_ttc';
974 $sql .=
', product_type';
975 $sql .=
', date_start';
976 $sql .=
', date_end';
977 $sql .=
', info_bits';
978 $sql .=
', special_code';
981 $sql .=
', fk_user_author';
982 $sql .=
', fk_multicurrency, multicurrency_code, multicurrency_subprice, multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc';
983 $sql .=
') VALUES (';
984 $sql .=
' ' . (int) $facid;
985 $sql .=
', ' . (!empty($fk_product) ?
"'" . $this->db->escape($fk_product) .
"'" :
'null');
986 $sql .=
', ' . (!empty($ref) ?
"'" . $this->db->escape($ref) .
"'" :
'null');
987 $sql .=
', ' . (!empty($label) ?
"'" . $this->db->escape($label) .
"'" :
'null');
988 $sql .=
", '" . $this->db->escape($desc) .
"'";
994 $sql .=
", '" . $this->db->escape($vat_src_code) .
"'";
997 $sql .=
", '" . $this->db->escape(isset($localtaxes_type[0]) ? $localtaxes_type[0] :
'') .
"'";
999 $sql .=
", '" . $this->db->escape(isset($localtaxes_type[2]) ? $localtaxes_type[2] :
'') .
"'";
1005 $sql .=
', ' . (int) $product_type;
1006 $sql .=
', ' . ($date_start > 0 ? (int) $date_start :
'NULL');
1007 $sql .=
', ' . ($date_end > 0 ? (int) $date_end :
'NULL');
1008 $sql .=
', ' . (int) $info_bits;
1009 $sql .=
', ' . (int) $special_code;
1010 $sql .=
', ' . (int) $rang;
1011 $sql .=
', ' . ($fk_unit ? (int) $fk_unit :
'NULL');
1012 $sql .=
', ' . (int) $user;
1013 $sql .=
', ' . (int) $this->fk_multicurrency;
1014 $sql .=
", '" . $this->db->escape($this->multicurrency_code) .
"'";
1021 dol_syslog(get_class($this).
'::addline', LOG_DEBUG);
1022 if ($this->db->query(
$sql)) {
1023 $lineId = $this->db->last_insert_id(MAIN_DB_PREFIX.
'facture_fourn_det_rec');
1026 $this->db->commit();
1029 $this->db->rollback();
1030 $this->error = $this->db->lasterror();
1035 $this->error =
'Recurring Invoice is suspended. adding lines not allowed.';
1067 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)
1069 global $mysoc, $user;
1073 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, fk_remise_except=$fk_remise_except, price_base_type=$price_base_type, pu_ttc=$pu_ttc, type=$type, fk_unit=$fk_unit, pu_ht_devise=$pu_ht_devise", LOG_DEBUG);
1074 include_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
1081 if ($this->brouillon) {
1083 $fk_product = empty($fk_product) ? 0 : $fk_product;
1084 $label = empty($label) ?
'' : $label;
1085 $remise_percent = empty($remise_percent) ? 0 :
price2num($remise_percent);
1087 $info_bits = empty($info_bits) ? 0 : $info_bits;
1090 $pu_ht_devise =
price2num($pu_ht_devise);
1092 if (!preg_match(
'/\((.*)\)/', $txtva)) {
1096 $txlocaltax1 = empty($txlocaltax1) ? 0 :
price2num($txlocaltax1);
1097 $txlocaltax2 = empty($txlocaltax2) ? 0 :
price2num($txlocaltax2);
1098 $this->multicurrency_subprice = empty($this->multicurrency_subprice) ? 0 : $this->multicurrency_subprice;
1099 $this->multicurrency_total_ht = empty($this->multicurrency_total_ht) ? 0 : $this->multicurrency_total_ht;
1100 $this->multicurrency_total_tva = empty($this->multicurrency_total_tva) ? 0 : $this->multicurrency_total_tva;
1101 $this->multicurrency_total_ttc = empty($this->multicurrency_total_ttc) ? 0 : $this->multicurrency_total_ttc;
1103 $pu = $price_base_type ==
'HT' ? $pu_ht : $pu_ttc;
1115 if (preg_match(
'/\((.*)\)/', $txtva, $reg)) {
1116 $vat_src_code = $reg[1];
1117 $txtva = preg_replace(
'/\s*\(.*\)/',
'', $txtva);
1120 $tabprice =
calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $mysoc, $localtaxes_type, 100, $this->multicurrency_tx, $pu_ht_devise);
1122 $total_ht = $tabprice[0];
1123 $total_tva = $tabprice[1];
1124 $total_ttc = $tabprice[2];
1125 $total_localtax1 = $tabprice[9];
1126 $total_localtax2 = $tabprice[10];
1127 $pu_ht = $tabprice[3];
1128 $pu_tva = $tabprice[4];
1129 $pu_ttc = $tabprice[5];
1132 $multicurrency_total_ht = $tabprice[16];
1133 $multicurrency_total_tva = $tabprice[17];
1134 $multicurrency_total_ttc = $tabprice[18];
1135 $pu_ht_devise = $tabprice[19];
1137 $product_type = $type;
1139 $product =
new Product($this->db);
1140 $result = $product->fetch($fk_product);
1141 $product_type = $product->type;
1144 $sql =
'UPDATE ' . MAIN_DB_PREFIX .
'facture_fourn_det_rec SET';
1145 $sql .=
' fk_facture_fourn = ' . ((int) $facid);
1146 $sql .=
', fk_product = ' . ($fk_product > 0 ? ((int) $fk_product) :
'null');
1147 $sql .=
", ref = '" . $this->db->escape($ref) .
"'";
1148 $sql .=
", label = '" . $this->db->escape($label) .
"'";
1149 $sql .=
", description = '" . $this->db->escape($desc) .
"'";
1152 $sql .=
", remise_percent = '" .
price2num($remise_percent) .
"'";
1153 $sql .=
", vat_src_code = '" . $this->db->escape($vat_src_code) .
"'";
1155 $sql .=
', localtax1_tx = ' . (
float) $txlocaltax1;
1156 $sql .=
", localtax1_type = '" . $this->db->escape($localtaxes_type[0]) .
"'";
1157 $sql .=
', localtax2_tx = ' . (
float) $txlocaltax2;
1158 $sql .=
", localtax2_type = '" . $this->db->escape($localtaxes_type[2]) .
"'";
1161 $sql .=
", total_localtax1 = '" .
price2num($total_localtax1) .
"'";
1162 $sql .=
", total_localtax2 = '" .
price2num($total_localtax2) .
"'";
1164 $sql .=
', product_type = ' . (int) $product_type;
1165 $sql .=
', date_start = ' . (empty($date_start) ?
'NULL' : (int) $date_start);
1166 $sql .=
', date_end = ' . (empty($date_end) ?
'NULL' : (int) $date_end);
1167 $sql .=
', info_bits = ' . (int) $info_bits;
1168 $sql .=
', special_code = ' . (int) $special_code;
1169 $sql .=
', rang = ' . (int) $rang;
1170 $sql .=
', fk_unit = ' . ($fk_unit ?
"'" . $this->db->escape($fk_unit) .
"'" :
'null');
1171 $sql .=
', fk_user_modif = ' . (int) $user;
1172 $sql .=
', multicurrency_subprice = '.price2num($pu_ht_devise);
1173 $sql .=
', multicurrency_total_ht = '.price2num($multicurrency_total_ht);
1174 $sql .=
', multicurrency_total_tva = '.price2num($multicurrency_total_tva);
1175 $sql .=
', multicurrency_total_ttc = '.price2num($multicurrency_total_ttc);
1176 $sql .=
' WHERE rowid = ' . (int) $rowid;
1178 dol_syslog(get_class($this).
'::updateline', LOG_DEBUG);
1179 if ($this->db->query(
$sql)) {
1184 $this->error = $this->db->lasterror();
1198 if (empty($this->date_when)) {
1212 if ($this->nb_gen_max > 0 && ($this->nb_gen_done >= $this->nb_gen_max)) {
1227 return ($this->
isMaxNbGenReached() ?
'<strike>' :
'').$ret.($this->isMaxNbGenReached() ?
'</strike>' :
'');
1242 global $conf, $langs, $db, $user, $hookmanager;
1248 $langs->loadLangs(array(
'main',
'bills'));
1252 $today =
dol_mktime(23, 59, 59, $tmparray[
'mon'], $tmparray[
'mday'], $tmparray[
'year']);
1254 dol_syslog(
'createRecurringInvoices restrictioninvoiceid=' .$restrictioninvoiceid.
' forcevalidation=' .$forcevalidation);
1256 $sql =
'SELECT rowid FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec';
1257 $sql .=
' WHERE frequency > 0';
1258 $sql .=
" AND (date_when IS NULL OR date_when <= '".$this->db->idate($today).
"')";
1259 $sql .=
' AND (nb_gen_done < nb_gen_max OR nb_gen_max = 0)';
1260 $sql .=
' AND suspended = 0';
1261 $sql .=
' AND entity = '. (int) $conf->entity;
1262 if ($restrictioninvoiceid > 0) {
1263 $sql .=
' AND rowid = '. (int) $restrictioninvoiceid;
1265 $sql .= $this->db->order(
'entity',
'ASC');
1267 $parameters = array(
1268 'restrictioninvoiceid' => $restrictioninvoiceid,
1269 'forcevalidation' => $forcevalidation,
1271 $reshook = $hookmanager->executeHooks(
'beforeCreationOfRecurringInvoices', $parameters,
$sql);
1273 $resql = $this->db->query(
$sql);
1276 $num = $this->db->num_rows($resql);
1279 $this->output .= $langs->trans(
'FoundXQualifiedRecurringInvoiceTemplate', $num).
"\n";
1281 $this->output .= $langs->trans(
'NoQualifiedRecurringInvoiceTemplateFound');
1284 $saventity = $conf->entity;
1287 $line = $this->db->fetch_object($resql);
1291 $invoiceidgenerated = 0;
1293 $new_fac_fourn =
null;
1295 $facturerec->fetch($line->rowid);
1297 if ($facturerec->id > 0) {
1299 $conf->entity = $facturerec->entity;
1301 dol_syslog(
'createRecurringInvoices Process invoice template id=' .$facturerec->id.
', ref=' .$facturerec->ref.
', entity=' .$facturerec->entity);
1304 $new_fac_fourn->fac_rec = $facturerec->id;
1305 $new_fac_fourn->fk_fac_rec_source = $facturerec->id;
1308 $new_fac_fourn->brouillon = 1;
1311 $new_fac_fourn->date = empty($facturerec->date_when) ? $now : $facturerec->date_when;
1312 $new_fac_fourn->socid = $facturerec->socid;
1313 $new_fac_fourn->lines = $facturerec->lines;
1314 $new_fac_fourn->ref_supplier = $facturerec->ref_supplier;
1315 $new_fac_fourn->model_pdf = $facturerec->model_pdf;
1316 $new_fac_fourn->fk_project = $facturerec->fk_project;
1317 $new_fac_fourn->libelle = $facturerec->libelle;
1319 $invoiceidgenerated = $new_fac_fourn->create($user);
1320 if ($invoiceidgenerated <= 0) {
1321 $this->errors = $new_fac_fourn->errors;
1322 $this->error = $new_fac_fourn->error;
1325 if (!$error && ($facturerec->auto_validate || $forcevalidation)) {
1326 $result = $new_fac_fourn->validate($user);
1328 $this->errors = $new_fac_fourn->errors;
1329 $this->error = $new_fac_fourn->error;
1334 if (!$error && $facturerec->generate_pdf) {
1336 $new_fac_fourn->fetch($new_fac_fourn->id);
1337 $result = $new_fac_fourn->generateDocument($facturerec->model_pdf, $langs);
1339 $this->errors = $new_fac_fourn->errors;
1340 $this->error = $new_fac_fourn->error;
1346 $this->error =
'Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity.
"\n";
1347 $this->errors[] =
'Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity;
1348 dol_syslog(
'createRecurringInvoices Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity);
1351 if (!$error && $invoiceidgenerated >= 0) {
1352 $facturerec->nb_gen_done++;
1353 $facturerec->date_last_gen =
dol_now();
1354 $facturerec->date_when= $facturerec->getNextDate();
1355 $facturerec->update($user);
1356 $this->db->commit(
'createRecurringInvoices Process invoice template id=' .$facturerec->id.
', title=' .$facturerec->titre);
1357 dol_syslog(
'createRecurringInvoices Process invoice template ' .$facturerec->titre.
' is finished with a success generation');
1359 $this->output .= $langs->trans(
'InvoiceGeneratedFromTemplate', $new_fac_fourn->ref, $facturerec->titre).
"\n";
1361 $this->db->rollback(
'createRecurringInvoices Process invoice template id=' .$facturerec->id.
', title=' .$facturerec->titre);
1364 $parameters = array(
1367 'errorCount' => $error,
1368 'invoiceidgenerated' => $invoiceidgenerated,
1369 'facturerec' => $facturerec,
1372 $reshook = $hookmanager->executeHooks(
'afterCreationOfRecurringInvoice', $parameters, $new_fac_fourn);
1377 $conf->entity = $saventity;
1382 $this->output = trim($this->output);
1384 return $error ? $error : 0;
1399 public function getNomUrl($withpicto = 0, $option =
'', $max = 0, $short = 0, $moretitle =
'', $notooltip =
'', $save_lastsearch_value = -1)
1401 global $langs, $hookmanager;
1405 $label =
'<u>'.$langs->trans(
'RepeatableInvoice').
'</u>';
1406 if (!empty($this->
ref)) {
1407 $label .=
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
1409 if ($this->frequency > 0) {
1410 $label .=
'<br><b>'.$langs->trans(
'Frequency').
':</b> '.$langs->trans(
'FrequencyPer_'.$this->unit_frequency, $this->frequency);
1412 if (!empty($this->date_last_gen)) {
1413 $label .=
'<br><b>'.$langs->trans(
'DateLastGeneration').
':</b> '.
dol_print_date($this->date_last_gen,
'dayhour');
1415 if ($this->frequency > 0) {
1416 if (!empty($this->date_when)) {
1417 $label .=
'<br><b>'.$langs->trans(
'NextDateToExecution').
':</b> ';
1418 $label .= (empty($this->suspended) ?
'' :
'<strike>').
dol_print_date($this->date_when,
'day').(empty($this->suspended) ?
'' :
'</strike>');
1419 if (!empty($this->suspended)) {
1420 $label .=
' ('.$langs->trans(
'Disabled').
')';
1425 $url = DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.$this->id;
1431 if ($option !=
'nolink') {
1433 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
1434 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
'PHP_SELF'])) {
1435 $add_save_lastsearch_values = 1;
1437 if ($add_save_lastsearch_values) {
1438 $url .=
'&save_lastsearch_values=1';
1442 $linkstart =
'<a href="'.$url.
'" title="'.
dol_escape_htmltag($label, 1).
'" class="classfortooltip">';
1445 $result .= $linkstart;
1447 $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);
1449 if ($withpicto != 2) {
1450 $result .= $this->ref;
1452 $result .= $linkend;
1454 $hookmanager->initHooks(array($this->element .
'dao'));
1455 $parameters = array(
'id'=>$this->
id,
'getnomurl' => &$result);
1456 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
1458 $result = $hookmanager->resPrint;
1460 $result .= $hookmanager->resPrint;
1474 return $this->
LibStatut($this->frequency ? 1 : 0, $this->suspended, $mode, $alreadypaid, empty($this->
type) ? 0 : $this->
type);
1488 public function LibStatut($recur, $status, $mode = 0, $alreadypaid = -1, $type = 0)
1492 $langs->load(
'bills');
1494 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1495 $statusType =
'status0';
1500 if ($status == self::STATUS_SUSPENDED) {
1501 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1503 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1506 if ($status == self::STATUS_SUSPENDED) {
1507 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1509 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1512 } elseif ($mode == 1) {
1515 if ($status == self::STATUS_SUSPENDED) {
1516 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1518 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1521 if ($status == self::STATUS_SUSPENDED) {
1522 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1524 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1527 } elseif ($mode == 2) {
1529 if ($status == self::STATUS_SUSPENDED) {
1530 $statusType =
'status6';
1531 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1533 $statusType =
'status4';
1534 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1537 if ($status == self::STATUS_SUSPENDED) {
1538 $statusType =
'status6';
1539 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1541 $statusType =
'status0';
1542 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1545 } elseif ($mode == 3) {
1548 if ($status == self::STATUS_SUSPENDED) {
1549 $statusType =
'status6';
1550 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1552 $statusType =
'status4';
1553 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1556 if ($status == self::STATUS_SUSPENDED) {
1557 $statusType =
'status6';
1558 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1560 $statusType =
'status0';
1561 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1564 } elseif ($mode == 4) {
1567 if ($status == self::STATUS_SUSPENDED) {
1568 $statusType =
'status6';
1569 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1571 $statusType =
'status4';
1572 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1575 if ($status == self::STATUS_SUSPENDED) {
1576 $statusType =
'status6';
1577 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1579 $statusType =
'status0';
1580 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1583 } elseif ($mode == 5 || $mode == 6) {
1589 if ($status == self::STATUS_SUSPENDED) {
1590 $statusType =
'status6';
1591 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1593 $statusType =
'status4';
1594 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1597 if ($status == self::STATUS_SUSPENDED) {
1598 $statusType =
'status6';
1599 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1601 $statusType =
'status0';
1602 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1607 $labelStatusShort = $labelStatus;
1609 return dolGetStatus($labelStatus, $labelStatusShort,
'', $statusType, $mode);
1622 global $user, $langs, $conf;
1626 $nownotime =
dol_mktime(0, 0, 0, $arraynow[
'mon'], $arraynow[
'mday'], $arraynow[
'year']);
1632 $sql =
'SELECT rowid';
1633 $sql .=
' FROM ' .MAIN_DB_PREFIX.
'product';
1634 $sql .=
' WHERE entity IN (' .getEntity(
'product').
')';
1635 $sql .= $this->db->plimit(100);
1637 $resql = $this->db->query(
$sql);
1639 $num_prods = $this->db->num_rows($resql);
1641 while ($i < $num_prods) {
1643 $row = $this->db->fetch_row($resql);
1644 $prodids[$i] = $row[0];
1650 $this->
ref =
'SPECIMEN';
1651 $this->title =
'SPECIMEN';
1652 $this->specimen = 1;
1654 $this->date = $nownotime;
1655 $this->date_lim_reglement = $nownotime + 3600 * 24 * 30;
1656 $this->cond_reglement_id = 1;
1657 $this->cond_reglement_code =
'RECEP';
1659 $this->mode_reglement_id = 0;
1660 $this->mode_reglement_code =
'';
1661 $this->note_public =
'This is a comment (public)';
1662 $this->note_private =
'This is a comment (private)';
1663 $this->note =
'This is a comment (private)';
1664 $this->fk_incoterms = 0;
1665 $this->location_incoterms =
'';
1667 if (empty($option) || $option !=
'nolines') {
1671 while ($xnbp < $nbp) {
1673 $line->desc = $langs->trans(
'Description').
' ' .$xnbp;
1675 $line->subprice = 100;
1676 $line->tva_tx = 19.6;
1677 $line->localtax1_tx = 0;
1678 $line->localtax2_tx = 0;
1679 $line->remise_percent = 0;
1681 $prodid = mt_rand(1, $num_prods);
1682 $line->fk_product = $prodids[$prodid];
1684 $line->total_ht = -100;
1685 $line->total_ttc = -119.6;
1686 $line->total_tva = -19.6;
1687 } elseif ($xnbp == 2) {
1688 $line->subprice = -100;
1689 $line->total_ht = -100;
1690 $line->total_ttc = -119.6;
1691 $line->total_tva = -19.6;
1692 $line->remise_percent = 0;
1693 } elseif ($xnbp == 3) {
1694 $prodid = mt_rand(1, $num_prods);
1695 $line->fk_product = $prodids[$prodid];
1696 $line->total_ht = 50;
1697 $line->total_ttc = 59.8;
1698 $line->total_tva = 9.8;
1699 $line->remise_percent = 50;
1702 $prodid = mt_rand(1, $num_prods);
1703 $line->fk_product = $prodids[$prodid];
1704 $line->total_ht = 100;
1705 $line->total_ttc = 119.6;
1706 $line->total_tva = 19.6;
1707 $line->remise_percent = 00;
1710 $this->lines[$xnbp] = $line;
1713 $this->total_ht += $line->total_ht;
1714 $this->total_tva += $line->total_tva;
1715 $this->total_ttc += $line->total_ttc;
1717 $this->revenuestamp = 0;
1721 $line->desc = $langs->trans(
'Description').
' (offered line)';
1723 $line->subprice = 100;
1724 $line->tva_tx = 19.6;
1725 $line->localtax1_tx = 0;
1726 $line->localtax2_tx = 0;
1727 $line->remise_percent = 100;
1728 $line->total_ht = 0;
1729 $line->total_ttc = 0;
1730 $line->total_tva = 0;
1731 $prodid = mt_rand(1, $num_prods);
1732 $line->fk_product = $prodids[$prodid];
1734 $this->lines[$xnbp] = $line;
1738 $this->usenewprice = 0;
1767 if (!$this->table_element) {
1768 dol_syslog(get_class($this).
'::setFrequencyAndUnit was called on objet with property table_element not defined', LOG_ERR);
1772 if (!empty($frequency) && empty($unit)) {
1773 dol_syslog(get_class($this).
'::setFrequencyAndUnit was called on objet with params frequency defined but unit not defined', LOG_ERR);
1777 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1778 $sql .=
" SET frequency = ".($frequency ? ((int) $frequency) :
"NULL");
1779 if (!empty($unit)) {
1780 $sql .=
", unit_frequency = '".$this->db->escape($unit).
"'";
1782 $sql .=
" WHERE rowid = ".((int) $this->
id);
1784 dol_syslog(get_class($this).
'::setFrequencyAndUnit', LOG_DEBUG);
1786 if ($this->db->query(
$sql)) {
1787 $this->frequency = $frequency;
1788 if (!empty($unit)) {
1789 $this->unit_frequency = $unit;
1793 $this->error = $this->db->lasterror();
1807 if (!$this->table_element) {
1808 dol_syslog(get_class($this).
'::setNextDate was called on objet with property table_element not defined', LOG_ERR);
1811 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1812 $sql .=
" SET date_when = " .($date ?
"'".$this->db->idate($date).
"'" :
"NULL");
1813 if ($increment_nb_gen_done > 0) {
1814 $sql .=
", nb_gen_done = nb_gen_done + 1";
1816 $sql .=
" WHERE rowid = " . (int) $this->
id;
1818 dol_syslog(get_class($this).
'::setNextDate', LOG_DEBUG);
1820 if ($this->db->query(
$sql)) {
1821 $this->date_when = $date;
1822 if ($increment_nb_gen_done > 0) {
1823 $this->nb_gen_done++;
1827 $this->error = $this->db->lasterror();
1840 if (!$this->table_element) {
1841 dol_syslog(get_class($this).
'::setMaxPeriod was called on objet with property table_element not defined', LOG_ERR);
1849 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1850 $sql .=
" SET nb_gen_max = ". (int) $nb;
1851 $sql .=
" WHERE rowid = " . (int) $this->
id;
1853 dol_syslog(get_class($this).
'::setMaxPeriod', LOG_DEBUG);
1855 if ($this->db->query(
$sql)) {
1856 $this->nb_gen_max = $nb;
1872 if (!$this->table_element) {
1873 dol_syslog(get_class($this).
'::setAutoValidate was called on objet with property table_element not defined', LOG_ERR);
1877 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1878 $sql .=
" SET auto_validate = ".((int) $validate);
1879 $sql .=
" WHERE rowid = " . (int) $this->
id;
1881 dol_syslog(get_class($this).
'::setAutoValidate', LOG_DEBUG);
1883 if ($this->db->query(
$sql)) {
1884 $this->auto_validate = $validate;
1900 if (!$this->table_element) {
1901 dol_syslog(get_class($this).
'::setGeneratePdf was called on objet with property table_element not defined', LOG_ERR);
1905 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1906 $sql .=
" SET generate_pdf = ". (int) $validate;
1907 $sql .=
" WHERE rowid = " . (int) $this->
id;
1909 dol_syslog(get_class($this).
'::setGeneratePdf', LOG_DEBUG);
1911 if ($this->db->query(
$sql)) {
1912 $this->generate_pdf = $validate;
1928 if (!$this->table_element) {
1929 dol_syslog(get_class($this).
'::setModelPdf was called on objet with property table_element not defined', LOG_ERR);
1933 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1934 $sql .=
" SET modelpdf = '".$this->db->escape($model).
"'";
1935 $sql .=
" WHERE rowid = " . (int) $this->
id;
1937 dol_syslog(get_class($this).
'::setModelPdf', LOG_DEBUG);
1939 if ($this->db->query(
$sql)) {
1940 $this->model_pdf = $model;
1960 public $element =
'invoice_supplier_det_rec';
1965 public $table_element =
'facture_fourn_det_rec';
1967 public $fk_facture_fourn;
1970 public $ref_supplier;
1972 public $description;
1976 public $remise_percent;
1977 public $fk_remise_except;
1978 public $vat_src_code;
1980 public $localtax1_tx;
1981 public $localtax1_type;
1982 public $localtax2_tx;
1983 public $localtax2_type;
1985 public $product_type;
1989 public $special_code;
1992 public $fk_user_author;
1993 public $fk_user_modif;
1994 public $fk_multicurrency;
1995 public $multicurrency_subprice;
2021 public function delete(
User $user, $notrigger =
false)
2029 $result = $this->
call_trigger(
'LINESUPPLIERBILLREC_DELETE', $user);
2045 $sql =
'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element .
' WHERE rowid=' . (int) $this->
id;
2047 $res = $this->db->query(
$sql);
2048 if ($res ===
false) {
2050 $this->errors[] = $this->db->lasterror();
2056 $this->db->rollback();
2059 $this->db->commit();
2073 $sql =
'SELECT l.rowid,';
2074 $sql .=
' l.fk_facture_fourn, l.fk_parent_line, l.fk_product,';
2075 $sql .=
' l.ref as ref_supplier, l.label, l.description, l.pu_ht, l.pu_ttc, l.qty, l.remise_percent, l.fk_remise_except,';
2076 $sql .=
' l.vat_src_code, l.tva_tx, l.localtax1_tx, l.localtax1_type, l.localtax2_tx, l.localtax2_type,';
2077 $sql .=
' l.total_ht, l.total_tva, l.total_localtax1, l.total_localtax2, l.total_ttc,';
2078 $sql .=
' l.product_type, l.date_start, l.date_end,';
2079 $sql .=
' l.info_bits, l.special_code, l.rang, l.fk_unit, l.import_key,';
2080 $sql .=
' l.fk_user_author, l.fk_user_modif, l.fk_multicurrency,';
2081 $sql .=
' l.multicurrency_code, l.multicurrency_subprice, l.multicurrency_total_ht, l.multicurrency_total_tva, l.multicurrency_total_ttc,';
2082 $sql .=
' p.ref as product_ref, p.fk_product_type as fk_product_type, p.label as product_label, p.description as product_desc';
2083 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_det_rec as l';
2084 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'product as p ON l.fk_product = p.rowid';
2085 $sql .=
' WHERE l.rowid = '. (int) $rowid;
2086 $sql .=
' ORDER BY l.rang';
2089 $result = $this->db->query(
$sql);
2091 $objp = $this->db->fetch_object($result);
2093 $this->
id = $objp->rowid;
2094 $this->fk_facture_fourn = $objp->fk_facture_fourn;
2095 $this->fk_parent = $objp->fk_parent_line;
2096 $this->fk_product = $objp->fk_product;
2097 $this->ref_supplier = $objp->ref_supplier;
2098 $this->label = $objp->label;
2100 $this->pu_ht = $objp->pu_ht;
2101 $this->pu_ttc = $objp->pu_ttc;
2102 $this->qty = $objp->qty;
2103 $this->remise_percent = $objp->remise_percent;
2104 $this->fk_remise_except = $objp->fk_remise_except;
2105 $this->vat_src_code = $objp->vat_src_code;
2106 $this->tva_tx = $objp->tva_tx;
2107 $this->localtax1_tx = $objp->localtax1_tx;
2108 $this->localtax1_type = $objp->localtax1_type;
2109 $this->localtax2_tx = $objp->localtax2_tx;
2110 $this->localtax2_type = $objp->localtax2_type;
2111 $this->total_ht = $objp->total_ht;
2112 $this->total_tva = $objp->total_tva;
2113 $this->total_localtax1 = $objp->total_localtax1;
2114 $this->total_localtax2 = $objp->total_localtax2;
2115 $this->total_ttc = $objp->total_ttc;
2116 $this->product_type = $objp->product_type;
2117 $this->date_start = $objp->date_start;
2118 $this->date_end = $objp->date_end;
2119 $this->info_bits = $objp->info_bits;
2120 $this->special_code = $objp->special_code;
2121 $this->rang = $objp->rang;
2122 $this->fk_unit = $objp->fk_unit;
2123 $this->import_key = $objp->import_key;
2124 $this->fk_user_author = $objp->fk_user_author;
2125 $this->fk_user_modif = $objp->fk_user_modif;
2126 $this->fk_multicurrency = $objp->fk_multicurrency;
2127 $this->multicurrency_code = $objp->multicurrency_code;
2128 $this->multicurrency_subprice = $objp->multicurrency_subprice;
2129 $this->multicurrency_total_ht = $objp->multicurrency_total_ht;
2130 $this->multicurrency_total_tva = $objp->multicurrency_total_tva;
2131 $this->multicurrency_total_ttc = $objp->multicurrency_total_ttc;
2133 $this->db->free($result);
2136 $this->error = $this->db->lasterror();
2155 include_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
2157 $sql =
'UPDATE ' . MAIN_DB_PREFIX .
'facture_fourn_det_rec SET';
2158 $sql .=
' fk_facture_fourn = ' . (int) $this->fk_facture_fourn;
2159 $sql .=
', fk_parent_line = ' . (int) $this->fk_parent;
2160 $sql .=
', fk_product = ' . (int) $this->fk_product;
2161 $sql .=
', ref = ' . (!empty($this->
ref) ?
"'" . $this->db->escape($this->
ref) .
"'" :
'NULL');
2162 $sql .=
", label = " . (!empty($this->label) ?
"'" . $this->db->escape($this->label) .
"'" :
'NULL');
2163 $sql .=
", description = '" . $this->db->escape($this->
description) .
"'";
2167 $sql .=
", remise_percent = '" .
price2num($this->remise_percent) .
"'";
2168 $sql .=
', fk_remise_except = ' . (int) $this->fk_remise_except;
2169 $sql .=
", vat_src_code = '" . $this->db->escape($this->vat_src_code) .
"'";
2171 $sql .=
', localtax1_tx = ' .
price2num($this->localtax1_tx);
2172 $sql .=
", localtax1_type = '" . $this->db->escape($this->localtax1_type) .
"'";
2173 $sql .=
', localtax2_tx = ' .
price2num($this->localtax2_tx);
2174 $sql .=
", localtax2_type = '" . $this->db->escape($this->localtax2_type) .
"'";
2175 if (empty($this->skip_update_total)) {
2178 $sql .=
', total_localtax1 = ' .
price2num($this->total_localtax1);
2179 $sql .=
', total_localtax2 = ' .
price2num($this->total_localtax2);
2182 $sql .=
', product_type = ' . (int) $this->product_type;
2183 $sql .=
', date_start = ' . (int) $this->date_start;
2184 $sql .=
', date_end = ' . (int) $this->date_end;
2185 $sql .=
", info_bits = " . ((int) $this->info_bits);
2186 $sql .=
', special_code =' . (int) $this->special_code;
2187 $sql .=
', rang = ' . (int) $this->rang;
2188 $sql .=
', fk_unit = ' .($this->fk_unit ?
"'".$this->db->escape($this->fk_unit).
"'" :
'null');
2189 $sql .=
', fk_user_modif = ' . (int) $user;
2190 $sql .=
' WHERE rowid = ' . (int) $this->
id;
2194 dol_syslog(get_class($this).
'::updateline', LOG_DEBUG);
2195 $resql = $this->db->query(
$sql);
2204 if (!$error && !$notrigger) {
2206 $result = $this->
call_trigger(
'LINESUPPLIERBILLREC_MODIFY', $user);
2214 $this->db->rollback();
2217 $this->db->commit();
2221 $this->error = $this->db->lasterror();
2222 $this->db->rollback();
Superclass for invoices 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...
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='', $f_user=null, $notrigger=0)
Delete all links between an object $this.
update_price($exclspec=0, $roundingadjust='none', $nodatabaseupdate=0, $seller=null)
Update total_ht, total_ttc, total_vat, total_localtax1, total_localtax2 for an object (sum of lines).
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.
Parent class for class inheritance lines of business objects This class is useless for the moment so ...
Class to manage Dolibarr database access.
Class to manage suppliers invoices.
Class to manage supplier invoice lines of templates.
fetch($rowid)
Get line of template invoice.
update(User $user, $notrigger=0)
Update a line to supplier invoice template .
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.
create($user, $facFournId, $notrigger=0)
Create a predefined supplier invoice.
setGeneratePdf($validate)
Update the auto generate documents.
getLinesArray()
Create an array of invoice lines.
initAsSpecimen($option='')
Initialise an instance with random values.
LibStatut($recur, $status, $mode=0, $alreadypaid=-1, $type=0)
Return label of a status.
isMaxNbGenReached()
Return if maximum number of generation is reached.
setAutoValidate($validate)
Update the auto validate flag of invoice.
getNomUrl($withpicto=0, $option='', $max=0, $short=0, $moretitle='', $notooltip='', $save_lastsearch_value=-1)
Return clicable name (with picto eventually)
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.
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)
Update a line to supplier invoice template.
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.
Class to manage invoice lines.
Class to manage products or services.
Class to manage Dolibarr users.
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
print *****$script_file(".$version.") pid cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_now($mode='auto')
Return date for now.
getLocalTaxesFromRate($vatrate, $local, $buyer, $seller, $firstparamisid=0)
Get type and rate of localtaxes for a particular vat rate/country of a thirdparty.
dolGetStatus($statusLabel='', $statusLabelShort='', $html='', $statusType='status0', $displayMode=0, $url='', $params=array())
Output the badge of a status.
dol_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...
if(!defined( 'CSRFCHECK_WITH_TOKEN'))
div float
Buy price without taxes.
calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocaltax1_rate, $uselocaltax2_rate, $remise_percent_global, $price_base_type, $info_bits, $type, $seller='', $localtaxes_array='', $progress=100, $multicurrency_tx=1, $pu_devise=0, $multicurrency_code='')
Calculate totals (net, vat, ...) of a line.
if(preg_match('/crypted:/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type