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'=>
'$conf->societe->enabled',
'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'=>
'$conf->banque->enabled',
'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'=>
'text',
'label'=>
'NotePublic',
'enabled'=>1,
'visible'=>0,
'position'=>105),
205 'note_public' =>array(
'type'=>
'text',
'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);
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;
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) .
"'";
992 $sql .=
', ' .
price2num($remise_percent);
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] :
'') .
"'";
1002 $sql .=
', ' .
price2num($total_localtax1);
1003 $sql .=
', ' .
price2num($total_localtax2);
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) .
"'";
1015 $sql .=
', ' .
price2num($pu_ht_devise,
'CU');
1016 $sql .=
', ' .
price2num($multicurrency_total_ht,
'CT');
1017 $sql .=
', ' .
price2num($multicurrency_total_tva,
'CT');
1018 $sql .=
', ' .
price2num($multicurrency_total_ttc,
'CT');
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();
1063 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)
1065 global $mysoc, $user;
1069 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);
1070 include_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
1077 if ($this->brouillon) {
1079 $fk_product = empty($fk_product) ? 0 : $fk_product;
1080 $label = empty($label) ?
'' : $label;
1081 $remise_percent = empty($remise_percent) ? 0 :
price2num($remise_percent);
1083 $info_bits = empty($info_bits) ? 0 : $info_bits;
1086 $pu_ht_devise =
price2num($pu_ht_devise);
1088 if (!preg_match(
'/\((.*)\)/', $txtva)) {
1092 $txlocaltax1 = empty($txlocaltax1) ? 0 :
price2num($txlocaltax1);
1093 $txlocaltax2 = empty($txlocaltax2) ? 0 :
price2num($txlocaltax2);
1094 $this->multicurrency_subprice = empty($this->multicurrency_subprice) ? 0 : $this->multicurrency_subprice;
1095 $this->multicurrency_total_ht = empty($this->multicurrency_total_ht) ? 0 : $this->multicurrency_total_ht;
1096 $this->multicurrency_total_tva = empty($this->multicurrency_total_tva) ? 0 : $this->multicurrency_total_tva;
1097 $this->multicurrency_total_ttc = empty($this->multicurrency_total_ttc) ? 0 : $this->multicurrency_total_ttc;
1099 $pu = $price_base_type ==
'HT' ? $pu_ht : $pu_ttc;
1111 if (preg_match(
'/\((.*)\)/', $txtva, $reg)) {
1112 $vat_src_code = $reg[1];
1113 $txtva = preg_replace(
'/\s*\(.*\)/',
'', $txtva);
1116 $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);
1118 $total_ht = $tabprice[0];
1119 $total_tva = $tabprice[1];
1120 $total_ttc = $tabprice[2];
1121 $total_localtax1 = $tabprice[9];
1122 $total_localtax2 = $tabprice[10];
1123 $pu_ht = $tabprice[3];
1124 $pu_tva = $tabprice[4];
1125 $pu_ttc = $tabprice[5];
1128 $multicurrency_total_ht = $tabprice[16];
1129 $multicurrency_total_tva = $tabprice[17];
1130 $multicurrency_total_ttc = $tabprice[18];
1131 $pu_ht_devise = $tabprice[19];
1133 $product_type = $type;
1136 $result = $product->fetch($fk_product);
1137 $product_type = $product->type;
1140 $sql =
'UPDATE ' . MAIN_DB_PREFIX .
'facture_fourn_det_rec SET';
1141 $sql .=
' fk_facture_fourn = ' . ((int) $facid);
1142 $sql .=
', fk_product = ' . ($fk_product > 0 ? ((int) $fk_product) :
'null');
1143 $sql .=
", ref = '" . $this->
db->escape($ref) .
"'";
1144 $sql .=
", label = '" . $this->
db->escape($label) .
"'";
1145 $sql .=
", description = '" . $this->
db->escape($desc) .
"'";
1146 $sql .=
', pu_ht = ' .
price2num($pu_ht);
1148 $sql .=
", remise_percent = '" .
price2num($remise_percent) .
"'";
1149 $sql .=
", vat_src_code = '" . $this->
db->escape($vat_src_code) .
"'";
1150 $sql .=
', tva_tx = ' .
price2num($txtva);
1151 $sql .=
', localtax1_tx = ' . (
float) $txlocaltax1;
1152 $sql .=
", localtax1_type = '" . $this->
db->escape($localtaxes_type[0]) .
"'";
1153 $sql .=
', localtax2_tx = ' . (
float) $txlocaltax2;
1154 $sql .=
", localtax2_type = '" . $this->
db->escape($localtaxes_type[2]) .
"'";
1155 $sql .=
", total_ht = '" .
price2num($total_ht) .
"'";
1156 $sql .=
", total_tva = '" .
price2num($total_tva) .
"'";
1157 $sql .=
", total_localtax1 = '" .
price2num($total_localtax1) .
"'";
1158 $sql .=
", total_localtax2 = '" .
price2num($total_localtax2) .
"'";
1159 $sql .=
", total_ttc = '" .
price2num($total_ttc) .
"'";
1160 $sql .=
', product_type = ' . (int) $product_type;
1161 $sql .=
', date_start = ' . (empty($date_start) ?
'NULL' : (int) $date_start);
1162 $sql .=
', date_end = ' . (empty($date_end) ?
'NULL' : (int) $date_end);
1163 $sql .=
', info_bits = ' . (int) $info_bits;
1164 $sql .=
', special_code = ' . (int) $special_code;
1165 $sql .=
', rang = ' . (int) $rang;
1166 $sql .=
', fk_unit = ' . ($fk_unit ?
"'" . $this->
db->escape($fk_unit) .
"'" :
'null');
1167 $sql .=
', fk_user_modif = ' . (int) $user;
1168 $sql .=
', multicurrency_subprice = '.price2num($pu_ht_devise);
1169 $sql .=
', multicurrency_total_ht = '.price2num($multicurrency_total_ht);
1170 $sql .=
', multicurrency_total_tva = '.price2num($multicurrency_total_tva);
1171 $sql .=
', multicurrency_total_ttc = '.price2num($multicurrency_total_ttc);
1172 $sql .=
' WHERE rowid = ' . (int) $rowid;
1174 dol_syslog(get_class($this).
'::updateline', LOG_DEBUG);
1175 if ($this->
db->query($sql)) {
1180 $this->error = $this->
db->lasterror();
1194 if (empty($this->date_when)) {
1208 if ($this->nb_gen_max > 0 && ($this->nb_gen_done >= $this->nb_gen_max)) {
1223 return ($this->
isMaxNbGenReached() ?
'<strike>' :
'').$ret.($this->isMaxNbGenReached() ?
'</strike>' :
'');
1238 global $conf, $langs, $db, $user, $hookmanager;
1244 $langs->loadLangs(array(
'main',
'bills'));
1248 $today =
dol_mktime(23, 59, 59, $tmparray[
'mon'], $tmparray[
'mday'], $tmparray[
'year']);
1250 dol_syslog(
'createRecurringInvoices restrictioninvoiceid=' .$restrictioninvoiceid.
' forcevalidation=' .$forcevalidation);
1252 $sql =
'SELECT rowid FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec';
1253 $sql .=
' WHERE frequency > 0';
1254 $sql .=
" AND (date_when IS NULL OR date_when <= '".$this->db->idate($today).
"')";
1255 $sql .=
' AND (nb_gen_done < nb_gen_max OR nb_gen_max = 0)';
1256 $sql .=
' AND suspended = 0';
1257 $sql .=
' AND entity = '. (int) $conf->entity;
1258 if ($restrictioninvoiceid > 0) {
1259 $sql .=
' AND rowid = '. (int) $restrictioninvoiceid;
1261 $sql .= $this->
db->order(
'entity',
'ASC');
1263 $parameters = array(
1264 'restrictioninvoiceid' => $restrictioninvoiceid,
1265 'forcevalidation' => $forcevalidation,
1267 $reshook = $hookmanager->executeHooks(
'beforeCreationOfRecurringInvoices', $parameters, $sql);
1272 $num = $this->
db->num_rows(
$resql);
1275 $this->output .= $langs->trans(
'FoundXQualifiedRecurringInvoiceTemplate', $num).
"\n";
1277 $this->output .= $langs->trans(
'NoQualifiedRecurringInvoiceTemplateFound');
1280 $saventity = $conf->entity;
1283 $line = $this->
db->fetch_object(
$resql);
1287 $invoiceidgenerated = 0;
1289 $new_fac_fourn =
null;
1291 $facturerec->fetch($line->rowid);
1293 if ($facturerec->id > 0) {
1295 $conf->entity = $facturerec->entity;
1297 dol_syslog(
'createRecurringInvoices Process invoice template id=' .$facturerec->id.
', ref=' .$facturerec->ref.
', entity=' .$facturerec->entity);
1300 $new_fac_fourn->fac_rec = $facturerec->id;
1301 $new_fac_fourn->fk_fac_rec_source = $facturerec->id;
1304 $new_fac_fourn->brouillon = 1;
1307 $new_fac_fourn->date = empty($facturerec->date_when) ? $now : $facturerec->date_when;
1308 $new_fac_fourn->socid = $facturerec->socid;
1309 $new_fac_fourn->lines = $facturerec->lines;
1310 $new_fac_fourn->ref_supplier = $facturerec->ref_supplier;
1311 $new_fac_fourn->model_pdf = $facturerec->model_pdf;
1312 $new_fac_fourn->fk_project = $facturerec->fk_project;
1313 $new_fac_fourn->libelle = $facturerec->libelle;
1315 $invoiceidgenerated = $new_fac_fourn->create($user);
1316 if ($invoiceidgenerated <= 0) {
1317 $this->errors = $new_fac_fourn->errors;
1318 $this->error = $new_fac_fourn->error;
1321 if (!$error && ($facturerec->auto_validate || $forcevalidation)) {
1322 $result = $new_fac_fourn->validate($user);
1324 $this->errors = $new_fac_fourn->errors;
1325 $this->error = $new_fac_fourn->error;
1330 if (!$error && $facturerec->generate_pdf) {
1332 $new_fac_fourn->fetch($new_fac_fourn->id);
1333 $result = $new_fac_fourn->generateDocument($facturerec->model_pdf, $langs);
1335 $this->errors = $new_fac_fourn->errors;
1336 $this->error = $new_fac_fourn->error;
1342 $this->error =
'Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity.
"\n";
1343 $this->errors[] =
'Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity;
1344 dol_syslog(
'createRecurringInvoices Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity);
1347 if (!$error && $invoiceidgenerated >= 0) {
1348 $facturerec->nb_gen_done++;
1349 $facturerec->date_last_gen =
dol_now();
1350 $facturerec->date_when= $facturerec->getNextDate();
1351 $facturerec->update($user);
1352 $this->
db->commit(
'createRecurringInvoices Process invoice template id=' .$facturerec->id.
', title=' .$facturerec->titre);
1353 dol_syslog(
'createRecurringInvoices Process invoice template ' .$facturerec->titre.
' is finished with a success generation');
1355 $this->output .= $langs->trans(
'InvoiceGeneratedFromTemplate', $new_fac_fourn->ref, $facturerec->titre).
"\n";
1357 $this->
db->rollback(
'createRecurringInvoices Process invoice template id=' .$facturerec->id.
', title=' .$facturerec->titre);
1360 $parameters = array(
1363 'errorCount' => $error,
1364 'invoiceidgenerated' => $invoiceidgenerated,
1365 'facturerec' => $facturerec,
1368 $reshook = $hookmanager->executeHooks(
'afterCreationOfRecurringInvoice', $parameters, $new_fac_fourn);
1373 $conf->entity = $saventity;
1378 $this->output = trim($this->output);
1380 return $error ? $error : 0;
1395 public function getNomUrl($withpicto = 0, $option =
'', $max = 0, $short = 0, $moretitle =
'', $notooltip =
'', $save_lastsearch_value = -1)
1397 global $langs, $hookmanager;
1401 $label =
'<u>'.$langs->trans(
'RepeatableInvoice').
'</u>';
1402 if (!empty($this->
ref)) {
1403 $label .=
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
1405 if ($this->frequency > 0) {
1406 $label .=
'<br><b>'.$langs->trans(
'Frequency').
':</b> '.$langs->trans(
'FrequencyPer_'.$this->unit_frequency, $this->frequency);
1408 if (!empty($this->date_last_gen)) {
1409 $label .=
'<br><b>'.$langs->trans(
'DateLastGeneration').
':</b> '.
dol_print_date($this->date_last_gen,
'dayhour');
1411 if ($this->frequency > 0) {
1412 if (!empty($this->date_when)) {
1413 $label .=
'<br><b>'.$langs->trans(
'NextDateToExecution').
':</b> ';
1414 $label .= (empty($this->suspended) ?
'' :
'<strike>').
dol_print_date($this->date_when,
'day').(empty($this->suspended) ?
'' :
'</strike>');
1415 if (!empty($this->suspended)) {
1416 $label .=
' ('.$langs->trans(
'Disabled').
')';
1421 $url = DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.$this->id;
1427 if ($option !=
'nolink') {
1429 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
1430 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
'PHP_SELF'])) {
1431 $add_save_lastsearch_values = 1;
1433 if ($add_save_lastsearch_values) {
1434 $url .=
'&save_lastsearch_values=1';
1438 $linkstart =
'<a href="'.$url.
'" title="'.
dol_escape_htmltag($label, 1).
'" class="classfortooltip">';
1441 $result .= $linkstart;
1443 $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);
1445 if ($withpicto != 2) {
1446 $result .= $this->ref;
1448 $result .= $linkend;
1450 $hookmanager->initHooks(array($this->element .
'dao'));
1451 $parameters = array(
'id'=>$this->
id,
'getnomurl' => &$result);
1452 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
1454 $result = $hookmanager->resPrint;
1456 $result .= $hookmanager->resPrint;
1470 return $this->
LibStatut($this->frequency ? 1 : 0, $this->suspended, $mode, $alreadypaid, empty($this->
type) ? 0 : $this->
type);
1484 public function LibStatut($recur, $status, $mode = 0, $alreadypaid = -1, $type = 0)
1488 $langs->load(
'bills');
1490 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1491 $statusType =
'status0';
1496 if ($status == self::STATUS_SUSPENDED) {
1497 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1499 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1502 if ($status == self::STATUS_SUSPENDED) {
1503 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1505 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1508 } elseif ($mode == 1) {
1511 if ($status == self::STATUS_SUSPENDED) {
1512 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1514 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1517 if ($status == self::STATUS_SUSPENDED) {
1518 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1520 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1523 } elseif ($mode == 2) {
1525 if ($status == self::STATUS_SUSPENDED) {
1526 $statusType =
'status6';
1527 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1529 $statusType =
'status4';
1530 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1533 if ($status == self::STATUS_SUSPENDED) {
1534 $statusType =
'status6';
1535 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1537 $statusType =
'status0';
1538 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1541 } elseif ($mode == 3) {
1544 if ($status == self::STATUS_SUSPENDED) {
1545 $statusType =
'status6';
1546 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1548 $statusType =
'status4';
1549 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1552 if ($status == self::STATUS_SUSPENDED) {
1553 $statusType =
'status6';
1554 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1556 $statusType =
'status0';
1557 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1560 } elseif ($mode == 4) {
1563 if ($status == self::STATUS_SUSPENDED) {
1564 $statusType =
'status6';
1565 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1567 $statusType =
'status4';
1568 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1571 if ($status == self::STATUS_SUSPENDED) {
1572 $statusType =
'status6';
1573 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1575 $statusType =
'status0';
1576 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1579 } elseif ($mode == 5 || $mode == 6) {
1585 if ($status == self::STATUS_SUSPENDED) {
1586 $statusType =
'status6';
1587 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1589 $statusType =
'status4';
1590 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1593 if ($status == self::STATUS_SUSPENDED) {
1594 $statusType =
'status6';
1595 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1597 $statusType =
'status0';
1598 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1603 $labelStatusShort = $labelStatus;
1605 return dolGetStatus($labelStatus, $labelStatusShort,
'', $statusType, $mode);
1618 global $user, $langs, $conf;
1622 $nownotime =
dol_mktime(0, 0, 0, $arraynow[
'mon'], $arraynow[
'mday'], $arraynow[
'year']);
1628 $sql =
'SELECT rowid';
1629 $sql .=
' FROM ' .MAIN_DB_PREFIX.
'product';
1630 $sql .=
' WHERE entity IN (' .getEntity(
'product').
')';
1631 $sql .= $this->
db->plimit(100);
1635 $num_prods = $this->
db->num_rows(
$resql);
1637 while ($i < $num_prods) {
1639 $row = $this->
db->fetch_row(
$resql);
1640 $prodids[$i] = $row[0];
1646 $this->
ref =
'SPECIMEN';
1647 $this->title =
'SPECIMEN';
1648 $this->specimen = 1;
1650 $this->date = $nownotime;
1651 $this->date_lim_reglement = $nownotime + 3600 * 24 * 30;
1652 $this->cond_reglement_id = 1;
1653 $this->cond_reglement_code =
'RECEP';
1655 $this->mode_reglement_id = 0;
1656 $this->mode_reglement_code =
'';
1657 $this->note_public =
'This is a comment (public)';
1658 $this->note_private =
'This is a comment (private)';
1659 $this->note =
'This is a comment (private)';
1660 $this->fk_incoterms = 0;
1661 $this->location_incoterms =
'';
1663 if (empty($option) || $option !=
'nolines') {
1667 while ($xnbp < $nbp) {
1669 $line->desc = $langs->trans(
'Description').
' ' .$xnbp;
1671 $line->subprice = 100;
1672 $line->tva_tx = 19.6;
1673 $line->localtax1_tx = 0;
1674 $line->localtax2_tx = 0;
1675 $line->remise_percent = 0;
1677 $prodid = mt_rand(1, $num_prods);
1678 $line->fk_product = $prodids[$prodid];
1680 $line->total_ht = -100;
1681 $line->total_ttc = -119.6;
1682 $line->total_tva = -19.6;
1683 } elseif ($xnbp == 2) {
1684 $line->subprice = -100;
1685 $line->total_ht = -100;
1686 $line->total_ttc = -119.6;
1687 $line->total_tva = -19.6;
1688 $line->remise_percent = 0;
1689 } elseif ($xnbp == 3) {
1690 $prodid = mt_rand(1, $num_prods);
1691 $line->fk_product = $prodids[$prodid];
1692 $line->total_ht = 50;
1693 $line->total_ttc = 59.8;
1694 $line->total_tva = 9.8;
1695 $line->remise_percent = 50;
1698 $prodid = mt_rand(1, $num_prods);
1699 $line->fk_product = $prodids[$prodid];
1700 $line->total_ht = 100;
1701 $line->total_ttc = 119.6;
1702 $line->total_tva = 19.6;
1703 $line->remise_percent = 00;
1706 $this->lines[$xnbp] = $line;
1709 $this->total_ht += $line->total_ht;
1710 $this->total_tva += $line->total_tva;
1711 $this->total_ttc += $line->total_ttc;
1713 $this->revenuestamp = 0;
1717 $line->desc = $langs->trans(
'Description').
' (offered line)';
1719 $line->subprice = 100;
1720 $line->tva_tx = 19.6;
1721 $line->localtax1_tx = 0;
1722 $line->localtax2_tx = 0;
1723 $line->remise_percent = 100;
1724 $line->total_ht = 0;
1725 $line->total_ttc = 0;
1726 $line->total_tva = 0;
1727 $prodid = mt_rand(1, $num_prods);
1728 $line->fk_product = $prodids[$prodid];
1730 $this->lines[$xnbp] = $line;
1734 $this->usenewprice = 0;
1763 if (!$this->table_element) {
1764 dol_syslog(get_class($this).
'::setFrequencyAndUnit was called on objet with property table_element not defined', LOG_ERR);
1768 if (!empty($frequency) && empty($unit)) {
1769 dol_syslog(get_class($this).
'::setFrequencyAndUnit was called on objet with params frequency defined but unit not defined', LOG_ERR);
1773 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1774 $sql .=
" SET frequency = ".($frequency ? ((int) $frequency) :
"NULL");
1775 if (!empty($unit)) {
1776 $sql .=
", unit_frequency = '".$this->db->escape($unit).
"'";
1778 $sql .=
" WHERE rowid = ".((int) $this->
id);
1780 dol_syslog(get_class($this).
'::setFrequencyAndUnit', LOG_DEBUG);
1782 if ($this->
db->query($sql)) {
1783 $this->frequency = $frequency;
1784 if (!empty($unit)) {
1785 $this->unit_frequency = $unit;
1789 $this->error = $this->
db->lasterror();
1803 if (!$this->table_element) {
1804 dol_syslog(get_class($this).
'::setNextDate was called on objet with property table_element not defined', LOG_ERR);
1807 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1808 $sql .=
" SET date_when = " .($date ?
"'".$this->db->idate($date).
"'" :
"NULL");
1809 if ($increment_nb_gen_done > 0) {
1810 $sql .=
", nb_gen_done = nb_gen_done + 1";
1812 $sql .=
" WHERE rowid = " . (int) $this->
id;
1814 dol_syslog(get_class($this).
'::setNextDate', LOG_DEBUG);
1816 if ($this->
db->query($sql)) {
1817 $this->date_when = $date;
1818 if ($increment_nb_gen_done > 0) {
1819 $this->nb_gen_done++;
1823 $this->error = $this->
db->lasterror();
1836 if (!$this->table_element) {
1837 dol_syslog(get_class($this).
'::setMaxPeriod was called on objet with property table_element not defined', LOG_ERR);
1845 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1846 $sql .=
" SET nb_gen_max = ". (int) $nb;
1847 $sql .=
" WHERE rowid = " . (int) $this->
id;
1849 dol_syslog(get_class($this).
'::setMaxPeriod', LOG_DEBUG);
1851 if ($this->
db->query($sql)) {
1852 $this->nb_gen_max = $nb;
1868 if (!$this->table_element) {
1869 dol_syslog(get_class($this).
'::setAutoValidate was called on objet with property table_element not defined', LOG_ERR);
1873 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1874 $sql .=
" SET auto_validate = ".((int) $validate);
1875 $sql .=
" WHERE rowid = " . (int) $this->
id;
1877 dol_syslog(get_class($this).
'::setAutoValidate', LOG_DEBUG);
1879 if ($this->
db->query($sql)) {
1880 $this->auto_validate = $validate;
1896 if (!$this->table_element) {
1897 dol_syslog(get_class($this).
'::setGeneratePdf was called on objet with property table_element not defined', LOG_ERR);
1901 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1902 $sql .=
" SET generate_pdf = ". (int) $validate;
1903 $sql .=
" WHERE rowid = " . (int) $this->
id;
1905 dol_syslog(get_class($this).
'::setGeneratePdf', LOG_DEBUG);
1907 if ($this->
db->query($sql)) {
1908 $this->generate_pdf = $validate;
1924 if (!$this->table_element) {
1925 dol_syslog(get_class($this).
'::setModelPdf was called on objet with property table_element not defined', LOG_ERR);
1929 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1930 $sql .=
" SET modelpdf = '".$this->db->escape($model).
"'";
1931 $sql .=
" WHERE rowid = " . (int) $this->
id;
1933 dol_syslog(get_class($this).
'::setModelPdf', LOG_DEBUG);
1935 if ($this->
db->query($sql)) {
1936 $this->model_pdf = $model;
1956 public $element =
'invoice_supplier_det_rec';
1961 public $table_element =
'facture_fourn_det_rec';
1963 public $fk_facture_fourn;
1966 public $ref_supplier;
1968 public $description;
1972 public $remise_percent;
1973 public $fk_remise_except;
1974 public $vat_src_code;
1976 public $localtax1_tx;
1977 public $localtax1_type;
1978 public $localtax2_tx;
1979 public $localtax2_type;
1981 public $product_type;
1985 public $special_code;
1988 public $fk_user_author;
1989 public $fk_user_modif;
1990 public $fk_multicurrency;
1991 public $multicurrency_subprice;
2017 public function delete(
User $user, $notrigger =
false)
2025 $result = $this->
call_trigger(
'LINESUPPLIERBILLREC_DELETE', $user);
2041 $sql =
'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element .
' WHERE rowid=' . (int) $this->
id;
2043 $res = $this->
db->query($sql);
2044 if ($res ===
false) {
2046 $this->errors[] = $this->
db->lasterror();
2052 $this->
db->rollback();
2055 $this->
db->commit();
2069 $sql =
'SELECT l.rowid,';
2070 $sql .=
' l.fk_facture_fourn, l.fk_parent_line, l.fk_product,';
2071 $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,';
2072 $sql .=
' l.vat_src_code, l.tva_tx, l.localtax1_tx, l.localtax1_type, l.localtax2_tx, l.localtax2_type,';
2073 $sql .=
' l.total_ht, l.total_tva, l.total_localtax1, l.total_localtax2, l.total_ttc,';
2074 $sql .=
' l.product_type, l.date_start, l.date_end,';
2075 $sql .=
' l.info_bits, l.special_code, l.rang, l.fk_unit, l.import_key,';
2076 $sql .=
' l.fk_user_author, l.fk_user_modif, l.fk_multicurrency,';
2077 $sql .=
' l.multicurrency_code, l.multicurrency_subprice, l.multicurrency_total_ht, l.multicurrency_total_tva, l.multicurrency_total_ttc,';
2078 $sql .=
' p.ref as product_ref, p.fk_product_type as fk_product_type, p.label as product_label, p.description as product_desc';
2079 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_det_rec as l';
2080 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'product as p ON l.fk_product = p.rowid';
2081 $sql .=
' WHERE l.rowid = '. (int) $rowid;
2082 $sql .=
' ORDER BY l.rang';
2085 $result = $this->
db->query($sql);
2087 $objp = $this->
db->fetch_object($result);
2089 $this->
id = $objp->rowid;
2090 $this->fk_facture_fourn = $objp->fk_facture_fourn;
2091 $this->fk_parent = $objp->fk_parent_line;
2092 $this->fk_product = $objp->fk_product;
2093 $this->ref_supplier = $objp->ref_supplier;
2094 $this->label = $objp->label;
2096 $this->pu_ht = $objp->pu_ht;
2097 $this->pu_ttc = $objp->pu_ttc;
2098 $this->qty = $objp->qty;
2099 $this->remise_percent = $objp->remise_percent;
2100 $this->fk_remise_except = $objp->fk_remise_except;
2101 $this->vat_src_code = $objp->vat_src_code;
2102 $this->tva_tx = $objp->tva_tx;
2103 $this->localtax1_tx = $objp->localtax1_tx;
2104 $this->localtax1_type = $objp->localtax1_type;
2105 $this->localtax2_tx = $objp->localtax2_tx;
2106 $this->localtax2_type = $objp->localtax2_type;
2107 $this->total_ht = $objp->total_ht;
2108 $this->total_tva = $objp->total_tva;
2109 $this->total_localtax1 = $objp->total_localtax1;
2110 $this->total_localtax2 = $objp->total_localtax2;
2111 $this->total_ttc = $objp->total_ttc;
2112 $this->product_type = $objp->product_type;
2113 $this->date_start = $objp->date_start;
2114 $this->date_end = $objp->date_end;
2115 $this->info_bits = $objp->info_bits;
2116 $this->special_code = $objp->special_code;
2117 $this->rang = $objp->rang;
2118 $this->fk_unit = $objp->fk_unit;
2119 $this->import_key = $objp->import_key;
2120 $this->fk_user_author = $objp->fk_user_author;
2121 $this->fk_user_modif = $objp->fk_user_modif;
2122 $this->fk_multicurrency = $objp->fk_multicurrency;
2123 $this->multicurrency_code = $objp->multicurrency_code;
2124 $this->multicurrency_subprice = $objp->multicurrency_subprice;
2125 $this->multicurrency_total_ht = $objp->multicurrency_total_ht;
2126 $this->multicurrency_total_tva = $objp->multicurrency_total_tva;
2127 $this->multicurrency_total_ttc = $objp->multicurrency_total_ttc;
2129 $this->
db->free($result);
2132 $this->error = $this->
db->lasterror();
2151 include_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
2153 $sql =
'UPDATE ' . MAIN_DB_PREFIX .
'facture_fourn_det_rec SET';
2154 $sql .=
' fk_facture_fourn = ' . (int) $this->fk_facture_fourn;
2155 $sql .=
', fk_parent_line = ' . (int) $this->fk_parent;
2156 $sql .=
', fk_product = ' . (int) $this->fk_product;
2157 $sql .=
', ref = ' . (!empty($this->
ref) ?
"'" . $this->
db->escape($this->
ref) .
"'" :
'NULL');
2158 $sql .=
", label = " . (!empty($this->label) ?
"'" . $this->
db->escape($this->label) .
"'" :
'NULL');
2159 $sql .=
", description = '" . $this->
db->escape($this->
description) .
"'";
2160 $sql .=
', pu_ht = ' .
price2num($this->pu_ht);
2161 $sql .=
', pu_ttc = ' .
price2num($this->pu_ttc);
2162 $sql .=
', qty = ' .
price2num($this->qty);
2163 $sql .=
", remise_percent = '" .
price2num($this->remise_percent) .
"'";
2164 $sql .=
', fk_remise_except = ' . (int) $this->fk_remise_except;
2165 $sql .=
", vat_src_code = '" . $this->
db->escape($this->vat_src_code) .
"'";
2166 $sql .=
', tva_tx = ' .
price2num($this->tva_tx);
2167 $sql .=
', localtax1_tx = ' .
price2num($this->localtax1_tx);
2168 $sql .=
", localtax1_type = '" . $this->
db->escape($this->localtax1_type) .
"'";
2169 $sql .=
', localtax2_tx = ' .
price2num($this->localtax2_tx);
2170 $sql .=
", localtax2_type = '" . $this->
db->escape($this->localtax2_type) .
"'";
2171 if (empty($this->skip_update_total)) {
2172 $sql .=
', total_ht = ' .
price2num($this->total_ht);
2173 $sql .=
', total_tva = ' .
price2num($this->total_tva);
2174 $sql .=
', total_localtax1 = ' .
price2num($this->total_localtax1);
2175 $sql .=
', total_localtax2 = ' .
price2num($this->total_localtax2);
2176 $sql .=
', total_ttc = ' .
price2num($this->total_ttc);
2178 $sql .=
', product_type = ' . (int) $this->product_type;
2179 $sql .=
', date_start = ' . (int) $this->date_start;
2180 $sql .=
', date_end = ' . (int) $this->date_end;
2181 $sql .=
", info_bits = " . ((int) $this->info_bits);
2182 $sql .=
', special_code =' . (int) $this->special_code;
2183 $sql .=
', rang = ' . (int) $this->rang;
2184 $sql .=
', fk_unit = ' .($this->fk_unit ?
"'".$this->db->escape($this->fk_unit).
"'" :
'null');
2185 $sql .=
', fk_user_modif = ' . (int) $user;
2186 $sql .=
' WHERE rowid = ' . (int) $this->
id;
2190 dol_syslog(get_class($this).
'::updateline', LOG_DEBUG);
2200 if (!$error && !$notrigger) {
2202 $result = $this->
call_trigger(
'LINESUPPLIERBILLREC_MODIFY', $user);
2210 $this->
db->rollback();
2213 $this->
db->commit();
2217 $this->error = $this->
db->lasterror();
2218 $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') &&!empty($user->rights->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') &&!empty($user->rights->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)) $resql
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...
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields.
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.
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
$conf db
API class for accounts.