32require
"../main.inc.php";
33require_once DOL_DOCUMENT_ROOT.
"/contrat/class/contrat.class.php";
34require_once DOL_DOCUMENT_ROOT.
"/product/class/product.class.php";
35require_once DOL_DOCUMENT_ROOT.
"/societe/class/societe.class.php";
38$langs->loadLangs(array(
'products',
'contracts',
'companies'));
41$massaction =
GETPOST(
'massaction',
'alpha');
42$toselect =
GETPOST(
'toselect',
'array');
43$optioncss =
GETPOST(
'optioncss',
'aZ');
45$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') : str_replace(
'_',
'', basename(dirname(__FILE__)).basename(__FILE__,
'.php')).$mode;
49$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
50$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
52if (empty($page) || $page < 0 ||
GETPOST(
'button_search',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
56$offset = $limit * $page;
60 $sortfield =
"c.rowid";
66$search_name =
GETPOST(
"search_name",
'alpha');
67$search_subprice =
GETPOST(
"search_subprice",
'alpha');
68$search_qty =
GETPOST(
"search_qty",
'alpha');
69$search_total_ht =
GETPOST(
"search_total_ht",
'alpha');
70$search_total_tva =
GETPOST(
"search_total_tva",
'alpha');
71$search_total_ttc =
GETPOST(
"search_total_ttc",
'alpha');
72$search_contract =
GETPOST(
"search_contract",
'alpha');
73$search_service =
GETPOST(
"search_service",
'alpha');
74$search_status =
GETPOST(
"search_status",
'alpha');
75$search_product_category =
GETPOSTINT(
'search_product_category');
79if ($search_status ==
'4&filter=notexpired') {
81 $filter =
'notexpired';
83if ($search_status ==
'4&filter=expired') {
90$opouvertureprevuemonth =
GETPOST(
'opouvertureprevuemonth');
91$opouvertureprevueday =
GETPOST(
'opouvertureprevueday');
92$opouvertureprevueyear =
GETPOST(
'opouvertureprevueyear');
93$filter_opouvertureprevue =
GETPOST(
'filter_opouvertureprevue',
'alphawithlgt');
98$filter_op1 =
GETPOST(
'filter_op1',
'alphawithlgt');
103$filter_op2 =
GETPOST(
'filter_op2',
'alphawithlgt');
105$opcloturemonth =
GETPOSTINT(
'opcloturemonth');
108$filter_opcloture =
GETPOST(
'filter_opcloture',
'alphawithlgt');
113$hookmanager->initHooks(array(
'contractservicelist'));
117$extrafields->fetch_name_optionals_label(
$object->table_element);
119$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element,
'',
'search_');
123if (!empty($user->socid)) {
124 $socid = $user->socid;
128$staticcontrat =
new Contrat($db);
130$companystatic =
new Societe($db);
133 'c.ref' => array(
'label' =>
"Contract",
'checked' => 1,
'position' => 80),
134 'p.description' => array(
'label' =>
"Service",
'checked' => 1,
'position' => 80),
135 's.nom' => array(
'label' =>
"ThirdParty",
'checked' => 1,
'position' => 90),
136 'cd.tva_tx' => array(
'label' =>
"VATRate",
'checked' => -1,
'position' => 100),
137 'cd.subprice' => array(
'label' =>
"PriceUHT",
'checked' => -1,
'position' => 105),
138 'cd.qty' => array(
'label' =>
"Qty",
'checked' => 1,
'position' => 108),
139 'cd.total_ht' => array(
'label' =>
"TotalHT",
'checked' => -1,
'position' => 109,
'isameasure' => 1),
140 'cd.total_tva' => array(
'label' =>
"TotalVAT",
'checked' => -1,
'position' => 110),
141 'cd.date_ouverture_prevue' => array(
'label' =>
"DateStartPlannedShort",
'checked' => 1,
'position' => 150),
142 'cd.date_ouverture' => array(
'label' =>
"DateStartRealShort",
'checked' => 1,
'position' => 160),
143 'cd.date_fin_validite' => array(
'label' =>
"DateEndPlannedShort",
'checked' => 1,
'position' => 170),
144 'cd.date_cloture' => array(
'label' =>
"DateEndRealShort",
'checked' => 1,
'position' => 180),
146 'cd.tms' => array(
'label' =>
"DateModificationShort",
'checked' => 0,
'position' => 500),
147 'status' => array(
'label' =>
"Status",
'checked' => 1,
'position' => 1000)
150include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_array_fields.tpl.php';
154'@phan-var-force array<string,array{label:string,checked?:int<0,1>,position?:int,help?:string}> $arrayfields';
156$permissiontoread = $user->hasRight(
'contrat',
'lire');
157$permissiontoadd = $user->hasRight(
'contrat',
'creer');
158$permissiontodelete = $user->hasRight(
'contrat',
'supprimer');
167if (
GETPOST(
'cancel',
'alpha')) {
171if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
175$parameters = array(
'socid' => $socid);
176$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
181if (empty($reshook)) {
183 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
185 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
186 $search_product_category = 0;
188 $search_subprice =
"";
190 $search_total_ht =
"";
191 $search_total_tva =
"";
192 $search_total_ttc =
"";
193 $search_contract =
"";
194 $search_service =
"";
196 $opouvertureprevuemonth =
"";
197 $opouvertureprevueday =
"";
198 $opouvertureprevueyear =
"";
199 $filter_opouvertureprevue =
"";
208 $opcloturemonth =
"";
211 $filter_opcloture =
"";
214 $search_array_options = array();
223$form =
new Form($db);
227$title = $langs->trans(
"ListOfServices");
228if ($search_status ==
"0") {
229 $title = $langs->trans(
"ListOfInactiveServices");
231if ($search_status ==
"4" && $filter !=
"expired") {
232 $title = $langs->trans(
"ListOfRunningServices");
234if ($search_status ==
"4" && $filter ==
"expired") {
235 $title = $langs->trans(
"ListOfExpiredServices");
237if ($search_status ==
"5") {
238 $title = $langs->trans(
"ListOfClosedServices");
244$sql =
"SELECT c.rowid as cid, c.ref, c.statut as cstatut, c.ref_customer, c.ref_supplier,";
245$sql .=
" s.rowid as socid, s.nom as name, s.email, s.client, s.fournisseur,";
246$sql .=
" cd.rowid, cd.description, cd.statut, cd.product_type as type,";
247$sql .=
" p.rowid as pid, p.ref as pref, p.label as label, p.fk_product_type as ptype, p.tobuy, p.tosell, p.barcode, p.entity as pentity,";
248if (!$user->hasRight(
'societe',
'client',
'voir')) {
249 $sql .=
" sc.fk_soc, sc.fk_user,";
251$sql .=
" cd.date_ouverture_prevue,";
252$sql .=
" cd.date_ouverture,";
253$sql .=
" cd.date_fin_validite,";
254$sql .=
" cd.date_cloture,";
256$sql .=
" cd.total_ht,";
257$sql .=
" cd.total_tva,";
258$sql .=
" cd.tva_tx,";
259$sql .=
" cd.subprice,";
261$sql .=
" cd.tms as date_modification";
263if (!empty($extrafields->attributes[
$object->table_element][
'label'])) {
264 foreach ($extrafields->attributes[
$object->table_element][
'label'] as $key => $val) {
265 $sql .= ($extrafields->attributes[
$object->table_element][
'type'][$key] !=
'separate' ?
", ef.".$key.
" as options_".$key :
'');
269$parameters = array();
270$reshook = $hookmanager->executeHooks(
'printFieldListSelect', $parameters, $object, $action);
271$sql .= $hookmanager->resPrint;
272$sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c,";
273$sql .=
" ".MAIN_DB_PREFIX.
"societe as s,";
274if (!$user->hasRight(
'societe',
'client',
'voir')) {
275 $sql .=
" ".MAIN_DB_PREFIX.
"societe_commerciaux as sc,";
277$sql .=
" ".MAIN_DB_PREFIX.
"contratdet as cd";
278if (!empty($extrafields->attributes[
$object->table_element][
'label']) && is_array($extrafields->attributes[
$object->table_element][
'label']) && count($extrafields->attributes[
$object->table_element][
'label'])) {
279 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element.
"_extrafields as ef on (cd.rowid = ef.fk_object)";
281$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON cd.fk_product = p.rowid";
282if ($search_product_category > 0) {
283 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'categorie_product as cp ON cp.fk_product=cd.fk_product';
285$sql .=
" WHERE c.entity IN (".getEntity(
$object->element).
")";
286$sql .=
" AND c.rowid = cd.fk_contrat";
287if ($search_product_category > 0) {
288 $sql .=
" AND cp.fk_categorie = ".((int) $search_product_category);
290$sql .=
" AND c.fk_soc = s.rowid";
291if (!$user->hasRight(
'societe',
'client',
'voir')) {
292 $sql .=
" AND s.rowid = sc.fk_soc AND sc.fk_user = ".((int) $user->id);
294if ($search_status ==
"0") {
295 $sql .=
" AND cd.statut = 0";
297if ($search_status ==
"4") {
298 $sql .=
" AND cd.statut = 4";
300if ($search_status ==
"4&filter=expired" || ($search_status ==
'4' && $filter ==
'expired')) {
301 $sql .=
" AND cd.statut = 4 AND cd.date_fin_validite < '".$db->idate($now).
"'";
303if ($search_status ==
"4&filter=notexpired" || ($search_status ==
'4' && $filter ==
'notexpired')) {
304 $sql .=
" AND cd.statut = 4 AND cd.date_fin_validite >= '".$db->idate($now).
"'";
306if ($search_status ==
"5") {
307 $sql .=
" AND cd.statut = 5";
309if ($search_subprice) {
315if ($search_total_ht) {
318if ($search_total_tva) {
321if ($search_total_ttc) {
327if ($search_contract) {
330if ($search_service) {
331 $sql .=
natural_search(array(
"p.ref",
"p.description",
"cd.description"), $search_service);
334 $sql .=
" AND s.rowid = ".((int) $socid);
337$filter_dateouvertureprevue =
'';
340$filter_opcloture =
'';
342$filter_dateouvertureprevue_start =
dol_mktime(0, 0, 0, $opouvertureprevuemonth, $opouvertureprevueday, $opouvertureprevueyear);
343$filter_dateouvertureprevue_end =
dol_mktime(23, 59, 59, $opouvertureprevuemonth, $opouvertureprevueday, $opouvertureprevueyear);
344if ($filter_dateouvertureprevue_start !=
'' && $filter_opouvertureprevue == -1) {
345 $filter_opouvertureprevue =
' BETWEEN ';
348$filter_date1_start =
dol_mktime(0, 0, 0, $op1month, $op1day, $op1year);
349$filter_date1_end =
dol_mktime(23, 59, 59, $op1month, $op1day, $op1year);
350if ($filter_date1_start !=
'' && $filter_op1 == -1) {
351 $filter_op1 =
' BETWEEN ';
354$filter_date2_start =
dol_mktime(0, 0, 0, $op2month, $op2day, $op2year);
355$filter_date2_end =
dol_mktime(23, 59, 59, $op2month, $op2day, $op2year);
356if ($filter_date2_start !=
'' && $filter_op2 == -1) {
357 $filter_op2 =
' BETWEEN ';
360$filter_datecloture_start =
dol_mktime(0, 0, 0, $opcloturemonth, $opclotureday, $opclotureyear);
361$filter_datecloture_end =
dol_mktime(23, 59, 59, $opcloturemonth, $opclotureday, $opclotureyear);
362if ($filter_datecloture_start !=
'' && $filter_opcloture == -1) {
363 $filter_opcloture =
' BETWEEN ';
366if (!empty($filter_opouvertureprevue) && $filter_opouvertureprevue != -1 && $filter_opouvertureprevue !=
' BETWEEN ' && $filter_dateouvertureprevue_start !=
'') {
367 $sql .=
" AND cd.date_ouverture_prevue ".$filter_opouvertureprevue.
" '".$db->idate($filter_dateouvertureprevue_start).
"'";
369if (!empty($filter_opouvertureprevue) && $filter_opouvertureprevue ==
' BETWEEN ') {
370 $sql .=
" AND cd.date_ouverture_prevue ".$filter_opouvertureprevue.
" '".$db->idate($filter_dateouvertureprevue_start).
"' AND '".$db->idate($filter_dateouvertureprevue_end).
"'";
372if (!empty($filter_op1) && $filter_op1 != -1 && $filter_op1 !=
' BETWEEN ' && $filter_date1_start !=
'') {
373 $sql .=
" AND cd.date_ouverture ".$filter_op1.
" '".$db->idate($filter_date1_start).
"'";
375if (!empty($filter_op1) && $filter_op1 ==
' BETWEEN ') {
376 $sql .=
" AND cd.date_ouverture ".$filter_op1.
" '".$db->idate($filter_date1_start).
"' AND '".$db->idate($filter_date1_end).
"'";
378if (!empty($filter_op2) && $filter_op2 != -1 && $filter_op2 !=
' BETWEEN ' && $filter_date2_start !=
'') {
379 $sql .=
" AND cd.date_fin_validite ".$filter_op2.
" '".$db->idate($filter_date2_start).
"'";
381if (!empty($filter_op2) && $filter_op2 ==
' BETWEEN ') {
382 $sql .=
" AND cd.date_fin_validite ".$filter_op2.
" '".$db->idate($filter_date2_start).
"' AND '".$db->idate($filter_date2_end).
"'";
384if (!empty($filter_opcloture) && $filter_opcloture !=
' BETWEEN ' && $filter_opcloture != -1 && $filter_datecloture_start !=
'') {
385 $sql .=
" AND cd.date_cloture ".$filter_opcloture.
" '".$db->idate($filter_datecloture_start).
"'";
387if (!empty($filter_opcloture) && $filter_opcloture ==
' BETWEEN ') {
388 $sql .=
" AND cd.date_cloture ".$filter_opcloture.
" '".$db->idate($filter_datecloture_start).
"' AND '".$db->idate($filter_datecloture_end).
"'";
391include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_sql.tpl.php';
396$nbtotalofrecords =
'';
398 $result = $db->query($sql);
399 $nbtotalofrecords = $db->num_rows($result);
400 if (($page * $limit) > $nbtotalofrecords) {
407$sql .= $db->order($sortfield, $sortorder);
409 $sql .= $db->plimit($limit + 1, $offset);
413dol_syslog(
"contrat/services_list.php", LOG_DEBUG);
414$resql = $db->query($sql);
420$num = $db->num_rows($resql);
437$arrayofselected = is_array($toselect) ? $toselect : array();
441 $param .=
'&mode='.urlencode($mode);
443if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
444 $param .=
'&contextpage='.urlencode($contextpage);
446if ($limit > 0 && $limit != $conf->liste_limit) {
447 $param .=
'&limit='.((int) $limit);
449if ($optioncss !=
'') {
450 $param .=
'&optioncss='.urlencode($optioncss);
452if ($search_contract) {
453 $param .=
'&search_contract='.urlencode($search_contract);
456 $param .=
'&search_name='.urlencode($search_name);
458if ($search_subprice) {
459 $param .=
'&search_subprice='.urlencode($search_subprice);
462 $param .=
'&search_qty='.urlencode($search_qty);
464if ($search_total_ht) {
465 $param .=
'&search_total_ht='.urlencode($search_total_ht);
467if ($search_total_tva) {
468 $param .=
'&search_total_tva='.urlencode($search_total_tva);
470if ($search_total_ttc) {
471 $param .=
'&search_total_ttc='.urlencode($search_total_ttc);
473if ($search_service) {
474 $param .=
'&search_service='.urlencode($search_service);
477 $param .=
'&search_status='.urlencode($search_status);
479if (!empty($filter_opouvertureprevue) && $filter_opouvertureprevue != -1) {
480 $param .=
'&filter_opouvertureprevue='.urlencode($filter_opouvertureprevue);
482if (!empty($filter_op1) && $filter_op1 != -1) {
483 $param .=
'&filter_op1='.urlencode($filter_op1);
485if (!empty($filter_op2) && $filter_op2 != -1) {
486 $param .=
'&filter_op2='.urlencode($filter_op2);
488if (!empty($filter_opcloture) && $filter_opcloture != -1) {
489 $param .=
'&filter_opcloture='.urlencode($filter_opcloture);
491if ($filter_dateouvertureprevue_start !=
'') {
492 $param .=
'&opouvertureprevueday='.((int) $opouvertureprevueday).
'&opouvertureprevuemonth='.((int) $opouvertureprevuemonth).
'&opouvertureprevueyear='.((int) $opouvertureprevueyear);
494if ($filter_date1_start !=
'') {
495 $param .=
'&op1day='.((int) $op1day).
'&op1month='.((int) $op1month).
'&op1year='.((int) $op1year);
497if ($filter_date2_start !=
'') {
498 $param .=
'&op2day='.((int) $op2day).
'&op2month='.((int) $op2month).
'&op2year='.((int) $op2year);
500if ($filter_datecloture_start !=
'') {
501 $param .=
'&opclotureday='.((int) $op2day).
'&opcloturemonth='.((int) $op2month).
'&opclotureyear='.((int) $op2year);
504include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_param.tpl.php';
507$arrayofmassactions = array(
513$massactionbutton = $form->selectMassAction(
'', $arrayofmassactions);
515print
'<form method="POST" id="searchFormList" action="'.$_SERVER[
"PHP_SELF"].
'">'.
"\n";
516if ($optioncss !=
'') {
517 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
519print
'<input type="hidden" name="token" value="'.newToken().
'">';
520print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
521print
'<input type="hidden" name="action" value="list">';
522print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
523print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
524print
'<input type="hidden" name="page" value="'.$page.
'">';
525print
'<input type="hidden" name="contextpage" value="'.$contextpage.
'">';
526print
'<input type="hidden" name="page_y" value="">';
527print
'<input type="hidden" name="mode" value="'.$mode.
'">';
532print_barre_liste($title, $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords,
'contract', 0,
'',
'', $limit);
535 $fieldstosearchall = array();
536 foreach ($fieldstosearchall as $key => $val) {
537 $fieldstosearchall[$key] = $langs->trans($val);
539 print
'<div class="divsearchfieldfilter">'.$langs->trans(
"FilterOnInto", $sall).implode(
', ', $fieldstosearchall).
'</div>';
546if (isModEnabled(
'category') && ($user->hasRight(
'produit',
'lire') || $user->hasRight(
'service',
'lire'))) {
547 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
548 $moreforfilter .=
'<div class="divsearchfield">';
549 $tmptitle = $langs->trans(
'IncludingProductWithTag');
550 $cate_arbo = $form->select_all_categories(Categorie::TYPE_PRODUCT,
null,
'parent',
null,
null, 1);
551 $moreforfilter .=
img_picto($tmptitle,
'category',
'class="pictofixedwidth"').$form->selectarray(
'search_product_category', $cate_arbo, $search_product_category, $tmptitle, 0, 0,
'', 0, 0, 0, 0,
'widthcentpercentminusx maxwidth300', 1);
552 $moreforfilter .=
'</div>';
555$parameters = array();
556$reshook = $hookmanager->executeHooks(
'printFieldPreListTitle', $parameters, $object, $action);
557if (empty($reshook)) {
558 $moreforfilter .= $hookmanager->resPrint;
560 $moreforfilter = $hookmanager->resPrint;
564if (!empty($moreforfilter)) {
565 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
566 print $moreforfilter;
570$varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
571$htmlofselectarray = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
getDolGlobalString(
'MAIN_CHECKBOX_LEFT_COLUMN'));
572$selectedfields = ($mode !=
'kanban' ? $htmlofselectarray :
'');
573$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons(
'checkforselect', 1) :
'');
576print
'<div class="div-table-responsive">';
577print
'<table class="tagtable liste'.($moreforfilter ?
" listwithfilterbefore" :
"").
'">'.
"\n";
581print
'<tr class="liste_titre_filter">';
584 print
'<td class="liste_titre center maxwidthsearch">';
585 $searchpicto = $form->showFilterButtons(
'left');
589if (!empty($arrayfields[
'c.ref'][
'checked'])) {
590 print
'<td class="liste_titre">';
591 print
'<input type="hidden" name="mode" value="'.$mode.
'">';
592 print
'<input type="text" class="flat maxwidth75" name="search_contract" value="'.dol_escape_htmltag($search_contract).
'">';
596if (!empty($arrayfields[
'p.description'][
'checked'])) {
597 print
'<td class="liste_titre">';
598 print
'<input type="text" class="flat maxwidth100" name="search_service" value="'.dol_escape_htmltag($search_service).
'">';
602if (!empty($arrayfields[
'cd.tva_tx'][
'checked'])) {
603 print
'<td class="liste_titre">';
606if (!empty($arrayfields[
'cd.subprice'][
'checked'])) {
607 print
'<td class="liste_titre right">';
608 print
'<input type="text" class="flat maxwidth50 right" name="search_subprice" value="'.dol_escape_htmltag($search_subprice).
'">';
611if (!empty($arrayfields[
'cd.qty'][
'checked'])) {
612 print
'<td class="liste_titre right">';
613 print
'<input type="text" class="flat maxwidth50 right" name="search_qty" value="'.dol_escape_htmltag($search_qty).
'">';
616if (!empty($arrayfields[
'cd.total_ht'][
'checked'])) {
617 print
'<td class="liste_titre right">';
618 print
'<input type="text" class="flat maxwidth50" name="search_total_ht" value="'.dol_escape_htmltag($search_total_ht).
'">';
621if (!empty($arrayfields[
'cd.total_tva'][
'checked'])) {
622 print
'<td class="liste_titre right">';
623 print
'<input type="text" class="flat maxwidth50" name="search_total_tva" value="'.dol_escape_htmltag($search_total_tva).
'">';
627if (!empty($arrayfields[
's.nom'][
'checked'])) {
628 print
'<td class="liste_titre">';
629 print
'<input type="text" class="flat maxwidth100" name="search_name" value="'.dol_escape_htmltag($search_name).
'">';
633if (!empty($arrayfields[
'cd.date_ouverture_prevue'][
'checked'])) {
634 print
'<td class="liste_titre center">';
635 $arrayofoperators = array(
'<' =>
'<',
'>' =>
'>');
636 print $form->selectarray(
'filter_opouvertureprevue', $arrayofoperators, $filter_opouvertureprevue, 1, 0, 0,
'', 0, 0, 0,
'',
'width50');
638 $filter_dateouvertureprevue =
dol_mktime(0, 0, 0, $opouvertureprevuemonth, $opouvertureprevueday, $opouvertureprevueyear);
639 print $form->selectDate($filter_dateouvertureprevue,
'opouvertureprevue', 0, 0, 1,
'', 1, 0);
642if (!empty($arrayfields[
'cd.date_ouverture'][
'checked'])) {
643 print
'<td class="liste_titre center">';
644 $arrayofoperators = array(
'<' =>
'<',
'>' =>
'>');
645 print $form->selectarray(
'filter_op1', $arrayofoperators, $filter_op1, 1, 0, 0,
'', 0, 0, 0,
'',
'width50');
647 $filter_date1 =
dol_mktime(0, 0, 0, $op1month, $op1day, $op1year);
648 print $form->selectDate($filter_date1,
'op1', 0, 0, 1,
'', 1, 0);
651if (!empty($arrayfields[
'cd.date_fin_validite'][
'checked'])) {
652 print
'<td class="liste_titre center">';
653 $arrayofoperators = array(
'<' =>
'<',
'>' =>
'>');
654 print $form->selectarray(
'filter_op2', $arrayofoperators, $filter_op2, 1, 0, 0,
'', 0, 0, 0,
'',
'width50');
656 $filter_date2 =
dol_mktime(0, 0, 0, $op2month, $op2day, $op2year);
657 print $form->selectDate($filter_date2,
'op2', 0, 0, 1,
'', 1, 0);
660if (!empty($arrayfields[
'cd.date_cloture'][
'checked'])) {
661 print
'<td class="liste_titre center">';
662 $arrayofoperators = array(
'<' =>
'<',
'>' =>
'>');
663 print $form->selectarray(
'filter_opcloture', $arrayofoperators, $filter_opcloture, 1, 0, 0,
'', 0, 0, 0,
'',
'width50');
665 $filter_date_cloture =
dol_mktime(0, 0, 0, $opcloturemonth, $opclotureday, $opclotureyear);
666 print $form->selectDate($filter_date_cloture,
'opcloture', 0, 0, 1,
'', 1, 0);
670include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_input.tpl.php';
673$parameters = array(
'arrayfields' => $arrayfields);
674$reshook = $hookmanager->executeHooks(
'printFieldListOption', $parameters, $object, $action);
675print $hookmanager->resPrint;
676if (!empty($arrayfields[
'cd.datec'][
'checked'])) {
678 print
'<td class="liste_titre">';
681if (!empty($arrayfields[
'cd.tms'][
'checked'])) {
683 print
'<td class="liste_titre">';
686if (!empty($arrayfields[
'status'][
'checked'])) {
688 print
'<td class="liste_titre right parentonrightofpage">';
689 $arrayofstatus = array(
690 '0' => $langs->trans(
"ServiceStatusInitial"),
691 '4' => $langs->trans(
"ServiceStatusRunning"),
692 '4&filter=notexpired' => $langs->trans(
"ServiceStatusNotLate"),
693 '4&filter=expired' => $langs->trans(
"ServiceStatusLate"),
694 '5' => $langs->trans(
"ServiceStatusClosed")
696 $search_status_new =
GETPOST(
'search_status',
'alpha');
697 if ($filter ==
'expired' && !preg_match(
'/expired/', $search_status_new)) {
698 $search_status_new .=
'&filter=expired';
700 print $form->selectarray(
'search_status', $arrayofstatus, (strstr($search_status_new,
',') ? -1 : $search_status_new), 1, 0, 0,
'', 0, 0, 0,
'',
'search_status width100 onrightofpage');
705 print
'<td class="liste_titre center maxwidthsearch">';
706 $searchpicto = $form->showFilterButtons();
712$totalarray = array();
713$totalarray[
'nbfield'] = 0;
717print
'<tr class="liste_titre">';
720 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
721 $totalarray[
'nbfield']++;
723if (!empty($arrayfields[
'c.ref'][
'checked'])) {
724 print_liste_field_titre($arrayfields[
'c.ref'][
'label'], $_SERVER[
"PHP_SELF"],
"c.ref",
"", $param,
"", $sortfield, $sortorder);
726if (!empty($arrayfields[
'p.description'][
'checked'])) {
727 print_liste_field_titre($arrayfields[
'p.description'][
'label'], $_SERVER[
"PHP_SELF"],
"p.description",
"", $param,
"", $sortfield, $sortorder);
729if (!empty($arrayfields[
'cd.tva_tx'][
'checked'])) {
730 print_liste_field_titre($arrayfields[
'cd.tva_tx'][
'label'], $_SERVER[
"PHP_SELF"],
"cd.tva_tx",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
732if (!empty($arrayfields[
'cd.subprice'][
'checked'])) {
733 print_liste_field_titre($arrayfields[
'cd.subprice'][
'label'], $_SERVER[
"PHP_SELF"],
"cd.subprice",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
735if (!empty($arrayfields[
'cd.qty'][
'checked'])) {
736 print_liste_field_titre($arrayfields[
'cd.qty'][
'label'], $_SERVER[
"PHP_SELF"],
"cd.qty",
"", $param,
'', $sortfield, $sortorder,
'right nowrap ');
738if (!empty($arrayfields[
'cd.total_ht'][
'checked'])) {
739 print_liste_field_titre($arrayfields[
'cd.total_ht'][
'label'], $_SERVER[
"PHP_SELF"],
"cd.total_ht",
"", $param,
'', $sortfield, $sortorder,
'right nowrap ');
741if (!empty($arrayfields[
'cd.total_tva'][
'checked'])) {
742 print_liste_field_titre($arrayfields[
'cd.total_tva'][
'label'], $_SERVER[
"PHP_SELF"],
"cd.total_tva",
"", $param,
'', $sortfield, $sortorder,
'right nowrap ');
744if (!empty($arrayfields[
's.nom'][
'checked'])) {
745 print_liste_field_titre($arrayfields[
's.nom'][
'label'], $_SERVER[
"PHP_SELF"],
"s.nom",
"", $param,
"", $sortfield, $sortorder);
747if (!empty($arrayfields[
'cd.date_ouverture_prevue'][
'checked'])) {
748 print_liste_field_titre($arrayfields[
'cd.date_ouverture_prevue'][
'label'], $_SERVER[
"PHP_SELF"],
"cd.date_ouverture_prevue",
"", $param,
'', $sortfield, $sortorder,
'center ');
750if (!empty($arrayfields[
'cd.date_ouverture'][
'checked'])) {
751 print_liste_field_titre($arrayfields[
'cd.date_ouverture'][
'label'], $_SERVER[
"PHP_SELF"],
"cd.date_ouverture",
"", $param,
'', $sortfield, $sortorder,
'center ');
753if (!empty($arrayfields[
'cd.date_fin_validite'][
'checked'])) {
754 print_liste_field_titre($arrayfields[
'cd.date_fin_validite'][
'label'], $_SERVER[
"PHP_SELF"],
"cd.date_fin_validite",
"", $param,
'', $sortfield, $sortorder,
'center ');
756if (!empty($arrayfields[
'cd.date_cloture'][
'checked'])) {
757 print_liste_field_titre($arrayfields[
'cd.date_cloture'][
'label'], $_SERVER[
"PHP_SELF"],
"cd.date_cloture",
"", $param,
'', $sortfield, $sortorder,
'center ');
760include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_title.tpl.php';
762$parameters = array(
'arrayfields' => $arrayfields,
'param' => $param,
'sortfield' => $sortfield,
'sortorder' => $sortorder);
763$reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters, $object, $action);
764print $hookmanager->resPrint;
765if (!empty($arrayfields[
'cd.datec'][
'checked'])) {
766 print_liste_field_titre($arrayfields[
'cd.datec'][
'label'], $_SERVER[
"PHP_SELF"],
"cd.datec",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
768if (!empty($arrayfields[
'cd.tms'][
'checked'])) {
769 print_liste_field_titre($arrayfields[
'cd.tms'][
'label'], $_SERVER[
"PHP_SELF"],
"cd.tms",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
771if (!empty($arrayfields[
'status'][
'checked'])) {
772 print_liste_field_titre($arrayfields[
'status'][
'label'], $_SERVER[
"PHP_SELF"],
"cd.statut,c.statut",
"", $param,
'', $sortfield, $sortorder,
'right ');
776 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
777 $totalarray[
'nbfield']++;
785$contractstatic =
new Contrat($db);
786$productstatic =
new Product($db);
789$savnbfield = $totalarray[
'nbfield'];
790$totalarray = array(
'nbfield' => 0,
'val' => array(
'cd.qty' => 0,
'cd.total_ht' => 0,
'cd.total_tva' => 0));
791$imaxinloop = ($limit ? min($num, $limit) : $num);
792while ($i < $imaxinloop) {
793 $obj = $db->fetch_object($resql);
798 $contractstatic->id = $obj->cid;
799 $contractstatic->ref = $obj->ref ? $obj->ref : $obj->cid;
800 $contractstatic->ref_customer = $obj->ref_customer;
801 $contractstatic->ref_supplier = $obj->ref_supplier;
803 $companystatic->id = $obj->socid;
804 $companystatic->name = $obj->name;
805 $companystatic->email = $obj->email;
806 $companystatic->client = $obj->client;
807 $companystatic->fournisseur = $obj->fournisseur;
809 $productstatic->id = $obj->pid;
810 $productstatic->type = $obj->ptype;
811 $productstatic->ref = $obj->pref;
812 $productstatic->entity = $obj->pentity;
813 $productstatic->status = $obj->tosell;
814 $productstatic->status_buy = $obj->tobuy;
815 $productstatic->label = $obj->label;
816 $productstatic->description = $obj->description;
817 $productstatic->barcode = $obj->barcode;
819 print
'<tr data-rowid="'.$object->id.
'" class="oddeven">';
823 print
'<td class="nowrap center">';
824 if ($massactionbutton || $massaction) {
826 if (in_array($obj->rowid, $arrayofselected)) {
829 print
'<input id="cb'.$obj->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
833 $totalarray[
'nbfield']++;
837 if (!empty($arrayfields[
'c.ref'][
'checked'])) {
838 print
'<td class="nowraponall">';
839 print $contractstatic->getNomUrl(1, 16);
842 $totalarray[
'nbfield']++;
846 if (!empty($arrayfields[
'p.description'][
'checked'])) {
847 print
'<td class="tdoverflowmax300">';
849 print $productstatic->getNomUrl(1,
'', 24);
850 print $obj->label ?
' - '.dol_trunc($obj->label, 16) :
'';
852 print
'<br><span class="small">'.dol_nl2br($obj->description).
'</span>';
855 if ($obj->type == 0) {
858 if ($obj->type == 1) {
864 $totalarray[
'nbfield']++;
868 if (!empty($arrayfields[
'cd.tva_tx'][
'checked'])) {
869 print
'<td class="right nowraponall">';
873 $totalarray[
'nbfield']++;
876 if (!empty($arrayfields[
'cd.subprice'][
'checked'])) {
877 print
'<td class="right nowraponall">';
878 print
price($obj->subprice);
881 $totalarray[
'nbfield']++;
884 if (!empty($arrayfields[
'cd.qty'][
'checked'])) {
885 print
'<td class="right nowraponall">';
889 $totalarray[
'nbfield']++;
892 $totalarray[
'pos'][$totalarray[
'nbfield']] =
'cd.qty';
894 $totalarray[
'val'][
'cd.qty'] += $obj->qty;
896 if (!empty($arrayfields[
'cd.total_ht'][
'checked'])) {
897 print
'<td class="right nowraponall">';
898 print
'<span class="amount">'.price($obj->total_ht).
'</span>';
901 $totalarray[
'nbfield']++;
904 $totalarray[
'pos'][$totalarray[
'nbfield']] =
'cd.total_ht';
906 $totalarray[
'val'][
'cd.total_ht'] += $obj->total_ht;
908 if (!empty($arrayfields[
'cd.total_tva'][
'checked'])) {
909 print
'<td class="right nowraponall">';
910 print
'<span class="amount">'.price($obj->total_tva).
'</span>';
913 $totalarray[
'nbfield']++;
916 $totalarray[
'pos'][$totalarray[
'nbfield']] =
'cd.total_tva';
918 $totalarray[
'val'][
'cd.total_tva'] += $obj->total_tva;
922 if (!empty($arrayfields[
's.nom'][
'checked'])) {
923 print
'<td class="tdoverflowmax100">';
924 print $companystatic->getNomUrl(1,
'customer', 28);
927 $totalarray[
'nbfield']++;
932 if (!empty($arrayfields[
'cd.date_ouverture_prevue'][
'checked'])) {
933 print
'<td class="center nowraponall">';
934 print($obj->date_ouverture_prevue ?
dol_print_date($db->jdate($obj->date_ouverture_prevue),
'dayhour') :
' ');
935 if ($db->jdate($obj->date_ouverture_prevue) && ($db->jdate($obj->date_ouverture_prevue) < ($now - $conf->contrat->services->inactifs->warning_delay)) && $obj->statut == 0) {
936 print
' '.img_picto($langs->trans(
"Late"),
"warning");
938 print
' ';
942 $totalarray[
'nbfield']++;
945 if (!empty($arrayfields[
'cd.date_ouverture'][
'checked'])) {
946 print
'<td class="center nowraponall">'.($obj->date_ouverture ?
dol_print_date($db->jdate($obj->date_ouverture),
'dayhour') :
' ').
'</td>';
948 $totalarray[
'nbfield']++;
952 if (!empty($arrayfields[
'cd.date_fin_validite'][
'checked'])) {
953 print
'<td class="center nowraponall">'.($obj->date_fin_validite ?
dol_print_date($db->jdate($obj->date_fin_validite),
'dayhour') :
' ');
954 if ($obj->date_fin_validite && $db->jdate($obj->date_fin_validite) < ($now - $conf->contrat->services->expires->warning_delay) && $obj->statut < 5) {
955 $warning_delay = $conf->contrat->services->expires->warning_delay / 3600 / 24;
956 $textlate = $langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($warning_delay) >= 0 ?
'+' :
'').ceil($warning_delay).
' '.$langs->trans(
"days");
959 print
' ';
963 $totalarray[
'nbfield']++;
967 if (!empty($arrayfields[
'cd.date_cloture'][
'checked'])) {
968 print
'<td class="center nowraponall">'.dol_print_date($db->jdate($obj->date_cloture),
'dayhour').
'</td>';
970 $totalarray[
'nbfield']++;
975 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_print_fields.tpl.php';
977 $parameters = array(
'arrayfields' => $arrayfields,
'obj' => $obj,
'i' => $i,
'totalarray' => &$totalarray);
978 $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters);
979 print $hookmanager->resPrint;
981 if (!empty($arrayfields[
'cd.datec'][
'checked'])) {
982 print
'<td class="center">';
983 print
dol_print_date($db->jdate($obj->date_creation),
'dayhour',
'tzuser');
986 $totalarray[
'nbfield']++;
990 if (!empty($arrayfields[
'cd.tms'][
'checked'])) {
991 print
'<td class="center nowraponall">';
992 print
dol_print_date($db->jdate($obj->date_modification),
'dayhour',
'tzuser');
995 $totalarray[
'nbfield']++;
999 if (!empty($arrayfields[
'status'][
'checked'])) {
1000 print
'<td class="right">';
1001 if ($obj->cstatut == 0) {
1004 print $staticcontratligne->LibStatut($obj->statut, 5, ($obj->date_fin_validite && $db->jdate($obj->date_fin_validite) < $now) ? 1 : 0,
'',
' - '.$langs->trans(
"Draft"));
1006 print $staticcontratligne->LibStatut($obj->statut, 5, ($obj->date_fin_validite && $db->jdate($obj->date_fin_validite) < $now) ? 1 : 0);
1010 $totalarray[
'nbfield']++;
1015 print
'<td class="nowrap center">';
1016 if ($massactionbutton || $massaction) {
1018 if (in_array($obj->rowid, $arrayofselected)) {
1021 print
'<input id="cb'.$obj->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
1025 $totalarray[
'nbfield']++;
1034include DOL_DOCUMENT_ROOT.
'/core/tpl/list_print_total.tpl.php';
1039 foreach ($arrayfields as $key => $val) {
1040 if (!empty($val[
'checked'])) {
1044 print
'<tr><td colspan="'.$colspan.
'"><span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span></td></tr>';
1049$parameters = array(
'arrayfields' => $arrayfields,
'sql' => $sql);
1050$reshook = $hookmanager->executeHooks(
'printFieldListFooter', $parameters, $object, $action);
1051print $hookmanager->resPrint;
1053print
'</table>'.
"\n";
1056print
'</form>'.
"\n";
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Class to manage contracts.
Class to manage lines of contracts.
Class to manage products or services.
Class to manage third parties objects (customers, suppliers, prospects...)
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...
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
natural_search($fields, $value, $mode=0, $nofirstand=0)
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
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.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by the value of a given key, which produces ascending (default) or descending out...
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
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.