38 require
'../../main.inc.php';
39 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
40 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
41 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formpropal.class.php';
42 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
43 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
44 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
45 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
46 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
49 $langs->loadLangs(array(
'companies',
'propal',
'compta',
'bills',
'orders',
'products',
'deliveries',
'categories'));
51 $socid =
GETPOST(
'socid',
'int');
53 $action =
GETPOST(
'action',
'aZ09');
54 $massaction =
GETPOST(
'massaction',
'alpha');
55 $show_files =
GETPOST(
'show_files',
'int');
56 $confirm =
GETPOST(
'confirm',
'alpha');
57 $toselect =
GETPOST(
'toselect',
'array');
58 $contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'proposallist';
60 $search_user =
GETPOST(
'search_user',
'int');
61 $search_sale =
GETPOST(
'search_sale',
'int');
63 $search_refcustomer =
GETPOST(
'search_refcustomer',
'alpha');
65 $search_refproject =
GETPOST(
'search_refproject',
'alpha');
66 $search_project =
GETPOST(
'search_project',
'alpha');
68 $search_societe =
GETPOST(
'search_societe',
'alpha');
69 $search_montant_ht =
GETPOST(
'search_montant_ht',
'alpha');
70 $search_montant_vat =
GETPOST(
'search_montant_vat',
'alpha');
71 $search_montant_ttc =
GETPOST(
'search_montant_ttc',
'alpha');
72 $search_multicurrency_code =
GETPOST(
'search_multicurrency_code',
'alpha');
73 $search_multicurrency_tx =
GETPOST(
'search_multicurrency_tx',
'alpha');
74 $search_multicurrency_montant_ht =
GETPOST(
'search_multicurrency_montant_ht',
'alpha');
75 $search_multicurrency_montant_vat =
GETPOST(
'search_multicurrency_montant_vat',
'alpha');
76 $search_multicurrency_montant_ttc =
GETPOST(
'search_multicurrency_montant_ttc',
'alpha');
77 $search_login =
GETPOST(
'search_login',
'alpha');
78 $search_product_category =
GETPOST(
'search_product_category',
'int');
79 $search_town =
GETPOST(
'search_town',
'alpha');
80 $search_zip =
GETPOST(
'search_zip',
'alpha');
81 $search_state =
GETPOST(
"search_state");
82 $search_country =
GETPOST(
"search_country",
'int');
83 $search_type_thirdparty =
GETPOST(
"search_type_thirdparty",
'int');
84 $search_date_start =
dol_mktime(0, 0, 0,
GETPOST(
'search_date_startmonth',
'int'),
GETPOST(
'search_date_startday',
'int'),
GETPOST(
'search_date_startyear',
'int'));
85 $search_date_end =
dol_mktime(23, 59, 59,
GETPOST(
'search_date_endmonth',
'int'),
GETPOST(
'search_date_endday',
'int'),
GETPOST(
'search_date_endyear',
'int'));
86 $search_dateend_start =
dol_mktime(0, 0, 0,
GETPOST(
'search_dateend_startmonth',
'int'),
GETPOST(
'search_dateend_startday',
'int'),
GETPOST(
'search_dateend_startyear',
'int'));
87 $search_dateend_end =
dol_mktime(23, 59, 59,
GETPOST(
'search_dateend_endmonth',
'int'),
GETPOST(
'search_dateend_endday',
'int'),
GETPOST(
'search_dateend_endyear',
'int'));
88 $search_datedelivery_start =
dol_mktime(0, 0, 0,
GETPOST(
'search_datedelivery_startmonth',
'int'),
GETPOST(
'search_datedelivery_startday',
'int'),
GETPOST(
'search_datedelivery_startyear',
'int'));
89 $search_datedelivery_end =
dol_mktime(23, 59, 59,
GETPOST(
'search_datedelivery_endmonth',
'int'),
GETPOST(
'search_datedelivery_endday',
'int'),
GETPOST(
'search_datedelivery_endyear',
'int'));
90 $search_availability =
GETPOST(
'search_availability',
'int');
91 $search_categ_cus =
GETPOST(
"search_categ_cus",
'int');
92 $search_btn =
GETPOST(
'button_search',
'alpha');
93 $search_remove_btn =
GETPOST(
'button_removefilter',
'alpha');
95 $search_status =
GETPOST(
'search_status',
'alpha');
96 $optioncss =
GETPOST(
'optioncss',
'alpha');
97 $object_statut =
GETPOST(
'search_statut',
'alpha');
99 $sall = trim((
GETPOST(
'search_all',
'alphanohtml') !=
'') ?
GETPOST(
'search_all',
'alphanohtml') :
GETPOST(
'sall',
'alphanohtml'));
103 $limit =
GETPOST(
'limit',
'int') ?
GETPOST(
'limit',
'int') : $conf->liste_limit;
104 $sortfield =
GETPOST(
"sortfield",
'alpha');
105 $sortorder =
GETPOST(
"sortorder",
'alpha');
107 if (empty($page) || $page == -1 || !empty($search_btn) || !empty($search_remove_btn) || (empty($toselect) && $massaction ===
'0')) { $page = 0; }
108 $offset = $limit * $page;
109 $pageprev = $page - 1;
110 $pagenext = $page + 1;
111 if (!$sortfield) $sortfield =
'p.ref';
112 if (!$sortorder) $sortorder =
'DESC';
114 $permissiontoread = $user->rights->propal->lire;
115 $permissiontoadd = $user->rights->propal->write;
116 $permissiontodelete = $user->rights->propal->supprimer;
117 $permissiontoclose = $user->rights->propal->cloturer;
123 if (!empty($user->socid)) $socid = $user->socid;
128 $dbtable =
'&societe';
132 $diroutputmassaction = $conf->propal->multidir_output[$conf->entity].
'/temp/massgeneration/'.$user->id;
135 $object =
new Propal($db);
136 $hookmanager->initHooks(array(
'propallist'));
140 $extrafields->fetch_name_optionals_label($object->table_element);
142 $search_array_options = $extrafields->getOptionalsFromPost($object->table_element,
'',
'search_');
145 $fieldstosearchall = array(
147 'p.ref_client'=>
'CustomerRef',
148 'pd.description'=>
'Description',
149 's.nom'=>
"ThirdParty",
150 's.name_alias'=>
"AliasNameShort",
153 'p.note_public'=>
'NotePublic',
155 if (empty($user->socid)) $fieldstosearchall[
"p.note_private"] =
"NotePrivate";
158 $checkedtypetiers = 0;
159 $arrayfields = array(
160 'p.ref'=>array(
'label'=>
"Ref",
'checked'=>1),
161 'p.ref_client'=>array(
'label'=>
"RefCustomer",
'checked'=>1),
162 'pr.ref'=>array(
'label'=>
"ProjectRef",
'checked'=>1,
'enabled'=>(empty($conf->projet->enabled) ? 0 : 1)),
163 'pr.title'=>array(
'label'=>
"ProjectLabel",
'checked'=>0,
'enabled'=>(empty($conf->projet->enabled) ? 0 : 1)),
164 's.nom'=>array(
'label'=>
"ThirdParty",
'checked'=>1),
165 's.town'=>array(
'label'=>
"Town",
'checked'=>1),
166 's.zip'=>array(
'label'=>
"Zip",
'checked'=>1),
167 'state.nom'=>array(
'label'=>
"StateShort",
'checked'=>0),
168 'country.code_iso'=>array(
'label'=>
"Country",
'checked'=>0),
169 'typent.code'=>array(
'label'=>
"ThirdPartyType",
'checked'=>$checkedtypetiers),
170 'p.date'=>array(
'label'=>
"Date",
'checked'=>1),
171 'p.fin_validite'=>array(
'label'=>
"DateEnd",
'checked'=>1),
172 'p.date_livraison'=>array(
'label'=>
"DeliveryDate",
'checked'=>0),
173 'ava.rowid'=>array(
'label'=>
"AvailabilityPeriod",
'checked'=>0),
174 'p.total_ht'=>array(
'label'=>
"AmountHT",
'checked'=>1),
175 'p.total_vat'=>array(
'label'=>
"AmountVAT",
'checked'=>0),
176 'p.total_ttc'=>array(
'label'=>
"AmountTTC",
'checked'=>0),
177 'p.total_ht_invoiced'=>array(
'label'=>
"AmountInvoicedHT",
'checked'=>0,
'enabled'=>!empty($conf->global->PROPOSAL_SHOW_INVOICED_AMOUNT)),
178 'p.total_invoiced'=>array(
'label'=>
"AmountInvoicedTTC",
'checked'=>0,
'enabled'=>!empty($conf->global->PROPOSAL_SHOW_INVOICED_AMOUNT)),
179 'p.multicurrency_code'=>array(
'label'=>
'Currency',
'checked'=>0,
'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1)),
180 'p.multicurrency_tx'=>array(
'label'=>
'CurrencyRate',
'checked'=>0,
'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1)),
181 'p.multicurrency_total_ht'=>array(
'label'=>
'MulticurrencyAmountHT',
'checked'=>0,
'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1)),
182 'p.multicurrency_total_vat'=>array(
'label'=>
'MulticurrencyAmountVAT',
'checked'=>0,
'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1)),
183 'p.multicurrency_total_ttc'=>array(
'label'=>
'MulticurrencyAmountTTC',
'checked'=>0,
'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1)),
184 'p.multicurrency_total_ht_invoiced'=>array(
'label'=>
'MulticurrencyAmountInvoicedHT',
'checked'=>0,
'enabled'=>!empty($conf->multicurrency->enabled) && !empty($conf->global->PROPOSAL_SHOW_INVOICED_AMOUNT)),
185 'p.multicurrency_total_invoiced'=>array(
'label'=>
'MulticurrencyAmountInvoicedTTC',
'checked'=>0,
'enabled'=>!empty($conf->multicurrency->enabled) && !empty($conf->global->PROPOSAL_SHOW_INVOICED_AMOUNT)),
186 'u.login'=>array(
'label'=>
"Author",
'checked'=>1,
'position'=>10),
187 'sale_representative'=>array(
'label'=>
"SaleRepresentativesOfThirdParty",
'checked'=>1),
188 'p.datec'=>array(
'label'=>
"DateCreation",
'checked'=>0,
'position'=>500),
189 'p.tms'=>array(
'label'=>
"DateModificationShort",
'checked'=>0,
'position'=>500),
190 'p.date_cloture'=>array(
'label'=>
"DateClosing",
'checked'=>0,
'position'=>500),
191 'p.note_public'=>array(
'label'=>
'NotePublic',
'checked'=>0,
'position'=>510,
'enabled'=>(empty($conf->global->MAIN_LIST_ALLOW_PUBLIC_NOTES))),
192 'p.note_private'=>array(
'label'=>
'NotePrivate',
'checked'=>0,
'position'=>511,
'enabled'=>(empty($conf->global->MAIN_LIST_ALLOW_PRIVATE_NOTES))),
193 'p.fk_statut'=>array(
'label'=>
"Status",
'checked'=>1,
'position'=>1000),
196 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_array_fields.tpl.php';
203 if (
GETPOST(
'cancel',
'alpha')) { $action =
'list'; $massaction =
''; }
204 if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') { $massaction =
''; }
206 $parameters = array(
'socid'=>$socid);
207 $reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
208 if ($reshook < 0)
setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
210 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
213 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha'))
219 $search_refcustomer =
'';
220 $search_refproject =
'';
221 $search_project =
'';
222 $search_societe =
'';
223 $search_montant_ht =
'';
224 $search_montant_vat =
'';
225 $search_montant_ttc =
'';
226 $search_multicurrency_code =
'';
227 $search_multicurrency_tx =
'';
228 $search_multicurrency_montant_ht =
'';
229 $search_multicurrency_montant_vat =
'';
230 $search_multicurrency_montant_ttc =
'';
232 $search_product_category =
'';
237 $search_country =
'';
238 $search_type_thirdparty =
'';
239 $search_date_start =
'';
240 $search_date_end =
'';
241 $search_dateend_start =
'';
242 $search_dateend_end =
'';
243 $search_datedelivery_start =
'';
244 $search_datedelivery_end =
'';
245 $search_availability =
'';
249 $search_array_options = array();
250 $search_categ_cus = 0;
252 if ($object_statut !=
'') $search_status = $object_statut;
257 $objectclass =
'Propal';
258 $objectlabel =
'Proposals';
259 $uploaddir = $conf->propal->multidir_output[$conf->entity];
260 include DOL_DOCUMENT_ROOT.
'/core/actions_massactions.inc.php';
264 if ($action ==
'validate') {
265 if (
GETPOST(
'confirm') ==
'yes') {
266 $tmpproposal =
new Propal($db);
270 foreach ($toselect as $checked) {
271 if ($tmpproposal->fetch($checked)) {
272 if ($tmpproposal->statut == $tmpproposal::STATUS_DRAFT) {
273 if ($tmpproposal->valid($user)) {
274 setEventMessage($tmpproposal->ref.
" ".$langs->trans(
'PassedInOpenStatus'),
'mesgs');
280 setEventMessage($tmpproposal->ref.
" ".$langs->trans(
'IsNotADraft'),
'errors');
297 if ($action ==
"sign") {
298 if (
GETPOST(
'confirm') ==
'yes') {
299 $tmpproposal =
new Propal($db);
303 foreach ($toselect as $checked) {
304 if ($tmpproposal->fetch($checked)) {
305 if ($tmpproposal->statut == $tmpproposal::STATUS_VALIDATED) {
306 $tmpproposal->statut = $tmpproposal::STATUS_SIGNED;
308 if ($tmpproposal->update($user)) {
309 setEventMessage($tmpproposal->ref.
" ".$langs->trans(
'Signed'),
'mesgs');
315 setEventMessage($tmpproposal->ref.
" ".$langs->trans(
'CantBeSign'),
'errors');
339 $form =
new Form($db);
343 $companystatic =
new Societe($db);
344 $projectstatic =
new Project($db);
347 $help_url =
'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos';
351 if ($sall || $search_product_category > 0 || $search_user > 0) $sql =
'SELECT DISTINCT';
352 $sql .=
' s.rowid as socid, s.nom as name, s.email, s.town, s.zip, s.fk_pays, s.client, s.code_client, ';
353 $sql .=
" typent.code as typent_code,";
354 $sql .=
" ava.rowid as availability,";
355 $sql .=
" state.code_departement as state_code, state.nom as state_name,";
356 $sql .=
' p.rowid, p.entity, p.note_private, p.total_ht, p.tva as total_vat, p.total as total_ttc, p.localtax1, p.localtax2, p.ref, p.ref_client, p.fk_statut as status, p.fk_user_author, p.datep as dp, p.fin_validite as dfv,p.date_livraison as ddelivery,';
357 $sql .=
' p.fk_multicurrency, p.multicurrency_code, p.multicurrency_tx, p.multicurrency_total_ht, p.multicurrency_total_tva as multicurrency_total_vat, p.multicurrency_total_ttc,';
358 $sql .=
' p.datec as date_creation, p.tms as date_update, p.date_cloture as date_cloture,';
359 $sql .=
' p.note_public, p.note_private,';
360 $sql .=
" pr.rowid as project_id, pr.ref as project_ref, pr.title as project_label,";
362 if (!$user->rights->societe->client->voir && !$socid) $sql .=
", sc.fk_soc, sc.fk_user";
363 if ($search_categ_cus) $sql .=
", cc.fk_categorie, cc.fk_soc";
365 if (!empty($extrafields->attributes[$object->table_element][
'label'])) {
366 foreach ($extrafields->attributes[$object->table_element][
'label'] as $key => $val) $sql .= ($extrafields->attributes[$object->table_element][
'type'][$key] !=
'separate' ?
", ef.".$key.
' as options_'.$key :
'');
369 $parameters = array();
370 $reshook = $hookmanager->executeHooks(
'printFieldListSelect', $parameters);
371 $sql .= $hookmanager->resPrint;
372 $sql = preg_replace(
'/, $/',
'', $sql);
373 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe as s';
374 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_country as country on (country.rowid = s.fk_pays)";
375 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_typent as typent on (typent.id = s.fk_typent)";
376 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_departements as state on (state.rowid = s.fk_departement)";
377 if (!empty($search_categ_cus)) $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
"categorie_societe as cc ON s.rowid = cc.fk_soc";
378 $sql .=
', '.MAIN_DB_PREFIX.
'propal as p';
379 if (is_array($extrafields->attributes[$object->table_element][
'label']) && count($extrafields->attributes[$object->table_element][
'label'])) $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element.
"_extrafields as ef on (p.rowid = ef.fk_object)";
380 if ($sall || $search_product_category > 0) $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'propaldet as pd ON p.rowid=pd.fk_propal';
381 if ($search_product_category > 0) $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'categorie_product as cp ON cp.fk_product=pd.fk_product';
382 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'user as u ON p.fk_user_author = u.rowid';
383 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"projet as pr ON pr.rowid = p.fk_projet";
384 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_availability as ava on (ava.rowid = p.fk_availability)";
386 if ($search_sale > 0 || (!$user->rights->societe->client->voir && !$socid)) $sql .=
", ".MAIN_DB_PREFIX.
"societe_commerciaux as sc";
387 if ($search_user > 0)
389 $sql .=
", ".MAIN_DB_PREFIX.
"element_contact as c";
390 $sql .=
", ".MAIN_DB_PREFIX.
"c_type_contact as tc";
392 $sql .=
' WHERE p.fk_soc = s.rowid';
393 $sql .=
' AND p.entity IN ('.getEntity(
'propal').
')';
394 if (!$user->rights->societe->client->voir && !$socid)
396 $sql .=
" AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id;
401 if ($search_state) $sql .=
natural_search(
"state.nom", $search_state);
402 if ($search_country) $sql .=
" AND s.fk_pays IN (".$db->sanitize($db->escape($search_country)).
')';
403 if ($search_type_thirdparty) $sql .=
" AND s.fk_typent IN (".$db->sanitize($db->escape($search_type_thirdparty)).
')';
405 if ($search_refcustomer) $sql .=
natural_search(
'p.ref_client', $search_refcustomer);
406 if ($search_refproject) $sql .=
natural_search(
'pr.ref', $search_refproject);
407 if ($search_project) $sql .=
natural_search(
'pr.title', $search_project);
408 if ($search_availability) $sql .=
" AND p.fk_availability IN (".$db->sanitize($db->escape($search_availability)).
')';
410 if ($search_societe) $sql .=
natural_search(
's.nom', $search_societe);
411 if ($search_login) $sql .=
natural_search(
"u.login", $search_login);
412 if ($search_montant_ht !=
'') $sql .=
natural_search(
"p.total_ht", $search_montant_ht, 1);
413 if ($search_montant_vat !=
'') $sql .=
natural_search(
"p.tva", $search_montant_vat, 1);
414 if ($search_montant_ttc !=
'') $sql .=
natural_search(
"p.total", $search_montant_ttc, 1);
415 if ($search_multicurrency_code !=
'') $sql .=
' AND p.multicurrency_code = "'.$db->escape($search_multicurrency_code).
'"';
416 if ($search_multicurrency_tx !=
'') $sql .=
natural_search(
'p.multicurrency_tx', $search_multicurrency_tx, 1);
417 if ($search_multicurrency_montant_ht !=
'') $sql .=
natural_search(
'p.multicurrency_total_ht', $search_multicurrency_montant_ht, 1);
418 if ($search_multicurrency_montant_vat !=
'') $sql .=
natural_search(
'p.multicurrency_total_tva', $search_multicurrency_montant_vat, 1);
419 if ($search_multicurrency_montant_ttc !=
'') $sql .=
natural_search(
'p.multicurrency_total_ttc', $search_multicurrency_montant_ttc, 1);
423 if ($search_categ_cus > 0) $sql .=
" AND cc.fk_categorie = ".$db->escape($search_categ_cus);
424 if ($search_categ_cus == -2) $sql .=
" AND cc.fk_categorie IS NULL";
426 if ($search_product_category > 0) $sql .=
" AND cp.fk_categorie = ".$db->escape($search_product_category);
427 if ($socid > 0) $sql .=
' AND s.rowid = '.$socid;
428 if ($search_status !=
'' && $search_status !=
'-1')
430 $sql .=
' AND p.fk_statut IN ('.$db->sanitize($db->escape($search_status)).
')';
432 if ($search_date_start) $sql .=
" AND p.datep >= '".$db->idate($search_date_start).
"'";
433 if ($search_date_end) $sql .=
" AND p.datep <= '".$db->idate($search_date_end).
"'";
434 if ($search_dateend_start) $sql .=
" AND p.fin_validite >= '".$db->idate($search_dateend_start).
"'";
435 if ($search_dateend_end) $sql .=
" AND p.fin_validite <= '".$db->idate($search_dateend_end).
"'";
436 if ($search_datedelivery_start) $sql .=
" AND p.date_livraison >= '".$db->idate($search_datedelivery_start).
"'";
437 if ($search_datedelivery_end) $sql .=
" AND p.date_livraison <= '".$db->idate($search_datedelivery_end).
"'";
438 if ($search_sale > 0) $sql .=
" AND s.rowid = sc.fk_soc AND sc.fk_user = ".$db->escape($search_sale);
439 if ($search_user > 0)
441 $sql .=
" AND c.fk_c_type_contact = tc.rowid AND tc.element='propal' AND tc.source='internal' AND c.element_id = p.rowid AND c.fk_socpeople = ".$db->escape($search_user);
444 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_sql.tpl.php';
447 $parameters = array();
448 $reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters);
449 $sql .= $hookmanager->resPrint;
451 $sql .= $db->order($sortfield, $sortorder);
452 $sql .=
', p.ref DESC';
455 $nbtotalofrecords =
'';
456 if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
458 $result = $db->query($sql);
459 $nbtotalofrecords = $db->num_rows($result);
461 if (($page * $limit) > $nbtotalofrecords)
468 $sql .= $db->plimit($limit + 1, $offset);
470 $resql = $db->query($sql);
474 $objectstatic =
new Propal($db);
475 $userstatic =
new User($db);
481 $title = $langs->trans(
'ListOfProposals').
' - '.$soc->name;
482 if (empty($search_societe)) $search_societe = $soc->name;
484 $title = $langs->trans(
'ListOfProposals');
487 $num = $db->num_rows(
$resql);
489 $arrayofselected = is_array($toselect) ? $toselect : array();
491 if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $sall)
493 $obj = $db->fetch_object(
$resql);
497 header(
"Location: ".DOL_URL_ROOT.
'/comm/propal/card.php?id='.$id);
501 llxHeader(
'', $langs->trans(
'Proposal'), $help_url);
503 $param =
'&search_status='.urlencode($search_status);
504 if (!empty($contextpage) && $contextpage !=
$_SERVER[
"PHP_SELF"]) $param .=
'&contextpage='.urlencode($contextpage);
505 if ($limit > 0 && $limit != $conf->liste_limit) $param .=
'&limit='.urlencode($limit);
506 if ($sall) $param .=
'&sall='.urlencode($sall);
507 if ($search_date_start) $param .=
'&search_date_start='.urlencode($search_date_start);
508 if ($search_date_end) $param .=
'&search_date_end='.urlencode($search_date_end);
509 if ($search_dateend_start) $param .=
'&search_dateend_start='.urlencode($search_dateend_start);
510 if ($search_dateend_end) $param .=
'&search_dateend_end='.urlencode($search_dateend_end);
511 if ($search_datedelivery_start) $param .=
'&search_datedelivery_start='.urlencode($search_datedelivery_start);
512 if ($search_datedelivery_end) $param .=
'&search_datedelivery_end='.urlencode($search_datedelivery_end);
513 if ($search_ref) $param .=
'&search_ref='.urlencode($search_ref);
514 if ($search_refcustomer) $param .=
'&search_refcustomer='.urlencode($search_refcustomer);
515 if ($search_refproject) $param .=
'&search_refproject='.urlencode($search_refproject);
516 if ($search_societe) $param .=
'&search_societe='.urlencode($search_societe);
517 if ($search_user > 0) $param .=
'&search_user='.urlencode($search_user);
518 if ($search_sale > 0) $param .=
'&search_sale='.urlencode($search_sale);
519 if ($search_montant_ht) $param .=
'&search_montant_ht='.urlencode($search_montant_ht);
520 if ($search_multicurrency_code !=
'') $param .=
'&search_multicurrency_code='.urlencode($search_multicurrency_code);
521 if ($search_multicurrency_tx !=
'') $param .=
'&search_multicurrency_tx='.urlencode($search_multicurrency_tx);
522 if ($search_multicurrency_montant_ht !=
'') $param .=
'&search_multicurrency_montant_ht='.urlencode($search_multicurrency_montant_ht);
523 if ($search_multicurrency_montant_vat !=
'') $param .=
'&search_multicurrency_montant_vat='.urlencode($search_multicurrency_montant_vat);
524 if ($search_multicurrency_montant_ttc !=
'') $param .=
'&search_multicurrency_montant_ttc='.urlencode($search_multicurrency_montant_ttc);
525 if ($search_login) $param .=
'&search_login='.urlencode($search_login);
526 if ($search_town) $param .=
'&search_town='.urlencode($search_town);
527 if ($search_zip) $param .=
'&search_zip='.urlencode($search_zip);
528 if ($socid > 0) $param .=
'&socid='.urlencode($socid);
529 if ($optioncss !=
'') $param .=
'&optioncss='.urlencode($optioncss);
530 if ($search_categ_cus > 0) $param .=
'&search_categ_cus='.urlencode($search_categ_cus);
531 if ($search_product_category !=
'') $param .=
'&search_product_category='.$search_product_category;
534 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_param.tpl.php';
537 $arrayofmassactions = array(
538 'generate_doc'=>$langs->trans(
"ReGeneratePDF"),
539 'builddoc'=>$langs->trans(
"PDFMerge"),
540 'presend'=>$langs->trans(
"SendByMail"),
541 'prevalidate'=>$langs->trans(
"Validate"),
542 'presign'=>$langs->trans(
"Sign"),
544 if ($user->rights->propal->supprimer) $arrayofmassactions[
'predelete'] =
'<span class="fa fa-trash paddingrightonly"></span>'.$langs->trans(
"Delete");
545 if ($user->rights->propal->cloturer) $arrayofmassactions[
'closed'] = $langs->trans(
"Close");
546 if (in_array($massaction, array(
'presend',
'predelete',
'closed'))) $arrayofmassactions = array();
547 $massactionbutton = $form->selectMassAction(
'', $arrayofmassactions);
549 $url = DOL_URL_ROOT.
'/comm/propal/card.php?action=create';
550 if (!empty($socid)) $url .=
'&socid='.$socid;
551 $newcardbutton =
dolGetButtonTitle($langs->trans(
'NewPropal'),
'',
'fa fa-plus-circle', $url,
'', $user->rights->propal->creer);
554 print '<form method="POST" id="searchFormList" action="'.$_SERVER[
"PHP_SELF"].
'">';
555 if ($optioncss !=
'')
print '<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
556 print '<input type="hidden" name="token" value="'.newToken().
'">';
557 print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
558 print '<input type="hidden" name="action" value="list">';
559 print '<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
560 print '<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
561 print '<input type="hidden" name="contextpage" value="'.$contextpage.
'">';
563 print_barre_liste($title, $page,
$_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords,
'propal', 0, $newcardbutton,
'', $limit, 0, 0, 1);
565 $topicmail =
"SendPropalRef";
566 $modelmail =
"propal_send";
567 $objecttmp =
new Propal($db);
568 $trackid =
'pro'.$object->id;
569 include DOL_DOCUMENT_ROOT.
'/core/tpl/massactions_pre.tpl.php';
571 if ($massaction ==
'prevalidate')
573 print $form->formconfirm(
$_SERVER[
"PHP_SELF"], $langs->trans(
"ConfirmMassValidation"), $langs->trans(
"ConfirmMassValidationQuestion"),
"validate", null,
'', 0, 200, 500, 1);
576 if ($massaction ==
'presign')
578 print $form->formconfirm(
$_SERVER[
"PHP_SELF"], $langs->trans(
"ConfirmMassSignature"), $langs->trans(
"ConfirmMassSignatureQuestion"),
"sign", null,
'', 0, 200, 500, 1);
583 foreach ($fieldstosearchall as $key => $val) $fieldstosearchall[$key] = $langs->trans($val);
584 print '<div class="divsearchfieldfilter">'.$langs->trans(
"FilterOnInto", $sall).join(
', ', $fieldstosearchall).
'</div>';
592 if ($user->rights->societe->client->voir || $socid)
594 $langs->load(
"commercial");
595 $moreforfilter .=
'<div class="divsearchfield">';
596 $moreforfilter .= $langs->trans(
'ThirdPartiesOfSaleRepresentative').
': ';
597 $moreforfilter .= $formother->select_salesrepresentatives($search_sale,
'search_sale', $user, 0, 1,
'maxwidth200');
598 $moreforfilter .=
'</div>';
601 if ($user->rights->societe->client->voir || $socid)
603 $moreforfilter .=
'<div class="divsearchfield">';
604 $moreforfilter .= $langs->trans(
'LinkedToSpecificUsers').
': ';
605 $moreforfilter .= $form->select_dolusers($search_user,
'search_user', 1,
'', 0,
'',
'', 0, 0, 0,
'', 0,
'',
'maxwidth200');
606 $moreforfilter .=
'</div>';
609 if (!empty($conf->categorie->enabled) && $user->rights->categorie->lire && ($user->rights->produit->lire || $user->rights->service->lire))
611 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
612 $moreforfilter .=
'<div class="divsearchfield">';
613 $moreforfilter .= $langs->trans(
'IncludingProductWithTag').
': ';
614 $cate_arbo = $form->select_all_categories(Categorie::TYPE_PRODUCT, null,
'parent', null, null, 1);
615 $moreforfilter .= $form->selectarray(
'search_product_category', $cate_arbo, $search_product_category, 1, 0, 0,
'', 0, 0, 0, 0,
'maxwidth300', 1);
616 $moreforfilter .=
'</div>';
618 if (!empty($conf->categorie->enabled) && $user->rights->categorie->lire)
620 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
621 $moreforfilter .=
'<div class="divsearchfield">';
622 $moreforfilter .= $langs->trans(
'CustomersProspectsCategoriesShort').
': ';
623 $moreforfilter .= $formother->select_categories(
'customer', $search_categ_cus,
'search_categ_cus', 1);
624 $moreforfilter .=
'</div>';
626 $parameters = array();
627 $reshook = $hookmanager->executeHooks(
'printFieldPreListTitle', $parameters);
628 if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint;
629 else $moreforfilter = $hookmanager->resPrint;
631 if (!empty($moreforfilter))
633 print '<div class="liste_titre liste_titre_bydiv centpercent">';
634 print $moreforfilter;
638 $varpage = empty($contextpage) ?
$_SERVER[
"PHP_SELF"] : $contextpage;
639 $selectedfields = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage);
640 $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons(
'checkforselect', 1) :
'');
642 print '<div class="div-table-responsive">';
643 print '<table class="tagtable liste'.($moreforfilter ?
" listwithfilterbefore" :
"").
'">'.
"\n";
645 print '<tr class="liste_titre_filter">';
646 if (!empty($arrayfields[
'p.ref'][
'checked']))
648 print
'<td class="liste_titre">';
649 print
'<input class="flat maxwidth50" type="text" name="search_ref" value="'.dol_escape_htmltag($search_ref).
'">';
652 if (!empty($arrayfields[
'p.ref_client'][
'checked']))
654 print
'<td class="liste_titre">';
655 print
'<input class="flat maxwidth50" type="text" name="search_refcustomer" value="'.dol_escape_htmltag($search_refcustomer).
'">';
658 if (!empty($arrayfields[
'pr.ref'][
'checked']))
660 print
'<td class="liste_titre">';
661 print
'<input class="flat maxwidth50" type="text" name="search_refproject" value="'.dol_escape_htmltag($search_refproject).
'">';
664 if (!empty($arrayfields[
'pr.title'][
'checked']))
666 print
'<td class="liste_titre">';
667 print
'<input class="flat maxwidth50" type="text" name="search_project" value="'.dol_escape_htmltag($search_project).
'">';
670 if (!empty($arrayfields[
's.nom'][
'checked']))
672 print
'<td class="liste_titre" align="left">';
673 print
'<input class="flat maxwidth100" type="text" name="search_societe" value="'.dol_escape_htmltag($search_societe).
'">';
676 if (!empty($arrayfields[
's.town'][
'checked'])) print
'<td class="liste_titre"><input class="flat maxwidth50" type="text" name="search_town" value="'.$search_town.
'"></td>';
677 if (!empty($arrayfields[
's.zip'][
'checked'])) print
'<td class="liste_titre"><input class="flat maxwidth50" type="text" name="search_zip" value="'.$search_zip.
'"></td>';
679 if (!empty($arrayfields[
'state.nom'][
'checked']))
681 print
'<td class="liste_titre">';
682 print
'<input class="flat maxwidth50" type="text" name="search_state" value="'.dol_escape_htmltag($search_state).
'">';
686 if (!empty($arrayfields[
'country.code_iso'][
'checked']))
688 print
'<td class="liste_titre" align="center">';
689 print $form->select_country($search_country,
'search_country',
'', 0,
'minwidth100imp maxwidth100');
693 if (!empty($arrayfields[
'typent.code'][
'checked']))
695 print
'<td class="liste_titre maxwidth100onsmartphone" align="center">';
696 print $form->selectarray(
"search_type_thirdparty", $formcompany->typent_array(0), $search_type_thirdparty, 0, 0, 0,
'', 0, 0, 0, (empty($conf->global->SOCIETE_SORT_ON_TYPEENT) ?
'ASC' : $conf->global->SOCIETE_SORT_ON_TYPEENT));
701 if (!empty($arrayfields[
'p.date'][
'checked']))
703 print
'<td class="liste_titre center">';
704 print
'<div class="nowrap">';
705 print $form->selectDate($search_date_start ? $search_date_start : -1,
'search_date_start', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'From'));
707 print
'<div class="nowrap">';
708 print $form->selectDate($search_date_end ? $search_date_end : -1,
'search_date_end', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'to'));
713 if (!empty($arrayfields[
'p.fin_validite'][
'checked']))
715 print
'<td class="liste_titre center">';
716 print
'<div class="nowrap">';
717 print $form->selectDate($search_dateend_start ? $search_dateend_start : -1,
'search_dateend_start', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'From'));
719 print
'<div class="nowrap">';
720 print $form->selectDate($search_dateend_end ? $search_dateend_end : -1,
'search_dateend_end', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'to'));
725 if (!empty($arrayfields[
'p.date_livraison'][
'checked']))
727 print
'<td class="liste_titre center">';
728 print
'<div class="nowrap">';
729 print $form->selectDate($search_datedelivery_start ? $search_datedelivery_start : -1,
'search_datedelivery_start', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'From'));
731 print
'<div class="nowrap">';
732 print $form->selectDate($search_datedelivery_end ? $search_datedelivery_end : -1,
'search_datedelivery_end', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'From'));
737 if (!empty($arrayfields[
'ava.rowid'][
'checked']))
739 print
'<td class="liste_titre maxwidth100onsmartphone center">';
740 $form->selectAvailabilityDelay($search_availability,
'search_availability',
'', 1);
744 if (!empty($arrayfields[
'p.total_ht'][
'checked']))
747 print
'<td class="liste_titre right">';
748 print
'<input class="flat" type="text" size="5" name="search_montant_ht" value="'.dol_escape_htmltag($search_montant_ht).
'">';
751 if (!empty($arrayfields[
'p.total_vat'][
'checked']))
754 print
'<td class="liste_titre right">';
755 print
'<input class="flat" type="text" size="5" name="search_montant_vat" value="'.dol_escape_htmltag($search_montant_vat).
'">';
758 if (!empty($arrayfields[
'p.total_ttc'][
'checked']))
761 print
'<td class="liste_titre right">';
762 print
'<input class="flat" type="text" size="5" name="search_montant_ttc" value="'.dol_escape_htmltag($search_montant_ttc).
'">';
765 if (!empty($arrayfields[
'p.total_ht_invoiced'][
'checked']))
768 print
'<td class="liste_titre right">';
771 if (!empty($arrayfields[
'p.total_invoiced'][
'checked']))
774 print
'<td class="liste_titre right">';
777 if (!empty($arrayfields[
'p.multicurrency_code'][
'checked']))
780 print
'<td class="liste_titre">';
781 print $form->selectMultiCurrency($search_multicurrency_code,
'search_multicurrency_code', 1);
784 if (!empty($arrayfields[
'p.multicurrency_tx'][
'checked']))
787 print
'<td class="liste_titre">';
788 print
'<input class="flat" type="text" size="4" name="search_multicurrency_tx" value="'.dol_escape_htmltag($search_multicurrency_tx).
'">';
791 if (!empty($arrayfields[
'p.multicurrency_total_ht'][
'checked']))
794 print
'<td class="liste_titre right">';
795 print
'<input class="flat" type="text" size="4" name="search_multicurrency_montant_ht" value="'.dol_escape_htmltag($search_multicurrency_montant_ht).
'">';
798 if (!empty($arrayfields[
'p.multicurrency_total_vat'][
'checked']))
801 print
'<td class="liste_titre right">';
802 print
'<input class="flat" type="text" size="4" name="search_multicurrency_montant_vat" value="'.dol_escape_htmltag($search_multicurrency_montant_vat).
'">';
805 if (!empty($arrayfields[
'p.multicurrency_total_ttc'][
'checked']))
808 print
'<td class="liste_titre right">';
809 print
'<input class="flat" type="text" size="4" name="search_multicurrency_montant_ttc" value="'.dol_escape_htmltag($search_multicurrency_montant_ttc).
'">';
812 if (!empty($arrayfields[
'p.multicurrency_total_ht_invoiced'][
'checked']))
815 print
'<td class="liste_titre right">';
818 if (!empty($arrayfields[
'p.multicurrency_total_invoiced'][
'checked']))
821 print
'<td class="liste_titre right">';
824 if (!empty($arrayfields[
'u.login'][
'checked']))
827 print
'<td class="liste_titre" align="center">';
828 print
'<input class="flat" size="4" type="text" name="search_login" value="'.dol_escape_htmltag($search_login).
'">';
831 if (!empty($arrayfields[
'sale_representative'][
'checked']))
833 print
'<td class="liste_titre"></td>';
836 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_input.tpl.php';
839 $parameters = array(
'arrayfields'=>$arrayfields);
840 $reshook = $hookmanager->executeHooks(
'printFieldListOption', $parameters);
841 print $hookmanager->resPrint;
843 if (!empty($arrayfields[
'p.datec'][
'checked']))
845 print
'<td class="liste_titre">';
849 if (!empty($arrayfields[
'p.tms'][
'checked']))
851 print
'<td class="liste_titre">';
855 if (!empty($arrayfields[
'p.date_cloture'][
'checked']))
857 print
'<td class="liste_titre">';
860 if (!empty($arrayfields[
'p.note_public'][
'checked']))
863 print
'<td class="liste_titre">';
866 if (!empty($arrayfields[
'p.note_private'][
'checked']))
869 print
'<td class="liste_titre">';
873 if (!empty($arrayfields[
'p.fk_statut'][
'checked']))
875 print
'<td class="liste_titre maxwidthonsmartphone right">';
876 $formpropal->selectProposalStatus($search_status, 1, 0, 1,
'customer',
'search_statut');
880 print
'<td class="liste_titre" align="middle">';
881 $searchpicto = $form->showFilterButtons();
889 print
'<tr class="liste_titre">';
890 if (!empty($arrayfields[
'p.ref'][
'checked']))
print_liste_field_titre($arrayfields[
'p.ref'][
'label'],
$_SERVER[
"PHP_SELF"],
'p.ref',
'', $param,
'', $sortfield, $sortorder);
891 if (!empty($arrayfields[
'p.ref_client'][
'checked']))
print_liste_field_titre($arrayfields[
'p.ref_client'][
'label'],
$_SERVER[
"PHP_SELF"],
'p.ref_client',
'', $param,
'', $sortfield, $sortorder);
892 if (!empty($arrayfields[
'pr.ref'][
'checked']))
print_liste_field_titre($arrayfields[
'pr.ref'][
'label'],
$_SERVER[
"PHP_SELF"],
'pr.ref',
'', $param,
'', $sortfield, $sortorder);
893 if (!empty($arrayfields[
'pr.title'][
'checked']))
print_liste_field_titre($arrayfields[
'pr.title'][
'label'],
$_SERVER[
"PHP_SELF"],
'pr.title',
'', $param,
'', $sortfield, $sortorder);
894 if (!empty($arrayfields[
's.nom'][
'checked']))
print_liste_field_titre($arrayfields[
's.nom'][
'label'],
$_SERVER[
"PHP_SELF"],
's.nom',
'', $param,
'', $sortfield, $sortorder);
895 if (!empty($arrayfields[
's.town'][
'checked']))
print_liste_field_titre($arrayfields[
's.town'][
'label'],
$_SERVER[
"PHP_SELF"],
's.town',
'', $param,
'', $sortfield, $sortorder);
896 if (!empty($arrayfields[
's.zip'][
'checked']))
print_liste_field_titre($arrayfields[
's.zip'][
'label'],
$_SERVER[
"PHP_SELF"],
's.zip',
'', $param,
'', $sortfield, $sortorder);
897 if (!empty($arrayfields[
'state.nom'][
'checked']))
print_liste_field_titre($arrayfields[
'state.nom'][
'label'],
$_SERVER[
"PHP_SELF"],
"state.nom",
"", $param,
'', $sortfield, $sortorder);
898 if (!empty($arrayfields[
'country.code_iso'][
'checked']))
print_liste_field_titre($arrayfields[
'country.code_iso'][
'label'],
$_SERVER[
"PHP_SELF"],
"country.code_iso",
"", $param,
'align="center"', $sortfield, $sortorder);
899 if (!empty($arrayfields[
'typent.code'][
'checked']))
print_liste_field_titre($arrayfields[
'typent.code'][
'label'],
$_SERVER[
"PHP_SELF"],
"typent.code",
"", $param,
'align="center"', $sortfield, $sortorder);
900 if (!empty($arrayfields[
'p.date'][
'checked']))
print_liste_field_titre($arrayfields[
'p.date'][
'label'],
$_SERVER[
"PHP_SELF"],
'p.datep',
'', $param,
'align="center"', $sortfield, $sortorder);
901 if (!empty($arrayfields[
'p.fin_validite'][
'checked']))
print_liste_field_titre($arrayfields[
'p.fin_validite'][
'label'],
$_SERVER[
"PHP_SELF"],
'dfv',
'', $param,
'align="center"', $sortfield, $sortorder);
902 if (!empty($arrayfields[
'p.date_livraison'][
'checked']))
print_liste_field_titre($arrayfields[
'p.date_livraison'][
'label'],
$_SERVER[
"PHP_SELF"],
'ddelivery',
'', $param,
'align="center"', $sortfield, $sortorder);
903 if (!empty($arrayfields[
'ava.rowid'][
'checked']))
print_liste_field_titre($arrayfields[
'ava.rowid'][
'label'],
$_SERVER[
"PHP_SELF"],
'availability',
'', $param,
'', $sortfield, $sortorder);
904 if (!empty($arrayfields[
'p.total_ht'][
'checked']))
print_liste_field_titre($arrayfields[
'p.total_ht'][
'label'],
$_SERVER[
"PHP_SELF"],
'p.total_ht',
'', $param,
'class="right"', $sortfield, $sortorder);
905 if (!empty($arrayfields[
'p.total_vat'][
'checked']))
print_liste_field_titre($arrayfields[
'p.total_vat'][
'label'],
$_SERVER[
"PHP_SELF"],
'p.tva',
'', $param,
'class="right"', $sortfield, $sortorder);
906 if (!empty($arrayfields[
'p.total_ttc'][
'checked']))
print_liste_field_titre($arrayfields[
'p.total_ttc'][
'label'],
$_SERVER[
"PHP_SELF"],
'p.total',
'', $param,
'class="right"', $sortfield, $sortorder);
907 if (!empty($arrayfields[
'p.total_ht_invoiced'][
'checked']))
print_liste_field_titre($arrayfields[
'p.total_ht_invoiced'][
'label'],
$_SERVER[
"PHP_SELF"],
'',
'', $param,
'class="right"', $sortfield, $sortorder);
908 if (!empty($arrayfields[
'p.total_invoiced'][
'checked']))
print_liste_field_titre($arrayfields[
'p.total_invoiced'][
'label'],
$_SERVER[
"PHP_SELF"],
'',
'', $param,
'class="right"', $sortfield, $sortorder);
909 if (!empty($arrayfields[
'p.multicurrency_code'][
'checked']))
print_liste_field_titre($arrayfields[
'p.multicurrency_code'][
'label'],
$_SERVER[
'PHP_SELF'],
'p.multicurrency_code',
'', $param,
'', $sortfield, $sortorder);
910 if (!empty($arrayfields[
'p.multicurrency_tx'][
'checked']))
print_liste_field_titre($arrayfields[
'p.multicurrency_tx'][
'label'],
$_SERVER[
'PHP_SELF'],
'p.multicurrency_tx',
'', $param,
'', $sortfield, $sortorder);
911 if (!empty($arrayfields[
'p.multicurrency_total_ht'][
'checked']))
print_liste_field_titre($arrayfields[
'p.multicurrency_total_ht'][
'label'],
$_SERVER[
'PHP_SELF'],
'p.multicurrency_total_ht',
'', $param,
'class="right"', $sortfield, $sortorder);
912 if (!empty($arrayfields[
'p.multicurrency_total_vat'][
'checked']))
print_liste_field_titre($arrayfields[
'p.multicurrency_total_vat'][
'label'],
$_SERVER[
'PHP_SELF'],
'p.multicurrency_total_tva',
'', $param,
'class="right"', $sortfield, $sortorder);
913 if (!empty($arrayfields[
'p.multicurrency_total_ttc'][
'checked']))
print_liste_field_titre($arrayfields[
'p.multicurrency_total_ttc'][
'label'],
$_SERVER[
'PHP_SELF'],
'p.multicurrency_total_ttc',
'', $param,
'class="right"', $sortfield, $sortorder);
914 if (!empty($arrayfields[
'p.multicurrency_total_ht_invoiced'][
'checked']))
print_liste_field_titre($arrayfields[
'p.multicurrency_total_ht_invoiced'][
'label'],
$_SERVER[
"PHP_SELF"],
'',
'', $param,
'class="right"', $sortfield, $sortorder);
915 if (!empty($arrayfields[
'p.multicurrency_total_invoiced'][
'checked']))
print_liste_field_titre($arrayfields[
'p.multicurrency_total_invoiced'][
'label'],
$_SERVER[
"PHP_SELF"],
'',
'', $param,
'class="right"', $sortfield, $sortorder);
916 if (!empty($arrayfields[
'u.login'][
'checked']))
print_liste_field_titre($arrayfields[
'u.login'][
'label'],
$_SERVER[
"PHP_SELF"],
'u.login',
'', $param,
'align="center"', $sortfield, $sortorder);
917 if (!empty($arrayfields[
'sale_representative'][
'checked']))
print_liste_field_titre($arrayfields[
'sale_representative'][
'label'],
$_SERVER[
"PHP_SELF"],
"",
"",
"$param",
'', $sortfield, $sortorder);
919 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_title.tpl.php';
921 $parameters = array(
'arrayfields'=>$arrayfields,
'param'=>$param,
'sortfield'=>$sortfield,
'sortorder'=>$sortorder);
922 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters);
923 print $hookmanager->resPrint;
924 if (!empty($arrayfields[
'p.datec'][
'checked']))
print_liste_field_titre($arrayfields[
'p.datec'][
'label'],
$_SERVER[
"PHP_SELF"],
"p.datec",
"", $param,
'align="center" class="nowrap"', $sortfield, $sortorder);
925 if (!empty($arrayfields[
'p.tms'][
'checked']))
print_liste_field_titre($arrayfields[
'p.tms'][
'label'],
$_SERVER[
"PHP_SELF"],
"p.tms",
"", $param,
'align="center" class="nowrap"', $sortfield, $sortorder);
926 if (!empty($arrayfields[
'p.date_cloture'][
'checked']))
print_liste_field_titre($arrayfields[
'p.date_cloture'][
'label'],
$_SERVER[
"PHP_SELF"],
"p.date_cloture",
"", $param,
'align="center" class="nowrap"', $sortfield, $sortorder);
927 if (!empty($arrayfields[
'p.note_public'][
'checked']))
print_liste_field_titre($arrayfields[
'p.note_public'][
'label'],
$_SERVER[
"PHP_SELF"],
"p.note_public",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
928 if (!empty($arrayfields[
'p.note_private'][
'checked']))
print_liste_field_titre($arrayfields[
'p.note_private'][
'label'],
$_SERVER[
"PHP_SELF"],
"p.note_private",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
929 if (!empty($arrayfields[
'p.fk_statut'][
'checked']))
print_liste_field_titre($arrayfields[
'p.fk_statut'][
'label'],
$_SERVER[
"PHP_SELF"],
"p.fk_statut",
"", $param,
'class="right"', $sortfield, $sortorder);
935 $totalarray = array();
938 while ($i < min($num, $limit))
940 $obj = $db->fetch_object(
$resql);
942 $objectstatic->id = $obj->rowid;
943 $objectstatic->ref = $obj->ref;
944 $objectstatic->ref_client = $obj->ref_client;
945 $objectstatic->note_public = $obj->note_public;
946 $objectstatic->note_private = $obj->note_private;
947 $objectstatic->statut = $obj->status;
948 $objectstatic->status = $obj->status;
950 $companystatic->id = $obj->socid;
951 $companystatic->name = $obj->name;
952 $companystatic->client = $obj->client;
953 $companystatic->code_client = $obj->code_client;
954 $companystatic->email = $obj->email;
956 $projectstatic->id = $obj->project_id;
957 $projectstatic->ref = $obj->project_ref;
958 $projectstatic->title = $obj->project_label;
960 $totalInvoicedHT = 0;
961 $totalInvoicedTTC = 0;
962 $multicurrency_totalInvoicedHT = 0;
963 $multicurrency_totalInvoicedTTC = 0;
965 $TInvoiceData = $objectstatic->InvoiceArrayList($obj->rowid);
967 if (!empty($TInvoiceData))
969 foreach ($TInvoiceData as $invoiceData)
972 $invoice->fetch($invoiceData->facid);
974 if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS) && $invoice->type ==
Facture::TYPE_DEPOSIT)
continue;
976 $totalInvoicedHT += $invoice->total_ht;
977 $totalInvoicedTTC += $invoice->total_ttc;
978 $multicurrency_totalInvoicedHT += $invoice->multicurrency_total_ht;
979 $multicurrency_totalInvoicedTTC += $invoice->multicurrency_total_ttc;
983 print
'<tr class="oddeven">';
985 if (!empty($arrayfields[
'p.ref'][
'checked']))
987 print
'<td class="nowraponall">';
989 print
'<table class="nobordernopadding"><tr class="nocellnopadd">';
991 print
'<td class="nobordernopadding nowraponall">';
992 print $objectstatic->getNomUrl(1,
'',
'', 0, 1, (isset($conf->global->PROPAL_LIST_SHOW_NOTES) ? $conf->global->PROPAL_LIST_SHOW_NOTES : 1));
999 print
'<td style="min-width: 20px" class="nobordernopadding nowrap">';
1004 print
'<td width="16" class="nobordernopadding right">';
1007 $urlsource =
$_SERVER[
'PHP_SELF'].
'?id='.$obj->rowid;
1008 print $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir);
1009 print
'</td></tr></table>';
1012 if (!$i) $totalarray[
'nbfield']++;
1015 if (!empty($arrayfields[
'p.ref_client'][
'checked']))
1018 print
'<td class="nowrap tdoverflowmax200">';
1019 print $obj->ref_client;
1021 if (!$i) $totalarray[
'nbfield']++;
1024 if (!empty($arrayfields[
'pr.ref'][
'checked']))
1027 print
'<td class="nowrap">';
1028 if ($obj->project_id > 0) {
1029 print $projectstatic->getNomUrl(1);
1032 if (!$i) $totalarray[
'nbfield']++;
1035 if (!empty($arrayfields[
'pr.title'][
'checked']))
1038 print
'<td class="nowrap">';
1039 if ($obj->project_id > 0) {
1040 print $projectstatic->title;
1043 if (!$i) $totalarray[
'nbfield']++;
1047 if (!empty($arrayfields[
's.nom'][
'checked']))
1049 print
'<td class="tdoverflowmax200">';
1050 print $companystatic->getNomUrl(1,
'customer');
1052 if (!$i) $totalarray[
'nbfield']++;
1056 if (!empty($arrayfields[
's.town'][
'checked']))
1058 print
'<td class="nocellnopadd">';
1061 if (!$i) $totalarray[
'nbfield']++;
1064 if (!empty($arrayfields[
's.zip'][
'checked']))
1066 print
'<td class="nocellnopadd">';
1069 if (!$i) $totalarray[
'nbfield']++;
1072 if (!empty($arrayfields[
'state.nom'][
'checked']))
1074 print
"<td>".$obj->state_name.
"</td>\n";
1075 if (!$i) $totalarray[
'nbfield']++;
1078 if (!empty($arrayfields[
'country.code_iso'][
'checked']))
1080 print
'<td class="center">';
1081 $tmparray =
getCountry($obj->fk_pays,
'all');
1082 print $tmparray[
'label'];
1084 if (!$i) $totalarray[
'nbfield']++;
1087 if (!empty($arrayfields[
'typent.code'][
'checked']))
1089 if (!is_array($typenArray) || empty($typenArray)) $typenArray = $formcompany->typent_array(1);
1091 print
'<td class="center">';
1092 print $typenArray[$obj->typent_code];
1094 if (!$i) $totalarray[
'nbfield']++;
1098 if (!empty($arrayfields[
'p.date'][
'checked']))
1100 print
'<td class="center">';
1103 if (!$i) $totalarray[
'nbfield']++;
1107 if (!empty($arrayfields[
'p.fin_validite'][
'checked']))
1111 print
'<td class="center">'.dol_print_date($db->jdate($obj->dfv),
'day');
1114 print
'<td> </td>';
1116 if (!$i) $totalarray[
'nbfield']++;
1119 if (!empty($arrayfields[
'p.date_livraison'][
'checked']))
1121 if ($obj->ddelivery)
1123 print
'<td class="center">'.dol_print_date($db->jdate($obj->ddelivery),
'day');
1126 print
'<td> </td>';
1128 if (!$i) $totalarray[
'nbfield']++;
1131 if (!empty($arrayfields[
'ava.rowid'][
'checked']))
1133 print
'<td class="center">';
1134 $form->form_availability(
'', $obj->availability,
'none', 1);
1136 if (!$i) $totalarray[
'nbfield']++;
1140 if (!empty($arrayfields[
'p.total_ht'][
'checked']))
1142 print
'<td class="nowrap right">'.price($obj->total_ht).
"</td>\n";
1143 if (!$i) $totalarray[
'nbfield']++;
1144 if (!$i) $totalarray[
'pos'][$totalarray[
'nbfield']] =
'p.total_ht';
1145 $totalarray[
'val'][
'p.total_ht'] += $obj->total_ht;
1148 if (!empty($arrayfields[
'p.total_vat'][
'checked']))
1150 print
'<td class="nowrap right">'.price($obj->total_vat).
"</td>\n";
1151 if (!$i) $totalarray[
'nbfield']++;
1152 if (!$i) $totalarray[
'pos'][$totalarray[
'nbfield']] =
'p.total_vat';
1153 $totalarray[
'val'][
'p.total_vat'] += $obj->total_vat;
1156 if (!empty($arrayfields[
'p.total_ttc'][
'checked']))
1158 print
'<td class="nowrap right">'.price($obj->total_ttc).
"</td>\n";
1159 if (!$i) $totalarray[
'nbfield']++;
1160 if (!$i) $totalarray[
'pos'][$totalarray[
'nbfield']] =
'p.total_ttc';
1161 $totalarray[
'val'][
'p.total_ttc'] += $obj->total_ttc;
1164 if (!empty($arrayfields[
'p.total_ht_invoiced'][
'checked']))
1166 print
'<td class="nowrap right">'.price($totalInvoicedHT).
"</td>\n";
1167 if (!$i) $totalarray[
'nbfield']++;
1168 if (!$i) $totalarray[
'pos'][$totalarray[
'nbfield']] =
'p.total_ht_invoiced';
1169 $totalarray[
'val'][
'p.total_ht_invoiced'] += $totalInvoicedHT;
1172 if (!empty($arrayfields[
'p.total_invoiced'][
'checked']))
1174 print
'<td class="nowrap right">'.price($totalInvoicedTTC).
"</td>\n";
1175 if (!$i) $totalarray[
'nbfield']++;
1176 if (!$i) $totalarray[
'pos'][$totalarray[
'nbfield']] =
'p.total_invoiced';
1177 $totalarray[
'val'][
'p.total_invoiced'] += $totalInvoicedTTC;
1181 if (!empty($arrayfields[
'p.multicurrency_code'][
'checked']))
1183 print
'<td class="nowrap">'.$obj->multicurrency_code.
' - '.$langs->trans(
'Currency'.$obj->multicurrency_code).
"</td>\n";
1184 if (!$i) $totalarray[
'nbfield']++;
1188 if (!empty($arrayfields[
'p.multicurrency_tx'][
'checked']))
1190 print
'<td class="nowrap">';
1191 $form->form_multicurrency_rate(
$_SERVER[
'PHP_SELF'].
'?id='.$obj->rowid, $obj->multicurrency_tx,
'none', $obj->multicurrency_code);
1193 if (!$i) $totalarray[
'nbfield']++;
1196 if (!empty($arrayfields[
'p.multicurrency_total_ht'][
'checked']))
1198 print
'<td class="right nowrap">'.price($obj->multicurrency_total_ht).
"</td>\n";
1199 if (!$i) $totalarray[
'nbfield']++;
1202 if (!empty($arrayfields[
'p.multicurrency_total_vat'][
'checked']))
1204 print
'<td class="right nowrap">'.price($obj->multicurrency_total_vat).
"</td>\n";
1205 if (!$i) $totalarray[
'nbfield']++;
1208 if (!empty($arrayfields[
'p.multicurrency_total_ttc'][
'checked']))
1210 print
'<td class="right nowrap">'.price($obj->multicurrency_total_ttc).
"</td>\n";
1211 if (!$i) $totalarray[
'nbfield']++;
1214 if (!empty($arrayfields[
'p.multicurrency_total_ht_invoiced'][
'checked']))
1216 print
'<td class="nowrap right">'.price($multicurrency_totalInvoicedHT).
"</td>\n";
1217 if (!$i) $totalarray[
'nbfield']++;
1220 if (!empty($arrayfields[
'p.multicurrency_total_invoiced'][
'checked']))
1222 print
'<td class="nowrap right">'.price($multicurrency_totalInvoicedTTC).
"</td>\n";
1223 if (!$i) $totalarray[
'nbfield']++;
1226 $userstatic->id = $obj->fk_user_author;
1227 $userstatic->login = $obj->login;
1230 if (!empty($arrayfields[
'u.login'][
'checked']))
1232 print
'<td class="center nowraponall">';
1233 if ($userstatic->id) print $userstatic->getLoginUrl(1);
1235 if (!$i) $totalarray[
'nbfield']++;
1238 if (!empty($arrayfields[
'sale_representative'][
'checked']))
1242 if ($obj->socid > 0)
1244 $listsalesrepresentatives = $companystatic->getSalesRepresentatives($user);
1246 $nbofsalesrepresentative = count($listsalesrepresentatives);
1247 if ($nbofsalesrepresentative > 3)
1249 print $nbofsalesrepresentative;
1250 } elseif ($nbofsalesrepresentative > 0)
1252 $userstatic =
new User($db);
1254 foreach ($listsalesrepresentatives as $val)
1256 $userstatic->id = $val[
'id'];
1257 $userstatic->lastname = $val[
'lastname'];
1258 $userstatic->firstname = $val[
'firstname'];
1259 $userstatic->email = $val[
'email'];
1260 $userstatic->statut = $val[
'statut'];
1261 $userstatic->entity = $val[
'entity'];
1262 $userstatic->photo = $val[
'photo'];
1265 print $userstatic->getNomUrl(-2);
1267 if ($j < $nbofsalesrepresentative) print
' ';
1276 if (!$i) $totalarray[
'nbfield']++;
1280 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_print_fields.tpl.php';
1282 $parameters = array(
'arrayfields'=>$arrayfields,
'obj'=>$obj,
'i'=>$i,
'totalarray'=>&$totalarray);
1283 $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters);
1284 print $hookmanager->resPrint;
1286 if (!empty($arrayfields[
'p.datec'][
'checked']))
1288 print
'<td align="center" class="nowrap">';
1289 print
dol_print_date($db->jdate($obj->date_creation),
'dayhour',
'tzuser');
1291 if (!$i) $totalarray[
'nbfield']++;
1294 if (!empty($arrayfields[
'p.tms'][
'checked']))
1296 print
'<td align="center" class="nowrap">';
1297 print
dol_print_date($db->jdate($obj->date_update),
'dayhour',
'tzuser');
1299 if (!$i) $totalarray[
'nbfield']++;
1302 if (!empty($arrayfields[
'p.date_cloture'][
'checked']))
1304 print
'<td align="center" class="nowrap">';
1305 print
dol_print_date($db->jdate($obj->date_cloture),
'dayhour',
'tzuser');
1307 if (!$i) $totalarray[
'nbfield']++;
1310 if (!empty($arrayfields[
'p.note_public'][
'checked']))
1312 print
'<td class="center">';
1315 if (!$i) $totalarray[
'nbfield']++;
1318 if (!empty($arrayfields[
'p.note_private'][
'checked']))
1320 print
'<td class="center">';
1323 if (!$i) $totalarray[
'nbfield']++;
1326 if (!empty($arrayfields[
'p.fk_statut'][
'checked']))
1328 print
'<td class="nowrap right">'.$objectstatic->getLibStatut(5).
'</td>';
1329 if (!$i) $totalarray[
'nbfield']++;
1332 print
'<td class="nowrap" align="center">';
1333 if ($massactionbutton || $massaction)
1336 if (in_array($obj->rowid, $arrayofselected)) $selected = 1;
1337 print
'<input id="cb'.$obj->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
1340 if (!$i) $totalarray[
'nbfield']++;
1348 include DOL_DOCUMENT_ROOT.
'/core/tpl/list_print_total.tpl.php';
1352 $parameters = array(
'arrayfields'=>$arrayfields,
'sql'=>$sql);
1353 $reshook = $hookmanager->executeHooks(
'printFieldListFooter', $parameters);
1354 print $hookmanager->resPrint;
1356 print
'</table>'.
"\n";
1357 print
'</div>'.
"\n";
1359 print
'</form>'.
"\n";
1361 $hidegeneratedfilelistifempty = 1;
1362 if ($massaction ==
'builddoc' || $action ==
'remove_file' || $show_files) $hidegeneratedfilelistifempty = 0;
1365 $urlsource =
$_SERVER[
'PHP_SELF'].
'?sortfield='.$sortfield.
'&sortorder='.$sortorder;
1366 $urlsource .= str_replace(
'&',
'&', $param);
1368 $filedir = $diroutputmassaction;
1369 $genallowed = $user->rights->propal->lire;
1370 $delallowed = $user->rights->propal->creer;
1372 print $formfile->showdocuments(
'massfilesarea_proposals',
'', $filedir, $urlsource, 0, $delallowed,
'', 1, 1, 0, 48, 1, $param, $title,
'',
'',
'', null, $hidegeneratedfilelistifempty);
GETPOST($paramname, $check= 'alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm= 'auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
dolGetButtonTitle($label, $helpText= '', $iconClass= 'fa fa-file', $url= '', $id= '', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
dol_now($mode= 'auto')
Return date for now.
Class to manage Dolibarr users.
setEventMessage($mesgs, $style= 'mesgs')
Set event message in dol_events session object.
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete= 'resolve')
Convert a html select field into an ajax combobox.
img_warning($titlealt= 'default', $moreatt= '', $morecss= 'pictowarning')
Show warning logo.
setEventMessages($mesg, $mesgs, $style= 'mesgs', $messagekey= '')
Set event messages in dol_events session object.
print_barre_liste($titre, $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.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname.
Class to manage third parties objects (customers, suppliers, prospects...)
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
Class to manage projects.
restrictedArea($user, $features, $objectid=0, $tableandshare= '', $feature2= '', $dbt_keyfield= 'fk_soc', $dbt_select= 'rowid', $isdraft=0)
Check permissions of a user to show a page and an object.
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...
dol_sanitizeFileName($str, $newstr= '_', $unaccent=1)
Clean a string to use it as a file name.
print $_SERVER["PHP_SELF"]
Edit parameters.
const TYPE_DEPOSIT
Deposit invoice.
print
Draft customers invoices.
dol_print_date($time, $format= '', $tzoutput= 'auto', $outputlangs= '', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
if(!empty($conf->facture->enabled)&&$user->rights->facture->lire) if((!empty($conf->fournisseur->enabled)&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)||!empty($conf->supplier_invoice->enabled))&&$user->rights->fournisseur->facture->lire) if(!empty($conf->don->enabled)&&$user->rights->don->lire) if(!empty($conf->tax->enabled)&&$user->rights->tax->charges->lire) if(!empty($conf->facture->enabled)&&!empty($conf->commande->enabled)&&$user->rights->commande->lire &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) if(!empty($conf->facture->enabled)&&$user->rights->facture->lire) if((!empty($conf->fournisseur->enabled)&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)||!empty($conf->supplier_invoice->enabled))&&$user->rights->fournisseur->facture->lire) $resql
Social contributions to pay.
dol_print_error($db= '', $error= '', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
const STATUS_VALIDATED
Validated status.
Class to manage invoices.
if(!defined('CSRFCHECK_WITH_TOKEN')) define('CSRFCHECK_WITH_TOKEN'
Draft customers invoices.
getCountry($searchkey, $withcode= '', $dbtouse=0, $outputlangs= '', $entconv=1, $searchlabel= '')
Return country label, code or id from an id, code or label.
Class to manage proposals.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $keepmoretags= '', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields...