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;
318 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
320 $subelement = $regs[2];
325 if ($element ==
'order') {
326 $element = $subelement =
'commande';
328 if ($element ==
'propal') {
329 $element =
'comm/propal';
330 $subelement =
'propal';
332 if ($element ==
'invoice' || $element ==
'facture') {
333 $element =
'compta/facture';
334 $subelement =
'facture';
336 if ($element ==
'facturerec' || $element ==
'facture_rec') {
338 $element =
'compta/facture';
339 $subelement =
'facture-rec';
340 $classname =
'FactureRec';
342 if ($element ==
'facture_fourn_rec' || $element ==
'invoice_supplier_rec') {
344 $subelement =
'fournisseur.facture-rec';
345 $classname =
'FactureFournisseurRec';
349 $object->origin_id = $originid;
354 $object->linked_objects = array_merge(
$object->linked_objects,
GETPOST(
'other_linked_objects',
'array:int'));
361 if (empty($classname)) {
362 $classname = ucfirst($subelement);
364 $srcobject =
new $classname(
$db);
365 '@phan-var-force Commande|Propal|Facture $srcobject';
368 $result = $srcobject->fetch(
$object->origin_id);
370 $srcobject->fetch_thirdparty();
371 $lines = $srcobject->lines;
372 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
373 $srcobject->fetch_lines();
374 $lines = $srcobject->lines;
378 $num = count($lines);
381 for ($i = 0; $i < $num; $i++) {
382 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
384 if ($product_type == 1 || (
getDolGlobalString(
'CONTRACT_SUPPORT_PRODUCTS') && in_array($product_type, array(0, 1)))) {
386 if ($lines[$i]->fk_product > 0) {
390 $prod->id = $lines[$i]->fk_product;
391 $prod->getMultiLangs();
393 $outputlangs = $langs;
395 if (
GETPOST(
'lang_id',
'aZ09')) {
396 $newlang =
GETPOST(
'lang_id',
'aZ09');
398 if (empty($newlang)) {
399 $newlang = $srcobject->thirdparty->default_lang;
401 if (!empty($newlang)) {
403 $outputlangs->setDefaultLang($newlang);
406 $label = (!empty(
$prod->multilangs[$outputlangs->defaultlang][
"libelle"])) ?
$prod->multilangs[$outputlangs->defaultlang][
"libelle"] : $lines[$i]->product_label;
408 $label = $lines[$i]->product_label;
410 $desc = ($lines[$i]->desc && $lines[$i]->desc != $lines[$i]->label) ?
dol_htmlentitiesbr($lines[$i]->desc) :
'';
416 $array_options = array();
418 if (method_exists($lines[$i],
'fetch_optionals')) {
419 $lines[$i]->fetch_optionals();
420 $array_options = $lines[$i]->array_options;
423 $txtva = $lines[$i]->vat_src_code ? $lines[$i]->tva_tx.
' ('.$lines[$i]->vat_src_code.
')' : $lines[$i]->tva_tx;
431 $lines[$i]->subprice,
436 $lines[$i]->fk_product,
437 $lines[$i]->remise_percent,
438 $lines[$i]->date_start,
439 $lines[$i]->date_end,
442 $lines[$i]->info_bits,
443 $lines[$i]->fk_fournprice,
446 (
int) $lines[$i]->fk_unit,
462 $parameters = array(
'objFrom' => $srcobject);
463 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $object, $action);
477 $result =
$object->create($user);
479 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
487 } elseif ($action ==
'classin' && $user->hasRight(
'contrat',
'creer')) {
489 } elseif ($action ==
'addline' && $user->hasRight(
'contrat',
'creer')) {
496 $price_ht_devise =
'';
498 $price_ttc_devise =
'';
500 $rang = count(
$object->lines) + 1;
502 if (
GETPOST(
'price_ht') !==
'') {
505 if (
GETPOST(
'multicurrency_price_ht') !==
'') {
508 if (
GETPOST(
'price_ttc') !==
'') {
511 if (
GETPOST(
'multicurrency_price_ttc') !==
'') {
515 if (
GETPOST(
'prod_entry_mode',
'alpha') ==
'free') {
521 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
526 $tva_tx =
GETPOST(
'tva_tx',
'alpha');
530 if (empty($remise_percent)) {
535 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Qty")),
null,
'errors');
538 if (
GETPOST(
'prod_entry_mode',
'alpha') ==
'free' && (empty($idprod) || $idprod < 0) && empty($line_desc)) {
539 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Description")),
null,
'errors');
546 setEventMessages($langs->trans(
"Error").
': '.$langs->trans(
"DateStartPlanned").
' > '.$langs->trans(
"DateEndPlanned"),
null,
'errors');
551 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
552 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
554 if (is_array($extralabelsline)) {
556 foreach ($extralabelsline as $key => $value) {
557 unset($_POST[
"options_".$key]);
566 $price_base_type =
'';
572 $prod->fetch($idprod);
581 $price_min =
$prod->price_min;
582 $price_min_ttc =
$prod->price_min_ttc;
586 $price_min =
$prod->multiprices_min[
$object->thirdparty->price_level];
587 $price_min_ttc =
$prod->multiprices_min_ttc[
$object->thirdparty->price_level];
590 require_once DOL_DOCUMENT_ROOT.
'/product/class/productcustomerprice.class.php';
594 $filter = array(
't.fk_product' => (
string)
$prod->id,
't.fk_soc' => (
string)
$object->thirdparty->id);
596 $result = $prodcustprice->fetchAll(
'',
'', 0, 0, $filter);
598 if (count($prodcustprice->lines) > 0) {
599 $date_now = (int) floor(
dol_now() / 86400) * 86400;
600 foreach ($prodcustprice->lines as $k => $custprice_line) {
601 if ($custprice_line->date_begin <= $date_now && (empty($custprice_line->date_end) || $date_now <= $custprice_line->date_end)) {
602 $price_min =
price($custprice_line->price_min);
603 $price_min_ttc =
price($custprice_line->price_min_ttc);
619 $tmpvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', $tva_tx));
620 $tmpprodvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', (
string)
$prod->tva_tx));
623 if (!empty($price_ht) || $price_ht ===
'0') {
625 $pu_ttc =
price2num((
float) $pu_ht * (1 + ((
float) $tmpvat / 100)),
'MU');
626 $price_base_type =
'HT';
627 } elseif (!empty($price_ttc) || $price_ttc ===
'0') {
629 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tmpvat / 100)),
'MU');
630 $price_base_type =
'TTC';
633 $desc =
$prod->description;
643 $fk_unit =
$prod->fk_unit;
647 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
648 if (empty($tva_tx)) {
651 $tva_tx = str_replace(
'*',
'', $tva_tx);
654 $pu_ht_devise =
price2num($price_ht_devise,
'MU');
655 $pu_ttc_devise =
price2num($price_ttc_devise,
'MU');
657 $tmpvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', $tva_tx));
660 if (!empty($price_ht) || $price_ht ===
'0') {
662 $pu_ttc =
price2num((
float) $pu_ht * (1 + ((
float) $tmpvat / 100)),
'MU');
663 $price_base_type =
'HT';
664 } elseif (!empty($price_ttc) || $price_ttc ===
'0') {
666 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tmpvat / 100)),
'MU');
667 $price_base_type =
'TTC';
675 $fk_fournprice =
GETPOST(
'fournprice');
677 $pa_ht =
GETPOST(
'buying_price');
687 if (((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !$user->hasRight(
'produit',
'ignore_price_min_advance'))
689 $object->error = $langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
707 (
int) $fk_fournprice,
718 $outputlangs = $langs;
721 $newlang =
GETPOST(
'lang_id',
'aZ09');
724 $newlang =
$object->thirdparty->default_lang;
726 if (!empty($newlang)) {
728 $outputlangs->setDefaultLang($newlang);
733 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
736 unset($_POST[
'prod_entry_mode']);
738 unset($_POST[
'qty']);
739 unset($_POST[
'type']);
740 unset($_POST[
'remise_percent']);
741 unset($_POST[
'price_ht']);
742 unset($_POST[
'multicurrency_price_ht']);
743 unset($_POST[
'price_ttc']);
744 unset($_POST[
'tva_tx']);
745 unset($_POST[
'product_ref']);
746 unset($_POST[
'product_label']);
747 unset($_POST[
'product_desc']);
748 unset($_POST[
'fournprice']);
749 unset($_POST[
'buying_price']);
750 unset($_POST[
'np_marginRate']);
751 unset($_POST[
'np_markRate']);
752 unset($_POST[
'dp_desc']);
753 unset($_POST[
'idprod']);
755 unset($_POST[
'date_starthour']);
756 unset($_POST[
'date_startmin']);
757 unset($_POST[
'date_startsec']);
758 unset($_POST[
'date_startday']);
759 unset($_POST[
'date_startmonth']);
760 unset($_POST[
'date_startyear']);
761 unset($_POST[
'date_endhour']);
762 unset($_POST[
'date_endmin']);
763 unset($_POST[
'date_endsec']);
764 unset($_POST[
'date_endday']);
765 unset($_POST[
'date_endmonth']);
766 unset($_POST[
'date_endyear']);
771 } elseif ($action ==
'updateline' && $user->hasRight(
'contrat',
'creer') && !
GETPOST(
'cancel',
'alpha')) {
775 if (!empty($date_start_update) && !empty($date_end_update) && $date_start_update > $date_end_update) {
776 setEventMessages($langs->trans(
"Error").
': '.$langs->trans(
"DateStartPlanned").
' > '.$langs->trans(
"DateEndPlanned"),
null,
'errors');
777 $action =
'editline';
783 if ($objectline->fetch($idline) < 0) {
787 $objectline->fetch_optionals();
789 $objectline->oldcopy =
dol_clone($objectline, 2);
797 if ($date_start_real_update ==
'') {
798 $date_start_real_update = $objectline->date_start_real;
800 if ($date_end_real_update ==
'') {
801 $date_end_real_update = $objectline->date_end_real;
804 $vat_rate =
GETPOST(
'eltva_tx',
'alpha');
807 if (preg_match(
'/\*/', $vat_rate)) {
812 $vat_rate = str_replace(
'*',
'', $vat_rate);
821 if (preg_match(
'/\((.*)\)/', $txtva, $reg)) {
822 $vat_src_code = $reg[1];
823 $txtva = preg_replace(
'/\s*\(.*\)/',
'', $txtva);
839 $objectline->fk_product =
GETPOSTINT(
'idprod');
840 $objectline->description =
GETPOST(
'product_desc',
'restricthtml');
843 $objectline->remise_percent = $remise_percent;
844 $objectline->tva_tx = ($txtva ? $txtva : 0);
845 $objectline->vat_src_code = $vat_src_code;
846 $objectline->localtax1_tx = is_numeric($localtax1_tx) ? $localtax1_tx : 0;
847 $objectline->localtax2_tx = is_numeric($localtax2_tx) ? $localtax2_tx : 0;
848 $objectline->date_start = $date_start_update;
849 $objectline->date_start_real = $date_start_real_update;
850 $objectline->date_end = $date_end_update;
851 $objectline->date_end_real = $date_end_real_update;
852 $objectline->user_closing_id = $user->id;
854 $objectline->pa_ht = $pa_ht;
860 $objectline->fk_unit =
null;
864 $extralabelsline = $extrafields->fetch_name_optionals_label($objectline->table_element);
865 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
867 if (is_array($array_options) && count($array_options) > 0) {
869 foreach ($array_options as $key => $value) {
870 $objectline->array_options[$key] = $array_options[$key];
876 $result = $objectline->update($user);
879 $action =
'editline';
880 $_GET[
'rowid'] =
GETPOST(
'elrowid');
890 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $user->hasRight(
'contrat',
'creer')) {
894 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
899 } elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $user->hasRight(
'contrat',
'creer')) {
900 $result =
$object->validate($user);
905 $outputlangs = $langs;
908 $newlang =
GETPOST(
'lang_id',
'aZ09');
911 $newlang =
$object->thirdparty->default_lang;
913 if (!empty($newlang)) {
915 $outputlangs->setDefaultLang($newlang);
920 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
925 } elseif ($action ==
'reopen' && $user->hasRight(
'contrat',
'creer')) {
926 $result =
$object->reopen($user);
930 } elseif ($action ==
'confirm_close' && $confirm ==
'yes' && $permissiontodisable) {
932 $result =
$object->closeAll($user);
936 } elseif ($action ==
'confirm_activate' && $confirm ==
'yes' && $permissiontoactivate) {
939 $comment =
GETPOST(
'comment',
'alpha');
944 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $permissiontodelete) {
945 $result =
$object->delete($user);
947 header(
"Location: list.php?restore_lastsearch_values=1");
952 } elseif ($action ==
'confirm_move' && $confirm ==
'yes' && $permissiontoedit) {
955 $result = $contractline->fetch(
GETPOSTINT(
'lineid'));
956 $contractline->fk_contrat =
GETPOSTINT(
'newcid');
957 $result = $contractline->update($user, 1);
959 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
965 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"RefNewContract")),
null,
'errors');
967 } elseif ($action ==
'update_extras' && $permissiontoeditextra) {
970 $attribute =
GETPOST(
'attribute',
'aZ09');
973 $ret = $extrafields->setOptionalsFromPost(
null, $object, $attribute);
980 $result =
$object->updateExtraField($attribute,
'CONTRACT_MODIFY');
988 $action =
'edit_extras';
990 } elseif ($action ==
'setref_supplier' && $permissiontoadd) {
994 $result =
$object->setValueFrom(
'ref_supplier',
GETPOST(
'ref_supplier',
'alpha'),
'',
null,
'text',
'', $user,
'CONTRACT_MODIFY');
997 $action =
'editref_supplier';
999 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1003 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1006 } elseif ($action ==
'setref_customer' && $permissiontoadd) {
1010 $result =
$object->setValueFrom(
'ref_customer',
GETPOST(
'ref_customer',
'alpha'),
'',
null,
'text',
'', $user,
'CONTRACT_MODIFY');
1013 $action =
'editref_customer';
1015 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1019 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1022 } elseif ($action ==
'setref' && $permissiontoadd) {
1024 $result =
$object->fetch($id);
1031 $result =
$object->setValueFrom(
'ref',
GETPOST(
'ref',
'alpha'),
'',
null,
'text',
'', $user,
'CONTRACT_MODIFY');
1034 $action =
'editref';
1036 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
1043 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1047 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1050 } elseif ($action ==
'setdate_contrat' && $permissiontoadd) {
1052 $result =
$object->fetch($id);
1057 $result =
$object->setValueFrom(
'date_contrat', $datacontrat,
'',
null,
'date',
'', $user,
'CONTRACT_MODIFY');
1060 $action =
'editdate_contrat';
1062 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1066 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1072 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1076 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1079 $triggersendname =
'CONTRACT_SENTBYMAIL';
1081 $mode =
'emailfromcontract';
1082 $trackid =
'con'.$object->id;
1083 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1087 if ($action ==
'addcontact' && $user->hasRight(
'contrat',
'creer')) {
1090 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1093 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1096 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1097 $langs->load(
"errors");
1098 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1103 } elseif ($action ==
'swapstatut' && $user->hasRight(
'contrat',
'creer')) {
1106 } elseif ($action ==
'deletecontact' && $user->hasRight(
'contrat',
'creer')) {
1111 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1120 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $user->hasRight(
'contrat',
'creer')) {
1122 setEventMessages($langs->trans(
"NoCloneOptionsSpecified"),
null,
'errors');
1125 $result =
$object->createFromClone($user, $socid);
1127 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
1130 if (count(
$object->errors) > 0) {
1145$title =
$object->ref.
" - ".$langs->trans(
'Contract');
1146if ($action ==
'create') {
1147 $title = $langs->trans(
"NewContract");
1149$help_url =
'EN:Module_Contracts|FR:Module_Contrat|ES:Contratos_de_servicio';
1151llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-contrat page-card');
1162if (substr($module, 0, 13) ==
'mod_contract_' && substr($module, -3) ==
'php') {
1163 $module = substr($module, 0,
dol_strlen($module) - 4);
1166$modCodeContract =
null;
1168 $modCodeContract =
new $module();
1170 '@phan-var-force ModelNumRefContracts $modCodeContract';
1174if ($action ==
'create') {
1180 $soc->fetch($socid);
1186 $element = $subelement =
GETPOST(
'origin');
1187 if (preg_match(
'/^([^_]+)_([^_]+)/i',
GETPOST(
'origin'), $regs)) {
1188 $element = $regs[1];
1189 $subelement = $regs[2];
1192 if ($element ==
'project') {
1196 if ($element ==
'order' || $element ==
'commande') {
1197 $element = $subelement =
'commande';
1199 if ($element ==
'propal') {
1200 $element =
'comm/propal';
1201 $subelement =
'propal';
1203 if ($element ==
'invoice' || $element ==
'facture') {
1204 $element =
'compta/facture';
1205 $subelement =
'facture';
1208 if ($element ==
'facturerec' || $element ==
'facture_rec') {
1209 $element =
'compta/facture';
1210 $subelement =
'facture-rec';
1211 $classname =
'FactureRec';
1213 if ($element ==
'facture_fourn_rec' || $element ==
'invoice_supplier_rec') {
1215 $subelement =
'fournisseur.facture-rec';
1216 $classname =
'FactureFournisseurRec';
1221 if (empty($classname)) {
1222 $classname = ucfirst($subelement);
1224 $objectsrc =
new $classname(
$db);
1225 '@phan-var-force Commande|Propal|Facture $objectsrc';
1226 $objectsrc->fetch($originid);
1227 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1228 $objectsrc->fetch_lines();
1230 $objectsrc->fetch_thirdparty();
1233 $objectsrc->fetch_optionals();
1234 $object->array_options = $objectsrc->array_options;
1236 $projectid = (int) $objectsrc->fk_project;
1238 $soc = $objectsrc->thirdparty;
1240 $note_private = (!empty($objectsrc->note_private) ? $objectsrc->note_private :
'');
1241 $note_public = (!empty($objectsrc->note_public) ? $objectsrc->note_public :
'');
1244 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
1248 $note_private =
GETPOST(
"note_private",
"alpha");
1249 $note_public =
GETPOST(
"note_public",
"alpha");
1254 print
'<form name="form_contract" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1255 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1256 print
'<input type="hidden" name="action" value="add">';
1257 print
'<input type="hidden" name="socid" value="'.$soc->id.
'">'.
"\n";
1258 print
'<input type="hidden" name="remise_percent" value="0">';
1259 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1263 print
'<table class="border centpercent">';
1266 if (empty($modCodeContract->code_auto)) {
1267 print
'<tr><td class="titlefield fieldrequired">'.$langs->trans(
'Ref').
'</td><td>';
1271 $tmpcode =
'<input name="ref" class="maxwidth100" maxlength="128" value="'.dol_escape_htmltag(
GETPOST(
'ref',
'alpha')).
'">';
1279 print
'<tr><td>'.$langs->trans(
'RefCustomer').
'</td>';
1280 print
'<td><input type="text" class="maxwidth150" name="ref_customer" id="ref_customer" value="'.dol_escape_htmltag(
GETPOST(
'ref_customer',
'alpha')).
'"></td></tr>';
1284 print
'<tr><td>'.$langs->trans(
'RefSupplier').
'</td>';
1285 print
'<td><input type="text" class="maxwidth150" name="ref_supplier" id="ref_supplier" value="'.dol_escape_htmltag(
GETPOST(
'ref_supplier',
'alpha')).
'"></td></tr>';
1290 print
'<td class="fieldrequired">'.$langs->trans(
'ThirdParty').
'</td>';
1293 print $soc->getNomUrl(1);
1294 print
'<input type="hidden" name="socid" value="'.$soc->id.
'">';
1298 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1299 print $form->select_company(
'',
'socid',
'',
'SelectThirdParty', 1, 0, array(), 0,
'minwidth150 widthcentpercentminusxx maxwidth500');
1300 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>';
1307 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1308 if ($soc->remise_percent) {
1309 print $langs->trans(
"CompanyHasRelativeDiscount", $soc->remise_percent).
' ';
1311 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoRelativeDiscount").
'. </span>';
1313 $absolute_discount = $soc->getAvailableDiscounts();
1314 if ($absolute_discount) {
1315 print $langs->trans(
"CompanyHasAbsoluteDiscount",
price($absolute_discount), $langs->trans(
"Currency".$conf->currency)).
'.';
1317 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoAbsoluteDiscount").
'.</span>';
1323 print
'<tr><td class="nowrap"><span class="fieldrequired">'.$langs->trans(
"TypeContact_contrat_internal_SALESREPFOLL").
'</span></td><td>';
1324 print
img_picto(
'',
'user',
'class="pictofixedwidth"');
1325 print $form->select_dolusers(
GETPOST(
"commercial_suivi_id") ?
GETPOST(
"commercial_suivi_id") : $user->id,
'commercial_suivi_id', 1, null);
1329 print
'<tr><td class="nowrap"><span class="fieldrequired">'.$langs->trans(
"TypeContact_contrat_internal_SALESREPSIGN").
'</span></td><td>';
1330 print
img_picto(
'',
'user',
'class="pictofixedwidth"');
1331 print $form->select_dolusers(
GETPOST(
"commercial_signature_id") ?
GETPOST(
"commercial_signature_id") : $user->id,
'commercial_signature_id', 1, null);
1334 print
'<tr><td><span class="fieldrequired">'.$langs->trans(
"Date").
'</span></td><td>';
1335 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1336 print $form->selectDate($datecontrat,
'', 0, 0, 0,
"contrat");
1341 $langs->load(
'projects');
1345 print
'<tr><td>'.$langs->trans(
"Project").
'</td><td>';
1346 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
1347 $formproject->select_projects(($soc->id > 0 ? $soc->id : -1), $projectid,
"projectid", 0, 0, 1, 1, 0, 0, 0,
'', 0, 0,
'minwidth150 maxwidth300 widthcentpercentminusxx');
1348 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>';
1353 print
'<tr><td>'.$langs->trans(
"NotePublic").
'</td><td class="tdtop">';
1354 $doleditor =
new DolEditor(
'note_public', (
string) $note_public,
'', 100,
'dolibarr_notes',
'In',
true,
true, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1355 print $doleditor->Create(1);
1359 if (empty($user->socid)) {
1360 print
'<tr><td>'.$langs->trans(
"NotePrivate").
'</td><td class="tdtop">';
1361 $doleditor =
new DolEditor(
'note_private', (
string) $note_private,
'', 100,
'dolibarr_notes',
'In',
true,
true, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1362 print $doleditor->Create(1);
1367 $parameters = array(
'objectsrc' => $objectsrc,
'colspan' =>
' colspan="3"',
'cols' =>
'3');
1368 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
1369 print $hookmanager->resPrint;
1372 if (empty($reshook)) {
1373 print
$object->showOptionals($extrafields,
'create', $parameters);
1380 print $form->buttonsSaveCancel(
"CreateDraft");
1382 if (is_object($objectsrc)) {
1383 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1384 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1387 print
'<br>'.$langs->trans(
"Note").
': '.$langs->trans(
"OnlyLinesWithTypeServiceAreUsed");
1401 $result =
$object->fetch_lines();
1406 $nbofservices = count(
$object->lines);
1409 $author->fetch(
$object->user_author_id);
1411 $commercial_signature =
new User(
$db);
1412 $commercial_signature->fetch(
$object->commercial_signature_id);
1414 $commercial_suivi =
new User(
$db);
1415 $commercial_suivi->fetch(
$object->commercial_suivi_id);
1422 print
dol_get_fiche_head($head, $hselected, $langs->trans(
"Contract"), -1,
'contract', 0,
'',
'', 0,
'', 1);
1425 if ($action ==
'delete') {
1427 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"DeleteAContract"), $langs->trans(
"ConfirmDeleteAContract"),
"confirm_delete",
'', 0, 1);
1428 } elseif ($action ==
'valid') {
1430 $ref = substr(
$object->ref, 1, 4);
1431 if ($ref ==
'PROV' && !empty($modCodeContract->code_auto)) {
1436 $text = $langs->trans(
'ConfirmValidateContract', $numref);
1437 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ValidateAContract"), $text,
"confirm_valid",
'', 0, 1);
1438 } elseif ($action ==
'close') {
1440 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"CloseAContract"), $langs->trans(
"ConfirmCloseContract"),
"confirm_close",
'', 0, 1);
1441 } elseif ($action ==
'activate') {
1442 $formquestion = array(
1443 array(
'type' =>
'date',
'name' =>
'd_start',
'label' => $langs->trans(
"DateServiceActivate"),
'value' =>
dol_now()),
1444 array(
'type' =>
'date',
'name' =>
'd_end',
'label' => $langs->trans(
"DateEndPlanned"), 0 =>
'', 1 =>
''),
1445 array(
'type' =>
'text',
'name' =>
'comment',
'label' => $langs->trans(
"Comment"),
'value' =>
'', 0 =>
'', 1 =>
'',
'class' =>
'minwidth300',
'moreattr' =>
'autofocus')
1447 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ActivateAllOnContract"), $langs->trans(
"ConfirmActivateAllOnContract"),
"confirm_activate", $formquestion,
'yes', 1, 300);
1448 } elseif ($action ==
'clone') {
1449 $filter =
'(s.client:IN:1,2,3) OR (s.fournisseur:=:1)';
1451 $formquestion = array(array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter)));
1452 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneContract',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
1453 } elseif ($action ==
'sign') {
1454 $text = $langs->trans(
'ConfirmSignContract');
1456 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1459 $text .= $notify->confirmMessage(
'CONTRACT_MODIFY',
$object->socid, $object);
1464 'name' =>
'signed_status',
1465 'label' =>
'<span class="fieldrequired">'.$langs->trans(
'SignStatus').
'</span>',
1466 'values' =>
$object->getSignedStatusLocalisedArray()
1468 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'SignContract'), $text,
'confirm_sign', $formquestion, 0, 1);
1469 } elseif ($action ==
'unsign') {
1470 $text = $langs->trans(
'ConfirmUnsignContract');
1472 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1475 $text .= $notify->confirmMessage(
'CONTRACT_MODIFY',
$object->socid, $object);
1477 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'UnsignContract'), $text,
'confirm_unsign',
'', 0, 1);
1482 $parameters = array(
1483 'formConfirm' => $formconfirm,
1488 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
1489 if (empty($reshook)) {
1490 $formconfirm .= $hookmanager->resPrint;
1491 } elseif ($reshook > 0) {
1492 $formconfirm = $hookmanager->resPrint;
1500 if (
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'contrat',
'creer')) {
1501 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="POST">';
1502 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1503 print
'<input type="hidden" name="action" value="setremise">';
1504 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1509 $linkback =
'<a href="'.DOL_URL_ROOT.
'/contrat/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1513 if (!empty($modCodeContract->code_auto)) {
1516 $morehtmlref .= $form->editfieldkey(
"",
'ref',
$object->ref, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 3);
1517 $morehtmlref .= $form->editfieldval(
"",
'ref',
$object->ref, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'',
null,
'2');
1520 $morehtmlref .=
'<div class="refidno">';
1522 $morehtmlref .= $form->editfieldkey(
"RefCustomer",
'ref_customer',
$object->ref_customer, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 1);
1523 $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');
1525 $morehtmlref .=
'<br>';
1526 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 1);
1527 $morehtmlref .= $form->editfieldval(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'',
null,
null,
'', 1,
'getFormatedSupplierRef');
1529 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1);
1531 $morehtmlref .=
' <span class="otherlink valignmiddle">(<a href="'.DOL_URL_ROOT.
'/contrat/list.php?socid='.((int)
$object->thirdparty->id).
'">'.$langs->trans(
"OtherContracts").
'</a>)</span>';
1535 $langs->load(
"projects");
1536 $morehtmlref .=
'<br>';
1537 if ($permissiontoadd) {
1538 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
1539 if ($action !=
'classify') {
1540 $morehtmlref .=
'<a class="editfielda" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'action' =>
'classify',
'id' => ((
int)
$object->id)],
true).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1542 $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');
1544 if (!empty(
$object->fk_project)) {
1546 $proj->fetch(
$object->fk_project);
1547 $morehtmlref .= $proj->getNomUrl(1);
1549 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
1554 $morehtmlref .=
'</div>';
1557 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'none', $morehtmlref);
1560 print
'<div class="fichecenter">';
1561 print
'<div class="fichehalfleft">';
1562 print
'<div class="underbanner clearboth"></div>';
1564 print
'<table class="border centpercent tableforfield">';
1567 print
'<tr><td class="titlefield">'.$langs->trans(
'Discount').
'</td><td colspan="3">';
1568 if (
$object->thirdparty->remise_percent) {
1569 print $langs->trans(
"CompanyHasRelativeDiscount",
$object->thirdparty->remise_percent).
'. ';
1571 print
'<span class="hideonsmartphone opacitymedium">'.$langs->trans(
"CompanyHasNoRelativeDiscount").
'. </span>';
1573 $absolute_discount =
$object->thirdparty->getAvailableDiscounts();
1574 if ($absolute_discount) {
1575 print $langs->trans(
"CompanyHasAbsoluteDiscount",
price($absolute_discount), $langs->trans(
"Currency".$conf->currency)).
'.';
1577 print
'<span class="hideonsmartphone opacitymedium">'.$langs->trans(
"CompanyHasNoAbsoluteDiscount").
'.</span>';
1583 print
'<td class="titlefield">';
1584 print $form->editfieldkey(
"Date",
'date_contrat',
$object->date_contrat, $object, $user->hasRight(
'contrat',
'creer'));
1586 print $form->editfieldval(
"Date",
'date_contrat',
$object->date_contrat, $object, $user->hasRight(
'contrat',
'creer'),
'datehourpicker');
1591 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1596 print
'<div class="fichehalfright">';
1598 print
'<!-- amounts -->'.
"\n";
1599 print
'<div class="underbanner clearboth"></div>';
1602 print
'<div class="div-table-responsive-no-min">';
1603 print
'<table class="border tableforfield centpercent">';
1606 print
'<tr><td class="titlefield">'.
"".
'</td>';
1607 print
'<td class=right>'.$langs->trans(
'Total').
'</td>';
1608 print
'<td class=right>'.$staticcontractline->LibStatut(0, 5, 0).
'</td>';
1609 print
'<td class=right>'.$staticcontractline->LibStatut(4, 5, 0).
'</td>';
1610 print
'<td class=right>'.$staticcontractline->LibStatut(4, 5, 1).
'</td>';
1611 print
'<td class=right>'.$staticcontractline->LibStatut(5, 5, 0).
'</td>';
1614 $all=
$object->getTotalizedLines(-1, 0);
1615 $draft=
$object->getTotalizedLines(0, 0);
1616 $enabled=
$object->getTotalizedLines(4, 0);
1617 $expired=
$object->getTotalizedLines(4, 1);
1618 $close=
$object->getTotalizedLines(5, 0);
1621 print
'<tr><td class="titlefield">'.$langs->trans(
"Quantity").
'</td>';
1622 print
'<td class="right nowrap">'.($all[
'total_qty'] ?
price2num($all[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1623 print
'<td class="right">'.($draft[
'total_qty'] ?
price2num($draft[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1624 print
'<td class="right">'.($enabled[
'total_qty'] ?
price2num($enabled[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1625 print
'<td class="right">'.($expired[
'total_qty'] ?
price2num($expired[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1626 print
'<td class="right">'.($close[
'total_qty'] ?
price2num($close[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1629 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalHT").
'</td>';
1630 print
'<td class="nowraponall amountcard right">'.($all[
'total_ht'] ?
price($all[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1631 print
'<td class="nowraponall amountcard right">'.($draft[
'total_ht'] ?
price($draft[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1632 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_ht'] ?
price($enabled[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1633 print
'<td class="nowraponall amountcard right">'.($expired[
'total_ht'] ?
price($expired[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1634 print
'<td class="nowraponall amountcard right">'.($close[
'total_ht'] ?
price($close[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1637 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalVAT").
'</td>';
1638 print
'<td class="nowraponall amountcard right nowrap">'.($all[
'total_tva'] ?
price($all[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1639 print
'<td class="nowraponall amountcard right">'.($draft[
'total_tva'] ?
price($draft[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1640 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_tva'] ?
price($enabled[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1641 print
'<td class="nowraponall amountcard right">'.($expired[
'total_tva'] ?
price($expired[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1642 print
'<td class="nowraponall amountcard right">'.($close[
'total_tva'] ?
price($close[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1645 if (
$mysoc->localtax1_assuj ==
"1" || $all[
'total_localtax1'] != 0) {
1646 print
'<tr><td class="titlefield">' . $langs->trans(
"TotalLT1") .
'</td>';
1647 print
'<td class="nowraponall amountcard right nowrap">' . ($all[
'total_localtax1'] ?
price($all[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1648 print
'<td class="nowraponall amountcard right">' . ($draft[
'total_localtax1'] ?
price($draft[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1649 print
'<td class="nowraponall amountcard right">' . ($enabled[
'total_localtax1'] ?
price($enabled[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1650 print
'<td class="nowraponall amountcard right">' . ($expired[
'total_localtax1'] ?
price($expired[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1651 print
'<td class="nowraponall amountcard right">' . ($close[
'total_localtax1'] ?
price($close[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1655 if (
$mysoc->localtax2_assuj ==
"1" || $all[
'total_localtax2'] != 0) {
1656 print
'<tr><td class="titlefield">' . $langs->trans(
"TotalLT2") .
'</td>';
1657 print
'<td class="nowraponall amountcard right nowrap">' . ($all[
'total_localtax2'] ?
price($all[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1658 print
'<td class="nowraponall amountcard right">' . ($draft[
'total_localtax2'] ?
price($draft[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1659 print
'<td class="nowraponall amountcard right">' . ($enabled[
'total_localtax2'] ?
price($enabled[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1660 print
'<td class="nowraponall amountcard right">' . ($expired[
'total_localtax2'] ?
price($expired[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1661 print
'<td class="nowraponall amountcard right">' . ($close[
'total_localtax2'] ?
price($close[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1665 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalTTC").
'</td>';
1666 print
'<td class="nowraponall amountcard right nowrap">'.($all[
'total_ttc'] ?
price($all[
'total_ttc']):
'<span class="opacitymedium">0</span>').
'</td>';
1667 print
'<td class="nowraponall amountcard right">'.($draft[
'total_ttc'] ?
price($draft[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1668 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_ttc'] ?
price($enabled[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1669 print
'<td class="nowraponall amountcard right">'.($expired[
'total_ttc'] ?
price($expired[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1670 print
'<td class="nowraponall amountcard right">'.($close[
'total_ttc'] ?
price($close[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1680 print
'<div class="clearboth"></div><br>';
1682 if (
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'contrat',
'creer')) {
1689 $blocname =
'contacts';
1690 $title = $langs->trans(
'ContactsAddresses');
1691 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1695 $blocname =
'notes';
1696 $title = $langs->trans(
'Notes');
1697 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1701 $arrayothercontracts =
$object->getListOfContracts(
'others');
1709 global $inputalsopricewithtax;
1710 $inputalsopricewithtax = 1;
1715 if (
isModEnabled(
'margin') && !empty(
$object->element) && in_array(
$object->element, array(
'facture',
'propal',
'commande'))) {
1719 $parameters = array(
'nbOfLines' => &$nbofservices);
1720 $reshook = $hookmanager->executeHooks(
'printObjectLinesBlock', $parameters, $object, $action);
1721 if (empty($reshook)) {
1725 print
'<div id="contrat-lines-container" id="contractlines" data-contractid="'.$object->id.
'" data-element="'.
$object->element.
'" >';
1726 while ($cursorline <= $nbofservices) {
1727 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.
'" >';
1728 print
'<form name="update" id="addproduct" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="post">';
1729 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1730 print
'<input type="hidden" name="action" value="updateline">';
1731 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1732 print
'<input type="hidden" name="elrowid" value="'.$object->lines[$cursorline - 1]->id.
'">';
1733 print
'<input type="hidden" name="fournprice" value="'.(!empty(
$object->lines[$cursorline - 1]->fk_fournprice) ?
$object->lines[$cursorline - 1]->fk_fournprice : 0).
'">';
1736 print
'<div class="div-table-responsive-no-min">';
1737 print
'<table class="notopnoleftnoright allwidth tableforservicepart1 centpercent">';
1739 $sql =
"SELECT cd.rowid, cd.statut, cd.label as label_det, cd.fk_product, cd.product_type, cd.description, cd.qty,";
1740 $sql .=
" cd.tva_tx, cd.vat_src_code, cd.remise_percent, cd.info_bits, cd.subprice, cd.multicurrency_subprice,";
1741 $sql .=
" cd.date_ouverture_prevue as date_start, cd.date_ouverture as date_start_real,";
1742 $sql .=
" cd.date_fin_validite as date_end, cd.date_cloture as date_end_real,";
1743 $sql .=
" cd.commentaire as comment, cd.fk_product_fournisseur_price as fk_fournprice, cd.buy_price_ht as pa_ht,";
1744 $sql .=
" cd.fk_unit,";
1745 $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";
1746 $sql .=
" ,cd.rang";
1747 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contratdet as cd";
1748 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON cd.fk_product = p.rowid";
1749 $sql .=
" WHERE cd.rowid = ".((int)
$object->lines[$cursorline - 1]->id);
1751 $result =
$db->query($sql);
1756 $objp =
$db->fetch_object($result);
1759 print
'<tr class="liste_titre'.($cursorline ?
' liste_titre_add' :
'').
'">';
1760 print
'<td>'.$langs->trans(
"ServiceNb", $cursorline).
'</td>';
1761 print
'<td width="80" class="center">'.$langs->trans(
"VAT").
'</td>';
1762 print
'<td width="80" class="right">'.$langs->trans(
"PriceUHT").
'</td>';
1766 print
'<td width="30" class="center">'.$langs->trans(
"Qty").
'</td>';
1768 print
'<td width="30" class="left">'.$langs->trans(
"Unit").
'</td>';
1770 print
'<td width="50" class="right">'.$langs->trans(
"ReductionShort").
'</td>';
1772 print
'<td width="50" class="right">'.$langs->trans(
"BuyingPrice").
'</td>';
1776 if ($nbofservices > 1 &&
$conf->browser->layout !=
'phone' && $user->hasRight(
'contrat',
'creer')) {
1777 print
'<td width="30" class="linecolmove tdlineupdown center">';
1778 if ($cursorline > 1) {
1779 print
'<a class="lineupdown reposition paddingrightonly paddingleftonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=up&token='.
newToken().
'&rowid='.$objp->rowid.
'">';
1780 echo
img_up(
'default', 0,
'imgupforline');
1783 if ($cursorline < $nbofservices) {
1784 print
'<a class="lineupdown reposition paddingrightonly paddingleftonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=down&token='.
newToken().
'&rowid='.$objp->rowid.
'">';
1785 echo
img_down(
'default', 0,
'imgdownforline');
1790 print
'<td width="30"> </td>';
1798 if ($action !=
'editline' || $idline != $objp->rowid) {
1800 if (
getDolGlobalString(
'CONTRACT_HIDE_CLOSED_SERVICES_BY_DEFAULT') && $objp->statut == ContratLigne::STATUS_CLOSED && $action !=
'showclosedlines') {
1801 $moreparam =
'style="display: none;"';
1805 $line->id = $objp->rowid;
1809 print
'<tr class="tdtop oddeven" '.$moreparam.
'>';
1812 print
'<td class="linecoldescription minwidth300imp">';
1814 print
'<div id="line_'.$line->rowid.
'"></div>';
1815 if ($objp->fk_product > 0) {
1816 $productstatic->id = $objp->fk_product;
1817 $productstatic->type = $objp->ptype;
1818 $productstatic->ref = $objp->pref;
1819 $productstatic->entity = $objp->pentity;
1820 $productstatic->label = $objp->plabel;
1821 $productstatic->status = $objp->tosell;
1822 $productstatic->status_buy = $objp->tobuy;
1823 $productstatic->status_batch = $objp->tobatch;
1825 $text = $productstatic->getNomUrl(1,
'', 32);
1826 if ($objp->plabel) {
1828 $text .= $objp->plabel;
1830 $description = $objp->description;
1833 print (!empty($line->fk_parent_line) ?
img_picto(
'',
'rightarrow.png') :
'') . $text;
1835 print $form->textwithpicto(
'', $description);
1838 print $form->textwithtooltip($text, $description, 3, 0,
'',
'', 0, (!empty($line->fk_parent_line) ?
img_picto(
'',
'rightarrow.png') :
''));
1842 if ($line->fk_product > 0 &&
getDolGlobalInt(
'PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) {
1843 print (!empty($line->description) && $line->description != $line->plabel) ? (($line->date_start || $line->date_end) ?
'' :
'<br>').
'<br>'.
dol_htmlentitiesbr($line->
description) :
'';
1851 print
'<td class="center">';
1852 print
vatrate($objp->tva_tx.($objp->vat_src_code ? (
' ('.$objp->vat_src_code.
')') :
''), true, $objp->info_bits);
1855 print
'<td class="right">'.($objp->subprice !=
'' ?
price($objp->subprice) :
'').
"</td>\n";
1861 print
'<td class="center">'.$objp->qty.
'</td>';
1864 print
'<td class="left">'.$object->lines[$cursorline - 1]->getLabelOfUnit(
'long', $langs).
'</td>';
1867 if ($objp->remise_percent > 0) {
1868 print
'<td class="right">'.$objp->remise_percent.
"%</td>\n";
1870 print
'<td> </td>';
1875 print
'<td class="right nowraponall">'.price($objp->pa_ht).
'</td>';
1879 print
'<td class="nowraponall right">';
1880 if ($user->hasRight(
'contrat',
'creer') && is_array($arrayothercontracts) && count($arrayothercontracts) && (
$object->status >= 0)) {
1881 print
'<!-- link to move service line into another contract -->';
1882 print
'<a class="reposition marginrightonly" style="padding-left: 5px;" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=move&token='.
newToken().
'&elrowid='.$objp->rowid.
'">';
1883 print
img_picto($langs->trans(
"MoveToAnotherContract"),
'uparrow');
1886 if ($user->hasRight(
'contrat',
'creer') && (
$object->statut >= 0)) {
1887 print
'<a class="reposition marginrightonly editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=editline&token='.
newToken().
'&elrowid='.$objp->rowid.
'">';
1891 if ($user->hasRight(
'contrat',
'creer') && (
$object->statut >= 0)) {
1892 print
'<a class="reposition marginrightonly" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=deleteline&token='.
newToken().
'&elrowid='.$objp->rowid.
'">';
1909 if ($objp->subprice >= 0) {
1910 print
'<tr class="oddeven" '.$moreparam.
'>';
1911 print
'<td colspan="'.$colspan.
'">';
1914 print $langs->trans(
"DateStartPlanned").
': ';
1915 if ($objp->date_start) {
1918 if ($objp->statut == 0 &&
$db->jdate($objp->date_start) < ($now -
$conf->contrat->services->inactifs->warning_delay)) {
1919 $warning_delay =
$conf->contrat->services->inactifs->warning_delay / 3600 / 24;
1920 $textlate = $langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($warning_delay) >= 0 ?
'+' :
'').ceil($warning_delay).
' '.$langs->trans(
"days");
1921 print
" ".img_warning($textlate);
1924 print $langs->trans(
"Unknown");
1926 print
' - ';
1927 print $langs->trans(
"DateEndPlanned").
': ';
1928 if ($objp->date_end) {
1930 if ($objp->statut == 4 &&
$db->jdate($objp->date_end) < ($now -
$conf->contrat->services->expires->warning_delay)) {
1931 $warning_delay =
$conf->contrat->services->expires->warning_delay / 3600 / 24;
1932 $textlate = $langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($warning_delay) >= 0 ?
'+' :
'').ceil($warning_delay).
' '.$langs->trans(
"days");
1933 print
" ".img_warning($textlate);
1936 print $langs->trans(
"Unknown");
1944 if (is_array($extralabelslines) && count($extralabelslines) > 0) {
1946 $line->id = $objp->rowid;
1947 $line->fetch_optionals();
1948 print $line->showOptionals($extrafields,
'view', array(
'class' =>
'oddeven',
'style' => $moreparam,
'colspan' => $colspan,
'tdclass' =>
'notitlefieldcreate'),
'',
'',
'1');
1953 print
'<tr class="oddeven">';
1955 $currentLineProductId =
GETPOSTISSET(
'idprod') ?
GETPOST(
'idprod') : (!empty(
$object->lines[$cursorline - 1]->fk_product) ?
$object->lines[$cursorline - 1]->fk_product : 0);
1956 if ($objp->fk_product > 0) {
1957 $canchangeproduct = 1;
1960 if (empty($canchangeproduct)) {
1961 $productstatic->id = $objp->fk_product;
1962 $productstatic->type = $objp->ptype;
1963 $productstatic->ref = $objp->pref;
1964 $productstatic->entity = $objp->pentity;
1965 print $productstatic->getNomUrl(1,
'', 32);
1966 print $objp->label ?
' - '.dol_trunc($objp->label, 32) :
'';
1967 print
'<input type="hidden" name="idprod" value="'.$currentLineProductId.
'">';
1969 $senderissupplier = 0;
1970 if (empty($senderissupplier)) {
1976 print $form->select_produits($currentLineProductId,
'idprod', $filtertype, 0, 0, 1, 2,
'', 0, array(), 0, 1, 0,
'minwidth250onall maxwidth500 widthcentpercentminusx');
1978 $form->select_produits_fournisseurs($currentLineProductId,
'idprod');
1983 print $objp->label ? $objp->label.
'<br>' :
'';
1984 print
'<input type="hidden" name="idprod" value="'.$currentLineProductId.
'">';
1988 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1993 $doleditor =
new DolEditor(
'product_desc', (
GETPOSTISSET(
'product_desc') ?
GETPOST(
'product_desc') : $objp->
description),
'', 92,
'dolibarr_details',
'', false, true,
getDolGlobalInt(
'FCKEDITOR_ENABLE_DETAILS'), $nbrows,
'90%');
1994 $doleditor->Create();
1999 print
'<td class="right">';
2000 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);
2004 print
'<td class="right"><input class="width50" type="text" name="elprice" value="'.(GETPOSTISSET(
'elprice') ?
GETPOST(
'elprice') :
price($objp->subprice)).
'"></td>';
2012 print
'<td class="center"><input size="2" type="text" name="elqty" value="'.(GETPOSTISSET(
'elqty') ?
GETPOST(
'elqty') : $objp->qty).
'"></td>';
2016 print
'<td class="left">';
2022 print
'<td class="nowraponall right"><input size="1" type="text" name="elremise_percent" value="'.(GETPOSTISSET(
'elremise_percent') ?
GETPOST(
'elremise_percent') : $objp->remise_percent).
'">%</td>';
2024 if (!empty($usemargins)) {
2025 print
'<td class="right">';
2026 if ($objp->fk_product) {
2027 print
'<select id="fournprice" name="fournprice"></select>';
2029 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>';
2031 print
'<td class="center">';
2032 print
'<input type="submit" class="button margintoponly marginbottomonly" name="save" value="'.$langs->trans(
"Modify").
'">';
2033 print
'<br><input type="submit" class="button margintoponly marginbottomonly button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2046 print
'<tr class="oddeven">';
2047 print
'<td colspan="'.$colspan.
'">';
2048 print $langs->trans(
"DateStartPlanned").
' ';
2049 print $form->selectDate(
$db->jdate($objp->date_start),
"date_start_update", $usehm, $usehm, (
$db->jdate($objp->date_start) > 0 ? 0 : 1),
"update");
2050 print
' '.$langs->trans(
"DateEndPlanned").
' ';
2051 print $form->selectDate(
$db->jdate($objp->date_end),
"date_end_update", $usehm, $usehm, (
$db->jdate($objp->date_end) > 0 ? 0 : 1),
"update");
2055 if (is_array($extralabelslines) && count($extralabelslines) > 0) {
2057 $line->id = $objp->rowid;
2058 $line->fetch_optionals();
2060 print $line->showOptionals($extrafields,
'edit', array(
'style' =>
'class="oddeven"',
'colspan' => $colspan,
'tdclass' =>
'notitlefieldcreate'),
'',
'',
'1');
2071 if (
getDolGlobalString(
'CONTRACT_HIDE_CLOSED_SERVICES_BY_DEFAULT') &&
$object->lines[$cursorline - 1]->statut == ContratLigne::STATUS_CLOSED && $action !=
'showclosedlines') {
2072 $moreparam =
'style="display: none;"';
2083 print
'<tr class="oddeven" '.$moreparam.
'>';
2084 print
'<td class="tdhrthin" colspan="'.$colspan.
'"><hr class="opacitymedium tdhrthin"></td>';
2097 if ($action ==
'deleteline' && !$cancel && $user->hasRight(
'contrat',
'creer') &&
$object->lines[$cursorline - 1]->id == $idline) {
2098 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".((
int)
$object->id).
"&lineid=".((
int) $idline), $langs->trans(
"DeleteContractLine"), $langs->trans(
"ConfirmDeleteContractLine"),
"confirm_deleteline",
'', 0, 1);
2099 if ($ret ==
'html') {
2100 print
'<table class="notopnoleftnoright centpercent"><tr class="oddeven" height="6"><td></td></tr></table>';
2107 if ($action ==
'move' && !$cancel && $user->hasRight(
'contrat',
'creer') &&
$object->lines[$cursorline - 1]->id == $idline) {
2108 $arraycontractid = array();
2109 foreach ($arrayothercontracts as $contractcursor) {
2110 $arraycontractid[$contractcursor->id] = $contractcursor->ref;
2114 $formquestion = array(
2115 'text' => $langs->trans(
"ConfirmMoveToAnotherContractQuestion"),
2116 0 => array(
'type' =>
'select',
'name' =>
'newcid',
'values' => $arraycontractid));
2118 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".((
int)
$object->id).
"&lineid=".((
int) $idline), $langs->trans(
"MoveToAnotherContract"), $langs->trans(
"ConfirmMoveToAnotherContract"),
"confirm_move", $formquestion,
'yes');
2119 print
'<table class="notopnoleftnoright centpercent"><tr class="oddeven" height="6"><td></td></tr></table>';
2124 print
'<table class="notopnoleftnoright tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2126 print
'<tr class="oddeven" '.$moreparam.
'>';
2127 print
'<td><span class="valignmiddle hideonsmartphone">'.$langs->trans(
"ServiceStatus").
':</span> '.
$object->lines[$cursorline - 1]->getLibStatut(4).
'</td>';
2128 print
'<td width="30" class="right">';
2129 if ($user->socid == 0) {
2130 if (
$object->status > 0 && $action !=
'activateline' && $action !=
'unactivateline' && is_object($objp)) {
2131 $tmpaction =
'activateline';
2132 $tmpactionpicto =
'play';
2133 $tmpactiontext = $langs->trans(
"Activate");
2134 if ($objp->statut == 4) {
2135 $tmpaction =
'unactivateline';
2136 $tmpactionpicto =
'playstop.png';
2137 $tmpactiontext = $langs->trans(
"Disable");
2139 if (($tmpaction ==
'activateline' && $user->hasRight(
'contrat',
'activer')) || ($tmpaction ==
'unactivateline' && $user->hasRight(
'contrat',
'desactiver'))) {
2140 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&ligne='.
$object->lines[$cursorline - 1]->id.
'&action='.$tmpaction.
'&token='.
newToken().
'">';
2141 print
img_picto($tmpactiontext, $tmpactionpicto);
2149 print
'<tr class="oddeven" '.$moreparam.
'>';
2153 if (!$objp->date_start_real) {
2154 print $langs->trans(
"DateStartReal").
': ';
2155 if ($objp->date_start_real) {
2158 print $langs->trans(
"ContractStatusNotRunning");
2162 if ($objp->date_start_real && !$objp->date_end_real) {
2163 print $langs->trans(
"DateStartReal").
': ';
2167 if ($objp->date_start_real && $objp->date_end_real) {
2168 print $langs->trans(
"DateStartReal").
': ';
2170 print
' - ';
2171 print $langs->trans(
"DateEndReal").
': ';
2174 if (!empty($objp->comment)) {
2175 print
" - ".$objp->comment;
2179 print
'<td class="center"> </td>';
2186 if ($permissiontoactivate && $action ==
'activateline' &&
$object->lines[$cursorline - 1]->id ==
GETPOSTINT(
'ligne') && is_object($objp)) {
2187 print
'<form name="active" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
2188 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2189 print
'<input type="hidden" name="action" value="confirm_active">';
2190 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2191 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
2192 print
'<input type="hidden" name="ligne" value="'.GETPOSTINT(
'ligne').
'">';
2193 print
'<input type="hidden" name="confirm" value="yes">';
2195 print
'<table class="noborder tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2198 $dateactstart = $objp->date_start;
2201 } elseif (!$dateactstart) {
2202 $dateactstart = time();
2205 $dateactend = $objp->date_end;
2208 } elseif (!$dateactend) {
2209 if ($objp->fk_product > 0) {
2211 $product->fetch($objp->fk_product);
2212 if (!empty($product->duration_value) && !empty($product->duration_unit)) {
2213 $dateactend =
dol_time_plus_duree(time(), $product->duration_value, $product->duration_unit);
2218 print
'<tr class="oddeven">';
2219 print
'<td class="nohover">'.$langs->trans(
"DateServiceActivate").
'</td><td class="nohover">';
2220 print $form->selectDate($dateactstart,
'start', $usehm, $usehm, 0,
"active", 1, 0);
2222 print
'<td class="nohover">'.$langs->trans(
"DateEndPlanned").
'</td><td class="nohover">';
2223 print $form->selectDate($dateactend,
"end", $usehm, $usehm, 0,
"active", 1, 0);
2225 print
'<td class="center nohover">';
2230 print
'<tr class="oddeven">';
2231 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>';
2232 print
'<td class="nohover right">';
2233 print
'<input type="submit" class="button" name="activate" value="'.$langs->trans(
"Activate").
'"> ';
2234 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2244 if ($permissiontodisable && $action ==
'unactivateline' &&
$object->lines[$cursorline - 1]->id ==
GETPOSTINT(
'ligne') && is_object($objp)) {
2245 print
'<!-- Form to disabled a line -->'.
"\n";
2246 print
'<form name="confirm_closeline" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&ligne='.
$object->lines[$cursorline - 1]->id.
'" method="post">';
2247 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2248 print
'<input type="hidden" name="confirm" value="yes">';
2249 print
'<input type="hidden" name="action" value="confirm_closeline">';
2250 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2252 print
'<table class="noborder tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2255 $dateactstart = $objp->date_start_real;
2258 } elseif (!$dateactstart) {
2259 $dateactstart = time();
2262 $dateactend = $objp->date_end_real;
2265 } elseif (!$dateactend) {
2266 if ($objp->fk_product > 0) {
2268 $product->fetch($objp->fk_product);
2269 $dateactend =
dol_time_plus_duree(time(), $product->duration_value, $product->duration_unit);
2273 if ($dateactend > $now) {
2277 print
'<tr class="oddeven"><td colspan="2" class="nohover">';
2278 if ($objp->statut >= 4) {
2279 if ($objp->statut == 4) {
2280 print $langs->trans(
"DateEndReal").
' ';
2281 print $form->selectDate($dateactend,
"end", $usehm, $usehm, ($objp->date_end_real > 0 ? 0 : 1),
"closeline", 1, 1);
2285 print
'<td class="center nohover">';
2288 print
'<tr class="oddeven">';
2289 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>';
2290 print
'<td class="nohover right">';
2291 print
'<input type="submit" class="button" name="close" value="'.$langs->trans(
"Disable").
'"> ';
2292 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2307 if ($user->hasRight(
'contrat',
'creer') && (
$object->status == 0)) {
2311 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
2312 <input type="hidden" name="token" value="'.
newToken().
'">
2313 <input type="hidden" name="action" value="'.(($action !=
'editline') ?
'addline' :
'updateline').
'">
2314 <input type="hidden" name="mode" value="">
2315 <input type="hidden" name="id" value="'.
$object->id.
'">
2316 <input type="hidden" name="page_y" value="">
2317 <input type="hidden" name="backtopage" value="'.$backtopage.
'">
2320 print
'<div class="div-table-responsive-no-min">';
2321 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
2324 if ($action !=
'editline') {
2325 $forcetoshowtitlelines = 1;
2326 if (empty(
$object->multicurrency_code)) {
2332 $parameters = array();
2333 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
2337 if (empty($reshook)) {
2350 if (
GETPOST(
'modelselected')) {
2351 $action =
'presend';
2357 if ($user->socid == 0 && $action !=
'presend' && $action !=
'editline') {
2358 print
'<div class="tabsAction">';
2360 $parameters = array();
2361 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2363 if (empty($reshook)) {
2367 'class' =>
'classfortooltip'
2372 if (empty($user->socid)) {
2373 if (
$object->status == $object::STATUS_VALIDATED) {
2374 if ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'contrat',
'creer'))) {
2375 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=presend&token='.
newToken().
'&mode=init#formmailbeforetitle',
'',
true, $params);
2377 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email',
'#',
'',
false, $params);
2382 if (
$object->status == $object::STATUS_DRAFT && $nbofservices) {
2383 if ($user->hasRight(
'contrat',
'creer')) {
2384 unset($params[
'attr'][
'title']);
2385 print
dolGetButtonAction($langs->trans(
'Validate'),
'',
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken(),
'',
true, $params);
2387 $params[
'attr'][
'title'] = $langs->trans(
"NotEnoughPermissions");
2388 print
dolGetButtonAction($langs->trans(
'Validate'),
'',
'default',
'#',
'',
false, $params);
2391 if (
$object->status == $object::STATUS_VALIDATED) {
2392 if ($user->hasRight(
'contrat',
'creer')) {
2393 unset($params[
'attr'][
'title']);
2394 print
dolGetButtonAction($langs->trans(
'Modify'),
'',
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken(),
'',
true, $params);
2396 $params[
'attr'][
'title'] = $langs->trans(
"NotEnoughPermissions");
2397 print
dolGetButtonAction($langs->trans(
'Modify'),
'',
'default',
'#',
'',
false, $params);
2402 $arrayofcreatebutton = array();
2404 $arrayofcreatebutton[] = array(
2405 'url' =>
'/comm/propal/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id.
'&renewal=true',
2406 'label' => $langs->trans(
'AddProp'),
2408 'perm' => $user->hasRight(
'propale',
'creer') ?
true : false,
2414 $arrayofcreatebutton[] = array(
2415 'url' =>
'/commande/card.php?action=create&token='.
newToken().
'&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2416 'label' => $langs->trans(
'AddOrder'),
2418 'perm' => $user->hasRight(
'commande',
'creer') ?
true : false,
2423 $arrayofcreatebutton[] = array(
2424 'url' =>
'/compta/facture/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2425 'label' => $langs->trans(
'CreateBill'),
2427 'perm' => $user->hasRight(
'facture',
'creer') ?
true : false,
2432 $langs->load(
"suppliers");
2433 $arrayofcreatebutton[] = array(
2434 'url' =>
'/fourn/facture/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2435 'label' => $langs->trans(
'AddSupplierInvoice'),
2437 'perm' => $user->hasRight(
'fournisseur',
'facture',
'creer') ?
true : false,
2441 if (count($arrayofcreatebutton)) {
2442 unset($params[
'attr'][
'title']);
2443 print
dolGetButtonAction(
'', $langs->trans(
"Create"),
'default', $arrayofcreatebutton,
'',
true, $params);
2446 $arrayforbutaction = array();
2447 $arrayforbutaction[] = array(
2448 'url' =>
'/contrat/card.php?id='.
$object->id.
'&action=activate&token='.
newToken(),
2449 'label' => $langs->trans(
'ActivateAllContracts'),
2451 'perm' => (
$object->nbofservicesclosed > 0 ||
$object->nbofserviceswait > 0) ? $permissiontoactivate : -1,
2454 $arrayforbutaction[] = array(
2455 'url' =>
'/contrat/card.php?id='.
$object->id.
'&action=close&token='.
newToken(),
2456 'label' => $langs->trans(
'CloseAllContracts'),
2458 'perm' => (
$object->nbofservicesclosed < $nbofservices) ? $permissiontodisable : -1,
2462 if (count($arrayforbutaction)) {
2463 unset($params[
'attr'][
'title']);
2464 print
dolGetButtonAction(
'', $langs->trans(
"Enable").
" / ".$langs->trans(
"Close"),
'default', $arrayforbutaction,
'',
true, $params);
2468 if ($action ==
'showclosedlines') {
2469 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>';
2471 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>';
2476 if (
getDolGlobalString(
'CONTRACT_SHOW_SIGNATURE_STATUS_WITH_SERVICE_STATUS') &&
$object->status > Contrat::STATUS_DRAFT) {
2477 if (
$object->signed_status != Contrat::$SIGNED_STATUSES[
'STATUS_SIGNED_ALL']) {
2478 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>';
2480 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>';
2485 if ($user->hasRight(
'contrat',
'creer')) {
2486 unset($params[
'attr'][
'title']);
2491 unset($params[
'attr'][
'title']);
2492 print
dolGetButtonAction($langs->trans(
'Delete'),
'',
'delete', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken(),
'', $permissiontodelete, $params);
2498 if ($action !=
'presend') {
2499 print
'<div class="fichecenter"><div class="fichehalfleft">';
2506 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2507 $genallowed = $user->hasRight(
'contrat',
'lire');
2508 $delallowed = $user->hasRight(
'contrat',
'creer');
2509 $tooltipAfterComboOfModels =
'';
2511 $tooltipAfterComboOfModels = $langs->trans(
"AccordingToYourSetupTheFileWillBeConcatenated",
getDolGlobalString(
'MAIN_INFO_CONTRACT_TERMSOFSALE'));
2514 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);
2518 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'contrat'), 1);
2519 $linktoelem = $tmparray[
'linktoelem'];
2520 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
2521 print $htmltoenteralink;
2523 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
2527 print
'<br><!-- Link to sign -->';
2528 require_once DOL_DOCUMENT_ROOT.
'/core/lib/signature.lib.php';
2530 print showOnlineSignatureUrl(
'contract',
$object->ref, $object).
'<br>';
2533 print
'</div><div class="fichehalfright">';
2537 $morehtmlcenter =
'<div class="nowraponall">';
2538 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/contrat/messaging.php?id='.
$object->id);
2539 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'SeeAll'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/contrat/agenda.php?id='.
$object->id);
2540 $morehtmlcenter .=
'</div>';
2544 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2546 $somethingshown = $formactions->showactions($object,
'contract', $socid, 1,
'listactions', $MAXEVENT,
'', $morehtmlcenter);
2548 print
'</div></div>';
2552 $modelmail =
'contract';
2553 $defaulttopic =
'SendContractRef';
2554 $diroutput =
$conf->contract->multidir_output[
$object->entity ??
$conf->entity];
2555 $trackid =
'con'.$object->id;
2557 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
2569 print
"\n".
'<script type="text/javascript">'.
"\n";
2571 $(document).ready(
function() {
2572 var idprod = $(
"input[name='idprod']").val();
2573 var fournprice = $(
"input[name='fournprice']").val();
2574 var token =
'<?php echo currentToken(); ?>';
2576 $.post(
'<?php echo DOL_URL_ROOT; ?>/fourn/ajax/getSupplierPrices.php', {
2580 if (data.length > 0) {
2583 $(data).each(
function() {
2584 options +=
'<option value="'+this.
id+
'" price="'+this.price+
'"';
2585 if (fournprice > 0) {
2586 if (this.
id == fournprice) {
2587 options +=
' selected';
2588 $(
"#buying_price").val(this.price);
2592 options +=
'>'+this.label+
'</option>';
2594 options +=
'<option value=null'+(trouve?
'':
' selected')+
'><?php echo $langs->trans("InputPrice"); ?></option>';
2595 $(
"#fournprice").html(options);
2597 $(
"#buying_price").hide();
2598 $(
"#fournprice").show();
2601 $(
"#buying_price").show();
2603 $(
"#fournprice").change(
function() {
2604 var selval = $(
this).find(
'option:selected').attr(
"price");
2606 $(
"#buying_price").val(selval).hide();
2608 $(
'#buying_price').show();
2612 $(
"#fournprice").hide();
2613 $(
'#buying_price').show();
2619 $(
"#fournprice").hide();
2620 $(
'#buying_price').show();
2624 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.
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'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
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...
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_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.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
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.