39require
"../main.inc.php";
50require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
51require_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
52require_once DOL_DOCUMENT_ROOT.
'/core/lib/contract.lib.php';
53require_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
54require_once DOL_DOCUMENT_ROOT.
'/core/modules/contract/modules_contract.php';
55require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
56require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
57require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
58require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
59require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
61 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
64 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
65 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
69$langs->loadLangs(array(
"contracts",
"orders",
"companies",
"bills",
"products",
'compta',
'propal'));
71$action =
GETPOST(
'action',
'aZ09');
72$confirm =
GETPOST(
'confirm',
'alpha');
73$cancel =
GETPOST(
'cancel',
'alpha');
74$backtopage =
GETPOST(
'backtopage',
'alpha');
75$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
80$origin =
GETPOST(
'origin',
'alpha');
83$attribute =
GETPOST(
'attribute',
'aZ09');
99 $socid = $user->socid;
103$hookmanager->initHooks(array(
'contractcard',
'globalcard'));
112if ($id > 0 || !empty($ref) && $action !=
'add') {
113 $ret =
$object->fetch($id, $ref);
115 $ret =
$object->fetch_thirdparty();
123$extrafields->fetch_name_optionals_label(
$object->table_element);
126$extralabelslines = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
128$permissionnote = $user->hasRight(
'contrat',
'creer');
129$permissiondellink = $user->hasRight(
'contrat',
'creer');
130$permissiontodelete = ($user->hasRight(
'contrat',
'creer') &&
$object->status == $object::STATUS_DRAFT) || $user->hasRight(
'contrat',
'supprimer');
131$permissiontoadd = $user->hasRight(
'contrat',
'creer');
132$permissiontoedit = $permissiontoadd;
133$permissiontoactivate = $user->hasRight(
'contrat',
'activer');
134$permissiontodisable = $user->hasRight(
'contrat',
'desactiver');
135$permissiontoeditextra = $permissiontoadd;
136if (
GETPOST(
'attribute',
'aZ09') && isset($extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')])) {
138 $permissiontoeditextra =
dol_eval((
string) $extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')]);
146if (!(
$object->id > 0) && ($action ==
'view' || $action ==
'')) {
155$parameters = array(
'socid' => $socid);
156$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
160if (empty($reshook)) {
161 $backurlforlist =
dolBuildUrl(DOL_URL_ROOT .
'/contrat/list.php');
163 if (empty($backtopage) || ($cancel && empty($id))) {
164 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
165 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
166 $backtopage = $backurlforlist;
168 $backtopage =
dolBuildUrl(DOL_URL_ROOT .
'/contrat/card.php', [
'id'=> ((!empty($id) && $id > 0) ? $id :
'__ID__')]);
174 if (!empty($backtopageforcancel)) {
175 header(
"Location: ".$backtopageforcancel);
177 } elseif (!empty($backtopage)) {
178 header(
"Location: ".$backtopage);
184 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
186 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
188 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
190 if ($action ==
'confirm_active' && $confirm ==
'yes' && $permissiontoactivate) {
203 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
208 } elseif ($action ==
'confirm_sign' && $confirm ==
'yes' && $user->hasRight(
'contract',
'creer')) {
209 $result =
$object->setSignedStatus($user,
GETPOSTINT(
'signed_status'), 0,
'CONTRACT_MODIFY');
211 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id);
216 } elseif ($action ==
'confirm_unsign' && $confirm ==
'yes' && $user->hasRight(
'contract',
'creer')) {
217 $result =
$object->setSignedStatus($user, Contrat::$SIGNED_STATUSES[
'STATUS_NO_SIGNATURE'], 0,
'CONTRACT_MODIFY');
219 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id);
224 } elseif ($action ==
'confirm_closeline' && $confirm ==
'yes' && $permissiontodisable) {
231 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"DateEnd")),
null,
'errors');
236 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
244 if (
GETPOST(
'mode') ==
'predefined') {
256 $date_start_update =
'';
257 $date_end_update =
'';
258 $date_start_real_update =
'';
259 $date_end_real_update =
'';
260 if (
GETPOST(
'date_start_updatemonth') &&
GETPOST(
'date_start_updateday') &&
GETPOST(
'date_start_updateyear')) {
263 if (
GETPOST(
'date_end_updatemonth') &&
GETPOST(
'date_end_updateday') &&
GETPOST(
'date_end_updateyear')) {
266 if (
GETPOST(
'date_start_real_updatemonth') &&
GETPOST(
'date_start_real_updateday') &&
GETPOST(
'date_start_real_updateyear')) {
269 if (
GETPOST(
'date_end_real_updatemonth') &&
GETPOST(
'date_end_real_updateday') &&
GETPOST(
'date_end_real_updateyear')) {
277 if ($action ==
'add' && $user->hasRight(
'contrat',
'creer')) {
279 if (empty($datecontrat)) {
281 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Date")),
null,
'errors');
286 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ThirdParty")),
null,
'errors');
292 $ret = $extrafields->setOptionalsFromPost(
null, $object);
300 $object->date_contrat = $datecontrat;
314 if (!empty($origin) && !empty($originid)) {
316 $element = $subelement = $origin;
317 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
319 $subelement = $regs[2];
324 if ($element ==
'order') {
325 $element = $subelement =
'commande';
327 if ($element ==
'propal') {
328 $element =
'comm/propal';
329 $subelement =
'propal';
331 if ($element ==
'invoice' || $element ==
'facture') {
332 $element =
'compta/facture';
333 $subelement =
'facture';
335 if ($element ==
'facturerec' || $element ==
'facture_rec') {
337 $element =
'compta/facture';
338 $subelement =
'facture-rec';
339 $classname =
'FactureRec';
341 if ($element ==
'facture_fourn_rec' || $element ==
'invoice_supplier_rec') {
343 $subelement =
'fournisseur.facture-rec';
344 $classname =
'FactureFournisseurRec';
348 $object->origin_id = $originid;
353 $object->linked_objects = array_merge(
$object->linked_objects,
GETPOST(
'other_linked_objects',
'array:int'));
360 if (empty($classname)) {
361 $classname = ucfirst($subelement);
363 $srcobject =
new $classname(
$db);
364 '@phan-var-force Commande|Propal|Facture $srcobject';
367 $result = $srcobject->fetch(
$object->origin_id);
369 $srcobject->fetch_thirdparty();
370 $lines = $srcobject->lines;
371 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
372 $srcobject->fetch_lines();
373 $lines = $srcobject->lines;
377 $num = count($lines);
380 for ($i = 0; $i < $num; $i++) {
381 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
383 if ($product_type == 1 || (
getDolGlobalString(
'CONTRACT_SUPPORT_PRODUCTS') && in_array($product_type, array(0, 1)))) {
385 if ($lines[$i]->fk_product > 0) {
389 $prod->id = $lines[$i]->fk_product;
390 $prod->getMultiLangs();
392 $outputlangs = $langs;
394 if (
GETPOST(
'lang_id',
'aZ09')) {
395 $newlang =
GETPOST(
'lang_id',
'aZ09');
397 if (empty($newlang)) {
398 $newlang = $srcobject->thirdparty->default_lang;
400 if (!empty($newlang)) {
402 $outputlangs->setDefaultLang($newlang);
405 $label = (!empty(
$prod->multilangs[$outputlangs->defaultlang][
"libelle"])) ?
$prod->multilangs[$outputlangs->defaultlang][
"libelle"] : $lines[$i]->product_label;
407 $label = $lines[$i]->product_label;
409 $desc = ($lines[$i]->desc && $lines[$i]->desc != $lines[$i]->label) ?
dol_htmlentitiesbr($lines[$i]->desc) :
'';
415 $array_options = array();
417 if (method_exists($lines[$i],
'fetch_optionals')) {
418 $lines[$i]->fetch_optionals();
419 $array_options = $lines[$i]->array_options;
422 $txtva = $lines[$i]->vat_src_code ? $lines[$i]->tva_tx.
' ('.$lines[$i]->vat_src_code.
')' : $lines[$i]->tva_tx;
430 $lines[$i]->subprice,
435 $lines[$i]->fk_product,
436 $lines[$i]->remise_percent,
437 $lines[$i]->date_start,
438 $lines[$i]->date_end,
441 $lines[$i]->info_bits,
442 $lines[$i]->fk_fournprice,
445 (
int) $lines[$i]->fk_unit,
461 $parameters = array(
'objFrom' => $srcobject);
462 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $object, $action);
476 $result =
$object->create($user);
478 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
486 } elseif ($action ==
'classin' && $user->hasRight(
'contrat',
'creer')) {
488 } elseif ($action ==
'addline' && $user->hasRight(
'contrat',
'creer')) {
495 $price_ht_devise =
'';
497 $price_ttc_devise =
'';
499 $rang = count(
$object->lines) + 1;
501 if (
GETPOST(
'price_ht') !==
'') {
504 if (
GETPOST(
'multicurrency_price_ht') !==
'') {
507 if (
GETPOST(
'price_ttc') !==
'') {
510 if (
GETPOST(
'multicurrency_price_ttc') !==
'') {
514 if (
GETPOST(
'prod_entry_mode',
'alpha') ==
'free') {
520 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
525 $tva_tx =
GETPOST(
'tva_tx',
'alpha');
529 if (empty($remise_percent)) {
534 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Qty")),
null,
'errors');
537 if (
GETPOST(
'prod_entry_mode',
'alpha') ==
'free' && (empty($idprod) || $idprod < 0) && empty($line_desc)) {
538 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Description")),
null,
'errors');
545 setEventMessages($langs->trans(
"Error").
': '.$langs->trans(
"DateStartPlanned").
' > '.$langs->trans(
"DateEndPlanned"),
null,
'errors');
550 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
551 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
553 if (is_array($extralabelsline)) {
555 foreach ($extralabelsline as $key => $value) {
556 unset($_POST[
"options_".$key]);
565 $price_base_type =
'';
571 $prod->fetch($idprod);
580 $price_min =
$prod->price_min;
581 $price_min_ttc =
$prod->price_min_ttc;
585 $price_min =
$prod->multiprices_min[
$object->thirdparty->price_level];
586 $price_min_ttc =
$prod->multiprices_min_ttc[
$object->thirdparty->price_level];
589 require_once DOL_DOCUMENT_ROOT.
'/product/class/productcustomerprice.class.php';
593 $filter = array(
't.fk_product' => (
string)
$prod->id,
't.fk_soc' => (
string)
$object->thirdparty->id);
595 $result = $prodcustprice->fetchAll(
'',
'', 0, 0, $filter);
597 if (count($prodcustprice->lines) > 0) {
598 $date_now = (int) floor(
dol_now() / 86400) * 86400;
599 foreach ($prodcustprice->lines as $k => $custprice_line) {
600 if ($custprice_line->date_begin <= $date_now && (empty($custprice_line->date_end) || $date_now <= $custprice_line->date_end)) {
601 $price_min =
price($custprice_line->price_min);
602 $price_min_ttc =
price($custprice_line->price_min_ttc);
618 $tmpvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', $tva_tx));
619 $tmpprodvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', (
string)
$prod->tva_tx));
622 if (!empty($price_ht) || $price_ht ===
'0') {
624 $pu_ttc =
price2num((
float) $pu_ht * (1 + ((
float) $tmpvat / 100)),
'MU');
625 $price_base_type =
'HT';
626 } elseif (!empty($price_ttc) || $price_ttc ===
'0') {
628 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tmpvat / 100)),
'MU');
629 $price_base_type =
'TTC';
632 $desc =
$prod->description;
642 $fk_unit =
$prod->fk_unit;
646 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
647 if (empty($tva_tx)) {
650 $tva_tx = str_replace(
'*',
'', $tva_tx);
653 $pu_ht_devise =
price2num($price_ht_devise,
'MU');
654 $pu_ttc_devise =
price2num($price_ttc_devise,
'MU');
656 $tmpvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', $tva_tx));
659 if (!empty($price_ht) || $price_ht ===
'0') {
661 $pu_ttc =
price2num((
float) $pu_ht * (1 + ((
float) $tmpvat / 100)),
'MU');
662 $price_base_type =
'HT';
663 } elseif (!empty($price_ttc) || $price_ttc ===
'0') {
665 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tmpvat / 100)),
'MU');
666 $price_base_type =
'TTC';
674 $fk_fournprice =
GETPOST(
'fournprice');
676 $pa_ht =
GETPOST(
'buying_price');
686 if (((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !$user->hasRight(
'produit',
'ignore_price_min_advance'))
688 $object->error = $langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
706 (
int) $fk_fournprice,
717 $outputlangs = $langs;
720 $newlang =
GETPOST(
'lang_id',
'aZ09');
723 $newlang =
$object->thirdparty->default_lang;
725 if (!empty($newlang)) {
727 $outputlangs->setDefaultLang($newlang);
732 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
735 unset($_POST[
'prod_entry_mode']);
737 unset($_POST[
'qty']);
738 unset($_POST[
'type']);
739 unset($_POST[
'remise_percent']);
740 unset($_POST[
'price_ht']);
741 unset($_POST[
'multicurrency_price_ht']);
742 unset($_POST[
'price_ttc']);
743 unset($_POST[
'tva_tx']);
744 unset($_POST[
'product_ref']);
745 unset($_POST[
'product_label']);
746 unset($_POST[
'product_desc']);
747 unset($_POST[
'fournprice']);
748 unset($_POST[
'buying_price']);
749 unset($_POST[
'np_marginRate']);
750 unset($_POST[
'np_markRate']);
751 unset($_POST[
'dp_desc']);
752 unset($_POST[
'idprod']);
754 unset($_POST[
'date_starthour']);
755 unset($_POST[
'date_startmin']);
756 unset($_POST[
'date_startsec']);
757 unset($_POST[
'date_startday']);
758 unset($_POST[
'date_startmonth']);
759 unset($_POST[
'date_startyear']);
760 unset($_POST[
'date_endhour']);
761 unset($_POST[
'date_endmin']);
762 unset($_POST[
'date_endsec']);
763 unset($_POST[
'date_endday']);
764 unset($_POST[
'date_endmonth']);
765 unset($_POST[
'date_endyear']);
770 } elseif ($action ==
'updateline' && $user->hasRight(
'contrat',
'creer') && !
GETPOST(
'cancel',
'alpha')) {
774 if (!empty($date_start_update) && !empty($date_end_update) && $date_start_update > $date_end_update) {
775 setEventMessages($langs->trans(
"Error").
': '.$langs->trans(
"DateStartPlanned").
' > '.$langs->trans(
"DateEndPlanned"),
null,
'errors');
776 $action =
'editline';
782 if ($objectline->fetch($idline) < 0) {
786 $objectline->fetch_optionals();
788 $objectline->oldcopy =
dol_clone($objectline, 2);
796 if ($date_start_real_update ==
'') {
797 $date_start_real_update = $objectline->date_start_real;
799 if ($date_end_real_update ==
'') {
800 $date_end_real_update = $objectline->date_end_real;
803 $vat_rate =
GETPOST(
'eltva_tx',
'alpha');
806 if (preg_match(
'/\*/', $vat_rate)) {
811 $vat_rate = str_replace(
'*',
'', $vat_rate);
820 if (preg_match(
'/\((.*)\)/', $txtva, $reg)) {
821 $vat_src_code = $reg[1];
822 $txtva = preg_replace(
'/\s*\(.*\)/',
'', $txtva);
838 $objectline->fk_product =
GETPOSTINT(
'idprod');
839 $objectline->description =
GETPOST(
'product_desc',
'restricthtml');
842 $objectline->remise_percent = $remise_percent;
843 $objectline->tva_tx = ($txtva ? $txtva : 0);
844 $objectline->vat_src_code = $vat_src_code;
845 $objectline->localtax1_tx = is_numeric($localtax1_tx) ? $localtax1_tx : 0;
846 $objectline->localtax2_tx = is_numeric($localtax2_tx) ? $localtax2_tx : 0;
847 $objectline->date_start = $date_start_update;
848 $objectline->date_start_real = $date_start_real_update;
849 $objectline->date_end = $date_end_update;
850 $objectline->date_end_real = $date_end_real_update;
851 $objectline->user_closing_id = $user->id;
853 $objectline->pa_ht = $pa_ht;
859 $objectline->fk_unit =
null;
863 $extralabelsline = $extrafields->fetch_name_optionals_label($objectline->table_element);
864 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
866 if (is_array($array_options) && count($array_options) > 0) {
868 foreach ($array_options as $key => $value) {
869 $objectline->array_options[$key] = $array_options[$key];
875 $result = $objectline->update($user);
878 $action =
'editline';
879 $_GET[
'rowid'] =
GETPOST(
'elrowid');
889 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $user->hasRight(
'contrat',
'creer')) {
893 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
898 } elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $user->hasRight(
'contrat',
'creer')) {
899 $result =
$object->validate($user);
904 $outputlangs = $langs;
907 $newlang =
GETPOST(
'lang_id',
'aZ09');
910 $newlang =
$object->thirdparty->default_lang;
912 if (!empty($newlang)) {
914 $outputlangs->setDefaultLang($newlang);
919 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
924 } elseif ($action ==
'reopen' && $user->hasRight(
'contrat',
'creer')) {
925 $result =
$object->reopen($user);
929 } elseif ($action ==
'confirm_close' && $confirm ==
'yes' && $permissiontodisable) {
931 $result =
$object->closeAll($user);
935 } elseif ($action ==
'confirm_activate' && $confirm ==
'yes' && $permissiontoactivate) {
938 $comment =
GETPOST(
'comment',
'alpha');
943 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $permissiontodelete) {
944 $result =
$object->delete($user);
946 header(
"Location: list.php?restore_lastsearch_values=1");
951 } elseif ($action ==
'confirm_move' && $confirm ==
'yes' && $permissiontoedit) {
954 $result = $contractline->fetch(
GETPOSTINT(
'lineid'));
955 $contractline->fk_contrat =
GETPOSTINT(
'newcid');
956 $result = $contractline->update($user, 1);
958 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
964 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"RefNewContract")),
null,
'errors');
966 } elseif ($action ==
'update_extras' && $permissiontoeditextra) {
969 $attribute =
GETPOST(
'attribute',
'aZ09');
972 $ret = $extrafields->setOptionalsFromPost(
null, $object, $attribute);
979 $result =
$object->updateExtraField($attribute,
'CONTRACT_MODIFY');
987 $action =
'edit_extras';
989 } elseif ($action ==
'setref_supplier' && $permissiontoadd) {
993 $result =
$object->setValueFrom(
'ref_supplier',
GETPOST(
'ref_supplier',
'alpha'),
'',
null,
'text',
'', $user,
'CONTRACT_MODIFY');
996 $action =
'editref_supplier';
998 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1002 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1005 } elseif ($action ==
'setref_customer' && $permissiontoadd) {
1009 $result =
$object->setValueFrom(
'ref_customer',
GETPOST(
'ref_customer',
'alpha'),
'',
null,
'text',
'', $user,
'CONTRACT_MODIFY');
1012 $action =
'editref_customer';
1014 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1018 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1021 } elseif ($action ==
'setref' && $permissiontoadd) {
1023 $result =
$object->fetch($id);
1030 $result =
$object->setValueFrom(
'ref',
GETPOST(
'ref',
'alpha'),
'',
null,
'text',
'', $user,
'CONTRACT_MODIFY');
1033 $action =
'editref';
1035 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
1042 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1046 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1049 } elseif ($action ==
'setdate_contrat' && $permissiontoadd) {
1051 $result =
$object->fetch($id);
1056 $result =
$object->setValueFrom(
'date_contrat', $datacontrat,
'',
null,
'date',
'', $user,
'CONTRACT_MODIFY');
1059 $action =
'editdate_contrat';
1061 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1065 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1071 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1075 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1078 $triggersendname =
'CONTRACT_SENTBYMAIL';
1080 $mode =
'emailfromcontract';
1081 $trackid =
'con'.$object->id;
1082 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1086 if ($action ==
'addcontact' && $user->hasRight(
'contrat',
'creer')) {
1089 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1092 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1095 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1096 $langs->load(
"errors");
1097 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1102 } elseif ($action ==
'swapstatut' && $user->hasRight(
'contrat',
'creer')) {
1105 } elseif ($action ==
'deletecontact' && $user->hasRight(
'contrat',
'creer')) {
1110 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1119 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $user->hasRight(
'contrat',
'creer')) {
1121 setEventMessages($langs->trans(
"NoCloneOptionsSpecified"),
null,
'errors');
1124 $result =
$object->createFromClone($user, $socid);
1126 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
1129 if (count(
$object->errors) > 0) {
1144$title =
$object->ref.
" - ".$langs->trans(
'Contract');
1145if ($action ==
'create') {
1146 $title = $langs->trans(
"NewContract");
1148$help_url =
'EN:Module_Contracts|FR:Module_Contrat|ES:Contratos_de_servicio';
1150llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-contrat page-card');
1161if (substr($module, 0, 13) ==
'mod_contract_' && substr($module, -3) ==
'php') {
1162 $module = substr($module, 0,
dol_strlen($module) - 4);
1165$modCodeContract =
null;
1167 $modCodeContract =
new $module();
1169 '@phan-var-force ModelNumRefContracts $modCodeContract';
1173if ($action ==
'create') {
1179 $soc->fetch($socid);
1185 $element = $subelement =
GETPOST(
'origin');
1186 if (preg_match(
'/^([^_]+)_([^_]+)/i',
GETPOST(
'origin'), $regs)) {
1187 $element = $regs[1];
1188 $subelement = $regs[2];
1191 if ($element ==
'project') {
1195 if ($element ==
'order' || $element ==
'commande') {
1196 $element = $subelement =
'commande';
1198 if ($element ==
'propal') {
1199 $element =
'comm/propal';
1200 $subelement =
'propal';
1202 if ($element ==
'invoice' || $element ==
'facture') {
1203 $element =
'compta/facture';
1204 $subelement =
'facture';
1207 if ($element ==
'facturerec' || $element ==
'facture_rec') {
1208 $element =
'compta/facture';
1209 $subelement =
'facture-rec';
1210 $classname =
'FactureRec';
1212 if ($element ==
'facture_fourn_rec' || $element ==
'invoice_supplier_rec') {
1214 $subelement =
'fournisseur.facture-rec';
1215 $classname =
'FactureFournisseurRec';
1220 if (empty($classname)) {
1221 $classname = ucfirst($subelement);
1223 $objectsrc =
new $classname(
$db);
1224 '@phan-var-force Commande|Propal|Facture $objectsrc';
1225 $objectsrc->fetch($originid);
1226 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1227 $objectsrc->fetch_lines();
1229 $objectsrc->fetch_thirdparty();
1232 $objectsrc->fetch_optionals();
1233 $object->array_options = $objectsrc->array_options;
1235 $projectid = (int) $objectsrc->fk_project;
1237 $soc = $objectsrc->thirdparty;
1239 $note_private = (!empty($objectsrc->note_private) ? $objectsrc->note_private :
'');
1240 $note_public = (!empty($objectsrc->note_public) ? $objectsrc->note_public :
'');
1243 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
1247 $note_private =
GETPOST(
"note_private",
"alpha");
1248 $note_public =
GETPOST(
"note_public",
"alpha");
1253 print
'<form name="form_contract" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1254 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1255 print
'<input type="hidden" name="action" value="add">';
1256 print
'<input type="hidden" name="socid" value="'.$soc->id.
'">'.
"\n";
1257 print
'<input type="hidden" name="remise_percent" value="0">';
1258 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1262 print
'<table class="border centpercent">';
1265 print
'<tr><td class="titlefield fieldrequired">'.$langs->trans(
'Ref').
'</td><td>';
1266 if (!empty($modCodeContract->code_auto)) {
1267 $tmpcode = $langs->trans(
"Draft");
1269 $tmpcode =
'<input name="ref" class="maxwidth100" maxlength="128" value="'.dol_escape_htmltag(
GETPOST(
'ref',
'alpha')).
'">';
1275 print
'<tr><td>'.$langs->trans(
'RefCustomer').
'</td>';
1276 print
'<td><input type="text" class="maxwidth150" name="ref_customer" id="ref_customer" value="'.dol_escape_htmltag(
GETPOST(
'ref_customer',
'alpha')).
'"></td></tr>';
1279 print
'<tr><td>'.$langs->trans(
'RefSupplier').
'</td>';
1280 print
'<td><input type="text" class="maxwidth150" name="ref_supplier" id="ref_supplier" value="'.dol_escape_htmltag(
GETPOST(
'ref_supplier',
'alpha')).
'"></td></tr>';
1284 print
'<td class="fieldrequired">'.$langs->trans(
'ThirdParty').
'</td>';
1287 print $soc->getNomUrl(1);
1288 print
'<input type="hidden" name="socid" value="'.$soc->id.
'">';
1292 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1293 print $form->select_company(
'',
'socid',
'',
'SelectThirdParty', 1, 0, array(), 0,
'minwidth150 widthcentpercentminusxx maxwidth500');
1294 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>';
1301 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1302 if ($soc->remise_percent) {
1303 print $langs->trans(
"CompanyHasRelativeDiscount", $soc->remise_percent).
' ';
1305 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoRelativeDiscount").
'. </span>';
1307 $absolute_discount = $soc->getAvailableDiscounts();
1308 if ($absolute_discount) {
1309 print $langs->trans(
"CompanyHasAbsoluteDiscount",
price($absolute_discount), $langs->trans(
"Currency".$conf->currency)).
'.';
1311 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoAbsoluteDiscount").
'.</span>';
1317 print
'<tr><td class="nowrap"><span class="fieldrequired">'.$langs->trans(
"TypeContact_contrat_internal_SALESREPFOLL").
'</span></td><td>';
1318 print
img_picto(
'',
'user',
'class="pictofixedwidth"');
1319 print $form->select_dolusers(
GETPOST(
"commercial_suivi_id") ?
GETPOST(
"commercial_suivi_id") : $user->id,
'commercial_suivi_id', 1, null);
1323 print
'<tr><td class="nowrap"><span class="fieldrequired">'.$langs->trans(
"TypeContact_contrat_internal_SALESREPSIGN").
'</span></td><td>';
1324 print
img_picto(
'',
'user',
'class="pictofixedwidth"');
1325 print $form->select_dolusers(
GETPOST(
"commercial_signature_id") ?
GETPOST(
"commercial_signature_id") : $user->id,
'commercial_signature_id', 1, null);
1328 print
'<tr><td><span class="fieldrequired">'.$langs->trans(
"Date").
'</span></td><td>';
1329 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1330 print $form->selectDate($datecontrat,
'', 0, 0, 0,
"contrat");
1335 $langs->load(
'projects');
1339 print
'<tr><td>'.$langs->trans(
"Project").
'</td><td>';
1340 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
1341 $formproject->select_projects(($soc->id > 0 ? $soc->id : -1), $projectid,
"projectid", 0, 0, 1, 1, 0, 0, 0,
'', 0, 0,
'minwidth150 maxwidth300 widthcentpercentminusxx');
1342 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>';
1347 print
'<tr><td>'.$langs->trans(
"NotePublic").
'</td><td class="tdtop">';
1348 $doleditor =
new DolEditor(
'note_public', (
string) $note_public,
'', 100,
'dolibarr_notes',
'In',
true,
true, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1349 print $doleditor->Create(1);
1353 if (empty($user->socid)) {
1354 print
'<tr><td>'.$langs->trans(
"NotePrivate").
'</td><td class="tdtop">';
1355 $doleditor =
new DolEditor(
'note_private', (
string) $note_private,
'', 100,
'dolibarr_notes',
'In',
true,
true, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1356 print $doleditor->Create(1);
1361 $parameters = array(
'objectsrc' => $objectsrc,
'colspan' =>
' colspan="3"',
'cols' =>
'3');
1362 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
1363 print $hookmanager->resPrint;
1366 if (empty($reshook)) {
1367 print
$object->showOptionals($extrafields,
'create', $parameters);
1374 print $form->buttonsSaveCancel(
"CreateDraft");
1376 if (is_object($objectsrc)) {
1377 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1378 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1381 print
'<br>'.$langs->trans(
"Note").
': '.$langs->trans(
"OnlyLinesWithTypeServiceAreUsed");
1395 $result =
$object->fetch_lines();
1400 $nbofservices = count(
$object->lines);
1403 $author->fetch(
$object->user_author_id);
1405 $commercial_signature =
new User(
$db);
1406 $commercial_signature->fetch(
$object->commercial_signature_id);
1408 $commercial_suivi =
new User(
$db);
1409 $commercial_suivi->fetch(
$object->commercial_suivi_id);
1416 print
dol_get_fiche_head($head, $hselected, $langs->trans(
"Contract"), -1,
'contract', 0,
'',
'', 0,
'', 1);
1419 if ($action ==
'delete') {
1421 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"DeleteAContract"), $langs->trans(
"ConfirmDeleteAContract"),
"confirm_delete",
'', 0, 1);
1422 } elseif ($action ==
'valid') {
1424 $ref = substr(
$object->ref, 1, 4);
1425 if ($ref ==
'PROV' && !empty($modCodeContract->code_auto)) {
1430 $text = $langs->trans(
'ConfirmValidateContract', $numref);
1431 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ValidateAContract"), $text,
"confirm_valid",
'', 0, 1);
1432 } elseif ($action ==
'close') {
1434 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"CloseAContract"), $langs->trans(
"ConfirmCloseContract"),
"confirm_close",
'', 0, 1);
1435 } elseif ($action ==
'activate') {
1436 $formquestion = array(
1437 array(
'type' =>
'date',
'name' =>
'd_start',
'label' => $langs->trans(
"DateServiceActivate"),
'value' =>
dol_now()),
1438 array(
'type' =>
'date',
'name' =>
'd_end',
'label' => $langs->trans(
"DateEndPlanned"), 0 =>
'', 1 =>
''),
1439 array(
'type' =>
'text',
'name' =>
'comment',
'label' => $langs->trans(
"Comment"),
'value' =>
'', 0 =>
'', 1 =>
'',
'class' =>
'minwidth300',
'moreattr' =>
'autofocus')
1441 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ActivateAllOnContract"), $langs->trans(
"ConfirmActivateAllOnContract"),
"confirm_activate", $formquestion,
'yes', 1, 300);
1442 } elseif ($action ==
'clone') {
1443 $filter =
'(s.client:IN:1,2,3)';
1445 $formquestion = array(array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter)));
1446 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneContract',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
1447 } elseif ($action ==
'sign') {
1448 $text = $langs->trans(
'ConfirmSignContract');
1450 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1453 $text .= $notify->confirmMessage(
'CONTRACT_MODIFY',
$object->socid, $object);
1458 'name' =>
'signed_status',
1459 'label' =>
'<span class="fieldrequired">'.$langs->trans(
'SignStatus').
'</span>',
1460 'values' =>
$object->getSignedStatusLocalisedArray()
1462 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'SignContract'), $text,
'confirm_sign', $formquestion, 0, 1);
1463 } elseif ($action ==
'unsign') {
1464 $text = $langs->trans(
'ConfirmUnsignContract');
1466 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1469 $text .= $notify->confirmMessage(
'CONTRACT_MODIFY',
$object->socid, $object);
1471 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'UnsignContract'), $text,
'confirm_unsign',
'', 0, 1);
1476 $parameters = array(
1477 'formConfirm' => $formconfirm,
1482 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
1483 if (empty($reshook)) {
1484 $formconfirm .= $hookmanager->resPrint;
1485 } elseif ($reshook > 0) {
1486 $formconfirm = $hookmanager->resPrint;
1494 if (
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'contrat',
'creer')) {
1495 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="POST">';
1496 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1497 print
'<input type="hidden" name="action" value="setremise">';
1498 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1503 $linkback =
'<a href="'.DOL_URL_ROOT.
'/contrat/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1507 if (!empty($modCodeContract->code_auto)) {
1510 $morehtmlref .= $form->editfieldkey(
"",
'ref',
$object->ref, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 3);
1511 $morehtmlref .= $form->editfieldval(
"",
'ref',
$object->ref, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'',
null,
'2');
1514 $morehtmlref .=
'<div class="refidno">';
1516 $morehtmlref .= $form->editfieldkey(
"RefCustomer",
'ref_customer',
$object->ref_customer, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 1);
1517 $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');
1519 $morehtmlref .=
'<br>';
1520 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 1);
1521 $morehtmlref .= $form->editfieldval(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'',
null,
null,
'', 1,
'getFormatedSupplierRef');
1523 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1);
1525 $morehtmlref .=
' <span class="otherlink valignmiddle">(<a href="'.DOL_URL_ROOT.
'/contrat/list.php?socid='.((int)
$object->thirdparty->id).
'">'.$langs->trans(
"OtherContracts").
'</a>)</span>';
1529 $langs->load(
"projects");
1530 $morehtmlref .=
'<br>';
1531 if ($permissiontoadd) {
1532 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
1533 if ($action !=
'classify') {
1534 $morehtmlref .=
'<a class="editfielda" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'action' =>
'classify',
'id' => ((
int)
$object->id)],
true).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1536 $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');
1538 if (!empty(
$object->fk_project)) {
1540 $proj->fetch(
$object->fk_project);
1541 $morehtmlref .= $proj->getNomUrl(1);
1543 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
1548 $morehtmlref .=
'</div>';
1551 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'none', $morehtmlref);
1554 print
'<div class="fichecenter">';
1555 print
'<div class="fichehalfleft">';
1556 print
'<div class="underbanner clearboth"></div>';
1558 print
'<table class="border centpercent tableforfield">';
1561 print
'<tr><td class="titlefield">'.$langs->trans(
'Discount').
'</td><td colspan="3">';
1562 if (
$object->thirdparty->remise_percent) {
1563 print $langs->trans(
"CompanyHasRelativeDiscount",
$object->thirdparty->remise_percent).
'. ';
1565 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoRelativeDiscount").
'. </span>';
1567 $absolute_discount =
$object->thirdparty->getAvailableDiscounts();
1568 if ($absolute_discount) {
1569 print $langs->trans(
"CompanyHasAbsoluteDiscount",
price($absolute_discount), $langs->trans(
"Currency".$conf->currency)).
'.';
1571 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoAbsoluteDiscount").
'.</span>';
1577 print
'<td class="titlefield">';
1578 print $form->editfieldkey(
"Date",
'date_contrat',
$object->date_contrat, $object, $user->hasRight(
'contrat',
'creer'));
1580 print $form->editfieldval(
"Date",
'date_contrat',
$object->date_contrat, $object, $user->hasRight(
'contrat',
'creer'),
'datehourpicker');
1585 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1590 print
'<div class="fichehalfright">';
1592 print
'<!-- amounts -->'.
"\n";
1593 print
'<div class="underbanner clearboth"></div>';
1595 print
'<div class="div-table-responsive-no-min">';
1596 print
'<table class="border tableforfield centpercent">';
1599 print
'<tr><td class="titlefield">'.
"".
'</td>';
1600 print
'<td class=right>'.$langs->trans(
'Total').
'</td>';
1601 print
'<td class=right>'.$staticcontractline->LibStatut(0, 5, 0).
'</td>';
1602 print
'<td class=right>'.$staticcontractline->LibStatut(4, 5, 0).
'</td>';
1603 print
'<td class=right>'.$staticcontractline->LibStatut(4, 5, 1).
'</td>';
1604 print
'<td class=right>'.$staticcontractline->LibStatut(5, 5, 0).
'</td>';
1607 $all=
$object->getTotalizedLines(-1, 0);
1608 $draft=
$object->getTotalizedLines(0, 0);
1609 $enabled=
$object->getTotalizedLines(4, 0);
1610 $expired=
$object->getTotalizedLines(4, 1);
1611 $close=
$object->getTotalizedLines(5, 0);
1613 print
'<tr><td class="titlefield">'.$langs->trans(
"Quantity").
'</td>';
1614 print
'<td class="right nowrap">'.($all[
'total_qty'] ?
price2num($all[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1615 print
'<td class="right">'.($draft[
'total_qty'] ?
price2num($draft[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1616 print
'<td class="right">'.($enabled[
'total_qty'] ?
price2num($enabled[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1617 print
'<td class="right">'.($expired[
'total_qty'] ?
price2num($expired[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1618 print
'<td class="right">'.($close[
'total_qty'] ?
price2num($close[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1621 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalHT").
'</td>';
1622 print
'<td class="nowraponall amountcard right">'.($all[
'total_ht'] ?
price($all[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1623 print
'<td class="nowraponall amountcard right">'.($draft[
'total_ht'] ?
price($draft[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1624 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_ht'] ?
price($enabled[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1625 print
'<td class="nowraponall amountcard right">'.($expired[
'total_ht'] ?
price($expired[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1626 print
'<td class="nowraponall amountcard right">'.($close[
'total_ht'] ?
price($close[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1629 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalVAT").
'</td>';
1630 print
'<td class="nowraponall amountcard right nowrap">'.($all[
'total_tva'] ?
price($all[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1631 print
'<td class="nowraponall amountcard right">'.($draft[
'total_tva'] ?
price($draft[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1632 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_tva'] ?
price($enabled[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1633 print
'<td class="nowraponall amountcard right">'.($expired[
'total_tva'] ?
price($expired[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1634 print
'<td class="nowraponall amountcard right">'.($close[
'total_tva'] ?
price($close[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1637 if (
$mysoc->localtax1_assuj ==
"1" || $all[
'total_localtax1'] != 0) {
1638 print
'<tr><td class="titlefield">' . $langs->trans(
"TotalLT1") .
'</td>';
1639 print
'<td class="nowraponall amountcard right nowrap">' . ($all[
'total_localtax1'] ?
price($all[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1640 print
'<td class="nowraponall amountcard right">' . ($draft[
'total_localtax1'] ?
price($draft[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1641 print
'<td class="nowraponall amountcard right">' . ($enabled[
'total_localtax1'] ?
price($enabled[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1642 print
'<td class="nowraponall amountcard right">' . ($expired[
'total_localtax1'] ?
price($expired[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1643 print
'<td class="nowraponall amountcard right">' . ($close[
'total_localtax1'] ?
price($close[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1647 if (
$mysoc->localtax2_assuj ==
"1" || $all[
'total_localtax2'] != 0) {
1648 print
'<tr><td class="titlefield">' . $langs->trans(
"TotalLT2") .
'</td>';
1649 print
'<td class="nowraponall amountcard right nowrap">' . ($all[
'total_localtax2'] ?
price($all[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1650 print
'<td class="nowraponall amountcard right">' . ($draft[
'total_localtax2'] ?
price($draft[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1651 print
'<td class="nowraponall amountcard right">' . ($enabled[
'total_localtax2'] ?
price($enabled[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1652 print
'<td class="nowraponall amountcard right">' . ($expired[
'total_localtax2'] ?
price($expired[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1653 print
'<td class="nowraponall amountcard right">' . ($close[
'total_localtax2'] ?
price($close[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1657 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalTTC").
'</td>';
1658 print
'<td class="nowraponall amountcard right nowrap">'.($all[
'total_ttc'] ?
price($all[
'total_ttc']):
'<span class="opacitymedium">0</span>').
'</td>';
1659 print
'<td class="nowraponall amountcard right">'.($draft[
'total_ttc'] ?
price($draft[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1660 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_ttc'] ?
price($enabled[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1661 print
'<td class="nowraponall amountcard right">'.($expired[
'total_ttc'] ?
price($expired[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1662 print
'<td class="nowraponall amountcard right">'.($close[
'total_ttc'] ?
price($close[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1671 print
'<div class="clearboth"></div><br>';
1673 if (
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'contrat',
'creer')) {
1680 $blocname =
'contacts';
1681 $title = $langs->trans(
'ContactsAddresses');
1682 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1686 $blocname =
'notes';
1687 $title = $langs->trans(
'Notes');
1688 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1692 $arrayothercontracts =
$object->getListOfContracts(
'others');
1700 global $inputalsopricewithtax;
1701 $inputalsopricewithtax = 1;
1706 if (
isModEnabled(
'margin') && !empty(
$object->element) && in_array(
$object->element, array(
'facture',
'propal',
'commande'))) {
1710 $parameters = array(
'nbOfLines' => &$nbofservices);
1711 $reshook = $hookmanager->executeHooks(
'printObjectLinesBlock', $parameters, $object, $action);
1712 if (empty($reshook)) {
1716 print
'<div id="contrat-lines-container" id="contractlines" data-contractid="'.$object->id.
'" data-element="'.
$object->element.
'" >';
1717 while ($cursorline <= $nbofservices) {
1718 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.
'" >';
1719 print
'<form name="update" id="addproduct" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="post">';
1720 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1721 print
'<input type="hidden" name="action" value="updateline">';
1722 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1723 print
'<input type="hidden" name="elrowid" value="'.$object->lines[$cursorline - 1]->id.
'">';
1724 print
'<input type="hidden" name="fournprice" value="'.(!empty(
$object->lines[$cursorline - 1]->fk_fournprice) ?
$object->lines[$cursorline - 1]->fk_fournprice : 0).
'">';
1727 print
'<div class="div-table-responsive-no-min">';
1728 print
'<table class="notopnoleftnoright allwidth tableforservicepart1 centpercent">';
1730 $sql =
"SELECT cd.rowid, cd.statut, cd.label as label_det, cd.fk_product, cd.product_type, cd.description, cd.qty,";
1731 $sql .=
" cd.tva_tx, cd.vat_src_code, cd.remise_percent, cd.info_bits, cd.subprice, cd.multicurrency_subprice,";
1732 $sql .=
" cd.date_ouverture_prevue as date_start, cd.date_ouverture as date_start_real,";
1733 $sql .=
" cd.date_fin_validite as date_end, cd.date_cloture as date_end_real,";
1734 $sql .=
" cd.commentaire as comment, cd.fk_product_fournisseur_price as fk_fournprice, cd.buy_price_ht as pa_ht,";
1735 $sql .=
" cd.fk_unit,";
1736 $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";
1737 $sql .=
" ,cd.rang";
1738 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contratdet as cd";
1739 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON cd.fk_product = p.rowid";
1740 $sql .=
" WHERE cd.rowid = ".((int)
$object->lines[$cursorline - 1]->id);
1742 $result =
$db->query($sql);
1747 $objp =
$db->fetch_object($result);
1750 print
'<tr class="liste_titre'.($cursorline ?
' liste_titre_add' :
'').
'">';
1751 print
'<td>'.$langs->trans(
"ServiceNb", $cursorline).
'</td>';
1752 print
'<td width="80" class="center">'.$langs->trans(
"VAT").
'</td>';
1753 print
'<td width="80" class="right">'.$langs->trans(
"PriceUHT").
'</td>';
1757 print
'<td width="30" class="center">'.$langs->trans(
"Qty").
'</td>';
1759 print
'<td width="30" class="left">'.$langs->trans(
"Unit").
'</td>';
1761 print
'<td width="50" class="right">'.$langs->trans(
"ReductionShort").
'</td>';
1763 print
'<td width="50" class="right">'.$langs->trans(
"BuyingPrice").
'</td>';
1767 if ($nbofservices > 1 &&
$conf->browser->layout !=
'phone' && $user->hasRight(
'contrat',
'creer')) {
1768 print
'<td width="30" class="linecolmove tdlineupdown center">';
1769 if ($cursorline > 1) {
1770 print
'<a class="lineupdown reposition paddingrightonly paddingleftonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=up&token='.
newToken().
'&rowid='.$objp->rowid.
'">';
1771 echo
img_up(
'default', 0,
'imgupforline');
1774 if ($cursorline < $nbofservices) {
1775 print
'<a class="lineupdown reposition paddingrightonly paddingleftonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=down&token='.
newToken().
'&rowid='.$objp->rowid.
'">';
1776 echo
img_down(
'default', 0,
'imgdownforline');
1781 print
'<td width="30"> </td>';
1789 if ($action !=
'editline' || $idline != $objp->rowid) {
1791 if (
getDolGlobalString(
'CONTRACT_HIDE_CLOSED_SERVICES_BY_DEFAULT') && $objp->statut == ContratLigne::STATUS_CLOSED && $action !=
'showclosedlines') {
1792 $moreparam =
'style="display: none;"';
1796 $line->id = $objp->rowid;
1800 print
'<tr class="tdtop oddeven" '.$moreparam.
'>';
1803 print
'<td class="linecoldescription minwidth300imp">';
1805 print
'<div id="line_'.$line->rowid.
'"></div>';
1806 if ($objp->fk_product > 0) {
1807 $productstatic->id = $objp->fk_product;
1808 $productstatic->type = $objp->ptype;
1809 $productstatic->ref = $objp->pref;
1810 $productstatic->entity = $objp->pentity;
1811 $productstatic->label = $objp->plabel;
1812 $productstatic->status = $objp->tosell;
1813 $productstatic->status_buy = $objp->tobuy;
1814 $productstatic->status_batch = $objp->tobatch;
1816 $text = $productstatic->getNomUrl(1,
'', 32);
1817 if ($objp->plabel) {
1819 $text .= $objp->plabel;
1821 $description = $objp->description;
1824 print (!empty($line->fk_parent_line) ?
img_picto(
'',
'rightarrow.png') :
'') . $text;
1826 print $form->textwithpicto(
'', $description);
1829 print $form->textwithtooltip($text, $description, 3, 0,
'',
'', 0, (!empty($line->fk_parent_line) ?
img_picto(
'',
'rightarrow.png') :
''));
1833 if ($line->fk_product > 0 &&
getDolGlobalInt(
'PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) {
1834 print (!empty($line->description) && $line->description != $line->plabel) ? (($line->date_start || $line->date_end) ?
'' :
'<br>').
'<br>'.
dol_htmlentitiesbr($line->
description) :
'';
1842 print
'<td class="center">';
1843 print
vatrate($objp->tva_tx.($objp->vat_src_code ? (
' ('.$objp->vat_src_code.
')') :
''), true, $objp->info_bits);
1846 print
'<td class="right">'.($objp->subprice !=
'' ?
price($objp->subprice) :
'').
"</td>\n";
1852 print
'<td class="center">'.$objp->qty.
'</td>';
1855 print
'<td class="left">'.$object->lines[$cursorline - 1]->getLabelOfUnit(
'long', $langs).
'</td>';
1858 if ($objp->remise_percent > 0) {
1859 print
'<td class="right">'.$objp->remise_percent.
"%</td>\n";
1861 print
'<td> </td>';
1866 print
'<td class="right nowraponall">'.price($objp->pa_ht).
'</td>';
1870 print
'<td class="nowraponall right">';
1871 if ($user->hasRight(
'contrat',
'creer') && is_array($arrayothercontracts) && count($arrayothercontracts) && (
$object->status >= 0)) {
1872 print
'<!-- link to move service line into another contract -->';
1873 print
'<a class="reposition marginrightonly" style="padding-left: 5px;" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=move&token='.
newToken().
'&elrowid='.$objp->rowid.
'">';
1874 print
img_picto($langs->trans(
"MoveToAnotherContract"),
'uparrow');
1877 if ($user->hasRight(
'contrat',
'creer') && (
$object->statut >= 0)) {
1878 print
'<a class="reposition marginrightonly editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=editline&token='.
newToken().
'&elrowid='.$objp->rowid.
'">';
1882 if ($user->hasRight(
'contrat',
'creer') && (
$object->statut >= 0)) {
1883 print
'<a class="reposition marginrightonly" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=deleteline&token='.
newToken().
'&elrowid='.$objp->rowid.
'">';
1900 if ($objp->subprice >= 0) {
1901 print
'<tr class="oddeven" '.$moreparam.
'>';
1902 print
'<td colspan="'.$colspan.
'">';
1905 print $langs->trans(
"DateStartPlanned").
': ';
1906 if ($objp->date_start) {
1909 if ($objp->statut == 0 &&
$db->jdate($objp->date_start) < ($now -
$conf->contrat->services->inactifs->warning_delay)) {
1910 $warning_delay =
$conf->contrat->services->inactifs->warning_delay / 3600 / 24;
1911 $textlate = $langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($warning_delay) >= 0 ?
'+' :
'').ceil($warning_delay).
' '.$langs->trans(
"days");
1912 print
" ".img_warning($textlate);
1915 print $langs->trans(
"Unknown");
1917 print
' - ';
1918 print $langs->trans(
"DateEndPlanned").
': ';
1919 if ($objp->date_end) {
1921 if ($objp->statut == 4 &&
$db->jdate($objp->date_end) < ($now -
$conf->contrat->services->expires->warning_delay)) {
1922 $warning_delay =
$conf->contrat->services->expires->warning_delay / 3600 / 24;
1923 $textlate = $langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($warning_delay) >= 0 ?
'+' :
'').ceil($warning_delay).
' '.$langs->trans(
"days");
1924 print
" ".img_warning($textlate);
1927 print $langs->trans(
"Unknown");
1935 if (is_array($extralabelslines) && count($extralabelslines) > 0) {
1937 $line->id = $objp->rowid;
1938 $line->fetch_optionals();
1939 print $line->showOptionals($extrafields,
'view', array(
'class' =>
'oddeven',
'style' => $moreparam,
'colspan' => $colspan,
'tdclass' =>
'notitlefieldcreate'),
'',
'',
'1');
1944 print
'<tr class="oddeven">';
1946 $currentLineProductId =
GETPOSTISSET(
'idprod') ?
GETPOST(
'idprod') : (!empty(
$object->lines[$cursorline - 1]->fk_product) ?
$object->lines[$cursorline - 1]->fk_product : 0);
1947 if ($objp->fk_product > 0) {
1948 $canchangeproduct = 1;
1951 if (empty($canchangeproduct)) {
1952 $productstatic->id = $objp->fk_product;
1953 $productstatic->type = $objp->ptype;
1954 $productstatic->ref = $objp->pref;
1955 $productstatic->entity = $objp->pentity;
1956 print $productstatic->getNomUrl(1,
'', 32);
1957 print $objp->label ?
' - '.dol_trunc($objp->label, 32) :
'';
1958 print
'<input type="hidden" name="idprod" value="'.$currentLineProductId.
'">';
1960 $senderissupplier = 0;
1961 if (empty($senderissupplier)) {
1967 print $form->select_produits($currentLineProductId,
'idprod', $filtertype, 0, 0, 1, 2,
'', 0, array(), 0, 1, 0,
'minwidth250onall maxwidth500 widthcentpercentminusx');
1969 $form->select_produits_fournisseurs($currentLineProductId,
'idprod');
1974 print $objp->label ? $objp->label.
'<br>' :
'';
1975 print
'<input type="hidden" name="idprod" value="'.$currentLineProductId.
'">';
1979 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1984 $doleditor =
new DolEditor(
'product_desc', (
GETPOSTISSET(
'product_desc') ?
GETPOST(
'product_desc') : $objp->
description),
'', 92,
'dolibarr_details',
'', false, true,
getDolGlobalInt(
'FCKEDITOR_ENABLE_DETAILS'), $nbrows,
'90%');
1985 $doleditor->Create();
1990 print
'<td class="right">';
1991 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);
1995 print
'<td class="right"><input class="width50" type="text" name="elprice" value="'.(GETPOSTISSET(
'elprice') ?
GETPOST(
'elprice') :
price($objp->subprice)).
'"></td>';
2003 print
'<td class="center"><input size="2" type="text" name="elqty" value="'.(GETPOSTISSET(
'elqty') ?
GETPOST(
'elqty') : $objp->qty).
'"></td>';
2007 print
'<td class="left">';
2013 print
'<td class="nowraponall right"><input size="1" type="text" name="elremise_percent" value="'.(GETPOSTISSET(
'elremise_percent') ?
GETPOST(
'elremise_percent') : $objp->remise_percent).
'">%</td>';
2015 if (!empty($usemargins)) {
2016 print
'<td class="right">';
2017 if ($objp->fk_product) {
2018 print
'<select id="fournprice" name="fournprice"></select>';
2020 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>';
2022 print
'<td class="center">';
2023 print
'<input type="submit" class="button margintoponly marginbottomonly" name="save" value="'.$langs->trans(
"Modify").
'">';
2024 print
'<br><input type="submit" class="button margintoponly marginbottomonly button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2037 print
'<tr class="oddeven">';
2038 print
'<td colspan="'.$colspan.
'">';
2039 print $langs->trans(
"DateStartPlanned").
' ';
2040 print $form->selectDate(
$db->jdate($objp->date_start),
"date_start_update", $usehm, $usehm, (
$db->jdate($objp->date_start) > 0 ? 0 : 1),
"update");
2041 print
' '.$langs->trans(
"DateEndPlanned").
' ';
2042 print $form->selectDate(
$db->jdate($objp->date_end),
"date_end_update", $usehm, $usehm, (
$db->jdate($objp->date_end) > 0 ? 0 : 1),
"update");
2046 if (is_array($extralabelslines) && count($extralabelslines) > 0) {
2048 $line->id = $objp->rowid;
2049 $line->fetch_optionals();
2051 print $line->showOptionals($extrafields,
'edit', array(
'style' =>
'class="oddeven"',
'colspan' => $colspan,
'tdclass' =>
'notitlefieldcreate'),
'',
'',
'1');
2062 if (
getDolGlobalString(
'CONTRACT_HIDE_CLOSED_SERVICES_BY_DEFAULT') &&
$object->lines[$cursorline - 1]->statut == ContratLigne::STATUS_CLOSED && $action !=
'showclosedlines') {
2063 $moreparam =
'style="display: none;"';
2074 print
'<tr class="oddeven" '.$moreparam.
'>';
2075 print
'<td class="tdhrthin" colspan="'.$colspan.
'"><hr class="opacitymedium tdhrthin"></td>';
2088 if ($action ==
'deleteline' && !$cancel && $user->hasRight(
'contrat',
'creer') &&
$object->lines[$cursorline - 1]->id == $idline) {
2089 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".((
int)
$object->id).
"&lineid=".((
int) $idline), $langs->trans(
"DeleteContractLine"), $langs->trans(
"ConfirmDeleteContractLine"),
"confirm_deleteline",
'', 0, 1);
2090 if ($ret ==
'html') {
2091 print
'<table class="notopnoleftnoright centpercent"><tr class="oddeven" height="6"><td></td></tr></table>';
2098 if ($action ==
'move' && !$cancel && $user->hasRight(
'contrat',
'creer') &&
$object->lines[$cursorline - 1]->id == $idline) {
2099 $arraycontractid = array();
2100 foreach ($arrayothercontracts as $contractcursor) {
2101 $arraycontractid[$contractcursor->id] = $contractcursor->ref;
2105 $formquestion = array(
2106 'text' => $langs->trans(
"ConfirmMoveToAnotherContractQuestion"),
2107 0 => array(
'type' =>
'select',
'name' =>
'newcid',
'values' => $arraycontractid));
2109 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".((
int)
$object->id).
"&lineid=".((
int) $idline), $langs->trans(
"MoveToAnotherContract"), $langs->trans(
"ConfirmMoveToAnotherContract"),
"confirm_move", $formquestion,
'yes');
2110 print
'<table class="notopnoleftnoright centpercent"><tr class="oddeven" height="6"><td></td></tr></table>';
2115 print
'<table class="notopnoleftnoright tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2117 print
'<tr class="oddeven" '.$moreparam.
'>';
2118 print
'<td><span class="valignmiddle hideonsmartphone">'.$langs->trans(
"ServiceStatus").
':</span> '.
$object->lines[$cursorline - 1]->getLibStatut(4).
'</td>';
2119 print
'<td width="30" class="right">';
2120 if ($user->socid == 0) {
2121 if (
$object->status > 0 && $action !=
'activateline' && $action !=
'unactivateline' && is_object($objp)) {
2122 $tmpaction =
'activateline';
2123 $tmpactionpicto =
'play';
2124 $tmpactiontext = $langs->trans(
"Activate");
2125 if ($objp->statut == 4) {
2126 $tmpaction =
'unactivateline';
2127 $tmpactionpicto =
'playstop.png';
2128 $tmpactiontext = $langs->trans(
"Disable");
2130 if (($tmpaction ==
'activateline' && $user->hasRight(
'contrat',
'activer')) || ($tmpaction ==
'unactivateline' && $user->hasRight(
'contrat',
'desactiver'))) {
2131 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&ligne='.
$object->lines[$cursorline - 1]->id.
'&action='.$tmpaction.
'&token='.
newToken().
'">';
2132 print
img_picto($tmpactiontext, $tmpactionpicto);
2140 print
'<tr class="oddeven" '.$moreparam.
'>';
2144 if (!$objp->date_start_real) {
2145 print $langs->trans(
"DateStartReal").
': ';
2146 if ($objp->date_start_real) {
2149 print $langs->trans(
"ContractStatusNotRunning");
2153 if ($objp->date_start_real && !$objp->date_end_real) {
2154 print $langs->trans(
"DateStartReal").
': ';
2158 if ($objp->date_start_real && $objp->date_end_real) {
2159 print $langs->trans(
"DateStartReal").
': ';
2161 print
' - ';
2162 print $langs->trans(
"DateEndReal").
': ';
2165 if (!empty($objp->comment)) {
2166 print
" - ".$objp->comment;
2170 print
'<td class="center"> </td>';
2177 if ($permissiontoactivate && $action ==
'activateline' &&
$object->lines[$cursorline - 1]->id ==
GETPOSTINT(
'ligne') && is_object($objp)) {
2178 print
'<form name="active" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
2179 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2180 print
'<input type="hidden" name="action" value="confirm_active">';
2181 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2182 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
2183 print
'<input type="hidden" name="ligne" value="'.GETPOSTINT(
'ligne').
'">';
2184 print
'<input type="hidden" name="confirm" value="yes">';
2186 print
'<table class="noborder tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2189 $dateactstart = $objp->date_start;
2192 } elseif (!$dateactstart) {
2193 $dateactstart = time();
2196 $dateactend = $objp->date_end;
2199 } elseif (!$dateactend) {
2200 if ($objp->fk_product > 0) {
2202 $product->fetch($objp->fk_product);
2203 if (!empty($product->duration_value) && !empty($product->duration_unit)) {
2204 $dateactend =
dol_time_plus_duree(time(), $product->duration_value, $product->duration_unit);
2209 print
'<tr class="oddeven">';
2210 print
'<td class="nohover">'.$langs->trans(
"DateServiceActivate").
'</td><td class="nohover">';
2211 print $form->selectDate($dateactstart,
'start', $usehm, $usehm, 0,
"active", 1, 0);
2213 print
'<td class="nohover">'.$langs->trans(
"DateEndPlanned").
'</td><td class="nohover">';
2214 print $form->selectDate($dateactend,
"end", $usehm, $usehm, 0,
"active", 1, 0);
2216 print
'<td class="center nohover">';
2221 print
'<tr class="oddeven">';
2222 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>';
2223 print
'<td class="nohover right">';
2224 print
'<input type="submit" class="button" name="activate" value="'.$langs->trans(
"Activate").
'"> ';
2225 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2235 if ($permissiontodisable && $action ==
'unactivateline' &&
$object->lines[$cursorline - 1]->id ==
GETPOSTINT(
'ligne') && is_object($objp)) {
2236 print
'<!-- Form to disabled a line -->'.
"\n";
2237 print
'<form name="confirm_closeline" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&ligne='.
$object->lines[$cursorline - 1]->id.
'" method="post">';
2238 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2239 print
'<input type="hidden" name="confirm" value="yes">';
2240 print
'<input type="hidden" name="action" value="confirm_closeline">';
2241 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2243 print
'<table class="noborder tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2246 $dateactstart = $objp->date_start_real;
2249 } elseif (!$dateactstart) {
2250 $dateactstart = time();
2253 $dateactend = $objp->date_end_real;
2256 } elseif (!$dateactend) {
2257 if ($objp->fk_product > 0) {
2259 $product->fetch($objp->fk_product);
2260 $dateactend =
dol_time_plus_duree(time(), $product->duration_value, $product->duration_unit);
2264 if ($dateactend > $now) {
2268 print
'<tr class="oddeven"><td colspan="2" class="nohover">';
2269 if ($objp->statut >= 4) {
2270 if ($objp->statut == 4) {
2271 print $langs->trans(
"DateEndReal").
' ';
2272 print $form->selectDate($dateactend,
"end", $usehm, $usehm, ($objp->date_end_real > 0 ? 0 : 1),
"closeline", 1, 1);
2276 print
'<td class="center nohover">';
2279 print
'<tr class="oddeven">';
2280 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>';
2281 print
'<td class="nohover right">';
2282 print
'<input type="submit" class="button" name="close" value="'.$langs->trans(
"Disable").
'"> ';
2283 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2298 if ($user->hasRight(
'contrat',
'creer') && (
$object->status == 0)) {
2302 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
2303 <input type="hidden" name="token" value="'.
newToken().
'">
2304 <input type="hidden" name="action" value="'.(($action !=
'editline') ?
'addline' :
'updateline').
'">
2305 <input type="hidden" name="mode" value="">
2306 <input type="hidden" name="id" value="'.
$object->id.
'">
2307 <input type="hidden" name="page_y" value="">
2308 <input type="hidden" name="backtopage" value="'.$backtopage.
'">
2311 print
'<div class="div-table-responsive-no-min">';
2312 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
2315 if ($action !=
'editline') {
2316 $forcetoshowtitlelines = 1;
2317 if (empty(
$object->multicurrency_code)) {
2323 $parameters = array();
2324 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
2328 if (empty($reshook)) {
2341 if (
GETPOST(
'modelselected')) {
2342 $action =
'presend';
2348 if ($user->socid == 0 && $action !=
'presend' && $action !=
'editline') {
2349 print
'<div class="tabsAction">';
2351 $parameters = array();
2352 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2354 if (empty($reshook)) {
2358 'class' =>
'classfortooltip'
2363 if (empty($user->socid)) {
2364 if (
$object->status == $object::STATUS_VALIDATED) {
2365 if ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'contrat',
'creer'))) {
2366 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=presend&token='.
newToken().
'&mode=init#formmailbeforetitle',
'',
true, $params);
2368 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email',
'#',
'',
false, $params);
2373 if (
$object->status == $object::STATUS_DRAFT && $nbofservices) {
2374 if ($user->hasRight(
'contrat',
'creer')) {
2375 unset($params[
'attr'][
'title']);
2376 print
dolGetButtonAction($langs->trans(
'Validate'),
'',
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken(),
'',
true, $params);
2378 $params[
'attr'][
'title'] = $langs->trans(
"NotEnoughPermissions");
2379 print
dolGetButtonAction($langs->trans(
'Validate'),
'',
'default',
'#',
'',
false, $params);
2382 if (
$object->status == $object::STATUS_VALIDATED) {
2383 if ($user->hasRight(
'contrat',
'creer')) {
2384 unset($params[
'attr'][
'title']);
2385 print
dolGetButtonAction($langs->trans(
'Modify'),
'',
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken(),
'',
true, $params);
2387 $params[
'attr'][
'title'] = $langs->trans(
"NotEnoughPermissions");
2388 print
dolGetButtonAction($langs->trans(
'Modify'),
'',
'default',
'#',
'',
false, $params);
2393 $arrayofcreatebutton = array();
2395 $arrayofcreatebutton[] = array(
2396 'url' =>
'/comm/propal/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id.
'&renewal=true',
2397 'label' => $langs->trans(
'AddProp'),
2399 'perm' => $user->hasRight(
'propale',
'creer') ?
true : false,
2405 $arrayofcreatebutton[] = array(
2406 'url' =>
'/commande/card.php?action=create&token='.
newToken().
'&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2407 'label' => $langs->trans(
'AddOrder'),
2409 'perm' => $user->hasRight(
'commande',
'creer') ?
true : false,
2414 $arrayofcreatebutton[] = array(
2415 'url' =>
'/compta/facture/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2416 'label' => $langs->trans(
'CreateBill'),
2418 'perm' => $user->hasRight(
'facture',
'creer') ?
true : false,
2423 $langs->load(
"suppliers");
2424 $arrayofcreatebutton[] = array(
2425 'url' =>
'/fourn/facture/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2426 'label' => $langs->trans(
'AddSupplierInvoice'),
2428 'perm' => $user->hasRight(
'fournisseur',
'facture',
'creer') ?
true : false,
2432 if (count($arrayofcreatebutton)) {
2433 unset($params[
'attr'][
'title']);
2434 print
dolGetButtonAction(
'', $langs->trans(
"Create"),
'default', $arrayofcreatebutton,
'',
true, $params);
2437 $arrayforbutaction = array();
2438 $arrayforbutaction[] = array(
2439 'url' =>
'/contrat/card.php?id='.
$object->id.
'&action=activate&token='.
newToken(),
2440 'label' => $langs->trans(
'ActivateAllContracts'),
2442 'perm' => (
$object->nbofservicesclosed > 0 ||
$object->nbofserviceswait > 0) ? $permissiontoactivate : -1,
2445 $arrayforbutaction[] = array(
2446 'url' =>
'/contrat/card.php?id='.
$object->id.
'&action=close&token='.
newToken(),
2447 'label' => $langs->trans(
'CloseAllContracts'),
2449 'perm' => (
$object->nbofservicesclosed < $nbofservices) ? $permissiontodisable : -1,
2453 if (count($arrayforbutaction)) {
2454 unset($params[
'attr'][
'title']);
2455 print
dolGetButtonAction(
'', $langs->trans(
"Enable").
" / ".$langs->trans(
"Close"),
'default', $arrayforbutaction,
'',
true, $params);
2459 if ($action ==
'showclosedlines') {
2460 print
'<div class="inline-block divButAction"><a class="butAction" id="btnhideclosedlines" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=hideclosedlines">'.$langs->trans(
"HideClosedServices").
'</a></div>';
2462 print
'<div class="inline-block divButAction"><a class="butAction" id="btnshowclosedlines" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=showclosedlines">'.$langs->trans(
"ShowClosedServices").
'</a></div>';
2467 if (
getDolGlobalString(
'CONTRACT_SHOW_SIGNATURE_STATUS_WITH_SERVICE_STATUS') &&
$object->status > Contrat::STATUS_DRAFT) {
2468 if (
$object->signed_status != Contrat::$SIGNED_STATUSES[
'STATUS_SIGNED_ALL']) {
2469 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>';
2471 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>';
2476 if ($user->hasRight(
'contrat',
'creer')) {
2477 unset($params[
'attr'][
'title']);
2482 unset($params[
'attr'][
'title']);
2483 print
dolGetButtonAction($langs->trans(
'Delete'),
'',
'delete', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken(),
'', $permissiontodelete, $params);
2489 if ($action !=
'presend') {
2490 print
'<div class="fichecenter"><div class="fichehalfleft">';
2497 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2498 $genallowed = $user->hasRight(
'contrat',
'lire');
2499 $delallowed = $user->hasRight(
'contrat',
'creer');
2500 $tooltipAfterComboOfModels =
'';
2502 $tooltipAfterComboOfModels = $langs->trans(
"AccordingToYourSetupTheFileWillBeConcatenated",
getDolGlobalString(
'MAIN_INFO_CONTRACT_TERMSOFSALE'));
2505 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);
2509 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'contrat'), 1);
2510 $linktoelem = $tmparray[
'linktoelem'];
2511 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
2512 print $htmltoenteralink;
2514 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
2518 print
'<br><!-- Link to sign -->';
2519 require_once DOL_DOCUMENT_ROOT.
'/core/lib/signature.lib.php';
2521 print showOnlineSignatureUrl(
'contract',
$object->ref, $object).
'<br>';
2524 print
'</div><div class="fichehalfright">';
2528 $morehtmlcenter =
'<div class="nowraponall">';
2529 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/contrat/messaging.php?id='.
$object->id);
2530 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'SeeAll'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/contrat/agenda.php?id='.
$object->id);
2531 $morehtmlcenter .=
'</div>';
2535 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2537 $somethingshown = $formactions->showactions($object,
'contract', $socid, 1,
'listactions', $MAXEVENT,
'', $morehtmlcenter);
2539 print
'</div></div>';
2543 $modelmail =
'contract';
2544 $defaulttopic =
'SendContractRef';
2545 $diroutput =
$conf->contract->multidir_output[
$object->entity ??
$conf->entity];
2546 $trackid =
'con'.$object->id;
2548 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
2560 print
"\n".
'<script type="text/javascript">'.
"\n";
2562 $(document).ready(
function() {
2563 var idprod = $(
"input[name='idprod']").val();
2564 var fournprice = $(
"input[name='fournprice']").val();
2565 var token =
'<?php echo currentToken(); ?>';
2567 $.post(
'<?php echo DOL_URL_ROOT; ?>/fourn/ajax/getSupplierPrices.php', {
2571 if (data.length > 0) {
2574 $(data).each(
function() {
2575 options +=
'<option value="'+this.
id+
'" price="'+this.price+
'"';
2576 if (fournprice > 0) {
2577 if (this.
id == fournprice) {
2578 options +=
' selected';
2579 $(
"#buying_price").val(this.price);
2583 options +=
'>'+this.label+
'</option>';
2585 options +=
'<option value=null'+(trouve?
'':
' selected')+
'><?php echo $langs->trans("InputPrice"); ?></option>';
2586 $(
"#fournprice").html(options);
2588 $(
"#buying_price").hide();
2589 $(
"#fournprice").show();
2592 $(
"#buying_price").show();
2594 $(
"#fournprice").change(
function() {
2595 var selval = $(
this).find(
'option:selected').attr(
"price");
2597 $(
"#buying_price").val(selval).hide();
2599 $(
'#buying_price').show();
2603 $(
"#fournprice").hide();
2604 $(
'#buying_price').show();
2610 $(
"#fournprice").hide();
2611 $(
'#buying_price').show();
2615 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.