45 global $db, $langs, $conf, $user;
51 $head[$h][0] = DOL_URL_ROOT .
'/societe/card.php?socid=' .
$object->id;
52 $head[$h][1] = $langs->trans(
"ThirdParty");
53 $head[$h][2] =
'card';
57 if (!
getDolGlobalString(
'MAIN_DISABLE_CONTACTS_TAB') && $user->hasRight(
'societe',
'contact',
'lire')) {
61 require_once DOL_DOCUMENT_ROOT .
'/core/lib/memory.lib.php';
62 $cachekey =
'count_contacts_thirdparty_' .
$object->id;
65 if (!is_null($dataretrieved)) {
66 $nbContact = $dataretrieved;
68 $sql =
"SELECT COUNT(p.rowid) as nb";
69 $sql .=
" FROM " . MAIN_DB_PREFIX .
"socpeople as p";
71 $parameters = array(
'contacttab' =>
true);
72 $reshook = $hookmanager->executeHooks(
'printFieldListFrom', $parameters,
$object);
73 $sql .= $hookmanager->resPrint;
74 $sql .=
" WHERE p.fk_soc = " . ((int)
$object->id);
77 $parameters = array(
'contacttab' =>
true);
78 $reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters,
$object);
79 $sql .= $hookmanager->resPrint;
80 $resql = $db->query($sql);
82 $obj = $db->fetch_object($resql);
83 $nbContact = $obj->nb;
89 $head[$h][0] = DOL_URL_ROOT .
'/societe/contact.php?socid=' .
$object->id;
90 $head[$h][1] = $langs->trans(
'ContactsAddresses');
92 $head[$h][1] .=
'<span class="badge marginleftonlyshort">' . $nbContact .
'</span>';
94 $head[$h][2] =
'contact';
99 $head[$h][0] = DOL_URL_ROOT .
'/societe/societecontact.php?socid=' .
$object->id;
100 $nbContact = count(
$object->liste_contact(-1,
'internal')) + count(
$object->liste_contact(-1,
'external'));
101 $head[$h][1] = $langs->trans(
"ContactsAddressesExt");
102 if ($nbContact > 0) {
103 $head[$h][1] .=
'<span class="badge marginleftonlyshort">' . $nbContact .
'</span>';
105 $head[$h][2] =
'contactext';
110 $head[$h][0] = DOL_URL_ROOT .
'/comm/card.php?socid=' .
$object->id;
113 $head[$h][1] .= $langs->trans(
"Prospect");
116 $head[$h][1] .=
' | ';
119 $head[$h][1] .= $langs->trans(
"Customer");
121 $head[$h][2] =
'customer';
125 $langs->load(
"products");
127 $head[$h][0] = DOL_URL_ROOT .
'/societe/price.php?socid=' .
$object->id;
128 $head[$h][1] = $langs->trans(
"CustomerPrices");
129 $head[$h][2] =
'price';
133 $supplier_module_enabled = 0;
135 $supplier_module_enabled = 1;
137 if ($supplier_module_enabled == 1 &&
$object->fournisseur && $user->hasRight(
'fournisseur',
'lire')) {
138 $head[$h][0] = DOL_URL_ROOT .
'/fourn/card.php?socid=' .
$object->id;
139 $head[$h][1] = $langs->trans(
"Supplier");
140 $head[$h][2] =
'supplier';
144 if (
isModEnabled(
'accounting') &&
getDolGlobalString(
'ACCOUNTING_ENABLE_TABONTHIRDPARTY') && ($user->hasRight(
'accounting',
'mouvements',
'lire'))) {
146 if (!empty(
$object->code_compta_client)) {
147 $subledger_start_account = $subledger_end_account =
$object->code_compta_client;
149 } elseif (!empty(
$object->code_compta_fournisseur)) {
150 $subledger_start_account = $subledger_end_account =
$object->code_compta_fournisseur;
153 $subledger_start_account = $subledger_end_account =
'';
157 $head[$h][0] = DOL_URL_ROOT .
'/accountancy/bookkeeping/listbyaccount.php?socid=' .
$object->id .
'&mode=' . $mode .
'&type=sub&search_accountancy_code_start=' . $subledger_start_account .
'&search_accountancy_code_end=' . $subledger_end_account;
158 $head[$h][1] = $langs->trans(
"Accounting");
159 $head[$h][2] =
'accounting';
163 if (
isModEnabled(
'project') && ($user->hasRight(
'projet',
'lire'))) {
166 require_once DOL_DOCUMENT_ROOT .
'/core/lib/memory.lib.php';
167 $cachekey =
'count_projects_thirdparty_' .
$object->id;
170 if (!is_null($dataretrieved)) {
171 $nbProject = $dataretrieved;
173 $sql =
"SELECT COUNT(n.rowid) as nb";
174 $sql .=
" FROM " . MAIN_DB_PREFIX .
"projet as n";
175 $sql .=
" WHERE fk_soc = " . ((int)
$object->id);
176 $sql .=
" AND entity IN (" .
getEntity(
'project') .
")";
177 $resql = $db->query($sql);
179 $obj = $db->fetch_object($resql);
180 $nbProject = $obj->nb;
186 $head[$h][0] = DOL_URL_ROOT .
'/societe/project.php?socid=' .
$object->id;
187 $head[$h][1] = $langs->trans(
"Projects");
188 if ($nbProject > 0) {
189 $head[$h][1] .=
'<span class="badge marginleftonlyshort">' . $nbProject .
'</span>';
191 $head[$h][2] =
'project';
197 $head[$h][0] = DOL_URL_ROOT .
'/resource/element_resource.php?element=societe&element_id=' .
$object->id;
198 $head[$h][1] = $langs->trans(
"Resources");
199 $head[$h][2] =
'resources';
207 $head[$h][0] = DOL_URL_ROOT .
'/societe/consumption.php?socid=' .
$object->id;
208 $head[$h][1] = $langs->trans(
"Referers");
209 $head[$h][2] =
'consumption';
216 $foundonexternalonlinesystem = 0;
217 $langs->load(
"bills");
219 $title = $langs->trans(
"PaymentModes");
227 include_once DOL_DOCUMENT_ROOT .
'/societe/class/societeaccount.class.php';
229 $stripecu = $societeaccount->getCustomerAccount(
$object->id,
'stripe', $servicestatus);
231 $foundonexternalonlinesystem++;
235 $sql =
"SELECT COUNT(n.rowid) as nb";
236 $sql .=
" FROM " . MAIN_DB_PREFIX .
"societe_rib as n";
237 $sql .=
" WHERE n.fk_soc = " . ((int)
$object->id);
239 $sql .=
" AND (n.stripe_card_ref IS NULL OR n.stripe_card_ref ='')";
241 $sql .=
" AND (n.stripe_card_ref IS NULL OR (n.stripe_card_ref IS NOT NULL AND n.status = " . ((int) $servicestatus) .
"))";
244 $resql = $db->query($sql);
246 $obj = $db->fetch_object($resql);
247 $nbBankAccount = $obj->nb;
254 $head[$h][0] = DOL_URL_ROOT .
'/societe/paymentmodes.php?socid=' . urlencode((
string) (
$object->id));
255 $head[$h][1] = $title;
256 if ($foundonexternalonlinesystem) {
257 $head[$h][1] .=
'<span class="badge marginleftonlyshort">...</span>';
258 } elseif ($nbBankAccount > 0) {
259 $head[$h][1] .=
'<span class="badge marginleftonlyshort">' . $nbBankAccount .
'</span>';
261 $head[$h][2] =
'rib';
266 $site_filter_list = array();
268 $site_filter_list[] =
'dolibarr_website';
271 $site_filter_list[] =
'dolibarr_portal';
274 $head[$h][0] = DOL_URL_ROOT .
'/societe/website.php?id=' . urlencode((
string) (
$object->id));
275 $head[$h][1] = $langs->trans(
"WebSiteAccounts");
277 $sql =
"SELECT COUNT(n.rowid) as nb";
278 $sql .=
" FROM " . MAIN_DB_PREFIX .
"societe_account as n";
279 $sql .=
" WHERE fk_soc = " . ((int)
$object->id);
280 $sql .=
" AND entity IN (" .
getEntity(
'thirdpartyaccount') .
")";
281 if (!empty($site_filter_list)) {
282 $sql .=
" AND n.site IN (" . $db->sanitize(
"'" . implode(
"','", $site_filter_list) .
"'", 1) .
")";
284 $resql = $db->query($sql);
286 $obj = $db->fetch_object($resql);
292 $head[$h][1] .=
'<span class="badge marginleftonlyshort">' . $nbNote .
'</span>';
294 $head[$h][2] =
'website';
299 if ($user->hasRight(
'partnership',
'read')) {
300 $langs->load(
"partnership");
301 $nbPartnership = is_array(
$object->partnerships) ? count(
$object->partnerships) : 0;
302 $head[$h][0] = DOL_URL_ROOT .
'/partnership/partnership_list.php?socid=' .
$object->id;
303 $head[$h][1] = $langs->trans(
"Partnerships");
305 $sql =
"SELECT COUNT(n.rowid) as nb";
306 $sql .=
" FROM " . MAIN_DB_PREFIX .
"partnership as n";
307 $sql .=
" WHERE fk_soc = " . ((int)
$object->id);
308 $sql .=
" AND entity IN (" .
getEntity(
'partnership') .
")";
309 $resql = $db->query($sql);
311 $obj = $db->fetch_object($resql);
317 $head[$h][1] .=
'<span class="badge marginleftonlyshort">' . $nbNote .
'</span>';
319 $head[$h][2] =
'partnerships';
320 if ($nbPartnership > 0) {
321 $head[$h][1] .=
'<span class="badge marginleftonlyshort">' . $nbPartnership .
'</span>';
328 if (
isModEnabled(
'ticket') && $user->hasRight(
"ticket",
"read")) {
332 require_once DOL_DOCUMENT_ROOT .
'/core/lib/memory.lib.php';
333 $cachekey =
'count_ticket_thirdparty_' .
$object->id;
335 if (!is_null($nbticketretreived)) {
336 $nbTicket = $nbticketretreived;
339 $sql =
"SELECT COUNT(t.rowid) as nb";
340 $sql .=
" FROM " . MAIN_DB_PREFIX .
"ticket as t";
341 $sql .=
" WHERE t.fk_soc = " . ((int)
$object->id);
342 $resql = $db->query($sql);
344 $obj = $db->fetch_object($resql);
345 $nbTicket = $obj->nb;
352 $head[$h][0] = DOL_URL_ROOT .
'/ticket/list.php?socid=' . urlencode((
string) (
$object->id));
353 $head[$h][1] = $langs->trans(
"Tickets");
355 $head[$h][1] .=
'<span class="badge marginleftonlyshort">' . $nbTicket .
'</span>';
357 $head[$h][2] =
'ticket';
368 if ($user->socid == 0) {
371 $langs->load(
'mails');
374 require_once DOL_DOCUMENT_ROOT .
'/core/lib/memory.lib.php';
375 $cachekey =
'count_notifications_thirdparty_' .
$object->id;
377 if (!is_null($dataretrieved)) {
378 $nbNotif = $dataretrieved;
381 $sql =
"SELECT COUNT(n.rowid) as nb";
382 $sql .=
" FROM " . MAIN_DB_PREFIX .
"c_action_trigger as a,";
383 $sql .=
" " . MAIN_DB_PREFIX .
"notify_def as n,";
384 $sql .=
" " . MAIN_DB_PREFIX .
"socpeople as c";
385 $sql .=
" WHERE a.rowid = n.fk_action";
386 $sql .=
" AND c.rowid = n.fk_contact";
387 $sql .=
" AND c.fk_soc = " . ((int)
$object->id);
388 $resql = $db->query($sql);
390 $obj = $db->fetch_object($resql);
398 $head[$h][0] = DOL_URL_ROOT .
'/societe/notify/card.php?socid=' . urlencode((
string) (
$object->id));
399 $head[$h][1] = $langs->trans(
"Notifications");
401 $head[$h][1] .=
'<span class="badge marginleftonlyshort">' . $nbNotif .
'</span>';
403 $head[$h][2] =
'notify';
409 if (!empty(
$object->note_private)) {
412 if (!empty(
$object->note_public)) {
415 $head[$h][0] = DOL_URL_ROOT .
'/societe/note.php?id=' . urlencode((
string) (
$object->id));
416 $head[$h][1] = $langs->trans(
"Notes");
418 $head[$h][1] .=
'<span class="badge marginleftonlyshort">' . $nbNote .
'</span>';
420 $head[$h][2] =
'note';
426 require_once DOL_DOCUMENT_ROOT .
'/core/lib/memory.lib.php';
427 $cachekey =
'count_attached_thirdparty_' .
$object->id;
429 if (!is_null($dataretrieved)) {
430 $totalAttached = $dataretrieved;
432 require_once DOL_DOCUMENT_ROOT .
'/core/lib/files.lib.php';
433 require_once DOL_DOCUMENT_ROOT .
'/core/class/link.class.php';
434 $upload_dir = $conf->societe->multidir_output[
$object->entity ?? $conf->entity] .
"/" .
$object->id;
435 $nbFiles = count(
dol_dir_list($upload_dir,
'files', 0,
'',
'(\.meta|_preview.*\.png)$'));
437 $totalAttached = $nbFiles + $nbLinks;
441 $head[$h][0] = DOL_URL_ROOT .
'/societe/document.php?socid=' .
$object->id;
442 $head[$h][1] = $langs->trans(
"Documents");
443 if (($totalAttached) > 0) {
444 $head[$h][1] .=
'<span class="badge marginleftonlyshort">' . ($totalAttached) .
'</span>';
446 $head[$h][2] =
'document';
450 $head[$h][0] = DOL_URL_ROOT .
'/societe/messaging.php?socid=' .
$object->id;
451 $head[$h][1] = $langs->trans(
"Events");
452 if (
isModEnabled(
'agenda') && ($user->hasRight(
'agenda',
'myactions',
'read') || $user->hasRight(
'agenda',
'allactions',
'read'))) {
455 require_once DOL_DOCUMENT_ROOT .
'/core/lib/memory.lib.php';
456 $cachekey =
'count_events_thirdparty_' .
$object->id;
458 if (!is_null($dataretrieved)) {
459 $nbEvent = $dataretrieved;
461 $sql =
"SELECT COUNT(id) as nb";
462 $sql .=
" FROM " . MAIN_DB_PREFIX .
"actioncomm";
463 $sql .=
" WHERE fk_soc = " . ((int)
$object->id);
464 $sql .=
" AND entity IN (" .
getEntity(
'agenda') .
")";
465 $resql = $db->query($sql);
467 $obj = $db->fetch_object($resql);
470 dol_syslog(
'Failed to count actioncomm ' . $db->lasterror(), LOG_ERR);
476 $head[$h][1] .= $langs->trans(
"Agenda");
478 $head[$h][1] .=
'<span class="badge marginleftonlyshort">' . $nbEvent .
'</span>';
481 $head[$h][2] =
'agenda';
1220 global $user, $extrafields, $hookmanager;
1221 global $contextpage;
1223 require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formcompany.class.php';
1225 $form =
new Form($db);
1227 $optioncss =
GETPOST(
'optioncss',
'alpha');
1228 $sortfield =
GETPOST(
'sortfield',
'aZ09comma');
1229 $sortorder =
GETPOST(
'sortorder',
'aZ09comma');
1232 $search_status =
GETPOST(
"search_status",
"intcomma");
1233 if ($search_status ==
'') {
1237 $search_rowid =
GETPOST(
"search_rowid",
"intcomma");
1238 $search_name =
GETPOST(
"search_name",
'alpha');
1239 $search_address =
GETPOST(
"search_address",
'alpha');
1240 $search_poste =
GETPOST(
"search_poste",
'alpha');
1241 $search_note_private =
GETPOST(
'search_note_private',
'alphanohtml');
1242 $search_roles =
GETPOST(
"search_roles",
'array');
1243 $search_birthday_dtstart =
GETPOST(
"search_birthday_dtstart",
'alpha');
1244 $search_birthday_dtend =
GETPOST(
"search_birthday_dtend",
'alpha');
1246 if ($search_birthday_dtstart !=
'' || $search_birthday_dtend !=
'') {
1252 $searchAddressPhoneDBFields = array(
1280 $sortfield =
"t.lastname";
1284 $user->fetch_clicktodial();
1288 $contactstatic =
new Contact($db);
1290 $extrafields->fetch_name_optionals_label($contactstatic->table_element);
1292 $contactstatic->fields = array(
1293 'rowid' => array(
'type' =>
'integer',
'label' =>
"TechnicalID",
'enabled' => (
getDolGlobalString(
'MAIN_SHOW_TECHNICAL_ID') ?
'1' :
'0'),
'visible' => (
getDolGlobalString(
'MAIN_SHOW_TECHNICAL_ID') ? 1 : 0),
'position' => 1),
1294 'name' => array(
'type' =>
'varchar(128)',
'label' =>
'Name',
'enabled' =>
'1',
'visible' => 1,
'notnull' => 1,
'showoncombobox' => 1,
'index' => 1,
'position' => 10,
'searchall' => 1),
1295 'poste' => array(
'type' =>
'varchar(128)',
'label' =>
'PostOrFunction',
'enabled' =>
'1',
'visible' => 1,
'notnull' => 1,
'showoncombobox' => 2,
'index' => 1,
'position' => 20),
1296 'address' => array(
'type' =>
'varchar(128)',
'label' =>
'Address',
'enabled' =>
'1',
'visible' => 1,
'notnull' => 1,
'showoncombobox' => 3,
'index' => 1,
'position' => 30),
1297 'note_private' => array(
'type' =>
'html',
'label' =>
'NotePrivate',
'enabled' => (
string) ((
int) !
getDolGlobalBool(
'MAIN_LIST_HIDE_PRIVATE_NOTES')),
'visible' => 3,
'position' => 35),
1298 'role' => array(
'type' =>
'checkbox',
'label' =>
'Role',
'enabled' =>
'1',
'visible' => 1,
'notnull' => 1,
'showoncombobox' => 4,
'index' => 1,
'position' => 40),
1299 'birthday' => array(
'type' =>
'date',
'label' =>
'Birthday',
'enabled' =>
'1',
'visible' => -1,
'notnull' => 0,
'position' => 45),
1300 'statut' => array(
'type' =>
'integer',
'label' =>
'Status',
'enabled' =>
'1',
'visible' => 1,
'notnull' => 1,
'default' =>
'0',
'index' => 1,
'position' => 50,
'arrayofkeyval' => array(0 => $contactstatic->LibStatut(0, 1), 1 => $contactstatic->LibStatut(1, 1))),
1304 $arrayfields = array(
1305 't.rowid' => array(
'label' =>
"TechnicalID",
'checked' => (
getDolGlobalString(
'MAIN_SHOW_TECHNICAL_ID') ?
'1' :
'0'),
'enabled' => (
getDolGlobalString(
'MAIN_SHOW_TECHNICAL_ID') ?
'1' :
'0'),
'position' => 1),
1306 't.name' => array(
'label' =>
"Name",
'checked' =>
'1',
'position' => 10),
1307 't.poste' => array(
'label' =>
"PostOrFunction",
'checked' =>
'1',
'position' => 20),
1308 't.address' => array(
'label' => (empty($conf->dol_optimize_smallscreen) ? $langs->trans(
"Address") .
' / ' . $langs->trans(
"Phone") .
' / ' . $langs->trans(
"Email") : $langs->trans(
"Address")),
'checked' =>
'1',
'position' => 30),
1309 't.note_private' => array(
'label' =>
'NotePrivate',
'checked' =>
'0',
'position' => 35),
1310 'sc.role' => array(
'label' =>
"ContactByDefaultFor",
'checked' =>
'1',
'position' => 40),
1311 't.birthday' => array(
'label' =>
"Birthday",
'checked' =>
'0',
'position' => 45),
1312 't.statut' => array(
'label' =>
"Status",
'checked' =>
'1',
'position' => 50,
'class' =>
'center'),
1313 'u.user' => array(
'label' =>
"DolibarrLogin",
'checked' =>
'1',
'position' => 50,
'class' =>
'center'),
1316 $extrafieldsobjectkey = $contactstatic->table_element;
1317 $extrafieldsobjectprefix =
'ef.';
1318 $extrafieldspositionoffset = 1000;
1319 include DOL_DOCUMENT_ROOT .
'/core/tpl/extrafields_list_array_fields.tpl.php';
1323 foreach ($arrayfields as $key => $val) {
1324 $queryName =
'search_' . substr($key, 2);
1325 if (
GETPOST($queryName,
'alpha')) {
1326 $search[substr($key, 2)] =
GETPOST($queryName,
'alpha');
1329 $search_array_options = $extrafields->getOptionalsFromPost($contactstatic->table_element,
'',
'search_');
1332 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
1334 $search_status =
'';
1336 $search_roles = array();
1337 $search_address =
'';
1339 $search_note_private =
'';
1340 $search_birthday_dtstart =
'';
1341 $search_birthday_dtend =
'';
1343 $search_array_options = array();
1345 foreach ($contactstatic->fields as $key => $val) {
1350 $contactstatic->fields =
dol_sort_array($contactstatic->fields,
'position');
1353 $newcardbutton =
'';
1354 $parameters = array(
'socid' =>
$object->id);
1355 $reshook = $hookmanager->executeHooks(
'printNewCardButton', $parameters,
$object);
1356 if (empty($reshook)) {
1357 if ($user->hasRight(
'societe',
'contact',
'creer')) {
1358 $addcontact = (
getDolGlobalString(
'SOCIETE_ADDRESSES_MANAGEMENT') ? $langs->trans(
"AddContact") : $langs->trans(
"AddContactAddress"));
1359 $newcardbutton .=
dolGetButtonTitle($addcontact,
'',
'fa fa-plus-circle', DOL_URL_ROOT .
'/contact/card.php?socid=' .
$object->id .
'&action=create&backtopage=' . urlencode($backtopage));
1362 $newcardbutton = $hookmanager->resPrint;
1367 $title = (
getDolGlobalString(
'SOCIETE_ADDRESSES_MANAGEMENT') ? $langs->trans(
"ContactsForCompany") : $langs->trans(
"ContactsAddressesForCompany"));
1370 print
'<form method="POST" id="searchFormList" action="' . $_SERVER[
"PHP_SELF"] .
'" name="formfilter">';
1371 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
1372 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
1373 print
'<input type="hidden" name="socid" value="' .
$object->id .
'">';
1374 print
'<input type="hidden" name="sortorder" value="' . $sortorder .
'">';
1375 print
'<input type="hidden" name="sortfield" value="' . $sortfield .
'">';
1376 print
'<input type="hidden" name="page" value="' . $page .
'">';
1378 $arrayofmassactions = array();
1381 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
1382 $htmlofselectarray = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
getDolGlobalString(
'MAIN_CHECKBOX_LEFT_COLUMN'));
1383 $selectedfields = ($mode !=
'kanban' ? $htmlofselectarray :
'');
1384 $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons(
'checkforselect', 1) :
'');
1386 print
'<div class="div-table-responsive">';
1387 print
"\n" .
'<table class="tagtable liste noborder">' .
"\n";
1389 $param =
"socid=" . urlencode((
string) (
$object->id));
1390 if ($search_rowid !=
'') {
1391 $param .=
'&search_rowid=' . urlencode((
string) ($search_rowid));
1393 if ($search_status !=
'') {
1394 $param .=
'&search_status=' . urlencode((
string) ($search_status));
1396 if (count($search_roles) > 0) {
1397 $param .= implode(
'&search_roles[]=', $search_roles);
1399 if ($search_name !=
'') {
1400 $param .=
'&search_name=' . urlencode($search_name);
1402 if ($search_poste !=
'') {
1403 $param .=
'&search_poste=' . urlencode($search_poste);
1405 if ($search_address !=
'') {
1406 $param .=
'&search_address=' . urlencode($search_address);
1408 if ($search_note_private !=
'') {
1409 $param .=
'&search_note_private=' . urlencode($search_note_private);
1411 if ($search_birthday_dtstart !=
'') {
1412 $param .=
'&search_birthday_dtstart=' . urlencode((
string) $search_birthday_dtstart);
1414 if ($search_birthday_dtend !=
'') {
1415 $param .=
'&search_birthday_dtend=' . urlencode((
string) $search_birthday_dtend);
1417 if ($optioncss !=
'') {
1418 $param .=
'&optioncss=' . urlencode($optioncss);
1422 $extrafieldsobjectkey = $contactstatic->table_element;
1423 include DOL_DOCUMENT_ROOT .
'/core/tpl/extrafields_list_search_param.tpl.php';
1425 $sql =
"SELECT t.rowid, t.entity, t.lastname, t.firstname, t.fk_pays as country_id, t.civility, t.poste,";
1426 $sql .=
" t.phone as phone_pro, t.phone_mobile, t.phone_perso, t.fax, t.email, t.socialnetworks, t.statut, t.photo, t.fk_soc,";
1427 $sql .=
" t.civility as civility_id, t.address, t.zip, t.town, t.birthday,";
1428 $sql .=
" t.note_private";
1429 $sql .=
" FROM " . MAIN_DB_PREFIX .
"socpeople as t";
1430 $sql .=
" LEFT JOIN " . MAIN_DB_PREFIX .
"socpeople_extrafields as ef on (t.rowid = ef.fk_object)";
1431 $sql .=
" WHERE t.fk_soc = " . ((int)
$object->id);
1432 $sql .=
" AND t.entity IN (" .
getEntity(
'socpeople') .
")";
1433 $sql .=
" AND ((t.fk_user_creat = " . ((int) $user->id) .
" AND t.priv = 1) OR t.priv = 0)";
1434 if ($search_rowid) {
1437 if ($search_status !=
'' && $search_status !=
'-1') {
1438 $sql .=
" AND t.statut = " . ((int) $search_status);
1441 $sql .=
natural_search(array(
't.lastname',
't.firstname'), $search_name);
1443 if ($search_poste) {
1446 if ($search_address) {
1447 $sql .=
natural_search($searchAddressPhoneDBFields, $search_address);
1449 if ($search_note_private) {
1452 if ($search_birthday_dtstart !=
'') {
1453 $sql .=
" AND t.birthday >= '" . $db->idate($search_birthday_dtstart) .
"'";
1455 if ($search_birthday_dtend !=
'') {
1456 $sql .=
" AND t.birthday <= '" . $db->idate($search_birthday_dtend) .
"'";
1458 if (count($search_roles) > 0) {
1459 $sql .=
" AND t.rowid IN (SELECT sc.fk_socpeople FROM " . MAIN_DB_PREFIX .
"societe_contacts as sc WHERE sc.fk_c_type_contact IN (" . $db->sanitize(implode(
',', $search_roles)) .
"))";
1462 $extrafieldsobjectkey = $contactstatic->table_element;
1463 include DOL_DOCUMENT_ROOT .
'/core/tpl/extrafields_list_search_sql.tpl.php';
1465 $parameters = array(
'socid' =>
$object->id);
1466 $reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters,
$object);
1467 $sql .= $hookmanager->resPrint;
1468 if ($sortfield ==
"t.name") {
1469 $sql .=
" ORDER BY t.lastname $sortorder, t.firstname $sortorder";
1471 $sql .=
" ORDER BY $sortfield $sortorder";
1474 dol_syslog(
'core/lib/company.lib.php :: show_contacts', LOG_DEBUG);
1475 $result = $db->query($sql);
1480 $num = $db->num_rows($result);
1484 print
'<tr class="liste_titre">';
1487 print
'<td class="liste_titre right">';
1488 print $form->showFilterButtons();
1491 foreach ($contactstatic->fields as $key => $val) {
1493 if (in_array($val[
'type'], array(
'date',
'datetime',
'timestamp'))) {
1494 $align .= ($align ?
' ' :
'') .
'center';
1496 if (in_array($val[
'type'], array(
'timestamp'))) {
1497 $align .= ($align ?
' ' :
'') .
'nowrap';
1499 if ($key ==
'status' || $key ==
'statut') {
1500 $align .= ($align ?
' ' :
'') .
'center';
1502 if (!empty($arrayfields[
't.' . $key][
'checked']) || !empty($arrayfields[
'sc.' . $key][
'checked'])) {
1503 print
'<td class="liste_titre' . ($align ?
' ' . $align :
'') .
'">';
1504 if (in_array($key, array(
'statut'))) {
1505 print $form->selectarray(
'search_status', array(
'-1' =>
'',
'0' => $contactstatic->LibStatut(0, 1),
'1' => $contactstatic->LibStatut(1, 1)), $search_status, 0, 0, 0,
'', 0, 0, 0,
'',
'onrightofpage');
1506 } elseif (in_array($key, array(
'role'))) {
1507 print $formcompany->showRoles(
"search_roles", $contactstatic,
'edit', $search_roles,
'minwidth200 maxwidth300');
1508 } elseif (in_array($key, array(
'birthday'))) {
1509 print
'<div class="nowrap">';
1510 print $form->selectDate($search_birthday_dtstart ? $search_birthday_dtstart :
'',
"search_birthday_dtstart", 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'From'));
1512 print
'<div class="nowrap">';
1513 print $form->selectDate($search_birthday_dtend ? $search_birthday_dtend :
'',
"search_birthday_dtend", 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'to'));
1516 print
'<input type="text" class="flat maxwidth75" name="search_' . $key .
'" value="' . (!empty($search[$key]) ?
dol_escape_htmltag($search[$key]) :
'') .
'">';
1521 if ($showuserlogin) {
1522 print
'<td class="liste_titre"></td>';
1525 $extrafieldsobjectkey = $contactstatic->table_element;
1526 include DOL_DOCUMENT_ROOT .
'/core/tpl/extrafields_list_search_input.tpl.php';
1529 $parameters = array(
'arrayfields' => $arrayfields);
1530 $reshook = $hookmanager->executeHooks(
'printFieldListOption', $parameters, $contactstatic);
1531 print $hookmanager->resPrint;
1534 print
'<td class="liste_titre right">';
1535 print $form->showFilterButtons();
1538 print
'</tr>' .
"\n";
1543 print
'<tr class="liste_titre">';
1546 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'maxwidthsearch center ') .
"\n";
1548 foreach ($contactstatic->fields as $key => $val) {
1550 if (in_array($val[
'type'], array(
'date',
'datetime',
'timestamp'))) {
1551 $align .= ($align ?
' ' :
'') .
'center';
1553 if (in_array($val[
'type'], array(
'timestamp'))) {
1554 $align .= ($align ?
' ' :
'') .
'nowrap';
1556 if ($key ==
'status' || $key ==
'statut') {
1557 $align .= ($align ?
' ' :
'') .
'center';
1559 if (!empty($arrayfields[
't.' . $key][
'checked'])) {
1560 print
getTitleFieldOfList($val[
'label'], 0, $_SERVER[
'PHP_SELF'],
't.' . $key,
'', $param, ($align ?
'class="' . $align .
'"' :
''), $sortfield, $sortorder, $align .
' ') .
"\n";
1562 if ($key ==
'role') {
1563 $align .= ($align ?
' ' :
'') .
'left';
1565 if (!empty($arrayfields[
'sc.' . $key][
'checked'])) {
1566 print
getTitleFieldOfList($arrayfields[
'sc.' . $key][
'label'], 0, $_SERVER[
'PHP_SELF'],
'',
'', $param, ($align ?
'class="' . $align .
'"' :
''), $sortfield, $sortorder, $align .
' ') .
"\n";
1569 if ($showuserlogin) {
1570 print
'<th class="wrapcolumntitle liste_titre">' . $langs->trans(
"DolibarrLogin") .
'</th>';
1573 $extrafieldsobjectkey = $contactstatic->table_element;
1574 include DOL_DOCUMENT_ROOT .
'/core/tpl/extrafields_list_search_title.tpl.php';
1576 $parameters = array(
'arrayfields' => $arrayfields,
'param' => $param,
'sortfield' => $sortfield,
'sortorder' => $sortorder);
1577 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters,
$object);
1578 print $hookmanager->resPrint;
1581 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'maxwidthsearch center ') .
"\n";
1583 print
'</tr>' .
"\n";
1587 if ($num || (
GETPOST(
'button_search') ||
GETPOST(
'button_search.x') ||
GETPOST(
'button_search_x'))) {
1591 $obj = $db->fetch_object($result);
1593 $contactstatic->id = $obj->rowid;
1594 $contactstatic->ref = $obj->rowid;
1595 $contactstatic->status = $obj->statut;
1596 $contactstatic->statut = $obj->statut;
1597 $contactstatic->lastname = $obj->lastname;
1598 $contactstatic->firstname = $obj->firstname;
1599 $contactstatic->civility_id = $obj->civility_id;
1600 $contactstatic->civility_code = $obj->civility_id;
1601 $contactstatic->poste = $obj->poste;
1602 $contactstatic->address = $obj->address;
1603 $contactstatic->zip = $obj->zip;
1604 $contactstatic->town = $obj->town;
1605 $contactstatic->phone_pro = $obj->phone_pro;
1606 $contactstatic->phone_mobile = $obj->phone_mobile;
1607 $contactstatic->phone_perso = $obj->phone_perso;
1608 $contactstatic->email = $obj->email;
1609 $contactstatic->socialnetworks = $obj->socialnetworks;
1610 $contactstatic->photo = $obj->photo;
1611 $contactstatic->fk_soc = $obj->fk_soc;
1612 $contactstatic->entity = $obj->entity;
1614 $country_code =
getCountry($obj->country_id,
'2');
1615 $contactstatic->country_code = $country_code;
1617 $contactstatic->setGenderFromCivility();
1618 $contactstatic->fetch_optionals();
1620 $resultRole = $contactstatic->fetchRoles();
1621 if ($resultRole < 0) {
1625 if (is_array($contactstatic->array_options)) {
1626 foreach ($contactstatic->array_options as $key => $val) {
1631 print
'<tr class="oddeven">';
1635 print
'<td class="nowrap center">';
1638 if (
isModEnabled(
'agenda') && $user->hasRight(
'agenda',
'myactions',
'create')) {
1639 print
'<a href="' . DOL_URL_ROOT .
'/comm/action/card.php?action=create&actioncode=&contactid=' . $obj->rowid .
'&socid=' .
$object->id .
'&backtopage=' . urlencode($backtopage) .
'">';
1640 print
img_object($langs->trans(
"Event"),
"action");
1641 print
'</a> ';
1645 if ($user->hasRight(
'societe',
'contact',
'creer')) {
1646 print
'<a class="editfielda paddingleft" href="' . DOL_URL_ROOT .
'/contact/card.php?action=edit&token=' .
newToken() .
'&id=' . $obj->rowid .
'&backtopage=' . urlencode($backtopage) .
'">';
1652 if ($user->hasRight(
'societe',
'contact',
'delete')) {
1653 print
'<a class="marginleftonly right" href="' . DOL_URL_ROOT .
'/societe/contact.php?action=delete&token=' .
newToken() .
'&id=' . $obj->rowid .
'&socid=' .
$object->id .
'&backtopage=' . urlencode($backtopage) .
'">';
1662 if (!empty($arrayfields[
't.rowid'][
'checked'])) {
1664 print $contactstatic->id;
1669 if (!empty($arrayfields[
't.name'][
'checked'])) {
1670 print
'<td class="tdoverflowmax150">';
1671 print $form->showphoto(
'contact', $contactstatic, 0, 0, 0,
'photorefnoborder valignmiddle marginrightonly',
'small', 1, 0,
'user');
1672 print $contactstatic->getNomUrl(0,
'', 0,
'&backtopage=' . urlencode($backtopage));
1677 if (!empty($arrayfields[
't.poste'][
'checked'])) {
1678 print
'<td class="tdoverflowmax100" title="' .
dol_escape_htmltag($obj->poste) .
'">';
1686 if (!empty($arrayfields[
't.address'][
'checked'])) {
1687 $addresstoshow = $contactstatic->getBannerAddress(
'contact',
$object);
1688 print
'<td class="tdoverflowmax150 classfortooltip" title="'.dolPrintHTMLForAttribute($addresstoshow).
'">';
1689 print $addresstoshow;
1694 if (!empty($arrayfields[
't.note_private'][
'checked'])) {
1695 print
'<td class="center">';
1701 if (!empty($arrayfields[
'sc.role'][
'checked'])) {
1702 print
'<td class="tdoverflowmax150">';
1703 print $formcompany->showRoles(
"roles", $contactstatic,
'view');
1708 if (!empty($arrayfields[
't.birthday'][
'checked'])) {
1709 print
'<td class="nowraponall">';
1715 if (!empty($arrayfields[
't.statut'][
'checked'])) {
1716 print
'<td class="center">' . $contactstatic->getLibStatut(5) .
'</td>';
1719 if ($showuserlogin) {
1720 print
'<td class="tdoverflowmax125">';
1721 $tmpuser =
new User($db);
1723 $resfetch = $tmpuser->fetch(0,
'',
'', 0, -1,
'', $contactstatic->id);
1724 if ($resfetch > 0) {
1725 print $tmpuser->getNomUrl(-1,
'', 0, 0, 24, 1);
1731 $extrafieldsobjectkey = $contactstatic->table_element;
1732 include DOL_DOCUMENT_ROOT .
'/core/tpl/extrafields_list_print_fields.tpl.php';
1736 print
'<td class="nowrap center">';
1739 if (
isModEnabled(
'agenda') && $user->hasRight(
'agenda',
'myactions',
'create')) {
1740 print
'<a href="' . DOL_URL_ROOT .
'/comm/action/card.php?action=create&actioncode=&contactid=' . $obj->rowid .
'&socid=' .
$object->id .
'&backtopage=' . urlencode($backtopage) .
'">';
1741 print
img_object($langs->trans(
"Event"),
"action");
1742 print
'</a> ';
1746 if ($user->hasRight(
'societe',
'contact',
'creer')) {
1747 print
'<a class="editfielda paddingleft" href="' . DOL_URL_ROOT .
'/contact/card.php?action=edit&token=' .
newToken() .
'&id=' . $obj->rowid .
'&backtopage=' . urlencode($backtopage) .
'">';
1753 if ($user->hasRight(
'societe',
'contact',
'delete')) {
1754 print
'<a class="marginleftonly right" href="' . DOL_URL_ROOT .
'/societe/contact.php?action=delete&token=' .
newToken() .
'&id=' . $obj->rowid .
'&socid=' .
$object->id .
'&backtopage=' . urlencode($backtopage) .
'">';
1767 $colspan = 1 + ($showuserlogin ? 1 : 0);
1768 foreach ($arrayfields as $key => $val) {
1769 if (!empty($val[
'checked'])) {
1773 print
'<tr><td colspan="' . $colspan .
'"><span class="opacitymedium">' . $langs->trans(
"NoRecordFound") .
'</span></td></tr>';
1776 $colspan = 1 + ($showuserlogin ? 1 : 0);
1777 foreach ($arrayfields as $key => $val) {
1778 if (!empty($val[
'checked'])) {
1782 print
'<tr><td colspan="' . $colspan .
'"><span class="opacitymedium">' . $langs->trans(
"None") .
'</span></td></tr>';
1784 print
"\n</table>\n";
1787 print
'</form>' .
"\n";
1835function show_actions_done($conf, $langs, $db, $filterobj, $objcon =
null, $noprint = 0, $actioncode =
'', $donetodo =
'done', $filters = array(), $sortfield =
'a.datep,a.id', $sortorder =
'DESC', $module =
'')
1837 global $hookmanager, $user;
1840 global $param, $massactionbutton;
1842 $start_year =
GETPOSTINT(
'dateevent_startyear');
1843 $start_month =
GETPOSTINT(
'dateevent_startmonth');
1844 $start_day =
GETPOSTINT(
'dateevent_startday');
1846 $end_month =
GETPOSTINT(
'dateevent_endmonth');
1851 if (!empty($start_year) && !empty($start_month) && !empty($start_day)) {
1852 $tms_start =
dol_mktime(0, 0, 0, $start_month, $start_day, $start_year,
'tzuserrel');
1854 if (!empty($end_year) && !empty($end_month) && !empty($end_day)) {
1855 $tms_end =
dol_mktime(23, 59, 59, $end_month, $end_day, $end_year,
'tzuserrel');
1857 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
1861 require_once DOL_DOCUMENT_ROOT .
'/comm/action/class/actioncomm.class.php';
1864 if (!is_object($filterobj) && !is_object($objcon)) {
1874 $sortfield_list = explode(
',', $sortfield);
1875 $sortfield_label_list = array(
'a.id' =>
'id',
'a.datep' =>
'dp',
'a.percent' =>
'percent');
1876 $sortfield_new_list = array();
1877 foreach ($sortfield_list as $sortfield_value) {
1878 $sortfield_new_list[] = $sortfield_label_list[trim($sortfield_value)];
1880 $sortfield_new = implode(
',', $sortfield_new_list);
1882 $complete = (string) (!empty($filters[
'search_complete']) ? $filters[
'search_complete']:
'');
1883 $percent = $complete !==
'' ? $complete : -1;
1884 if ((
string) $complete ==
'0') {
1886 } elseif ((
int) $complete == 100) {
1894 $hookmanager->initHooks(array(
'agendadao'));
1896 $sql =
"SELECT a.id, a.label as label,";
1897 $sql .=
" a.datep as dp,";
1898 $sql .=
" a.datep2 as dp2,";
1899 $sql .=
" a.percent as percent, 'action' as type,";
1900 $sql .=
" a.fk_element, a.elementtype,";
1901 $sql .=
" a.fk_contact,";
1903 $sql .=
" c.code as acode, c.libelle as alabel, c.picto as apicto,";
1904 $sql .=
" u.rowid as user_id, u.login as user_login, u.photo as user_photo, u.firstname as user_firstname, u.lastname as user_lastname";
1905 if (is_object($filterobj) && in_array(get_class($filterobj), array(
'Societe',
'Client',
'Fournisseur'))) {
1906 $sql .=
", sp.lastname, sp.firstname";
1907 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Dolresource') {
1909 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Project') {
1911 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Adherent') {
1912 $sql .=
", m.lastname, m.firstname";
1913 } elseif (is_object($filterobj) && get_class($filterobj) ==
'CommandeFournisseur') {
1915 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Product') {
1917 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Ticket') {
1919 } elseif (is_object($filterobj) && get_class($filterobj) ==
'BOM') {
1921 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Contrat') {
1923 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Expedition') {
1925 } elseif (is_object($filterobj) && is_array($filterobj->fields) && is_array($filterobj->fields[
'rowid']) && $filterobj->table_element && $filterobj->element) {
1926 if (!empty($filterobj->fields[
'ref'])) {
1928 } elseif (!empty($filterobj->fields[
'label'])) {
1929 $sql .=
", o.label";
1934 if (!$user->hasRight(
'agenda',
'myactions',
'read')) {
1937 if (!$user->hasRight(
'agenda',
'allactions',
'read')) {
1940 if (!$user->hasRight(
'agenda',
'allactions',
'read')) {
1941 $filters[
'search_filtert'] = (string) $user->id;
1945 $parameters = array(
'sql' => &$sql,
'filterobj' => $filterobj,
'objcon' => $objcon);
1946 $reshook = $hookmanager->executeHooks(
'showActionsDoneListSelect', $parameters);
1947 if (!empty($hookmanager->resPrint)) {
1948 $sql .= $hookmanager->resPrint;
1951 $sql .=
" FROM " . MAIN_DB_PREFIX .
"actioncomm as a";
1953 $sql .=
" LEFT JOIN " . MAIN_DB_PREFIX .
"user as u on u.rowid = a.fk_user_action";
1955 $sql .=
" LEFT JOIN " . MAIN_DB_PREFIX .
"c_actioncomm as c ON a.fk_action = c.id";
1960 $force_filter_contact =
false;
1961 if (is_object($filterobj) && $filterobj->id > 0 && get_class($filterobj) ==
'User') {
1962 $force_filter_contact =
true;
1964 if (is_object($objcon) && $objcon->id > 0) {
1965 $force_filter_contact =
true;
1969 $parameters = array(
'sql' => &$sql,
'filterobj' => $filterobj,
'objcon' => $objcon);
1970 $reshook = $hookmanager->executeHooks(
'showActionsDoneListFrom', $parameters);
1971 if (!empty($hookmanager->resPrint)) {
1972 $sql .= $hookmanager->resPrint;
1974 if (is_object($filterobj) && in_array(get_class($filterobj), array(
'Societe',
'Client',
'Fournisseur'))) {
1975 $sql .=
" LEFT JOIN " . MAIN_DB_PREFIX .
"socpeople as sp ON a.fk_contact = sp.rowid";
1976 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Dolresource') {
1977 $sql .=
" INNER JOIN " . MAIN_DB_PREFIX .
"element_resources as er";
1978 $sql .=
" ON er.resource_type = 'dolresource'";
1979 $sql .=
" AND er.element_type = 'action'";
1980 $sql .=
" AND er.element_id = a.id";
1981 $sql .=
" AND er.resource_id = " . ((int) $filterobj->id);
1982 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Project') {
1984 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Adherent') {
1985 $sql .=
", " . MAIN_DB_PREFIX .
"adherent as m";
1986 } elseif (is_object($filterobj) && get_class($filterobj) ==
'CommandeFournisseur') {
1987 $sql .=
", " . MAIN_DB_PREFIX .
"commande_fournisseur as o";
1988 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Product') {
1989 $sql .=
", " . MAIN_DB_PREFIX .
"product as o";
1990 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Ticket') {
1991 $sql .=
", " . MAIN_DB_PREFIX .
"ticket as o";
1992 } elseif (is_object($filterobj) && get_class($filterobj) ==
'BOM') {
1993 $sql .=
", " . MAIN_DB_PREFIX .
"bom_bom as o";
1994 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Contrat') {
1995 $sql .=
", " . MAIN_DB_PREFIX .
"contrat as o";
1996 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Expedition') {
1997 $sql .=
" LEFT JOIN " . MAIN_DB_PREFIX .
"expedition as s ON a.fk_element = s.rowid AND a.elementtype = 'shipping'";
1998 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Propal') {
1999 $sql .=
" LEFT JOIN " . MAIN_DB_PREFIX .
"propal as o ON a.fk_element = o.rowid AND a.elementtype = 'propal'";
2001 is_object($filterobj) && is_array($filterobj->fields) && is_array($filterobj->fields[
'rowid'])
2002 && ((!empty($filterobj->fields[
'ref']) && is_array($filterobj->fields[
'ref'])) || (!empty($filterobj->fields[
'label']) && is_array($filterobj->fields[
'label'])) || (!empty($filterobj->fields[
'titre']) && is_array($filterobj->fields[
'titre'])))
2003 && $filterobj->table_element && $filterobj->element
2005 $sql .=
", " . MAIN_DB_PREFIX . $filterobj->table_element .
" as o";
2008 $sql .=
" WHERE a.entity IN (" .
getEntity(
'agenda') .
")";
2009 if (!$force_filter_contact) {
2010 if (is_object($filterobj) && in_array(get_class($filterobj), array(
'Societe',
'Client',
'Fournisseur')) && $filterobj->id) {
2011 $sql .=
" AND a.fk_soc = " . ((int) $filterobj->id);
2012 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Dolresource') {
2014 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Project' && $filterobj->id) {
2015 $sql .=
" AND a.fk_project = " . ((int) $filterobj->id);
2016 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Adherent') {
2017 $sql .=
" AND a.fk_element = m.rowid AND a.elementtype = 'member'";
2018 if ($filterobj->id) {
2019 $sql .=
" AND a.fk_element = " . ((int) $filterobj->id);
2021 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Commande') {
2022 $sql .=
" AND a.fk_element = o.rowid AND a.elementtype = 'order'";
2023 if ($filterobj->id) {
2024 $sql .=
" AND a.fk_element = " . ((int) $filterobj->id);
2026 } elseif (is_object($filterobj) && get_class($filterobj) ==
'CommandeFournisseur') {
2027 $sql .=
" AND a.fk_element = o.rowid AND a.elementtype = 'order_supplier'";
2028 if ($filterobj->id) {
2029 $sql .=
" AND a.fk_element = " . ((int) $filterobj->id);
2031 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Facture') {
2032 $sql .=
" AND a.fk_element = o.rowid AND a.elementtype = 'invoice'";
2033 if ($filterobj->id) {
2034 $sql .=
" AND a.fk_element = " . ((int) $filterobj->id);
2036 } elseif (is_object($filterobj) && get_class($filterobj) ==
'FactureFournisseur') {
2037 $sql .=
" AND a.fk_element = o.rowid AND a.elementtype = 'invoice_supplier'";
2038 if ($filterobj->id) {
2039 $sql .=
" AND a.fk_element = " . ((int) $filterobj->id);
2041 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Product') {
2042 $sql .=
" AND a.fk_element = o.rowid AND a.elementtype = 'product'";
2043 if ($filterobj->id) {
2044 $sql .=
" AND a.fk_element = " . ((int) $filterobj->id);
2046 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Ticket') {
2047 $sql .=
" AND a.fk_element = o.rowid AND a.elementtype = 'ticket'";
2048 if ($filterobj->id) {
2049 $sql .=
" AND a.fk_element = " . ((int) $filterobj->id);
2051 } elseif (is_object($filterobj) && get_class($filterobj) ==
'BOM') {
2052 $sql .=
" AND a.fk_element = o.rowid AND a.elementtype = 'bom'";
2053 if ($filterobj->id) {
2054 $sql .=
" AND a.fk_element = " . ((int) $filterobj->id);
2056 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Contrat') {
2057 $sql .=
" AND a.fk_element = o.rowid AND a.elementtype = 'contract'";
2058 if ($filterobj->id) {
2059 $sql .=
" AND a.fk_element = " . ((int) $filterobj->id);
2061 } elseif (is_object($filterobj) && get_class($filterobj) ==
'Expedition') {
2062 $sql .=
" AND a.fk_element = s.rowid AND a.elementtype = 'shipping'";
2063 if ($filterobj->id) {
2064 $sql .=
" AND a.fk_element = " . ((int) $filterobj->id);
2067 is_object($filterobj) && is_array($filterobj->fields) && is_array($filterobj->fields[
'rowid'])
2068 && ((!empty($filterobj->fields[
'ref']) && is_array($filterobj->fields[
'ref'])) || (!empty($filterobj->fields[
'label']) && is_array($filterobj->fields[
'label'])) || (!empty($filterobj->fields[
'titre']) && is_array($filterobj->fields[
'titre'])))
2069 && $filterobj->table_element && $filterobj->element
2072 $sql .=
" AND a.fk_element = o.rowid AND a.elementtype = '" . $db->escape($filterobj->element) . ($module ?
"@" . $module :
"") .
"'";
2073 if ($filterobj->id) {
2074 $sql .=
" AND a.fk_element = " . ((int) $filterobj->id);
2076 } elseif (is_object($filterobj)) {
2077 return 'Bad value for $filterobj';
2080 if (is_object($filterobj) && $filterobj->id > 0 && get_class($filterobj) ==
'User') {
2081 $sql .=
" AND (u.rowid = " . ((int) $filterobj->id) .
' OR ';
2082 $sql .=
" EXISTS (SELECT r.rowid FROM " . MAIN_DB_PREFIX .
"actioncomm_resources as r WHERE a.id = r.fk_actioncomm";
2083 $sql .=
" AND r.element_type = '" . $db->escape($filterobj->table_element) .
"' AND r.fk_element = " . ((int) $filterobj->id) .
')';
2086 if (is_object($objcon) && $objcon->id > 0) {
2087 $sql .=
" AND EXISTS (SELECT r.rowid FROM " . MAIN_DB_PREFIX .
"actioncomm_resources as r WHERE a.id = r.fk_actioncomm";
2088 $sql .=
" AND r.element_type = '" . $db->escape($objcon->table_element) .
"' AND r.fk_element = " . ((int) $objcon->id) .
')';
2092 if (!empty($tms_start) && !empty($tms_end)) {
2093 $sql .=
" AND ((a.datep BETWEEN '" . $db->idate($tms_start) .
"' AND '" . $db->idate($tms_end) .
"') OR (a.datep2 BETWEEN '" . $db->idate($tms_start) .
"' AND '" . $db->idate($tms_end) .
"'))";
2094 } elseif (empty($tms_start) && !empty($tms_end)) {
2095 $sql .=
" AND ((a.datep <= '" . $db->idate($tms_end) .
"') OR (a.datep2 <= '" . $db->idate($tms_end) .
"'))";
2096 } elseif (!empty($tms_start) && empty($tms_end)) {
2097 $sql .=
" AND ((a.datep >= '" . $db->idate($tms_start) .
"') OR (a.datep2 >= '" . $db->idate($tms_start) .
"'))";
2100 if (is_array($actioncode) && !empty($actioncode)) {
2103 foreach ($actioncode as $key => $code) {
2104 if ((
string) $code ===
'-1' || (
string) $code ===
'') {
2110 if (!empty($code)) {
2119 } elseif (!empty($actioncode) && $actioncode !=
'-1') {
2126 $parameters = array(
'sql' => &$sql,
'filterobj' => $filterobj,
'objcon' => $objcon,
'module' => $module);
2127 $reshook = $hookmanager->executeHooks(
'showActionsDoneListWhere', $parameters);
2128 if (!empty($hookmanager->resPrint)) {
2129 $sql .= $hookmanager->resPrint;
2133 if (is_array($actioncode) && $objcon !==
null) {
2134 foreach ($actioncode as $code) {
2136 if (!empty($sql2)) {
2138 $sql = $sql .
" UNION " . $sql2;
2139 } elseif (empty($sql)) {
2147 if (!empty($sql) && !empty($sql2)) {
2148 $sql = $sql .
" UNION " . $sql2;
2149 } elseif (empty($sql) && !empty($sql2)) {
2155 $MAXWITHOUTPAGINATION =
getDolGlobalInt(
'AGENDA_MAX_EVENTS_ON_PAGE_WITHOUT_PAGINATION', 100);
2161 $limit = $MAXWITHOUTPAGINATION;
2164 $sql .= $db->order($sortfield_new, $sortorder);
2166 $sql .= $db->plimit($limit + 1, $offset);
2169 dol_syslog(
"company.lib::show_actions_done", LOG_DEBUG);
2171 $resql = $db->query($sql);
2174 $num = $db->num_rows($resql);
2176 $imaxinloop = ($limit ? min($num, $limit) : $num);
2177 while ($i < $imaxinloop) {
2178 $obj = $db->fetch_object($resql);
2183 if ($obj->type ==
'action') {
2185 $contactaction->id = $obj->id;
2186 $result = $contactaction->fetchResources();
2189 setEventMessage(
"company.lib::show_actions_done Error fetch resource",
'errors');
2195 if (($obj->percent >= 0 and $obj->percent < 100) || ($obj->percent == -1 && (!empty($obj->datep) && $obj->datep > $now))) {
2199 $histo[$numaction] = array(
2200 'type' => $obj->type,
2201 'tododone' => $tododone,
2202 'id' => (
int) $obj->id,
2203 'datestart' => $db->jdate($obj->dp),
2204 'dateend' => $db->jdate($obj->dp2),
2205 'note' => $obj->label,
2206 'percent' => (
int) $obj->percent,
2208 'userid' => (
int) $obj->user_id,
2209 'login' => $obj->user_login,
2210 'userfirstname' => $obj->user_firstname,
2211 'userlastname' => $obj->user_lastname,
2212 'userphoto' => $obj->user_photo,
2214 'contact_id' => (
int) $obj->fk_contact,
2215 'socpeopleassigned' => $contactaction->socpeopleassigned,
2216 'lastname' => empty($obj->lastname) ?
'' : $obj->lastname,
2217 'firstname' => empty($obj->firstname) ?
'' : $obj->firstname,
2218 'fk_element' => (int) $obj->fk_element,
2219 'elementtype' => $obj->elementtype,
2221 'code' => $obj->code,
2224 'acode' => $obj->acode,
2225 'alabel' => $obj->alabel,
2226 'libelle' => $obj->alabel,
2227 'apicto' => $obj->apicto
2230 $histo[$numaction] = array(
2231 'type' => $obj->type,
2232 'tododone' =>
'done',
2233 'id' => (
int) $obj->id,
2234 'datestart' => $db->jdate($obj->dp),
2235 'dateend' => $db->jdate($obj->dp2),
2236 'note' => $obj->label,
2237 'percent' => (
int) $obj->percent,
2239 'code' => $obj->code,
2242 'acode' => $obj->acode,
2244 'userid' => (
int) $obj->user_id,
2245 'login' => $obj->user_login,
2246 'userfirstname' => $obj->user_firstname,
2247 'userlastname' => $obj->user_lastname,
2248 'userphoto' => $obj->user_photo
2260 '@phan-var-force array<int,array{userid:int,type:string,tododone:string,apicto:string,acode:string,alabel:string,note:string,id:int,percent:int<0,100>,datestart:int,dateend:int,fk_element:string,elementtype:string,contact_id:int,lastname:string,firstname:string,contact_photo:string,socpeopleassigned:int[],login:string,userfirstname:string,userlastname:string,userphoto:string}> $histo';
2263 $delay_warning =
getDolGlobalInt(
'MAIN_DELAY_ACTIONS_TODO') * 24 * 60 * 60;
2265 require_once DOL_DOCUMENT_ROOT .
'/comm/action/class/actioncomm.class.php';
2266 include_once DOL_DOCUMENT_ROOT .
'/core/lib/functions2.lib.php';
2267 require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formactions.class.php';
2268 require_once DOL_DOCUMENT_ROOT .
'/contact/class/contact.class.php';
2273 $userstatic =
new User($db);
2274 $userlinkcache = array();
2275 $contactstatic =
new Contact($db);
2276 $elementlinkcache = array();
2278 $out .=
'<form name="listactionsfilter" class="listactionsfilter" action="' . $_SERVER[
"PHP_SELF"] .
'" method="POST">';
2279 $out .=
'<input type="hidden" name="token" value="' .
newToken() .
'">';
2281 $objcon && get_class($objcon) ==
'Contact' &&
2282 (is_null($filterobj) || get_class($filterobj) ==
'Societe')
2284 $out .=
'<input type="hidden" name="id" value="' . $objcon->id .
'" />';
2286 $out .=
'<input type="hidden" name="id" value="' . $filterobj->id .
'" />';
2288 if ($filterobj && get_class($filterobj) ==
'Societe') {
2289 $out .=
'<input type="hidden" name="socid" value="' . $filterobj->id .
'" />';
2291 $out .=
'<input type="hidden" name="userid" value="' . $filterobj->id .
'" />';
2296 $out .=
'<div class="div-table-responsive-no-min">';
2297 $out .=
'<table class="noborder centpercent">';
2299 $out .=
'<tr class="liste_titre_filter">';
2303 $out .=
'<th class="liste_titre width50 middle">';
2304 $searchpicto = $form->showFilterAndCheckAddButtons($massactionbutton ? 1 : 0,
'checkforselect', 1);
2305 $out .= $searchpicto;
2310 $out .=
'<td class="liste_titre"></td>';
2314 $out .=
'<td class="liste_titre"><input type="text" class="width50" name="search_rowid" value="' . (isset($filters[
'search_rowid']) ? $filters[
'search_rowid'] :
'') .
'"></td>';
2316 $out .=
'<td class="liste_titre center">';
2317 $out .= $form->selectDateToDate($tms_start, $tms_end,
'dateevent', 1);
2320 $out .=
'<td class="liste_titre">';
2321 $out .= $form->select_dolusers(($filters[
'search_filtert'] > 0 ? $filters[
'search_filtert'] :
''),
'search_filtert', 1,
null, (
int) !$canedit,
'',
'',
'0', 0, 0,
'', 2,
'',
'minwidth100 maxwidth250 widthcentpercentminusx');
2324 $out .=
'<td class="liste_titre">';
2325 $out .= $formactions->select_type_actions($actioncode,
"actioncode",
'',
getDolGlobalString(
'AGENDA_USE_EVENT_TYPE') ? -1 : 1, 0, (
getDolGlobalString(
'AGENDA_USE_MULTISELECT_TYPE') ? 1 : 0), 1,
'selecttype combolargeelem minwidth100 maxwidth150', 1);
2328 $out .=
'<td class="liste_titre maxwidth100onsmartphone"><input type="text" class="maxwidth125" name="search_agenda_label" value="' . $filters[
'search_agenda_label'] .
'"></td>';
2329 $out .=
'<td class="liste_titre"></td>';
2330 $out .=
'<td class="liste_titre"></td>';
2332 $out .=
'<td class="liste_titre parentonrightofpage">';
2333 $out .= $formactions->form_select_status_action(
'formaction', $percent, 1,
'search_complete', 1, 2,
'search_status width100 onrightofpage', 1);
2337 $out .=
'<td class="liste_titre" align="middle">';
2338 $searchpicto = $form->showFilterAndCheckAddButtons($massactionbutton ? 1 : 0,
'checkforselect', 1);
2339 $out .= $searchpicto;
2344 $out .=
'<tr class="liste_titre">';
2347 $out .=
getTitleFieldOfList(
'', 0, $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'maxwidthsearch ');
2349 if ($donetodo && $filterobj !==
null) {
2351 if (get_class($filterobj) ==
'Societe') {
2352 $tmp .=
'<a href="' . DOL_URL_ROOT .
'/comm/action/list.php?mode=show_list&socid=' . $filterobj->id .
'&status=done">';
2354 if (get_class($filterobj) ==
'User') {
2355 $tmp .=
'<a href="' . DOL_URL_ROOT .
'/comm/action/list.php?mode=show_list&userid=' . $filterobj->id .
'&status=done">';
2357 $tmp .= ($donetodo !=
'done' ? $langs->trans(
"ActionsToDoShort") :
'');
2358 $tmp .= ($donetodo !=
'done' && $donetodo !=
'todo' ?
' / ' :
'');
2359 $tmp .= ($donetodo !=
'todo' ? $langs->trans(
"ActionsDoneShort") :
'');
2361 if (get_class($filterobj) ==
'Societe') {
2364 if (get_class($filterobj) ==
'User') {
2369 $out .=
getTitleFieldOfList(
"Ref", 0, $_SERVER[
"PHP_SELF"],
'a.id',
'', $param,
'', $sortfield, $sortorder);
2370 $out .=
getTitleFieldOfList(
"Date", 0, $_SERVER[
"PHP_SELF"],
'a.datep,a.id',
'', $param,
'', $sortfield, $sortorder,
'center ');
2373 $out .=
getTitleFieldOfList(
"Title", 0, $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder);
2374 $out .=
getTitleFieldOfList(
"ActionOnContact", 0, $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'tdoverflowmax125 ', 0,
'', 0);
2375 $out .=
getTitleFieldOfList(
"LinkedObject", 0, $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder);
2376 $out .=
getTitleFieldOfList(
"Status", 0, $_SERVER[
"PHP_SELF"],
'a.percent',
'', $param,
'', $sortfield, $sortorder,
'center ');
2379 $out .=
getTitleFieldOfList(
'', 0, $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'maxwidthsearch ');
2383 require_once DOL_DOCUMENT_ROOT .
'/comm/action/class/cactioncomm.class.php';
2385 $arraylist = $caction->liste_array(1,
'code',
'', (
getDolGlobalString(
'AGENDA_USE_EVENT_TYPE') ? 0 : 1),
'', 1);
2387 foreach ($histo as $key => $value) {
2388 $actionstatic->fetch($histo[$key][
'id']);
2390 if (empty($actionstatic->code)) {
2391 $actionstatic->code = $histo[$key][
'acode'];
2393 $actionstatic->type_picto = $histo[$key][
'apicto'] ??
'';
2394 $actionstatic->type_code = $histo[$key][
'acode'];
2396 $out .=
'<tr class="oddeven">';
2400 $out .=
'<td></td>';
2405 $out .=
'<td class="nowrap">';
2410 $out .=
'<td class="nowraponall">';
2411 if (isset($histo[$key][
'type']) && $histo[$key][
'type'] ==
'mailing') {
2412 $out .=
'<a href="' . DOL_URL_ROOT .
'/comm/mailing/card.php?id=' . $histo[$key][
'id'] .
'">' .
img_object($langs->trans(
"ShowEMailing"),
"email") .
' ';
2413 $out .= $histo[$key][
'id'];
2416 $out .= $actionstatic->getNomUrl(1, -1);
2421 $out .=
'<td class="center nowraponall nopaddingtopimp nopaddingbottomimp">';
2423 if (!empty($histo[$key][
'dateend'])) {
2428 if ($tmpa[
'mday'] == $tmpb[
'mday'] && $tmpa[
'mon'] == $tmpb[
'mon'] && $tmpa[
'year'] == $tmpb[
'year']) {
2430 if ($tmpa[
'hours'] != $tmpb[
'hours'] || $tmpa[
'minutes'] != $tmpb[
'minutes']) {
2431 $out .=
'<div class="center inline-block lineheightsmall">';
2432 $out .=
dol_print_date($histo[$key][
'datestart'],
'dayreduceformat',
'tzuserrel');
2433 $out .=
'<br><span class="opacitymedium hourspan">';
2434 $out .=
dol_print_date($histo[$key][
'datestart'],
'hourreduceformat',
'tzuserrel');
2435 $out .=
'-'.dol_print_date($histo[$key][
'dateend'],
'hourreduceformat',
'tzuserrel');
2439 $out .=
'<div class="center inline-block lineheightsmall">';
2440 $out .=
dol_print_date($histo[$key][
'datestart'],
'dayreduceformat',
'tzuserrel');
2441 $out .=
'<br><span class="opacitymedium hourspan">';
2442 $out .=
dol_print_date($histo[$key][
'datestart'],
'hourreduceformat',
'tzuserrel');
2448 $out .=
'<div class="center inline-block lineheightsmall">';
2449 $out .=
dol_print_date($histo[$key][
'datestart'],
'dayreduceformat',
'tzuserrel');
2450 $out .=
'<br><span class="opacitymedium hourspan">';
2451 $out .=
dol_print_date($histo[$key][
'datestart'],
'hourreduceformat',
'tzuserrel');
2455 $out .=
'<div class="center inline-block lineheightsmall">';
2456 $out .=
dol_print_date($histo[$key][
'dateend'],
'dayreduceformat',
'tzuserrel');
2457 $out .=
'<br><span class="opacitymedium hourspan">';
2458 $out .=
dol_print_date($histo[$key][
'dateend'],
'hourreduceformat',
'tzuserrel');
2464 if ($histo[$key][
'percent'] == 0 && $histo[$key][
'datestart'] && $histo[$key][
'datestart'] < ($now - $delay_warning)) {
2467 if ($histo[$key][
'percent'] == 0 && !$histo[$key][
'datestart'] && $histo[$key][
'dateend'] && $histo[$key][
'datestart'] < ($now - $delay_warning)) {
2470 if ($histo[$key][
'percent'] > 0 && $histo[$key][
'percent'] < 100 && $histo[$key][
'dateend'] && $histo[$key][
'dateend'] < ($now - $delay_warning)) {
2473 if ($histo[$key][
'percent'] > 0 && $histo[$key][
'percent'] < 100 && !$histo[$key][
'dateend'] && $histo[$key][
'datestart'] && $histo[$key][
'datestart'] < ($now - $delay_warning)) {
2482 $out .=
'<td class="tdoverflowmax125">';
2483 if ($histo[$key][
'userid'] > 0) {
2484 if (isset($userlinkcache[$histo[$key][
'userid']])) {
2485 $link = $userlinkcache[$histo[$key][
'userid']];
2487 $userstatic->fetch($histo[$key][
'userid']);
2488 $link = $userstatic->getNomUrl(-1,
'', 0, 0, 16, 0,
'firstelselast',
'');
2489 $userlinkcache[$histo[$key][
'userid']] = $link;
2499 $labelOfTypeToShow = $actionstatic->type_code;
2501 $code = $actionstatic->code;
2502 if (!
getDolGlobalString(
'AGENDA_USE_EVENT_TYPE') && empty($arraylist[$labelOfTypeToShow])) {
2503 $labelOfTypeToShow =
'AC_OTH';
2505 if (!empty($actionstatic->code) && preg_match(
'/^TICKET_MSG/', $actionstatic->code)) {
2506 $labelOfTypeToShow = $langs->trans(
"Message");
2508 if (!empty($arraylist[$labelOfTypeToShow])) {
2509 $labelOfTypeToShow = $arraylist[$labelOfTypeToShow];
2510 } elseif ($actionstatic->type_code ==
'AC_EMAILING') {
2511 $langs->load(
"mails");
2512 $labelOfTypeToShow = $langs->trans(
"Emailing");
2514 if ($actionstatic->type_code ==
'AC_OTH_AUTO' && ($actionstatic->type_code != $actionstatic->code) && $labelOfTypeToShow && !empty($arraylist[$actionstatic->code])) {
2515 $labelOfTypeToShow .=
' - ' . $arraylist[$actionstatic->code];
2519 $labelOfTypeToShowLong = $labelOfTypeToShow;
2520 if ($actionstatic->type_code ==
'AC_OTH_AUTO') {
2521 $labelOfTypeToShowLong .=
' (auto)';
2524 $out .=
'<td class="tdoverflowmax125" title="' . $labelOfTypeToShowLong .
'">';
2526 $out .= $actionstatic->getTypePicto();
2527 $out .= $labelOfTypeToShow;
2531 $out .=
'<td class="tdoverflowmax300"';
2532 if (isset($histo[$key][
'type']) && $histo[$key][
'type'] ==
'action') {
2533 $transcode = $langs->trans(
"Action" . $histo[$key][
'acode']);
2535 $label = $histo[$key][
'note'];
2536 $actionstatic->id = $histo[$key][
'id'];
2540 if (isset($histo[$key][
'type']) && $histo[$key][
'type'] ==
'mailing') {
2541 $transcode = $langs->trans(
"Action" . $histo[$key][
'acode']);
2542 $label = ($transcode !=
"Action" . $histo[$key][
'acode'] ? $transcode :
'Send mass mailing');
2543 $label .=
' - ' . $histo[$key][
'note'];
2544 $out .=
'<a href="' . DOL_URL_ROOT .
'/comm/mailing/card.php?id=' . $histo[$key][
'id'] .
'"';
2553 if (isset($histo[$key][
'socpeopleassigned']) && is_array($histo[$key][
'socpeopleassigned']) && count($histo[$key][
'socpeopleassigned']) > 0) {
2554 $out .=
'<td class="valignmiddle">';
2556 foreach ($histo[$key][
'socpeopleassigned'] as $cid => $cvalue) {
2557 $result = $contact->fetch($cid);
2561 } elseif ($result > 0) {
2562 if (count($histo[$key][
'socpeopleassigned']) > 1) {
2563 $out .= $contact->getNomUrl(-2,
'', 0,
'', -1, 0,
'paddingright');
2565 $out .= $contact->getNomUrl(-3,
'', 0,
'', -1, 0,
'paddingright');
2566 if (isset($histo[$key][
'acode']) && $histo[$key][
'acode'] ==
'AC_TEL') {
2567 if (!empty($contact->phone_pro)) {
2575 } elseif (empty($objcon->id) && isset($histo[$key][
'contact_id']) && $histo[$key][
'contact_id'] > 0) {
2576 $contactstatic->lastname = $histo[$key][
'lastname'];
2577 $contactstatic->firstname = $histo[$key][
'firstname'];
2578 $contactstatic->id = $histo[$key][
'contact_id'];
2579 $contactstatic->photo = $histo[$key][
'contact_photo'];
2580 $out .=
'<td width="120">' . $contactstatic->getNomUrl(-1,
'', 10) .
'</td>';
2582 $out .=
'<td> </td>';
2586 $out .=
'<td class="tdoverflowmax200 nowraponall">';
2587 if (isset($histo[$key][
'elementtype']) && !empty($histo[$key][
'fk_element'])) {
2588 if (isset($elementlinkcache[$histo[$key][
'elementtype']]) && isset($elementlinkcache[$histo[$key][
'elementtype']][$histo[$key][
'fk_element']])) {
2589 $link = $elementlinkcache[$histo[$key][
'elementtype']][$histo[$key][
'fk_element']];
2591 if (!isset($elementlinkcache[$histo[$key][
'elementtype']])) {
2592 $elementlinkcache[$histo[$key][
'elementtype']] = array();
2594 $link =
dolGetElementUrl((
int) $histo[$key][
'fk_element'], $histo[$key][
'elementtype'], 1);
2595 $elementlinkcache[$histo[$key][
'elementtype']][$histo[$key][
'fk_element']] = $link;
2602 $out .=
'<td class="nowrap center">';
2603 $out .= $actionstatic->LibStatut($histo[$key][
'percent'], 2, 0, $histo[$key][
'datestart']);
2608 $out .=
'<td></td>';
2613 if (empty($histo)) {
2615 $out .=
'<tr><td colspan="' . $colspan .
'"><span class="opacitymedium">' . $langs->trans(
"NoRecordFound") .
'</span></td></tr>';
2618 if ($num > $MAXWITHOUTPAGINATION) {
2619 $langs->load(
"errors");
2621 $out .=
'<tr><td class="center" colspan="' . $colspan .
'"><span class="opacitymedium">...' . $langs->trans(
"WarningTooManyDataPleaseUseMoreFilters", $MAXWITHOUTPAGINATION) .
'...</span></td></tr>';
2624 $out .=
"</table>\n";