226 public function fetch($rowid, $fk_facture_source = 0, $fk_invoice_supplier_source = 0)
229 if (!$rowid && !$fk_facture_source && !$fk_invoice_supplier_source) {
230 $this->error =
'ErrorBadParameters';
234 $sql =
"SELECT sr.rowid, sr.fk_soc, sr.discount_type,";
235 $sql .=
" sr.fk_user,";
236 $sql .=
" sr.amount_ht, sr.amount_tva, sr.amount_localtax1, sr.amount_localtax2, sr.amount_ttc, sr.tva_tx, sr.localtax1_tx, sr.localtax1_type, sr.localtax2_tx, sr.localtax2_type, sr.vat_src_code,";
237 $sql .=
" sr.multicurrency_amount_ht, sr.multicurrency_amount_tva, sr.multicurrency_amount_ttc,";
238 $sql .=
" sr.fk_facture_line, sr.fk_facture, sr.fk_facture_source, sr.fk_invoice_supplier_line, sr.fk_invoice_supplier, sr.fk_invoice_supplier_source, sr.description,";
239 $sql .=
" sr.datec,";
240 $sql .=
" f.ref as ref_facture_source, f.type as type_facture_source,";
241 $sql .=
" fsup.ref as ref_invoice_supplier_source, fsup.type as type_invoice_supplier_source";
242 $sql .=
" FROM ".$this->db->prefix().
"societe_remise_except as sr";
243 $sql .=
" LEFT JOIN ".$this->db->prefix().
"facture as f ON sr.fk_facture_source = f.rowid";
244 $sql .=
" LEFT JOIN ".$this->db->prefix().
"facture_fourn as fsup ON sr.fk_invoice_supplier_source = fsup.rowid";
245 $sql .=
" WHERE sr.entity IN (".getEntity(
'invoice').
")";
247 $sql .=
" AND sr.rowid = ".((int) $rowid);
249 if ($fk_facture_source) {
250 $sql .=
" AND sr.fk_facture_source = ".((int) $fk_facture_source);
252 if ($fk_invoice_supplier_source) {
253 $sql .=
" AND sr.fk_invoice_supplier_source = ".((int) $fk_invoice_supplier_source);
256 dol_syslog(get_class($this).
"::fetch", LOG_DEBUG);
257 $resql = $this->db->query($sql);
259 if ($this->db->num_rows($resql)) {
260 $obj = $this->db->fetch_object($resql);
262 $this->
id = $obj->rowid;
263 $this->fk_soc = $obj->fk_soc;
264 $this->socid = $obj->fk_soc;
265 $this->discount_type = $obj->discount_type;
267 $this->total_ht = $obj->amount_ht;
268 $this->total_tva = $obj->amount_tva;
269 $this->total_localtax1 = $obj->amount_localtax1;
270 $this->total_localtax2 = $obj->amount_localtax2;
271 $this->total_ttc = $obj->amount_ttc;
273 $this->amount_ht = $this->total_ht;
274 $this->amount_tva = $this->total_tva;
275 $this->amount_ttc = $this->total_ttc;
277 $this->multicurrency_total_ht = $this->multicurrency_subprice = $obj->multicurrency_amount_ht;
278 $this->multicurrency_total_tva = $obj->multicurrency_amount_tva;
279 $this->multicurrency_total_ttc = $obj->multicurrency_amount_ttc;
281 $this->multicurrency_amount_ht = $this->multicurrency_total_ht;
282 $this->multicurrency_amount_tva = $this->multicurrency_total_tva;
283 $this->multicurrency_amount_ttc = $this->multicurrency_total_ttc;
285 $this->tva_tx = $obj->tva_tx;
286 $this->localtax1_tx = $obj->localtax1_tx;
287 $this->localtax1_type = $obj->localtax1_type;
288 $this->localtax2_tx = $obj->localtax2_tx;
289 $this->localtax2_type = $obj->localtax2_type;
290 $this->vat_src_code = $obj->vat_src_code;
292 $this->fk_user = $obj->fk_user;
293 $this->fk_facture_line = $obj->fk_facture_line;
294 $this->fk_facture = $obj->fk_facture;
295 $this->fk_facture_source = $obj->fk_facture_source;
296 $this->ref_facture_source = $obj->ref_facture_source;
297 $this->type_facture_source = $obj->type_facture_source;
298 $this->fk_invoice_supplier_line = $obj->fk_invoice_supplier_line;
299 $this->fk_invoice_supplier = $obj->fk_invoice_supplier;
300 $this->fk_invoice_supplier_source = $obj->fk_invoice_supplier_source;
301 $this->ref_invoice_supplier_source = $obj->ref_invoice_supplier_source;
302 $this->type_invoice_supplier_source = $obj->type_invoice_supplier_source;
304 $this->datec = $this->db->jdate($obj->datec);
306 $this->db->free($resql);
309 $this->db->free($resql);
313 $this->error = $this->db->error();
330 $this->amount_ht =
price2num($this->amount_ht);
331 $this->amount_tva =
price2num($this->amount_tva);
332 $this->amount_ttc =
price2num($this->amount_ttc);
334 $this->tva_tx =
price2num($this->tva_tx);
335 $this->localtax1_tx =
price2num($this->localtax1_tx);
336 $this->localtax1_type =
price2num($this->localtax1_type);
337 $this->localtax2_tx =
price2num($this->localtax2_tx);
338 $this->localtax2_type =
price2num($this->localtax2_type);
340 $this->multicurrency_amount_ht =
price2num($this->multicurrency_amount_ht);
341 $this->multicurrency_amount_tva =
price2num($this->multicurrency_amount_tva);
342 $this->multicurrency_amount_ttc =
price2num($this->multicurrency_amount_ttc);
344 if (empty($this->multicurrency_amount_ht)) {
345 $this->multicurrency_amount_ht = 0;
347 if (empty($this->multicurrency_amount_tva)) {
348 $this->multicurrency_amount_tva = 0;
350 if (empty($this->multicurrency_amount_ttc)) {
351 $this->multicurrency_amount_ttc = 0;
353 if (empty($this->tva_tx)) {
356 if (empty($this->localtax1_tx)) {
357 $this->localtax1_tx = 0;
358 $this->localtax1_type = 0;
360 if (empty($this->localtax2_tx)) {
361 $this->localtax2_tx = 0;
362 $this->localtax2_type = 0;
367 $this->error =
'BadValueForPropertyDescriptionOfDiscount';
368 dol_syslog(get_class($this).
"::create ".$this->error, LOG_ERR);
373 if (!($userid > 0)) {
374 include_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
375 $tmpinvoice =
new Facture($this->db);
376 $tmpinvoice->fetch($this->fk_facture_source);
377 $userid = $tmpinvoice->user_creation_id;
381 $sql =
"INSERT INTO ".$this->db->prefix().
"societe_remise_except";
382 $sql .=
" (entity, datec, fk_soc, discount_type, fk_user, description,";
383 $sql .=
" amount_ht, amount_tva, amount_localtax1, amount_localtax2, amount_ttc, tva_tx, localtax1_tx, localtax1_type, localtax2_tx, localtax2_type, vat_src_code,";
384 $sql .=
" multicurrency_amount_ht, multicurrency_amount_tva, multicurrency_amount_ttc,";
385 $sql .=
" fk_facture_source, fk_invoice_supplier_source, multicurrency_code, multicurrency_tx";
387 $sql .=
" VALUES (".((int)
$conf->entity).
", '".$this->db->idate($this->datec !=
'' ? $this->datec :
dol_now()).
"', ".((
int) $this->socid).
", ".(empty($this->discount_type) ? 0 : intval($this->discount_type)).
", ".((
int) $userid).
", '".$this->db->escape($this->description).
"',";
388 $sql .=
" ".price2num($this->amount_ht).
", ".
price2num($this->amount_tva).
", ";
389 $sql .=
" ".($this->total_localtax1 ?
price2num($this->total_localtax1) : 0).
", ".($this->total_localtax2 ?
price2num($this->total_localtax2) : 0).
", ".
price2num($this->amount_ttc).
", ".
price2num($this->tva_tx).
",";
390 $sql .=
" ".price2num($this->localtax1_tx).
", ".
price2num($this->localtax1_type).
", ";
391 $sql .=
" ".($this->localtax2_tx ?
price2num($this->localtax2_tx) : 0).
", ".($this->localtax2_type ?
price2num($this->localtax2_type) : 0).
", '".$this->db->escape($this->vat_src_code).
"',";
392 $sql .=
" ".price2num($this->multicurrency_amount_ht).
", ".
price2num($this->multicurrency_amount_tva).
", ";
393 $sql .=
" ".price2num($this->multicurrency_amount_ttc).
", ";
394 $sql .=
" ".($this->fk_facture_source ? ((int) $this->fk_facture_source) :
"null").
",";
395 $sql .=
" ".($this->fk_invoice_supplier_source ? ((int) $this->fk_invoice_supplier_source) :
"null").
",";
396 $sql .=
" ".($this->multicurrency_code ?
"'".$this->db->escape($this->multicurrency_code).
"'" :
"null").
",";
397 $sql .=
" ".($this->multicurrency_tx ?
price2num($this->multicurrency_tx) :
"null");
400 dol_syslog(get_class($this).
"::create", LOG_DEBUG);
401 $resql = $this->db->query($sql);
403 $this->
id = $this->db->last_insert_id($this->db->prefix().
"societe_remise_except");
406 $this->error = $this->db->lasterror().
' - sql='.$sql;
418 public function delete($user)
421 if ($this->fk_facture_source) {
422 $sql =
"SELECT COUNT(rowid) as nb";
423 $sql .=
" FROM ".$this->db->prefix().
"societe_remise_except";
424 $sql .=
" WHERE (fk_facture_line IS NOT NULL";
425 $sql .=
" OR fk_facture IS NOT NULL)";
426 $sql .=
" AND fk_facture_source = ".((int) $this->fk_facture_source);
429 dol_syslog(get_class($this).
"::delete Check if we can remove discount", LOG_DEBUG);
430 $resql = $this->db->query($sql);
432 $obj = $this->db->fetch_object($resql);
434 $this->error =
'ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved';
444 if ($this->fk_invoice_supplier_source) {
445 $sql =
"SELECT COUNT(rowid) as nb";
446 $sql .=
" FROM ".$this->db->prefix().
"societe_remise_except";
447 $sql .=
" WHERE (fk_invoice_supplier_line IS NOT NULL";
448 $sql .=
" OR fk_invoice_supplier IS NOT NULL)";
449 $sql .=
" AND fk_invoice_supplier_source = ".((int) $this->fk_invoice_supplier_source);
452 dol_syslog(get_class($this).
"::delete Check if we can remove discount", LOG_DEBUG);
453 $resql = $this->db->query($sql);
455 $obj = $this->db->fetch_object($resql);
457 $this->error =
'ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved';
469 $sql =
"DELETE FROM ".$this->db->prefix().
"societe_remise_except ";
470 if ($this->fk_facture_source) {
471 $sql .=
" WHERE fk_facture_source = ".((int) $this->fk_facture_source);
472 } elseif ($this->fk_invoice_supplier_source) {
473 $sql .=
" WHERE fk_invoice_supplier_source = ".((int) $this->fk_invoice_supplier_source);
475 $sql .=
" WHERE rowid = ".((int) $this->
id);
477 $sql .=
" AND (fk_facture_line IS NULL";
478 $sql .=
" AND fk_facture IS NULL)";
479 $sql .=
" AND (fk_invoice_supplier_line IS NULL";
480 $sql .=
" AND fk_invoice_supplier IS NULL)";
482 dol_syslog(get_class($this).
"::delete Delete discount", LOG_DEBUG);
484 require_once DOL_DOCUMENT_ROOT.
'/core/class/commoninvoice.class.php';
485 $result = $this->db->query($sql);
488 if ($this->fk_facture_source) {
489 $sql =
"UPDATE ".$this->db->prefix().
"facture";
490 $sql .=
" set paye=0, fk_statut=1";
493 dol_syslog(get_class($this).
"::delete Update credit note or deposit invoice statut", LOG_DEBUG);
494 $result = $this->db->query($sql);
499 $this->error = $this->db->lasterror();
500 $this->db->rollback();
503 } elseif ($this->fk_invoice_supplier_source) {
504 $sql =
"UPDATE ".$this->db->prefix().
"facture_fourn";
505 $sql .=
" set paye=0, fk_statut=1";
508 dol_syslog(get_class($this).
"::delete Update credit note or deposit invoice statut", LOG_DEBUG);
509 $result = $this->db->query($sql);
514 $this->error = $this->db->lasterror();
515 $this->db->rollback();
523 $this->error = $this->db->lasterror();
524 $this->db->rollback();
548 if (!$rowidline && !$rowidinvoice) {
549 $this->error =
'ErrorBadParameters';
552 if ($rowidline && $rowidinvoice) {
553 $this->error =
'ErrorBadParameters';
557 $sql =
"UPDATE ".$this->db->prefix().
"societe_remise_except";
558 if (!empty($this->discount_type)) {
560 $sql .=
" SET fk_invoice_supplier_line = ".((int) $rowidline);
563 $sql .=
" SET fk_invoice_supplier = ".((int) $rowidinvoice);
567 $sql .=
" SET fk_facture_line = ".((int) $rowidline);
570 $sql .=
" SET fk_facture = ".((int) $rowidinvoice);
573 $sql .=
" WHERE rowid = ".((int) $this->
id);
575 dol_syslog(get_class($this).
"::link_to_invoice", LOG_DEBUG);
576 $resql = $this->db->query($sql);
578 if (!empty($this->discount_type)) {
579 $this->fk_invoice_supplier_line = $rowidline;
580 $this->fk_invoice_supplier = $rowidinvoice;
582 $this->fk_facture_line = $rowidline;
583 $this->fk_facture = $rowidinvoice;
591 $sourceinvoiceid = 0;
593 if (!empty($this->discount_type)) {
594 $sourcetype =
'invoice_supplier';
595 $targettype =
'invoice_supplier';
596 $sourceinvoiceid = (int) $this->fk_invoice_supplier_source;
598 $sourcetype =
'facture';
599 $targettype =
'facture';
600 $sourceinvoiceid = (int) $this->fk_facture_source;
603 if ($sourceinvoiceid > 0 && $sourceinvoiceid !== (
int) $rowidinvoice) {
604 $sqlcheck =
"SELECT 1";
605 $sqlcheck .=
" FROM ".$this->db->prefix().
"element_element";
606 $sqlcheck .=
" WHERE fk_source = ".((int) $sourceinvoiceid);
607 $sqlcheck .=
" AND sourcetype = '".$this->db->escape($sourcetype).
"'";
608 $sqlcheck .=
" AND fk_target = ".((int) $rowidinvoice);
609 $sqlcheck .=
" AND targettype = '".$this->db->escape($targettype).
"'";
610 $sqlcheck .= $this->db->plimit(1);
612 $rescheck = $this->db->query($sqlcheck);
613 if ($rescheck && $this->db->num_rows($rescheck) === 0) {
614 $sqladd =
"INSERT INTO ".$this->db->prefix().
"element_element (fk_source, sourcetype, fk_target, targettype)";
615 $sqladd .=
" VALUES (".((int) $sourceinvoiceid).
", '".$this->db->escape($sourcetype).
"', ".((int) $rowidinvoice).
", '".$this->db->escape($targettype).
"')";
616 $this->db->query($sqladd);
623 $result = $this->call_trigger(
'DISCOUNT_MODIFY', $user);
631 $this->error = $this->db->error();
947 public function generateFromAmount($amount, $amount_type, $tva_tx, $localtax1_tx, $localtax2_tx, $localtax1_type = 1, $localtax2_type = 1)
949 $tva_tx_pct = (float) ($tva_tx / 100);
950 $localtax1_tx_pct = (float) ($localtax1_tx / 100);
951 $localtax2_tx_pct = (float) ($localtax2_tx / 100);
958 $localtax1_type2 = ((int) $localtax1_type > 0 && (
int) $localtax1_type % 2 == 0 ? 1 : 0);
959 $localtax2_type2 = ((int) $localtax2_type > 0 && (
int) $localtax2_type % 2 == 0 ? 1 : 0);
961 if ($amount_type == 1) {
963 $this->total_ttc = (float)
price2num($amount,
'MT');
965 $ttc = (float) $this->total_ttc;
969 $tx_before_vat = 0; $tx_before_vat_without1 = 0; $tx_before_vat_without2 = 0;
970 $tx_after_vat = 0; $tx_after_vat_without1 = 0; $tx_after_vat_without2 = 0;
971 if ($localtax1_type2 && $localtax1_tx_pct > 0) {
972 $tx_after_vat += $localtax1_tx_pct;
973 $tx_after_vat_without2 += $localtax1_tx_pct;
975 $tx_before_vat += $localtax1_tx_pct;
976 $tx_before_vat_without2 += $localtax1_tx_pct;
978 if ($localtax2_type2 && $localtax2_tx_pct > 0) {
979 $tx_after_vat += $localtax2_tx_pct;
980 $tx_after_vat_without1 += $localtax2_tx_pct;
982 $tx_before_vat += $localtax2_tx_pct;
983 $tx_before_vat_without1 += $localtax2_tx_pct;
985 $tx_before_vat += $tva_tx_pct;
986 $tx_before_vat_without1 += $tva_tx_pct;
987 $tx_before_vat_without2 += $tva_tx_pct;
988 if ($localtax1_type2 && $localtax1_tx_pct > 0) {
989 $lt1 = (float)
price2num($ttc - $ttc / (1 + $tx_after_vat) * (1 + $tx_after_vat_without1),
'MT');
991 if ($localtax2_type2 && $localtax2_tx_pct > 0) {
992 $lt2 = (float)
price2num($ttc - $ttc / (1 + $tx_after_vat) * (1 + $tx_after_vat_without2),
'MT');
998 $htplusbeforevat = $ttc - $lt1 - $lt2;
1000 if (!$localtax1_type2 && $localtax1_tx_pct > 0) {
1001 $lt1 = (float)
price2num($htplusbeforevat - $htplusbeforevat / (1 + $tx_before_vat) * (1 + $tx_before_vat_without1),
'MT');
1003 if (!$localtax2_type2 && $localtax2_tx_pct > 0) {
1004 $lt2 = (float)
price2num($htplusbeforevat - $htplusbeforevat / (1 + $tx_before_vat) * (1 + $tx_before_vat_without2),
'MT');
1010 $tva = ($ttc - $lt2 - $lt1) - ($ttc - $lt2 - $lt1) / ( 1 + $tva_tx_pct);
1011 $this->total_tva = (float)
price2num($tva,
'MT');
1012 $this->total_localtax1 = $lt1;
1013 $this->total_localtax2 = $lt2;
1014 $this->total_ht = (float)
price2num($this->total_ttc - $this->total_localtax1 - $this->total_localtax2 - $this->total_tva,
'MT');
1017 $this->multicurrency_total_ttc = (float)
price2num($amount * (
float) $this->multicurrency_tx,
'MT');
1018 $this->multicurrency_total_ht = (float)
price2num((
float) $amount / (1 + $tva_tx_pct) * (
float) $this->multicurrency_tx,
'MT');
1019 $this->multicurrency_total_tva = (float)
price2num($this->multicurrency_total_ttc - $this->multicurrency_total_ht,
'MT');
1020 } elseif ($amount_type == 0) {
1022 $this->total_ht = (float)
price2num($amount,
'MT');
1023 $this->total_tva = (float)
price2num((
float) $this->total_ht * $tva_tx_pct,
'MT');
1026 $this->multicurrency_total_ht = (float)
price2num($amount * (
float) $this->multicurrency_tx,
'MT');
1027 $this->multicurrency_total_tva = (float)
price2num(((
float) $amount * $tva_tx_pct) * (
float) $this->multicurrency_tx,
'MT');
1030 if ($localtax1_type2 == 0) {
1031 $this->total_localtax1 = (float)
price2num((
float) $this->total_ht * $localtax1_tx_pct,
'MT');
1032 } elseif ($localtax1_type2 == 1) {
1033 $this->total_localtax1 = (float)
price2num(((
float) $this->total_ht + (
float) $this->total_tva) * $localtax1_tx_pct,
'MT');
1036 if ($localtax2_type2 == 0) {
1037 $this->total_localtax2 = (float)
price2num((
float) $this->total_ht * $localtax2_tx_pct,
'MT');
1038 } elseif ($localtax2_type2 == 1) {
1039 $this->total_localtax2 = (float)
price2num(((
float) $this->total_ht + (
float) $this->total_tva) * $localtax2_tx_pct,
'MT');
1044 $this->amount_ht = $this->total_ht;
1045 $this->amount_tva = $this->total_tva;
1046 $this->amount_ttc = $this->total_ttc;
1047 $this->multicurrency_amount_ht = $this->multicurrency_total_ht;
1048 $this->multicurrency_amount_tva = $this->multicurrency_total_tva;
1049 $this->multicurrency_amount_ttc = $this->multicurrency_total_ttc;
1051 $this->tva_tx = $tva_tx;
1052 $this->localtax1_tx = $localtax1_tx;
1053 $this->localtax1_type = $localtax1_type;
1054 $this->localtax2_tx = $localtax2_tx;
1055 $this->localtax2_type = $localtax2_type;
1060 if (empty($this->total_ttc)) {
1063 $this->total_ttc = (float)
price2num((
float) $this->total_ht + (float) $this->total_tva + $this->total_localtax1 + $this->total_localtax2,
'MT');
1064 $this->multicurrency_total_ttc = (float)
price2num(((
float) $this->total_ht + (float) $this->total_tva + $this->total_localtax1 + $this->total_localtax2) * (float) $this->multicurrency_tx,
'MT');
1067 $this->amount_ttc = $this->total_ttc;
1068 $this->multicurrency_amount_ttc = $this->multicurrency_total_ttc;
1088 $newdiscount1->fk_facture_source = $this->fk_facture_source;
1089 $newdiscount2->fk_facture_source = $this->fk_facture_source;
1090 $newdiscount1->fk_facture = $this->fk_facture;
1091 $newdiscount2->fk_facture = $this->fk_facture;
1092 $newdiscount1->fk_facture_line = $this->fk_facture_line;
1093 $newdiscount2->fk_facture_line = $this->fk_facture_line;
1094 $newdiscount1->fk_invoice_supplier_source = $this->fk_invoice_supplier_source;
1095 $newdiscount2->fk_invoice_supplier_source = $this->fk_invoice_supplier_source;
1096 $newdiscount1->fk_invoice_supplier = $this->fk_invoice_supplier;
1097 $newdiscount2->fk_invoice_supplier = $this->fk_invoice_supplier;
1098 $newdiscount1->fk_invoice_supplier_line = $this->fk_invoice_supplier_line;
1099 $newdiscount2->fk_invoice_supplier_line = $this->fk_invoice_supplier_line;
1101 $newdiscount1->description = $this->description;
1102 $newdiscount2->description = $this->description;
1104 $newdiscount1->description = $this->
description.
' (1)';
1105 $newdiscount2->description = $this->
description.
' (2)';
1107 $newdiscount1->fk_user = $this->fk_user;
1108 $newdiscount2->fk_user = $this->fk_user;
1109 $newdiscount1->fk_soc = $this->fk_soc;
1110 $newdiscount1->socid = $this->socid;
1111 $newdiscount2->fk_soc = $this->fk_soc;
1112 $newdiscount2->socid = $this->socid;
1113 $newdiscount1->discount_type = $this->discount_type;
1114 $newdiscount2->discount_type = $this->discount_type;
1115 $newdiscount1->datec = $this->datec;
1116 $newdiscount2->datec = $this->datec;
1117 $newdiscount1->tva_tx = $this->tva_tx;
1118 $newdiscount2->tva_tx = $this->tva_tx;
1119 $newdiscount1->localtax1_tx = $this->localtax1_tx;
1120 $newdiscount2->localtax1_tx = $this->localtax1_tx;
1121 $newdiscount1->localtax2_tx = $this->localtax2_tx;
1122 $newdiscount2->localtax2_tx = $this->localtax2_tx;
1123 $newdiscount1->vat_src_code = $this->vat_src_code;
1124 $newdiscount2->vat_src_code = $this->vat_src_code;
1126 $newdiscount1->generateFromAmount($amount_ttc1, 1, $newdiscount1->tva_tx, $newdiscount1->localtax1_tx, $newdiscount1->localtax2_tx, $this->localtax1_type, $this->localtax2_type);
1127 $newdiscount2->generateFromAmount($amount_ttc2, 1, $newdiscount2->tva_tx, $newdiscount2->localtax1_tx, $newdiscount2->localtax2_tx, $this->localtax1_type, $this->localtax2_type);
1129 return array($newdiscount1, $newdiscount2);