39require
"../main.inc.php";
50require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
51require_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
52require_once DOL_DOCUMENT_ROOT.
'/core/lib/contract.lib.php';
53require_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
54require_once DOL_DOCUMENT_ROOT.
'/core/modules/contract/modules_contract.php';
55require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
56require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
57require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
58require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
59require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
61 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
64 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
65 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
69$langs->loadLangs(array(
"contracts",
"orders",
"companies",
"bills",
"products",
'compta',
'propal'));
71$action =
GETPOST(
'action',
'aZ09');
72$confirm =
GETPOST(
'confirm',
'alpha');
73$cancel =
GETPOST(
'cancel',
'alpha');
74$backtopage =
GETPOST(
'backtopage',
'alpha');
75$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
80$origin =
GETPOST(
'origin',
'alpha');
83$attribute =
GETPOST(
'attribute',
'aZ09');
99 $socid = $user->socid;
103$hookmanager->initHooks(array(
'contractcard',
'globalcard'));
112if ($id > 0 || !empty($ref) && $action !=
'add') {
113 $ret =
$object->fetch($id, $ref);
115 $ret =
$object->fetch_thirdparty();
123$extrafields->fetch_name_optionals_label(
$object->table_element);
126$extralabelslines = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
128$permissionnote = $user->hasRight(
'contrat',
'creer');
129$permissiondellink = $user->hasRight(
'contrat',
'creer');
130$permissiontodelete = ($user->hasRight(
'contrat',
'creer') &&
$object->status == $object::STATUS_DRAFT) || $user->hasRight(
'contrat',
'supprimer');
131$permissiontoadd = $user->hasRight(
'contrat',
'creer');
132$permissiontoedit = $permissiontoadd;
133$permissiontoactivate = $user->hasRight(
'contrat',
'activer');
134$permissiontodisable = $user->hasRight(
'contrat',
'desactiver');
135$permissiontoeditextra = $permissiontoadd;
136if (
GETPOST(
'attribute',
'aZ09') && isset($extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')])) {
138 $permissiontoeditextra =
dol_eval((
string) $extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')]);
146if (!(
$object->id > 0) && ($action ==
'view' || $action ==
'')) {
155$parameters = array(
'socid' => $socid);
156$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
160if (empty($reshook)) {
161 $backurlforlist =
dolBuildUrl(DOL_URL_ROOT .
'/contrat/list.php');
163 if (empty($backtopage) || ($cancel && empty($id))) {
164 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
165 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
166 $backtopage = $backurlforlist;
168 $backtopage =
dolBuildUrl(DOL_URL_ROOT .
'/contrat/card.php', [
'id'=> ((!empty($id) && $id > 0) ? $id :
'__ID__')]);
174 if (!empty($backtopageforcancel)) {
175 header(
"Location: ".$backtopageforcancel);
177 } elseif (!empty($backtopage)) {
178 header(
"Location: ".$backtopage);
184 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
186 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
188 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
190 if ($action ==
'confirm_active' && $confirm ==
'yes' && $permissiontoactivate) {
203 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
208 } elseif ($action ==
'confirm_sign' && $confirm ==
'yes' && $user->hasRight(
'contract',
'creer')) {
209 $result =
$object->setSignedStatus($user,
GETPOSTINT(
'signed_status'), 0,
'CONTRACT_MODIFY');
211 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id);
216 } elseif ($action ==
'confirm_unsign' && $confirm ==
'yes' && $user->hasRight(
'contract',
'creer')) {
217 $result =
$object->setSignedStatus($user, Contrat::$SIGNED_STATUSES[
'STATUS_NO_SIGNATURE'], 0,
'CONTRACT_MODIFY');
219 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id);
224 } elseif ($action ==
'confirm_closeline' && $confirm ==
'yes' && $permissiontodisable) {
231 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"DateEnd")),
null,
'errors');
236 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
244 if (
GETPOST(
'mode') ==
'predefined') {
256 $date_start_update =
'';
257 $date_end_update =
'';
258 $date_start_real_update =
'';
259 $date_end_real_update =
'';
260 if (
GETPOST(
'date_start_updatemonth') &&
GETPOST(
'date_start_updateday') &&
GETPOST(
'date_start_updateyear')) {
263 if (
GETPOST(
'date_end_updatemonth') &&
GETPOST(
'date_end_updateday') &&
GETPOST(
'date_end_updateyear')) {
266 if (
GETPOST(
'date_start_real_updatemonth') &&
GETPOST(
'date_start_real_updateday') &&
GETPOST(
'date_start_real_updateyear')) {
269 if (
GETPOST(
'date_end_real_updatemonth') &&
GETPOST(
'date_end_real_updateday') &&
GETPOST(
'date_end_real_updateyear')) {
277 if ($action ==
'add' && $user->hasRight(
'contrat',
'creer')) {
279 if (empty($datecontrat)) {
281 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Date")),
null,
'errors');
286 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ThirdParty")),
null,
'errors');
292 $ret = $extrafields->setOptionalsFromPost(
null, $object);
300 $object->date_contrat = $datecontrat;
314 if (!empty($origin) && !empty($originid)) {
316 $element = $subelement = $origin;
317 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
319 $subelement = $regs[2];
324 if ($element ==
'order') {
325 $element = $subelement =
'commande';
327 if ($element ==
'propal') {
328 $element =
'comm/propal';
329 $subelement =
'propal';
331 if ($element ==
'invoice' || $element ==
'facture') {
332 $element =
'compta/facture';
333 $subelement =
'facture';
335 if ($element ==
'facturerec' || $element ==
'facture_rec') {
337 $element =
'compta/facture';
338 $subelement =
'facture-rec';
339 $classname =
'FactureRec';
341 if ($element ==
'facture_fourn_rec' || $element ==
'invoice_supplier_rec') {
343 $subelement =
'fournisseur.facture-rec';
344 $classname =
'FactureFournisseurRec';
348 $object->origin_id = $originid;
353 $object->linked_objects = array_merge(
$object->linked_objects,
GETPOST(
'other_linked_objects',
'array:int'));
360 if (empty($classname)) {
361 $classname = ucfirst($subelement);
363 $srcobject =
new $classname(
$db);
364 '@phan-var-force Commande|Propal|Facture $srcobject';
367 $result = $srcobject->fetch(
$object->origin_id);
369 $srcobject->fetch_thirdparty();
370 $lines = $srcobject->lines;
371 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
372 $srcobject->fetch_lines();
373 $lines = $srcobject->lines;
377 $num = count($lines);
379 for ($i = 0; $i < $num; $i++) {
380 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
382 if ($product_type == 1 || (
getDolGlobalString(
'CONTRACT_SUPPORT_PRODUCTS') && in_array($product_type, array(0, 1)))) {
384 if ($lines[$i]->fk_product > 0) {
388 $prod->id = $lines[$i]->fk_product;
389 $prod->getMultiLangs();
391 $outputlangs = $langs;
393 if (
GETPOST(
'lang_id',
'aZ09')) {
394 $newlang =
GETPOST(
'lang_id',
'aZ09');
396 if (empty($newlang)) {
397 $newlang = $srcobject->thirdparty->default_lang;
399 if (!empty($newlang)) {
401 $outputlangs->setDefaultLang($newlang);
404 $label = (!empty(
$prod->multilangs[$outputlangs->defaultlang][
"libelle"])) ?
$prod->multilangs[$outputlangs->defaultlang][
"libelle"] : $lines[$i]->product_label;
406 $label = $lines[$i]->product_label;
408 $desc = ($lines[$i]->desc && $lines[$i]->desc != $lines[$i]->label) ?
dol_htmlentitiesbr($lines[$i]->desc) :
'';
414 $array_options = array();
416 if (method_exists($lines[$i],
'fetch_optionals')) {
417 $lines[$i]->fetch_optionals();
418 $array_options = $lines[$i]->array_options;
421 $txtva = $lines[$i]->vat_src_code ? $lines[$i]->tva_tx.
' ('.$lines[$i]->vat_src_code.
')' : $lines[$i]->tva_tx;
429 $lines[$i]->subprice,
434 $lines[$i]->fk_product,
435 $lines[$i]->remise_percent,
436 $lines[$i]->date_start,
437 $lines[$i]->date_end,
440 $lines[$i]->info_bits,
441 $lines[$i]->fk_fournprice,
444 (
int) $lines[$i]->fk_unit,
460 $parameters = array(
'objFrom' => $srcobject);
461 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $object, $action);
475 $result =
$object->create($user);
477 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
485 } elseif ($action ==
'classin' && $user->hasRight(
'contrat',
'creer')) {
487 } elseif ($action ==
'addline' && $user->hasRight(
'contrat',
'creer')) {
491 $line_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
494 $price_ht_devise =
'';
496 $price_ttc_devise =
'';
498 $rang = count(
$object->lines) + 1;
500 if (
GETPOST(
'price_ht') !==
'') {
503 if (
GETPOST(
'multicurrency_price_ht') !==
'') {
506 if (
GETPOST(
'price_ttc') !==
'') {
509 if (
GETPOST(
'multicurrency_price_ttc') !==
'') {
513 if (
GETPOST(
'prod_entry_mode',
'alpha') ==
'free') {
519 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
524 $tva_tx =
GETPOST(
'tva_tx',
'alpha');
527 $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ?
price2num(
GETPOST(
'remise_percent'.$predef),
'', 2) : 0);
528 if (empty($remise_percent)) {
533 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Qty")),
null,
'errors');
536 if (
GETPOST(
'prod_entry_mode',
'alpha') ==
'free' && (empty($idprod) || $idprod < 0) && empty($line_desc)) {
537 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Description")),
null,
'errors');
544 setEventMessages($langs->trans(
"Error").
': '.$langs->trans(
"DateStartPlanned").
' > '.$langs->trans(
"DateEndPlanned"),
null,
'errors');
549 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
550 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
552 if (is_array($extralabelsline)) {
554 foreach ($extralabelsline as $key => $value) {
555 unset($_POST[
"options_".$key]);
564 $price_base_type =
'';
570 $prod->fetch($idprod);
579 $price_min =
$prod->price_min;
580 $price_min_ttc =
$prod->price_min_ttc;
584 $price_min =
$prod->multiprices_min[
$object->thirdparty->price_level];
585 $price_min_ttc =
$prod->multiprices_min_ttc[
$object->thirdparty->price_level];
588 require_once DOL_DOCUMENT_ROOT.
'/product/class/productcustomerprice.class.php';
592 $filter = array(
't.fk_product' => (
string)
$prod->id,
't.fk_soc' => (
string)
$object->thirdparty->id);
594 $result = $prodcustprice->fetchAll(
'',
'', 0, 0, $filter);
596 if (count($prodcustprice->lines) > 0) {
597 $date_now = (int) floor(
dol_now() / 86400) * 86400;
598 foreach ($prodcustprice->lines as $k => $custprice_line) {
599 if ($custprice_line->date_begin <= $date_now && (empty($custprice_line->date_end) || $date_now <= $custprice_line->date_end)) {
600 $price_min =
price($custprice_line->price_min);
601 $price_min_ttc =
price($custprice_line->price_min_ttc);
617 $tmpvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', $tva_tx));
618 $tmpprodvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', (
string)
$prod->tva_tx));
621 if (!empty($price_ht) || $price_ht ===
'0') {
623 $pu_ttc =
price2num((
float) $pu_ht * (1 + ((
float) $tmpvat / 100)),
'MU');
624 $price_base_type =
'HT';
625 } elseif (!empty($price_ttc) || $price_ttc ===
'0') {
627 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tmpvat / 100)),
'MU');
628 $price_base_type =
'TTC';
631 $desc =
$prod->description;
641 $fk_unit =
$prod->fk_unit;
645 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
646 if (empty($tva_tx)) {
649 $tva_tx = str_replace(
'*',
'', $tva_tx);
652 $pu_ht_devise =
price2num($price_ht_devise,
'MU');
653 $pu_ttc_devise =
price2num($price_ttc_devise,
'MU');
655 $tmpvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', $tva_tx));
658 if (!empty($price_ht) || $price_ht ===
'0') {
660 $pu_ttc =
price2num((
float) $pu_ht * (1 + ((
float) $tmpvat / 100)),
'MU');
661 $price_base_type =
'HT';
662 } elseif (!empty($price_ttc) || $price_ttc ===
'0') {
664 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tmpvat / 100)),
'MU');
665 $price_base_type =
'TTC';
673 $fk_fournprice =
GETPOST(
'fournprice');
675 $pa_ht =
GETPOST(
'buying_price');
685 if (((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !$user->hasRight(
'produit',
'ignore_price_min_advance'))
687 $object->error = $langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
705 (
int) $fk_fournprice,
716 $outputlangs = $langs;
719 $newlang =
GETPOST(
'lang_id',
'aZ09');
722 $newlang =
$object->thirdparty->default_lang;
724 if (!empty($newlang)) {
726 $outputlangs->setDefaultLang($newlang);
731 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
734 unset($_POST[
'prod_entry_mode']);
736 unset($_POST[
'qty']);
737 unset($_POST[
'type']);
738 unset($_POST[
'remise_percent']);
739 unset($_POST[
'price_ht']);
740 unset($_POST[
'multicurrency_price_ht']);
741 unset($_POST[
'price_ttc']);
742 unset($_POST[
'tva_tx']);
743 unset($_POST[
'product_ref']);
744 unset($_POST[
'product_label']);
745 unset($_POST[
'product_desc']);
746 unset($_POST[
'fournprice']);
747 unset($_POST[
'buying_price']);
748 unset($_POST[
'np_marginRate']);
749 unset($_POST[
'np_markRate']);
750 unset($_POST[
'dp_desc']);
751 unset($_POST[
'idprod']);
753 unset($_POST[
'date_starthour']);
754 unset($_POST[
'date_startmin']);
755 unset($_POST[
'date_startsec']);
756 unset($_POST[
'date_startday']);
757 unset($_POST[
'date_startmonth']);
758 unset($_POST[
'date_startyear']);
759 unset($_POST[
'date_endhour']);
760 unset($_POST[
'date_endmin']);
761 unset($_POST[
'date_endsec']);
762 unset($_POST[
'date_endday']);
763 unset($_POST[
'date_endmonth']);
764 unset($_POST[
'date_endyear']);
769 } elseif ($action ==
'updateline' && $user->hasRight(
'contrat',
'creer') && !
GETPOST(
'cancel',
'alpha')) {
773 if (!empty($date_start_update) && !empty($date_end_update) && $date_start_update > $date_end_update) {
774 setEventMessages($langs->trans(
"Error").
': '.$langs->trans(
"DateStartPlanned").
' > '.$langs->trans(
"DateEndPlanned"),
null,
'errors');
775 $action =
'editline';
781 if ($objectline->fetch($idline) < 0) {
785 $objectline->fetch_optionals();
787 $objectline->oldcopy =
dol_clone($objectline, 2);
795 if ($date_start_real_update ==
'') {
796 $date_start_real_update = $objectline->date_start_real;
798 if ($date_end_real_update ==
'') {
799 $date_end_real_update = $objectline->date_end_real;
802 $vat_rate =
GETPOST(
'eltva_tx',
'alpha');
805 if (preg_match(
'/\*/', $vat_rate)) {
810 $vat_rate = str_replace(
'*',
'', $vat_rate);
819 if (preg_match(
'/\((.*)\)/', $txtva, $reg)) {
820 $vat_src_code = $reg[1];
821 $txtva = preg_replace(
'/\s*\(.*\)/',
'', $txtva);
837 $objectline->fk_product =
GETPOSTINT(
'idprod');
838 $objectline->description =
GETPOST(
'product_desc',
'restricthtml');
841 $objectline->remise_percent = $remise_percent;
842 $objectline->tva_tx = ($txtva ? $txtva : 0);
843 $objectline->vat_src_code = $vat_src_code;
844 $objectline->localtax1_tx = is_numeric($localtax1_tx) ? $localtax1_tx : 0;
845 $objectline->localtax2_tx = is_numeric($localtax2_tx) ? $localtax2_tx : 0;
846 $objectline->date_start = $date_start_update;
847 $objectline->date_start_real = $date_start_real_update;
848 $objectline->date_end = $date_end_update;
849 $objectline->date_end_real = $date_end_real_update;
850 $objectline->user_closing_id = $user->id;
852 $objectline->pa_ht = $pa_ht;
858 $objectline->fk_unit =
null;
862 $extralabelsline = $extrafields->fetch_name_optionals_label($objectline->table_element);
863 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
865 if (is_array($array_options) && count($array_options) > 0) {
867 foreach ($array_options as $key => $value) {
868 $objectline->array_options[$key] = $array_options[$key];
874 $result = $objectline->update($user);
877 $action =
'editline';
878 $_GET[
'rowid'] =
GETPOST(
'elrowid');
888 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $user->hasRight(
'contrat',
'creer')) {
892 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
897 } elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $user->hasRight(
'contrat',
'creer')) {
898 $result =
$object->validate($user);
903 $outputlangs = $langs;
906 $newlang =
GETPOST(
'lang_id',
'aZ09');
909 $newlang =
$object->thirdparty->default_lang;
911 if (!empty($newlang)) {
913 $outputlangs->setDefaultLang($newlang);
918 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
923 } elseif ($action ==
'reopen' && $user->hasRight(
'contrat',
'creer')) {
924 $result =
$object->reopen($user);
928 } elseif ($action ==
'confirm_close' && $confirm ==
'yes' && $permissiontodisable) {
930 $result =
$object->closeAll($user);
934 } elseif ($action ==
'confirm_activate' && $confirm ==
'yes' && $permissiontoactivate) {
937 $comment =
GETPOST(
'comment',
'alpha');
942 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $permissiontodelete) {
943 $result =
$object->delete($user);
945 header(
"Location: list.php?restore_lastsearch_values=1");
950 } elseif ($action ==
'confirm_move' && $confirm ==
'yes' && $permissiontoedit) {
953 $result = $contractline->fetch(
GETPOSTINT(
'lineid'));
954 $contractline->fk_contrat =
GETPOSTINT(
'newcid');
955 $result = $contractline->update($user, 1);
957 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
963 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"RefNewContract")),
null,
'errors');
965 } elseif ($action ==
'update_extras' && $permissiontoeditextra) {
968 $attribute =
GETPOST(
'attribute',
'aZ09');
971 $ret = $extrafields->setOptionalsFromPost(
null, $object, $attribute);
978 $result =
$object->updateExtraField($attribute,
'CONTRACT_MODIFY');
986 $action =
'edit_extras';
988 } elseif ($action ==
'setref_supplier' && $permissiontoadd) {
992 $result =
$object->setValueFrom(
'ref_supplier',
GETPOST(
'ref_supplier',
'alpha'),
'',
null,
'text',
'', $user,
'CONTRACT_MODIFY');
995 $action =
'editref_supplier';
997 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1001 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1004 } elseif ($action ==
'setref_customer' && $permissiontoadd) {
1008 $result =
$object->setValueFrom(
'ref_customer',
GETPOST(
'ref_customer',
'alpha'),
'',
null,
'text',
'', $user,
'CONTRACT_MODIFY');
1011 $action =
'editref_customer';
1013 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1017 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1020 } elseif ($action ==
'setref' && $permissiontoadd) {
1022 $result =
$object->fetch($id);
1029 $result =
$object->setValueFrom(
'ref',
GETPOST(
'ref',
'alpha'),
'',
null,
'text',
'', $user,
'CONTRACT_MODIFY');
1032 $action =
'editref';
1034 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
1041 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1045 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1048 } elseif ($action ==
'setdate_contrat' && $permissiontoadd) {
1050 $result =
$object->fetch($id);
1055 $result =
$object->setValueFrom(
'date_contrat', $datacontrat,
'',
null,
'date',
'', $user,
'CONTRACT_MODIFY');
1058 $action =
'editdate_contrat';
1060 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1064 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1070 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1074 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1077 $triggersendname =
'CONTRACT_SENTBYMAIL';
1079 $mode =
'emailfromcontract';
1080 $trackid =
'con'.$object->id;
1081 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1085 if ($action ==
'addcontact' && $user->hasRight(
'contrat',
'creer')) {
1088 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1091 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1094 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1095 $langs->load(
"errors");
1096 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1101 } elseif ($action ==
'swapstatut' && $user->hasRight(
'contrat',
'creer')) {
1104 } elseif ($action ==
'deletecontact' && $user->hasRight(
'contrat',
'creer')) {
1109 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1118 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $user->hasRight(
'contrat',
'creer')) {
1120 setEventMessages($langs->trans(
"NoCloneOptionsSpecified"),
null,
'errors');
1123 $result =
$object->createFromClone($user, $socid);
1125 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
1128 if (count(
$object->errors) > 0) {
1143$title =
$object->ref.
" - ".$langs->trans(
'Contract');
1144if ($action ==
'create') {
1145 $title = $langs->trans(
"NewContract");
1147$help_url =
'EN:Module_Contracts|FR:Module_Contrat|ES:Contratos_de_servicio';
1149llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-contrat page-card');
1160if (substr($module, 0, 13) ==
'mod_contract_' && substr($module, -3) ==
'php') {
1161 $module = substr($module, 0,
dol_strlen($module) - 4);
1164$modCodeContract =
null;
1166 $modCodeContract =
new $module();
1168 '@phan-var-force ModelNumRefContracts $modCodeContract';
1172if ($action ==
'create') {
1178 $soc->fetch($socid);
1184 $element = $subelement =
GETPOST(
'origin');
1185 if (preg_match(
'/^([^_]+)_([^_]+)/i',
GETPOST(
'origin'), $regs)) {
1186 $element = $regs[1];
1187 $subelement = $regs[2];
1190 if ($element ==
'project') {
1194 if ($element ==
'order' || $element ==
'commande') {
1195 $element = $subelement =
'commande';
1197 if ($element ==
'propal') {
1198 $element =
'comm/propal';
1199 $subelement =
'propal';
1201 if ($element ==
'invoice' || $element ==
'facture') {
1202 $element =
'compta/facture';
1203 $subelement =
'facture';
1206 if ($element ==
'facturerec' || $element ==
'facture_rec') {
1207 $element =
'compta/facture';
1208 $subelement =
'facture-rec';
1209 $classname =
'FactureRec';
1211 if ($element ==
'facture_fourn_rec' || $element ==
'invoice_supplier_rec') {
1213 $subelement =
'fournisseur.facture-rec';
1214 $classname =
'FactureFournisseurRec';
1219 if (empty($classname)) {
1220 $classname = ucfirst($subelement);
1222 $objectsrc =
new $classname(
$db);
1223 '@phan-var-force Commande|Propal|Facture $objectsrc';
1224 $objectsrc->fetch($originid);
1225 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1226 $objectsrc->fetch_lines();
1228 $objectsrc->fetch_thirdparty();
1231 $objectsrc->fetch_optionals();
1232 $object->array_options = $objectsrc->array_options;
1234 $projectid = (int) $objectsrc->fk_project;
1236 $soc = $objectsrc->thirdparty;
1238 $note_private = (!empty($objectsrc->note_private) ? $objectsrc->note_private :
'');
1239 $note_public = (!empty($objectsrc->note_public) ? $objectsrc->note_public :
'');
1242 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
1246 $note_private =
GETPOST(
"note_private",
"alpha");
1247 $note_public =
GETPOST(
"note_public",
"alpha");
1252 print
'<form name="form_contract" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1253 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1254 print
'<input type="hidden" name="action" value="add">';
1255 print
'<input type="hidden" name="socid" value="'.$soc->id.
'">'.
"\n";
1256 print
'<input type="hidden" name="remise_percent" value="0">';
1257 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1261 print
'<table class="border centpercent">';
1264 print
'<tr><td class="titlefield fieldrequired">'.$langs->trans(
'Ref').
'</td><td>';
1265 if (!empty($modCodeContract->code_auto)) {
1266 $tmpcode = $langs->trans(
"Draft");
1268 $tmpcode =
'<input name="ref" class="maxwidth100" maxlength="128" value="'.dol_escape_htmltag(
GETPOST(
'ref',
'alpha')).
'">';
1274 print
'<tr><td>'.$langs->trans(
'RefCustomer').
'</td>';
1275 print
'<td><input type="text" class="maxwidth150" name="ref_customer" id="ref_customer" value="'.dol_escape_htmltag(
GETPOST(
'ref_customer',
'alpha')).
'"></td></tr>';
1278 print
'<tr><td>'.$langs->trans(
'RefSupplier').
'</td>';
1279 print
'<td><input type="text" class="maxwidth150" name="ref_supplier" id="ref_supplier" value="'.dol_escape_htmltag(
GETPOST(
'ref_supplier',
'alpha')).
'"></td></tr>';
1283 print
'<td class="fieldrequired">'.$langs->trans(
'ThirdParty').
'</td>';
1286 print $soc->getNomUrl(1);
1287 print
'<input type="hidden" name="socid" value="'.$soc->id.
'">';
1291 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1292 print $form->select_company(
'',
'socid',
'',
'SelectThirdParty', 1, 0, array(), 0,
'minwidth150 widthcentpercentminusxx maxwidth500');
1293 print
' <a href="'.dolBuildUrl(DOL_URL_ROOT .
'/societe/card.php', [
'action' =>
'create',
'customer' => 3,
'backtopage' =>
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'action' =>
'create'])]).
'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans(
"AddThirdParty").
'"></span></a>';
1300 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1301 if ($soc->remise_percent) {
1302 print $langs->trans(
"CompanyHasRelativeDiscount", $soc->remise_percent).
' ';
1304 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoRelativeDiscount").
'. </span>';
1306 $absolute_discount = $soc->getAvailableDiscounts();
1307 if ($absolute_discount) {
1308 print $langs->trans(
"CompanyHasAbsoluteDiscount",
price($absolute_discount), $langs->trans(
"Currency".$conf->currency)).
'.';
1310 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoAbsoluteDiscount").
'.</span>';
1316 print
'<tr><td class="nowrap"><span class="fieldrequired">'.$langs->trans(
"TypeContact_contrat_internal_SALESREPFOLL").
'</span></td><td>';
1317 print
img_picto(
'',
'user',
'class="pictofixedwidth"');
1318 print $form->select_dolusers(
GETPOST(
"commercial_suivi_id") ?
GETPOST(
"commercial_suivi_id") : $user->id,
'commercial_suivi_id', 1, null);
1322 print
'<tr><td class="nowrap"><span class="fieldrequired">'.$langs->trans(
"TypeContact_contrat_internal_SALESREPSIGN").
'</span></td><td>';
1323 print
img_picto(
'',
'user',
'class="pictofixedwidth"');
1324 print $form->select_dolusers(
GETPOST(
"commercial_signature_id") ?
GETPOST(
"commercial_signature_id") : $user->id,
'commercial_signature_id', 1, null);
1327 print
'<tr><td><span class="fieldrequired">'.$langs->trans(
"Date").
'</span></td><td>';
1328 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1329 print $form->selectDate($datecontrat,
'', 0, 0, 0,
"contrat");
1334 $langs->load(
'projects');
1338 print
'<tr><td>'.$langs->trans(
"Project").
'</td><td>';
1339 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
1340 $formproject->select_projects(($soc->id > 0 ? $soc->id : -1), $projectid,
"projectid", 0, 0, 1, 1, 0, 0, 0,
'', 0, 0,
'minwidth150 maxwidth300 widthcentpercentminusxx');
1341 print
' <a href="' .
dolBuildUrl(DOL_URL_ROOT .
'/projet/card.php', [
'socid' => $soc->id,
'action' =>
'create',
'status' => 1,
'backtopage' =>
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'action' =>
'create',
'socid' => $soc->id])]) .
'"><span class="fa fa-plus-circle valignmiddle" title="'.$langs->trans(
"AddProject").
'"></span></a>';
1346 print
'<tr><td>'.$langs->trans(
"NotePublic").
'</td><td class="tdtop">';
1347 $doleditor =
new DolEditor(
'note_public', (
string) $note_public,
'', 100,
'dolibarr_notes',
'In',
true,
true, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1348 print $doleditor->Create(1);
1352 if (empty($user->socid)) {
1353 print
'<tr><td>'.$langs->trans(
"NotePrivate").
'</td><td class="tdtop">';
1354 $doleditor =
new DolEditor(
'note_private', (
string) $note_private,
'', 100,
'dolibarr_notes',
'In',
true,
true, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1355 print $doleditor->Create(1);
1360 $parameters = array(
'objectsrc' => $objectsrc,
'colspan' =>
' colspan="3"',
'cols' =>
'3');
1361 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
1362 print $hookmanager->resPrint;
1365 if (empty($reshook)) {
1366 print
$object->showOptionals($extrafields,
'create', $parameters);
1373 print $form->buttonsSaveCancel(
"CreateDraft");
1375 if (is_object($objectsrc)) {
1376 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1377 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1380 print
'<br>'.$langs->trans(
"Note").
': '.$langs->trans(
"OnlyLinesWithTypeServiceAreUsed");
1394 $result =
$object->fetch_lines();
1399 $nbofservices = count(
$object->lines);
1402 $author->fetch(
$object->user_author_id);
1404 $commercial_signature =
new User(
$db);
1405 $commercial_signature->fetch(
$object->commercial_signature_id);
1407 $commercial_suivi =
new User(
$db);
1408 $commercial_suivi->fetch(
$object->commercial_suivi_id);
1415 print
dol_get_fiche_head($head, $hselected, $langs->trans(
"Contract"), -1,
'contract', 0,
'',
'', 0,
'', 1);
1418 if ($action ==
'delete') {
1420 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"DeleteAContract"), $langs->trans(
"ConfirmDeleteAContract"),
"confirm_delete",
'', 0, 1);
1421 } elseif ($action ==
'valid') {
1423 $ref = substr(
$object->ref, 1, 4);
1424 if ($ref ==
'PROV' && !empty($modCodeContract->code_auto)) {
1429 $text = $langs->trans(
'ConfirmValidateContract', $numref);
1430 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ValidateAContract"), $text,
"confirm_valid",
'', 0, 1);
1431 } elseif ($action ==
'close') {
1433 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"CloseAContract"), $langs->trans(
"ConfirmCloseContract"),
"confirm_close",
'', 0, 1);
1434 } elseif ($action ==
'activate') {
1435 $formquestion = array(
1436 array(
'type' =>
'date',
'name' =>
'd_start',
'label' => $langs->trans(
"DateServiceActivate"),
'value' =>
dol_now()),
1437 array(
'type' =>
'date',
'name' =>
'd_end',
'label' => $langs->trans(
"DateEndPlanned"), 0 =>
'', 1 =>
''),
1438 array(
'type' =>
'text',
'name' =>
'comment',
'label' => $langs->trans(
"Comment"),
'value' =>
'', 0 =>
'', 1 =>
'',
'class' =>
'minwidth300',
'moreattr' =>
'autofocus')
1440 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ActivateAllOnContract"), $langs->trans(
"ConfirmActivateAllOnContract"),
"confirm_activate", $formquestion,
'yes', 1, 300);
1441 } elseif ($action ==
'clone') {
1442 $filter =
'(s.client:IN:1,2,3)';
1444 $formquestion = array(array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter)));
1445 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneContract',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
1446 } elseif ($action ==
'sign') {
1447 $text = $langs->trans(
'ConfirmSignContract');
1449 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1452 $text .= $notify->confirmMessage(
'CONTRACT_MODIFY',
$object->socid, $object);
1457 'name' =>
'signed_status',
1458 'label' =>
'<span class="fieldrequired">'.$langs->trans(
'SignStatus').
'</span>',
1459 'values' =>
$object->getSignedStatusLocalisedArray()
1461 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'SignContract'), $text,
'confirm_sign', $formquestion, 0, 1);
1462 } elseif ($action ==
'unsign') {
1463 $text = $langs->trans(
'ConfirmUnsignContract');
1465 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1468 $text .= $notify->confirmMessage(
'CONTRACT_MODIFY',
$object->socid, $object);
1470 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'UnsignContract'), $text,
'confirm_unsign',
'', 0, 1);
1475 $parameters = array(
1476 'formConfirm' => $formconfirm,
1481 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
1482 if (empty($reshook)) {
1483 $formconfirm .= $hookmanager->resPrint;
1484 } elseif ($reshook > 0) {
1485 $formconfirm = $hookmanager->resPrint;
1493 if (
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'contrat',
'creer')) {
1494 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="POST">';
1495 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1496 print
'<input type="hidden" name="action" value="setremise">';
1497 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1502 $linkback =
'<a href="'.DOL_URL_ROOT.
'/contrat/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1506 if (!empty($modCodeContract->code_auto)) {
1509 $morehtmlref .= $form->editfieldkey(
"",
'ref',
$object->ref, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 3);
1510 $morehtmlref .= $form->editfieldval(
"",
'ref',
$object->ref, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'',
null,
'2');
1513 $morehtmlref .=
'<div class="refidno">';
1515 $morehtmlref .= $form->editfieldkey(
"RefCustomer",
'ref_customer',
$object->ref_customer, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 1);
1516 $morehtmlref .= $form->editfieldval(
"RefCustomer",
'ref_customer',
$object->ref_customer, $object, $user->hasRight(
'contrat',
'creer'),
'string'.(isset(
$conf->global->THIRDPARTY_REF_INPUT_SIZE) ?
':' .
getDolGlobalString(
'THIRDPARTY_REF_INPUT_SIZE') :
''),
'', null, null,
'', 1,
'getFormatedCustomerRef');
1518 $morehtmlref .=
'<br>';
1519 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 1);
1520 $morehtmlref .= $form->editfieldval(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'',
null,
null,
'', 1,
'getFormatedSupplierRef');
1522 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1);
1524 $morehtmlref .=
' <span class="otherlink valignmiddle">(<a href="'.DOL_URL_ROOT.
'/contrat/list.php?socid='.
$object->thirdparty->id.
'&search_name='.urlencode(
$object->thirdparty->name).
'">'.$langs->trans(
"OtherContracts").
'</a>)</span>';
1528 $langs->load(
"projects");
1529 $morehtmlref .=
'<br>';
1530 if ($permissiontoadd) {
1531 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
1532 if ($action !=
'classify') {
1533 $morehtmlref .=
'<a class="editfielda" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'action' =>
'classify',
'id' =>
$object->id],
true).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1535 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid, (
string)
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
1537 if (!empty(
$object->fk_project)) {
1539 $proj->fetch(
$object->fk_project);
1540 $morehtmlref .= $proj->getNomUrl(1);
1542 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
1547 $morehtmlref .=
'</div>';
1550 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'none', $morehtmlref);
1553 print
'<div class="fichecenter">';
1554 print
'<div class="fichehalfleft">';
1555 print
'<div class="underbanner clearboth"></div>';
1557 print
'<table class="border centpercent tableforfield">';
1560 print
'<tr><td class="titlefield">'.$langs->trans(
'Discount').
'</td><td colspan="3">';
1561 if (
$object->thirdparty->remise_percent) {
1562 print $langs->trans(
"CompanyHasRelativeDiscount",
$object->thirdparty->remise_percent).
'. ';
1564 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoRelativeDiscount").
'. </span>';
1566 $absolute_discount =
$object->thirdparty->getAvailableDiscounts();
1567 if ($absolute_discount) {
1568 print $langs->trans(
"CompanyHasAbsoluteDiscount",
price($absolute_discount), $langs->trans(
"Currency".$conf->currency)).
'.';
1570 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoAbsoluteDiscount").
'.</span>';
1576 print
'<td class="titlefield">';
1577 print $form->editfieldkey(
"Date",
'date_contrat',
$object->date_contrat, $object, $user->hasRight(
'contrat',
'creer'));
1579 print $form->editfieldval(
"Date",
'date_contrat',
$object->date_contrat, $object, $user->hasRight(
'contrat',
'creer'),
'datehourpicker');
1584 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1589 print
'<div class="fichehalfright">';
1591 print
'<!-- amounts -->'.
"\n";
1592 print
'<div class="underbanner clearboth"></div>';
1594 print
'<div class="div-table-responsive-no-min">';
1595 print
'<table class="border tableforfield centpercent">';
1598 print
'<tr><td class="titlefield">'.
"".
'</td>';
1599 print
'<td class=right>'.$langs->trans(
'Total').
'</td>';
1600 print
'<td class=right>'.$staticcontractline->LibStatut(0, 5, 0).
'</td>';
1601 print
'<td class=right>'.$staticcontractline->LibStatut(4, 5, 0).
'</td>';
1602 print
'<td class=right>'.$staticcontractline->LibStatut(4, 5, 1).
'</td>';
1603 print
'<td class=right>'.$staticcontractline->LibStatut(5, 5, 0).
'</td>';
1606 $all=
$object->getTotalizedLines(-1, 0);
1607 $draft=
$object->getTotalizedLines(0, 0);
1608 $enabled=
$object->getTotalizedLines(4, 0);
1609 $expired=
$object->getTotalizedLines(4, 1);
1610 $close=
$object->getTotalizedLines(5, 0);
1612 print
'<tr><td class="titlefield">'.$langs->trans(
"Lines").
'</td>';
1613 print
'<td class="right nowrap">'.($all[
'total_qty'] ?
price2num($all[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1614 print
'<td class="right">'.($draft[
'total_qty'] ?
price2num($draft[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1615 print
'<td class="right">'.($enabled[
'total_qty'] ?
price2num($enabled[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1616 print
'<td class="right">'.($expired[
'total_qty'] ?
price2num($expired[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1617 print
'<td class="right">'.($close[
'total_qty'] ?
price2num($close[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1620 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalHT").
'</td>';
1621 print
'<td class="nowraponall amountcard right">'.($all[
'total_ht'] ?
price($all[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1622 print
'<td class="nowraponall amountcard right">'.($draft[
'total_ht'] ?
price($draft[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1623 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_ht'] ?
price($enabled[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1624 print
'<td class="nowraponall amountcard right">'.($expired[
'total_ht'] ?
price($expired[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1625 print
'<td class="nowraponall amountcard right">'.($close[
'total_ht'] ?
price($close[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1628 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalVAT").
'</td>';
1629 print
'<td class="nowraponall amountcard right nowrap">'.($all[
'total_tva'] ?
price($all[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1630 print
'<td class="nowraponall amountcard right">'.($draft[
'total_tva'] ?
price($draft[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1631 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_tva'] ?
price($enabled[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1632 print
'<td class="nowraponall amountcard right">'.($expired[
'total_tva'] ?
price($expired[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1633 print
'<td class="nowraponall amountcard right">'.($close[
'total_tva'] ?
price($close[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1636 if (
$mysoc->localtax1_assuj ==
"1" || $all[
'total_localtax1'] != 0) {
1637 print
'<tr><td class="titlefield">' . $langs->trans(
"TotalLT1") .
'</td>';
1638 print
'<td class="nowraponall amountcard right nowrap">' . ($all[
'total_localtax1'] ?
price($all[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1639 print
'<td class="nowraponall amountcard right">' . ($draft[
'total_localtax1'] ?
price($draft[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1640 print
'<td class="nowraponall amountcard right">' . ($enabled[
'total_localtax1'] ?
price($enabled[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1641 print
'<td class="nowraponall amountcard right">' . ($expired[
'total_localtax1'] ?
price($expired[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1642 print
'<td class="nowraponall amountcard right">' . ($close[
'total_localtax1'] ?
price($close[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1646 if (
$mysoc->localtax2_assuj ==
"1" || $all[
'total_localtax2'] != 0) {
1647 print
'<tr><td class="titlefield">' . $langs->trans(
"TotalLT2") .
'</td>';
1648 print
'<td class="nowraponall amountcard right nowrap">' . ($all[
'total_localtax2'] ?
price($all[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1649 print
'<td class="nowraponall amountcard right">' . ($draft[
'total_localtax2'] ?
price($draft[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1650 print
'<td class="nowraponall amountcard right">' . ($enabled[
'total_localtax2'] ?
price($enabled[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1651 print
'<td class="nowraponall amountcard right">' . ($expired[
'total_localtax2'] ?
price($expired[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1652 print
'<td class="nowraponall amountcard right">' . ($close[
'total_localtax2'] ?
price($close[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1656 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalTTC").
'</td>';
1657 print
'<td class="nowraponall amountcard right nowrap">'.($all[
'total_ttc'] ?
price($all[
'total_ttc']):
'<span class="opacitymedium">0</span>').
'</td>';
1658 print
'<td class="nowraponall amountcard right">'.($draft[
'total_ttc'] ?
price($draft[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1659 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_ttc'] ?
price($enabled[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1660 print
'<td class="nowraponall amountcard right">'.($expired[
'total_ttc'] ?
price($expired[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1661 print
'<td class="nowraponall amountcard right">'.($close[
'total_ttc'] ?
price($close[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1670 print
'<div class="clearboth"></div><br>';
1672 if (
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'contrat',
'creer')) {
1679 $blocname =
'contacts';
1680 $title = $langs->trans(
'ContactsAddresses');
1681 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1685 $blocname =
'notes';
1686 $title = $langs->trans(
'Notes');
1687 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1691 $arrayothercontracts =
$object->getListOfContracts(
'others');
1699 global $inputalsopricewithtax;
1700 $inputalsopricewithtax = 1;
1705 if (
isModEnabled(
'margin') && !empty(
$object->element) && in_array(
$object->element, array(
'facture',
'propal',
'commande'))) {
1709 $parameters = array(
'nbOfLines' => &$nbofservices);
1710 $reshook = $hookmanager->executeHooks(
'printObjectLinesBlock', $parameters, $object, $action);
1711 if (empty($reshook)) {
1715 print
'<div id="contrat-lines-container" id="contractlines" data-contractid="'.$object->id.
'" data-element="'.
$object->element.
'" >';
1716 while ($cursorline <= $nbofservices) {
1717 print
'<div id="contrat-line-container'.$object->lines[$cursorline - 1]->id.
'" data-contratlineid = "'.
$object->lines[$cursorline - 1]->id.
'" data-element="'.
$object->lines[$cursorline - 1]->element.
'" >';
1718 print
'<form name="update" id="addproduct" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="post">';
1719 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1720 print
'<input type="hidden" name="action" value="updateline">';
1721 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1722 print
'<input type="hidden" name="elrowid" value="'.$object->lines[$cursorline - 1]->id.
'">';
1723 print
'<input type="hidden" name="fournprice" value="'.(!empty(
$object->lines[$cursorline - 1]->fk_fournprice) ?
$object->lines[$cursorline - 1]->fk_fournprice : 0).
'">';
1726 print
'<div class="div-table-responsive-no-min">';
1727 print
'<table class="notopnoleftnoright allwidth tableforservicepart1 centpercent">';
1729 $sql =
"SELECT cd.rowid, cd.statut, cd.label as label_det, cd.fk_product, cd.product_type, cd.description, cd.qty,";
1730 $sql .=
" cd.tva_tx, cd.vat_src_code, cd.remise_percent, cd.info_bits, cd.subprice, cd.multicurrency_subprice,";
1731 $sql .=
" cd.date_ouverture_prevue as date_start, cd.date_ouverture as date_start_real,";
1732 $sql .=
" cd.date_fin_validite as date_end, cd.date_cloture as date_end_real,";
1733 $sql .=
" cd.commentaire as comment, cd.fk_product_fournisseur_price as fk_fournprice, cd.buy_price_ht as pa_ht,";
1734 $sql .=
" cd.fk_unit,";
1735 $sql .=
" p.rowid as pid, p.ref as pref, p.label as plabel, p.fk_product_type as ptype, p.entity as pentity, p.tosell, p.tobuy, p.tobatch";
1736 $sql .=
" ,cd.rang";
1737 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contratdet as cd";
1738 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON cd.fk_product = p.rowid";
1739 $sql .=
" WHERE cd.rowid = ".((int)
$object->lines[$cursorline - 1]->id);
1741 $result =
$db->query($sql);
1746 $objp =
$db->fetch_object($result);
1749 print
'<tr class="liste_titre'.($cursorline ?
' liste_titre_add' :
'').
'">';
1750 print
'<td>'.$langs->trans(
"ServiceNb", $cursorline).
'</td>';
1751 print
'<td width="80" class="center">'.$langs->trans(
"VAT").
'</td>';
1752 print
'<td width="80" class="right">'.$langs->trans(
"PriceUHT").
'</td>';
1756 print
'<td width="30" class="center">'.$langs->trans(
"Qty").
'</td>';
1758 print
'<td width="30" class="left">'.$langs->trans(
"Unit").
'</td>';
1760 print
'<td width="50" class="right">'.$langs->trans(
"ReductionShort").
'</td>';
1762 print
'<td width="50" class="right">'.$langs->trans(
"BuyingPrice").
'</td>';
1766 if ($nbofservices > 1 &&
$conf->browser->layout !=
'phone' && $user->hasRight(
'contrat',
'creer')) {
1767 print
'<td width="30" class="linecolmove tdlineupdown center">';
1768 if ($cursorline > 1) {
1769 print
'<a class="lineupdown reposition paddingrightonly paddingleftonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=up&token='.
newToken().
'&rowid='.$objp->rowid.
'">';
1770 echo
img_up(
'default', 0,
'imgupforline');
1773 if ($cursorline < $nbofservices) {
1774 print
'<a class="lineupdown reposition paddingrightonly paddingleftonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=down&token='.
newToken().
'&rowid='.$objp->rowid.
'">';
1775 echo
img_down(
'default', 0,
'imgdownforline');
1780 print
'<td width="30"> </td>';
1788 if ($action !=
'editline' || $idline != $objp->rowid) {
1790 if (
getDolGlobalString(
'CONTRACT_HIDE_CLOSED_SERVICES_BY_DEFAULT') && $objp->statut == ContratLigne::STATUS_CLOSED && $action !=
'showclosedlines') {
1791 $moreparam =
'style="display: none;"';
1795 $line->id = $objp->rowid;
1799 print
'<tr class="tdtop oddeven" '.$moreparam.
'>';
1802 print
'<td class="linecoldescription minwidth300imp">';
1804 print
'<div id="line_'.$line->rowid.
'"></div>';
1805 if ($objp->fk_product > 0) {
1806 $productstatic->id = $objp->fk_product;
1807 $productstatic->type = $objp->ptype;
1808 $productstatic->ref = $objp->pref;
1809 $productstatic->entity = $objp->pentity;
1810 $productstatic->label = $objp->plabel;
1811 $productstatic->status = $objp->tosell;
1812 $productstatic->status_buy = $objp->tobuy;
1813 $productstatic->status_batch = $objp->tobatch;
1815 $text = $productstatic->getNomUrl(1,
'', 32);
1816 if ($objp->plabel) {
1818 $text .= $objp->plabel;
1820 $description = $objp->description;
1823 print (!empty($line->fk_parent_line) ?
img_picto(
'',
'rightarrow.png') :
'') . $text;
1825 print $form->textwithpicto(
'', $description);
1828 print $form->textwithtooltip($text, $description, 3, 0,
'',
'', 0, (!empty($line->fk_parent_line) ?
img_picto(
'',
'rightarrow.png') :
''));
1832 if ($line->fk_product > 0 &&
getDolGlobalInt(
'PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) {
1833 print (!empty($line->description) && $line->description != $line->plabel) ? (($line->date_start || $line->date_end) ?
'' :
'<br>').
'<br>'.
dol_htmlentitiesbr($line->
description) :
'';
1841 print
'<td class="center">';
1842 print
vatrate($objp->tva_tx.($objp->vat_src_code ? (
' ('.$objp->vat_src_code.
')') :
''), true, $objp->info_bits);
1845 print
'<td class="right">'.($objp->subprice !=
'' ?
price($objp->subprice) :
'').
"</td>\n";
1851 print
'<td class="center">'.$objp->qty.
'</td>';
1854 print
'<td class="left">'.$object->lines[$cursorline - 1]->getLabelOfUnit(
'long', $langs).
'</td>';
1857 if ($objp->remise_percent > 0) {
1858 print
'<td class="right">'.$objp->remise_percent.
"%</td>\n";
1860 print
'<td> </td>';
1865 print
'<td class="right nowraponall">'.price($objp->pa_ht).
'</td>';
1869 print
'<td class="nowraponall right">';
1870 if ($user->hasRight(
'contrat',
'creer') && is_array($arrayothercontracts) && count($arrayothercontracts) && (
$object->status >= 0)) {
1871 print
'<!-- link to move service line into another contract -->';
1872 print
'<a class="reposition marginrightonly" style="padding-left: 5px;" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=move&token='.
newToken().
'&elrowid='.$objp->rowid.
'">';
1873 print
img_picto($langs->trans(
"MoveToAnotherContract"),
'uparrow');
1876 if ($user->hasRight(
'contrat',
'creer') && (
$object->statut >= 0)) {
1877 print
'<a class="reposition marginrightonly editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=editline&token='.
newToken().
'&elrowid='.$objp->rowid.
'">';
1881 if ($user->hasRight(
'contrat',
'creer') && (
$object->statut >= 0)) {
1882 print
'<a class="reposition marginrightonly" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=deleteline&token='.
newToken().
'&elrowid='.$objp->rowid.
'">';
1899 if ($objp->subprice >= 0) {
1900 print
'<tr class="oddeven" '.$moreparam.
'>';
1901 print
'<td colspan="'.$colspan.
'">';
1904 print $langs->trans(
"DateStartPlanned").
': ';
1905 if ($objp->date_start) {
1908 if ($objp->statut == 0 &&
$db->jdate($objp->date_start) < ($now -
$conf->contrat->services->inactifs->warning_delay)) {
1909 $warning_delay =
$conf->contrat->services->inactifs->warning_delay / 3600 / 24;
1910 $textlate = $langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($warning_delay) >= 0 ?
'+' :
'').ceil($warning_delay).
' '.$langs->trans(
"days");
1911 print
" ".img_warning($textlate);
1914 print $langs->trans(
"Unknown");
1916 print
' - ';
1917 print $langs->trans(
"DateEndPlanned").
': ';
1918 if ($objp->date_end) {
1920 if ($objp->statut == 4 &&
$db->jdate($objp->date_end) < ($now -
$conf->contrat->services->expires->warning_delay)) {
1921 $warning_delay =
$conf->contrat->services->expires->warning_delay / 3600 / 24;
1922 $textlate = $langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($warning_delay) >= 0 ?
'+' :
'').ceil($warning_delay).
' '.$langs->trans(
"days");
1923 print
" ".img_warning($textlate);
1926 print $langs->trans(
"Unknown");
1934 if (is_array($extralabelslines) && count($extralabelslines) > 0) {
1936 $line->id = $objp->rowid;
1937 $line->fetch_optionals();
1938 print $line->showOptionals($extrafields,
'view', array(
'class' =>
'oddeven',
'style' => $moreparam,
'colspan' => $colspan,
'tdclass' =>
'notitlefieldcreate'),
'',
'',
'1');
1943 print
'<tr class="oddeven">';
1945 $currentLineProductId = GETPOSTISSET(
'idprod') ?
GETPOST(
'idprod') : (!empty(
$object->lines[$cursorline - 1]->fk_product) ?
$object->lines[$cursorline - 1]->fk_product : 0);
1946 if ($objp->fk_product > 0) {
1947 $canchangeproduct = 1;
1950 if (empty($canchangeproduct)) {
1951 $productstatic->id = $objp->fk_product;
1952 $productstatic->type = $objp->ptype;
1953 $productstatic->ref = $objp->pref;
1954 $productstatic->entity = $objp->pentity;
1955 print $productstatic->getNomUrl(1,
'', 32);
1956 print $objp->label ?
' - '.dol_trunc($objp->label, 32) :
'';
1957 print
'<input type="hidden" name="idprod" value="'.$currentLineProductId.
'">';
1959 $senderissupplier = 0;
1960 if (empty($senderissupplier)) {
1966 print $form->select_produits($currentLineProductId,
'idprod', $filtertype, 0, 0, 1, 2,
'', 0, array(), 0, 1, 0,
'minwidth250onall maxwidth500 widthcentpercentminusx');
1968 $form->select_produits_fournisseurs($currentLineProductId,
'idprod');
1973 print $objp->label ? $objp->label.
'<br>' :
'';
1974 print
'<input type="hidden" name="idprod" value="'.$currentLineProductId.
'">';
1978 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1983 $doleditor =
new DolEditor(
'product_desc', (GETPOSTISSET(
'product_desc') ?
GETPOST(
'product_desc') : $objp->
description),
'', 92,
'dolibarr_details',
'', false, true,
getDolGlobalInt(
'FCKEDITOR_ENABLE_DETAILS'), $nbrows,
'90%');
1984 $doleditor->Create();
1989 print
'<td class="right">';
1990 print $form->load_tva(
"eltva_tx", $objp->tva_tx.($objp->vat_src_code ? (
' ('.$objp->vat_src_code.
')') :
''),
$mysoc,
$object->thirdparty, $currentLineProductId, $objp->info_bits, $objp->product_type, false, 1);
1994 print
'<td class="right"><input class="width50" type="text" name="elprice" value="'.(GETPOSTISSET(
'elprice') ?
GETPOST(
'elprice') :
price($objp->subprice)).
'"></td>';
2002 print
'<td class="center"><input size="2" type="text" name="elqty" value="'.(GETPOSTISSET(
'elqty') ?
GETPOST(
'elqty') : $objp->qty).
'"></td>';
2006 print
'<td class="left">';
2007 print $form->selectUnits((GETPOSTISSET(
'unit') ?
GETPOSTINT(
'unit') : $objp->fk_unit),
"unit");
2012 print
'<td class="nowraponall right"><input size="1" type="text" name="elremise_percent" value="'.(GETPOSTISSET(
'elremise_percent') ?
GETPOST(
'elremise_percent') : $objp->remise_percent).
'">%</td>';
2014 if (!empty($usemargins)) {
2015 print
'<td class="right">';
2016 if ($objp->fk_product) {
2017 print
'<select id="fournprice" name="fournprice"></select>';
2019 print
'<input id="buying_price" type="text" class="width50" name="buying_price" value="'.price((GETPOSTISSET(
'buying_price') ?
GETPOST(
'buying_price') : $objp->pa_ht), 0,
'', 0).
'"></td>';
2021 print
'<td class="center">';
2022 print
'<input type="submit" class="button margintoponly marginbottomonly" name="save" value="'.$langs->trans(
"Modify").
'">';
2023 print
'<br><input type="submit" class="button margintoponly marginbottomonly button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2036 print
'<tr class="oddeven">';
2037 print
'<td colspan="'.$colspan.
'">';
2038 print $langs->trans(
"DateStartPlanned").
' ';
2039 print $form->selectDate(
$db->jdate($objp->date_start),
"date_start_update", $usehm, $usehm, (
$db->jdate($objp->date_start) > 0 ? 0 : 1),
"update");
2040 print
' '.$langs->trans(
"DateEndPlanned").
' ';
2041 print $form->selectDate(
$db->jdate($objp->date_end),
"date_end_update", $usehm, $usehm, (
$db->jdate($objp->date_end) > 0 ? 0 : 1),
"update");
2045 if (is_array($extralabelslines) && count($extralabelslines) > 0) {
2047 $line->id = $objp->rowid;
2048 $line->fetch_optionals();
2050 print $line->showOptionals($extrafields,
'edit', array(
'style' =>
'class="oddeven"',
'colspan' => $colspan,
'tdclass' =>
'notitlefieldcreate'),
'',
'',
'1');
2061 if (
getDolGlobalString(
'CONTRACT_HIDE_CLOSED_SERVICES_BY_DEFAULT') &&
$object->lines[$cursorline - 1]->statut == ContratLigne::STATUS_CLOSED && $action !=
'showclosedlines') {
2062 $moreparam =
'style="display: none;"';
2073 print
'<tr class="oddeven" '.$moreparam.
'>';
2074 print
'<td class="tdhrthin" colspan="'.$colspan.
'"><hr class="opacitymedium tdhrthin"></td>';
2087 if ($action ==
'deleteline' && !$cancel && $user->hasRight(
'contrat',
'creer') &&
$object->lines[$cursorline - 1]->id == $idline) {
2088 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".((
int)
$object->id).
"&lineid=".((
int) $idline), $langs->trans(
"DeleteContractLine"), $langs->trans(
"ConfirmDeleteContractLine"),
"confirm_deleteline",
'', 0, 1);
2089 if ($ret ==
'html') {
2090 print
'<table class="notopnoleftnoright centpercent"><tr class="oddeven" height="6"><td></td></tr></table>';
2097 if ($action ==
'move' && !$cancel && $user->hasRight(
'contrat',
'creer') &&
$object->lines[$cursorline - 1]->id == $idline) {
2098 $arraycontractid = array();
2099 foreach ($arrayothercontracts as $contractcursor) {
2100 $arraycontractid[$contractcursor->id] = $contractcursor->ref;
2104 $formquestion = array(
2105 'text' => $langs->trans(
"ConfirmMoveToAnotherContractQuestion"),
2106 0 => array(
'type' =>
'select',
'name' =>
'newcid',
'values' => $arraycontractid));
2108 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".((
int)
$object->id).
"&lineid=".((
int) $idline), $langs->trans(
"MoveToAnotherContract"), $langs->trans(
"ConfirmMoveToAnotherContract"),
"confirm_move", $formquestion,
'yes');
2109 print
'<table class="notopnoleftnoright centpercent"><tr class="oddeven" height="6"><td></td></tr></table>';
2114 print
'<table class="notopnoleftnoright tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2116 print
'<tr class="oddeven" '.$moreparam.
'>';
2117 print
'<td><span class="valignmiddle hideonsmartphone">'.$langs->trans(
"ServiceStatus").
':</span> '.
$object->lines[$cursorline - 1]->getLibStatut(4).
'</td>';
2118 print
'<td width="30" class="right">';
2119 if ($user->socid == 0) {
2120 if (
$object->status > 0 && $action !=
'activateline' && $action !=
'unactivateline' && is_object($objp)) {
2121 $tmpaction =
'activateline';
2122 $tmpactionpicto =
'play';
2123 $tmpactiontext = $langs->trans(
"Activate");
2124 if ($objp->statut == 4) {
2125 $tmpaction =
'unactivateline';
2126 $tmpactionpicto =
'playstop.png';
2127 $tmpactiontext = $langs->trans(
"Disable");
2129 if (($tmpaction ==
'activateline' && $user->hasRight(
'contrat',
'activer')) || ($tmpaction ==
'unactivateline' && $user->hasRight(
'contrat',
'desactiver'))) {
2130 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&ligne='.
$object->lines[$cursorline - 1]->id.
'&action='.$tmpaction.
'&token='.
newToken().
'">';
2131 print
img_picto($tmpactiontext, $tmpactionpicto);
2139 print
'<tr class="oddeven" '.$moreparam.
'>';
2143 if (!$objp->date_start_real) {
2144 print $langs->trans(
"DateStartReal").
': ';
2145 if ($objp->date_start_real) {
2148 print $langs->trans(
"ContractStatusNotRunning");
2152 if ($objp->date_start_real && !$objp->date_end_real) {
2153 print $langs->trans(
"DateStartReal").
': ';
2157 if ($objp->date_start_real && $objp->date_end_real) {
2158 print $langs->trans(
"DateStartReal").
': ';
2160 print
' - ';
2161 print $langs->trans(
"DateEndReal").
': ';
2164 if (!empty($objp->comment)) {
2165 print
" - ".$objp->comment;
2169 print
'<td class="center"> </td>';
2176 if ($permissiontoactivate && $action ==
'activateline' &&
$object->lines[$cursorline - 1]->id ==
GETPOSTINT(
'ligne') && is_object($objp)) {
2177 print
'<form name="active" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
2178 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2179 print
'<input type="hidden" name="action" value="confirm_active">';
2180 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2181 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
2182 print
'<input type="hidden" name="ligne" value="'.GETPOSTINT(
'ligne').
'">';
2183 print
'<input type="hidden" name="confirm" value="yes">';
2185 print
'<table class="noborder tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2188 $dateactstart = $objp->date_start;
2191 } elseif (!$dateactstart) {
2192 $dateactstart = time();
2195 $dateactend = $objp->date_end;
2198 } elseif (!$dateactend) {
2199 if ($objp->fk_product > 0) {
2201 $product->fetch($objp->fk_product);
2202 if (!empty($product->duration_value) && !empty($product->duration_unit)) {
2203 $dateactend =
dol_time_plus_duree(time(), $product->duration_value, $product->duration_unit);
2208 print
'<tr class="oddeven">';
2209 print
'<td class="nohover">'.$langs->trans(
"DateServiceActivate").
'</td><td class="nohover">';
2210 print $form->selectDate($dateactstart,
'start', $usehm, $usehm, 0,
"active", 1, 0);
2212 print
'<td class="nohover">'.$langs->trans(
"DateEndPlanned").
'</td><td class="nohover">';
2213 print $form->selectDate($dateactend,
"end", $usehm, $usehm, 0,
"active", 1, 0);
2215 print
'<td class="center nohover">';
2220 print
'<tr class="oddeven">';
2221 print
'<td class="nohover">'.$langs->trans(
"Comment").
'</td><td colspan="3" class="nohover" colspan="'.(
isModEnabled(
'margin') ? 4 : 3).
'"><input type="text" class="minwidth300" name="comment" value="'.
dol_escape_htmltag(
GETPOST(
"comment",
'alphanohtml')).
'"></td>';
2222 print
'<td class="nohover right">';
2223 print
'<input type="submit" class="button" name="activate" value="'.$langs->trans(
"Activate").
'"> ';
2224 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2234 if ($permissiontodisable && $action ==
'unactivateline' &&
$object->lines[$cursorline - 1]->id ==
GETPOSTINT(
'ligne') && is_object($objp)) {
2235 print
'<!-- Form to disabled a line -->'.
"\n";
2236 print
'<form name="confirm_closeline" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&ligne='.
$object->lines[$cursorline - 1]->id.
'" method="post">';
2237 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2238 print
'<input type="hidden" name="confirm" value="yes">';
2239 print
'<input type="hidden" name="action" value="confirm_closeline">';
2240 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2242 print
'<table class="noborder tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2245 $dateactstart = $objp->date_start_real;
2248 } elseif (!$dateactstart) {
2249 $dateactstart = time();
2252 $dateactend = $objp->date_end_real;
2255 } elseif (!$dateactend) {
2256 if ($objp->fk_product > 0) {
2258 $product->fetch($objp->fk_product);
2259 $dateactend =
dol_time_plus_duree(time(), $product->duration_value, $product->duration_unit);
2263 if ($dateactend > $now) {
2267 print
'<tr class="oddeven"><td colspan="2" class="nohover">';
2268 if ($objp->statut >= 4) {
2269 if ($objp->statut == 4) {
2270 print $langs->trans(
"DateEndReal").
' ';
2271 print $form->selectDate($dateactend,
"end", $usehm, $usehm, ($objp->date_end_real > 0 ? 0 : 1),
"closeline", 1, 1);
2275 print
'<td class="center nohover">';
2278 print
'<tr class="oddeven">';
2279 print
'<td class="nohover">'.$langs->trans(
"Comment").
'</td><td class="nohover"><input class="quatrevingtpercent" type="text" class="flat" name="comment" value="'.
dol_escape_htmltag(
GETPOST(
'comment',
'alpha')).
'"></td>';
2280 print
'<td class="nohover right">';
2281 print
'<input type="submit" class="button" name="close" value="'.$langs->trans(
"Disable").
'"> ';
2282 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2297 if ($user->hasRight(
'contrat',
'creer') && (
$object->status == 0)) {
2301 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
2302 <input type="hidden" name="token" value="'.
newToken().
'">
2303 <input type="hidden" name="action" value="'.(($action !=
'editline') ?
'addline' :
'updateline').
'">
2304 <input type="hidden" name="mode" value="">
2305 <input type="hidden" name="id" value="'.
$object->id.
'">
2306 <input type="hidden" name="page_y" value="">
2307 <input type="hidden" name="backtopage" value="'.$backtopage.
'">
2310 print
'<div class="div-table-responsive-no-min">';
2311 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
2314 if ($action !=
'editline') {
2315 $forcetoshowtitlelines = 1;
2316 if (empty(
$object->multicurrency_code)) {
2322 $parameters = array();
2323 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
2327 if (empty($reshook)) {
2340 if (
GETPOST(
'modelselected')) {
2341 $action =
'presend';
2347 if ($user->socid == 0 && $action !=
'presend' && $action !=
'editline') {
2348 print
'<div class="tabsAction">';
2350 $parameters = array();
2351 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2353 if (empty($reshook)) {
2357 'class' =>
'classfortooltip'
2362 if (empty($user->socid)) {
2363 if (
$object->status == $object::STATUS_VALIDATED) {
2364 if ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'contrat',
'creer'))) {
2365 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=presend&token='.
newToken().
'&mode=init#formmailbeforetitle',
'',
true, $params);
2367 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email',
'#',
'',
false, $params);
2372 if (
$object->status == $object::STATUS_DRAFT && $nbofservices) {
2373 if ($user->hasRight(
'contrat',
'creer')) {
2374 unset($params[
'attr'][
'title']);
2375 print
dolGetButtonAction($langs->trans(
'Validate'),
'',
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken(),
'',
true, $params);
2377 $params[
'attr'][
'title'] = $langs->trans(
"NotEnoughPermissions");
2378 print
dolGetButtonAction($langs->trans(
'Validate'),
'',
'default',
'#',
'',
false, $params);
2381 if (
$object->status == $object::STATUS_VALIDATED) {
2382 if ($user->hasRight(
'contrat',
'creer')) {
2383 unset($params[
'attr'][
'title']);
2384 print
dolGetButtonAction($langs->trans(
'Modify'),
'',
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken(),
'',
true, $params);
2386 $params[
'attr'][
'title'] = $langs->trans(
"NotEnoughPermissions");
2387 print
dolGetButtonAction($langs->trans(
'Modify'),
'',
'default',
'#',
'',
false, $params);
2392 $arrayofcreatebutton = array();
2394 $arrayofcreatebutton[] = array(
2395 'url' =>
'/comm/propal/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id.
'&renewal=true',
2396 'label' => $langs->trans(
'AddProp'),
2398 'perm' => $user->hasRight(
'propale',
'creer') ?
true : false,
2404 $arrayofcreatebutton[] = array(
2405 'url' =>
'/commande/card.php?action=create&token='.
newToken().
'&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2406 'label' => $langs->trans(
'AddOrder'),
2408 'perm' => $user->hasRight(
'commande',
'creer') ?
true : false,
2413 $arrayofcreatebutton[] = array(
2414 'url' =>
'/compta/facture/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2415 'label' => $langs->trans(
'CreateBill'),
2417 'perm' => $user->hasRight(
'facture',
'creer') ?
true : false,
2422 $langs->load(
"suppliers");
2423 $arrayofcreatebutton[] = array(
2424 'url' =>
'/fourn/facture/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2425 'label' => $langs->trans(
'AddSupplierInvoice'),
2427 'perm' => $user->hasRight(
'fournisseur',
'facture',
'creer') ?
true : false,
2431 if (count($arrayofcreatebutton)) {
2432 unset($params[
'attr'][
'title']);
2433 print
dolGetButtonAction(
'', $langs->trans(
"Create"),
'default', $arrayofcreatebutton,
'',
true, $params);
2436 $arrayforbutaction = array();
2437 $arrayforbutaction[] = array(
2438 'url' =>
'/contrat/card.php?id='.
$object->id.
'&action=activate&token='.
newToken(),
2439 'label' => $langs->trans(
'ActivateAllContracts'),
2441 'perm' => (
$object->nbofservicesclosed > 0 ||
$object->nbofserviceswait > 0) ? $permissiontoactivate : -1,
2444 $arrayforbutaction[] = array(
2445 'url' =>
'/contrat/card.php?id='.
$object->id.
'&action=close&token='.
newToken(),
2446 'label' => $langs->trans(
'CloseAllContracts'),
2448 'perm' => (
$object->nbofservicesclosed < $nbofservices) ? $permissiontodisable : -1,
2452 if (count($arrayforbutaction)) {
2453 unset($params[
'attr'][
'title']);
2454 print
dolGetButtonAction(
'', $langs->trans(
"Enable").
" / ".$langs->trans(
"Close"),
'default', $arrayforbutaction,
'',
true, $params);
2458 if ($action ==
'showclosedlines') {
2459 print
'<div class="inline-block divButAction"><a class="butAction" id="btnhideclosedlines" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=hideclosedlines">'.$langs->trans(
"HideClosedServices").
'</a></div>';
2461 print
'<div class="inline-block divButAction"><a class="butAction" id="btnshowclosedlines" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=showclosedlines">'.$langs->trans(
"ShowClosedServices").
'</a></div>';
2466 if (
getDolGlobalString(
'CONTRACT_SHOW_SIGNATURE_STATUS_WITH_SERVICE_STATUS') &&
$object->status > Contrat::STATUS_DRAFT) {
2467 if (
$object->signed_status != Contrat::$SIGNED_STATUSES[
'STATUS_SIGNED_ALL']) {
2468 print
'<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=sign&token=' .
newToken() .
'">' . $langs->trans(
"ContractSign") .
'</a></div>';
2470 print
'<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=unsign&token=' .
newToken() .
'">' . $langs->trans(
"ContractUnsign") .
'</a></div>';
2475 if ($user->hasRight(
'contrat',
'creer')) {
2476 unset($params[
'attr'][
'title']);
2481 unset($params[
'attr'][
'title']);
2482 print
dolGetButtonAction($langs->trans(
'Delete'),
'',
'delete', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken(),
'', $permissiontodelete, $params);
2488 if ($action !=
'presend') {
2489 print
'<div class="fichecenter"><div class="fichehalfleft">';
2496 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2497 $genallowed = $user->hasRight(
'contrat',
'lire');
2498 $delallowed = $user->hasRight(
'contrat',
'creer');
2499 $tooltipAfterComboOfModels =
'';
2501 $tooltipAfterComboOfModels = $langs->trans(
"AccordingToYourSetupTheFileWillBeConcatenated",
getDolGlobalString(
'MAIN_INFO_CONTRACT_TERMSOFSALE'));
2504 print $formfile->showdocuments(
'contract', $filename, $filedir, $urlsource, $genallowed, $delallowed, (
$object->model_pdf ?
$object->model_pdf :
getDolGlobalString(
'CONTRACT_ADDON_PDF')), 1, 0, 0, 28, 0,
'',
'0',
'', $soc->default_lang,
'',
$object, 0,
'remove_file', $tooltipAfterComboOfModels);
2508 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'contrat'), 1);
2509 $linktoelem = $tmparray[
'linktoelem'];
2510 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
2511 print $htmltoenteralink;
2513 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
2517 print
'<br><!-- Link to sign -->';
2518 require_once DOL_DOCUMENT_ROOT.
'/core/lib/signature.lib.php';
2520 print showOnlineSignatureUrl(
'contract',
$object->ref, $object).
'<br>';
2523 print
'</div><div class="fichehalfright">';
2527 $morehtmlcenter =
'<div class="nowraponall">';
2528 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/contrat/messaging.php?id='.
$object->id);
2529 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'SeeAll'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/contrat/agenda.php?id='.
$object->id);
2530 $morehtmlcenter .=
'</div>';
2534 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2536 $somethingshown = $formactions->showactions($object,
'contract', $socid, 1,
'listactions', $MAXEVENT,
'', $morehtmlcenter);
2538 print
'</div></div>';
2542 $modelmail =
'contract';
2543 $defaulttopic =
'SendContractRef';
2544 $diroutput =
$conf->contract->multidir_output[
$object->entity ??
$conf->entity];
2545 $trackid =
'con'.$object->id;
2547 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
2559 print
"\n".
'<script type="text/javascript">'.
"\n";
2561 $(document).ready(
function() {
2562 var idprod = $(
"input[name='idprod']").val();
2563 var fournprice = $(
"input[name='fournprice']").val();
2564 var token =
'<?php echo currentToken(); ?>';
2566 $.post(
'<?php echo DOL_URL_ROOT; ?>/fourn/ajax/getSupplierPrices.php', {
2570 if (data.length > 0) {
2573 $(data).each(
function() {
2574 options +=
'<option value="'+this.
id+
'" price="'+this.price+
'"';
2575 if (fournprice > 0) {
2576 if (this.
id == fournprice) {
2577 options +=
' selected';
2578 $(
"#buying_price").val(this.price);
2582 options +=
'>'+this.label+
'</option>';
2584 options +=
'<option value=null'+(trouve?
'':
' selected')+
'><?php echo $langs->trans("InputPrice"); ?></option>';
2585 $(
"#fournprice").html(options);
2587 $(
"#buying_price").hide();
2588 $(
"#fournprice").show();
2591 $(
"#buying_price").show();
2593 $(
"#fournprice").change(
function() {
2594 var selval = $(
this).find(
'option:selected').attr(
"price");
2596 $(
"#buying_price").val(selval).hide();
2598 $(
'#buying_price').show();
2602 $(
"#fournprice").hide();
2603 $(
'#buying_price').show();
2609 $(
"#fournprice").hide();
2610 $(
'#buying_price').show();
2614 print
"\n".
'<script type="text/javascript">'.
"\n";
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage lines of contracts.
Class to manage a WYSIWYG editor.
Class to manage the table of subscription to notifications.
File of class to manage predefined price products or services by customer.
Class to manage products or services.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
Class to manage Dolibarr users.
contract_prepare_head(Contrat $object)
Prepare array with list of tabs.
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
dol_move_dir($srcdir, $destdir, $overwriteifexists=1, $indexdatabase=1, $renamedircontent=1)
Move a directory into another name.
$date_start
Variables from include:
dol_now($mode='gmt')
Return date for now.
recordNotFound($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Displays an error page when a record is not found.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formatted for view output Used into pdf and HTML pages.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
dolBuildUrl($url, $params=[], $addtoken=false, $anchor='')
Return path of url.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_eval($s, $returnvalue=1, $hideerrors=1, $onlysimplestring='1')
Replace eval function to add more security.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $allowothertags=array())
Show a picto called object_picto (generic function)
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0, $allowdash=0)
Clean a string to use it as a file name.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
img_down($titlealt='default', $selected=0, $moreclass='')
Show down arrow logo.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
GETPOSTISARRAY($paramname, $method=0)
Return true if the parameter $paramname is submit from a POST OR GET as an array.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_clone($srcobject, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
img_up($titlealt='default', $selected=0, $moreclass='')
Show top arrow logo.
get_localtax($vatrate, $local, $thirdparty_buyer=null, $thirdparty_seller=null, $vatnpr=0)
Return localtax rate for a particular VAT rate, when selling a product with vat $vatrate,...
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
print $langs trans("Show") . '< td style="' . $timeColor . '" align="center"> s</td > badge status0 badge status4 badge status3 Error badge status8< td align="center">< span class="badge ' . $badge . '"></span ></td >< td align="center">< a href="#" class="button button-small" onclick="openLogModal(this)" data-req="' . dol_escape_htmltag($reqSafe) . '" data-res="' . dol_escape_htmltag($resSafe) . '" data-err="' . dol_escape_htmltag($errSafe) . '">< span class="fa fa-search-plus"></span ></a ></td ></tr >< tr >< td colspan="' . $colspan . '" class="opacitymedium"></td ></tr ></table ></div ></form > logModal none logModal none s a JSON string
buildzip.php
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.