40require
"../main.inc.php";
51require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
52require_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
53require_once DOL_DOCUMENT_ROOT.
'/core/lib/contract.lib.php';
54require_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
55require_once DOL_DOCUMENT_ROOT.
'/core/modules/contract/modules_contract.php';
56require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
57require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
58require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
59require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
60require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
62 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
65 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
66 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
70$langs->loadLangs(array(
"contracts",
"orders",
"companies",
"bills",
"products",
'compta',
'propal'));
72$action =
GETPOST(
'action',
'aZ09');
73$confirm =
GETPOST(
'confirm',
'alpha');
74$cancel =
GETPOST(
'cancel',
'alpha');
75$backtopage =
GETPOST(
'backtopage',
'alpha');
76$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
81$origin =
GETPOST(
'origin',
'alpha');
84$attribute =
GETPOST(
'attribute',
'aZ09');
100 $socid = $user->socid;
104$hookmanager->initHooks(array(
'contractcard',
'globalcard'));
113if ($id > 0 || !empty($ref) && $action !=
'add') {
114 $ret =
$object->fetch($id, $ref);
116 $ret =
$object->fetch_thirdparty();
124$extrafields->fetch_name_optionals_label(
$object->table_element);
127$extralabelslines = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
129$permissionnote = $user->hasRight(
'contrat',
'creer');
130$permissiondellink = $user->hasRight(
'contrat',
'creer');
131$permissiontodelete = ($user->hasRight(
'contrat',
'creer') &&
$object->status == $object::STATUS_DRAFT) || $user->hasRight(
'contrat',
'supprimer');
132$permissiontoadd = $user->hasRight(
'contrat',
'creer');
133$permissiontoedit = $permissiontoadd;
134$permissiontoactivate = $user->hasRight(
'contrat',
'activer');
135$permissiontodisable = $user->hasRight(
'contrat',
'desactiver');
136$permissiontoeditextra = $permissiontoadd;
137if (
GETPOST(
'attribute',
'aZ09') && isset($extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')])) {
139 $permissiontoeditextra =
dol_eval((
string) $extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')]);
147if (!(
$object->id > 0) && ($action ==
'view' || $action ==
'')) {
156$parameters = array(
'socid' => $socid);
157$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
161if (empty($reshook)) {
162 $backurlforlist =
dolBuildUrl(DOL_URL_ROOT .
'/contrat/list.php');
164 if (empty($backtopage) || ($cancel && empty($id))) {
165 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
166 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
167 $backtopage = $backurlforlist;
169 $backtopage =
dolBuildUrl(DOL_URL_ROOT .
'/contrat/card.php', [
'id'=> ((!empty($id) && $id > 0) ? $id :
'__ID__')]);
175 if (!empty($backtopageforcancel)) {
176 header(
"Location: ".$backtopageforcancel);
178 } elseif (!empty($backtopage)) {
179 header(
"Location: ".$backtopage);
185 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
187 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
189 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
191 if ($action ==
'confirm_active' && $confirm ==
'yes' && $permissiontoactivate) {
204 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
209 } elseif ($action ==
'confirm_sign' && $confirm ==
'yes' && $user->hasRight(
'contract',
'creer')) {
210 $result =
$object->setSignedStatus($user,
GETPOSTINT(
'signed_status'), 0,
'CONTRACT_MODIFY');
212 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id);
217 } elseif ($action ==
'confirm_unsign' && $confirm ==
'yes' && $user->hasRight(
'contract',
'creer')) {
218 $result =
$object->setSignedStatus($user, Contrat::$SIGNED_STATUSES[
'STATUS_NO_SIGNATURE'], 0,
'CONTRACT_MODIFY');
220 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id);
225 } elseif ($action ==
'confirm_closeline' && $confirm ==
'yes' && $permissiontodisable) {
232 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"DateEnd")),
null,
'errors');
237 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
245 if (
GETPOST(
'mode') ==
'predefined') {
257 $date_start_update =
'';
258 $date_end_update =
'';
259 $date_start_real_update =
'';
260 $date_end_real_update =
'';
261 if (
GETPOST(
'date_start_updatemonth') &&
GETPOST(
'date_start_updateday') &&
GETPOST(
'date_start_updateyear')) {
264 if (
GETPOST(
'date_end_updatemonth') &&
GETPOST(
'date_end_updateday') &&
GETPOST(
'date_end_updateyear')) {
267 if (
GETPOST(
'date_start_real_updatemonth') &&
GETPOST(
'date_start_real_updateday') &&
GETPOST(
'date_start_real_updateyear')) {
270 if (
GETPOST(
'date_end_real_updatemonth') &&
GETPOST(
'date_end_real_updateday') &&
GETPOST(
'date_end_real_updateyear')) {
278 if ($action ==
'add' && $user->hasRight(
'contrat',
'creer')) {
280 if (empty($datecontrat)) {
282 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Date")),
null,
'errors');
287 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ThirdParty")),
null,
'errors');
293 $ret = $extrafields->setOptionalsFromPost(
null, $object);
301 $object->date_contrat = $datecontrat;
315 if (!empty($origin) && !empty($originid)) {
317 $element = $subelement = $origin;
319 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
321 $subelement = $regs[2];
326 if ($element ==
'order') {
327 $element = $subelement =
'commande';
329 if ($element ==
'propal') {
330 $element =
'comm/propal';
331 $subelement =
'propal';
333 if ($element ==
'invoice' || $element ==
'facture') {
334 $element =
'compta/facture';
335 $subelement =
'facture';
337 if ($element ==
'facturerec' || $element ==
'facture_rec') {
339 $element =
'compta/facture';
340 $subelement =
'facture-rec';
341 $classname =
'FactureRec';
343 if ($element ==
'facture_fourn_rec' || $element ==
'invoice_supplier_rec') {
345 $subelement =
'fournisseur.facture-rec';
346 $classname =
'FactureFournisseurRec';
350 $object->origin_id = $originid;
355 $object->linked_objects = array_merge(
$object->linked_objects,
GETPOST(
'other_linked_objects',
'array:int'));
362 if (empty($classname)) {
363 $classname = ucfirst($subelement);
365 $srcobject =
new $classname(
$db);
366 '@phan-var-force Commande|Propal|Facture $srcobject';
369 $result = $srcobject->fetch(
$object->origin_id);
371 $srcobject->fetch_thirdparty();
372 $lines = $srcobject->lines;
373 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
374 $srcobject->fetch_lines();
375 $lines = $srcobject->lines;
379 $num = count($lines);
382 for ($i = 0; $i < $num; $i++) {
383 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
385 if ($product_type == 1 || (
getDolGlobalString(
'CONTRACT_SUPPORT_PRODUCTS') && in_array($product_type, array(0, 1)))) {
387 if ($lines[$i]->fk_product > 0) {
391 $prod->id = $lines[$i]->fk_product;
392 $prod->getMultiLangs();
394 $outputlangs = $langs;
396 if (
GETPOST(
'lang_id',
'aZ09')) {
397 $newlang =
GETPOST(
'lang_id',
'aZ09');
399 if (empty($newlang)) {
400 $newlang = $srcobject->thirdparty->default_lang;
402 if (!empty($newlang)) {
404 $outputlangs->setDefaultLang($newlang);
407 $label = (!empty(
$prod->multilangs[$outputlangs->defaultlang][
"libelle"])) ?
$prod->multilangs[$outputlangs->defaultlang][
"libelle"] : $lines[$i]->product_label;
409 $label = $lines[$i]->product_label;
411 $desc = ($lines[$i]->desc && $lines[$i]->desc != $lines[$i]->label) ?
dol_htmlentitiesbr($lines[$i]->desc) :
'';
417 $array_options = array();
419 if (method_exists($lines[$i],
'fetch_optionals')) {
420 $lines[$i]->fetch_optionals();
421 $array_options = $lines[$i]->array_options;
424 $txtva = $lines[$i]->vat_src_code ? $lines[$i]->tva_tx.
' ('.$lines[$i]->vat_src_code.
')' : $lines[$i]->tva_tx;
432 $line_price_base_type = $lines[$i]->getPriceBaseType();
435 $lines[$i]->subprice,
440 $lines[$i]->fk_product,
441 $lines[$i]->remise_percent,
442 $lines[$i]->date_start,
443 $lines[$i]->date_end,
444 $line_price_base_type,
445 (
float) $lines[$i]->subprice_ttc,
446 $lines[$i]->info_bits,
447 $lines[$i]->fk_fournprice,
450 (
int) $lines[$i]->fk_unit,
466 $parameters = array(
'objFrom' => $srcobject);
467 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $object, $action);
481 $result =
$object->create($user);
483 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
491 } elseif ($action ==
'classin' && $user->hasRight(
'contrat',
'creer')) {
493 } elseif ($action ==
'addline' && $user->hasRight(
'contrat',
'creer')) {
497 $line_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
500 $price_ht_devise =
'';
502 $price_ttc_devise =
'';
504 $rang = count(
$object->lines) + 1;
506 if (
GETPOST(
'price_ht') !==
'') {
509 if (
GETPOST(
'multicurrency_price_ht') !==
'') {
512 if (
GETPOST(
'price_ttc') !==
'') {
515 if (
GETPOST(
'multicurrency_price_ttc') !==
'') {
519 if (
GETPOST(
'prod_entry_mode',
'alpha') ==
'free') {
525 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
530 $tva_tx =
GETPOST(
'tva_tx',
'alpha');
533 $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ?
price2num(
GETPOST(
'remise_percent'.$predef),
'', 2) : 0);
534 if (empty($remise_percent)) {
539 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Qty")),
null,
'errors');
542 if (
GETPOST(
'prod_entry_mode',
'alpha') ==
'free' && (empty($idprod) || $idprod < 0) && empty($line_desc)) {
543 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Description")),
null,
'errors');
550 setEventMessages($langs->trans(
"Error").
': '.$langs->trans(
"DateStartPlanned").
' > '.$langs->trans(
"DateEndPlanned"),
null,
'errors');
555 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
556 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
558 if (is_array($extralabelsline)) {
560 foreach ($extralabelsline as $key => $value) {
561 unset($_POST[
"options_".$key]);
570 $price_base_type =
'';
576 $prod->fetch($idprod);
585 $price_min =
$prod->price_min;
586 $price_min_ttc =
$prod->price_min_ttc;
590 $price_min =
$prod->multiprices_min[
$object->thirdparty->price_level];
591 $price_min_ttc =
$prod->multiprices_min_ttc[
$object->thirdparty->price_level];
594 require_once DOL_DOCUMENT_ROOT.
'/product/class/productcustomerprice.class.php';
598 $filter = array(
't.fk_product' => (
string)
$prod->id,
't.fk_soc' => (
string)
$object->thirdparty->id);
600 $result = $prodcustprice->fetchAll(
'',
'', 0, 0, $filter);
602 if (count($prodcustprice->lines) > 0) {
603 $date_now = (int) floor(
dol_now() / 86400) * 86400;
604 foreach ($prodcustprice->lines as $k => $custprice_line) {
605 if ($custprice_line->date_begin <= $date_now && (empty($custprice_line->date_end) || $date_now <= $custprice_line->date_end)) {
606 $price_min =
price($custprice_line->price_min);
607 $price_min_ttc =
price($custprice_line->price_min_ttc);
623 $tmpvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', $tva_tx));
624 $tmpprodvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', (
string)
$prod->tva_tx));
627 if (!empty($price_ht) || $price_ht ===
'0') {
629 $pu_ttc =
price2num((
float) $pu_ht * (1 + ((
float) $tmpvat / 100)),
'MU');
630 $price_base_type =
'HT';
631 } elseif (!empty($price_ttc) || $price_ttc ===
'0') {
633 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tmpvat / 100)),
'MU');
634 $price_base_type =
'TTC';
637 $desc =
$prod->description;
647 $fk_unit =
$prod->fk_unit;
651 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
652 if (empty($tva_tx)) {
655 $tva_tx = str_replace(
'*',
'', $tva_tx);
658 $pu_ht_devise =
price2num($price_ht_devise,
'MU');
659 $pu_ttc_devise =
price2num($price_ttc_devise,
'MU');
661 $tmpvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', $tva_tx));
664 if (!empty($price_ht) || $price_ht ===
'0') {
666 $pu_ttc =
price2num((
float) $pu_ht * (1 + ((
float) $tmpvat / 100)),
'MU');
667 $price_base_type =
'HT';
668 } elseif (!empty($price_ttc) || $price_ttc ===
'0') {
670 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tmpvat / 100)),
'MU');
671 $price_base_type =
'TTC';
679 $fk_fournprice =
GETPOST(
'fournprice');
681 $pa_ht =
GETPOST(
'buying_price');
691 if (((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !$user->hasRight(
'produit',
'ignore_price_min_advance'))
693 $object->error = $langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
711 (
int) $fk_fournprice,
722 $outputlangs = $langs;
725 $newlang =
GETPOST(
'lang_id',
'aZ09');
728 $newlang =
$object->thirdparty->default_lang;
730 if (!empty($newlang)) {
732 $outputlangs->setDefaultLang($newlang);
737 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
740 unset($_POST[
'prod_entry_mode']);
742 unset($_POST[
'qty']);
743 unset($_POST[
'type']);
744 unset($_POST[
'remise_percent']);
745 unset($_POST[
'price_ht']);
746 unset($_POST[
'multicurrency_price_ht']);
747 unset($_POST[
'price_ttc']);
748 unset($_POST[
'tva_tx']);
749 unset($_POST[
'product_ref']);
750 unset($_POST[
'product_label']);
751 unset($_POST[
'product_desc']);
752 unset($_POST[
'fournprice']);
753 unset($_POST[
'buying_price']);
754 unset($_POST[
'np_marginRate']);
755 unset($_POST[
'np_markRate']);
756 unset($_POST[
'dp_desc']);
757 unset($_POST[
'idprod']);
759 unset($_POST[
'date_starthour']);
760 unset($_POST[
'date_startmin']);
761 unset($_POST[
'date_startsec']);
762 unset($_POST[
'date_startday']);
763 unset($_POST[
'date_startmonth']);
764 unset($_POST[
'date_startyear']);
765 unset($_POST[
'date_endhour']);
766 unset($_POST[
'date_endmin']);
767 unset($_POST[
'date_endsec']);
768 unset($_POST[
'date_endday']);
769 unset($_POST[
'date_endmonth']);
770 unset($_POST[
'date_endyear']);
775 } elseif ($action ==
'updateline' && $user->hasRight(
'contrat',
'creer') && !
GETPOST(
'cancel',
'alpha')) {
779 if (!empty($date_start_update) && !empty($date_end_update) && $date_start_update > $date_end_update) {
780 setEventMessages($langs->trans(
"Error").
': '.$langs->trans(
"DateStartPlanned").
' > '.$langs->trans(
"DateEndPlanned"),
null,
'errors');
781 $action =
'editline';
787 if ($objectline->fetch($idline) < 0) {
791 $objectline->fetch_optionals();
793 $objectline->oldcopy =
dol_clone($objectline, 2);
801 if ($date_start_real_update ==
'') {
802 $date_start_real_update = $objectline->date_start_real;
804 if ($date_end_real_update ==
'') {
805 $date_end_real_update = $objectline->date_end_real;
808 $vat_rate =
GETPOST(
'eltva_tx',
'alpha');
811 if (preg_match(
'/\*/', $vat_rate)) {
816 $vat_rate = str_replace(
'*',
'', $vat_rate);
825 if (preg_match(
'/\((.*)\)/', $txtva, $reg)) {
826 $vat_src_code = $reg[1];
827 $txtva = preg_replace(
'/\s*\(.*\)/',
'', $txtva);
843 $objectline->fk_product =
GETPOSTINT(
'idprod');
844 $objectline->description =
GETPOST(
'product_desc',
'restricthtml');
848 if (isset($objectline->oldcopy) && (float) $objectline->subprice != (
float) $objectline->oldcopy->subprice) {
849 $objectline->subprice_ttc = 0;
852 $objectline->remise_percent = $remise_percent;
853 $objectline->tva_tx = ($txtva ? $txtva : 0);
854 $objectline->vat_src_code = $vat_src_code;
855 $objectline->localtax1_tx = is_numeric($localtax1_tx) ? $localtax1_tx : 0;
856 $objectline->localtax2_tx = is_numeric($localtax2_tx) ? $localtax2_tx : 0;
857 $objectline->date_start = $date_start_update;
858 $objectline->date_start_real = $date_start_real_update;
859 $objectline->date_end = $date_end_update;
860 $objectline->date_end_real = $date_end_real_update;
861 $objectline->user_closing_id = $user->id;
863 $objectline->pa_ht = $pa_ht;
869 $objectline->fk_unit =
null;
873 $extralabelsline = $extrafields->fetch_name_optionals_label($objectline->table_element);
874 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
876 if (is_array($array_options) && count($array_options) > 0) {
878 foreach ($array_options as $key => $value) {
879 $objectline->array_options[$key] = $array_options[$key];
885 $result = $objectline->update($user);
888 $action =
'editline';
889 $_GET[
'rowid'] =
GETPOST(
'elrowid');
899 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $user->hasRight(
'contrat',
'creer')) {
903 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
908 } elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $user->hasRight(
'contrat',
'creer')) {
909 $result =
$object->validate($user);
914 $outputlangs = $langs;
917 $newlang =
GETPOST(
'lang_id',
'aZ09');
920 $newlang =
$object->thirdparty->default_lang;
922 if (!empty($newlang)) {
924 $outputlangs->setDefaultLang($newlang);
929 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
934 } elseif ($action ==
'reopen' && $user->hasRight(
'contrat',
'creer')) {
935 $result =
$object->reopen($user);
939 } elseif ($action ==
'confirm_close' && $confirm ==
'yes' && $permissiontodisable) {
941 $result =
$object->closeAll($user);
945 } elseif ($action ==
'confirm_activate' && $confirm ==
'yes' && $permissiontoactivate) {
948 $comment =
GETPOST(
'comment',
'alpha');
953 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $permissiontodelete) {
954 $result =
$object->delete($user);
956 header(
"Location: list.php?restore_lastsearch_values=1");
961 } elseif ($action ==
'confirm_move' && $confirm ==
'yes' && $permissiontoedit) {
964 $result = $contractline->fetch(
GETPOSTINT(
'lineid'));
965 $contractline->fk_contrat =
GETPOSTINT(
'newcid');
966 $result = $contractline->update($user, 1);
968 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
974 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"RefNewContract")),
null,
'errors');
976 } elseif ($action ==
'update_extras' && $permissiontoeditextra) {
979 $attribute =
GETPOST(
'attribute',
'aZ09');
982 $ret = $extrafields->setOptionalsFromPost(
null, $object, $attribute);
989 $result =
$object->updateExtraField($attribute,
'CONTRACT_MODIFY');
997 $action =
'edit_extras';
999 } elseif ($action ==
'setref_supplier' && $permissiontoadd) {
1003 $result =
$object->setValueFrom(
'ref_supplier',
GETPOST(
'ref_supplier',
'alpha'),
'',
null,
'text',
'', $user,
'CONTRACT_MODIFY');
1006 $action =
'editref_supplier';
1008 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1012 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1015 } elseif ($action ==
'setref_customer' && $permissiontoadd) {
1019 $result =
$object->setValueFrom(
'ref_customer',
GETPOST(
'ref_customer',
'alpha'),
'',
null,
'text',
'', $user,
'CONTRACT_MODIFY');
1022 $action =
'editref_customer';
1024 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1028 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1031 } elseif ($action ==
'setref' && $permissiontoadd) {
1033 $result =
$object->fetch($id);
1040 $result =
$object->setValueFrom(
'ref',
GETPOST(
'ref',
'alpha'),
'',
null,
'text',
'', $user,
'CONTRACT_MODIFY');
1043 $action =
'editref';
1045 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
1052 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1056 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1059 } elseif ($action ==
'setdate_contrat' && $permissiontoadd) {
1061 $result =
$object->fetch($id);
1066 $result =
$object->setValueFrom(
'date_contrat', $datacontrat,
'',
null,
'date',
'', $user,
'CONTRACT_MODIFY');
1069 $action =
'editdate_contrat';
1071 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1075 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1081 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1085 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1088 $triggersendname =
'CONTRACT_SENTBYMAIL';
1090 $mode =
'emailfromcontract';
1091 $trackid =
'con'.$object->id;
1092 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1096 if ($action ==
'addcontact' && $user->hasRight(
'contrat',
'creer')) {
1099 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1102 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1105 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1106 $langs->load(
"errors");
1107 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1112 } elseif ($action ==
'swapstatut' && $user->hasRight(
'contrat',
'creer')) {
1115 } elseif ($action ==
'deletecontact' && $user->hasRight(
'contrat',
'creer')) {
1120 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1129 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $user->hasRight(
'contrat',
'creer')) {
1131 setEventMessages($langs->trans(
"NoCloneOptionsSpecified"),
null,
'errors');
1134 $result =
$object->createFromClone($user, $socid);
1136 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
1139 if (count(
$object->errors) > 0) {
1154$title =
$object->ref.
" - ".$langs->trans(
'Contract');
1155if ($action ==
'create') {
1156 $title = $langs->trans(
"NewContract");
1158$help_url =
'EN:Module_Contracts|FR:Module_Contrat|ES:Contratos_de_servicio';
1160llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-contrat page-card');
1171if (substr($module, 0, 13) ==
'mod_contract_' && substr($module, -3) ==
'php') {
1172 $module = substr($module, 0,
dol_strlen($module) - 4);
1175$modCodeContract =
null;
1177 $modCodeContract =
new $module();
1179 '@phan-var-force ModelNumRefContracts $modCodeContract';
1183if ($action ==
'create') {
1189 $soc->fetch($socid);
1195 $element = $subelement =
GETPOST(
'origin');
1196 if (preg_match(
'/^([^_]+)_([^_]+)/i',
GETPOST(
'origin'), $regs)) {
1197 $element = $regs[1];
1198 $subelement = $regs[2];
1201 if ($element ==
'project') {
1205 if ($element ==
'order' || $element ==
'commande') {
1206 $element = $subelement =
'commande';
1208 if ($element ==
'propal') {
1209 $element =
'comm/propal';
1210 $subelement =
'propal';
1212 if ($element ==
'invoice' || $element ==
'facture') {
1213 $element =
'compta/facture';
1214 $subelement =
'facture';
1217 if ($element ==
'facturerec' || $element ==
'facture_rec') {
1218 $element =
'compta/facture';
1219 $subelement =
'facture-rec';
1220 $classname =
'FactureRec';
1222 if ($element ==
'facture_fourn_rec' || $element ==
'invoice_supplier_rec') {
1224 $subelement =
'fournisseur.facture-rec';
1225 $classname =
'FactureFournisseurRec';
1230 if (empty($classname)) {
1231 $classname = ucfirst($subelement);
1233 $objectsrc =
new $classname(
$db);
1234 '@phan-var-force Commande|Propal|Facture $objectsrc';
1235 $objectsrc->fetch($originid);
1236 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1237 $objectsrc->fetch_lines();
1239 $objectsrc->fetch_thirdparty();
1242 $objectsrc->fetch_optionals();
1243 $object->array_options = $objectsrc->array_options;
1245 $projectid = (int) $objectsrc->fk_project;
1247 $soc = $objectsrc->thirdparty;
1249 $note_private = (!empty($objectsrc->note_private) ? $objectsrc->note_private :
'');
1250 $note_public = (!empty($objectsrc->note_public) ? $objectsrc->note_public :
'');
1253 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
1257 $note_private =
GETPOST(
"note_private",
"alpha");
1258 $note_public =
GETPOST(
"note_public",
"alpha");
1263 print
'<form name="form_contract" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1264 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1265 print
'<input type="hidden" name="action" value="add">';
1266 print
'<input type="hidden" name="socid" value="'.$soc->id.
'">'.
"\n";
1267 print
'<input type="hidden" name="remise_percent" value="0">';
1268 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1272 print
'<table class="border centpercent">';
1275 if (empty($modCodeContract->code_auto)) {
1276 print
'<tr><td class="titlefield fieldrequired">'.$langs->trans(
'Ref').
'</td><td>';
1280 $tmpcode =
'<input name="ref" class="maxwidth100" maxlength="128" value="'.dol_escape_htmltag(
GETPOST(
'ref',
'alpha')).
'">';
1288 print
'<tr><td>'.$langs->trans(
'RefCustomer').
'</td>';
1289 print
'<td><input type="text" class="maxwidth150" name="ref_customer" id="ref_customer" value="'.dol_escape_htmltag(
GETPOST(
'ref_customer',
'alpha')).
'"></td></tr>';
1293 print
'<tr><td>'.$langs->trans(
'RefSupplier').
'</td>';
1294 print
'<td><input type="text" class="maxwidth150" name="ref_supplier" id="ref_supplier" value="'.dol_escape_htmltag(
GETPOST(
'ref_supplier',
'alpha')).
'"></td></tr>';
1299 print
'<td class="fieldrequired">'.$langs->trans(
'ThirdParty').
'</td>';
1302 print $soc->getNomUrl(1);
1303 print
'<input type="hidden" name="socid" value="'.$soc->id.
'">';
1307 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1308 print $form->select_company(
'',
'socid',
'',
'SelectThirdParty', 1, 0, array(), 0,
'minwidth150 widthcentpercentminusxx maxwidth500');
1309 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>';
1316 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1317 if ($soc->remise_percent) {
1318 print $langs->trans(
"CompanyHasRelativeDiscount", $soc->remise_percent).
' ';
1320 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoRelativeDiscount").
'. </span>';
1322 $absolute_discount = $soc->getAvailableDiscounts();
1323 if ($absolute_discount) {
1324 print $langs->trans(
"CompanyHasAbsoluteDiscount",
price($absolute_discount), $langs->trans(
"Currency".$conf->currency)).
'.';
1326 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoAbsoluteDiscount").
'.</span>';
1332 print
'<tr><td class="nowrap"><span class="fieldrequired">'.$langs->trans(
"TypeContact_contrat_internal_SALESREPFOLL").
'</span></td><td>';
1333 print
img_picto(
'',
'user',
'class="pictofixedwidth"');
1334 print $form->select_dolusers(
GETPOST(
"commercial_suivi_id") ?
GETPOST(
"commercial_suivi_id") : $user->id,
'commercial_suivi_id', 1, null);
1338 print
'<tr><td class="nowrap"><span class="fieldrequired">'.$langs->trans(
"TypeContact_contrat_internal_SALESREPSIGN").
'</span></td><td>';
1339 print
img_picto(
'',
'user',
'class="pictofixedwidth"');
1340 print $form->select_dolusers(
GETPOST(
"commercial_signature_id") ?
GETPOST(
"commercial_signature_id") : $user->id,
'commercial_signature_id', 1, null);
1343 print
'<tr><td><span class="fieldrequired">'.$langs->trans(
"Date").
'</span></td><td>';
1344 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1345 print $form->selectDate($datecontrat,
'', 0, 0, 0,
"contrat");
1350 $langs->load(
'projects');
1354 print
'<tr><td>'.$langs->trans(
"Project").
'</td><td>';
1355 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
1356 $formproject->select_projects(($soc->id > 0 ? $soc->id : -1), $projectid,
"projectid", 0, 0, 1, 1, 0, 0, 0,
'', 0, 0,
'minwidth150 maxwidth300 widthcentpercentminusxx');
1357 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>';
1362 print
'<tr><td>'.$langs->trans(
"NotePublic").
'</td><td class="tdtop">';
1363 $doleditor =
new DolEditor(
'note_public', (
string) $note_public,
'', 100,
'dolibarr_notes',
'In',
true,
true, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1364 print $doleditor->Create(1);
1368 if (empty($user->socid)) {
1369 print
'<tr><td>'.$langs->trans(
"NotePrivate").
'</td><td class="tdtop">';
1370 $doleditor =
new DolEditor(
'note_private', (
string) $note_private,
'', 100,
'dolibarr_notes',
'In',
true,
true, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1371 print $doleditor->Create(1);
1376 $parameters = array(
'objectsrc' => $objectsrc,
'colspan' =>
' colspan="3"',
'cols' =>
'3');
1377 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
1378 print $hookmanager->resPrint;
1381 if (empty($reshook)) {
1382 print
$object->showOptionals($extrafields,
'create', $parameters);
1389 print $form->buttonsSaveCancel(
"CreateDraft");
1391 if (is_object($objectsrc)) {
1392 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1393 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1396 print
'<br>'.$langs->trans(
"Note").
': '.$langs->trans(
"OnlyLinesWithTypeServiceAreUsed");
1410 $result =
$object->fetch_lines();
1415 $nbofservices = count(
$object->lines);
1418 $author->fetch(
$object->user_author_id);
1420 $commercial_signature =
new User(
$db);
1421 $commercial_signature->fetch(
$object->commercial_signature_id);
1423 $commercial_suivi =
new User(
$db);
1424 $commercial_suivi->fetch(
$object->commercial_suivi_id);
1431 print
dol_get_fiche_head($head, $hselected, $langs->trans(
"Contract"), -1,
'contract', 0,
'',
'', 0,
'', 1);
1434 if ($action ==
'delete') {
1436 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"DeleteAContract"), $langs->trans(
"ConfirmDeleteAContract"),
"confirm_delete",
'', 0, 1);
1437 } elseif ($action ==
'valid') {
1439 $ref = substr(
$object->ref, 1, 4);
1440 if ($ref ==
'PROV' && !empty($modCodeContract->code_auto)) {
1445 $text = $langs->trans(
'ConfirmValidateContract', $numref);
1446 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ValidateAContract"), $text,
"confirm_valid",
'', 0, 1);
1447 } elseif ($action ==
'close') {
1449 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"CloseAContract"), $langs->trans(
"ConfirmCloseContract"),
"confirm_close",
'', 0, 1);
1450 } elseif ($action ==
'activate') {
1451 $formquestion = array(
1452 array(
'type' =>
'date',
'name' =>
'd_start',
'label' => $langs->trans(
"DateServiceActivate"),
'value' =>
dol_now()),
1453 array(
'type' =>
'date',
'name' =>
'd_end',
'label' => $langs->trans(
"DateEndPlanned"), 0 =>
'', 1 =>
''),
1454 array(
'type' =>
'text',
'name' =>
'comment',
'label' => $langs->trans(
"Comment"),
'value' =>
'', 0 =>
'', 1 =>
'',
'class' =>
'minwidth300',
'moreattr' =>
'autofocus')
1456 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ActivateAllOnContract"), $langs->trans(
"ConfirmActivateAllOnContract"),
"confirm_activate", $formquestion,
'yes', 1, 300);
1457 } elseif ($action ==
'clone') {
1458 $filter =
'(s.client:IN:1,2,3) OR (s.fournisseur:=:1)';
1460 $formquestion = array(array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter)));
1461 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneContract',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
1462 } elseif ($action ==
'sign') {
1463 $text = $langs->trans(
'ConfirmSignContract');
1465 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1468 $text .= $notify->confirmMessage(
'CONTRACT_MODIFY',
$object->socid, $object);
1473 'name' =>
'signed_status',
1474 'label' =>
'<span class="fieldrequired">'.$langs->trans(
'SignStatus').
'</span>',
1475 'values' =>
$object->getSignedStatusLocalisedArray()
1477 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'SignContract'), $text,
'confirm_sign', $formquestion, 0, 1);
1478 } elseif ($action ==
'unsign') {
1479 $text = $langs->trans(
'ConfirmUnsignContract');
1481 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1484 $text .= $notify->confirmMessage(
'CONTRACT_MODIFY',
$object->socid, $object);
1486 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'UnsignContract'), $text,
'confirm_unsign',
'', 0, 1);
1491 $parameters = array(
1492 'formConfirm' => $formconfirm,
1497 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
1498 if (empty($reshook)) {
1499 $formconfirm .= $hookmanager->resPrint;
1500 } elseif ($reshook > 0) {
1501 $formconfirm = $hookmanager->resPrint;
1509 if (
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'contrat',
'creer')) {
1510 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="POST">';
1511 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1512 print
'<input type="hidden" name="action" value="setremise">';
1513 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1518 $linkback =
'<a href="'.DOL_URL_ROOT.
'/contrat/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1522 if (!empty($modCodeContract->code_auto)) {
1525 $morehtmlref .= $form->editfieldkey(
"",
'ref',
$object->ref, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 3);
1526 $morehtmlref .= $form->editfieldval(
"",
'ref',
$object->ref, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'',
null,
'2');
1529 $morehtmlref .=
'<div class="refidno">';
1531 $morehtmlref .= $form->editfieldkey(
"RefCustomer",
'ref_customer',
$object->ref_customer, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 1);
1532 $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');
1534 $morehtmlref .=
'<br>';
1535 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 1);
1536 $morehtmlref .= $form->editfieldval(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'',
null,
null,
'', 1,
'getFormatedSupplierRef');
1538 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1);
1540 $morehtmlref .=
' <span class="otherlink valignmiddle">(<a href="'.DOL_URL_ROOT.
'/contrat/list.php?socid='.((int)
$object->thirdparty->id).
'">'.$langs->trans(
"OtherContracts").
'</a>)</span>';
1544 $langs->load(
"projects");
1545 $morehtmlref .=
'<br>';
1546 if ($permissiontoadd) {
1547 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
1548 if ($action !=
'classify') {
1549 $morehtmlref .=
'<a class="editfielda" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'action' =>
'classify',
'id' => ((
int)
$object->id)],
true).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1551 $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');
1553 if (!empty(
$object->fk_project)) {
1555 $proj->fetch(
$object->fk_project);
1556 $morehtmlref .= $proj->getNomUrl(1);
1558 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
1563 $morehtmlref .=
'</div>';
1566 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'none', $morehtmlref);
1569 print
'<div class="fichecenter">';
1570 print
'<div class="fichehalfleft">';
1571 print
'<div class="underbanner clearboth"></div>';
1573 print
'<table class="border centpercent tableforfield">';
1576 print
'<tr><td class="titlefield">'.$langs->trans(
'Discount').
'</td><td colspan="3">';
1577 if (
$object->thirdparty->remise_percent) {
1578 print $langs->trans(
"CompanyHasRelativeDiscount",
$object->thirdparty->remise_percent).
'. ';
1580 print
'<span class="hideonsmartphone opacitymedium">'.$langs->trans(
"CompanyHasNoRelativeDiscount").
'. </span>';
1582 $absolute_discount =
$object->thirdparty->getAvailableDiscounts();
1583 if ($absolute_discount) {
1584 print $langs->trans(
"CompanyHasAbsoluteDiscount",
price($absolute_discount), $langs->trans(
"Currency".$conf->currency)).
'.';
1586 print
'<span class="hideonsmartphone opacitymedium">'.$langs->trans(
"CompanyHasNoAbsoluteDiscount").
'.</span>';
1592 print
'<td class="titlefield">';
1593 print $form->editfieldkey(
"Date",
'date_contrat',
$object->date_contrat, $object, $user->hasRight(
'contrat',
'creer'));
1595 print $form->editfieldval(
"Date",
'date_contrat',
$object->date_contrat, $object, $user->hasRight(
'contrat',
'creer'),
'datehourpicker');
1600 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1605 print
'<div class="fichehalfright">';
1607 print
'<!-- amounts -->'.
"\n";
1608 print
'<div class="underbanner clearboth"></div>';
1611 print
'<div class="div-table-responsive-no-min">';
1612 print
'<table class="border tableforfield centpercent">';
1615 print
'<tr><td class="titlefield">'.
"".
'</td>';
1616 print
'<td class=right>'.$langs->trans(
'Total').
'</td>';
1617 print
'<td class=right>'.$staticcontractline->LibStatut(0, 5, 0).
'</td>';
1618 print
'<td class=right>'.$staticcontractline->LibStatut(4, 5, 0).
'</td>';
1619 print
'<td class=right>'.$staticcontractline->LibStatut(4, 5, 1).
'</td>';
1620 print
'<td class=right>'.$staticcontractline->LibStatut(5, 5, 0).
'</td>';
1623 $all=
$object->getTotalizedLines(-1, 0);
1624 $draft=
$object->getTotalizedLines(0, 0);
1625 $enabled=
$object->getTotalizedLines(4, 0);
1626 $expired=
$object->getTotalizedLines(4, 1);
1627 $close=
$object->getTotalizedLines(5, 0);
1630 print
'<tr><td class="titlefield">'.$langs->trans(
"Quantity").
'</td>';
1631 print
'<td class="right nowrap">'.($all[
'total_qty'] ?
price2num($all[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1632 print
'<td class="right">'.($draft[
'total_qty'] ?
price2num($draft[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1633 print
'<td class="right">'.($enabled[
'total_qty'] ?
price2num($enabled[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1634 print
'<td class="right">'.($expired[
'total_qty'] ?
price2num($expired[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1635 print
'<td class="right">'.($close[
'total_qty'] ?
price2num($close[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1638 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalHT").
'</td>';
1639 print
'<td class="nowraponall amountcard right">'.($all[
'total_ht'] ?
price($all[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1640 print
'<td class="nowraponall amountcard right">'.($draft[
'total_ht'] ?
price($draft[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1641 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_ht'] ?
price($enabled[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1642 print
'<td class="nowraponall amountcard right">'.($expired[
'total_ht'] ?
price($expired[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1643 print
'<td class="nowraponall amountcard right">'.($close[
'total_ht'] ?
price($close[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1646 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalVAT").
'</td>';
1647 print
'<td class="nowraponall amountcard right nowrap">'.($all[
'total_tva'] ?
price($all[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1648 print
'<td class="nowraponall amountcard right">'.($draft[
'total_tva'] ?
price($draft[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1649 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_tva'] ?
price($enabled[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1650 print
'<td class="nowraponall amountcard right">'.($expired[
'total_tva'] ?
price($expired[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1651 print
'<td class="nowraponall amountcard right">'.($close[
'total_tva'] ?
price($close[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1654 if (
$mysoc->localtax1_assuj ==
"1" || $all[
'total_localtax1'] != 0) {
1655 print
'<tr><td class="titlefield">' . $langs->trans(
"TotalLT1") .
'</td>';
1656 print
'<td class="nowraponall amountcard right nowrap">' . ($all[
'total_localtax1'] ?
price($all[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1657 print
'<td class="nowraponall amountcard right">' . ($draft[
'total_localtax1'] ?
price($draft[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1658 print
'<td class="nowraponall amountcard right">' . ($enabled[
'total_localtax1'] ?
price($enabled[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1659 print
'<td class="nowraponall amountcard right">' . ($expired[
'total_localtax1'] ?
price($expired[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1660 print
'<td class="nowraponall amountcard right">' . ($close[
'total_localtax1'] ?
price($close[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1664 if (
$mysoc->localtax2_assuj ==
"1" || $all[
'total_localtax2'] != 0) {
1665 print
'<tr><td class="titlefield">' . $langs->trans(
"TotalLT2") .
'</td>';
1666 print
'<td class="nowraponall amountcard right nowrap">' . ($all[
'total_localtax2'] ?
price($all[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1667 print
'<td class="nowraponall amountcard right">' . ($draft[
'total_localtax2'] ?
price($draft[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1668 print
'<td class="nowraponall amountcard right">' . ($enabled[
'total_localtax2'] ?
price($enabled[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1669 print
'<td class="nowraponall amountcard right">' . ($expired[
'total_localtax2'] ?
price($expired[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1670 print
'<td class="nowraponall amountcard right">' . ($close[
'total_localtax2'] ?
price($close[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1674 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalTTC").
'</td>';
1675 print
'<td class="nowraponall amountcard right nowrap">'.($all[
'total_ttc'] ?
price($all[
'total_ttc']):
'<span class="opacitymedium">0</span>').
'</td>';
1676 print
'<td class="nowraponall amountcard right">'.($draft[
'total_ttc'] ?
price($draft[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1677 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_ttc'] ?
price($enabled[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1678 print
'<td class="nowraponall amountcard right">'.($expired[
'total_ttc'] ?
price($expired[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1679 print
'<td class="nowraponall amountcard right">'.($close[
'total_ttc'] ?
price($close[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1689 print
'<div class="clearboth"></div><br>';
1691 if (
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'contrat',
'creer')) {
1698 $blocname =
'contacts';
1699 $title = $langs->trans(
'ContactsAddresses');
1700 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1704 $blocname =
'notes';
1705 $title = $langs->trans(
'Notes');
1706 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1710 $arrayothercontracts =
$object->getListOfContracts(
'others');
1718 global $inputalsopricewithtax;
1719 $inputalsopricewithtax = 1;
1724 if (
isModEnabled(
'margin') && !empty(
$object->element) && in_array(
$object->element, array(
'facture',
'propal',
'commande'))) {
1728 $parameters = array(
'nbOfLines' => &$nbofservices);
1729 $reshook = $hookmanager->executeHooks(
'printObjectLinesBlock', $parameters, $object, $action);
1730 if (empty($reshook)) {
1734 print
'<div id="contrat-lines-container" id="contractlines" data-contractid="'.$object->id.
'" data-element="'.
$object->element.
'" >';
1735 while ($cursorline <= $nbofservices) {
1736 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.
'" >';
1737 print
'<form name="update" id="addproduct" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="post">';
1738 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1739 print
'<input type="hidden" name="action" value="updateline">';
1740 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1741 print
'<input type="hidden" name="elrowid" value="'.$object->lines[$cursorline - 1]->id.
'">';
1742 print
'<input type="hidden" name="fournprice" value="'.(!empty(
$object->lines[$cursorline - 1]->fk_fournprice) ?
$object->lines[$cursorline - 1]->fk_fournprice : 0).
'">';
1745 print
'<div class="div-table-responsive-no-min">';
1746 print
'<table class="notopnoleftnoright allwidth tableforservicepart1 centpercent">';
1748 $sql =
"SELECT cd.rowid, cd.statut, cd.label as label_det, cd.fk_product, cd.product_type, cd.description, cd.qty,";
1749 $sql .=
" cd.tva_tx, cd.vat_src_code, cd.remise_percent, cd.info_bits, cd.subprice, cd.multicurrency_subprice,";
1750 $sql .=
" cd.date_ouverture_prevue as date_start, cd.date_ouverture as date_start_real,";
1751 $sql .=
" cd.date_fin_validite as date_end, cd.date_cloture as date_end_real,";
1752 $sql .=
" cd.commentaire as comment, cd.fk_product_fournisseur_price as fk_fournprice, cd.buy_price_ht as pa_ht,";
1753 $sql .=
" cd.fk_unit,";
1754 $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";
1755 $sql .=
" ,cd.rang";
1756 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contratdet as cd";
1757 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON cd.fk_product = p.rowid";
1758 $sql .=
" WHERE cd.rowid = ".((int)
$object->lines[$cursorline - 1]->id);
1760 $result =
$db->query($sql);
1765 $objp =
$db->fetch_object($result);
1768 print
'<tr class="liste_titre'.($cursorline ?
' liste_titre_add' :
'').
'">';
1769 print
'<td>'.$langs->trans(
"ServiceNb", $cursorline).
'</td>';
1770 print
'<td width="80" class="center">'.$langs->trans(
"VAT").
'</td>';
1771 print
'<td width="80" class="right">'.$langs->trans(
"PriceUHT").
'</td>';
1775 print
'<td width="30" class="center">'.$langs->trans(
"Qty").
'</td>';
1777 print
'<td width="30" class="left">'.$langs->trans(
"Unit").
'</td>';
1779 print
'<td width="50" class="right">'.$langs->trans(
"ReductionShort").
'</td>';
1781 print
'<td width="50" class="right">'.$langs->trans(
"BuyingPrice").
'</td>';
1785 if ($nbofservices > 1 &&
$conf->browser->layout !=
'phone' && $user->hasRight(
'contrat',
'creer')) {
1786 print
'<td width="30" class="linecolmove tdlineupdown center">';
1787 if ($cursorline > 1) {
1788 print
'<a class="lineupdown reposition paddingrightonly paddingleftonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=up&token='.
newToken().
'&rowid='.$objp->rowid.
'">';
1789 echo
img_up(
'default', 0,
'imgupforline');
1792 if ($cursorline < $nbofservices) {
1793 print
'<a class="lineupdown reposition paddingrightonly paddingleftonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=down&token='.
newToken().
'&rowid='.$objp->rowid.
'">';
1794 echo
img_down(
'default', 0,
'imgdownforline');
1799 print
'<td width="30"> </td>';
1807 if ($action !=
'editline' || $idline != $objp->rowid) {
1809 if (
getDolGlobalString(
'CONTRACT_HIDE_CLOSED_SERVICES_BY_DEFAULT') && $objp->statut == ContratLigne::STATUS_CLOSED && $action !=
'showclosedlines') {
1810 $moreparam =
'style="display: none;"';
1814 $line->id = $objp->rowid;
1818 print
'<tr class="tdtop oddeven" '.$moreparam.
'>';
1821 print
'<td class="linecoldescription minwidth300imp">';
1823 print
'<div id="line_'.$line->rowid.
'"></div>';
1824 if ($objp->fk_product > 0) {
1825 $productstatic->id = $objp->fk_product;
1826 $productstatic->type = $objp->ptype;
1827 $productstatic->ref = $objp->pref;
1828 $productstatic->entity = $objp->pentity;
1829 $productstatic->label = $objp->plabel;
1830 $productstatic->status = $objp->tosell;
1831 $productstatic->status_buy = $objp->tobuy;
1832 $productstatic->status_batch = $objp->tobatch;
1834 $text = $productstatic->getNomUrl(1,
'', 32);
1835 if ($objp->plabel) {
1837 $text .= $objp->plabel;
1839 $description = $objp->description;
1842 print (!empty($line->fk_parent_line) ?
img_picto(
'',
'rightarrow.png') :
'') . $text;
1844 print $form->textwithpicto(
'', $description);
1847 print $form->textwithtooltip($text, $description, 3, 0,
'',
'', 0, (!empty($line->fk_parent_line) ?
img_picto(
'',
'rightarrow.png') :
''));
1851 if ($line->fk_product > 0 &&
getDolGlobalInt(
'PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) {
1852 print (!empty($line->description) && $line->description != $line->plabel) ? (($line->date_start || $line->date_end) ?
'' :
'<br>').
'<br>'.
dol_htmlentitiesbr($line->
description) :
'';
1860 print
'<td class="center">';
1861 print
vatrate($objp->tva_tx.($objp->vat_src_code ? (
' ('.$objp->vat_src_code.
')') :
''), true, $objp->info_bits);
1864 print
'<td class="right">'.($objp->subprice !=
'' ?
price($objp->subprice) :
'').
"</td>\n";
1870 print
'<td class="center">'.$objp->qty.
'</td>';
1873 print
'<td class="left">'.$object->lines[$cursorline - 1]->getLabelOfUnit(
'long', $langs).
'</td>';
1876 if ($objp->remise_percent > 0) {
1877 print
'<td class="right">'.$objp->remise_percent.
"%</td>\n";
1879 print
'<td> </td>';
1884 print
'<td class="right nowraponall">'.price($objp->pa_ht).
'</td>';
1888 print
'<td class="nowraponall right">';
1889 if ($user->hasRight(
'contrat',
'creer') && is_array($arrayothercontracts) && count($arrayothercontracts) && (
$object->status >= 0)) {
1890 print
'<!-- link to move service line into another contract -->';
1891 print
'<a class="reposition marginrightonly" style="padding-left: 5px;" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=move&token='.
newToken().
'&elrowid='.$objp->rowid.
'">';
1892 print
img_picto($langs->trans(
"MoveToAnotherContract"),
'uparrow');
1895 if ($user->hasRight(
'contrat',
'creer') && (
$object->statut >= 0)) {
1896 print
'<a class="reposition marginrightonly editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=editline&token='.
newToken().
'&elrowid='.$objp->rowid.
'">';
1900 if ($user->hasRight(
'contrat',
'creer') && (
$object->statut >= 0)) {
1901 print
'<a class="reposition marginrightonly" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=deleteline&token='.
newToken().
'&elrowid='.$objp->rowid.
'">';
1918 if ($objp->subprice >= 0) {
1919 print
'<tr class="oddeven" '.$moreparam.
'>';
1920 print
'<td colspan="'.$colspan.
'">';
1923 print $langs->trans(
"DateStartPlanned").
': ';
1924 if ($objp->date_start) {
1927 if ($objp->statut == 0 &&
$db->jdate($objp->date_start) < ($now -
$conf->contrat->services->inactifs->warning_delay)) {
1928 $warning_delay =
$conf->contrat->services->inactifs->warning_delay / 3600 / 24;
1929 $textlate = $langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($warning_delay) >= 0 ?
'+' :
'').ceil($warning_delay).
' '.$langs->trans(
"days");
1930 print
" ".img_warning($textlate);
1933 print $langs->trans(
"Unknown");
1935 print
' - ';
1936 print $langs->trans(
"DateEndPlanned").
': ';
1937 if ($objp->date_end) {
1939 if ($objp->statut == 4 &&
$db->jdate($objp->date_end) < ($now -
$conf->contrat->services->expires->warning_delay)) {
1940 $warning_delay =
$conf->contrat->services->expires->warning_delay / 3600 / 24;
1941 $textlate = $langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($warning_delay) >= 0 ?
'+' :
'').ceil($warning_delay).
' '.$langs->trans(
"days");
1942 print
" ".img_warning($textlate);
1945 print $langs->trans(
"Unknown");
1953 if (is_array($extralabelslines) && count($extralabelslines) > 0) {
1955 $line->id = $objp->rowid;
1956 $line->fetch_optionals();
1957 print $line->showOptionals($extrafields,
'view', array(
'class' =>
'oddeven',
'style' => $moreparam,
'colspan' => $colspan,
'tdclass' =>
'notitlefieldcreate'),
'',
'',
'1');
1962 print
'<tr class="oddeven">';
1964 $currentLineProductId = GETPOSTISSET(
'idprod') ?
GETPOST(
'idprod') : (!empty(
$object->lines[$cursorline - 1]->fk_product) ?
$object->lines[$cursorline - 1]->fk_product : 0);
1965 if ($objp->fk_product > 0) {
1966 $canchangeproduct = 1;
1969 if (empty($canchangeproduct)) {
1970 $productstatic->id = $objp->fk_product;
1971 $productstatic->type = $objp->ptype;
1972 $productstatic->ref = $objp->pref;
1973 $productstatic->entity = $objp->pentity;
1974 print $productstatic->getNomUrl(1,
'', 32);
1975 print $objp->label ?
' - '.dol_trunc($objp->label, 32) :
'';
1976 print
'<input type="hidden" name="idprod" value="'.$currentLineProductId.
'">';
1978 $senderissupplier = 0;
1979 if (empty($senderissupplier)) {
1985 print $form->select_produits($currentLineProductId,
'idprod', $filtertype, 0, 0, 1, 2,
'', 0, array(), 0, 1, 0,
'minwidth250onall maxwidth500 widthcentpercentminusx');
1987 $form->select_produits_fournisseurs($currentLineProductId,
'idprod');
1992 print $objp->label ? $objp->label.
'<br>' :
'';
1993 print
'<input type="hidden" name="idprod" value="'.$currentLineProductId.
'">';
1997 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
2002 $doleditor =
new DolEditor(
'product_desc', (GETPOSTISSET(
'product_desc') ?
GETPOST(
'product_desc') : $objp->
description),
'', 92,
'dolibarr_details',
'', false, true,
getDolGlobalInt(
'FCKEDITOR_ENABLE_DETAILS'), $nbrows,
'90%');
2003 $doleditor->Create();
2008 print
'<td class="right">';
2009 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);
2013 print
'<td class="right"><input class="width50" type="text" name="elprice" value="'.(GETPOSTISSET(
'elprice') ?
GETPOST(
'elprice') :
price($objp->subprice)).
'"></td>';
2021 print
'<td class="center"><input size="2" type="text" name="elqty" value="'.(GETPOSTISSET(
'elqty') ?
GETPOST(
'elqty') : $objp->qty).
'"></td>';
2025 print
'<td class="left">';
2026 print $form->selectUnits((GETPOSTISSET(
'unit') ?
GETPOSTINT(
'unit') : $objp->fk_unit),
"unit");
2031 print
'<td class="nowraponall right"><input size="1" type="text" name="elremise_percent" value="'.(GETPOSTISSET(
'elremise_percent') ?
GETPOST(
'elremise_percent') : $objp->remise_percent).
'">%</td>';
2033 if (!empty($usemargins)) {
2034 print
'<td class="right">';
2035 if ($objp->fk_product) {
2036 print
'<select id="fournprice" name="fournprice"></select>';
2038 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>';
2040 print
'<td class="center">';
2041 print
'<input type="submit" class="button margintoponly marginbottomonly" name="save" value="'.$langs->trans(
"Modify").
'">';
2042 print
'<br><input type="submit" class="button margintoponly marginbottomonly button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2055 print
'<tr class="oddeven">';
2056 print
'<td colspan="'.$colspan.
'">';
2057 print $langs->trans(
"DateStartPlanned").
' ';
2058 print $form->selectDate(
$db->jdate($objp->date_start),
"date_start_update", $usehm, $usehm, (
$db->jdate($objp->date_start) > 0 ? 0 : 1),
"update");
2059 print
' '.$langs->trans(
"DateEndPlanned").
' ';
2060 print $form->selectDate(
$db->jdate($objp->date_end),
"date_end_update", $usehm, $usehm, (
$db->jdate($objp->date_end) > 0 ? 0 : 1),
"update");
2064 if (is_array($extralabelslines) && count($extralabelslines) > 0) {
2066 $line->id = $objp->rowid;
2067 $line->fetch_optionals();
2069 print $line->showOptionals($extrafields,
'edit', array(
'style' =>
'class="oddeven"',
'colspan' => $colspan,
'tdclass' =>
'notitlefieldcreate'),
'',
'',
'1');
2080 if (
getDolGlobalString(
'CONTRACT_HIDE_CLOSED_SERVICES_BY_DEFAULT') &&
$object->lines[$cursorline - 1]->statut == ContratLigne::STATUS_CLOSED && $action !=
'showclosedlines') {
2081 $moreparam =
'style="display: none;"';
2092 print
'<tr class="oddeven" '.$moreparam.
'>';
2093 print
'<td class="tdhrthin" colspan="'.$colspan.
'"><hr class="opacitymedium tdhrthin"></td>';
2106 if ($action ==
'deleteline' && !$cancel && $user->hasRight(
'contrat',
'creer') &&
$object->lines[$cursorline - 1]->id == $idline) {
2107 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".((
int)
$object->id).
"&lineid=".((
int) $idline), $langs->trans(
"DeleteContractLine"), $langs->trans(
"ConfirmDeleteContractLine"),
"confirm_deleteline",
'', 0, 1);
2108 if ($ret ==
'html') {
2109 print
'<table class="notopnoleftnoright centpercent"><tr class="oddeven" height="6"><td></td></tr></table>';
2116 if ($action ==
'move' && !$cancel && $user->hasRight(
'contrat',
'creer') &&
$object->lines[$cursorline - 1]->id == $idline) {
2117 $arraycontractid = array();
2118 foreach ($arrayothercontracts as $contractcursor) {
2119 $arraycontractid[$contractcursor->id] = $contractcursor->ref;
2123 $formquestion = array(
2124 'text' => $langs->trans(
"ConfirmMoveToAnotherContractQuestion"),
2125 0 => array(
'type' =>
'select',
'name' =>
'newcid',
'values' => $arraycontractid));
2127 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".((
int)
$object->id).
"&lineid=".((
int) $idline), $langs->trans(
"MoveToAnotherContract"), $langs->trans(
"ConfirmMoveToAnotherContract"),
"confirm_move", $formquestion,
'yes');
2128 print
'<table class="notopnoleftnoright centpercent"><tr class="oddeven" height="6"><td></td></tr></table>';
2133 print
'<table class="notopnoleftnoright tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2135 print
'<tr class="oddeven" '.$moreparam.
'>';
2136 print
'<td><span class="valignmiddle hideonsmartphone">'.$langs->trans(
"ServiceStatus").
':</span> '.
$object->lines[$cursorline - 1]->getLibStatut(4).
'</td>';
2137 print
'<td width="30" class="right">';
2138 if ($user->socid == 0) {
2139 if (
$object->status > 0 && $action !=
'activateline' && $action !=
'unactivateline' && is_object($objp)) {
2140 $tmpaction =
'activateline';
2141 $tmpactionpicto =
'play';
2142 $tmpactiontext = $langs->trans(
"Activate");
2143 if ($objp->statut == 4) {
2144 $tmpaction =
'unactivateline';
2145 $tmpactionpicto =
'playstop.png';
2146 $tmpactiontext = $langs->trans(
"Disable");
2148 if (($tmpaction ==
'activateline' && $user->hasRight(
'contrat',
'activer')) || ($tmpaction ==
'unactivateline' && $user->hasRight(
'contrat',
'desactiver'))) {
2149 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&ligne='.
$object->lines[$cursorline - 1]->id.
'&action='.$tmpaction.
'&token='.
newToken().
'">';
2150 print
img_picto($tmpactiontext, $tmpactionpicto);
2158 print
'<tr class="oddeven" '.$moreparam.
'>';
2162 if (!$objp->date_start_real) {
2163 print $langs->trans(
"DateStartReal").
': ';
2164 if ($objp->date_start_real) {
2167 print $langs->trans(
"ContractStatusNotRunning");
2171 if ($objp->date_start_real && !$objp->date_end_real) {
2172 print $langs->trans(
"DateStartReal").
': ';
2176 if ($objp->date_start_real && $objp->date_end_real) {
2177 print $langs->trans(
"DateStartReal").
': ';
2179 print
' - ';
2180 print $langs->trans(
"DateEndReal").
': ';
2183 if (!empty($objp->comment)) {
2184 print
" - ".$objp->comment;
2188 print
'<td class="center"> </td>';
2195 if ($permissiontoactivate && $action ==
'activateline' &&
$object->lines[$cursorline - 1]->id ==
GETPOSTINT(
'ligne') && is_object($objp)) {
2196 print
'<form name="active" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
2197 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2198 print
'<input type="hidden" name="action" value="confirm_active">';
2199 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2200 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
2201 print
'<input type="hidden" name="ligne" value="'.GETPOSTINT(
'ligne').
'">';
2202 print
'<input type="hidden" name="confirm" value="yes">';
2204 print
'<table class="noborder tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2207 $dateactstart = $objp->date_start;
2210 } elseif (!$dateactstart) {
2211 $dateactstart = time();
2214 $dateactend = $objp->date_end;
2217 } elseif (!$dateactend) {
2218 if ($objp->fk_product > 0) {
2220 $product->fetch($objp->fk_product);
2221 if (!empty($product->duration_value) && !empty($product->duration_unit)) {
2222 $dateactend =
dol_time_plus_duree(time(), $product->duration_value, $product->duration_unit);
2227 print
'<tr class="oddeven">';
2228 print
'<td class="nohover">'.$langs->trans(
"DateServiceActivate").
'</td><td class="nohover">';
2229 print $form->selectDate($dateactstart,
'start', $usehm, $usehm, 0,
"active", 1, 0);
2231 print
'<td class="nohover">'.$langs->trans(
"DateEndPlanned").
'</td><td class="nohover">';
2232 print $form->selectDate($dateactend,
"end", $usehm, $usehm, 0,
"active", 1, 0);
2234 print
'<td class="center nohover">';
2239 print
'<tr class="oddeven">';
2240 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>';
2241 print
'<td class="nohover right">';
2242 print
'<input type="submit" class="button" name="activate" value="'.$langs->trans(
"Activate").
'"> ';
2243 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2253 if ($permissiontodisable && $action ==
'unactivateline' &&
$object->lines[$cursorline - 1]->id ==
GETPOSTINT(
'ligne') && is_object($objp)) {
2254 print
'<!-- Form to disabled a line -->'.
"\n";
2255 print
'<form name="confirm_closeline" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&ligne='.
$object->lines[$cursorline - 1]->id.
'" method="post">';
2256 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2257 print
'<input type="hidden" name="confirm" value="yes">';
2258 print
'<input type="hidden" name="action" value="confirm_closeline">';
2259 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2261 print
'<table class="noborder tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2264 $dateactstart = $objp->date_start_real;
2267 } elseif (!$dateactstart) {
2268 $dateactstart = time();
2271 $dateactend = $objp->date_end_real;
2274 } elseif (!$dateactend) {
2275 if ($objp->fk_product > 0) {
2277 $product->fetch($objp->fk_product);
2278 $dateactend =
dol_time_plus_duree(time(), $product->duration_value, $product->duration_unit);
2282 if ($dateactend > $now) {
2286 print
'<tr class="oddeven"><td colspan="2" class="nohover">';
2287 if ($objp->statut >= 4) {
2288 if ($objp->statut == 4) {
2289 print $langs->trans(
"DateEndReal").
' ';
2290 print $form->selectDate($dateactend,
"end", $usehm, $usehm, ($objp->date_end_real > 0 ? 0 : 1),
"closeline", 1, 1);
2294 print
'<td class="center nohover">';
2297 print
'<tr class="oddeven">';
2298 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>';
2299 print
'<td class="nohover right">';
2300 print
'<input type="submit" class="button" name="close" value="'.$langs->trans(
"Disable").
'"> ';
2301 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2316 if ($user->hasRight(
'contrat',
'creer') && (
$object->status == 0)) {
2320 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
2321 <input type="hidden" name="token" value="'.
newToken().
'">
2322 <input type="hidden" name="action" value="'.(($action !=
'editline') ?
'addline' :
'updateline').
'">
2323 <input type="hidden" name="mode" value="">
2324 <input type="hidden" name="id" value="'.
$object->id.
'">
2325 <input type="hidden" name="page_y" value="">
2326 <input type="hidden" name="backtopage" value="'.$backtopage.
'">
2329 print
'<div class="div-table-responsive-no-min">';
2330 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
2333 if ($action !=
'editline') {
2334 $forcetoshowtitlelines = 1;
2335 if (empty(
$object->multicurrency_code)) {
2341 $parameters = array();
2342 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
2346 if (empty($reshook)) {
2359 if (
GETPOST(
'modelselected')) {
2360 $action =
'presend';
2366 if ($user->socid == 0 && $action !=
'presend' && $action !=
'editline') {
2367 print
'<div class="tabsAction">';
2369 $parameters = array();
2370 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2372 if (empty($reshook)) {
2376 'class' =>
'classfortooltip'
2381 if (empty($user->socid)) {
2382 if (
$object->status == $object::STATUS_VALIDATED) {
2383 if ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'contrat',
'creer'))) {
2384 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=presend&token='.
newToken().
'&mode=init#formmailbeforetitle',
'',
true, $params);
2386 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email',
'#',
'',
false, $params);
2391 if (
$object->status == $object::STATUS_DRAFT && $nbofservices) {
2392 if ($user->hasRight(
'contrat',
'creer')) {
2393 unset($params[
'attr'][
'title']);
2394 print
dolGetButtonAction($langs->trans(
'Validate'),
'',
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken(),
'',
true, $params);
2396 $params[
'attr'][
'title'] = $langs->trans(
"NotEnoughPermissions");
2397 print
dolGetButtonAction($langs->trans(
'Validate'),
'',
'default',
'#',
'',
false, $params);
2400 if (
$object->status == $object::STATUS_VALIDATED) {
2401 if ($user->hasRight(
'contrat',
'creer')) {
2402 unset($params[
'attr'][
'title']);
2403 print
dolGetButtonAction($langs->trans(
'Modify'),
'',
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken(),
'',
true, $params);
2405 $params[
'attr'][
'title'] = $langs->trans(
"NotEnoughPermissions");
2406 print
dolGetButtonAction($langs->trans(
'Modify'),
'',
'default',
'#',
'',
false, $params);
2411 $arrayofcreatebutton = array();
2413 $arrayofcreatebutton[] = array(
2414 'url' =>
'/comm/propal/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id.
'&renewal=true',
2415 'label' => $langs->trans(
'AddProp'),
2417 'perm' => $user->hasRight(
'propale',
'creer') ?
true : false,
2423 $arrayofcreatebutton[] = array(
2424 'url' =>
'/commande/card.php?action=create&token='.
newToken().
'&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2425 'label' => $langs->trans(
'AddOrder'),
2427 'perm' => $user->hasRight(
'commande',
'creer') ?
true : false,
2432 $arrayofcreatebutton[] = array(
2433 'url' =>
'/compta/facture/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2434 'label' => $langs->trans(
'CreateBill'),
2436 'perm' => $user->hasRight(
'facture',
'creer') ?
true : false,
2441 $langs->load(
"suppliers");
2442 $arrayofcreatebutton[] = array(
2443 'url' =>
'/fourn/facture/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2444 'label' => $langs->trans(
'AddSupplierInvoice'),
2446 'perm' => $user->hasRight(
'fournisseur',
'facture',
'creer') ?
true : false,
2450 if (count($arrayofcreatebutton)) {
2451 unset($params[
'attr'][
'title']);
2452 print
dolGetButtonAction(
'', $langs->trans(
"Create"),
'default', $arrayofcreatebutton,
'',
true, $params);
2455 $arrayforbutaction = array();
2456 $arrayforbutaction[] = array(
2457 'url' =>
'/contrat/card.php?id='.
$object->id.
'&action=activate&token='.
newToken(),
2458 'label' => $langs->trans(
'ActivateAllContracts'),
2460 'perm' => (
$object->nbofservicesclosed > 0 ||
$object->nbofserviceswait > 0) ? $permissiontoactivate : -1,
2463 $arrayforbutaction[] = array(
2464 'url' =>
'/contrat/card.php?id='.
$object->id.
'&action=close&token='.
newToken(),
2465 'label' => $langs->trans(
'CloseAllContracts'),
2467 'perm' => (
$object->nbofservicesclosed < $nbofservices) ? $permissiontodisable : -1,
2471 if (count($arrayforbutaction)) {
2472 unset($params[
'attr'][
'title']);
2473 print
dolGetButtonAction(
'', $langs->trans(
"Enable").
" / ".$langs->trans(
"Close"),
'default', $arrayforbutaction,
'',
true, $params);
2477 if ($action ==
'showclosedlines') {
2478 print
'<div class="inline-block divButAction"><a class="butAction" id="btnhideclosedlines" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=hideclosedlines&token='.
newToken().
'">'.$langs->trans(
"HideClosedServices").
'</a></div>';
2480 print
'<div class="inline-block divButAction"><a class="butAction" id="btnshowclosedlines" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=showclosedlines&token='.
newToken().
'">'.$langs->trans(
"ShowClosedServices").
'</a></div>';
2485 if (
getDolGlobalString(
'CONTRACT_SHOW_SIGNATURE_STATUS_WITH_SERVICE_STATUS') &&
$object->status > Contrat::STATUS_DRAFT) {
2486 if (
$object->signed_status != Contrat::$SIGNED_STATUSES[
'STATUS_SIGNED_ALL']) {
2487 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>';
2489 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>';
2494 if ($user->hasRight(
'contrat',
'creer')) {
2495 unset($params[
'attr'][
'title']);
2500 unset($params[
'attr'][
'title']);
2501 print
dolGetButtonAction($langs->trans(
'Delete'),
'',
'delete', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken(),
'', $permissiontodelete, $params);
2507 if ($action !=
'presend') {
2508 print
'<div class="fichecenter"><div class="fichehalfleft">';
2515 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2516 $genallowed = $user->hasRight(
'contrat',
'lire');
2517 $delallowed = $user->hasRight(
'contrat',
'creer');
2518 $tooltipAfterComboOfModels =
'';
2520 $tooltipAfterComboOfModels = $langs->trans(
"AccordingToYourSetupTheFileWillBeConcatenated",
getDolGlobalString(
'MAIN_INFO_CONTRACT_TERMSOFSALE'));
2523 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);
2527 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'contrat'), 1);
2528 $linktoelem = $tmparray[
'linktoelem'];
2529 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
2530 print $htmltoenteralink;
2532 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
2536 print
'<br><!-- Link to sign -->';
2537 require_once DOL_DOCUMENT_ROOT.
'/core/lib/signature.lib.php';
2539 print showOnlineSignatureUrl(
'contract',
$object->ref, $object).
'<br>';
2542 print
'</div><div class="fichehalfright">';
2546 $morehtmlcenter =
'<div class="nowraponall">';
2547 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/contrat/messaging.php?id='.
$object->id);
2548 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'SeeAll'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/contrat/agenda.php?id='.
$object->id);
2549 $morehtmlcenter .=
'</div>';
2553 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2555 $somethingshown = $formactions->showactions($object,
'contract', $socid, 1,
'listactions', $MAXEVENT,
'', $morehtmlcenter);
2557 print
'</div></div>';
2561 $modelmail =
'contract';
2562 $defaulttopic =
'SendContractRef';
2563 $diroutput =
$conf->contract->multidir_output[
$object->entity ??
$conf->entity];
2564 $trackid =
'con'.$object->id;
2566 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
2578 print
"\n".
'<script type="text/javascript">'.
"\n";
2580 $(document).ready(
function() {
2581 var idprod = $(
"input[name='idprod']").val();
2582 var fournprice = $(
"input[name='fournprice']").val();
2583 var token =
'<?php echo currentToken(); ?>';
2585 $.post(
'<?php echo DOL_URL_ROOT; ?>/fourn/ajax/getSupplierPrices.php', {
2589 if (data.length > 0) {
2592 $(data).each(
function() {
2593 options +=
'<option value="'+this.
id+
'" price="'+this.price+
'"';
2594 if (fournprice > 0) {
2595 if (this.
id == fournprice) {
2596 options +=
' selected';
2597 $(
"#buying_price").val(this.price);
2601 options +=
'>'+this.label+
'</option>';
2603 options +=
'<option value=null'+(trouve?
'':
' selected')+
'><?php echo $langs->trans("InputPrice"); ?></option>';
2604 $(
"#fournprice").html(options);
2606 $(
"#buying_price").hide();
2607 $(
"#fournprice").show();
2610 $(
"#buying_price").show();
2612 $(
"#fournprice").change(
function() {
2613 var selval = $(
this).find(
'option:selected').attr(
"price");
2615 $(
"#buying_price").val(selval).hide();
2617 $(
'#buying_price').show();
2621 $(
"#fournprice").hide();
2622 $(
'#buying_price').show();
2628 $(
"#fournprice").hide();
2629 $(
'#buying_price').show();
2633 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...
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.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dolBuildUrl($url, $params=[], $addtoken=false, $anchor='')
Return path of url.
dol_eval($s, $returnvalue=1, $hideerrors=1, $onlysimplestring='1')
Replace eval function to add more security.
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.
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'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
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...
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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_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.
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
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.
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.
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.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $allowothertags=array())
Show a picto called object_picto (generic function)
img_down($titlealt='default', $selected=0, $moreclass='')
Show down arrow logo.
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
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.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
img_up($titlealt='default', $selected=0, $moreclass='')
Show top arrow logo.
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
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.