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;
525 dol_syslog(get_class($this).
"::update", LOG_DEBUG);
535 if (!$error && !$notrigger) {
537 $result = $this->
call_trigger(
'SUPPLIERBILLREC_MODIFY', $user);
539 $this->
db->rollback();
547 $this->error = $this->
db->lasterror();
548 $this->
db->rollback();
561 public function fetch($rowid, $ref =
'', $ref_ext =
'')
563 $sql =
'SELECT f.rowid, f.titre, f.ref_supplier, f.entity, f.fk_soc';
564 $sql .=
', f.datec, f.tms, f.suspended';
565 $sql .=
', f.libelle as label';
566 $sql .=
', f.vat_src_code, f.localtax1, f.localtax2';
567 $sql .=
', f.total_tva, f.total_ht, f.total_ttc';
568 $sql .=
', f.fk_user_author, f.fk_user_modif';
569 $sql .=
', f.fk_projet as fk_project, f.fk_account';
570 $sql .=
', f.fk_mode_reglement, p.code as mode_reglement_code, p.libelle as mode_reglement_libelle';
571 $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';
572 $sql .=
', f.date_lim_reglement';
573 $sql .=
', f.note_private, f.note_public, f.modelpdf';
574 $sql .=
', f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht, f.multicurrency_total_tva, f.multicurrency_total_ttc';
575 $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';
576 $sql .=
', f.generate_pdf';
577 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec as f';
578 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_payment_term as c ON f.fk_cond_reglement = c.rowid';
579 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as p ON f.fk_mode_reglement = p.id';
580 $sql .=
' WHERE f.entity IN ('.getEntity(
'invoice').
')';
582 $sql .=
' AND f.rowid='. (int) $rowid;
584 $sql .=
" AND f.titre='".$this->db->escape($ref).
"'";
586 $sql .=
' AND f.rowid = 0';
589 $result = $this->
db->query($sql);
591 if ($this->
db->num_rows($result)) {
592 $obj = $this->
db->fetch_object($result);
596 $this->
id = $obj->rowid;
597 $this->titre = $obj->titre;
598 $this->
ref = $obj->$keyforref;
599 $this->ref_supplier = $obj->ref_supplier;
600 $this->entity = $obj->entity;
601 $this->socid = $obj->fk_soc;
602 $this->date_creation = $obj->datec;
603 $this->date_modification = $obj->tms;
604 $this->suspended = $obj->suspended;
605 $this->libelle = $obj->label;
606 $this->label = $obj->label;
607 $this->vat_src_code = $obj->vat_src_code;
608 $this->total_localtax1 = $obj->localtax1;
609 $this->total_localtax2 = $obj->localtax2;
610 $this->total_ht = $obj->total_ht;
611 $this->total_tva = $obj->total_tva;
612 $this->total_ttc = $obj->total_ttc;
613 $this->user_author = $obj->fk_user_author;
614 $this->user_modif = $obj->fk_user_modif;
615 $this->fk_project = $obj->fk_project;
616 $this->fk_account = $obj->fk_account;
617 $this->mode_reglement_id = $obj->fk_mode_reglement;
618 $this->mode_reglement_code = $obj->mode_reglement_code;
619 $this->mode_reglement = $obj->mode_reglement_libelle;
620 $this->cond_reglement_id = $obj->fk_cond_reglement;
621 $this->cond_reglement_code = $obj->cond_reglement_code;
622 $this->cond_reglement = $obj->cond_reglement_libelle;
623 $this->cond_reglement_doc = $obj->cond_reglement_libelle_doc;
624 $this->date_lim_reglement = $this->
db->jdate($obj->date_lim_reglement);
625 $this->note_private = $obj->note_private;
626 $this->note_public = $obj->note_public;
627 $this->model_pdf = $obj->modelpdf;
630 $this->fk_multicurrency = $obj->fk_multicurrency;
631 $this->multicurrency_code = $obj->multicurrency_code;
632 $this->multicurrency_tx = $obj->multicurrency_tx;
633 $this->multicurrency_total_ht = $obj->multicurrency_total_ht;
634 $this->multicurrency_total_tva = $obj->multicurrency_total_tva;
635 $this->multicurrency_total_ttc = $obj->multicurrency_total_ttc;
637 $this->usenewprice = $obj->usenewprice;
638 $this->frequency = $obj->frequency;
639 $this->unit_frequency = $obj->unit_frequency;
640 $this->date_when = $this->
db->jdate($obj->date_when);
641 $this->date_last_gen = $this->
db->jdate($obj->date_last_gen);
642 $this->nb_gen_done = $obj->nb_gen_done;
643 $this->nb_gen_max = $obj->nb_gen_max;
644 $this->auto_validate = $obj->auto_validate;
645 $this->generate_pdf = $obj->generate_pdf;
648 if ($this->statut == self::STATUS_DRAFT) {
649 $this->brouillon = 1;
661 $this->error = $this->
db->lasterror();
666 $this->error =
'Bill with id '.$rowid.
' or ref '.$ref.
' not found';
667 dol_syslog(
'Facture::Fetch Error '.$this->error, LOG_ERR);
671 $this->error = $this->
db->error();
696 $this->lines = array();
707 $sql =
'SELECT l.rowid,';
708 $sql .=
' l.fk_facture_fourn, l.fk_parent_line, l.fk_product, l.ref, l.label, l.description,';
709 $sql .=
' l.pu_ht, l.pu_ttc, l.qty, l.remise_percent, l.fk_remise_except, l.vat_src_code, l.tva_tx,';
710 $sql .=
' l.localtax1_tx, l.localtax2_tx, l.localtax1_type, l.localtax2_type,';
711 $sql .=
' l.total_ht, l.total_tva, l.total_ttc, total_localtax1, total_localtax2,';
712 $sql .=
' l.product_type, l.date_start, l.date_end,';
713 $sql .=
' l.info_bits, l.special_code, l.rang,';
714 $sql .=
' l.fk_unit, l.import_key, l.fk_user_author, l.fk_user_modif,';
715 $sql .=
' l.fk_multicurrency, l.multicurrency_code, l.multicurrency_subprice, l.multicurrency_total_ht, l.multicurrency_total_tva, l.multicurrency_total_ttc,';
716 $sql .=
' p.ref as product_ref, p.fk_product_type as fk_product_type, p.label as product_label, p.description as product_desc';
717 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_det_rec as l';
718 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'product as p ON l.fk_product = p.rowid';
719 $sql .=
' WHERE l.fk_facture_fourn = '. (int) $this->
id;
720 $sql .=
' ORDER BY l.rang';
722 dol_syslog(
'FactureFournisseurRec::fetch_lines', LOG_DEBUG);
724 $result = $this->
db->query($sql);
726 $num = $this->
db->num_rows($result);
729 $objp = $this->
db->fetch_object($result);
733 $line->id = $objp->rowid;
734 $line->fk_facture_fourn = $objp->fk_facture_fourn;
735 $line->fk_parent = $objp->fk_parent_line;
736 $line->fk_product = $objp->fk_product;
737 $line->ref_supplier = $objp->ref;
738 $line->label = $objp->label;
739 $line->description = $objp->description;
740 $line->pu_ht = $objp->pu_ht;
741 $line->pu_ttc = $objp->pu_ttc;
742 $line->qty = $objp->qty;
743 $line->remise_percent = $objp->remise_percent;
744 $line->fk_remise_except = $objp->fk_remise_except;
745 $line->vat_src_code = $objp->vat_src_code;
746 $line->tva_tx = $objp->tva_tx;
747 $line->localtax1_tx = $objp->localtax1_tx;
748 $line->localtax1_type = $objp->localtax1_type;
749 $line->localtax2_tx = $objp->localtax2_tx;
750 $line->localtax2_type = $objp->localtax2_type;
751 $line->total_ht = $objp->total_ht;
752 $line->total_tva = $objp->total_tva;
753 $line->total_localtax1 = $objp->total_localtax1;
754 $line->total_localtax2 = $objp->total_localtax2;
755 $line->total_ttc = $objp->total_ttc;
756 $line->product_type = $objp->product_type;
757 $line->date_start = $objp->date_start;
758 $line->date_end = $objp->date_end;
759 $line->info_bits = $objp->info_bits ;
760 $line->special_code = $objp->special_code;
761 $line->rang = $objp->rang;
762 $line->fk_unit = $objp->fk_unit;
763 $line->import_key = $objp->import_key;
764 $line->fk_user_author = $objp->fk_user_author;
765 $line->fk_user_modif = $objp->fk_user_modif;
766 $line->fk_multicurrency = $objp->fk_multicurrency;
767 $line->multicurrency_code = $objp->multicurrency_code;
768 $line->multicurrency_subprice = $objp->multicurrency_subprice;
769 $line->multicurrency_total_ht = $objp->multicurrency_total_ht;
770 $line->multicurrency_total_tva = $objp->multicurrency_total_tva;
771 $line->multicurrency_total_ttc = $objp->multicurrency_total_ttc;
773 $line->fetch_optionals();
775 $this->lines[$i] = $line;
780 $this->
db->free($result);
783 $this->error = $this->
db->lasterror();
797 public function delete(
User $user, $notrigger = 0, $idwarehouse = -1)
801 dol_syslog(get_class($this).
"::delete rowid=".((
int) $rowid), LOG_DEBUG);
806 $main = MAIN_DB_PREFIX.
'facture_fourn_det_rec';
807 $ef = $main.
"_extrafields";
809 $sqlef =
"DELETE FROM ".$ef.
" WHERE fk_object IN (SELECT rowid FROM ".$main.
" WHERE fk_facture_fourn = ". (int) $rowid .
")";
810 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"facture_fourn_det_rec WHERE fk_facture_fourn = ". (int) $rowid;
812 if ($this->
db->query($sqlef) && $this->
db->query($sql)) {
813 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"facture_fourn_rec WHERE rowid = ". (int) $rowid;
815 if ($this->
db->query($sql)) {
827 $this->error = $this->
db->lasterror();
831 $this->error = $this->
db->lasterror();
834 if (!$error && !$notrigger) {
836 $result = $this->
call_trigger(
'SUPPLIERBILLREC_DELETE', $user);
846 $this->
db->rollback();
877 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)
879 global $mysoc, $user;
881 include_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
885 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);
892 if ($this->suspended == self::STATUS_NOTSUSPENDED) {
898 if (preg_match(
'/\((.*)\)/', $txtva, $reg)) {
899 $vat_src_code = $reg[1];
900 $txtva = preg_replace(
'/\s*\(.*\)/',
'', $txtva);
904 $fk_product = empty($fk_product) ? 0 : $fk_product;
905 $label = empty($label) ?
'' : $label;
906 $remise_percent = empty($remise_percent) ? 0 :
price2num($remise_percent);
910 if (!preg_match(
'/\((.*)\)/', $txtva)) {
915 $txtva = !empty($txtva) ? $txtva : 0;
916 $txlocaltax1 = !empty($txlocaltax1) ? $txlocaltax1 : 0;
917 $txlocaltax2 = !empty($txlocaltax2) ? $txlocaltax2 : 0;
918 $info_bits = !empty($info_bits) ? $info_bits : 0;
919 $info_bits = !empty($info_bits) ? $info_bits : 0;
920 $pu = $price_base_type ==
'HT' ? $pu_ht : $pu_ttc;
926 $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);
927 $total_ht = $tabprice[0];
928 $total_tva = $tabprice[1];
929 $total_ttc = $tabprice[2];
930 $total_localtax1 = $tabprice[9];
931 $total_localtax2 = $tabprice[10];
932 $pu_ht = $tabprice[3];
935 $multicurrency_total_ht = $tabprice[16];
936 $multicurrency_total_tva = $tabprice[17];
937 $multicurrency_total_ttc = $tabprice[18];
938 $pu_ht_devise = $tabprice[19];
941 $product_type = $type;
944 $result = $product->fetch($fk_product);
948 $product_type = $product->type;
950 $label = $product->label;
954 $sql =
'INSERT INTO ' . MAIN_DB_PREFIX .
'facture_fourn_det_rec (';
955 $sql .=
'fk_facture_fourn';
956 $sql .=
', fk_product';
959 $sql .=
', description';
963 $sql .=
', remise_percent';
964 $sql .=
', fk_remise_except';
965 $sql .=
', vat_src_code';
967 $sql .=
', localtax1_tx';
968 $sql .=
', localtax1_type';
969 $sql .=
', localtax2_tx';
970 $sql .=
', localtax2_type';
971 $sql .=
', total_ht';
972 $sql .=
', total_tva';
973 $sql .=
', total_localtax1';
974 $sql .=
', total_localtax2';
975 $sql .=
', total_ttc';
976 $sql .=
', product_type';
977 $sql .=
', date_start';
978 $sql .=
', date_end';
979 $sql .=
', info_bits';
980 $sql .=
', special_code';
983 $sql .=
', fk_user_author';
984 $sql .=
', fk_multicurrency, multicurrency_code, multicurrency_subprice, multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc';
985 $sql .=
') VALUES (';
986 $sql .=
' ' . (int) $facid;
987 $sql .=
', ' . (!empty($fk_product) ?
"'" . $this->
db->escape($fk_product) .
"'" :
'null');
988 $sql .=
', ' . (!empty($ref) ?
"'" . $this->
db->escape($ref) .
"'" :
'null');
989 $sql .=
', ' . (!empty($label) ?
"'" . $this->
db->escape($label) .
"'" :
'null');
990 $sql .=
", '" . $this->
db->escape($desc) .
"'";
994 $sql .=
', ' .
price2num($remise_percent);
996 $sql .=
", '" . $this->
db->escape($vat_src_code) .
"'";
999 $sql .=
", '" . $this->
db->escape(isset($localtaxes_type[0]) ? $localtaxes_type[0] :
'') .
"'";
1001 $sql .=
", '" . $this->
db->escape(isset($localtaxes_type[2]) ? $localtaxes_type[2] :
'') .
"'";
1004 $sql .=
', ' .
price2num($total_localtax1);
1005 $sql .=
', ' .
price2num($total_localtax2);
1007 $sql .=
', ' . (int) $product_type;
1008 $sql .=
', ' . ($date_start > 0 ? (int) $date_start :
'NULL');
1009 $sql .=
', ' . ($date_end > 0 ? (int) $date_end :
'NULL');
1010 $sql .=
', ' . (int) $info_bits;
1011 $sql .=
', ' . (int) $special_code;
1012 $sql .=
', ' . (int) $rang;
1013 $sql .=
', ' . ($fk_unit ? (int) $fk_unit :
'NULL');
1014 $sql .=
', ' . (int) $user->id;
1015 $sql .=
', ' . (
int) $this->fk_multicurrency;
1016 $sql .=
", '" . $this->
db->escape($this->multicurrency_code) .
"'";
1017 $sql .=
', ' .
price2num($pu_ht_devise,
'CU');
1018 $sql .=
', ' .
price2num($multicurrency_total_ht,
'CT');
1019 $sql .=
', ' .
price2num($multicurrency_total_tva,
'CT');
1020 $sql .=
', ' .
price2num($multicurrency_total_ttc,
'CT');
1023 dol_syslog(get_class($this).
'::addline', LOG_DEBUG);
1024 if ($this->
db->query($sql)) {
1025 $lineId = $this->
db->last_insert_id(MAIN_DB_PREFIX.
'facture_fourn_det_rec');
1028 $this->
db->commit();
1031 $this->
db->rollback();
1032 $this->error = $this->
db->lasterror();
1065 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)
1067 global $mysoc, $user;
1071 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);
1072 include_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
1079 if ($this->brouillon) {
1081 $fk_product = empty($fk_product) ? 0 : $fk_product;
1082 $label = empty($label) ?
'' : $label;
1083 $remise_percent = empty($remise_percent) ? 0 :
price2num($remise_percent);
1085 $info_bits = empty($info_bits) ? 0 : $info_bits;
1088 $pu_ht_devise =
price2num($pu_ht_devise);
1090 if (!preg_match(
'/\((.*)\)/', $txtva)) {
1094 $txlocaltax1 = empty($txlocaltax1) ? 0 :
price2num($txlocaltax1);
1095 $txlocaltax2 = empty($txlocaltax2) ? 0 :
price2num($txlocaltax2);
1096 $this->multicurrency_subprice = empty($this->multicurrency_subprice) ? 0 : $this->multicurrency_subprice;
1097 $this->multicurrency_total_ht = empty($this->multicurrency_total_ht) ? 0 : $this->multicurrency_total_ht;
1098 $this->multicurrency_total_tva = empty($this->multicurrency_total_tva) ? 0 : $this->multicurrency_total_tva;
1099 $this->multicurrency_total_ttc = empty($this->multicurrency_total_ttc) ? 0 : $this->multicurrency_total_ttc;
1101 $pu = $price_base_type ==
'HT' ? $pu_ht : $pu_ttc;
1113 if (preg_match(
'/\((.*)\)/', $txtva, $reg)) {
1114 $vat_src_code = $reg[1];
1115 $txtva = preg_replace(
'/\s*\(.*\)/',
'', $txtva);
1118 $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);
1120 $total_ht = $tabprice[0];
1121 $total_tva = $tabprice[1];
1122 $total_ttc = $tabprice[2];
1123 $total_localtax1 = $tabprice[9];
1124 $total_localtax2 = $tabprice[10];
1125 $pu_ht = $tabprice[3];
1126 $pu_tva = $tabprice[4];
1127 $pu_ttc = $tabprice[5];
1130 $multicurrency_total_ht = $tabprice[16];
1131 $multicurrency_total_tva = $tabprice[17];
1132 $multicurrency_total_ttc = $tabprice[18];
1133 $pu_ht_devise = $tabprice[19];
1135 $product_type = $type;
1138 $result = $product->fetch($fk_product);
1139 $product_type = $product->type;
1142 $sql =
'UPDATE ' . MAIN_DB_PREFIX .
'facture_fourn_det_rec SET';
1143 $sql .=
' fk_facture_fourn = ' . ((int) $facid);
1144 $sql .=
', fk_product = ' . ($fk_product > 0 ? ((int) $fk_product) :
'null');
1145 $sql .=
", ref = '" . $this->
db->escape($ref) .
"'";
1146 $sql .=
", label = '" . $this->
db->escape($label) .
"'";
1147 $sql .=
", description = '" . $this->
db->escape($desc) .
"'";
1148 $sql .=
', pu_ht = ' .
price2num($pu_ht);
1150 $sql .=
", remise_percent = '" .
price2num($remise_percent) .
"'";
1151 $sql .=
", vat_src_code = '" . $this->
db->escape($vat_src_code) .
"'";
1152 $sql .=
', tva_tx = ' .
price2num($txtva);
1153 $sql .=
', localtax1_tx = ' . (
float) $txlocaltax1;
1154 $sql .=
", localtax1_type = '" . $this->
db->escape($localtaxes_type[0]) .
"'";
1155 $sql .=
', localtax2_tx = ' . (
float) $txlocaltax2;
1156 $sql .=
", localtax2_type = '" . $this->
db->escape($localtaxes_type[2]) .
"'";
1157 $sql .=
", total_ht = '" .
price2num($total_ht) .
"'";
1158 $sql .=
", total_tva = '" .
price2num($total_tva) .
"'";
1159 $sql .=
", total_localtax1 = '" .
price2num($total_localtax1) .
"'";
1160 $sql .=
", total_localtax2 = '" .
price2num($total_localtax2) .
"'";
1161 $sql .=
", total_ttc = '" .
price2num($total_ttc) .
"'";
1162 $sql .=
', product_type = ' . (int) $product_type;
1163 $sql .=
', date_start = ' . (empty($date_start) ?
'NULL' : (int) $date_start);
1164 $sql .=
', date_end = ' . (empty($date_end) ?
'NULL' : (int) $date_end);
1165 $sql .=
', info_bits = ' . (int) $info_bits;
1166 $sql .=
', special_code = ' . (int) $special_code;
1167 $sql .=
', rang = ' . (int) $rang;
1168 $sql .=
', fk_unit = ' . ($fk_unit ?
"'" . $this->
db->escape($fk_unit) .
"'" :
'null');
1169 $sql .=
', fk_user_modif = ' . (int) $user;
1170 $sql .=
', multicurrency_subprice = '.price2num($pu_ht_devise);
1171 $sql .=
', multicurrency_total_ht = '.price2num($multicurrency_total_ht);
1172 $sql .=
', multicurrency_total_tva = '.price2num($multicurrency_total_tva);
1173 $sql .=
', multicurrency_total_ttc = '.price2num($multicurrency_total_ttc);
1174 $sql .=
' WHERE rowid = ' . (int) $rowid;
1176 dol_syslog(get_class($this).
'::updateline', LOG_DEBUG);
1177 if ($this->
db->query($sql)) {
1182 $this->error = $this->
db->lasterror();
1196 if (empty($this->date_when)) {
1210 if ($this->nb_gen_max > 0 && ($this->nb_gen_done >= $this->nb_gen_max)) {
1225 return ($this->
isMaxNbGenReached() ?
'<strike>' :
'').$ret.($this->isMaxNbGenReached() ?
'</strike>' :
'');
1240 global $conf, $langs, $db, $user, $hookmanager;
1246 $langs->loadLangs(array(
'main',
'bills'));
1250 $today =
dol_mktime(23, 59, 59, $tmparray[
'mon'], $tmparray[
'mday'], $tmparray[
'year']);
1252 dol_syslog(
'createRecurringInvoices restrictioninvoiceid=' .$restrictioninvoiceid.
' forcevalidation=' .$forcevalidation);
1254 $sql =
'SELECT rowid FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec';
1255 $sql .=
' WHERE frequency > 0';
1256 $sql .=
" AND (date_when IS NULL OR date_when <= '".$this->db->idate($today).
"')";
1257 $sql .=
' AND (nb_gen_done < nb_gen_max OR nb_gen_max = 0)';
1258 $sql .=
' AND suspended = 0';
1259 $sql .=
' AND entity = '. (int) $conf->entity;
1260 if ($restrictioninvoiceid > 0) {
1261 $sql .=
' AND rowid = '. (int) $restrictioninvoiceid;
1263 $sql .= $this->
db->order(
'entity',
'ASC');
1265 $parameters = array(
1266 'restrictioninvoiceid' => $restrictioninvoiceid,
1267 'forcevalidation' => $forcevalidation,
1269 $reshook = $hookmanager->executeHooks(
'beforeCreationOfRecurringInvoices', $parameters, $sql);
1274 $num = $this->
db->num_rows(
$resql);
1277 $this->output .= $langs->trans(
'FoundXQualifiedRecurringInvoiceTemplate', $num).
"\n";
1279 $this->output .= $langs->trans(
'NoQualifiedRecurringInvoiceTemplateFound');
1282 $saventity = $conf->entity;
1286 $line = $this->
db->fetch_object(
$resql);
1290 $invoiceidgenerated = 0;
1292 $new_fac_fourn =
null;
1294 $laststep=
"Fetch {$line->rowid}";
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 $laststep=
"Create invoiceidgenerated $invoiceidgenerated";
1321 if ($invoiceidgenerated <= 0) {
1322 $this->errors = $new_fac_fourn->errors;
1323 $this->error = $new_fac_fourn->error;
1326 if (!$error && ($facturerec->auto_validate || $forcevalidation)) {
1327 $result = $new_fac_fourn->validate($user);
1328 $laststep =
"Validate by user {$user->login}";
1330 $this->errors = $new_fac_fourn->errors;
1331 $this->error = $new_fac_fourn->error;
1336 if (!$error && $facturerec->generate_pdf) {
1338 $laststep =
"Refresh {$new_fac_fourn->id}";
1339 $new_fac_fourn->fetch($new_fac_fourn->id);
1340 $laststep =
"GenerateDocument {$new_fac_fourn->id}";
1341 $result = $new_fac_fourn->generateDocument($facturerec->model_pdf, $langs);
1343 $this->errors = $new_fac_fourn->errors;
1344 $this->error = $new_fac_fourn->error;
1350 $this->error =
'Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity.
"\n";
1351 $this->errors[] =
'Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity;
1352 dol_syslog(
'createRecurringInvoices Failed to load invoice template with id=' .$line->rowid.
', entity=' .$conf->entity);
1355 if (!$error && $invoiceidgenerated >= 0) {
1356 $facturerec->nb_gen_done++;
1357 $facturerec->date_last_gen =
dol_now();
1358 $facturerec->date_when= $facturerec->getNextDate();
1359 $facturerec->update($user);
1360 $this->
db->commit(
'createRecurringInvoices Process invoice template id=' .$facturerec->id.
', title=' .$facturerec->titre);
1361 dol_syslog(
'createRecurringInvoices Process invoice template ' .$facturerec->titre.
' is finished with a success generation');
1363 $this->output .= $langs->trans(
'InvoiceGeneratedFromTemplate', $new_fac_fourn->ref, $facturerec->titre).
"\n";
1365 $this->
db->rollback(
'createRecurringInvoices Process invoice template error={$error} invoiceidgenerated={$invoiceidgenerated} LastStep={$laststep} id=' .$facturerec->id.
', title=' .$facturerec->titre);
1368 $parameters = array(
1371 'errorCount' => $error,
1372 'invoiceidgenerated' => $invoiceidgenerated,
1373 'facturerec' => $facturerec,
1376 $reshook = $hookmanager->executeHooks(
'afterCreationOfRecurringInvoice', $parameters, $new_fac_fourn);
1381 $conf->entity = $saventity;
1386 $this->output = trim($this->output);
1388 return $error ? $error : 0;
1403 public function getNomUrl($withpicto = 0, $option =
'', $max = 0, $short = 0, $moretitle =
'', $notooltip =
'', $save_lastsearch_value = -1)
1405 global $langs, $hookmanager;
1409 $label =
'<u>'.$langs->trans(
'RepeatableInvoice').
'</u>';
1410 if (!empty($this->
ref)) {
1411 $label .=
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
1413 if ($this->frequency > 0) {
1414 $label .=
'<br><b>'.$langs->trans(
'Frequency').
':</b> '.$langs->trans(
'FrequencyPer_'.$this->unit_frequency, $this->frequency);
1416 if (!empty($this->date_last_gen)) {
1417 $label .=
'<br><b>'.$langs->trans(
'DateLastGeneration').
':</b> '.
dol_print_date($this->date_last_gen,
'dayhour');
1419 if ($this->frequency > 0) {
1420 if (!empty($this->date_when)) {
1421 $label .=
'<br><b>'.$langs->trans(
'NextDateToExecution').
':</b> ';
1422 $label .= (empty($this->suspended) ?
'' :
'<strike>').
dol_print_date($this->date_when,
'day').(empty($this->suspended) ?
'' :
'</strike>');
1423 if (!empty($this->suspended)) {
1424 $label .=
' ('.$langs->trans(
'Disabled').
')';
1429 $url = DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.$this->id;
1435 if ($option !=
'nolink') {
1437 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
1438 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
'PHP_SELF'])) {
1439 $add_save_lastsearch_values = 1;
1441 if ($add_save_lastsearch_values) {
1442 $url .=
'&save_lastsearch_values=1';
1446 $linkstart =
'<a href="'.$url.
'" title="'.
dol_escape_htmltag($label, 1).
'" class="classfortooltip">';
1449 $result .= $linkstart;
1451 $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);
1453 if ($withpicto != 2) {
1454 $result .= $this->ref;
1456 $result .= $linkend;
1458 $hookmanager->initHooks(array($this->element .
'dao'));
1459 $parameters = array(
'id'=>$this->
id,
'getnomurl' => &$result);
1460 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
1462 $result = $hookmanager->resPrint;
1464 $result .= $hookmanager->resPrint;
1478 return $this->
LibStatut($this->frequency ? 1 : 0, $this->suspended, $mode, $alreadypaid, empty($this->
type) ? 0 : $this->
type);
1492 public function LibStatut($recur, $status, $mode = 0, $alreadypaid = -1, $type = 0)
1496 $langs->load(
'bills');
1498 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1499 $statusType =
'status0';
1504 if ($status == self::STATUS_SUSPENDED) {
1505 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1507 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1510 if ($status == self::STATUS_SUSPENDED) {
1511 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1513 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1516 } elseif ($mode == 1) {
1519 if ($status == self::STATUS_SUSPENDED) {
1520 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1522 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1525 if ($status == self::STATUS_SUSPENDED) {
1526 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1528 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1531 } elseif ($mode == 2) {
1533 if ($status == self::STATUS_SUSPENDED) {
1534 $statusType =
'status6';
1535 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1537 $statusType =
'status4';
1538 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1541 if ($status == self::STATUS_SUSPENDED) {
1542 $statusType =
'status6';
1543 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1545 $statusType =
'status0';
1546 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1549 } elseif ($mode == 3) {
1552 if ($status == self::STATUS_SUSPENDED) {
1553 $statusType =
'status6';
1554 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1556 $statusType =
'status4';
1557 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1560 if ($status == self::STATUS_SUSPENDED) {
1561 $statusType =
'status6';
1562 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1564 $statusType =
'status0';
1565 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1568 } elseif ($mode == 4) {
1571 if ($status == self::STATUS_SUSPENDED) {
1572 $statusType =
'status6';
1573 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1575 $statusType =
'status4';
1576 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1579 if ($status == self::STATUS_SUSPENDED) {
1580 $statusType =
'status6';
1581 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1583 $statusType =
'status0';
1584 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1587 } elseif ($mode == 5 || $mode == 6) {
1593 if ($status == self::STATUS_SUSPENDED) {
1594 $statusType =
'status6';
1595 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1597 $statusType =
'status4';
1598 $labelStatus = $langs->transnoentitiesnoconv(
'Active');
1601 if ($status == self::STATUS_SUSPENDED) {
1602 $statusType =
'status6';
1603 $labelStatus = $langs->transnoentitiesnoconv(
'Disabled');
1605 $statusType =
'status0';
1606 $labelStatus = $langs->transnoentitiesnoconv(
'Draft');
1611 $labelStatusShort = $labelStatus;
1613 return dolGetStatus($labelStatus, $labelStatusShort,
'', $statusType, $mode);
1626 global $user, $langs, $conf;
1630 $nownotime =
dol_mktime(0, 0, 0, $arraynow[
'mon'], $arraynow[
'mday'], $arraynow[
'year']);
1636 $sql =
'SELECT rowid';
1637 $sql .=
' FROM ' .MAIN_DB_PREFIX.
'product';
1638 $sql .=
' WHERE entity IN (' .getEntity(
'product').
')';
1639 $sql .= $this->
db->plimit(100);
1643 $num_prods = $this->
db->num_rows(
$resql);
1645 while ($i < $num_prods) {
1647 $row = $this->
db->fetch_row(
$resql);
1648 $prodids[$i] = $row[0];
1654 $this->
ref =
'SPECIMEN';
1655 $this->title =
'SPECIMEN';
1656 $this->specimen = 1;
1658 $this->date = $nownotime;
1659 $this->date_lim_reglement = $nownotime + 3600 * 24 * 30;
1660 $this->cond_reglement_id = 1;
1661 $this->cond_reglement_code =
'RECEP';
1663 $this->mode_reglement_id = 0;
1664 $this->mode_reglement_code =
'';
1665 $this->note_public =
'This is a comment (public)';
1666 $this->note_private =
'This is a comment (private)';
1667 $this->note =
'This is a comment (private)';
1668 $this->fk_incoterms = 0;
1669 $this->location_incoterms =
'';
1671 if (empty($option) || $option !=
'nolines') {
1675 while ($xnbp < $nbp) {
1677 $line->desc = $langs->trans(
'Description').
' ' .$xnbp;
1679 $line->subprice = 100;
1680 $line->tva_tx = 19.6;
1681 $line->localtax1_tx = 0;
1682 $line->localtax2_tx = 0;
1683 $line->remise_percent = 0;
1685 $prodid = mt_rand(1, $num_prods);
1686 $line->fk_product = $prodids[$prodid];
1688 $line->total_ht = -100;
1689 $line->total_ttc = -119.6;
1690 $line->total_tva = -19.6;
1691 } elseif ($xnbp == 2) {
1692 $line->subprice = -100;
1693 $line->total_ht = -100;
1694 $line->total_ttc = -119.6;
1695 $line->total_tva = -19.6;
1696 $line->remise_percent = 0;
1697 } elseif ($xnbp == 3) {
1698 $prodid = mt_rand(1, $num_prods);
1699 $line->fk_product = $prodids[$prodid];
1700 $line->total_ht = 50;
1701 $line->total_ttc = 59.8;
1702 $line->total_tva = 9.8;
1703 $line->remise_percent = 50;
1706 $prodid = mt_rand(1, $num_prods);
1707 $line->fk_product = $prodids[$prodid];
1708 $line->total_ht = 100;
1709 $line->total_ttc = 119.6;
1710 $line->total_tva = 19.6;
1711 $line->remise_percent = 00;
1714 $this->lines[$xnbp] = $line;
1717 $this->total_ht += $line->total_ht;
1718 $this->total_tva += $line->total_tva;
1719 $this->total_ttc += $line->total_ttc;
1721 $this->revenuestamp = 0;
1725 $line->desc = $langs->trans(
'Description').
' (offered line)';
1727 $line->subprice = 100;
1728 $line->tva_tx = 19.6;
1729 $line->localtax1_tx = 0;
1730 $line->localtax2_tx = 0;
1731 $line->remise_percent = 100;
1732 $line->total_ht = 0;
1733 $line->total_ttc = 0;
1734 $line->total_tva = 0;
1735 $prodid = mt_rand(1, $num_prods);
1736 $line->fk_product = $prodids[$prodid];
1738 $this->lines[$xnbp] = $line;
1742 $this->usenewprice = 0;
1771 if (!$this->table_element) {
1772 dol_syslog(get_class($this).
'::setFrequencyAndUnit was called on objet with property table_element not defined', LOG_ERR);
1776 if (!empty($frequency) && empty($unit)) {
1777 dol_syslog(get_class($this).
'::setFrequencyAndUnit was called on objet with params frequency defined but unit not defined', LOG_ERR);
1781 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1782 $sql .=
" SET frequency = ".($frequency ? ((int) $frequency) :
"NULL");
1783 if (!empty($unit)) {
1784 $sql .=
", unit_frequency = '".$this->db->escape($unit).
"'";
1786 $sql .=
" WHERE rowid = ".((int) $this->
id);
1788 dol_syslog(get_class($this).
'::setFrequencyAndUnit', LOG_DEBUG);
1790 if ($this->
db->query($sql)) {
1791 $this->frequency = $frequency;
1792 if (!empty($unit)) {
1793 $this->unit_frequency = $unit;
1797 $this->error = $this->
db->lasterror();
1811 if (!$this->table_element) {
1812 dol_syslog(get_class($this).
'::setNextDate was called on objet with property table_element not defined', LOG_ERR);
1815 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1816 $sql .=
" SET date_when = " .($date ?
"'".$this->db->idate($date).
"'" :
"NULL");
1817 if ($increment_nb_gen_done > 0) {
1818 $sql .=
", nb_gen_done = nb_gen_done + 1";
1820 $sql .=
" WHERE rowid = " . (int) $this->
id;
1822 dol_syslog(get_class($this).
'::setNextDate', LOG_DEBUG);
1824 if ($this->
db->query($sql)) {
1825 $this->date_when = $date;
1826 if ($increment_nb_gen_done > 0) {
1827 $this->nb_gen_done++;
1831 $this->error = $this->
db->lasterror();
1844 if (!$this->table_element) {
1845 dol_syslog(get_class($this).
'::setMaxPeriod was called on objet with property table_element not defined', LOG_ERR);
1853 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1854 $sql .=
" SET nb_gen_max = ". (int) $nb;
1855 $sql .=
" WHERE rowid = " . (int) $this->
id;
1857 dol_syslog(get_class($this).
'::setMaxPeriod', LOG_DEBUG);
1859 if ($this->
db->query($sql)) {
1860 $this->nb_gen_max = $nb;
1876 if (!$this->table_element) {
1877 dol_syslog(get_class($this).
'::setAutoValidate was called on objet with property table_element not defined', LOG_ERR);
1881 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1882 $sql .=
" SET auto_validate = ".((int) $validate);
1883 $sql .=
" WHERE rowid = " . (int) $this->
id;
1885 dol_syslog(get_class($this).
'::setAutoValidate', LOG_DEBUG);
1887 if ($this->
db->query($sql)) {
1888 $this->auto_validate = $validate;
1904 if (!$this->table_element) {
1905 dol_syslog(get_class($this).
'::setGeneratePdf was called on objet with property table_element not defined', LOG_ERR);
1909 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1910 $sql .=
" SET generate_pdf = ". (int) $validate;
1911 $sql .=
" WHERE rowid = " . (int) $this->
id;
1913 dol_syslog(get_class($this).
'::setGeneratePdf', LOG_DEBUG);
1915 if ($this->
db->query($sql)) {
1916 $this->generate_pdf = $validate;
1932 if (!$this->table_element) {
1933 dol_syslog(get_class($this).
'::setModelPdf was called on objet with property table_element not defined', LOG_ERR);
1937 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
1938 $sql .=
" SET modelpdf = '".$this->db->escape($model).
"'";
1939 $sql .=
" WHERE rowid = " . (int) $this->
id;
1941 dol_syslog(get_class($this).
'::setModelPdf', LOG_DEBUG);
1943 if ($this->
db->query($sql)) {
1944 $this->model_pdf = $model;
1964 public $element =
'invoice_supplier_det_rec';
1969 public $table_element =
'facture_fourn_det_rec';
1971 public $fk_facture_fourn;
1974 public $ref_supplier;
1976 public $description;
1980 public $remise_percent;
1981 public $fk_remise_except;
1982 public $vat_src_code;
1984 public $localtax1_tx;
1985 public $localtax1_type;
1986 public $localtax2_tx;
1987 public $localtax2_type;
1989 public $product_type;
1993 public $special_code;
1996 public $fk_user_author;
1997 public $fk_user_modif;
1998 public $fk_multicurrency;
1999 public $multicurrency_subprice;
2025 public function delete(
User $user, $notrigger =
false)
2033 $result = $this->
call_trigger(
'LINESUPPLIERBILLREC_DELETE', $user);
2049 $sql =
'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element .
' WHERE rowid=' . (int) $this->
id;
2051 $res = $this->
db->query($sql);
2052 if ($res ===
false) {
2054 $this->errors[] = $this->
db->lasterror();
2060 $this->
db->rollback();
2063 $this->
db->commit();
2077 $sql =
'SELECT l.rowid,';
2078 $sql .=
' l.fk_facture_fourn, l.fk_parent_line, l.fk_product,';
2079 $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,';
2080 $sql .=
' l.vat_src_code, l.tva_tx, l.localtax1_tx, l.localtax1_type, l.localtax2_tx, l.localtax2_type,';
2081 $sql .=
' l.total_ht, l.total_tva, l.total_localtax1, l.total_localtax2, l.total_ttc,';
2082 $sql .=
' l.product_type, l.date_start, l.date_end,';
2083 $sql .=
' l.info_bits, l.special_code, l.rang, l.fk_unit, l.import_key,';
2084 $sql .=
' l.fk_user_author, l.fk_user_modif, l.fk_multicurrency,';
2085 $sql .=
' l.multicurrency_code, l.multicurrency_subprice, l.multicurrency_total_ht, l.multicurrency_total_tva, l.multicurrency_total_ttc,';
2086 $sql .=
' p.ref as product_ref, p.fk_product_type as fk_product_type, p.label as product_label, p.description as product_desc';
2087 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_det_rec as l';
2088 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'product as p ON l.fk_product = p.rowid';
2089 $sql .=
' WHERE l.rowid = '. (int) $rowid;
2090 $sql .=
' ORDER BY l.rang';
2093 $result = $this->
db->query($sql);
2095 $objp = $this->
db->fetch_object($result);
2097 $this->
id = $objp->rowid;
2098 $this->fk_facture_fourn = $objp->fk_facture_fourn;
2099 $this->fk_parent = $objp->fk_parent_line;
2100 $this->fk_product = $objp->fk_product;
2101 $this->ref_supplier = $objp->ref_supplier;
2102 $this->label = $objp->label;
2104 $this->pu_ht = $objp->pu_ht;
2105 $this->pu_ttc = $objp->pu_ttc;
2106 $this->qty = $objp->qty;
2107 $this->remise_percent = $objp->remise_percent;
2108 $this->fk_remise_except = $objp->fk_remise_except;
2109 $this->vat_src_code = $objp->vat_src_code;
2110 $this->tva_tx = $objp->tva_tx;
2111 $this->localtax1_tx = $objp->localtax1_tx;
2112 $this->localtax1_type = $objp->localtax1_type;
2113 $this->localtax2_tx = $objp->localtax2_tx;
2114 $this->localtax2_type = $objp->localtax2_type;
2115 $this->total_ht = $objp->total_ht;
2116 $this->total_tva = $objp->total_tva;
2117 $this->total_localtax1 = $objp->total_localtax1;
2118 $this->total_localtax2 = $objp->total_localtax2;
2119 $this->total_ttc = $objp->total_ttc;
2120 $this->product_type = $objp->product_type;
2121 $this->date_start = $objp->date_start;
2122 $this->date_end = $objp->date_end;
2123 $this->info_bits = $objp->info_bits;
2124 $this->special_code = $objp->special_code;
2125 $this->rang = $objp->rang;
2126 $this->fk_unit = $objp->fk_unit;
2127 $this->import_key = $objp->import_key;
2128 $this->fk_user_author = $objp->fk_user_author;
2129 $this->fk_user_modif = $objp->fk_user_modif;
2130 $this->fk_multicurrency = $objp->fk_multicurrency;
2131 $this->multicurrency_code = $objp->multicurrency_code;
2132 $this->multicurrency_subprice = $objp->multicurrency_subprice;
2133 $this->multicurrency_total_ht = $objp->multicurrency_total_ht;
2134 $this->multicurrency_total_tva = $objp->multicurrency_total_tva;
2135 $this->multicurrency_total_ttc = $objp->multicurrency_total_ttc;
2137 $this->
db->free($result);
2140 $this->error = $this->
db->lasterror();
2159 include_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
2161 $sql =
'UPDATE ' . MAIN_DB_PREFIX .
'facture_fourn_det_rec SET';
2162 $sql .=
' fk_facture_fourn = ' . (int) $this->fk_facture_fourn;
2163 $sql .=
', fk_parent_line = ' . (int) $this->fk_parent;
2164 $sql .=
', fk_product = ' . (int) $this->fk_product;
2165 $sql .=
', ref = ' . (!empty($this->
ref) ?
"'" . $this->
db->escape($this->
ref) .
"'" :
'NULL');
2166 $sql .=
", label = " . (!empty($this->label) ?
"'" . $this->
db->escape($this->label) .
"'" :
'NULL');
2167 $sql .=
", description = '" . $this->
db->escape($this->
description) .
"'";
2168 $sql .=
', pu_ht = ' .
price2num($this->pu_ht);
2169 $sql .=
', pu_ttc = ' .
price2num($this->pu_ttc);
2170 $sql .=
', qty = ' .
price2num($this->qty);
2171 $sql .=
", remise_percent = '" .
price2num($this->remise_percent) .
"'";
2172 $sql .=
', fk_remise_except = ' . (int) $this->fk_remise_except;
2173 $sql .=
", vat_src_code = '" . $this->
db->escape($this->vat_src_code) .
"'";
2174 $sql .=
', tva_tx = ' .
price2num($this->tva_tx);
2175 $sql .=
', localtax1_tx = ' .
price2num($this->localtax1_tx);
2176 $sql .=
", localtax1_type = '" . $this->
db->escape($this->localtax1_type) .
"'";
2177 $sql .=
', localtax2_tx = ' .
price2num($this->localtax2_tx);
2178 $sql .=
", localtax2_type = '" . $this->
db->escape($this->localtax2_type) .
"'";
2179 if (empty($this->skip_update_total)) {
2180 $sql .=
', total_ht = ' .
price2num($this->total_ht);
2181 $sql .=
', total_tva = ' .
price2num($this->total_tva);
2182 $sql .=
', total_localtax1 = ' .
price2num($this->total_localtax1);
2183 $sql .=
', total_localtax2 = ' .
price2num($this->total_localtax2);
2184 $sql .=
', total_ttc = ' .
price2num($this->total_ttc);
2186 $sql .=
', product_type = ' . (int) $this->product_type;
2187 $sql .=
', date_start = ' . (int) $this->date_start;
2188 $sql .=
', date_end = ' . (int) $this->date_end;
2189 $sql .=
", info_bits = " . ((int) $this->info_bits);
2190 $sql .=
', special_code =' . (int) $this->special_code;
2191 $sql .=
', rang = ' . (int) $this->rang;
2192 $sql .=
', fk_unit = ' .($this->fk_unit ?
"'".$this->db->escape($this->fk_unit).
"'" :
'null');
2193 $sql .=
', fk_user_modif = ' . (int) $user->id;
2194 $sql .=
' WHERE rowid = ' . (
int) $this->id;
2198 dol_syslog(get_class($this).
'::updateline', LOG_DEBUG);
2208 if (!$error && !$notrigger) {
2210 $result = $this->
call_trigger(
'LINESUPPLIERBILLREC_MODIFY', $user);
2218 $this->
db->rollback();
2221 $this->
db->commit();
2225 $this->error = $this->
db->lasterror();
2226 $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 $db, $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.
static replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
Function used to replace a thirdparty id with another one.
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)
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.