dolibarr 20.0.5
list.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005-2010 Regis Houssin <regis.houssin@capnetworks.com>
5 * Copyright (C) 2016 Ferran Marcet <fmarcet@2byte.es>
6 * Copyright (C) 2023-2024 Alexandre Spangaro <alexandre@inovea-conseil.com>
7 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
8 * Copyright (C) 2024 Benjamin Falière <benjamin.faliere@altairis.fr>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 */
23
30// Load Dolibarr environment
31require '../main.inc.php';
32require_once DOL_DOCUMENT_ROOT.'/reception/class/reception.class.php';
33require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
34require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php';
35require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';
36require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
37require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
38require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
39require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
40
41$langs->loadLangs(array("sendings", "receptions", "deliveries", 'companies', 'bills', 'orders'));
42
43$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'shipmentlist'; // To manage different context of search
44
45$socid = GETPOSTINT('socid');
46
47$action = GETPOST('action', 'alpha');
48$massaction = GETPOST('massaction', 'alpha');
49$toselect = GETPOST('toselect', 'array');
50$optioncss = GETPOST('optioncss', 'alpha');
51$mode = GETPOST('mode', 'alpha');
52
53
54$search_ref_rcp = GETPOST("search_ref_rcp");
55$search_ref_liv = GETPOST('search_ref_liv');
56$search_ref_supplier = GETPOST('search_ref_supplier');
57$search_company = GETPOST("search_company");
58$search_town = GETPOST('search_town', 'alpha');
59$search_zip = GETPOST('search_zip', 'alpha');
60$search_state = GETPOST("search_state");
61$search_country = GETPOST("search_country", 'aZ09');
62$search_type_thirdparty = GETPOST("search_type_thirdparty", 'intcomma');
63$search_date_delivery_startday = GETPOSTINT('search_date_delivery_startday');
64$search_date_delivery_startmonth = GETPOSTINT('search_date_delivery_startmonth');
65$search_date_delivery_startyear = GETPOSTINT('search_date_delivery_startyear');
66$search_date_delivery_endday = GETPOSTINT('search_date_delivery_endday');
67$search_date_delivery_endmonth = GETPOSTINT('search_date_delivery_endmonth');
68$search_date_delivery_endyear = GETPOSTINT('search_date_delivery_endyear');
69$search_date_delivery_start = dol_mktime(0, 0, 0, $search_date_delivery_startmonth, $search_date_delivery_startday, $search_date_delivery_startyear); // Use tzserver
70$search_date_delivery_end = dol_mktime(23, 59, 59, $search_date_delivery_endmonth, $search_date_delivery_endday, $search_date_delivery_endyear);
71$search_date_create_startday = GETPOSTINT('search_date_create_startday');
72$search_date_create_startmonth = GETPOSTINT('search_date_create_startmonth');
73$search_date_create_startyear = GETPOSTINT('search_date_create_startyear');
74$search_date_create_endday = GETPOSTINT('search_date_create_endday');
75$search_date_create_endmonth = GETPOSTINT('search_date_create_endmonth');
76$search_date_create_endyear = GETPOSTINT('search_date_create_endyear');
77$search_date_create_start = dol_mktime(0, 0, 0, $search_date_create_startmonth, $search_date_create_startday, $search_date_create_startyear); // Use tzserver
78$search_date_create_end = dol_mktime(23, 59, 59, $search_date_create_endmonth, $search_date_create_endday, $search_date_create_endyear);
79$search_billed = GETPOST("search_billed", 'intcomma');
80$search_status = GETPOST('search_status', 'intcomma');
81$search_all = GETPOST('search_all', 'alphanohtml') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml');
82
83$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit;
84$sortfield = GETPOST('sortfield', 'aZ09comma');
85$sortorder = GETPOST('sortorder', 'aZ09comma');
86$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
87if (!$sortfield) {
88 $sortfield = "e.ref";
89}
90if (!$sortorder) {
91 $sortorder = "DESC";
92}
93if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
94 // If $page is not defined, or '' or -1 or if we click on clear filters
95 $page = 0;
96}
97$offset = $limit * $page;
98$pageprev = $page - 1;
99$pagenext = $page + 1;
100
101$diroutputmassaction = $conf->reception->multidir_output[$conf->entity].'/temp/massgeneration/'.$user->id;
102$object = new Reception($db);
103
104// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
105$hookmanager->initHooks(array('receptionlist'));
106$extrafields = new ExtraFields($db);
107
108// Fetch optionals attributes and labels
109$extrafields->fetch_name_optionals_label($object->table_element);
110$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
111
112// List of fields to search into when doing a "search in all"
113$fieldstosearchall = array(
114 'e.ref' => "Ref",
115 'e.ref_supplier'=>"RefSupplier",
116 's.nom' => "ThirdParty",
117 'e.note_public' => 'NotePublic',
118);
119if (empty($user->socid)) {
120 $fieldstosearchall["e.note_private"] = "NotePrivate";
121}
122
123$checkedtypetiers = 0;
124$arrayfields = array(
125 'e.ref' => array('label' => $langs->trans("Ref"), 'checked' => 1),
126 'e.ref_supplier' => array('label' => $langs->trans("RefSupplier"), 'checked' => 1),
127 's.nom' => array('label' => $langs->trans("ThirdParty"), 'checked' => 1),
128 's.town' => array('label' => $langs->trans("Town"), 'checked' => 1),
129 's.zip' => array('label' => $langs->trans("Zip"), 'checked' => 1),
130 'state.nom' => array('label' => $langs->trans("StateShort"), 'checked' => 0),
131 'country.code_iso' => array('label' => $langs->trans("Country"), 'checked' => 0),
132 'typent.code' => array('label' => $langs->trans("ThirdPartyType"), 'checked' => $checkedtypetiers),
133 'e.date_delivery' => array('label' => $langs->trans("DateDeliveryPlanned"), 'checked' => 1),
134 'e.datec' => array('label' => $langs->trans("DateCreation"), 'checked' => 0, 'position' => 500),
135 'e.tms' => array('label' => $langs->trans("DateModificationShort"), 'checked' => 0, 'position' => 500),
136 'e.fk_statut' => array('label' => $langs->trans("Status"), 'checked' => 1, 'position' => 1000),
137 'e.billed' => array('label' => $langs->trans("Billed"), 'checked' => 1, 'position' => 1000, 'enabled' => 'getDolGlobalString("WORKFLOW_BILL_ON_RECEPTION") !== "0"')
138);
139
140// Extra fields
141include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php';
142
143$object->fields = dol_sort_array($object->fields, 'position');
144$arrayfields = dol_sort_array($arrayfields, 'position');
145'@phan-var-force array<string,array{label:string,checked?:int<0,1>,position?:int,help?:string}> $arrayfields'; // dol_sort_array looses type for Phan
146
147$error = 0;
148
149// Security check
150$receptionid = GETPOSTINT('id');
151if ($user->socid) {
152 $socid = $user->socid;
153}
154$result = restrictedArea($user, 'reception', $receptionid, '');
155
156
157/*
158 * Actions
159 */
160
161if (GETPOST('cancel', 'alpha')) {
162 $action = 'list';
163 $massaction = '';
164}
165if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_createbills') {
166 $massaction = '';
167}
168
169$parameters = array('socid' => $socid, 'arrayfields' => &$arrayfields);
170$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
171if ($reshook < 0) {
172 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
173}
174
175include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
176
177// Purge search criteria
178if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All tests are required to be compatible with all browsers
179 $search_ref_supplier = '';
180 $search_ref_rcp = '';
181 $search_ref_liv = '';
182 $search_company = '';
183 $search_town = '';
184 $search_zip = "";
185 $search_state = "";
186 $search_country = '';
187 $search_type_thirdparty = '';
188 $search_date_delivery_startday = '';
189 $search_date_delivery_startmonth = '';
190 $search_date_delivery_startyear = '';
191 $search_date_delivery_endday = '';
192 $search_date_delivery_endmonth = '';
193 $search_date_delivery_endyear = '';
194 $search_date_delivery_start = '';
195 $search_date_delivery_end = '';
196 $search_date_create_startday = '';
197 $search_date_create_startmonth = '';
198 $search_date_create_startyear = '';
199 $search_date_create_endday = '';
200 $search_date_create_endmonth = '';
201 $search_date_create_endyear = '';
202 $search_date_create_start = '';
203 $search_date_create_end = '';
204 $search_billed = '';
205 $search_status = '';
206 $toselect = array();
207 $search_array_options = array();
208}
209
210if (empty($reshook)) {
211 // Mass actions
212 $objectclass = 'Reception';
213 $objectlabel = 'Receptions';
214 $permissiontoread = $user->hasRight('reception', 'lire');
215 $permissiontoadd = $user->hasRight('reception', 'creer');
216 $permissiontodelete = $user->hasRight('reception', 'supprimer');
217 $uploaddir = $conf->reception->multidir_output[$conf->entity];
218 include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
219
220 if ($massaction == 'confirm_createbills' && ($user->hasRight("fournisseur", "facture", "creer") || $user->hasRight("supplier_invoice", "creer"))) {
221 $receptions = GETPOST('toselect', 'array');
222 $createbills_onebythird = GETPOSTINT('createbills_onebythird');
223 $validate_invoices = GETPOSTINT('validate_invoices');
224
225 $errors = array();
226
227 $TFact = array();
228 $TFactThird = array();
229 $TFactThirdNbLines = array();
230
231 $nb_bills_created = 0;
232 $lastid = 0;
233 $lastref = '';
234
235 $db->begin();
236
237 //sort ids to keep order if one bill per third
238 sort($receptions);
239 foreach ($receptions as $id_reception) {
240 $rcp = new Reception($db);
241 // We not allow invoice reception that are in draft status
242 if ($rcp->fetch($id_reception) <= 0 || $rcp->statut == $rcp::STATUS_DRAFT) {
243 $errors[] = $langs->trans('StatusOfRefMustBe', $rcp->ref, $langs->transnoentities("StatusReceptionValidatedShort"));
244 $error++;
245 continue;
246 }
247
248 $objecttmp = new FactureFournisseur($db);
249 if (!empty($createbills_onebythird) && !empty($TFactThird[$rcp->socid])) {
250 // If option "one bill per third" is set, and an invoice for this thirdparty was already created, we reuse it.
251 $objecttmp = $TFactThird[$rcp->socid];
252
253 // Add all links of this new reception to the existing invoice
254 $objecttmp->fetchObjectLinked();
255 $rcp->fetchObjectLinked();
256 if (count($rcp->linkedObjectsIds['order_supplier']) > 0) {
257 foreach ($rcp->linkedObjectsIds['order_supplier'] as $key => $value) {
258 if (empty($objecttmp->linkedObjectsIds['order_supplier']) || !in_array($value, $objecttmp->linkedObjectsIds['order_supplier'])) { //Don't try to link if already linked
259 $objecttmp->add_object_linked('order_supplier', $value); // add supplier order linked object
260 }
261 }
262 }
263 } else {
264 $cond_reglement_id = 0;
265 $mode_reglement_id = 0;
266 $fk_account = 0;
267 $transport_mode_id = 0;
268 $multicurrency_code = null;
269
270 if (!empty($rcp->cond_reglement_id)) {
271 $cond_reglement_id = $rcp->cond_reglement_id;
272 }
273 if (!empty($rcp->mode_reglement_id)) {
274 $mode_reglement_id = $rcp->mode_reglement_id;
275 }
276 if (!empty($rcp->fk_account)) {
277 $fk_account = $rcp->fk_account;
278 }
279 if (!empty($rcp->transport_mode_id)) {
280 $transport_mode_id = $rcp->transport_mode_id;
281 }
282 if (!empty($rcp->multicurrency_code)) {
283 $multicurrency_code = $rcp->multicurrency_code;
284 }
285
286 if (empty($cond_reglement_id)
287 || empty($mode_reglement_id)
288 || empty($fk_account)
289 || empty($transport_mode_id)
290 || empty($multicurrency_code)
291 ) {
292 if (!isset($rcp->supplier_order)) {
293 $rcp->fetch_origin();
294 }
295
296 // try to get from source of reception (supplier order)
297 if (!empty($rcp->origin_object)) {
298 $supplierOrder = $rcp->origin_object;
299 if (empty($cond_reglement_id) && !empty($supplierOrder->cond_reglement_id)) {
300 $cond_reglement_id = $supplierOrder->cond_reglement_id;
301 }
302 if (empty($mode_reglement_id) && !empty($supplierOrder->mode_reglement_id)) {
303 $mode_reglement_id = $supplierOrder->mode_reglement_id;
304 }
305 if (empty($fk_account) && !empty($supplierOrder->fk_account)) {
306 $fk_account = $supplierOrder->fk_account;
307 }
308 if (empty($transport_mode_id) && !empty($supplierOrder->transport_mode_id)) {
309 $transport_mode_id = $supplierOrder->transport_mode_id;
310 }
311 if (empty($multicurrency_code) && !empty($supplierOrder->multicurrency_code)) {
312 $multicurrency_code = $supplierOrder->multicurrency_code;
313 }
314 }
315
316 // try get from third-party of reception
317 if (!empty($rcp->thirdparty)) {
318 $soc = $rcp->thirdparty;
319 if (empty($cond_reglement_id) && !empty($soc->cond_reglement_supplier_id)) {
320 $cond_reglement_id = $soc->cond_reglement_supplier_id;
321 }
322 if (empty($mode_reglement_id) && !empty($soc->mode_reglement_supplier_id)) {
323 $mode_reglement_id = $soc->mode_reglement_supplier_id;
324 }
325 if (empty($fk_account) && !empty($soc->fk_account)) {
326 $fk_account = $soc->fk_account;
327 }
328 if (empty($transport_mode_id) && !empty($soc->transport_mode_id)) {
329 $transport_mode_id = $soc->transport_mode_id;
330 }
331 if (empty($multicurrency_code) && !empty($soc->multicurrency_code)) {
332 $multicurrency_code = $soc->multicurrency_code;
333 }
334 }
335 }
336
337 // If we want one invoice per reception or if there is no first invoice yet for this thirdparty.
338 $objecttmp->socid = $rcp->socid;
339 $objecttmp->type = $objecttmp::TYPE_STANDARD;
340 $objecttmp->cond_reglement_id = $cond_reglement_id;
341 $objecttmp->mode_reglement_id = $mode_reglement_id;
342 $objecttmp->fk_account = $fk_account;
343 $objecttmp->transport_mode_id = $transport_mode_id;
344 $objecttmp->multicurrency_code = $multicurrency_code;
345
346 // if the VAT reverse-charge is activated by default in supplier card to resume the information
347 $objecttmp->vat_reverse_charge = $soc->vat_reverse_charge;
348
349 $objecttmp->fk_project = $rcp->fk_project;
350 //$objecttmp->multicurrency_code = $rcp->multicurrency_code;
351 if (empty($createbills_onebythird)) {
352 $objecttmp->ref_supplier = $rcp->ref;
353 } else {
354 // Set a unique value for the invoice for the n reception
355 $objecttmp->ref_supplier = $langs->trans("Reception").' '.dol_print_date(dol_now(), 'dayhourlog').'-'.$rcp->socid;
356 }
357
358 $datefacture = dol_mktime(12, 0, 0, GETPOSTINT('remonth'), GETPOSTINT('reday'), GETPOSTINT('reyear'));
359 if (empty($datefacture)) {
360 $datefacture = dol_now();
361 }
362
363 $objecttmp->date = $datefacture;
364 $objecttmp->origin = 'reception';
365 $objecttmp->origin_id = $id_reception;
366
367 // Auto calculation of date due if not filled by user
368 if (empty($objecttmp->date_echeance)) {
369 $objecttmp->date_echeance = $objecttmp->calculate_date_lim_reglement();
370 }
371
372 $objecttmp->array_options = $rcp->array_options; // Copy extrafields
373
374 // Set $objecttmp->linked_objects with all links order_supplier existing on reception, so same links will be added to the generated supplier invoice
375 $rcp->fetchObjectLinked();
376 if (count($rcp->linkedObjectsIds['order_supplier']) > 0) {
377 foreach ($rcp->linkedObjectsIds['order_supplier'] as $key => $value) {
378 $objecttmp->linked_objects['order_supplier'] = $value;
379 }
380 }
381
382 $res = $objecttmp->create($user); // This should create the supplier invoice + links into $objecttmp->linked_objects + add a link to ->origin_id
383
384 //var_dump($objecttmp->error);exit;
385 if ($res > 0) {
386 $nb_bills_created++;
387 $lastref = $objecttmp->ref;
388 $lastid = $objecttmp->id;
389
390 $TFactThird[$rcp->socid] = $objecttmp;
391 $TFactThirdNbLines[$rcp->socid] = 0; //init nblines to have lines ordered by expedition and rang
392 } else {
393 $langs->load("errors");
394 $errors[] = $rcp->ref.' : '.$langs->trans($objecttmp->error);
395 $error++;
396 }
397 }
398
399 if ($objecttmp->id > 0) {
400 if (!isset($rcp->origin_object)) {
401 $rcp->fetch_origin();
402 }
403 if ($rcp->origin_object->multicurrency_code != $objecttmp->multicurrency_code) {
404 $errors[] = $rcp->ref." : ".$langs->trans("ReceptionMustBeInTheSameCurrencyThanOther");
405 }
406
407 $res = $objecttmp->add_object_linked($objecttmp->origin, $id_reception);
408
409 if ($res == 0) {
410 $errors[] = $objecttmp->error;
411 $error++;
412 }
413
414 if (!$error) {
415 $lines = $rcp->lines;
416 if (empty($lines) && method_exists($rcp, 'fetch_lines')) {
417 $rcp->fetch_lines();
418 $lines = $rcp->lines;
419 }
420
421 $fk_parent_line = 0;
422 $num = count($lines);
423
424 for ($i = 0; $i < $num; $i++) {
425 $desc = ($lines[$i]->desc ? $lines[$i]->desc : $lines[$i]->libelle);
426 // If we build one invoice for several reception, we must put the ref of reception on the invoice line
427 if (!empty($createbills_onebythird)) {
428 $desc = dol_concatdesc($desc, $langs->trans("Reception").' '.$rcp->ref.' - '.dol_print_date($rcp->date, 'day'));
429 }
430
431 if ($lines[$i]->subprice < 0) {
432 // Negative line, we create a discount line
433 $discount = new DiscountAbsolute($db);
434 $discount->fk_soc = $objecttmp->socid;
435 $discount->socid = $objecttmp->socid;
436 $discount->amount_ht = abs($lines[$i]->total_ht);
437 $discount->amount_tva = abs($lines[$i]->total_tva);
438 $discount->amount_ttc = abs($lines[$i]->total_ttc);
439 $discount->tva_tx = $lines[$i]->tva_tx;
440 $discount->fk_user = $user->id;
441 $discount->description = $desc;
442 $discountid = $discount->create($user);
443 if ($discountid > 0) {
444 $result = $objecttmp->insert_discount($discountid);
445 //$result=$discount->link_to_invoice($lineid,$id);
446 } else {
447 setEventMessages($discount->error, $discount->errors, 'errors');
448 $error++;
449 break;
450 }
451 } else {
452 // Positive line
453 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
454 // Date start
455 $date_start = false;
456 if ($lines[$i]->date_debut_prevue) {
457 $date_start = $lines[$i]->date_debut_prevue;
458 }
459 if ($lines[$i]->date_debut_reel) {
460 $date_start = $lines[$i]->date_debut_reel;
461 }
462 if ($lines[$i]->date_start) {
463 $date_start = $lines[$i]->date_start;
464 }
465 //Date end
466 $date_end = false;
467 if ($lines[$i]->date_fin_prevue) {
468 $date_end = $lines[$i]->date_fin_prevue;
469 }
470 if ($lines[$i]->date_fin_reel) {
471 $date_end = $lines[$i]->date_fin_reel;
472 }
473 if ($lines[$i]->date_end) {
474 $date_end = $lines[$i]->date_end;
475 }
476 // Reset fk_parent_line for no child products and special product
477 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
478 $fk_parent_line = 0;
479 }
480
481 // Extrafields
482 if (method_exists($lines[$i], 'fetch_optionals')) {
483 $lines[$i]->fetch_optionals();
484 $array_options = $lines[$i]->array_options;
485 }
486
487 $objecttmp->context['createfromclone'] = 'createfromclone';
488
489 $rang = $i;
490 //there may already be rows from previous receptions
491 if (!empty($createbills_onebythird)) {
492 $rang = $TFactThirdNbLines[$rcp->socid];
493 }
494
495 $result = $objecttmp->addline(
496 $desc,
497 $lines[$i]->subprice,
498 $lines[$i]->tva_tx,
499 $lines[$i]->localtax1_tx,
500 $lines[$i]->localtax2_tx,
501 $lines[$i]->qty,
502 $lines[$i]->fk_product,
503 $lines[$i]->remise_percent,
504 $date_start,
505 $date_end,
506 0,
507 $lines[$i]->info_bits,
508 'HT',
509 $product_type,
510 $rang,
511 false,
512 array(),
513 null,
514 $lines[$i]->rowid,
515 $lines[$i]->multicurrency_subprice,
516 $lines[$i]->ref_supplier
517 );
518
519 $rcp->add_object_linked('facture_fourn_det', $result);
520
521 if ($result > 0) {
522 $lineid = $result;
523 if (!empty($createbills_onebythird)) { //increment rang to keep order
524 $TFactThirdNbLines[$rcp->socid]++;
525 }
526 } else {
527 $lineid = 0;
528 $error++;
529 break;
530 }
531 // Defined the new fk_parent_line
532 if ($result > 0 && $lines[$i]->product_type == 9) {
533 $fk_parent_line = $result;
534 }
535 }
536 }
537 }
538 }
539
540 //$rcp->classifyBilled($user); // Disabled. This behavior must be set or not using the workflow module.
541
542 if (!empty($createbills_onebythird) && empty($TFactThird[$rcp->socid])) {
543 $TFactThird[$rcp->socid] = $objecttmp;
544 } else {
545 $TFact[$objecttmp->id] = $objecttmp;
546 }
547 }
548
549 // Build doc with all invoices
550 $TAllFact = empty($createbills_onebythird) ? $TFact : $TFactThird;
551 $toselect = array();
552
553 if (!$error && $validate_invoices) {
554 $massaction = $action = 'builddoc';
555 foreach ($TAllFact as &$objecttmp) {
556 $result = $objecttmp->validate($user);
557 if ($result <= 0) {
558 $error++;
559 setEventMessages($objecttmp->error, $objecttmp->errors, 'errors');
560 break;
561 }
562
563 $id = $objecttmp->id; // For builddoc action
564 $lastref = $objecttmp->ref; // generated ref
565 $object = $objecttmp;
566
567 // Fac builddoc
568 $donotredirect = 1;
569 $upload_dir = $conf->fournisseur->facture->dir_output;
570 $permissiontoadd = ($user->hasRight('fournisseur', 'facture', 'creer') || $user->hasRight('supplier_invoice', 'creer'));
571
572 // Call action to build doc
573 $savobject = $object;
574 $object = $objecttmp;
575 include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
576 $object = $savobject;
577 }
578
579 $massaction = $action = 'confirm_createbills';
580 }
581
582 if (!$error) {
583 $db->commit();
584
585 if ($nb_bills_created == 1) {
586 $texttoshow = $langs->trans('BillXCreated', '{s1}');
587 $texttoshow = str_replace('{s1}', '<a href="'.DOL_URL_ROOT.'/fourn/facture/card.php?id='.urlencode((string) ($lastid)).'">'.$lastref.'</a>', $texttoshow);
588 setEventMessages($texttoshow, null, 'mesgs');
589 } else {
590 setEventMessages($langs->trans('BillCreated', $nb_bills_created), null, 'mesgs');
591 }
592 } else {
593 $db->rollback();
594
595 $action = 'create';
596 $_GET["origin"] = $_POST["origin"]; // Keep this ?
597 $_GET["originid"] = $_POST["originid"]; // Keep this ?
598 setEventMessages($object->error, $errors, 'errors');
599 $error++;
600 }
601 }
602}
603
604
605/*
606 * View
607 */
608
609$now = dol_now();
610
611$form = new Form($db);
612$companystatic = new Societe($db);
613$reception = new Reception($db);
614$formcompany = new FormCompany($db);
615$formfile = new FormFile($db);
616
617
618$helpurl = 'EN:Module_Receptions|FR:Module_Receptions|ES:M&oacute;dulo_Receptiones';
619llxHeader('', $langs->trans('ListOfReceptions'), $helpurl, '', 0, 0, '', '', '', 'bodyforlist mod-reception page-list');
620
621$sql = "SELECT e.rowid, e.ref, e.ref_supplier, e.date_reception as date_reception, e.date_delivery as delivery_date, l.date_delivery as date_reception2, e.fk_statut as status, e.billed,";
622$sql .= " s.rowid as socid, s.nom as name, s.town, s.zip, s.fk_pays, s.client, s.code_client,";
623$sql .= " typent.code as typent_code,";
624$sql .= " state.code_departement as state_code, state.nom as state_name,";
625$sql .= " e.date_creation as date_creation, e.tms as date_modification";
626// Add fields from extrafields
627if (!empty($extrafields->attributes[$object->table_element]['label'])) {
628 foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
629 $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key." as options_".$key : '');
630 }
631}
632// Add fields from hooks
633$parameters = array();
634$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook
635$sql .= $hookmanager->resPrint;
636
637$sqlfields = $sql; // $sql fields to remove for count total
638
639$sql .= " FROM ".MAIN_DB_PREFIX."reception as e";
640if (!empty($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) {
641 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (e.rowid = ef.fk_object)";
642}
643$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = e.fk_soc";
644$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = s.fk_pays)";
645$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_typent as typent on (typent.id = s.fk_typent)";
646$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = s.fk_departement)";
647$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."element_element as ee ON e.rowid = ee.fk_source AND ee.sourcetype = 'reception' AND ee.targettype = 'delivery'";
648$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."delivery as l ON l.rowid = ee.fk_target";
649// Add table from hooks
650$parameters = array();
651$reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object); // Note that $action and $object may have been modified by hook
652$sql .= $hookmanager->resPrint;
653$sql .= " WHERE e.entity IN (".getEntity('reception').")";
654if ($socid) {
655 $sql .= " AND e.fk_soc = ".((int) $socid);
656}
657if ($search_status != '' && $search_status >= 0) {
658 $sql .= " AND e.fk_statut = ".((int) $search_status);
659}
660if ($search_billed != '' && $search_billed >= 0) {
661 $sql .= ' AND e.billed = '.((int) $search_billed);
662}
663if ($search_town) {
664 $sql .= natural_search('s.town', $search_town);
665}
666if ($search_zip) {
667 $sql .= natural_search("s.zip", $search_zip);
668}
669if ($search_state) {
670 $sql .= natural_search("state.nom", $search_state);
671}
672if ($search_country) {
673 $sql .= " AND s.fk_pays IN (".$db->sanitize($search_country).')';
674}
675if ($search_type_thirdparty != '' && $search_type_thirdparty > 0) {
676 $sql .= " AND s.fk_typent IN (".$db->sanitize($search_type_thirdparty).')';
677}
678if ($search_date_delivery_start) {
679 $sql .= " AND e.date_delivery >= '".$db->idate($search_date_delivery_start)."'";
680}
681if ($search_date_delivery_end) {
682 $sql .= " AND e.date_delivery <= '".$db->idate($search_date_delivery_end)."'";
683}
684if ($search_date_create_start) {
685 $sql .= " AND e.date_creation >= '".$db->idate($search_date_create_start)."'";
686}
687if ($search_date_create_end) {
688 $sql .= " AND e.date_creation <= '".$db->idate($search_date_create_end)."'";
689}
690if ($search_ref_rcp) {
691 $sql .= natural_search('e.ref', $search_ref_rcp);
692}
693if ($search_ref_liv) {
694 $sql .= natural_search('l.ref', $search_ref_liv);
695}
696if ($search_company) {
697 $sql .= natural_search('s.nom', $search_company);
698}
699if ($search_ref_supplier) {
700 $sql .= natural_search('e.ref_supplier', $search_ref_supplier);
701}
702if ($search_all) {
703 $sql .= natural_search(array_keys($fieldstosearchall), $search_all);
704}
705// Search on sale representative
706/*
707if ($search_sale && $search_sale != '-1') {
708 if ($search_sale == -2) {
709 $sql .= " AND NOT EXISTS (SELECT sc.fk_soc FROM ".MAIN_DB_PREFIX."societe_commerciaux as sc WHERE sc.fk_soc = c.fk_soc)";
710 } elseif ($search_sale > 0) {
711 $sql .= " AND EXISTS (SELECT sc.fk_soc FROM ".MAIN_DB_PREFIX."societe_commerciaux as sc WHERE sc.fk_soc = c.fk_soc AND sc.fk_user = ".((int) $search_sale).")";
712 }
713}
714*/
715// Add where from extra fields
716include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
717// Add where from hooks
718$parameters = array();
719$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook
720$sql .= $hookmanager->resPrint;
721
722// Add HAVING from hooks
723$parameters = array();
724$reshook = $hookmanager->executeHooks('printFieldListHaving', $parameters, $object); // Note that $action and $object may have been modified by hook
725$sql .= empty($hookmanager->resPrint) ? "" : " HAVING 1=1 ".$hookmanager->resPrint;
726
727$nbtotalofrecords = '';
728if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
729 /* The fast and low memory method to get and count full list converts the sql into a sql count */
730 $sqlforcount = preg_replace('/^'.preg_quote($sqlfields, '/').'/', 'SELECT COUNT(*) as nbtotalofrecords', $sql);
731 $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount);
732 $resql = $db->query($sqlforcount);
733 if ($resql) {
734 $objforcount = $db->fetch_object($resql);
735 $nbtotalofrecords = $objforcount->nbtotalofrecords;
736 } else {
737 dol_print_error($db);
738 }
739
740 if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller then paging size (filtering), goto and load page 0
741 $page = 0;
742 $offset = 0;
743 }
744 $db->free($resql);
745}
746
747// Complete request and execute it with limit
748$sql .= $db->order($sortfield, $sortorder);
749if ($limit) {
750 $sql .= $db->plimit($limit + 1, $offset);
751}
752
753//print $sql;
754$resql = $db->query($sql);
755if (!$resql) {
756 dol_print_error($db);
757 exit;
758}
759
760$num = $db->num_rows($resql);
761
762$reception = new Reception($db);
763
764$arrayofselected = is_array($toselect) ? $toselect : array();
765
766$param = '';
767if (!empty($mode)) {
768 $param .= '&mode='.urlencode($mode);
769}
770if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
771 $param .= '&contextpage='.urlencode($contextpage);
772}
773if ($limit > 0 && $limit != $conf->liste_limit) {
774 $param .= '&limit='.((int) $limit);
775}
776if ($search_all) {
777 $param .= "&search_all=".urlencode($search_all);
778}
779if ($search_ref_rcp) {
780 $param .= "&search_ref_rcp=".urlencode($search_ref_rcp);
781}
782if ($search_ref_liv) {
783 $param .= "&search_ref_liv=".urlencode($search_ref_liv);
784}
785if ($search_company) {
786 $param .= "&search_company=".urlencode($search_company);
787}
788if ($optioncss != '') {
789 $param .= '&optioncss='.urlencode($optioncss);
790}
791if ($search_billed != '' && $search_billed >= 0) {
792 $param .= "&search_billed=".urlencode((string) ($search_billed));
793}
794if ($search_town) {
795 $param .= "&search_town=".urlencode($search_town);
796}
797if ($search_zip) {
798 $param .= "&search_zip=".urlencode($search_zip);
799}
800if ($search_state) {
801 $param .= "&search_state=".urlencode($search_state);
802}
803if ($search_status != '') {
804 $param .= "&search_status=".urlencode($search_status);
805}
806if ($search_country) {
807 $param .= "&search_country=".urlencode((string) ($search_country));
808}
809if ($search_type_thirdparty) {
810 $param .= "&search_type_thirdparty=".urlencode((string) ($search_type_thirdparty));
811}
812if ($search_date_delivery_startday) {
813 $param .= '&search_date_delivery_startday='.urlencode((string) ($search_date_delivery_startday));
814}
815if ($search_date_delivery_startmonth) {
816 $param .= '&search_date_delivery_startmonth='.urlencode((string) ($search_date_delivery_startmonth));
817}
818if ($search_date_delivery_startyear) {
819 $param .= '&search_date_delivery_startyear='.urlencode((string) ($search_date_delivery_startyear));
820}
821if ($search_date_delivery_endday) {
822 $param .= '&search_date_delivery_endday='.urlencode((string) ($search_date_delivery_endday));
823}
824if ($search_date_delivery_endmonth) {
825 $param .= '&search_date_delivery_endmonth='.urlencode((string) ($search_date_delivery_endmonth));
826}
827if ($search_date_delivery_endyear) {
828 $param .= '&search_date_delivery_endyear='.urlencode((string) ($search_date_delivery_endyear));
829}
830if ($search_date_create_startday) {
831 $param .= '&search_date_create_startday='.urlencode((string) ($search_date_create_startday));
832}
833if ($search_date_create_startmonth) {
834 $param .= '&search_date_create_startmonth='.urlencode((string) ($search_date_create_startmonth));
835}
836if ($search_date_create_startyear) {
837 $param .= '&search_date_create_startyear='.urlencode((string) ($search_date_create_startyear));
838}
839if ($search_date_create_endday) {
840 $param .= '&search_date_create_endday='.urlencode((string) ($search_date_create_endday));
841}
842if ($search_date_create_endmonth) {
843 $param .= '&search_date_create_endmonth='.urlencode((string) ($search_date_create_endmonth));
844}
845if ($search_date_create_endyear) {
846 $param .= '&search_date_create_endyear='.urlencode((string) ($search_date_create_endyear));
847}
848if ($search_ref_supplier) {
849 $param .= "&search_ref_supplier=".urlencode($search_ref_supplier);
850}
851// Add $param from extra fields
852if ($search_array_options) {
853 foreach ($search_array_options as $key => $val) {
854 $crit = $val;
855 $tmpkey = preg_replace('/search_options_/', '', $key);
856 if (is_array($val) && array_key_exists('start', $val) && array_key_exists('end', $val)) {
857 // date range from list filters is stored as array('start' => <timestamp>, 'end' => <timestamp>)
858 // start date
859 $param .= '&search_options_'.$tmpkey.'_startyear='.dol_print_date($val['start'], '%Y');
860 $param .= '&search_options_'.$tmpkey.'_startmonth='.dol_print_date($val['start'], '%m');
861 $param .= '&search_options_'.$tmpkey.'_startday='.dol_print_date($val['start'], '%d');
862 $param .= '&search_options_'.$tmpkey.'_starthour='.dol_print_date($val['start'], '%H');
863 $param .= '&search_options_'.$tmpkey.'_startmin='.dol_print_date($val['start'], '%M');
864 // end date
865 $param .= '&search_options_'.$tmpkey.'_endyear='.dol_print_date($val['end'], '%Y');
866 $param .= '&search_options_'.$tmpkey.'_endmonth='.dol_print_date($val['end'], '%m');
867 $param .= '&search_options_'.$tmpkey.'_endday='.dol_print_date($val['end'], '%d');
868 $param .= '&search_options_'.$tmpkey.'_endhour='.dol_print_date($val['end'], '%H');
869 $param .= '&search_options_'.$tmpkey.'_endmin='.dol_print_date($val['end'], '%M');
870 $val = '';
871 }
872 if ($val != '') {
873 $param .= '&search_options_'.$tmpkey.'='.urlencode($val);
874 }
875 }
876}
877
878
879$arrayofmassactions = array(
880 'builddoc' => img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"),
881 // 'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"),
882);
883
884if ($user->hasRight('fournisseur', 'facture', 'creer') || $user->hasRight('supplier_invoice', 'creer')) {
885 $arrayofmassactions['createbills'] = $langs->trans("CreateInvoiceForThisReceptions");
886}
887if (in_array($massaction, array('presend', 'createbills'))) {
888 $arrayofmassactions = array();
889}
890$massactionbutton = $form->selectMassAction('', $arrayofmassactions);
891
892// Currently: a sending can't create from sending list
893// $url = DOL_URL_ROOT.'/expedition/card.php?action=create';
894// if (!empty($socid)) $url .= '&socid='.$socid;
895// $newcardbutton = dolGetButtonTitle($langs->trans('NewSending'), '', 'fa fa-plus-circle', $url, '', $user->rights->expedition->creer);
896$newcardbutton = '';
897$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition'));
898$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition'));
899$newcardbutton .= dolGetButtonTitleSeparator();
900$newcardbutton .= dolGetButtonTitle($langs->trans('NewReception'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/reception/card.php?action=create2', '', $user->hasRight('reception', 'creer'));
901
902$i = 0;
903print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">'."\n";
904if ($optioncss != '') {
905 print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
906}
907print '<input type="hidden" name="token" value="'.newToken().'">';
908print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
909print '<input type="hidden" name="action" value="list">';
910print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
911print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
912print '<input type="hidden" name="mode" value="'.$mode.'">';
913
914// @phan-suppress-next-line PhanPluginSuspiciousParamOrder
915print_barre_liste($langs->trans('ListOfReceptions'), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'dollyrevert', 0, $newcardbutton, '', $limit, 0, 0, 1);
916
917if ($massaction == 'createbills') {
918 //var_dump($_REQUEST);
919 print '<input type="hidden" name="massaction" value="confirm_createbills">';
920
921 print '<table class="noborder" width="100%" >';
922 print '<tr>';
923 print '<td class="titlefieldmiddle">';
924 print $langs->trans('DateInvoice');
925 print '</td>';
926 print '<td>';
927 print $form->selectDate('', '', 0, 0, 0, '', 1, 1);
928 print '</td>';
929 print '</tr>';
930 print '<tr>';
931 print '<td>';
932 print $langs->trans('CreateOneBillByThird');
933 print '</td>';
934 print '<td>';
935 print $form->selectyesno('createbills_onebythird', '', 1);
936 print '</td>';
937 print '</tr>';
938 print '<tr>';
939 print '<td>';
940 print $langs->trans('ValidateInvoices');
941 print '</td>';
942 print '<td>';
943 if (isModEnabled('stock') && getDolGlobalString('STOCK_CALCULATE_ON_BILL')) {
944 print $form->selectyesno('validate_invoices', 0, 1, 1);
945 print ' ('.$langs->trans("AutoValidationNotPossibleWhenStockIsDecreasedOnInvoiceValidation").')';
946 } else {
947 print $form->selectyesno('validate_invoices', 0, 1);
948 }
949 print '</td>';
950 print '</tr>';
951 print '</table>';
952
953 print '<br>';
954 print '<div class="center">';
955 print '<input type="submit" class="button" id="createbills" name="createbills" value="'.$langs->trans('CreateInvoiceForThisReceptions').'"> ';
956 print '<input type="submit" class="button button-cancel" id="cancel" name="cancel" value="'.$langs->trans("Cancel").'">';
957 print '</div>';
958 print '<br>';
959}
960
961if ($search_all) {
962 foreach ($fieldstosearchall as $key => $val) {
963 $fieldstosearchall[$key] = $langs->trans($val);
964 }
965 print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $search_all).implode(', ', $fieldstosearchall).'</div>';
966}
967
968$moreforfilter = '';
969
970if (!empty($moreforfilter)) {
971 print '<div class="liste_titre liste_titre_bydiv centpercent">';
972 print $moreforfilter;
973 $parameters = array('type' => $type);
974 $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
975 print $hookmanager->resPrint;
976 print '</div>';
977}
978
979$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
980$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN'));
981if ($massactionbutton) {
982 $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); // This also change content of $arrayfields
983}
984
985print '<div class="div-table-responsive">';
986print '<table class="tagtable liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
987
988// Fields title search
989// --------------------------------------------------------------------
990print '<tr class="liste_titre_filter">';
991// Action column
992if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
993 print '<td class="liste_titre center maxwidthsearch">';
994 $searchpicto = $form->showFilterButtons('left');
995 print $searchpicto;
996 print '</td>';
997}
998// Ref
999if (!empty($arrayfields['e.ref']['checked'])) {
1000 print '<td class="liste_titre">';
1001 print '<input class="flat" size="6" type="text" name="search_ref_rcp" value="'.$search_ref_rcp.'">';
1002 print '</td>';
1003}
1004// Ref customer
1005if (!empty($arrayfields['e.ref_supplier']['checked'])) {
1006 print '<td class="liste_titre">';
1007 print '<input class="flat" size="6" type="text" name="search_ref_supplier" value="'.$search_ref_supplier.'">';
1008 print '</td>';
1009}
1010// Thirdparty
1011if (!empty($arrayfields['s.nom']['checked'])) {
1012 print '<td class="liste_titre left">';
1013 print '<input class="flat" type="text" size="8" name="search_company" value="'.dol_escape_htmltag($search_company).'">';
1014 print '</td>';
1015}
1016// Town
1017if (!empty($arrayfields['s.town']['checked'])) {
1018 print '<td class="liste_titre"><input class="flat" type="text" size="6" name="search_town" value="'.$search_town.'"></td>';
1019}
1020// Zip
1021if (!empty($arrayfields['s.zip']['checked'])) {
1022 print '<td class="liste_titre"><input class="flat" type="text" size="6" name="search_zip" value="'.$search_zip.'"></td>';
1023}
1024// State
1025if (!empty($arrayfields['state.nom']['checked'])) {
1026 print '<td class="liste_titre">';
1027 print '<input class="flat" size="4" type="text" name="search_state" value="'.dol_escape_htmltag($search_state).'">';
1028 print '</td>';
1029}
1030// Country
1031if (!empty($arrayfields['country.code_iso']['checked'])) {
1032 print '<td class="liste_titre center">';
1033 print $form->select_country($search_country, 'search_country', '', 0, 'minwidth100imp maxwidth100');
1034 print '</td>';
1035}
1036// Company type
1037if (!empty($arrayfields['typent.code']['checked'])) {
1038 print '<td class="liste_titre maxwidthonsmartphone center">';
1039 print $form->selectarray("search_type_thirdparty", $formcompany->typent_array(0), $search_type_thirdparty, 1, 0, 0, '', 0, 0, 0, (!getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? 'ASC' : $conf->global->SOCIETE_SORT_ON_TYPEENT), '', 1);
1040 print '</td>';
1041}
1042// Date delivery planned
1043if (!empty($arrayfields['e.date_delivery']['checked'])) {
1044 print '<td class="liste_titre center">';
1045 print '<div class="nowrapfordate">';
1046 print $form->selectDate($search_date_delivery_start ? $search_date_delivery_start : -1, 'search_date_delivery_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
1047 print '</div>';
1048 print '<div class="nowrapfordate">';
1049 print $form->selectDate($search_date_delivery_end ? $search_date_delivery_end : -1, 'search_date_delivery_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
1050 print '</div>';
1051 print '</td>';
1052}
1053if (!empty($arrayfields['l.ref']['checked'])) {
1054 // Delivery ref
1055 print '<td class="liste_titre">';
1056 print '<input class="flat" type="text" name="search_ref_liv" value="'.dol_escape_htmltag($search_ref_liv).'"';
1057 print '</td>';
1058}
1059if (!empty($arrayfields['l.date_delivery']['checked'])) {
1060 // Date received
1061 print '<td class="liste_titre center">&nbsp;</td>';
1062}
1063// Extra fields
1064include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
1065
1066// Fields from hook
1067$parameters = array('arrayfields' => $arrayfields);
1068$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook
1069print $hookmanager->resPrint;
1070// Date creation
1071if (!empty($arrayfields['e.datec']['checked'])) {
1072 print '<td class="liste_titre center">';
1073 print '<div class="nowrapfordate">';
1074 print $form->selectDate($search_date_create_start ? $search_date_create_start : -1, 'search_date_create_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
1075 print '</div>';
1076 print '<div class="nowrapfordate">';
1077 print $form->selectDate($search_date_create_end ? $search_date_create_end : -1, 'search_date_create_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
1078 print '</div>';
1079 print '</td>';
1080}
1081// Date modification
1082if (!empty($arrayfields['e.tms']['checked'])) {
1083 print '<td class="liste_titre">';
1084 print '</td>';
1085}
1086// Status
1087if (!empty($arrayfields['e.fk_statut']['checked'])) {
1088 print '<td class="liste_titre right parentonrightofpage">';
1089 print $form->selectarray('search_status', array('0' => $langs->trans('StatusReceptionDraftShort'), '1' => $langs->trans('StatusReceptionValidatedShort'), '2' => $langs->trans('StatusReceptionProcessedShort')), $search_status, 1, 0, 0, '', 0, 0, 0, '', 'search_status width100 onrightofpage');
1090 print '</td>';
1091}
1092// Status billed
1093if (!empty($arrayfields['e.billed']['checked'])) {
1094 print '<td class="liste_titre maxwidthonsmartphone center">';
1095 print $form->selectyesno('search_billed', $search_billed, 1, 0, 1);
1096 print '</td>';
1097}
1098// Action column
1099if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1100 print '<td class="liste_titre middle">';
1101 $searchpicto = $form->showFilterButtons();
1102 print $searchpicto;
1103 print '</td>';
1104}
1105print '</tr>'."\n";
1106
1107$totalarray = array();
1108$totalarray['nbfield'] = 0;
1109
1110// Fields title label
1111// --------------------------------------------------------------------
1112print '<tr class="liste_titre">';
1113// Action column
1114if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1115 print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ');
1116 $totalarray['nbfield']++;
1117}
1118if (!empty($arrayfields['e.ref']['checked'])) {
1119 print_liste_field_titre($arrayfields['e.ref']['label'], $_SERVER["PHP_SELF"], "e.ref", "", $param, '', $sortfield, $sortorder);
1120 $totalarray['nbfield']++;
1121}
1122if (!empty($arrayfields['e.ref_supplier']['checked'])) {
1123 print_liste_field_titre($arrayfields['e.ref_supplier']['label'], $_SERVER["PHP_SELF"], "e.ref_supplier", "", $param, '', $sortfield, $sortorder);
1124 $totalarray['nbfield']++;
1125}
1126if (!empty($arrayfields['s.nom']['checked'])) {
1127 print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER["PHP_SELF"], "s.nom", "", $param, '', $sortfield, $sortorder, 'left ');
1128 $totalarray['nbfield']++;
1129}
1130if (!empty($arrayfields['s.town']['checked'])) {
1131 print_liste_field_titre($arrayfields['s.town']['label'], $_SERVER["PHP_SELF"], 's.town', '', $param, '', $sortfield, $sortorder);
1132 $totalarray['nbfield']++;
1133}
1134if (!empty($arrayfields['s.zip']['checked'])) {
1135 print_liste_field_titre($arrayfields['s.zip']['label'], $_SERVER["PHP_SELF"], 's.zip', '', $param, '', $sortfield, $sortorder);
1136 $totalarray['nbfield']++;
1137}
1138if (!empty($arrayfields['state.nom']['checked'])) {
1139 print_liste_field_titre($arrayfields['state.nom']['label'], $_SERVER["PHP_SELF"], "state.nom", "", $param, '', $sortfield, $sortorder);
1140 $totalarray['nbfield']++;
1141}
1142if (!empty($arrayfields['country.code_iso']['checked'])) {
1143 print_liste_field_titre($arrayfields['country.code_iso']['label'], $_SERVER["PHP_SELF"], "country.code_iso", "", $param, '', $sortfield, $sortorder, 'center ');
1144 $totalarray['nbfield']++;
1145}
1146if (!empty($arrayfields['typent.code']['checked'])) {
1147 print_liste_field_titre($arrayfields['typent.code']['label'], $_SERVER["PHP_SELF"], "typent.code", "", $param, '', $sortfield, $sortorder, 'center ');
1148 $totalarray['nbfield']++;
1149}
1150if (!empty($arrayfields['e.date_delivery']['checked'])) {
1151 print_liste_field_titre($arrayfields['e.date_delivery']['label'], $_SERVER["PHP_SELF"], "e.date_delivery", "", $param, '', $sortfield, $sortorder, 'center ');
1152 $totalarray['nbfield']++;
1153}
1154if (!empty($arrayfields['l.ref']['checked'])) {
1155 print_liste_field_titre($arrayfields['l.ref']['label'], $_SERVER["PHP_SELF"], "l.ref", "", $param, '', $sortfield, $sortorder);
1156 $totalarray['nbfield']++;
1157}
1158if (!empty($arrayfields['l.date_delivery']['checked'])) {
1159 print_liste_field_titre($arrayfields['l.date_delivery']['label'], $_SERVER["PHP_SELF"], "l.date_delivery", "", $param, '', $sortfield, $sortorder, 'center ');
1160 $totalarray['nbfield']++;
1161}
1162// Extra fields
1163include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
1164// Hook fields
1165$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder, '$totalarray' => &$totalarray);
1166$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook
1167print $hookmanager->resPrint;
1168if (!empty($arrayfields['e.datec']['checked'])) {
1169 print_liste_field_titre($arrayfields['e.datec']['label'], $_SERVER["PHP_SELF"], "e.date_creation", "", $param, '', $sortfield, $sortorder, 'center nowrap ');
1170 $totalarray['nbfield']++;
1171}
1172if (!empty($arrayfields['e.tms']['checked'])) {
1173 print_liste_field_titre($arrayfields['e.tms']['label'], $_SERVER["PHP_SELF"], "e.tms", "", $param, '', $sortfield, $sortorder, 'center nowrap ');
1174 $totalarray['nbfield']++;
1175}
1176if (!empty($arrayfields['e.fk_statut']['checked'])) {
1177 print_liste_field_titre($arrayfields['e.fk_statut']['label'], $_SERVER["PHP_SELF"], "e.fk_statut", "", $param, '', $sortfield, $sortorder, 'right ');
1178 $totalarray['nbfield']++;
1179}
1180if (!empty($arrayfields['e.billed']['checked'])) {
1181 print_liste_field_titre($arrayfields['e.billed']['label'], $_SERVER["PHP_SELF"], "e.billed", "", $param, '', $sortfield, $sortorder, 'center ');
1182 $totalarray['nbfield']++;
1183}
1184// Action column
1185if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1186 print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ');
1187 $totalarray['nbfield']++;
1188}
1189print "</tr>\n";
1190
1191
1192// Loop on record
1193// --------------------------------------------------------------------
1194$i = 0;
1195$savnbfield = $totalarray['nbfield'];
1196$totalarray = array();
1197$totalarray['nbfield'] = 0;
1198$imaxinloop = ($limit ? min($num, $limit) : $num);
1199while ($i < $imaxinloop) {
1200 $obj = $db->fetch_object($resql);
1201 if (empty($obj)) {
1202 break; // Should not happen
1203 }
1204
1205 $reception->id = $obj->rowid;
1206 $reception->ref = $obj->ref;
1207 //$reception->ref_supplier = $obj->ref_supplier;
1208 $reception->statut = $obj->status;
1209 $reception->status = $obj->status;
1210 $reception->socid = $obj->socid;
1211 $reception->billed = $obj->billed;
1212
1213 $reception->fetch_thirdparty();
1214
1215 $object = $reception;
1216
1217 $companystatic->id = $obj->socid;
1218 $companystatic->ref = $obj->name;
1219 $companystatic->name = $obj->name;
1220
1221 if ($mode == 'kanban') {
1222 if ($i == 0) {
1223 print '<tr class="trkanban"><td colspan="'.$savnbfield.'">';
1224 print '<div class="box-flex-container kanban">';
1225 }
1226 $object->date_delivery = $obj->delivery_date;
1227 $object->town = $obj->town;
1228
1229 // Output Kanban
1230 $selected = -1;
1231 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
1232 $selected = 0;
1233 if (in_array($object->id, $arrayofselected)) {
1234 $selected = 1;
1235 }
1236 }
1237 print $object->getKanbanView('', array('thirdparty' => $companystatic->getNomUrl(1), 'selected' => $selected));
1238 if ($i == min($num, $limit) - 1) {
1239 print '</div>';
1240 print '</td></tr>';
1241 }
1242 } else {
1243 print '<tr class="oddeven">';
1244
1245 // Action column
1246 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1247 print '<td class="nowrap center">';
1248 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
1249 $selected = 0;
1250 if (in_array($obj->rowid, $arrayofselected)) {
1251 $selected = 1;
1252 }
1253 print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected ? ' checked="checked"' : '').'>';
1254 }
1255 print '</td>';
1256 }
1257 // Ref
1258 if (!empty($arrayfields['e.ref']['checked'])) {
1259 print '<td class="nowraponall">';
1260 print $reception->getNomUrl(1);
1261 $filename = dol_sanitizeFileName($reception->ref);
1262 $filedir = $conf->reception->dir_output.'/'.dol_sanitizeFileName($reception->ref);
1263 $urlsource = $_SERVER['PHP_SELF'].'?id='.$reception->id;
1264 print $formfile->getDocumentsLink($reception->element, $filename, $filedir);
1265 print "</td>\n";
1266
1267 if (!$i) {
1268 $totalarray['nbfield']++;
1269 }
1270 }
1271
1272 // Ref supplier
1273 if (!empty($arrayfields['e.ref_supplier']['checked'])) {
1274 print '<td class="tdoverflowmax200" title="'.dol_escape_htmltag($obj->ref_supplier).'">';
1275 print dol_escape_htmltag($obj->ref_supplier);
1276 print "</td>\n";
1277 if (!$i) {
1278 $totalarray['nbfield']++;
1279 }
1280 }
1281
1282 // Third party
1283 if (!empty($arrayfields['s.nom']['checked'])) {
1284 print '<td class="tdoverflowmax150">';
1285 print $companystatic->getNomUrl(1);
1286 print '</td>';
1287 if (!$i) {
1288 $totalarray['nbfield']++;
1289 }
1290 }
1291 // Town
1292 if (!empty($arrayfields['s.town']['checked'])) {
1293 print '<td class="nocellnopadd tdoverflowmax200" title="'.dol_escape_htmltag($obj->town).'">';
1294 print dol_escape_htmltag($obj->town);
1295 print '</td>';
1296 if (!$i) {
1297 $totalarray['nbfield']++;
1298 }
1299 }
1300 // Zip
1301 if (!empty($arrayfields['s.zip']['checked'])) {
1302 print '<td class="nocellnopadd center"">';
1303 print dol_escape_htmltag($obj->zip);
1304 print '</td>';
1305 if (!$i) {
1306 $totalarray['nbfield']++;
1307 }
1308 }
1309 // State
1310 if (!empty($arrayfields['state.nom']['checked'])) {
1311 print "<td>".dol_escape_htmltag($obj->state_name)."</td>\n";
1312 if (!$i) {
1313 $totalarray['nbfield']++;
1314 }
1315 }
1316 // Country
1317 if (!empty($arrayfields['country.code_iso']['checked'])) {
1318 print '<td class="center">';
1319 $tmparray = getCountry($obj->fk_pays, 'all');
1320 print dol_escape_htmltag($tmparray['label']);
1321 print '</td>';
1322 if (!$i) {
1323 $totalarray['nbfield']++;
1324 }
1325 }
1326 // Type ent
1327 if (!empty($arrayfields['typent.code']['checked'])) {
1328 print '<td class="center">';
1329 if (!isset($typenArray) || empty($typenArray)) {
1330 $typenArray = $formcompany->typent_array(1);
1331 }
1332 if (isset($typenArray[$obj->typent_code])) {
1333 print $typenArray[$obj->typent_code];
1334 }
1335 print '</td>';
1336 if (!$i) {
1337 $totalarray['nbfield']++;
1338 }
1339 }
1340
1341 // Date delivery planned
1342 if (!empty($arrayfields['e.date_delivery']['checked'])) {
1343 print '<td class="center">';
1344 print dol_print_date($db->jdate($obj->delivery_date), "day");
1345 /*$now = time();
1346 if ( ($now - $db->jdate($obj->date_reception)) > $conf->warnings->lim && $obj->statutid == 1 )
1347 {
1348 }*/
1349 print "</td>\n";
1350 if (!$i) {
1351 $totalarray['nbfield']++;
1352 }
1353 }
1354
1355 if (!empty($arrayfields['l.ref']['checked']) || !empty($arrayfields['l.date_delivery']['checked'])) {
1356 $reception->fetchObjectLinked($reception->id, $reception->element);
1357 $receiving = '';
1358 if (count($reception->linkedObjects['delivery']) > 0) {
1359 $receiving = reset($reception->linkedObjects['delivery']);
1360 }
1361
1362 if (!empty($arrayfields['l.ref']['checked'])) {
1363 // Ref
1364 print '<td>';
1365 print !empty($receiving) ? $receiving->getNomUrl($db) : '';
1366 print '</td>';
1367 }
1368
1369 if (!empty($arrayfields['l.date_delivery']['checked'])) {
1370 // Date received
1371 print '<td class="center">';
1372 print dol_print_date($db->jdate($obj->date_reception), "day");
1373 print '</td>'."\n";
1374 }
1375 }
1376
1377 // Extra fields
1378 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
1379
1380 // Fields from hook
1381 $parameters = array('arrayfields' => $arrayfields, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray);
1382 $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook
1383 print $hookmanager->resPrint;
1384 // Date creation
1385 if (!empty($arrayfields['e.datec']['checked'])) {
1386 print '<td class="center nowraponall">';
1387 print dol_print_date($db->jdate($obj->date_creation), 'dayhour', 'tzuserrel');
1388 print '</td>';
1389 if (!$i) {
1390 $totalarray['nbfield']++;
1391 }
1392 }
1393 // Date modification
1394 if (!empty($arrayfields['e.tms']['checked'])) {
1395 print '<td class="center nowraponall">';
1396 print dol_print_date($db->jdate($obj->date_modification), 'dayhour', 'tzuserrel');
1397 print '</td>';
1398 if (!$i) {
1399 $totalarray['nbfield']++;
1400 }
1401 }
1402 // Status
1403 if (!empty($arrayfields['e.fk_statut']['checked'])) {
1404 print '<td class="right nowrap">'.$reception->LibStatut($obj->status, 5).'</td>';
1405 if (!$i) {
1406 $totalarray['nbfield']++;
1407 }
1408 }
1409 // Billed
1410 if (!empty($arrayfields['e.billed']['checked'])) {
1411 print '<td class="center">'.yn($obj->billed).'</td>';
1412 if (!$i) {
1413 $totalarray['nbfield']++;
1414 }
1415 }
1416
1417 // Action column
1418 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1419 print '<td class="nowrap center">';
1420 if ($massactionbutton || $massaction) {
1421 // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
1422 $selected = 0;
1423 if (in_array($obj->rowid, $arrayofselected)) {
1424 $selected = 1;
1425 }
1426 print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected ? ' checked="checked"' : '').'>';
1427 }
1428 print '</td>';
1429 }
1430 if (!$i) {
1431 $totalarray['nbfield']++;
1432 }
1433
1434 print "</tr>\n";
1435 }
1436 $i++;
1437}
1438
1439// If no record found
1440if ($num == 0) {
1441 $colspan = 1;
1442 foreach ($arrayfields as $key => $val) {
1443 if (!empty($val['checked'])) {
1444 $colspan++;
1445 }
1446 }
1447 print '<tr><td colspan="'.$colspan.'" class="opacitymedium">'.$langs->trans("NoRecordFound").'</td></tr>';
1448}
1449
1450// Show total line
1451include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
1452
1453$parameters = array('arrayfields' => $arrayfields, 'totalarray' => $totalarray, 'sql' => $sql);
1454$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters); // Note that $action and $object may have been modified by hook
1455print $hookmanager->resPrint;
1456
1457print "</table>";
1458print "</div>";
1459print '</form>';
1460
1461$db->free($resql);
1462
1463$hidegeneratedfilelistifempty = 1;
1464if ($massaction == 'builddoc' || $action == 'remove_file' || !empty($show_files)) {
1465 $hidegeneratedfilelistifempty = 0;
1466}
1467
1468// Show list of available documents
1469$urlsource = $_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder;
1470$urlsource .= str_replace('&amp;', '&', $param);
1471
1472$filedir = $diroutputmassaction;
1473$genallowed = $user->hasRight('reception', 'lire');
1474$delallowed = $user->hasRight('reception', 'creer');
1475$title = '';
1476
1477print $formfile->showdocuments('massfilesarea_receipts', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty);
1478
1479// End of page
1480llxFooter();
1481$db->close();
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:58
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Definition wrapper.php:55
llxFooter()
Empty footer.
Definition wrapper.php:69
Class to manage absolute discounts.
Class to manage standard extra fields.
Class to manage suppliers invoices.
Class to build HTML component for third parties management Only common components are here.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class to manage receptions.
Class to manage third parties objects (customers, suppliers, prospects...)
getCountry($searchkey, $withcode='', $dbtouse=null, $outputlangs=null, $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
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_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.
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.
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_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.
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
dolGetButtonTitleSeparator($moreClass="")
Add space between dolGetButtonTitle.
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_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
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.