* Copyright (C) 2004-2018 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2014-2021 Charlene Benke * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2016 Ferran Marcet * Copyright (C) 2019 Nicolas ZABOURI * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file htdocs/societe/index.php * \ingroup societe * \brief Home page for third parties area */ // Load Dolibarr environment require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->load("companies"); // Initialize a technical object to manage hooks. Note that conf->hooks_modules contains array $hookmanager = new HookManager($db); $hookmanager->initHooks(array('thirdpartiesindex')); $socid = GETPOSTINT('socid'); if ($user->socid) { $socid = $user->socid; } // Security check $result = restrictedArea($user, 'societe|contact', 0, '', '', '', ''); $thirdparty_static = new Societe($db); $contact_static = new Contact($db); if (!isset($form) || !is_object($form)) { $form = new Form($db); } // Load $resultboxes $resultboxes = FormOther::getBoxesArea($user, "3"); if (GETPOST('addbox')) { // Add box (when submit is done from a form when ajax disabled) require_once DOL_DOCUMENT_ROOT.'/core/class/infobox.class.php'; $zone = GETPOSTINT('areacode'); $userid = GETPOSTINT('userid'); $boxorder = GETPOST('boxorder', 'aZ09'); $boxorder .= GETPOST('boxcombo', 'aZ09'); $result = InfoBox::saveboxorder($db, $zone, $boxorder, $userid); if ($result > 0) { setEventMessages($langs->trans("BoxAdded"), null); } } $max = getDolGlobalInt('MAIN_SIZE_SHORTLIST_LIMIT', 5); /* * View */ $transAreaType = $langs->trans("ThirdPartiesArea"); $helpurl = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Módulo_Terceros'; llxHeader("", $langs->trans("ThirdParties"), $helpurl); print load_fiche_titre($transAreaType, $resultboxes['selectboxlist'], 'companies'); // Statistics area $third = array( 'customer' => 0, 'prospect' => 0, 'supplier' => 0, 'other' =>0 ); $total = 0; $sql = "SELECT s.rowid, s.client, s.fournisseur"; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s"; if (!$user->hasRight('societe', 'client', 'voir')) { $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; } $sql .= ' WHERE s.entity IN ('.getEntity('societe').')'; if (!$user->hasRight('societe', 'client', 'voir')) { $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".((int) $user->id); } if (!$user->hasRight('fournisseur', 'lire')) { $sql .= " AND (s.fournisseur <> 1 OR s.client <> 0)"; // client=0, fournisseur=0 must be visible } // Add where from hooks $parameters = array('socid' => $socid); $reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $thirdparty_static); // Note that $action and $object may have been modified by hook if (empty($reshook)) { if ($socid > 0) { $sql .= " AND s.rowid = ".((int) $socid); } } $sql .= $hookmanager->resPrint; //print $sql; $result = $db->query($sql); if ($result) { while ($objp = $db->fetch_object($result)) { $found = 0; if (isModEnabled('societe') && $user->hasRight('societe', 'lire') && !getDolGlobalString('SOCIETE_DISABLE_PROSPECTS') && !getDolGlobalString('SOCIETE_DISABLE_PROSPECTS_STATS') && ($objp->client == 2 || $objp->client == 3)) { $found = 1; $third['prospect']++; } if (isModEnabled('societe') && $user->hasRight('societe', 'lire') && !getDolGlobalString('SOCIETE_DISABLE_CUSTOMERS') && !getDolGlobalString('SOCIETE_DISABLE_CUSTOMERS_STATS') && ($objp->client == 1 || $objp->client == 3)) { $found = 1; $third['customer']++; } if (((isModEnabled('fournisseur') && $user->hasRight('fournisseur', 'lire') && !getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD')) || (isModEnabled('supplier_order') && $user->hasRight('supplier_order', 'lire')) || (isModEnabled('supplier_invoice') && $user->hasRight('supplier_invoice', 'lire'))) && !getDolGlobalString('SOCIETE_DISABLE_SUPPLIERS_STATS') && $objp->fournisseur) { $found = 1; $third['supplier']++; } if (isModEnabled('societe') && $objp->client == 0 && $objp->fournisseur == 0) { $found = 1; $third['other']++; } if ($found) { $total++; } } } else { dol_print_error($db); } $thirdpartygraph = '
'; $thirdpartygraph .= ''."\n"; $thirdpartygraph .= ''; if (!empty($conf->use_javascript_ajax) && ((round($third['prospect']) ? 1 : 0) + (round($third['customer']) ? 1 : 0) + (round($third['supplier']) ? 1 : 0) + (round($third['other']) ? 1 : 0) >= 2)) { $thirdpartygraph .= ''."\n"; } else { $statstring = ''; if (isModEnabled('societe') && $user->hasRight('societe', 'lire') && !getDolGlobalString('SOCIETE_DISABLE_PROSPECTS') && !getDolGlobalString('SOCIETE_DISABLE_PROSPECTS_STATS')) { $statstring .= ""; $statstring .= ''; $statstring .= ""; } if (isModEnabled('societe') && $user->hasRight('societe', 'lire') && !getDolGlobalString('SOCIETE_DISABLE_CUSTOMERS') && !getDolGlobalString('SOCIETE_DISABLE_CUSTOMERS_STATS')) { $statstring .= ""; $statstring .= ''; $statstring .= ""; } $statstring2 = ''; if (((isModEnabled('fournisseur') && $user->hasRight('fournisseur', 'lire') && !getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD')) || (isModEnabled('supplier_order') && $user->hasRight('supplier_order', 'lire')) || (isModEnabled('supplier_invoice') && $user->hasRight('supplier_invoice', 'lire'))) && !getDolGlobalString('SOCIETE_DISABLE_SUPPLIERS_STATS')) { $statstring2 .= ""; $statstring2 .= ''; $statstring2 .= ""; } $thirdpartygraph .= $statstring; $thirdpartygraph .= $statstring2; } $thirdpartygraph .= ''; $thirdpartygraph .= '
'.$langs->trans("Statistics").'
'; $dataseries = array(); if (isModEnabled('societe') && $user->hasRight('societe', 'lire') && !getDolGlobalString('SOCIETE_DISABLE_PROSPECTS') && !getDolGlobalString('SOCIETE_DISABLE_PROSPECTS_STATS')) { $dataseries[] = array($langs->transnoentitiesnoconv("Prospects"), round($third['prospect'])); } if (isModEnabled('societe') && $user->hasRight('societe', 'lire') && !getDolGlobalString('SOCIETE_DISABLE_CUSTOMERS') && !getDolGlobalString('SOCIETE_DISABLE_CUSTOMERS_STATS')) { $dataseries[] = array($langs->transnoentitiesnoconv("Customers"), round($third['customer'])); } if (((isModEnabled('fournisseur') && $user->hasRight('fournisseur', 'lire') && !getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD')) || (isModEnabled('supplier_order') && $user->hasRight('supplier_order', 'lire')) || (isModEnabled('supplier_invoice') && $user->hasRight('supplier_invoice', 'lire'))) && !getDolGlobalString('SOCIETE_DISABLE_SUPPLIERS_STATS')) { $dataseries[] = array($langs->transnoentitiesnoconv("Suppliers"), round($third['supplier'])); } if (isModEnabled('societe')) { $dataseries[] = array($langs->transnoentitiesnoconv("Others"), round($third['other'])); } include_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php'; $dolgraph = new DolGraph(); $dolgraph->SetData($dataseries); $dolgraph->setShowLegend(2); $dolgraph->setShowPercent(1); $dolgraph->SetType(array('pie')); $dolgraph->setHeight('200'); $dolgraph->draw('idgraphthirdparties'); $thirdpartygraph .= $dolgraph->show(); $thirdpartygraph .= '
'.$langs->trans("Prospects").''.round($third['prospect']).'
'.$langs->trans("Customers").''.round($third['customer']).'
'.$langs->trans("Suppliers").''.round($third['supplier']).'
'.$langs->trans("UniqueThirdParties").''; $thirdpartygraph .= $total; $thirdpartygraph .= '
'; $thirdpartygraph .= '
'; $thirdpartycateggraph = ''; if (isModEnabled('category') && getDolGlobalString('CATEGORY_GRAPHSTATS_ON_THIRDPARTIES')) { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; $elementtype = 'societe'; $thirdpartycateggraph = '
'; $thirdpartycateggraph .= ''; $thirdpartycateggraph .= ''; $thirdpartycateggraph .= ''; $total += $obj->nb; $i++; } } } $thirdpartycateggraph .= ''; $thirdpartycateggraph .= ''; $thirdpartycateggraph .= '
'.$langs->trans("Categories").'
'; $sql = "SELECT c.label, count(*) as nb"; $sql .= " FROM ".MAIN_DB_PREFIX."categorie_societe as cs"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."categorie as c ON cs.fk_categorie = c.rowid"; $sql .= " WHERE c.type = 2"; if (!is_numeric(getDolGlobalString('CATEGORY_GRAPHSTATS_ON_THIRDPARTIES'))) { $sql .= " AND c.label like '".$db->escape($conf->global->CATEGORY_GRAPHSTATS_ON_THIRDPARTIES)."'"; } $sql .= " AND c.entity IN (".getEntity('category').")"; $sql .= " GROUP BY c.label"; $total = 0; $result = $db->query($sql); if ($result) { $num = $db->num_rows($result); $i = 0; if (!empty($conf->use_javascript_ajax)) { $dataseries = array(); $rest = 0; $nbmax = 10; while ($i < $num) { $obj = $db->fetch_object($result); if ($i < $nbmax) { $dataseries[] = array($obj->label, round($obj->nb)); } else { $rest += $obj->nb; } $total += $obj->nb; $i++; } if ($i > $nbmax) { $dataseries[] = array($langs->trans("Other"), round($rest)); } include_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php'; $dolgraph = new DolGraph(); $dolgraph->SetData($dataseries); $dolgraph->setShowLegend(2); $dolgraph->setShowPercent(1); $dolgraph->SetType(array('pie')); $dolgraph->setHeight('200'); $dolgraph->draw('idgraphcateg'); $thirdpartycateggraph .= $dolgraph->show(); } else { while ($i < $num) { $obj = $db->fetch_object($result); $thirdpartycateggraph .= '
'.$obj->label.''.$obj->nb.'
'.$langs->trans("Total").''; $thirdpartycateggraph .= $total; $thirdpartycateggraph .= '
'; $thirdpartycateggraph .= '
'; } else { $thirdpartycateggraph = ''; } /* * Latest modified third parties */ $sql = "SELECT s.rowid, s.nom as name, s.email, s.client, s.fournisseur"; $sql .= ", s.code_client"; $sql .= ", s.code_fournisseur"; if (getDolGlobalString('MAIN_COMPANY_PERENTITY_SHARED')) { $sql .= ", spe.accountancy_code_supplier as code_compta_fournisseur"; $sql .= ", spe.accountancy_code_customer as code_compta"; } else { $sql .= ", s.code_compta_fournisseur"; $sql .= ", s.code_compta"; } $sql .= ", s.logo"; $sql .= ", s.entity"; $sql .= ", s.canvas, s.tms as date_modification, s.status as status"; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s"; if (getDolGlobalString('MAIN_COMPANY_PERENTITY_SHARED')) { $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe_perentity as spe ON spe.fk_soc = s.rowid AND spe.entity = " . ((int) $conf->entity); } // TODO Replace this if (!$user->hasRight('societe', 'client', 'voir')) { $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; } $sql .= ' WHERE s.entity IN ('.getEntity('societe').')'; if (!$user->hasRight('societe', 'client', 'voir')) { $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".((int) $user->id); } if (!$user->hasRight('fournisseur', 'lire')) { $sql .= " AND (s.fournisseur != 1 OR s.client != 0)"; } // Add where from hooks $parameters = array('socid' => $socid); $reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $thirdparty_static); // Note that $action and $object may have been modified by hook if (empty($reshook)) { if ($socid > 0) { $sql .= " AND s.rowid = ".((int) $socid); } } $sql .= $hookmanager->resPrint; $sql .= $db->order("s.tms", "DESC"); $sql .= $db->plimit($max, 0); //print $sql; $lastmodified=""; $result = $db->query($sql); if ($result) { $num = $db->num_rows($result); $i = 0; if ($num > 0) { $transRecordedType = $langs->trans("LastModifiedThirdParties", $max); $lastmodified = "\n\n"; $lastmodified .= '
'; $lastmodified .= ''; $lastmodified .= ''; $lastmodified .= ''; $lastmodified .= ''; $lastmodified .= ''."\n"; while ($i < $num) { $objp = $db->fetch_object($result); $thirdparty_static->id = $objp->rowid; $thirdparty_static->name = $objp->name; $thirdparty_static->client = $objp->client; $thirdparty_static->fournisseur = $objp->fournisseur; $thirdparty_static->logo = $objp->logo; $thirdparty_static->date_modification = $db->jdate($objp->date_modification); $thirdparty_static->status = $objp->status; $thirdparty_static->code_client = $objp->code_client; $thirdparty_static->code_fournisseur = $objp->code_fournisseur; $thirdparty_static->canvas = $objp->canvas; $thirdparty_static->email = $objp->email; $thirdparty_static->entity = $objp->entity; $thirdparty_static->code_compta_fournisseur = $objp->code_compta_fournisseur; $thirdparty_static->code_compta_client = $objp->code_compta; $lastmodified .= ''; // Name $lastmodified .= '\n"; // Type $lastmodified .= ''; // Last modified date $lastmodified .= '"; $lastmodified .= '"; $lastmodified .= "\n"; $i++; } $db->free($result); $lastmodified .= "
'; //$lastmodified .= img_picto('', 'company', 'class="pictofixedwidth"'); $lastmodified .= ''.$transRecordedType.''; $lastmodified .= ''; $lastmodified .= '...'; $lastmodified .= ''; $lastmodified .= ' '; $lastmodified .= '
'; $lastmodified .= $thirdparty_static->getNomUrl(1); $lastmodified .= "'; $lastmodified .= $thirdparty_static->getTypeUrl(); $lastmodified .= 'date_modification, 'dayhour', 'tzuserrel')).'">'; $lastmodified .= dol_print_date($thirdparty_static->date_modification, 'day', 'tzuserrel'); $lastmodified .= "'; $lastmodified .= $thirdparty_static->getLibStatut(3); $lastmodified .= "
\n"; $lastmodified .= '
'; $lastmodified .= "\n"; } } else { dol_print_error($db); } /* * Latest modified contacts */ $sql = "SELECT s.rowid, s.nom as name, s.email, s.client, s.fournisseur"; $sql .= ", s.code_client"; $sql .= ", s.code_fournisseur"; if (getDolGlobalString('MAIN_COMPANY_PERENTITY_SHARED')) { $sql .= ", spe.accountancy_code_supplier as code_compta_fournisseur"; $sql .= ", spe.accountancy_code_customer as code_compta"; } else { $sql .= ", s.code_compta_fournisseur"; $sql .= ", s.code_compta"; } $sql .= ", s.logo"; $sql .= ", s.entity"; $sql .= ", s.canvas"; $sql .= ", s.tms as date_modification, s.status as status"; $sql .= ", sp.rowid as cid, sp.canvas as ccanvas, sp.email as cemail, sp.firstname, sp.lastname"; $sql .= ", sp.address as caddress, sp.phone as cphone"; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."socpeople as sp"; if (getDolGlobalString('MAIN_COMPANY_PERENTITY_SHARED')) { $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe_perentity as spe ON spe.fk_soc = s.rowid AND spe.entity = " . ((int) $conf->entity); } // TODO Replace this if (!$user->hasRight('societe', 'client', 'voir')) { $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; } $sql .= ' WHERE s.entity IN ('.getEntity('societe').') AND sp.fk_soc = s.rowid'; if (!$user->hasRight('societe', 'client', 'voir')) { $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".((int) $user->id); } if (!$user->hasRight('fournisseur', 'lire')) { $sql .= " AND (s.fournisseur != 1 OR s.client != 0)"; } // Add where from hooks $parameters = array('socid' => $socid); $reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $thirdparty_static); // Note that $action and $object may have been modified by hook if (empty($reshook)) { if ($socid > 0) { $sql .= " AND s.rowid = ".((int) $socid); } } $sql .= $hookmanager->resPrint; $sql .= $db->order("s.tms", "DESC"); $sql .= $db->plimit($max, 0); //print $sql; $lastmodifiedcontact = ''; $result = $db->query($sql); if ($result) { $num = $db->num_rows($result); $i = 0; if ($num > 0) { $transRecordedType = $langs->trans("LastModifiedContacts", $max); $lastmodifiedcontact = "\n\n"; $lastmodifiedcontact .= '
'; $lastmodifiedcontact .= ''; $lastmodifiedcontact .= ''; $lastmodifiedcontact .= ''; $lastmodifiedcontact .= ''; $lastmodifiedcontact .= ''."\n"; while ($i < $num) { $objp = $db->fetch_object($result); $thirdparty_static->id = $objp->rowid; $thirdparty_static->name = $objp->name; $thirdparty_static->client = $objp->client; $thirdparty_static->fournisseur = $objp->fournisseur; $thirdparty_static->logo = $objp->logo; $thirdparty_static->date_modification = $db->jdate($objp->date_modification); $thirdparty_static->status = $objp->status; $thirdparty_static->code_client = $objp->code_client; $thirdparty_static->code_fournisseur = $objp->code_fournisseur; $thirdparty_static->canvas = $objp->canvas; $thirdparty_static->email = $objp->email; $thirdparty_static->entity = $objp->entity; $thirdparty_static->code_compta_fournisseur = $objp->code_compta_fournisseur; $thirdparty_static->code_compta_client = $objp->code_compta; $contact_static->id = $objp->cid; $contact_static->firstname = $objp->firstname; $contact_static->lastname = $objp->lastname; $contact_static->email = $objp->cemail; $contact_static->socid = $objp->rowid; $contact_static->canvas = $objp->ccanvas; $contact_static->phone_pro = $objp->cphone; $contact_static->address = $objp->caddress; $lastmodifiedcontact .= ''; // Contact $lastmodifiedcontact .= ''; // Third party $lastmodifiedcontact .= '\n"; // Last modified date $lastmodifiedcontact .= '"; $lastmodifiedcontact .= '"; $lastmodifiedcontact .= "\n"; $i++; } $db->free($result); $lastmodifiedcontact .= "
'; //$lastmodifiedcontact .= img_picto('', 'contact', 'class="pictofixedwidth"'); $lastmodifiedcontact .= ''.$transRecordedType.''; $lastmodifiedcontact .= ''; //$lastmodifiedcontact .= img_picto($langs->trans("FullList"), 'contact'); $lastmodifiedcontact .= '...'; $lastmodifiedcontact .= ' '; //$lastmodifiedcontact .= ''.img_picto($langs->trans("FullList"), 'contact'); $lastmodifiedcontact .= '
'; $lastmodifiedcontact .= $contact_static->getNomUrl(1); $lastmodifiedcontact .= ''; $lastmodifiedcontact .= $thirdparty_static->getNomUrl(1); $lastmodifiedcontact .= "date_modification, 'dayhour', 'tzuserrel')).'">'; $lastmodifiedcontact .= dol_print_date($thirdparty_static->date_modification, 'day', 'tzuserrel'); $lastmodifiedcontact .= "'; $lastmodifiedcontact .= $thirdparty_static->getLibStatut(3); $lastmodifiedcontact .= "
\n"; $lastmodifiedcontact .= '
'; $lastmodifiedcontact .= "\n"; } } else { dol_print_error($db); } // boxes print '
'; print '
'; $boxlist = '
'; $boxlist .= '
'; $boxlist .= $thirdpartygraph; $boxlist .= '
'; $boxlist .= $thirdpartycateggraph; $boxlist .= '
'; $boxlist .= $resultboxes['boxlista']; $boxlist .= '
'."\n"; $boxlist .= '
'; $boxlist .= $lastmodified; $boxlist .= '
'; $boxlist .= $lastmodifiedcontact; $boxlist .= '
'; $boxlist .= $resultboxes['boxlistb']; $boxlist .= '
'."\n"; $boxlist .= '
'; print $boxlist; print '
'; $parameters = array('user' => $user); $reshook = $hookmanager->executeHooks('dashboardThirdparties', $parameters, $thirdparty_static); // Note that $action and $object may have been modified by hook // End of page llxFooter(); $db->close();