39require
"../main.inc.php";
50require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
51require_once DOL_DOCUMENT_ROOT.
'/core/lib/price.lib.php';
52require_once DOL_DOCUMENT_ROOT.
'/core/lib/contract.lib.php';
53require_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
54require_once DOL_DOCUMENT_ROOT.
'/core/modules/contract/modules_contract.php';
55require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
56require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
57require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
58require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
59require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
61 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
64 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
65 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
69$langs->loadLangs(array(
"contracts",
"orders",
"companies",
"bills",
"products",
'compta',
'propal'));
71$action =
GETPOST(
'action',
'aZ09');
72$confirm =
GETPOST(
'confirm',
'alpha');
73$cancel =
GETPOST(
'cancel',
'alpha');
74$backtopage =
GETPOST(
'backtopage',
'alpha');
75$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
80$origin =
GETPOST(
'origin',
'alpha');
83$attribute =
GETPOST(
'attribute',
'aZ09');
99 $socid = $user->socid;
103$hookmanager->initHooks(array(
'contractcard',
'globalcard'));
112if ($id > 0 || !empty($ref) && $action !=
'add') {
113 $ret =
$object->fetch($id, $ref);
115 $ret =
$object->fetch_thirdparty();
123$extrafields->fetch_name_optionals_label(
$object->table_element);
126$extralabelslines = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
128$permissionnote = $user->hasRight(
'contrat',
'creer');
129$permissiondellink = $user->hasRight(
'contrat',
'creer');
130$permissiontodelete = ($user->hasRight(
'contrat',
'creer') &&
$object->status == $object::STATUS_DRAFT) || $user->hasRight(
'contrat',
'supprimer');
131$permissiontoadd = $user->hasRight(
'contrat',
'creer');
132$permissiontoedit = $permissiontoadd;
133$permissiontoactivate = $user->hasRight(
'contrat',
'activer');
134$permissiontodisable = $user->hasRight(
'contrat',
'desactiver');
135$permissiontoeditextra = $permissiontoadd;
136if (
GETPOST(
'attribute',
'aZ09') && isset($extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')])) {
138 $permissiontoeditextra =
dol_eval((
string) $extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')]);
146if (!(
$object->id > 0) && ($action ==
'view' || $action ==
'')) {
155$parameters = array(
'socid' => $socid);
156$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
160if (empty($reshook)) {
161 $backurlforlist =
dolBuildUrl(DOL_URL_ROOT .
'/contrat/list.php');
163 if (empty($backtopage) || ($cancel && empty($id))) {
164 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
165 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
166 $backtopage = $backurlforlist;
168 $backtopage =
dolBuildUrl(DOL_URL_ROOT .
'/contrat/card.php', [
'id'=> ((!empty($id) && $id > 0) ? $id :
'__ID__')]);
174 if (!empty($backtopageforcancel)) {
175 header(
"Location: ".$backtopageforcancel);
177 } elseif (!empty($backtopage)) {
178 header(
"Location: ".$backtopage);
184 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
186 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
188 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
190 if ($action ==
'confirm_active' && $confirm ==
'yes' && $permissiontoactivate) {
203 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
208 } elseif ($action ==
'confirm_sign' && $confirm ==
'yes' && $user->hasRight(
'contract',
'creer')) {
209 $result =
$object->setSignedStatus($user,
GETPOSTINT(
'signed_status'), 0,
'CONTRACT_MODIFY');
211 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id);
216 } elseif ($action ==
'confirm_unsign' && $confirm ==
'yes' && $user->hasRight(
'contract',
'creer')) {
217 $result =
$object->setSignedStatus($user, Contrat::$SIGNED_STATUSES[
'STATUS_NO_SIGNATURE'], 0,
'CONTRACT_MODIFY');
219 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id);
224 } elseif ($action ==
'confirm_closeline' && $confirm ==
'yes' && $permissiontodisable) {
231 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"DateEnd")),
null,
'errors');
236 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
244 if (
GETPOST(
'mode') ==
'predefined') {
256 $date_start_update =
'';
257 $date_end_update =
'';
258 $date_start_real_update =
'';
259 $date_end_real_update =
'';
260 if (
GETPOST(
'date_start_updatemonth') &&
GETPOST(
'date_start_updateday') &&
GETPOST(
'date_start_updateyear')) {
263 if (
GETPOST(
'date_end_updatemonth') &&
GETPOST(
'date_end_updateday') &&
GETPOST(
'date_end_updateyear')) {
266 if (
GETPOST(
'date_start_real_updatemonth') &&
GETPOST(
'date_start_real_updateday') &&
GETPOST(
'date_start_real_updateyear')) {
269 if (
GETPOST(
'date_end_real_updatemonth') &&
GETPOST(
'date_end_real_updateday') &&
GETPOST(
'date_end_real_updateyear')) {
277 if ($action ==
'add' && $user->hasRight(
'contrat',
'creer')) {
279 if (empty($datecontrat)) {
281 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Date")),
null,
'errors');
286 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ThirdParty")),
null,
'errors');
292 $ret = $extrafields->setOptionalsFromPost(
null, $object);
300 $object->date_contrat = $datecontrat;
314 if (!empty($origin) && !empty($originid)) {
316 $element = $subelement = $origin;
317 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
319 $subelement = $regs[2];
324 if ($element ==
'order') {
325 $element = $subelement =
'commande';
327 if ($element ==
'propal') {
328 $element =
'comm/propal';
329 $subelement =
'propal';
331 if ($element ==
'invoice' || $element ==
'facture') {
332 $element =
'compta/facture';
333 $subelement =
'facture';
335 if ($element ==
'facturerec' || $element ==
'facture_rec') {
337 $element =
'compta/facture';
338 $subelement =
'facture-rec';
339 $classname =
'FactureRec';
341 if ($element ==
'facture_fourn_rec' || $element ==
'invoice_supplier_rec') {
343 $subelement =
'fournisseur.facture-rec';
344 $classname =
'FactureFournisseurRec';
348 $object->origin_id = $originid;
353 $object->linked_objects = array_merge(
$object->linked_objects,
GETPOST(
'other_linked_objects',
'array:int'));
360 if (empty($classname)) {
361 $classname = ucfirst($subelement);
363 $srcobject =
new $classname(
$db);
364 '@phan-var-force Commande|Propal|Facture $srcobject';
367 $result = $srcobject->fetch(
$object->origin_id);
369 $srcobject->fetch_thirdparty();
370 $lines = $srcobject->lines;
371 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
372 $srcobject->fetch_lines();
373 $lines = $srcobject->lines;
377 $num = count($lines);
379 for ($i = 0; $i < $num; $i++) {
380 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
382 if ($product_type == 1 || (
getDolGlobalString(
'CONTRACT_SUPPORT_PRODUCTS') && in_array($product_type, array(0, 1)))) {
384 if ($lines[$i]->fk_product > 0) {
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')) {
493 $line_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
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');
529 $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ?
price2num(
GETPOST(
'remise_percent'.$predef),
'', 2) : 0);
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 print
'<tr><td class="titlefield fieldrequired">'.$langs->trans(
'Ref').
'</td><td>';
1267 if (!empty($modCodeContract->code_auto)) {
1268 $tmpcode = $langs->trans(
"Draft");
1270 $tmpcode =
'<input name="ref" class="maxwidth100" maxlength="128" value="'.dol_escape_htmltag(
GETPOST(
'ref',
'alpha')).
'">';
1276 print
'<tr><td>'.$langs->trans(
'RefCustomer').
'</td>';
1277 print
'<td><input type="text" class="maxwidth150" name="ref_customer" id="ref_customer" value="'.dol_escape_htmltag(
GETPOST(
'ref_customer',
'alpha')).
'"></td></tr>';
1280 print
'<tr><td>'.$langs->trans(
'RefSupplier').
'</td>';
1281 print
'<td><input type="text" class="maxwidth150" name="ref_supplier" id="ref_supplier" value="'.dol_escape_htmltag(
GETPOST(
'ref_supplier',
'alpha')).
'"></td></tr>';
1285 print
'<td class="fieldrequired">'.$langs->trans(
'ThirdParty').
'</td>';
1288 print $soc->getNomUrl(1);
1289 print
'<input type="hidden" name="socid" value="'.$soc->id.
'">';
1293 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1294 print $form->select_company(
'',
'socid',
'',
'SelectThirdParty', 1, 0, array(), 0,
'minwidth150 widthcentpercentminusxx maxwidth500');
1295 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>';
1302 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1303 if ($soc->remise_percent) {
1304 print $langs->trans(
"CompanyHasRelativeDiscount", $soc->remise_percent).
' ';
1306 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoRelativeDiscount").
'. </span>';
1308 $absolute_discount = $soc->getAvailableDiscounts();
1309 if ($absolute_discount) {
1310 print $langs->trans(
"CompanyHasAbsoluteDiscount",
price($absolute_discount), $langs->trans(
"Currency".$conf->currency)).
'.';
1312 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoAbsoluteDiscount").
'.</span>';
1318 print
'<tr><td class="nowrap"><span class="fieldrequired">'.$langs->trans(
"TypeContact_contrat_internal_SALESREPFOLL").
'</span></td><td>';
1319 print
img_picto(
'',
'user',
'class="pictofixedwidth"');
1320 print $form->select_dolusers(
GETPOST(
"commercial_suivi_id") ?
GETPOST(
"commercial_suivi_id") : $user->id,
'commercial_suivi_id', 1, null);
1324 print
'<tr><td class="nowrap"><span class="fieldrequired">'.$langs->trans(
"TypeContact_contrat_internal_SALESREPSIGN").
'</span></td><td>';
1325 print
img_picto(
'',
'user',
'class="pictofixedwidth"');
1326 print $form->select_dolusers(
GETPOST(
"commercial_signature_id") ?
GETPOST(
"commercial_signature_id") : $user->id,
'commercial_signature_id', 1, null);
1329 print
'<tr><td><span class="fieldrequired">'.$langs->trans(
"Date").
'</span></td><td>';
1330 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1331 print $form->selectDate($datecontrat,
'', 0, 0, 0,
"contrat");
1336 $langs->load(
'projects');
1340 print
'<tr><td>'.$langs->trans(
"Project").
'</td><td>';
1341 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
1342 $formproject->select_projects(($soc->id > 0 ? $soc->id : -1), $projectid,
"projectid", 0, 0, 1, 1, 0, 0, 0,
'', 0, 0,
'minwidth150 maxwidth300 widthcentpercentminusxx');
1343 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>';
1348 print
'<tr><td>'.$langs->trans(
"NotePublic").
'</td><td class="tdtop">';
1349 $doleditor =
new DolEditor(
'note_public', (
string) $note_public,
'', 100,
'dolibarr_notes',
'In',
true,
true, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1350 print $doleditor->Create(1);
1354 if (empty($user->socid)) {
1355 print
'<tr><td>'.$langs->trans(
"NotePrivate").
'</td><td class="tdtop">';
1356 $doleditor =
new DolEditor(
'note_private', (
string) $note_private,
'', 100,
'dolibarr_notes',
'In',
true,
true, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1357 print $doleditor->Create(1);
1362 $parameters = array(
'objectsrc' => $objectsrc,
'colspan' =>
' colspan="3"',
'cols' =>
'3');
1363 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
1364 print $hookmanager->resPrint;
1367 if (empty($reshook)) {
1368 print
$object->showOptionals($extrafields,
'create', $parameters);
1375 print $form->buttonsSaveCancel(
"Create");
1377 if (is_object($objectsrc)) {
1378 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1379 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1382 print
'<br>'.$langs->trans(
"Note").
': '.$langs->trans(
"OnlyLinesWithTypeServiceAreUsed");
1396 $result =
$object->fetch_lines();
1401 $nbofservices = count(
$object->lines);
1404 $author->fetch(
$object->user_author_id);
1406 $commercial_signature =
new User(
$db);
1407 $commercial_signature->fetch(
$object->commercial_signature_id);
1409 $commercial_suivi =
new User(
$db);
1410 $commercial_suivi->fetch(
$object->commercial_suivi_id);
1417 print
dol_get_fiche_head($head, $hselected, $langs->trans(
"Contract"), -1,
'contract', 0,
'',
'', 0,
'', 1);
1420 if ($action ==
'delete') {
1422 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"DeleteAContract"), $langs->trans(
"ConfirmDeleteAContract"),
"confirm_delete",
'', 0, 1);
1423 } elseif ($action ==
'valid') {
1425 $ref = substr(
$object->ref, 1, 4);
1426 if ($ref ==
'PROV' && !empty($modCodeContract->code_auto)) {
1431 $text = $langs->trans(
'ConfirmValidateContract', $numref);
1432 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ValidateAContract"), $text,
"confirm_valid",
'', 0, 1);
1433 } elseif ($action ==
'close') {
1435 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"CloseAContract"), $langs->trans(
"ConfirmCloseContract"),
"confirm_close",
'', 0, 1);
1436 } elseif ($action ==
'activate') {
1437 $formquestion = array(
1438 array(
'type' =>
'date',
'name' =>
'd_start',
'label' => $langs->trans(
"DateServiceActivate"),
'value' =>
dol_now()),
1439 array(
'type' =>
'date',
'name' =>
'd_end',
'label' => $langs->trans(
"DateEndPlanned"), 0 =>
'', 1 =>
''),
1440 array(
'type' =>
'text',
'name' =>
'comment',
'label' => $langs->trans(
"Comment"),
'value' =>
'', 0 =>
'', 1 =>
'',
'class' =>
'minwidth300',
'moreattr' =>
'autofocus')
1442 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ActivateAllOnContract"), $langs->trans(
"ConfirmActivateAllOnContract"),
"confirm_activate", $formquestion,
'yes', 1, 300);
1443 } elseif ($action ==
'clone') {
1444 $filter =
'(s.client:IN:1,2,3)';
1446 $formquestion = array(array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter)));
1447 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneContract',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
1448 } elseif ($action ==
'sign') {
1449 $text = $langs->trans(
'ConfirmSignContract');
1451 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1454 $text .= $notify->confirmMessage(
'CONTRACT_MODIFY',
$object->socid, $object);
1459 'name' =>
'signed_status',
1460 'label' =>
'<span class="fieldrequired">'.$langs->trans(
'SignStatus').
'</span>',
1461 'values' =>
$object->getSignedStatusLocalisedArray()
1463 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'SignContract'), $text,
'confirm_sign', $formquestion, 0, 1);
1464 } elseif ($action ==
'unsign') {
1465 $text = $langs->trans(
'ConfirmUnsignContract');
1467 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1470 $text .= $notify->confirmMessage(
'CONTRACT_MODIFY',
$object->socid, $object);
1472 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'UnsignContract'), $text,
'confirm_unsign',
'', 0, 1);
1477 $parameters = array(
1478 'formConfirm' => $formconfirm,
1483 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
1484 if (empty($reshook)) {
1485 $formconfirm .= $hookmanager->resPrint;
1486 } elseif ($reshook > 0) {
1487 $formconfirm = $hookmanager->resPrint;
1495 if (
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'contrat',
'creer')) {
1496 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="POST">';
1497 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1498 print
'<input type="hidden" name="action" value="setremise">';
1499 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1504 $linkback =
'<a href="'.DOL_URL_ROOT.
'/contrat/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1508 if (!empty($modCodeContract->code_auto)) {
1511 $morehtmlref .= $form->editfieldkey(
"",
'ref',
$object->ref, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 3);
1512 $morehtmlref .= $form->editfieldval(
"",
'ref',
$object->ref, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'',
null,
'2');
1515 $morehtmlref .=
'<div class="refidno">';
1517 $morehtmlref .= $form->editfieldkey(
"RefCustomer",
'ref_customer',
$object->ref_customer, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 1);
1518 $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');
1520 $morehtmlref .=
'<br>';
1521 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'', 0, 1);
1522 $morehtmlref .= $form->editfieldval(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $user->hasRight(
'contrat',
'creer'),
'string',
'',
null,
null,
'', 1,
'getFormatedSupplierRef');
1524 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1);
1526 $morehtmlref .=
' <span class="otherlink valignmiddle">(<a href="'.DOL_URL_ROOT.
'/contrat/list.php?socid='.
$object->thirdparty->id.
'&search_name='.urlencode(
$object->thirdparty->name).
'">'.$langs->trans(
"OtherContracts").
'</a>)</span>';
1530 $langs->load(
"projects");
1531 $morehtmlref .=
'<br>';
1532 if ($permissiontoadd) {
1533 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
1534 if ($action !=
'classify') {
1535 $morehtmlref .=
'<a class="editfielda" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'action' =>
'classify',
'id' =>
$object->id],
true).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1537 $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');
1539 if (!empty(
$object->fk_project)) {
1541 $proj->fetch(
$object->fk_project);
1542 $morehtmlref .= $proj->getNomUrl(1);
1544 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
1549 $morehtmlref .=
'</div>';
1552 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'none', $morehtmlref);
1555 print
'<div class="fichecenter">';
1556 print
'<div class="fichehalfleft">';
1557 print
'<div class="underbanner clearboth"></div>';
1559 print
'<table class="border centpercent tableforfield">';
1562 print
'<tr><td class="titlefield">'.$langs->trans(
'Discount').
'</td><td colspan="3">';
1563 if (
$object->thirdparty->remise_percent) {
1564 print $langs->trans(
"CompanyHasRelativeDiscount",
$object->thirdparty->remise_percent).
'. ';
1566 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoRelativeDiscount").
'. </span>';
1568 $absolute_discount =
$object->thirdparty->getAvailableDiscounts();
1569 if ($absolute_discount) {
1570 print $langs->trans(
"CompanyHasAbsoluteDiscount",
price($absolute_discount), $langs->trans(
"Currency".$conf->currency)).
'.';
1572 print
'<span class="hideonsmartphone">'.$langs->trans(
"CompanyHasNoAbsoluteDiscount").
'.</span>';
1578 print
'<td class="titlefield">';
1579 print $form->editfieldkey(
"Date",
'date_contrat',
$object->date_contrat, $object, $user->hasRight(
'contrat',
'creer'));
1581 print $form->editfieldval(
"Date",
'date_contrat',
$object->date_contrat, $object, $user->hasRight(
'contrat',
'creer'),
'datehourpicker');
1586 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1591 print
'<div class="fichehalfright">';
1593 print
'<!-- amounts -->'.
"\n";
1594 print
'<div class="underbanner clearboth"></div>';
1596 print
'<div class="div-table-responsive-no-min">';
1597 print
'<table class="border tableforfield centpercent">';
1600 print
'<tr><td class="titlefield">'.
"".
'</td>';
1601 print
'<td class=right>'.$langs->trans(
'Total').
'</td>';
1602 print
'<td class=right>'.$staticcontractline->LibStatut(0, 5, 0).
'</td>';
1603 print
'<td class=right>'.$staticcontractline->LibStatut(4, 5, 0).
'</td>';
1604 print
'<td class=right>'.$staticcontractline->LibStatut(4, 5, 1).
'</td>';
1605 print
'<td class=right>'.$staticcontractline->LibStatut(5, 5, 0).
'</td>';
1608 $all=
$object->getTotalizedLines(-1, 0);
1609 $draft=
$object->getTotalizedLines(0, 0);
1610 $enabled=
$object->getTotalizedLines(4, 0);
1611 $expired=
$object->getTotalizedLines(4, 1);
1612 $close=
$object->getTotalizedLines(5, 0);
1614 print
'<tr><td class="titlefield">'.$langs->trans(
"Lines").
'</td>';
1615 print
'<td class="right nowrap">'.($all[
'total_qty'] ?
price2num($all[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1616 print
'<td class="right">'.($draft[
'total_qty'] ?
price2num($draft[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1617 print
'<td class="right">'.($enabled[
'total_qty'] ?
price2num($enabled[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1618 print
'<td class="right">'.($expired[
'total_qty'] ?
price2num($expired[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1619 print
'<td class="right">'.($close[
'total_qty'] ?
price2num($close[
'total_qty']) :
'<span class="opacitymedium">0</span>').
'</td>';
1622 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalHT").
'</td>';
1623 print
'<td class="nowraponall amountcard right">'.($all[
'total_ht'] ?
price($all[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1624 print
'<td class="nowraponall amountcard right">'.($draft[
'total_ht'] ?
price($draft[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1625 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_ht'] ?
price($enabled[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1626 print
'<td class="nowraponall amountcard right">'.($expired[
'total_ht'] ?
price($expired[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1627 print
'<td class="nowraponall amountcard right">'.($close[
'total_ht'] ?
price($close[
'total_ht']) :
'<span class="opacitymedium">0</span>').
'</td>';
1630 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalVAT").
'</td>';
1631 print
'<td class="nowraponall amountcard right nowrap">'.($all[
'total_tva'] ?
price($all[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1632 print
'<td class="nowraponall amountcard right">'.($draft[
'total_tva'] ?
price($draft[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1633 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_tva'] ?
price($enabled[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1634 print
'<td class="nowraponall amountcard right">'.($expired[
'total_tva'] ?
price($expired[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1635 print
'<td class="nowraponall amountcard right">'.($close[
'total_tva'] ?
price($close[
'total_tva']) :
'<span class="opacitymedium">0</span>').
'</td>';
1638 if (
$mysoc->localtax1_assuj ==
"1" || $all[
'total_localtax1'] != 0) {
1639 print
'<tr><td class="titlefield">' . $langs->trans(
"TotalLT1") .
'</td>';
1640 print
'<td class="nowraponall amountcard right nowrap">' . ($all[
'total_localtax1'] ?
price($all[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1641 print
'<td class="nowraponall amountcard right">' . ($draft[
'total_localtax1'] ?
price($draft[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1642 print
'<td class="nowraponall amountcard right">' . ($enabled[
'total_localtax1'] ?
price($enabled[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1643 print
'<td class="nowraponall amountcard right">' . ($expired[
'total_localtax1'] ?
price($expired[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1644 print
'<td class="nowraponall amountcard right">' . ($close[
'total_localtax1'] ?
price($close[
'total_localtax1']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1648 if (
$mysoc->localtax2_assuj ==
"1" || $all[
'total_localtax2'] != 0) {
1649 print
'<tr><td class="titlefield">' . $langs->trans(
"TotalLT2") .
'</td>';
1650 print
'<td class="nowraponall amountcard right nowrap">' . ($all[
'total_localtax2'] ?
price($all[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1651 print
'<td class="nowraponall amountcard right">' . ($draft[
'total_localtax2'] ?
price($draft[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1652 print
'<td class="nowraponall amountcard right">' . ($enabled[
'total_localtax2'] ?
price($enabled[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1653 print
'<td class="nowraponall amountcard right">' . ($expired[
'total_localtax2'] ?
price($expired[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1654 print
'<td class="nowraponall amountcard right">' . ($close[
'total_localtax2'] ?
price($close[
'total_localtax2']) :
'<span class="opacitymedium">0</span>') .
'</td>';
1658 print
'<tr><td class="titlefield">'.$langs->trans(
"TotalTTC").
'</td>';
1659 print
'<td class="nowraponall amountcard right nowrap">'.($all[
'total_ttc'] ?
price($all[
'total_ttc']):
'<span class="opacitymedium">0</span>').
'</td>';
1660 print
'<td class="nowraponall amountcard right">'.($draft[
'total_ttc'] ?
price($draft[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1661 print
'<td class="nowraponall amountcard right">'.($enabled[
'total_ttc'] ?
price($enabled[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1662 print
'<td class="nowraponall amountcard right">'.($expired[
'total_ttc'] ?
price($expired[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1663 print
'<td class="nowraponall amountcard right">'.($close[
'total_ttc'] ?
price($close[
'total_ttc']) :
'<span class="opacitymedium">0</span>').
'</td>';
1672 print
'<div class="clearboth"></div><br>';
1674 if (
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'contrat',
'creer')) {
1681 $blocname =
'contacts';
1682 $title = $langs->trans(
'ContactsAddresses');
1683 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1687 $blocname =
'notes';
1688 $title = $langs->trans(
'Notes');
1689 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1693 $arrayothercontracts =
$object->getListOfContracts(
'others');
1701 global $inputalsopricewithtax;
1702 $inputalsopricewithtax = 1;
1707 if (
isModEnabled(
'margin') && !empty(
$object->element) && in_array(
$object->element, array(
'facture',
'propal',
'commande'))) {
1711 $parameters = array(
'nbOfLines' => &$nbofservices);
1712 $reshook = $hookmanager->executeHooks(
'printObjectLinesBlock', $parameters, $object, $action);
1713 if (empty($reshook)) {
1717 print
'<div id="contrat-lines-container" id="contractlines" data-contractid="'.$object->id.
'" data-element="'.
$object->element.
'" >';
1718 while ($cursorline <= $nbofservices) {
1719 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.
'" >';
1720 print
'<form name="update" id="addproduct" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="post">';
1721 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1722 print
'<input type="hidden" name="action" value="updateline">';
1723 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1724 print
'<input type="hidden" name="elrowid" value="'.$object->lines[$cursorline - 1]->id.
'">';
1725 print
'<input type="hidden" name="fournprice" value="'.(!empty(
$object->lines[$cursorline - 1]->fk_fournprice) ?
$object->lines[$cursorline - 1]->fk_fournprice : 0).
'">';
1728 print
'<div class="div-table-responsive-no-min">';
1729 print
'<table class="notopnoleftnoright allwidth tableforservicepart1 centpercent">';
1731 $sql =
"SELECT cd.rowid, cd.statut, cd.label as label_det, cd.fk_product, cd.product_type, cd.description, cd.qty,";
1732 $sql .=
" cd.tva_tx, cd.vat_src_code, cd.remise_percent, cd.info_bits, cd.subprice, cd.multicurrency_subprice,";
1733 $sql .=
" cd.date_ouverture_prevue as date_start, cd.date_ouverture as date_start_real,";
1734 $sql .=
" cd.date_fin_validite as date_end, cd.date_cloture as date_end_real,";
1735 $sql .=
" cd.commentaire as comment, cd.fk_product_fournisseur_price as fk_fournprice, cd.buy_price_ht as pa_ht,";
1736 $sql .=
" cd.fk_unit,";
1737 $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";
1738 $sql .=
" ,cd.rang";
1739 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contratdet as cd";
1740 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON cd.fk_product = p.rowid";
1741 $sql .=
" WHERE cd.rowid = ".((int)
$object->lines[$cursorline - 1]->id);
1743 $result =
$db->query($sql);
1748 $objp =
$db->fetch_object($result);
1751 print
'<tr class="liste_titre'.($cursorline ?
' liste_titre_add' :
'').
'">';
1752 print
'<td>'.$langs->trans(
"ServiceNb", $cursorline).
'</td>';
1753 print
'<td width="80" class="center">'.$langs->trans(
"VAT").
'</td>';
1754 print
'<td width="80" class="right">'.$langs->trans(
"PriceUHT").
'</td>';
1758 print
'<td width="30" class="center">'.$langs->trans(
"Qty").
'</td>';
1760 print
'<td width="30" class="left">'.$langs->trans(
"Unit").
'</td>';
1762 print
'<td width="50" class="right">'.$langs->trans(
"ReductionShort").
'</td>';
1764 print
'<td width="50" class="right">'.$langs->trans(
"BuyingPrice").
'</td>';
1768 if ($nbofservices > 1 &&
$conf->browser->layout !=
'phone' && $user->hasRight(
'contrat',
'creer')) {
1769 print
'<td width="30" class="linecolmove tdlineupdown center">';
1770 if ($cursorline > 1) {
1771 print
'<a class="lineupdown reposition paddingrightonly paddingleftonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=up&token='.newToken().
'&rowid='.$objp->rowid.
'">';
1772 echo
img_up(
'default', 0,
'imgupforline');
1775 if ($cursorline < $nbofservices) {
1776 print
'<a class="lineupdown reposition paddingrightonly paddingleftonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=down&token='.newToken().
'&rowid='.$objp->rowid.
'">';
1777 echo
img_down(
'default', 0,
'imgdownforline');
1782 print
'<td width="30"> </td>';
1790 if ($action !=
'editline' || $idline != $objp->rowid) {
1792 if (
getDolGlobalString(
'CONTRACT_HIDE_CLOSED_SERVICES_BY_DEFAULT') && $objp->statut == ContratLigne::STATUS_CLOSED && $action !=
'showclosedlines') {
1793 $moreparam =
'style="display: none;"';
1797 $line->id = $objp->rowid;
1801 print
'<tr class="tdtop oddeven" '.$moreparam.
'>';
1804 print
'<td class="linecoldescription minwidth300imp">';
1806 print
'<div id="line_'.$line->rowid.
'"></div>';
1807 if ($objp->fk_product > 0) {
1808 $productstatic->id = $objp->fk_product;
1809 $productstatic->type = $objp->ptype;
1810 $productstatic->ref = $objp->pref;
1811 $productstatic->entity = $objp->pentity;
1812 $productstatic->label = $objp->plabel;
1813 $productstatic->status = $objp->tosell;
1814 $productstatic->status_buy = $objp->tobuy;
1815 $productstatic->status_batch = $objp->tobatch;
1817 $text = $productstatic->getNomUrl(1,
'', 32);
1818 if ($objp->plabel) {
1820 $text .= $objp->plabel;
1822 $description = $objp->description;
1825 print (!empty($line->fk_parent_line) ?
img_picto(
'',
'rightarrow.png') :
'') . $text;
1827 print $form->textwithpicto(
'', $description);
1830 print $form->textwithtooltip($text, $description, 3, 0,
'',
'', 0, (!empty($line->fk_parent_line) ?
img_picto(
'',
'rightarrow.png') :
''));
1834 if ($line->fk_product > 0 &&
getDolGlobalInt(
'PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) {
1835 print (!empty($line->description) && $line->description != $line->plabel) ? (($line->date_start || $line->date_end) ?
'' :
'<br>').
'<br>'.
dol_htmlentitiesbr($line->
description) :
'';
1843 print
'<td class="center">';
1844 print
vatrate($objp->tva_tx.($objp->vat_src_code ? (
' ('.$objp->vat_src_code.
')') :
''), true, $objp->info_bits);
1847 print
'<td class="right">'.($objp->subprice !=
'' ?
price($objp->subprice) :
'').
"</td>\n";
1853 print
'<td class="center">'.$objp->qty.
'</td>';
1856 print
'<td class="left">'.$object->lines[$cursorline - 1]->getLabelOfUnit(
'long', $langs).
'</td>';
1859 if ($objp->remise_percent > 0) {
1860 print
'<td class="right">'.$objp->remise_percent.
"%</td>\n";
1862 print
'<td> </td>';
1867 print
'<td class="right nowraponall">'.price($objp->pa_ht).
'</td>';
1871 print
'<td class="nowraponall right">';
1872 if ($user->hasRight(
'contrat',
'creer') && is_array($arrayothercontracts) && count($arrayothercontracts) && (
$object->status >= 0)) {
1873 print
'<!-- link to move service line into another contract -->';
1874 print
'<a class="reposition marginrightonly" style="padding-left: 5px;" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=move&token='.newToken().
'&elrowid='.$objp->rowid.
'">';
1875 print
img_picto($langs->trans(
"MoveToAnotherContract"),
'uparrow');
1878 if ($user->hasRight(
'contrat',
'creer') && (
$object->statut >= 0)) {
1879 print
'<a class="reposition marginrightonly editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=editline&token='.newToken().
'&elrowid='.$objp->rowid.
'">';
1883 if ($user->hasRight(
'contrat',
'creer') && (
$object->statut >= 0)) {
1884 print
'<a class="reposition marginrightonly" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=deleteline&token='.newToken().
'&elrowid='.$objp->rowid.
'">';
1901 if ($objp->subprice >= 0) {
1902 print
'<tr class="oddeven" '.$moreparam.
'>';
1903 print
'<td colspan="'.$colspan.
'">';
1906 print $langs->trans(
"DateStartPlanned").
': ';
1907 if ($objp->date_start) {
1910 if ($objp->statut == 0 &&
$db->jdate($objp->date_start) < ($now -
$conf->contrat->services->inactifs->warning_delay)) {
1911 $warning_delay =
$conf->contrat->services->inactifs->warning_delay / 3600 / 24;
1912 $textlate = $langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($warning_delay) >= 0 ?
'+' :
'').ceil($warning_delay).
' '.$langs->trans(
"days");
1913 print
" ".img_warning($textlate);
1916 print $langs->trans(
"Unknown");
1918 print
' - ';
1919 print $langs->trans(
"DateEndPlanned").
': ';
1920 if ($objp->date_end) {
1922 if ($objp->statut == 4 &&
$db->jdate($objp->date_end) < ($now -
$conf->contrat->services->expires->warning_delay)) {
1923 $warning_delay =
$conf->contrat->services->expires->warning_delay / 3600 / 24;
1924 $textlate = $langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($warning_delay) >= 0 ?
'+' :
'').ceil($warning_delay).
' '.$langs->trans(
"days");
1925 print
" ".img_warning($textlate);
1928 print $langs->trans(
"Unknown");
1936 if (is_array($extralabelslines) && count($extralabelslines) > 0) {
1938 $line->id = $objp->rowid;
1939 $line->fetch_optionals();
1940 print $line->showOptionals($extrafields,
'view', array(
'class' =>
'oddeven',
'style' => $moreparam,
'colspan' => $colspan,
'tdclass' =>
'notitlefieldcreate'),
'',
'',
'1');
1945 print
'<tr class="oddeven">';
1947 $currentLineProductId = GETPOSTISSET(
'idprod') ?
GETPOST(
'idprod') : (!empty(
$object->lines[$cursorline - 1]->fk_product) ?
$object->lines[$cursorline - 1]->fk_product : 0);
1948 if ($objp->fk_product > 0) {
1949 $canchangeproduct = 1;
1952 if (empty($canchangeproduct)) {
1953 $productstatic->id = $objp->fk_product;
1954 $productstatic->type = $objp->ptype;
1955 $productstatic->ref = $objp->pref;
1956 $productstatic->entity = $objp->pentity;
1957 print $productstatic->getNomUrl(1,
'', 32);
1958 print $objp->label ?
' - '.dol_trunc($objp->label, 32) :
'';
1959 print
'<input type="hidden" name="idprod" value="'.$currentLineProductId.
'">';
1961 $senderissupplier = 0;
1962 if (empty($senderissupplier)) {
1968 print $form->select_produits($currentLineProductId,
'idprod', $filtertype, 0, 0, 1, 2,
'', 0, array(), 0, 1, 0,
'minwidth250onall maxwidth500 widthcentpercentminusx');
1970 $form->select_produits_fournisseurs($currentLineProductId,
'idprod');
1975 print $objp->label ? $objp->label.
'<br>' :
'';
1976 print
'<input type="hidden" name="idprod" value="'.$currentLineProductId.
'">';
1980 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1985 $doleditor =
new DolEditor(
'product_desc', (GETPOSTISSET(
'product_desc') ?
GETPOST(
'product_desc') : $objp->
description),
'', 92,
'dolibarr_details',
'', false, true,
getDolGlobalInt(
'FCKEDITOR_ENABLE_DETAILS'), $nbrows,
'90%');
1986 $doleditor->Create();
1991 print
'<td class="right">';
1992 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);
1996 print
'<td class="right"><input class="width50" type="text" name="elprice" value="'.(GETPOSTISSET(
'elprice') ?
GETPOST(
'elprice') :
price($objp->subprice)).
'"></td>';
2004 print
'<td class="center"><input size="2" type="text" name="elqty" value="'.(GETPOSTISSET(
'elqty') ?
GETPOST(
'elqty') : $objp->qty).
'"></td>';
2008 print
'<td class="left">';
2009 print $form->selectUnits((GETPOSTISSET(
'unit') ?
GETPOSTINT(
'unit') : $objp->fk_unit),
"unit");
2014 print
'<td class="nowraponall right"><input size="1" type="text" name="elremise_percent" value="'.(GETPOSTISSET(
'elremise_percent') ?
GETPOST(
'elremise_percent') : $objp->remise_percent).
'">%</td>';
2016 if (!empty($usemargins)) {
2017 print
'<td class="right">';
2018 if ($objp->fk_product) {
2019 print
'<select id="fournprice" name="fournprice"></select>';
2021 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>';
2023 print
'<td class="center">';
2024 print
'<input type="submit" class="button margintoponly marginbottomonly" name="save" value="'.$langs->trans(
"Modify").
'">';
2025 print
'<br><input type="submit" class="button margintoponly marginbottomonly button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2038 print
'<tr class="oddeven">';
2039 print
'<td colspan="'.$colspan.
'">';
2040 print $langs->trans(
"DateStartPlanned").
' ';
2041 print $form->selectDate(
$db->jdate($objp->date_start),
"date_start_update", $usehm, $usehm, (
$db->jdate($objp->date_start) > 0 ? 0 : 1),
"update");
2042 print
' '.$langs->trans(
"DateEndPlanned").
' ';
2043 print $form->selectDate(
$db->jdate($objp->date_end),
"date_end_update", $usehm, $usehm, (
$db->jdate($objp->date_end) > 0 ? 0 : 1),
"update");
2047 if (is_array($extralabelslines) && count($extralabelslines) > 0) {
2049 $line->id = $objp->rowid;
2050 $line->fetch_optionals();
2052 print $line->showOptionals($extrafields,
'edit', array(
'style' =>
'class="oddeven"',
'colspan' => $colspan,
'tdclass' =>
'notitlefieldcreate'),
'',
'',
'1');
2063 if (
getDolGlobalString(
'CONTRACT_HIDE_CLOSED_SERVICES_BY_DEFAULT') &&
$object->lines[$cursorline - 1]->statut == ContratLigne::STATUS_CLOSED && $action !=
'showclosedlines') {
2064 $moreparam =
'style="display: none;"';
2075 print
'<tr class="oddeven" '.$moreparam.
'>';
2076 print
'<td class="tdhrthin" colspan="'.$colspan.
'"><hr class="opacitymedium tdhrthin"></td>';
2089 if ($action ==
'deleteline' && !$cancel && $user->hasRight(
'contrat',
'creer') &&
$object->lines[$cursorline - 1]->id == $idline) {
2090 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".((
int)
$object->id).
"&lineid=".((
int) $idline), $langs->trans(
"DeleteContractLine"), $langs->trans(
"ConfirmDeleteContractLine"),
"confirm_deleteline",
'', 0, 1);
2091 if ($ret ==
'html') {
2092 print
'<table class="notopnoleftnoright centpercent"><tr class="oddeven" height="6"><td></td></tr></table>';
2099 if ($action ==
'move' && !$cancel && $user->hasRight(
'contrat',
'creer') &&
$object->lines[$cursorline - 1]->id == $idline) {
2100 $arraycontractid = array();
2101 foreach ($arrayothercontracts as $contractcursor) {
2102 $arraycontractid[$contractcursor->id] = $contractcursor->ref;
2106 $formquestion = array(
2107 'text' => $langs->trans(
"ConfirmMoveToAnotherContractQuestion"),
2108 0 => array(
'type' =>
'select',
'name' =>
'newcid',
'values' => $arraycontractid));
2110 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".((
int)
$object->id).
"&lineid=".((
int) $idline), $langs->trans(
"MoveToAnotherContract"), $langs->trans(
"ConfirmMoveToAnotherContract"),
"confirm_move", $formquestion,
'yes');
2111 print
'<table class="notopnoleftnoright centpercent"><tr class="oddeven" height="6"><td></td></tr></table>';
2116 print
'<table class="notopnoleftnoright tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2118 print
'<tr class="oddeven" '.$moreparam.
'>';
2119 print
'<td><span class="valignmiddle hideonsmartphone">'.$langs->trans(
"ServiceStatus").
':</span> '.
$object->lines[$cursorline - 1]->getLibStatut(4).
'</td>';
2120 print
'<td width="30" class="right">';
2121 if ($user->socid == 0) {
2122 if (
$object->status > 0 && $action !=
'activateline' && $action !=
'unactivateline' && is_object($objp)) {
2123 $tmpaction =
'activateline';
2124 $tmpactionpicto =
'play';
2125 $tmpactiontext = $langs->trans(
"Activate");
2126 if ($objp->statut == 4) {
2127 $tmpaction =
'unactivateline';
2128 $tmpactionpicto =
'playstop.png';
2129 $tmpactiontext = $langs->trans(
"Disable");
2131 if (($tmpaction ==
'activateline' && $user->hasRight(
'contrat',
'activer')) || ($tmpaction ==
'unactivateline' && $user->hasRight(
'contrat',
'desactiver'))) {
2132 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&ligne='.
$object->lines[$cursorline - 1]->id.
'&action='.$tmpaction.
'&token='.newToken().
'">';
2133 print
img_picto($tmpactiontext, $tmpactionpicto);
2141 print
'<tr class="oddeven" '.$moreparam.
'>';
2145 if (!$objp->date_start_real) {
2146 print $langs->trans(
"DateStartReal").
': ';
2147 if ($objp->date_start_real) {
2150 print $langs->trans(
"ContractStatusNotRunning");
2154 if ($objp->date_start_real && !$objp->date_end_real) {
2155 print $langs->trans(
"DateStartReal").
': ';
2159 if ($objp->date_start_real && $objp->date_end_real) {
2160 print $langs->trans(
"DateStartReal").
': ';
2162 print
' - ';
2163 print $langs->trans(
"DateEndReal").
': ';
2166 if (!empty($objp->comment)) {
2167 print
" - ".$objp->comment;
2171 print
'<td class="center"> </td>';
2178 if ($permissiontoactivate && $action ==
'activateline' &&
$object->lines[$cursorline - 1]->id ==
GETPOSTINT(
'ligne') && is_object($objp)) {
2179 print
'<form name="active" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
2180 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2181 print
'<input type="hidden" name="action" value="confirm_active">';
2182 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2183 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
2184 print
'<input type="hidden" name="ligne" value="'.GETPOSTINT(
'ligne').
'">';
2185 print
'<input type="hidden" name="confirm" value="yes">';
2187 print
'<table class="noborder tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2190 $dateactstart = $objp->date_start;
2193 } elseif (!$dateactstart) {
2194 $dateactstart = time();
2197 $dateactend = $objp->date_end;
2200 } elseif (!$dateactend) {
2201 if ($objp->fk_product > 0) {
2203 $product->fetch($objp->fk_product);
2204 if (!empty($product->duration_value) && !empty($product->duration_unit)) {
2205 $dateactend =
dol_time_plus_duree(time(), $product->duration_value, $product->duration_unit);
2210 print
'<tr class="oddeven">';
2211 print
'<td class="nohover">'.$langs->trans(
"DateServiceActivate").
'</td><td class="nohover">';
2212 print $form->selectDate($dateactstart,
'start', $usehm, $usehm, 0,
"active", 1, 0);
2214 print
'<td class="nohover">'.$langs->trans(
"DateEndPlanned").
'</td><td class="nohover">';
2215 print $form->selectDate($dateactend,
"end", $usehm, $usehm, 0,
"active", 1, 0);
2217 print
'<td class="center nohover">';
2222 print
'<tr class="oddeven">';
2223 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>';
2224 print
'<td class="nohover right">';
2225 print
'<input type="submit" class="button" name="activate" value="'.$langs->trans(
"Activate").
'"> ';
2226 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2236 if ($permissiontodisable && $action ==
'unactivateline' &&
$object->lines[$cursorline - 1]->id ==
GETPOSTINT(
'ligne') && is_object($objp)) {
2237 print
'<!-- Form to disabled a line -->'.
"\n";
2238 print
'<form name="confirm_closeline" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&ligne='.
$object->lines[$cursorline - 1]->id.
'" method="post">';
2239 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2240 print
'<input type="hidden" name="confirm" value="yes">';
2241 print
'<input type="hidden" name="action" value="confirm_closeline">';
2242 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2244 print
'<table class="noborder tableforservicepart2'.($cursorline < $nbofservices ?
' boxtablenobottom' :
'').
' centpercent">';
2247 $dateactstart = $objp->date_start_real;
2250 } elseif (!$dateactstart) {
2251 $dateactstart = time();
2254 $dateactend = $objp->date_end_real;
2257 } elseif (!$dateactend) {
2258 if ($objp->fk_product > 0) {
2260 $product->fetch($objp->fk_product);
2261 $dateactend =
dol_time_plus_duree(time(), $product->duration_value, $product->duration_unit);
2265 if ($dateactend > $now) {
2269 print
'<tr class="oddeven"><td colspan="2" class="nohover">';
2270 if ($objp->statut >= 4) {
2271 if ($objp->statut == 4) {
2272 print $langs->trans(
"DateEndReal").
' ';
2273 print $form->selectDate($dateactend,
"end", $usehm, $usehm, ($objp->date_end_real > 0 ? 0 : 1),
"closeline", 1, 1);
2277 print
'<td class="center nohover">';
2280 print
'<tr class="oddeven">';
2281 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>';
2282 print
'<td class="nohover right">';
2283 print
'<input type="submit" class="button" name="close" value="'.$langs->trans(
"Disable").
'"> ';
2284 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2299 if ($user->hasRight(
'contrat',
'creer') && (
$object->status == 0)) {
2303 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
2304 <input type="hidden" name="token" value="'.newToken().
'">
2305 <input type="hidden" name="action" value="'.(($action !=
'editline') ?
'addline' :
'updateline').
'">
2306 <input type="hidden" name="mode" value="">
2307 <input type="hidden" name="id" value="'.
$object->id.
'">
2308 <input type="hidden" name="page_y" value="">
2309 <input type="hidden" name="backtopage" value="'.$backtopage.
'">
2312 print
'<div class="div-table-responsive-no-min">';
2313 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
2316 if ($action !=
'editline') {
2317 $forcetoshowtitlelines = 1;
2318 if (empty(
$object->multicurrency_code)) {
2324 $parameters = array();
2325 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
2329 if (empty($reshook)) {
2342 if (
GETPOST(
'modelselected')) {
2343 $action =
'presend';
2349 if ($user->socid == 0 && $action !=
'presend' && $action !=
'editline') {
2350 print
'<div class="tabsAction">';
2352 $parameters = array();
2353 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2355 if (empty($reshook)) {
2359 'class' =>
'classfortooltip'
2364 if (empty($user->socid)) {
2365 if (
$object->status == $object::STATUS_VALIDATED) {
2366 if ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'contrat',
'creer'))) {
2367 print dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=presend&token='.newToken().
'&mode=init#formmailbeforetitle',
'',
true, $params);
2369 print dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email',
'#',
'',
false, $params);
2374 if (
$object->status == $object::STATUS_DRAFT && $nbofservices) {
2375 if ($user->hasRight(
'contrat',
'creer')) {
2376 unset($params[
'attr'][
'title']);
2377 print dolGetButtonAction($langs->trans(
'Validate'),
'',
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.newToken(),
'',
true, $params);
2379 $params[
'attr'][
'title'] = $langs->trans(
"NotEnoughPermissions");
2380 print dolGetButtonAction($langs->trans(
'Validate'),
'',
'default',
'#',
'',
false, $params);
2383 if (
$object->status == $object::STATUS_VALIDATED) {
2384 if ($user->hasRight(
'contrat',
'creer')) {
2385 unset($params[
'attr'][
'title']);
2386 print dolGetButtonAction($langs->trans(
'Modify'),
'',
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.newToken(),
'',
true, $params);
2388 $params[
'attr'][
'title'] = $langs->trans(
"NotEnoughPermissions");
2389 print dolGetButtonAction($langs->trans(
'Modify'),
'',
'default',
'#',
'',
false, $params);
2394 $arrayofcreatebutton = array();
2396 $arrayofcreatebutton[] = array(
2397 'url' =>
'/comm/propal/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id.
'&renewal=true',
2398 'label' => $langs->trans(
'AddProp'),
2400 'perm' => $user->hasRight(
'propale',
'creer') ?
true : false,
2406 $arrayofcreatebutton[] = array(
2407 'url' =>
'/commande/card.php?action=create&token='.newToken().
'&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2408 'label' => $langs->trans(
'AddOrder'),
2410 'perm' => $user->hasRight(
'commande',
'creer') ?
true : false,
2415 $arrayofcreatebutton[] = array(
2416 'url' =>
'/compta/facture/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2417 'label' => $langs->trans(
'CreateBill'),
2419 'perm' => $user->hasRight(
'facture',
'creer') ?
true : false,
2424 $langs->load(
"suppliers");
2425 $arrayofcreatebutton[] = array(
2426 'url' =>
'/fourn/facture/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->thirdparty->id,
2427 'label' => $langs->trans(
'AddSupplierInvoice'),
2429 'perm' => $user->hasRight(
'fournisseur',
'facture',
'creer') ?
true : false,
2433 if (count($arrayofcreatebutton)) {
2434 unset($params[
'attr'][
'title']);
2435 print dolGetButtonAction(
'', $langs->trans(
"Create"),
'default', $arrayofcreatebutton,
'',
true, $params);
2438 $arrayforbutaction = array();
2439 $arrayforbutaction[] = array(
2440 'url' =>
'/contrat/card.php?id='.
$object->id.
'&action=activate&token='.newToken(),
2441 'label' => $langs->trans(
'ActivateAllContracts'),
2443 'perm' => (
$object->nbofservicesclosed > 0 ||
$object->nbofserviceswait > 0) ? $permissiontoactivate : -1,
2446 $arrayforbutaction[] = array(
2447 'url' =>
'/contrat/card.php?id='.
$object->id.
'&action=close&token='.newToken(),
2448 'label' => $langs->trans(
'CloseAllContracts'),
2450 'perm' => (
$object->nbofservicesclosed < $nbofservices) ? $permissiontodisable : -1,
2454 if (count($arrayforbutaction)) {
2455 unset($params[
'attr'][
'title']);
2456 print dolGetButtonAction(
'', $langs->trans(
"Enable").
" / ".$langs->trans(
"Close"),
'default', $arrayforbutaction,
'',
true, $params);
2460 if ($action ==
'showclosedlines') {
2461 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>';
2463 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>';
2468 if (
getDolGlobalString(
'CONTRACT_SHOW_SIGNATURE_STATUS_WITH_SERVICE_STATUS') &&
$object->status > Contrat::STATUS_DRAFT) {
2469 if (
$object->signed_status != Contrat::$SIGNED_STATUSES[
'STATUS_SIGNED_ALL']) {
2470 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>';
2472 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>';
2477 if ($user->hasRight(
'contrat',
'creer')) {
2478 unset($params[
'attr'][
'title']);
2479 print dolGetButtonAction($langs->trans(
'ToClone'),
'',
'clone', $_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&socid='.
$object->socid.
'&action=clone&token='.newToken(),
'',
true, $params);
2483 unset($params[
'attr'][
'title']);
2484 print dolGetButtonAction($langs->trans(
'Delete'),
'',
'delete', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.newToken(),
'', $permissiontodelete, $params);
2490 if ($action !=
'presend') {
2491 print
'<div class="fichecenter"><div class="fichehalfleft">';
2498 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2499 $genallowed = $user->hasRight(
'contrat',
'lire');
2500 $delallowed = $user->hasRight(
'contrat',
'creer');
2501 $tooltipAfterComboOfModels =
'';
2503 $tooltipAfterComboOfModels = $langs->trans(
"AccordingToYourSetupTheFileWillBeConcatenated",
getDolGlobalString(
'MAIN_INFO_CONTRACT_TERMSOFSALE'));
2506 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);
2510 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'contrat'), 1);
2511 $linktoelem = $tmparray[
'linktoelem'];
2512 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
2513 print $htmltoenteralink;
2515 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
2519 print
'<br><!-- Link to sign -->';
2520 require_once DOL_DOCUMENT_ROOT.
'/core/lib/signature.lib.php';
2522 print showOnlineSignatureUrl(
'contract',
$object->ref, $object).
'<br>';
2525 print
'</div><div class="fichehalfright">';
2529 $morehtmlcenter =
'<div class="nowraponall">';
2530 $morehtmlcenter .= dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/contrat/messaging.php?id='.
$object->id);
2531 $morehtmlcenter .= dolGetButtonTitle($langs->trans(
'SeeAll'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/contrat/agenda.php?id='.
$object->id);
2532 $morehtmlcenter .=
'</div>';
2536 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2538 $somethingshown = $formactions->showactions($object,
'contract', $socid, 1,
'listactions', $MAXEVENT,
'', $morehtmlcenter);
2540 print
'</div></div>';
2544 $modelmail =
'contract';
2545 $defaulttopic =
'SendContractRef';
2546 $diroutput =
$conf->contract->multidir_output[
$object->entity ??
$conf->entity];
2547 $trackid =
'con'.$object->id;
2549 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
2561 print
"\n".
'<script type="text/javascript">'.
"\n";
2563 $(document).ready(
function() {
2564 var idprod = $(
"input[name='idprod']").val();
2565 var fournprice = $(
"input[name='fournprice']").val();
2566 var token =
'<?php echo currentToken(); ?>';
2568 $.post(
'<?php echo DOL_URL_ROOT; ?>/fourn/ajax/getSupplierPrices.php', {
2572 if (data.length > 0) {
2575 $(data).each(
function() {
2576 options +=
'<option value="'+this.
id+
'" price="'+this.price+
'"';
2577 if (fournprice > 0) {
2578 if (this.
id == fournprice) {
2579 options +=
' selected';
2580 $(
"#buying_price").val(this.price);
2584 options +=
'>'+this.label+
'</option>';
2586 options +=
'<option value=null'+(trouve?
'':
' selected')+
'><?php echo $langs->trans("InputPrice"); ?></option>';
2587 $(
"#fournprice").html(options);
2589 $(
"#buying_price").hide();
2590 $(
"#fournprice").show();
2593 $(
"#buying_price").show();
2595 $(
"#fournprice").change(
function() {
2596 var selval = $(
this).find(
'option:selected').attr(
"price");
2598 $(
"#buying_price").val(selval).hide();
2600 $(
'#buying_price').show();
2604 $(
"#fournprice").hide();
2605 $(
'#buying_price').show();
2611 $(
"#fournprice").hide();
2612 $(
'#buying_price').show();
2616 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.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formatted for view output Used into pdf and HTML pages.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
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.
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_clone($srcobject, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
img_up($titlealt='default', $selected=0, $moreclass='')
Show top arrow logo.
get_localtax($vatrate, $local, $thirdparty_buyer=null, $thirdparty_seller=null, $vatnpr=0)
Return localtax rate for a particular VAT rate, when selling a product with vat $vatrate,...
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
print $langs trans("Show") . '< td style="' . $timeColor . '" align="center"> s</td > badge status0 badge status4 badge status3 Error badge status8< td align="center">< span class="badge ' . $badge . '"></span ></td >< td align="center">< a href="#" class="button button-small" onclick="openLogModal(this)" data-req="' . dol_escape_htmltag($reqSafe) . '" data-res="' . dol_escape_htmltag($resSafe) . '" data-err="' . dol_escape_htmltag($errSafe) . '">< span class="fa fa-search-plus"></span ></a ></td ></tr >< tr >< td colspan="' . $colspan . '" class="opacitymedium"></td ></tr ></table ></div ></form > logModal none logModal none s a JSON string
buildzip.php
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.