2006-05-06 21:06:40 +02:00
< ? php
2015-05-23 18:52:31 +02:00
/* Copyright ( C ) 2006 - 2011 Laurent Destailleur < eldy @ users . sourceforge . net >
* Copyright ( C ) 2006 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
* Copyright ( C ) 2007 Patrick Raguin < patrick . raguin @ gmail . com >
2018-10-27 14:43:12 +02:00
* Copyright ( C ) 2010 - 2012 Regis Houssin < regis . houssin @ inodbox . com >
2015-05-23 18:52:31 +02:00
* Copyright ( C ) 2013 - 2014 Florian Henry < florian . henry @ open - concept . pro >
* Copyright ( C ) 2013 - 2014 Juanjo Menent < jmenent @ 2 byte . es >
* Copyright ( C ) 2013 Christophe Battarel < contact @ altairis . fr >
2019-01-28 21:39:22 +01:00
* Copyright ( C ) 2013 - 2018 Alexandre Spangaro < aspangaro @ open - dsi . fr >
2021-02-20 15:41:57 +01:00
* Copyright ( C ) 2015 - 2021 Frédéric France < frederic . france @ netlogic . fr >
2015-05-23 18:52:31 +02:00
* Copyright ( C ) 2015 Raphaël Doursenaud < rdoursenaud @ gpcsolutions . fr >
2018-10-16 22:27:34 +02:00
* Copyright ( C ) 2017 Rui Strecht < rui . strecht @ aliartalentos . com >
* Copyright ( C ) 2018 Ferran Marcet < fmarcet @ 2 byte . es >
2013-11-24 21:28:15 +01:00
*
2006-04-09 00:47:51 +02:00
* 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
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2006-04-09 00:47:51 +02:00
* ( 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
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
* or see https :// www . gnu . org /
2006-04-09 00:47:51 +02:00
*/
/**
2011-10-24 11:25:54 +02:00
* \file htdocs / core / lib / company . lib . php
2008-08-06 16:50:06 +02:00
* \brief Ensemble de fonctions de base pour le module societe
* \ingroup societe
2008-07-29 21:20:33 +02:00
*/
2006-04-09 00:47:51 +02:00
2008-08-06 16:50:06 +02:00
/**
2009-03-12 02:44:02 +01:00
* Return array of tabs to used on pages for third parties cards .
2008-08-06 16:50:06 +02:00
*
2015-02-10 11:38:13 +01:00
* @ param Societe $object Object company shown
2011-09-28 14:13:48 +02:00
* @ return array Array of tabs
2008-08-06 16:50:06 +02:00
*/
2015-02-10 11:38:13 +01:00
function societe_prepare_head ( Societe $object )
2006-05-06 21:06:40 +02:00
{
2020-09-07 10:18:17 +02:00
global $db , $langs , $conf , $user ;
2022-04-05 14:36:09 +02:00
global $hookmanager ;
2020-09-07 10:18:17 +02:00
$h = 0 ;
$head = array ();
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/card.php?socid=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " ThirdParty " );
$head [ $h ][ 2 ] = 'card' ;
$h ++ ;
2020-10-28 00:34:59 +01:00
if ( empty ( $conf -> global -> MAIN_SUPPORT_SHARED_CONTACT_BETWEEN_THIRDPARTIES )) {
if ( empty ( $conf -> global -> MAIN_DISABLE_CONTACTS_TAB ) && $user -> rights -> societe -> contact -> lire ) {
2020-09-07 10:18:17 +02:00
//$nbContact = count($object->liste_contact(-1,'internal')) + count($object->liste_contact(-1,'external'));
2021-02-20 15:41:57 +01:00
$nbContact = 0 ;
2021-02-21 09:50:58 +01:00
// Enable caching of thirdrparty count Contacts
require_once DOL_DOCUMENT_ROOT . '/core/lib/memory.lib.php' ;
2021-02-20 18:25:48 +01:00
$cachekey = 'count_contacts_thirdparty_' . $object -> id ;
2021-02-20 17:12:06 +01:00
$dataretrieved = dol_getcache ( $cachekey );
2021-02-20 18:21:10 +01:00
if ( ! is_null ( $dataretrieved )) {
$nbContact = $dataretrieved ;
2021-02-20 17:12:06 +01:00
} else {
2021-02-20 15:41:57 +01:00
$sql = " SELECT COUNT(p.rowid) as nb " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " socpeople as p " ;
2022-03-26 12:57:30 +01:00
// Add table from hooks
$parameters = array ( 'contacttab' => true );
$reshook = $hookmanager -> executeHooks ( 'printFieldListFrom' , $parameters , $object ); // Note that $action and $object may have been modified by hook
$sql .= $hookmanager -> resPrint ;
2022-03-26 13:10:23 +01:00
$sql .= " WHERE p.fk_soc = " . (( int ) $object -> id );
2022-03-26 12:57:30 +01:00
// Add where from hooks
$parameters = array ( 'contacttab' => true );
$reshook = $hookmanager -> executeHooks ( 'printFieldListWhere' , $parameters , $object ); // Note that $action and $object may have been modified by hook
$sql .= $hookmanager -> resPrint ;
2021-02-20 15:41:57 +01:00
$resql = $db -> query ( $sql );
if ( $resql ) {
$obj = $db -> fetch_object ( $resql );
$nbContact = $obj -> nb ;
}
2021-02-20 18:21:10 +01:00
2021-02-20 20:48:59 +01:00
dol_setcache ( $cachekey , $nbContact , 120 ); // If setting cache fails, this is not a problem, so we do not test result.
2018-07-17 13:48:08 +02:00
}
2021-02-20 18:21:10 +01:00
2020-09-07 10:18:17 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/contact.php?socid=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( 'ContactsAddresses' );
2021-02-20 15:41:57 +01:00
if ( $nbContact > 0 ) {
$head [ $h ][ 1 ] .= '<span class="badge marginleftonlyshort">' . $nbContact . '</span>' ;
}
2020-09-07 10:18:17 +02:00
$head [ $h ][ 2 ] = 'contact' ;
$h ++ ;
2018-07-17 13:48:08 +02:00
}
2020-09-07 10:18:17 +02:00
} else {
2018-07-17 13:48:08 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/societecontact.php?socid=' . $object -> id ;
2019-01-27 11:55:16 +01:00
$nbContact = count ( $object -> liste_contact ( - 1 , 'internal' )) + count ( $object -> liste_contact ( - 1 , 'external' ));
2018-07-17 13:48:08 +02:00
$head [ $h ][ 1 ] = $langs -> trans ( " ContactsAddresses " );
2021-02-20 15:41:57 +01:00
if ( $nbContact > 0 ) {
$head [ $h ][ 1 ] .= '<span class="badge marginleftonlyshort">' . $nbContact . '</span>' ;
}
2018-07-17 13:48:08 +02:00
$head [ $h ][ 2 ] = 'contact' ;
$h ++ ;
2017-09-27 19:56:03 +02:00
}
2020-10-28 00:34:59 +01:00
if ( $object -> client == 1 || $object -> client == 2 || $object -> client == 3 ) {
2020-09-07 10:18:17 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/comm/card.php?socid=' . $object -> id ;
$head [ $h ][ 1 ] = '' ;
2021-02-20 15:41:57 +01:00
if ( empty ( $conf -> global -> SOCIETE_DISABLE_PROSPECTS ) && ( $object -> client == 2 || $object -> client == 3 )) {
$head [ $h ][ 1 ] .= $langs -> trans ( " Prospect " );
}
if ( empty ( $conf -> global -> SOCIETE_DISABLE_PROSPECTS ) && empty ( $conf -> global -> SOCIETE_DISABLE_CUSTOMERS ) && $object -> client == 3 ) {
$head [ $h ][ 1 ] .= ' | ' ;
}
if ( empty ( $conf -> global -> SOCIETE_DISABLE_CUSTOMERS ) && ( $object -> client == 1 || $object -> client == 3 )) {
$head [ $h ][ 1 ] .= $langs -> trans ( " Customer " );
}
2020-09-07 10:18:17 +02:00
$head [ $h ][ 2 ] = 'customer' ;
$h ++ ;
2020-10-28 00:34:59 +01:00
if ( ! empty ( $conf -> global -> PRODUIT_CUSTOMER_PRICES )) {
2020-09-07 10:18:17 +02:00
$langs -> load ( " products " );
// price
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/price.php?socid=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " CustomerPrices " );
$head [ $h ][ 2 ] = 'price' ;
$h ++ ;
}
}
$supplier_module_enabled = 0 ;
2022-06-09 22:10:51 +02:00
if (( isModEnabled ( 'fournisseur' ) && empty ( $conf -> global -> MAIN_USE_NEW_SUPPLIERMOD )) || ! empty ( $conf -> supplier_proposal -> enabled ) || ! empty ( $conf -> supplier_order -> enabled ) || ! empty ( $conf -> supplier_invoice -> enabled )) {
2021-02-20 15:41:57 +01:00
$supplier_module_enabled = 1 ;
}
2020-10-28 00:34:59 +01:00
if ( $supplier_module_enabled == 1 && $object -> fournisseur && ! empty ( $user -> rights -> fournisseur -> lire )) {
2020-09-07 10:18:17 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/fourn/card.php?socid=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " Supplier " );
$head [ $h ][ 2 ] = 'supplier' ;
$h ++ ;
}
2022-06-14 17:53:17 +02:00
if ( ! empty ( $conf -> project -> enabled ) && ( ! empty ( $user -> rights -> projet -> lire ))) {
2021-02-20 22:03:11 +01:00
$nbProject = 0 ;
2021-02-21 09:50:58 +01:00
// Enable caching of thirdrparty count projects
require_once DOL_DOCUMENT_ROOT . '/core/lib/memory.lib.php' ;
2021-02-20 22:03:11 +01:00
$cachekey = 'count_projects_thirdparty_' . $object -> id ;
$dataretrieved = dol_getcache ( $cachekey );
if ( ! is_null ( $dataretrieved )) {
$nbProject = $dataretrieved ;
2020-09-07 10:18:17 +02:00
} else {
2021-02-20 22:03:11 +01:00
$sql = " SELECT COUNT(n.rowid) as nb " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " projet as n " ;
2021-08-27 18:18:50 +02:00
$sql .= " WHERE fk_soc = " . (( int ) $object -> id );
2021-02-20 22:03:11 +01:00
$sql .= " AND entity IN ( " . getEntity ( 'project' ) . " ) " ;
$resql = $db -> query ( $sql );
if ( $resql ) {
$obj = $db -> fetch_object ( $resql );
$nbProject = $obj -> nb ;
} else {
dol_print_error ( $db );
}
dol_setcache ( $cachekey , $nbProject , 120 ); // If setting cache fails, this is not a problem, so we do not test result.
2020-09-07 10:18:17 +02:00
}
2021-02-20 15:41:57 +01:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/project.php?socid=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " Projects " );
2021-02-20 22:03:11 +01:00
if ( $nbProject > 0 ) {
$head [ $h ][ 1 ] .= '<span class="badge marginleftonlyshort">' . $nbProject . '</span>' ;
2021-02-20 15:41:57 +01:00
}
2020-09-07 10:18:17 +02:00
$head [ $h ][ 2 ] = 'project' ;
$h ++ ;
}
2011-01-25 00:35:21 +01:00
2020-09-07 10:18:17 +02:00
// Tab to link resources
2022-06-09 22:10:51 +02:00
if ( isModEnabled ( 'resource' ) && ! empty ( $conf -> global -> RESOURCE_ON_THIRDPARTIES )) {
2015-05-31 02:05:39 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/resource/element_resource.php?element=societe&element_id=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " Resources " );
$head [ $h ][ 2 ] = 'resources' ;
$h ++ ;
}
2016-10-02 16:12:40 +02:00
// Related items
2022-06-09 22:10:51 +02:00
if (( isModEnabled ( 'commande' ) || isModEnabled ( 'propal' ) || isModEnabled ( 'facture' ) || isModEnabled ( 'ficheinter' ) || ( isModEnabled ( 'fournisseur' ) && empty ( $conf -> global -> MAIN_USE_NEW_SUPPLIERMOD )) || ! empty ( $conf -> supplier_order -> enabled ) || ! empty ( $conf -> supplier_invoice -> enabled ))
2022-04-06 20:12:35 +02:00
&& empty ( $conf -> global -> THIRDPARTIES_DISABLE_RELATED_OBJECT_TAB )) {
2020-09-07 10:18:17 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/consumption.php?socid=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " Referers " );
$head [ $h ][ 2 ] = 'consumption' ;
$h ++ ;
}
// Bank accounts
2020-10-28 00:34:59 +01:00
if ( empty ( $conf -> global -> SOCIETE_DISABLE_BANKACCOUNT )) {
2020-09-07 10:18:17 +02:00
$nbBankAccount = 0 ;
2019-11-13 19:35:02 +01:00
$foundonexternalonlinesystem = 0 ;
2022-02-13 19:26:16 +01:00
$langs -> load ( " bills " );
2018-03-07 15:05:49 +01:00
2022-02-02 18:04:11 +01:00
$title = $langs -> trans ( " PaymentModes " );
2019-05-21 13:27:45 +02:00
2022-06-09 22:10:51 +02:00
if ( isModEnabled ( 'stripe' )) {
2019-05-21 13:27:45 +02:00
//$langs->load("stripe");
//$title = $langs->trans("BankAccountsAndGateways");
2018-03-13 17:47:43 +01:00
$servicestatus = 0 ;
2021-02-20 15:41:57 +01:00
if ( ! empty ( $conf -> global -> STRIPE_LIVE ) && ! GETPOST ( 'forcesandbox' , 'alpha' )) {
$servicestatus = 1 ;
}
2018-03-13 17:47:43 +01:00
include_once DOL_DOCUMENT_ROOT . '/societe/class/societeaccount.class.php' ;
$societeaccount = new SocieteAccount ( $db );
2019-11-13 19:35:02 +01:00
$stripecu = $societeaccount -> getCustomerAccount ( $object -> id , 'stripe' , $servicestatus ); // Get thirdparty cu_...
2021-02-20 15:41:57 +01:00
if ( $stripecu ) {
$foundonexternalonlinesystem ++ ;
}
2018-03-07 15:05:49 +01:00
}
2016-12-11 13:21:21 +01:00
2020-09-07 10:18:17 +02:00
$sql = " SELECT COUNT(n.rowid) as nb " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " societe_rib as n " ;
2021-08-27 18:18:50 +02:00
$sql .= " WHERE n.fk_soc = " . (( int ) $object -> id );
2022-06-09 22:10:51 +02:00
if ( ! isModEnabled ( 'stripe' )) {
2020-02-05 12:49:56 +01:00
$sql .= " AND n.stripe_card_ref IS NULL " ;
} else {
2021-06-09 15:36:47 +02:00
$sql .= " AND (n.stripe_card_ref IS NULL OR (n.stripe_card_ref IS NOT NULL AND n.status = " . (( int ) $servicestatus ) . " )) " ;
2020-02-05 12:49:56 +01:00
}
2020-02-04 19:33:20 +01:00
2020-09-07 10:18:17 +02:00
$resql = $db -> query ( $sql );
2020-10-28 00:34:59 +01:00
if ( $resql ) {
2021-02-20 15:41:57 +01:00
$obj = $db -> fetch_object ( $resql );
$nbBankAccount = $obj -> nb ;
2020-09-07 10:18:17 +02:00
} else {
dol_print_error ( $db );
}
2022-06-09 22:10:51 +02:00
//if (isModEnabled('stripe') && $nbBankAccount > 0) $nbBankAccount = '...'; // No way to know exact number
2020-09-07 10:18:17 +02:00
2021-08-27 18:18:50 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/paymentmodes.php?socid=' . urlencode ( $object -> id );
2020-09-07 10:18:17 +02:00
$head [ $h ][ 1 ] = $title ;
2021-02-20 15:41:57 +01:00
if ( $foundonexternalonlinesystem ) {
$head [ $h ][ 1 ] .= '<span class="badge marginleftonlyshort">...</span>' ;
} elseif ( $nbBankAccount > 0 ) {
$head [ $h ][ 1 ] .= '<span class="badge marginleftonlyshort">' . $nbBankAccount . '</span>' ;
}
2020-09-07 10:18:17 +02:00
$head [ $h ][ 2 ] = 'rib' ;
$h ++ ;
}
2022-06-09 22:10:51 +02:00
if ( isModEnabled ( 'website' ) && ( ! empty ( $conf -> global -> WEBSITE_USE_WEBSITE_ACCOUNTS )) && ( ! empty ( $user -> rights -> societe -> lire ))) {
2021-08-27 18:18:50 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/website.php?id=' . urlencode ( $object -> id );
2020-09-07 10:18:17 +02:00
$head [ $h ][ 1 ] = $langs -> trans ( " WebSiteAccounts " );
$nbNote = 0 ;
$sql = " SELECT COUNT(n.rowid) as nb " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " societe_account as n " ;
2021-08-27 18:18:50 +02:00
$sql .= " WHERE fk_soc = " . (( int ) $object -> id ) . ' AND fk_website > 0' ;
2020-09-07 10:18:17 +02:00
$resql = $db -> query ( $sql );
2020-10-28 00:34:59 +01:00
if ( $resql ) {
2021-02-20 15:41:57 +01:00
$obj = $db -> fetch_object ( $resql );
$nbNote = $obj -> nb ;
2020-09-07 10:18:17 +02:00
} else {
dol_print_error ( $db );
}
2021-02-20 15:41:57 +01:00
if ( $nbNote > 0 ) {
$head [ $h ][ 1 ] .= '<span class="badge marginleftonlyshort">' . $nbNote . '</span>' ;
}
2020-09-07 10:18:17 +02:00
$head [ $h ][ 2 ] = 'website' ;
$h ++ ;
}
2017-10-21 12:26:14 +02:00
2022-05-10 16:19:00 +02:00
if ( getDolGlobalString ( 'PARTNERSHIP_IS_MANAGED_FOR' , 'thirdparty' ) == 'thirdparty' ) {
2021-08-23 15:00:29 +02:00
if ( ! empty ( $user -> rights -> partnership -> read )) {
2021-11-29 01:04:32 +01:00
$langs -> load ( " partnership " );
2021-08-23 15:00:29 +02:00
$nbPartnership = is_array ( $object -> partnerships ) ? count ( $object -> partnerships ) : 0 ;
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/partnership.php?socid=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " Partnership " );
$head [ $h ][ 2 ] = 'partnership' ;
if ( $nbPartnership > 0 ) {
$head [ $h ][ 1 ] .= '<span class="badge marginleftonlyshort">' . $nbPartnership . '</span>' ;
}
$h ++ ;
}
}
2016-10-02 16:12:40 +02:00
// Show more tabs from modules
2020-09-07 10:18:17 +02:00
// Entries must be declared in modules descriptor with line
// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab
// $this->tabs = array('entity:-tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to remove a tab
complete_head_from_modules ( $conf , $langs , $object , $head , $h , 'thirdparty' );
2020-10-28 00:34:59 +01:00
if ( $user -> socid == 0 ) {
2020-09-07 10:18:17 +02:00
// Notifications
2022-06-09 22:10:51 +02:00
if ( isModEnabled ( 'notification' )) {
2021-02-20 15:41:57 +01:00
$nbNotif = 0 ;
2021-11-02 04:50:29 +01:00
// Enable caching of thirdparty count notifications
2021-02-21 09:50:58 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/memory.lib.php' ;
2021-02-20 18:25:48 +01:00
$cachekey = 'count_notifications_thirdparty_' . $object -> id ;
2021-02-20 17:12:06 +01:00
$dataretrieved = dol_getcache ( $cachekey );
2021-02-20 18:21:10 +01:00
if ( ! is_null ( $dataretrieved )) {
$nbNotif = $dataretrieved ;
2021-02-20 17:12:06 +01:00
} else {
2021-02-20 15:41:57 +01:00
$sql = " SELECT COUNT(n.rowid) as nb " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " notify_def as n " ;
2021-08-27 18:18:50 +02:00
$sql .= " WHERE fk_soc = " . (( int ) $object -> id );
2021-02-20 15:41:57 +01:00
$resql = $db -> query ( $sql );
if ( $resql ) {
2020-09-07 10:18:17 +02:00
$obj = $db -> fetch_object ( $resql );
2021-02-20 15:41:57 +01:00
$nbNotif = $obj -> nb ;
} else {
dol_print_error ( $db );
}
2021-02-20 20:48:59 +01:00
dol_setcache ( $cachekey , $nbNotif , 120 ); // If setting cache fails, this is not a problem, so we do not test result.
2020-09-07 10:18:17 +02:00
}
2021-02-20 18:21:10 +01:00
2021-08-27 18:18:50 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/notify/card.php?socid=' . urlencode ( $object -> id );
2020-09-07 10:18:17 +02:00
$head [ $h ][ 1 ] = $langs -> trans ( " Notifications " );
2021-02-20 15:41:57 +01:00
if ( $nbNotif > 0 ) {
$head [ $h ][ 1 ] .= '<span class="badge marginleftonlyshort">' . $nbNotif . '</span>' ;
}
2020-09-07 10:18:17 +02:00
$head [ $h ][ 2 ] = 'notify' ;
$h ++ ;
}
2013-10-23 13:38:18 +02:00
2013-07-20 09:07:10 +02:00
// Notes
2020-09-07 10:18:17 +02:00
$nbNote = 0 ;
2021-02-20 15:52:45 +01:00
if ( ! empty ( $object -> note_private )) {
$nbNote ++ ;
}
if ( ! empty ( $object -> note_public )) {
$nbNote ++ ;
}
2021-08-27 18:18:50 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/note.php?id=' . urlencode ( $object -> id );
2020-09-07 10:18:17 +02:00
$head [ $h ][ 1 ] = $langs -> trans ( " Notes " );
2021-02-20 15:41:57 +01:00
if ( $nbNote > 0 ) {
$head [ $h ][ 1 ] .= '<span class="badge marginleftonlyshort">' . $nbNote . '</span>' ;
}
2020-09-07 10:18:17 +02:00
$head [ $h ][ 2 ] = 'note' ;
$h ++ ;
2021-02-21 09:50:58 +01:00
// Attached files and Links
$totalAttached = 0 ;
// Enable caching of thirdrparty count attached files and links
require_once DOL_DOCUMENT_ROOT . '/core/lib/memory.lib.php' ;
$cachekey = 'count_attached_thirdparty_' . $object -> id ;
$dataretrieved = dol_getcache ( $cachekey );
if ( ! is_null ( $dataretrieved )) {
$totalAttached = $dataretrieved ;
} else {
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php' ;
$upload_dir = $conf -> societe -> multidir_output [ $object -> entity ] . " / " . $object -> id ;
$nbFiles = count ( dol_dir_list ( $upload_dir , 'files' , 0 , '' , '(\.meta|_preview.*\.png)$' ));
$nbLinks = Link :: count ( $db , $object -> element , $object -> id );
$totalAttached = $nbFiles + $nbLinks ;
dol_setcache ( $cachekey , $totalAttached , 120 ); // If setting cache fails, this is not a problem, so we do not test result.
}
2020-09-07 10:18:17 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/document.php?socid=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " Documents " );
2021-02-21 09:50:58 +01:00
if (( $totalAttached ) > 0 ) {
$head [ $h ][ 1 ] .= '<span class="badge marginleftonlyshort">' . ( $totalAttached ) . '</span>' ;
2021-02-20 15:41:57 +01:00
}
2020-09-07 10:18:17 +02:00
$head [ $h ][ 2 ] = 'document' ;
$h ++ ;
}
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/agenda.php?socid=' . $object -> id ;
2020-12-29 17:48:52 +01:00
$head [ $h ][ 1 ] = $langs -> trans ( " Events " );
2022-06-09 22:10:51 +02:00
if ( isModEnabled ( 'agenda' ) && ( ! empty ( $user -> rights -> agenda -> myactions -> read ) || ! empty ( $user -> rights -> agenda -> allactions -> read ))) {
2021-02-20 18:21:10 +01:00
$nbEvent = 0 ;
// Enable caching of thirdrparty count actioncomm
2021-02-21 09:50:58 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/memory.lib.php' ;
2021-02-20 18:25:48 +01:00
$cachekey = 'count_events_thirdparty_' . $object -> id ;
2021-02-20 17:12:06 +01:00
$dataretrieved = dol_getcache ( $cachekey );
2021-02-20 18:21:10 +01:00
if ( ! is_null ( $dataretrieved )) {
$nbEvent = $dataretrieved ;
2021-02-20 17:12:06 +01:00
} else {
2021-02-19 23:16:56 +01:00
$sql = " SELECT COUNT(id) as nb " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " actioncomm " ;
2021-08-27 18:18:50 +02:00
$sql .= " WHERE fk_soc = " . (( int ) $object -> id );
2021-02-19 23:16:56 +01:00
$resql = $db -> query ( $sql );
if ( $resql ) {
$obj = $db -> fetch_object ( $resql );
$nbEvent = $obj -> nb ;
} else {
dol_syslog ( 'Failed to count actioncomm ' . $db -> lasterror (), LOG_ERR );
}
2021-02-20 20:48:59 +01:00
dol_setcache ( $cachekey , $nbEvent , 120 ); // If setting cache fails, this is not a problem, so we do not test result.
2021-02-17 22:14:21 +01:00
}
2021-02-20 18:21:10 +01:00
2020-09-07 10:18:17 +02:00
$head [ $h ][ 1 ] .= '/' ;
$head [ $h ][ 1 ] .= $langs -> trans ( " Agenda " );
2021-02-17 22:16:07 +01:00
if ( $nbEvent > 0 ) {
$head [ $h ][ 1 ] .= '<span class="badge marginleftonlyshort">' . $nbEvent . '</span>' ;
2021-02-17 22:14:21 +01:00
}
2020-09-07 10:18:17 +02:00
}
$head [ $h ][ 2 ] = 'agenda' ;
$h ++ ;
// Log
/* $head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/info.php?socid=' . $object -> id ;
2021-02-17 22:16:07 +01:00
$head [ $h ][ 1 ] = $langs -> trans ( " Info " );
$head [ $h ][ 2 ] = 'info' ;
$h ++ ; */
2011-12-21 18:56:44 +01:00
2020-09-07 10:18:17 +02:00
complete_head_from_modules ( $conf , $langs , $object , $head , $h , 'thirdparty' , 'remove' );
2011-01-25 00:59:37 +01:00
2020-09-07 10:18:17 +02:00
return $head ;
2008-02-25 17:30:43 +01:00
}
2006-04-09 00:47:51 +02:00
2008-02-25 17:30:43 +01:00
2008-08-06 16:50:06 +02:00
/**
2009-03-12 02:44:02 +01:00
* Return array of tabs to used on page
2008-08-06 16:50:06 +02:00
*
2011-09-28 14:13:48 +02:00
* @ param Object $object Object for tabs
2012-01-04 21:23:50 +01:00
* @ return array Array of tabs
2008-08-06 16:50:06 +02:00
*/
2010-12-29 11:08:45 +01:00
function societe_prepare_head2 ( $object )
2008-02-25 17:30:43 +01:00
{
2020-09-07 10:18:17 +02:00
global $langs , $conf , $user ;
$h = 0 ;
$head = array ();
2010-08-21 17:30:17 +02:00
2020-09-07 10:18:17 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/card.php?socid=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " ThirdParty " );
$head [ $h ][ 2 ] = 'company' ;
$h ++ ;
2010-08-21 17:30:17 +02:00
2020-09-07 10:18:17 +02:00
$head [ $h ][ 0 ] = 'commerciaux.php?socid=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " SalesRepresentative " );
$head [ $h ][ 2 ] = 'salesrepresentative' ;
$h ++ ;
2010-08-21 17:30:17 +02:00
2020-09-07 10:18:17 +02:00
return $head ;
2006-05-06 21:06:40 +02:00
}
2008-01-11 11:25:26 +01:00
2011-06-22 18:24:20 +02:00
/**
2011-09-28 14:13:48 +02:00
* Return array head with list of tabs to view object informations .
*
* @ return array head array with tabs
2011-06-22 18:24:20 +02:00
*/
2014-12-04 13:20:56 +01:00
function societe_admin_prepare_head ()
2011-06-22 18:24:20 +02:00
{
2020-09-07 10:18:17 +02:00
global $langs , $conf , $user ;
2011-06-22 18:24:20 +02:00
2020-09-07 10:18:17 +02:00
$h = 0 ;
$head = array ();
2011-06-22 18:24:20 +02:00
2020-09-07 10:18:17 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/admin/societe.php' ;
$head [ $h ][ 1 ] = $langs -> trans ( " Miscellaneous " );
$head [ $h ][ 2 ] = 'general' ;
$h ++ ;
2011-06-22 18:24:20 +02:00
2020-09-07 10:18:17 +02:00
// Show more tabs from modules
// Entries must be declared in modules descriptor with line
// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab
// $this->tabs = array('entity:-tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to remove a tab
complete_head_from_modules ( $conf , $langs , null , $head , $h , 'company_admin' );
2011-08-24 14:18:56 +02:00
2020-09-07 10:18:17 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/admin/societe_extrafields.php' ;
$head [ $h ][ 1 ] = $langs -> trans ( " ExtraFieldsThirdParties " );
$head [ $h ][ 2 ] = 'attributes' ;
$h ++ ;
2011-08-24 14:18:56 +02:00
2020-09-07 10:18:17 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/societe/admin/contact_extrafields.php' ;
$head [ $h ][ 1 ] = $langs -> trans ( " ExtraFieldsContacts " );
$head [ $h ][ 2 ] = 'attributes_contacts' ;
$h ++ ;
2012-09-14 12:15:55 +02:00
2020-09-07 10:18:17 +02:00
complete_head_from_modules ( $conf , $langs , null , $head , $h , 'company_admin' , 'remove' );
2011-06-22 18:24:20 +02:00
2020-09-07 10:18:17 +02:00
return $head ;
2011-06-22 18:24:20 +02:00
}
2008-01-11 11:25:26 +01:00
/**
2013-06-27 16:02:52 +02:00
* Return country label , code or id from an id , code or label
2011-08-24 20:05:58 +02:00
*
2013-06-27 16:02:52 +02:00
* @ param int $searchkey Id or code of country to search
2017-11-03 13:25:49 +01:00
* @ param string $withcode '0' = Return label ,
2011-09-28 14:13:48 +02:00
* '1' = Return code + label ,
* '2' = Return code from id ,
* '3' = Return id from code ,
* 'all' = Return array ( 'id' => , 'code' => , 'label' => )
* @ param DoliDB $dbtouse Database handler ( using in global way may fail because of conflicts with some autoload features )
* @ param Translate $outputlangs Langs object for output translation
2013-06-27 16:02:52 +02:00
* @ param int $entconv 0 = Return value without entities and not converted to output charset , 1 = Ready for html output
* @ param int $searchlabel Label of country to search ( warning : searching on label is not reliable )
2018-06-25 17:01:37 +02:00
* @ return mixed Integer with country id or String with country code or translated country name or Array ( 'id' , 'code' , 'label' ) or 'NotDefined'
2008-07-29 21:20:33 +02:00
*/
2019-01-27 15:20:16 +01:00
function getCountry ( $searchkey , $withcode = '' , $dbtouse = 0 , $outputlangs = '' , $entconv = 1 , $searchlabel = '' )
2008-01-11 11:25:26 +01:00
{
2020-09-07 10:18:17 +02:00
global $db , $langs ;
$result = '' ;
// Check parameters
2020-10-28 00:34:59 +01:00
if ( empty ( $searchkey ) && empty ( $searchlabel )) {
2021-02-20 17:12:06 +01:00
if ( $withcode === 'all' ) {
return array ( 'id' => '' , 'code' => '' , 'label' => '' );
} else {
return '' ;
}
}
if ( ! is_object ( $dbtouse )) {
$dbtouse = $db ;
}
if ( ! is_object ( $outputlangs )) {
$outputlangs = $langs ;
2020-09-07 10:18:17 +02:00
}
$sql = " SELECT rowid, code, label FROM " . MAIN_DB_PREFIX . " c_country " ;
2021-02-20 17:12:06 +01:00
if ( is_numeric ( $searchkey )) {
2021-04-24 20:18:11 +02:00
$sql .= " WHERE rowid = " . (( int ) $searchkey );
2021-02-20 17:12:06 +01:00
} elseif ( ! empty ( $searchkey )) {
2021-04-24 20:18:11 +02:00
$sql .= " WHERE code = ' " . $db -> escape ( $searchkey ) . " ' " ;
2021-02-20 17:12:06 +01:00
} else {
2021-04-24 20:18:11 +02:00
$sql .= " WHERE label = ' " . $db -> escape ( $searchlabel ) . " ' " ;
2021-02-20 17:12:06 +01:00
}
2020-09-07 10:18:17 +02:00
$resql = $dbtouse -> query ( $sql );
2020-10-28 00:34:59 +01:00
if ( $resql ) {
2020-09-07 10:18:17 +02:00
$obj = $dbtouse -> fetch_object ( $resql );
2020-10-28 00:34:59 +01:00
if ( $obj ) {
2020-09-07 10:18:17 +02:00
$label = (( ! empty ( $obj -> label ) && $obj -> label != '-' ) ? $obj -> label : '' );
2020-10-28 00:34:59 +01:00
if ( is_object ( $outputlangs )) {
2020-09-07 10:18:17 +02:00
$outputlangs -> load ( " dict " );
2021-02-23 22:03:23 +01:00
if ( $entconv ) {
$label = ( $obj -> code && ( $outputlangs -> trans ( " Country " . $obj -> code ) != " Country " . $obj -> code )) ? $outputlangs -> trans ( " Country " . $obj -> code ) : $label ;
} else {
$label = ( $obj -> code && ( $outputlangs -> transnoentitiesnoconv ( " Country " . $obj -> code ) != " Country " . $obj -> code )) ? $outputlangs -> transnoentitiesnoconv ( " Country " . $obj -> code ) : $label ;
}
2020-09-07 10:18:17 +02:00
}
2021-02-20 17:12:06 +01:00
if ( $withcode == 1 ) {
$result = $label ? " $obj->code - $label " : " $obj->code " ;
} elseif ( $withcode == 2 ) {
$result = $obj -> code ;
} elseif ( $withcode == 3 ) {
$result = $obj -> rowid ;
} elseif ( $withcode === 'all' ) {
$result = array ( 'id' => $obj -> rowid , 'code' => $obj -> code , 'label' => $label );
} else {
$result = $label ;
}
2020-09-07 10:18:17 +02:00
} else {
$result = 'NotDefined' ;
}
$dbtouse -> free ( $resql );
return $result ;
2021-02-20 15:52:45 +01:00
} else {
dol_print_error ( $dbtouse , '' );
}
2020-09-07 10:18:17 +02:00
return 'Error' ;
2010-06-19 00:54:16 +02:00
}
/**
2013-10-23 13:38:18 +02:00
* Return state translated from an id . Return value is always utf8 encoded and without entities .
2011-08-24 20:05:58 +02:00
*
2017-09-20 13:45:18 +02:00
* @ param int $id id of state ( province / departement )
2013-10-23 13:38:18 +02:00
* @ param int $withcode '0' = Return label ,
* '1' = Return string code + label ,
* '2' = Return code ,
* 'all' = return array ( 'id' => , 'code' => , 'label' => )
* @ param DoliDB $dbtouse Database handler ( using in global way may fail because of conflicts with some autoload features )
2017-09-20 13:45:18 +02:00
* @ param int $withregion '0' = Ignores region ,
* '1' = Add region name / code / id as needed to output ,
* @ param Translate $outputlangs Langs object for output translation , not fully implemented yet
* @ param int $entconv 0 = Return value without entities and not converted to output charset , 1 = Ready for html output
2019-02-13 22:43:12 +01:00
* @ return string | array String with state code or state name or Array ( 'id' , 'code' , 'label' ) / Array ( 'id' , 'code' , 'label' , 'region_code' , 'region' )
2010-06-19 00:54:16 +02:00
*/
2019-01-27 15:20:16 +01:00
function getState ( $id , $withcode = '' , $dbtouse = 0 , $withregion = 0 , $outputlangs = '' , $entconv = 1 )
2010-06-19 00:54:16 +02:00
{
2020-09-07 10:18:17 +02:00
global $db , $langs ;
2021-02-20 17:12:06 +01:00
if ( ! is_object ( $dbtouse )) {
$dbtouse = $db ;
}
2020-09-07 10:18:17 +02:00
$sql = " SELECT d.rowid as id, d.code_departement as code, d.nom as name, d.active, c.label as country, c.code as country_code, r.code_region as region_code, r.nom as region_name FROM " ;
$sql .= " " . MAIN_DB_PREFIX . " c_departements as d, " . MAIN_DB_PREFIX . " c_regions as r, " . MAIN_DB_PREFIX . " c_country as c " ;
2021-04-25 15:55:36 +02:00
$sql .= " WHERE d.fk_region=r.code_region and r.fk_pays=c.rowid and d.rowid= " . (( int ) $id );
2020-09-07 10:18:17 +02:00
$sql .= " AND d.active = 1 AND r.active = 1 AND c.active = 1 " ;
$sql .= " ORDER BY c.code, d.code_departement " ;
dol_syslog ( " Company.lib::getState " , LOG_DEBUG );
$resql = $dbtouse -> query ( $sql );
2020-10-28 00:34:59 +01:00
if ( $resql ) {
2020-09-07 10:18:17 +02:00
$obj = $dbtouse -> fetch_object ( $resql );
2020-10-28 00:34:59 +01:00
if ( $obj ) {
2020-09-07 10:18:17 +02:00
$label = (( ! empty ( $obj -> name ) && $obj -> name != '-' ) ? $obj -> name : '' );
2020-10-28 00:34:59 +01:00
if ( is_object ( $outputlangs )) {
2020-09-07 10:18:17 +02:00
$outputlangs -> load ( " dict " );
2021-02-23 22:03:23 +01:00
if ( $entconv ) {
$label = ( $obj -> code && ( $outputlangs -> trans ( " State " . $obj -> code ) != " State " . $obj -> code )) ? $outputlangs -> trans ( " State " . $obj -> code ) : $label ;
} else {
$label = ( $obj -> code && ( $outputlangs -> transnoentitiesnoconv ( " State " . $obj -> code ) != " State " . $obj -> code )) ? $outputlangs -> transnoentitiesnoconv ( " State " . $obj -> code ) : $label ;
}
2020-09-07 10:18:17 +02:00
}
if ( $withcode == 1 ) {
if ( $withregion == 1 ) {
return $label = $obj -> region_name . ' - ' . $obj -> code . ' - ' . ( $langs -> trans ( $obj -> code ) != $obj -> code ? $langs -> trans ( $obj -> code ) : ( $obj -> name != '-' ? $obj -> name : '' ));
} else {
return $label = $obj -> code . ' - ' . ( $langs -> trans ( $obj -> code ) != $obj -> code ? $langs -> trans ( $obj -> code ) : ( $obj -> name != '-' ? $obj -> name : '' ));
}
} elseif ( $withcode == 2 ) {
if ( $withregion == 1 ) {
return $label = $obj -> region_name . ' - ' . ( $langs -> trans ( $obj -> code ) != $obj -> code ? $langs -> trans ( $obj -> code ) : ( $obj -> name != '-' ? $obj -> name : '' ));
} else {
return $label = ( $langs -> trans ( $obj -> code ) != $obj -> code ? $langs -> trans ( $obj -> code ) : ( $obj -> name != '-' ? $obj -> name : '' ));
}
} elseif ( $withcode === 'all' ) {
if ( $withregion == 1 ) {
return array ( 'id' => $obj -> id , 'code' => $obj -> code , 'label' => $label , 'region_code' => $obj -> region_code , 'region' => $obj -> region_name );
} else {
return array ( 'id' => $obj -> id , 'code' => $obj -> code , 'label' => $label );
}
} else {
if ( $withregion == 1 ) {
return $label = $obj -> region_name . ' - ' . $label ;
} else {
return $label ;
}
}
} else {
return $langs -> transnoentitiesnoconv ( " NotDefined " );
}
2021-02-23 22:03:23 +01:00
} else {
dol_print_error ( $dbtouse , '' );
}
2008-01-11 11:25:26 +01:00
}
2009-10-30 12:41:11 +01:00
/**
2017-06-26 10:09:22 +02:00
* Return label of currency or code + label
2011-08-24 20:05:58 +02:00
*
2017-06-26 10:09:22 +02:00
* @ param string $code_iso Code iso of currency
* @ param int $withcode '1' = show code + label
* @ param Translate $outputlangs Output language
* @ return string Label translated of currency
2009-10-30 12:41:11 +01:00
*/
2019-01-27 15:20:16 +01:00
function currency_name ( $code_iso , $withcode = '' , $outputlangs = null )
2009-10-30 12:41:11 +01:00
{
2020-09-07 10:18:17 +02:00
global $langs , $db ;
2021-02-20 17:12:06 +01:00
if ( empty ( $outputlangs )) {
$outputlangs = $langs ;
}
2020-09-07 10:18:17 +02:00
$outputlangs -> load ( " dict " );
// If there is a translation, we can send immediatly the label
2020-10-28 00:34:59 +01:00
if ( $outputlangs -> trans ( " Currency " . $code_iso ) != " Currency " . $code_iso ) {
2020-09-07 10:18:17 +02:00
return ( $withcode ? $code_iso . ' - ' : '' ) . $outputlangs -> trans ( " Currency " . $code_iso );
}
// If no translation, we read table to get label by default
$sql = " SELECT label FROM " . MAIN_DB_PREFIX . " c_currencies " ;
2020-09-19 21:19:04 +02:00
$sql .= " WHERE code_iso=' " . $db -> escape ( $code_iso ) . " ' " ;
2020-09-07 10:18:17 +02:00
$resql = $db -> query ( $sql );
2020-10-28 00:34:59 +01:00
if ( $resql ) {
2020-09-07 10:18:17 +02:00
$num = $db -> num_rows ( $resql );
2020-10-28 00:34:59 +01:00
if ( $num ) {
2020-09-07 10:18:17 +02:00
$obj = $db -> fetch_object ( $resql );
$label = ( $obj -> label != '-' ? $obj -> label : '' );
2021-02-20 17:12:06 +01:00
if ( $withcode ) {
return ( $label == $code_iso ) ? " $code_iso " : " $code_iso - $label " ;
} else {
return $label ;
}
2020-09-07 10:18:17 +02:00
} else {
return $code_iso ;
}
}
return 'ErrorWhenReadingCurrencyLabel' ;
2009-10-30 12:41:11 +01:00
}
2008-01-11 11:25:26 +01:00
2008-01-11 18:16:46 +01:00
/**
2011-07-04 10:00:52 +02:00
* Retourne le nom traduit de la forme juridique
2011-08-24 20:05:58 +02:00
*
2011-09-28 14:13:48 +02:00
* @ param string $code Code de la forme juridique
* @ return string Nom traduit du pays
2008-01-11 18:16:46 +01:00
*/
function getFormeJuridiqueLabel ( $code )
{
2020-09-07 10:18:17 +02:00
global $db , $langs ;
2021-02-23 22:03:23 +01:00
if ( ! $code ) {
return '' ;
}
2020-09-07 10:18:17 +02:00
$sql = " SELECT libelle FROM " . MAIN_DB_PREFIX . " c_forme_juridique " ;
2020-09-19 21:19:04 +02:00
$sql .= " WHERE code=' " . $db -> escape ( $code ) . " ' " ;
2020-09-07 10:18:17 +02:00
dol_syslog ( " Company.lib::getFormeJuridiqueLabel " , LOG_DEBUG );
$resql = $db -> query ( $sql );
2020-10-28 00:34:59 +01:00
if ( $resql ) {
2020-09-07 10:18:17 +02:00
$num = $db -> num_rows ( $resql );
2020-10-28 00:34:59 +01:00
if ( $num ) {
2020-09-07 10:18:17 +02:00
$obj = $db -> fetch_object ( $resql );
$label = ( $obj -> libelle != '-' ? $obj -> libelle : '' );
return $label ;
} else {
return $langs -> trans ( " NotDefined " );
}
}
2008-01-11 18:16:46 +01:00
}
2018-04-09 14:25:02 +02:00
2017-04-30 03:18:49 +02:00
/**
2018-04-09 14:25:02 +02:00
* Return list of countries that are inside the EEC ( European Economic Community )
2019-12-16 22:30:16 +01:00
* Note : Try to keep this function as a " memory only " function for performance reasons .
2017-06-26 10:09:22 +02:00
*
2018-04-09 14:25:02 +02:00
* @ return array Array of countries code in EEC
*/
function getCountriesInEEC ()
{
// List of all country codes that are in europe for european vat rules
2021-10-03 05:49:54 +02:00
// List found on https://ec.europa.eu/taxation_customs/territorial-status-eu-countries-and-certain-territories_en
2021-03-02 15:24:55 +01:00
global $conf , $db ;
$country_code_in_EEC = array ();
2018-04-09 14:25:02 +02:00
2021-06-21 11:23:53 +02:00
if ( ! empty ( $conf -> cache [ 'country_code_in_EEC' ])) {
2021-03-02 16:21:43 +01:00
// Use of cache to reduce number of database requests
$country_code_in_EEC = $conf -> cache [ 'country_code_in_EEC' ];
2021-03-02 15:24:55 +01:00
} else {
2021-03-02 16:03:14 +01:00
$sql = " SELECT cc.code FROM " . MAIN_DB_PREFIX . " c_country as cc " ;
$sql .= " WHERE cc.eec = 1 " ;
2019-06-20 12:32:14 +02:00
2021-03-02 16:03:14 +01:00
$resql = $db -> query ( $sql );
if ( $resql ) {
$num = $db -> num_rows ( $resql );
$i = 0 ;
while ( $i < $num ) {
$objp = $db -> fetch_object ( $resql );
$country_code_in_EEC [] = $objp -> code ;
$i ++ ;
}
} else {
dol_print_error ( $db );
}
2021-03-02 16:21:43 +01:00
$conf -> cache [ 'country_code_in_EEC' ] = $country_code_in_EEC ;
2021-03-02 15:24:55 +01:00
}
2018-04-09 14:25:02 +02:00
return $country_code_in_EEC ;
}
/**
* Return if a country of an object is inside the EEC ( European Economic Community )
*
2017-04-30 03:18:49 +02:00
* @ param Object $object Object
* @ return boolean true = country inside EEC , false = country outside EEC
*/
function isInEEC ( $object )
{
2021-02-23 22:03:23 +01:00
if ( empty ( $object -> country_code )) {
return false ;
}
2017-12-15 22:14:28 +01:00
2021-05-03 11:00:41 +02:00
$country_code_in_EEC = getCountriesInEEC (); // This make a database call but there is a cache done into $conf->cache['country_code_in_EEC']
2018-04-09 14:25:02 +02:00
2021-03-02 23:55:41 +01:00
//print "dd".$object->country_code;
2020-09-07 10:18:17 +02:00
return in_array ( $object -> country_code , $country_code_in_EEC );
2017-04-30 03:18:49 +02:00
}
2008-01-11 18:16:46 +01:00
2010-05-23 12:20:35 +02:00
/**
2011-05-25 15:27:07 +02:00
* Show html area for list of projects
2011-08-24 20:05:58 +02:00
*
2012-02-04 14:39:47 +01:00
* @ param Conf $conf Object conf
* @ param Translate $langs Object langs
* @ param DoliDB $db Database handler
* @ param Object $object Third party object
* @ param string $backtopage Url to go once contact is created
2015-10-24 16:09:26 +02:00
* @ param int $nocreatelink 1 = Hide create project link
2017-12-04 20:17:07 +01:00
* @ param string $morehtmlright More html on right of title
2019-02-13 22:43:12 +01:00
* @ return int
2010-05-23 12:20:35 +02:00
*/
2019-01-27 15:20:16 +01:00
function show_projects ( $conf , $langs , $db , $object , $backtopage = '' , $nocreatelink = 0 , $morehtmlright = '' )
2010-05-23 12:20:35 +02:00
{
2022-07-12 19:17:44 +02:00
global $user , $action , $hookmanager ;
2020-09-07 10:18:17 +02:00
$i = - 1 ;
2022-06-14 17:53:17 +02:00
if ( ! empty ( $conf -> project -> enabled ) && $user -> rights -> projet -> lire ) {
2020-09-07 10:18:17 +02:00
$langs -> load ( " projects " );
$newcardbutton = '' ;
2022-06-14 17:53:17 +02:00
if ( ! empty ( $conf -> project -> enabled ) && $user -> rights -> projet -> creer && empty ( $nocreatelink )) {
2020-09-07 10:18:17 +02:00
$newcardbutton .= dolGetButtonTitle ( $langs -> trans ( 'AddProject' ), '' , 'fa fa-plus-circle' , DOL_URL_ROOT . '/projet/card.php?socid=' . $object -> id . '&action=create&backtopage=' . urlencode ( $backtopage ));
}
print " \n " ;
print load_fiche_titre ( $langs -> trans ( " ProjectsDedicatedToThisThirdParty " ), $newcardbutton . $morehtmlright , '' );
2022-07-12 19:17:44 +02:00
print '<div class="div-table-responsive">' . " \n " ;
print '<table class="noborder centpercent">' ;
2020-09-07 10:18:17 +02:00
$sql = " SELECT p.rowid as id, p.entity, p.title, p.ref, p.public, p.dateo as do, p.datee as de, p.fk_statut as status, p.fk_opp_status, p.opp_amount, p.opp_percent, p.tms as date_update, p.budget_amount " ;
$sql .= " , cls.code as opp_status_code " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " projet as p " ;
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " c_lead_status as cls on p.fk_opp_status = cls.rowid " ;
2021-08-27 18:18:50 +02:00
$sql .= " WHERE p.fk_soc = " . (( int ) $object -> id );
2020-09-07 10:18:17 +02:00
$sql .= " AND p.entity IN ( " . getEntity ( 'project' ) . " ) " ;
$sql .= " ORDER BY p.dateo DESC " ;
$result = $db -> query ( $sql );
2020-10-28 00:34:59 +01:00
if ( $result ) {
2020-09-07 10:18:17 +02:00
$num = $db -> num_rows ( $result );
print '<tr class="liste_titre">' ;
print '<td>' . $langs -> trans ( " Ref " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Name " ) . '</td>' ;
print '<td class="center">' . $langs -> trans ( " DateStart " ) . '</td>' ;
print '<td class="center">' . $langs -> trans ( " DateEnd " ) . '</td>' ;
print '<td class="right">' . $langs -> trans ( " OpportunityAmountShort " ) . '</td>' ;
print '<td class="center">' . $langs -> trans ( " OpportunityStatusShort " ) . '</td>' ;
print '<td class="right">' . $langs -> trans ( " OpportunityProbabilityShort " ) . '</td>' ;
print '<td class="right">' . $langs -> trans ( " Status " ) . '</td>' ;
print '</tr>' ;
2020-10-28 00:34:59 +01:00
if ( $num > 0 ) {
2020-09-07 10:18:17 +02:00
require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php' ;
$projecttmp = new Project ( $db );
$i = 0 ;
2020-10-28 00:34:59 +01:00
while ( $i < $num ) {
2020-09-07 10:18:17 +02:00
$obj = $db -> fetch_object ( $result );
$projecttmp -> fetch ( $obj -> id );
// To verify role of users
$userAccess = $projecttmp -> restrictedProjectArea ( $user );
2020-10-28 00:34:59 +01:00
if ( $user -> rights -> projet -> lire && $userAccess > 0 ) {
2020-09-07 10:18:17 +02:00
print '<tr class="oddeven">' ;
// Ref
2022-07-12 17:42:20 +02:00
print '<td class="nowraponall">' ;
2020-09-07 10:18:17 +02:00
print $projecttmp -> getNomUrl ( 1 );
print '</td>' ;
// Label
2022-07-12 17:42:20 +02:00
print '<td class="tdoverflowmax200" title="' . dol_escape_htmltag ( $obj -> title ) . '">' . dol_escape_htmltag ( $obj -> title ) . '</td>' ;
2020-09-07 10:18:17 +02:00
// Date start
print '<td class="center">' . dol_print_date ( $db -> jdate ( $obj -> do ), " day " ) . '</td>' ;
// Date end
print '<td class="center">' . dol_print_date ( $db -> jdate ( $obj -> de ), " day " ) . '</td>' ;
// Opp amount
print '<td class="right">' ;
2020-10-28 00:34:59 +01:00
if ( $obj -> opp_status_code ) {
2020-09-07 10:18:17 +02:00
print price ( $obj -> opp_amount , 1 , '' , 1 , - 1 , - 1 , '' );
}
print '</td>' ;
// Opp status
print '<td class="center">' ;
2021-02-23 22:03:23 +01:00
if ( $obj -> opp_status_code ) {
print $langs -> trans ( " OppStatus " . $obj -> opp_status_code );
}
2020-09-07 10:18:17 +02:00
print '</td>' ;
// Opp percent
print '<td class="right">' ;
2021-02-23 22:03:23 +01:00
if ( $obj -> opp_percent ) {
print price ( $obj -> opp_percent , 1 , '' , 1 , 0 ) . '%' ;
}
2020-09-07 10:18:17 +02:00
print '</td>' ;
// Status
print '<td class="right">' . $projecttmp -> getLibStatut ( 5 ) . '</td>' ;
print '</tr>' ;
}
$i ++ ;
}
} else {
2021-10-10 21:25:46 +02:00
print '<tr class="oddeven"><td colspan="8"><span class="opacitymedium">' . $langs -> trans ( " None " ) . '</span></td></tr>' ;
2020-09-07 10:18:17 +02:00
}
$db -> free ( $result );
} else {
dol_print_error ( $db );
}
2022-07-12 19:17:44 +02:00
$parameters = array ( 'sql' => $sql , 'function' => 'show_projects' );
$reshook = $hookmanager -> executeHooks ( 'printFieldListFooter' , $parameters , $object , $action ); // Note that $action and $object may have been modified by hook
print $hookmanager -> resPrint ;
2020-09-07 10:18:17 +02:00
print " </table> " ;
print '</div>' ;
print " <br> \n " ;
}
return $i ;
2010-05-23 12:20:35 +02:00
}
2008-07-27 23:22:44 +02:00
/**
2011-05-25 15:27:07 +02:00
* Show html area for list of contacts
2011-12-21 18:56:44 +01:00
*
2022-07-18 11:51:28 +02:00
* @ param Conf $conf Object conf
* @ param Translate $langs Object langs
* @ param DoliDB $db Database handler
* @ param Societe $object Third party object
* @ param string $backtopage Url to go once contact is created
* @ param int $showuserlogin 1 = Show also user login if it exists
2019-02-13 22:43:12 +01:00
* @ return int
2008-07-27 23:22:44 +02:00
*/
2022-07-18 11:51:28 +02:00
function show_contacts ( $conf , $langs , $db , $object , $backtopage = '' , $showuserlogin = 0 )
2008-07-27 23:22:44 +02:00
{
2019-11-13 19:35:02 +01:00
global $user , $conf , $extrafields , $hookmanager ;
2018-03-06 13:26:40 +01:00
global $contextpage ;
2010-08-21 17:30:17 +02:00
2019-09-03 17:04:42 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formcompany.class.php' ;
$formcompany = new FormCompany ( $db );
2020-09-07 10:18:17 +02:00
$form = new Form ( $db );
2013-12-14 20:58:03 +01:00
2020-09-07 10:18:17 +02:00
$optioncss = GETPOST ( 'optioncss' , 'alpha' );
2022-01-13 11:09:37 +01:00
$sortfield = GETPOST ( 'sortfield' , 'aZ09comma' );
$sortorder = GETPOST ( 'sortorder' , 'aZ09comma' );
2020-09-07 10:18:17 +02:00
$page = GETPOSTISSET ( 'pageplusone' ) ? ( GETPOST ( 'pageplusone' ) - 1 ) : GETPOST ( " page " , 'int' );
2019-10-01 11:23:38 +02:00
2020-09-07 10:18:17 +02:00
$search_status = GETPOST ( " search_status " , 'int' );
2021-02-23 22:03:23 +01:00
if ( $search_status == '' ) {
$search_status = 1 ; // always display active customer first
}
2019-10-01 11:23:38 +02:00
2020-09-07 10:18:17 +02:00
$search_name = GETPOST ( " search_name " , 'alpha' );
$search_address = GETPOST ( " search_address " , 'alpha' );
$search_poste = GETPOST ( " search_poste " , 'alpha' );
2019-11-13 19:35:02 +01:00
$search_roles = GETPOST ( " search_roles " , 'array' );
2019-09-25 18:24:36 +02:00
2020-09-07 10:18:17 +02:00
$socialnetworks = getArrayOfSocialNetworks ();
$searchAddressPhoneDBFields = array (
//Address
't.address' ,
't.zip' ,
't.town' ,
//Phone
't.phone' ,
't.phone_perso' ,
't.phone_mobile' ,
//Fax
't.fax' ,
//E-mail
't.email' ,
);
2021-05-03 20:22:36 +02:00
//Social media
2021-04-30 10:12:24 +02:00
// foreach ($socialnetworks as $key => $value) {
// if ($value['active']) {
// $searchAddressPhoneDBFields['t.'.$key] = "t.socialnetworks->'$.".$key."'";
// }
// }
2020-09-07 10:18:17 +02:00
2021-02-23 22:03:23 +01:00
if ( ! $sortorder ) {
$sortorder = " ASC " ;
}
if ( ! $sortfield ) {
$sortfield = " t.lastname " ;
}
2020-09-07 10:18:17 +02:00
2020-10-28 00:34:59 +01:00
if ( ! empty ( $conf -> clicktodial -> enabled )) {
2020-09-07 10:18:17 +02:00
$user -> fetch_clicktodial (); // lecture des infos de clicktodial du user
}
$contactstatic = new Contact ( $db );
$extrafields -> fetch_name_optionals_label ( $contactstatic -> table_element );
$contactstatic -> fields = array (
'name' => array ( 'type' => 'varchar(128)' , 'label' => 'Name' , 'enabled' => 1 , 'visible' => 1 , 'notnull' => 1 , 'showoncombobox' => 1 , 'index' => 1 , 'position' => 10 , 'searchall' => 1 ),
2021-06-05 15:14:10 +02:00
'poste' => array ( 'type' => 'varchar(128)' , 'label' => 'PostOrFunction' , 'enabled' => 1 , 'visible' => 1 , 'notnull' => 1 , 'showoncombobox' => 2 , 'index' => 1 , 'position' => 20 ),
'address' => array ( 'type' => 'varchar(128)' , 'label' => 'Address' , 'enabled' => 1 , 'visible' => 1 , 'notnull' => 1 , 'showoncombobox' => 3 , 'index' => 1 , 'position' => 30 ),
'role' => array ( 'type' => 'checkbox' , 'label' => 'Role' , 'enabled' => 1 , 'visible' => 1 , 'notnull' => 1 , 'showoncombobox' => 4 , 'index' => 1 , 'position' => 40 ),
2020-09-07 10:18:17 +02:00
'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 ))),
);
// Definition of fields for list
$arrayfields = array (
2020-12-29 17:48:52 +01:00
't.rowid' => array ( 'label' => " TechnicalID " , 'checked' => ( ! empty ( $conf -> global -> MAIN_SHOW_TECHNICAL_ID ) ? 1 : 0 ), 'enabled' => ( ! empty ( $conf -> global -> MAIN_SHOW_TECHNICAL_ID ) ? 1 : 0 ), 'position' => 1 ),
2020-09-07 10:18:17 +02:00
't.name' => array ( 'label' => " Name " , 'checked' => 1 , 'position' => 10 ),
't.poste' => array ( 'label' => " PostOrFunction " , 'checked' => 1 , 'position' => 20 ),
'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 ),
'sc.role' => array ( 'label' => " ContactByDefaultFor " , 'checked' => 1 , 'position' => 40 ),
't.statut' => array ( 'label' => " Status " , 'checked' => 1 , 'position' => 50 , 'class' => 'center' ),
);
// Extra fields
2020-12-29 17:48:52 +01:00
if ( ! empty ( $extrafields -> attributes [ $contactstatic -> table_element ][ 'label' ]) && is_array ( $extrafields -> attributes [ $contactstatic -> table_element ][ 'label' ]) && count ( $extrafields -> attributes [ $contactstatic -> table_element ][ 'label' ])) {
2020-10-28 00:34:59 +01:00
foreach ( $extrafields -> attributes [ $contactstatic -> table_element ][ 'label' ] as $key => $val ) {
2020-09-07 10:18:17 +02:00
if ( ! empty ( $extrafields -> attributes [ $contactstatic -> table_element ][ 'list' ][ $key ])) {
2019-11-13 19:35:02 +01:00
$arrayfields [ " ef. " . $key ] = array (
2018-05-27 15:04:12 +02:00
'label' => $extrafields -> attributes [ $contactstatic -> table_element ][ 'label' ][ $key ],
2019-11-13 19:35:02 +01:00
'checked' => (( $extrafields -> attributes [ $contactstatic -> table_element ][ 'list' ][ $key ] < 0 ) ? 0 : 1 ),
'position' => 1000 + $extrafields -> attributes [ $contactstatic -> table_element ][ 'pos' ][ $key ],
'enabled' => ( abs ( $extrafields -> attributes [ $contactstatic -> table_element ][ 'list' ][ $key ]) != 3 && $extrafields -> attributes [ $contactstatic -> table_element ][ 'perms' ][ $key ]));
2018-05-27 15:04:12 +02:00
}
2020-09-07 10:18:17 +02:00
}
}
// Initialize array of search criterias
$search = array ();
2020-10-28 00:34:59 +01:00
foreach ( $arrayfields as $key => $val ) {
2020-09-07 10:18:17 +02:00
$queryName = 'search_' . substr ( $key , 2 );
if ( GETPOST ( $queryName , 'alpha' )) {
$search [ substr ( $key , 2 )] = GETPOST ( $queryName , 'alpha' );
}
}
$search_array_options = $extrafields -> getOptionalsFromPost ( $contactstatic -> table_element , '' , 'search_' );
// Purge search criteria
2020-10-28 00:34:59 +01:00
if ( GETPOST ( 'button_removefilter_x' , 'alpha' ) || GETPOST ( 'button_removefilter.x' , 'alpha' ) || GETPOST ( 'button_removefilter' , 'alpha' )) { // All tests are required to be compatible with all browsers
2020-09-07 10:18:17 +02:00
$search_status = '' ;
2021-02-20 15:52:45 +01:00
$search_name = '' ;
$search_roles = array ();
2020-09-07 10:18:17 +02:00
$search_address = '' ;
$search_poste = '' ;
$search = array ();
$search_array_options = array ();
2020-10-28 00:34:59 +01:00
foreach ( $contactstatic -> fields as $key => $val ) {
2021-02-23 22:03:23 +01:00
$search [ $key ] = '' ;
}
2020-09-07 10:18:17 +02:00
}
2018-03-06 13:26:40 +01:00
2020-09-07 10:18:17 +02:00
$contactstatic -> fields = dol_sort_array ( $contactstatic -> fields , 'position' );
$arrayfields = dol_sort_array ( $arrayfields , 'position' );
2018-03-06 13:26:40 +01:00
2020-09-07 10:18:17 +02:00
$newcardbutton = '' ;
2020-10-28 00:34:59 +01:00
if ( $user -> rights -> societe -> contact -> creer ) {
2020-09-07 10:18:17 +02:00
$addcontact = ( ! empty ( $conf -> global -> SOCIETE_ADDRESSES_MANAGEMENT ) ? $langs -> trans ( " AddContact " ) : $langs -> trans ( " AddContactAddress " ));
$newcardbutton .= dolGetButtonTitle ( $addcontact , '' , 'fa fa-plus-circle' , DOL_URL_ROOT . '/contact/card.php?socid=' . $object -> id . '&action=create&backtopage=' . urlencode ( $backtopage ));
}
2011-06-13 15:07:10 +02:00
2020-09-07 10:18:17 +02:00
print " \n " ;
2012-03-19 22:06:28 +01:00
2020-09-07 10:18:17 +02:00
$title = ( ! empty ( $conf -> global -> SOCIETE_ADDRESSES_MANAGEMENT ) ? $langs -> trans ( " ContactsForCompany " ) : $langs -> trans ( " ContactsAddressesForCompany " ));
print load_fiche_titre ( $title , $newcardbutton , '' );
2011-06-13 15:07:10 +02:00
2020-09-07 10:18:17 +02:00
print '<form method="POST" id="searchFormList" action="' . $_SERVER [ " PHP_SELF " ] . '" name="formfilter">' ;
print '<input type="hidden" name="token" value="' . newToken () . '">' ;
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">' ;
print '<input type="hidden" name="socid" value="' . $object -> id . '">' ;
print '<input type="hidden" name="sortorder" value="' . $sortorder . '">' ;
print '<input type="hidden" name="sortfield" value="' . $sortfield . '">' ;
print '<input type="hidden" name="page" value="' . $page . '">' ;
2017-06-26 10:09:22 +02:00
2020-09-07 10:18:17 +02:00
$varpage = empty ( $contextpage ) ? $_SERVER [ " PHP_SELF " ] : $contextpage ;
$selectedfields = $form -> multiSelectArrayWithCheckbox ( 'selectedfields' , $arrayfields , $varpage ); // This also change content of $arrayfields
//if ($massactionbutton) $selectedfields.=$form->showCheckAddButtons('checkforselect', 1);
2017-09-16 00:49:46 +02:00
2019-11-13 19:35:02 +01:00
print '<div class="div-table-responsive">' ; // You can use div-table-responsive-no-min if you dont need reserved height for your table
2020-09-07 10:18:17 +02:00
print " \n " . '<table class="tagtable liste">' . " \n " ;
$param = " socid= " . urlencode ( $object -> id );
2021-02-23 22:03:23 +01:00
if ( $search_status != '' ) {
$param .= '&search_status=' . urlencode ( $search_status );
}
if ( count ( $search_roles ) > 0 ) {
$param .= implode ( '&search_roles[]=' , $search_roles );
}
if ( $search_name != '' ) {
$param .= '&search_name=' . urlencode ( $search_name );
}
if ( $search_poste != '' ) {
$param .= '&search_poste=' . urlencode ( $search_poste );
}
if ( $search_address != '' ) {
$param .= '&search_address=' . urlencode ( $search_address );
}
if ( $optioncss != '' ) {
$param .= '&optioncss=' . urlencode ( $optioncss );
}
2020-09-07 10:18:17 +02:00
// Add $param from extra fields
$extrafieldsobjectkey = $contactstatic -> table_element ;
include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_list_search_param.tpl.php' ;
2022-12-02 11:00:52 +01:00
$sql = " SELECT t.rowid, t.entity, t.lastname, t.firstname, t.fk_pays as country_id, t.civility, t.poste, t.phone as phone_pro, t.phone_mobile, t.phone_perso, t.fax, t.email, t.socialnetworks, t.statut, t.photo, " ;
2020-09-07 10:18:17 +02:00
$sql .= " t.civility as civility_id, t.address, t.zip, t.town " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " socpeople as t " ;
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " socpeople_extrafields as ef on (t.rowid = ef.fk_object) " ;
2021-08-27 18:18:50 +02:00
$sql .= " WHERE t.fk_soc = " . (( int ) $object -> id );
2021-02-23 22:03:23 +01:00
if ( $search_status != '' && $search_status != '-1' ) {
2021-08-23 18:56:46 +02:00
$sql .= " AND t.statut = " . (( int ) $search_status );
2021-02-23 22:03:23 +01:00
}
if ( $search_name ) {
$sql .= natural_search ( array ( 't.lastname' , 't.firstname' ), $search_name );
}
if ( $search_poste ) {
$sql .= natural_search ( 't.poste' , $search_poste );
}
2020-09-07 10:18:17 +02:00
if ( $search_address ) {
2019-10-08 00:07:27 +02:00
$sql .= natural_search ( $searchAddressPhoneDBFields , $search_address );
}
2019-11-13 19:35:02 +01:00
if ( count ( $search_roles ) > 0 ) {
2021-03-22 11:30:18 +01:00
$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 )) . " )) " ;
2019-09-02 14:47:32 +02:00
}
2020-09-07 10:18:17 +02:00
// Add where from extra fields
$extrafieldsobjectkey = $contactstatic -> table_element ;
include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_list_search_sql.tpl.php' ;
2022-03-22 10:46:26 +01:00
// Add where from hooks
$parameters = array ( 'socid' => $object -> id );
$reshook = $hookmanager -> executeHooks ( 'printFieldListWhere' , $parameters , $object ); // Note that $action and $object may have been modified by hook
$sql .= $hookmanager -> resPrint ;
2021-02-23 22:03:23 +01:00
if ( $sortfield == " t.name " ) {
$sql .= " ORDER BY t.lastname $sortorder , t.firstname $sortorder " ;
} else {
$sql .= " ORDER BY $sortfield $sortorder " ;
}
2020-09-07 10:18:17 +02:00
dol_syslog ( 'core/lib/company.lib.php :: show_contacts' , LOG_DEBUG );
$result = $db -> query ( $sql );
2021-02-23 22:03:23 +01:00
if ( ! $result ) {
dol_print_error ( $db );
}
2020-09-07 10:18:17 +02:00
$num = $db -> num_rows ( $result );
// Fields title search
// --------------------------------------------------------------------
print '<tr class="liste_titre">' ;
2020-10-28 00:34:59 +01:00
foreach ( $contactstatic -> fields as $key => $val ) {
2020-09-07 10:18:17 +02:00
$align = '' ;
2021-02-23 22:03:23 +01:00
if ( in_array ( $val [ 'type' ], array ( 'date' , 'datetime' , 'timestamp' ))) {
$align .= ( $align ? ' ' : '' ) . 'center' ;
}
if ( in_array ( $val [ 'type' ], array ( 'timestamp' ))) {
$align .= ( $align ? ' ' : '' ) . 'nowrap' ;
}
if ( $key == 'status' || $key == 'statut' ) {
$align .= ( $align ? ' ' : '' ) . 'center' ;
}
2020-10-28 00:34:59 +01:00
if ( ! empty ( $arrayfields [ 't.' . $key ][ 'checked' ]) || ! empty ( $arrayfields [ 'sc.' . $key ][ 'checked' ])) {
2020-09-07 10:18:17 +02:00
print '<td class="liste_titre' . ( $align ? ' ' . $align : '' ) . '">' ;
if ( in_array ( $key , array ( 'statut' ))) {
print $form -> selectarray ( 'search_status' , array ( '-1' => '' , '0' => $contactstatic -> LibStatut ( 0 , 1 ), '1' => $contactstatic -> LibStatut ( 1 , 1 )), $search_status );
} elseif ( in_array ( $key , array ( 'role' ))) {
2022-07-18 11:51:28 +02:00
print $formcompany -> showRoles ( " search_roles " , $contactstatic , 'edit' , $search_roles , 'minwidth200 maxwidth300' );
2020-09-07 10:18:17 +02:00
} else {
2021-02-17 22:16:07 +01:00
print '<input type="text" class="flat maxwidth75" name="search_' . $key . '" value="' . ( ! empty ( $search [ $key ]) ? dol_escape_htmltag ( $search [ $key ]) : '' ) . '">' ;
2020-09-07 10:18:17 +02:00
}
print '</td>' ;
}
}
2022-07-18 11:51:28 +02:00
if ( $showuserlogin ) {
print '<td></td>' ;
}
2020-09-07 10:18:17 +02:00
// Extra fields
$extrafieldsobjectkey = $contactstatic -> table_element ;
include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_list_search_input.tpl.php' ;
// Fields from hook
$parameters = array ( 'arrayfields' => $arrayfields );
$reshook = $hookmanager -> executeHooks ( 'printFieldListOption' , $parameters , $contactstatic ); // Note that $action and $object may have been modified by hook
print $hookmanager -> resPrint ;
// Action column
print '<td class="liste_titre" align="right">' ;
print $form -> showFilterButtons ();
print '</td>' ;
print '</tr>' . " \n " ;
// Fields title label
// --------------------------------------------------------------------
print '<tr class="liste_titre">' ;
2020-10-28 00:34:59 +01:00
foreach ( $contactstatic -> fields as $key => $val ) {
2020-09-07 10:18:17 +02:00
$align = '' ;
2021-02-23 22:03:23 +01:00
if ( in_array ( $val [ 'type' ], array ( 'date' , 'datetime' , 'timestamp' ))) {
$align .= ( $align ? ' ' : '' ) . 'center' ;
}
if ( in_array ( $val [ 'type' ], array ( 'timestamp' ))) {
$align .= ( $align ? ' ' : '' ) . 'nowrap' ;
}
if ( $key == 'status' || $key == 'statut' ) {
$align .= ( $align ? ' ' : '' ) . 'center' ;
}
if ( ! empty ( $arrayfields [ 't.' . $key ][ 'checked' ])) {
print getTitleFieldOfList ( $val [ 'label' ], 0 , $_SERVER [ 'PHP_SELF' ], 't.' . $key , '' , $param , ( $align ? 'class="' . $align . '"' : '' ), $sortfield , $sortorder , $align . ' ' ) . " \n " ;
}
if ( $key == 'role' ) {
$align .= ( $align ? ' ' : '' ) . 'left' ;
}
2020-09-07 10:18:17 +02:00
if ( ! empty ( $arrayfields [ 'sc.' . $key ][ 'checked' ])) {
print getTitleFieldOfList ( $arrayfields [ 'sc.' . $key ][ 'label' ], 0 , $_SERVER [ 'PHP_SELF' ], '' , '' , $param , ( $align ? 'class="' . $align . '"' : '' ), $sortfield , $sortorder , $align . ' ' ) . " \n " ;
}
}
2022-07-18 11:51:28 +02:00
if ( $showuserlogin ) {
print '<td>' . $langs -> trans ( " DolibarrLogin " ) . '</td>' ;
}
2020-09-07 10:18:17 +02:00
// Extra fields
$extrafieldsobjectkey = $contactstatic -> table_element ;
include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_list_search_title.tpl.php' ;
// Hook fields
2019-11-13 19:35:02 +01:00
$parameters = array ( 'arrayfields' => $arrayfields , 'param' => $param , 'sortfield' => $sortfield , 'sortorder' => $sortorder );
2020-09-07 10:18:17 +02:00
$reshook = $hookmanager -> executeHooks ( 'printFieldListTitle' , $parameters , $object ); // Note that $action and $object may have been modified by hook
print $hookmanager -> resPrint ;
print getTitleFieldOfList ( $selectedfields , 0 , $_SERVER [ " PHP_SELF " ], '' , '' , '' , 'align="center"' , $sortfield , $sortorder , 'maxwidthsearch ' ) . " \n " ;
print '</tr>' . " \n " ;
2018-03-06 13:26:40 +01:00
2020-09-07 10:18:17 +02:00
$i = - 1 ;
2017-06-26 10:09:22 +02:00
2020-10-28 00:34:59 +01:00
if ( $num || ( GETPOST ( 'button_search' ) || GETPOST ( 'button_search.x' ) || GETPOST ( 'button_search_x' ))) {
2020-09-07 10:18:17 +02:00
$i = 0 ;
2020-10-28 00:34:59 +01:00
while ( $i < $num ) {
2020-09-07 10:18:17 +02:00
$obj = $db -> fetch_object ( $result );
$contactstatic -> id = $obj -> rowid ;
2021-03-17 22:16:54 +01:00
$contactstatic -> ref = $obj -> rowid ;
2020-09-07 10:18:17 +02:00
$contactstatic -> statut = $obj -> statut ;
$contactstatic -> lastname = $obj -> lastname ;
$contactstatic -> firstname = $obj -> firstname ;
$contactstatic -> civility_id = $obj -> civility_id ;
$contactstatic -> civility_code = $obj -> civility_id ;
$contactstatic -> poste = $obj -> poste ;
$contactstatic -> address = $obj -> address ;
$contactstatic -> zip = $obj -> zip ;
$contactstatic -> town = $obj -> town ;
$contactstatic -> phone_pro = $obj -> phone_pro ;
$contactstatic -> phone_mobile = $obj -> phone_mobile ;
$contactstatic -> phone_perso = $obj -> phone_perso ;
$contactstatic -> email = $obj -> email ;
$contactstatic -> socialnetworks = $obj -> socialnetworks ;
$contactstatic -> photo = $obj -> photo ;
2022-12-02 11:00:52 +01:00
$contactstatic -> entity = $obj -> entity ;
2020-09-07 10:18:17 +02:00
$country_code = getCountry ( $obj -> country_id , 2 );
$contactstatic -> country_code = $country_code ;
$contactstatic -> setGenderFromCivility ();
$contactstatic -> fetch_optionals ();
$resultRole = $contactstatic -> fetchRoles ();
if ( $resultRole < 0 ) {
setEventMessages ( null , $contactstatic -> errors , 'errors' );
}
2020-10-28 00:34:59 +01:00
if ( is_array ( $contactstatic -> array_options )) {
foreach ( $contactstatic -> array_options as $key => $val ) {
2020-09-07 10:18:17 +02:00
$obj -> $key = $val ;
}
}
print '<tr class="oddeven">' ;
// ID
2020-10-28 00:34:59 +01:00
if ( ! empty ( $arrayfields [ 't.rowid' ][ 'checked' ])) {
2020-09-07 10:18:17 +02:00
print '<td>' ;
print $contactstatic -> id ;
print '</td>' ;
}
2018-03-06 13:26:40 +01:00
2017-03-24 17:32:38 +01:00
// Photo - Name
2020-10-28 00:34:59 +01:00
if ( ! empty ( $arrayfields [ 't.name' ][ 'checked' ])) {
2020-09-07 10:18:17 +02:00
print '<td>' ;
print $form -> showphoto ( 'contact' , $contactstatic , 0 , 0 , 0 , 'photorefnoborder valignmiddle marginrightonly' , 'small' , 1 , 0 , 1 );
2019-01-27 11:55:16 +01:00
print $contactstatic -> getNomUrl ( 0 , '' , 0 , '&backtopage=' . urlencode ( $backtopage ));
2018-03-06 13:26:40 +01:00
print '</td>' ;
2020-09-07 10:18:17 +02:00
}
2017-06-26 10:09:22 +02:00
2016-08-06 00:04:24 +02:00
// Job position
2020-10-28 00:34:59 +01:00
if ( ! empty ( $arrayfields [ 't.poste' ][ 'checked' ])) {
2020-09-07 10:18:17 +02:00
print '<td>' ;
2021-02-23 22:03:23 +01:00
if ( $obj -> poste ) {
print $obj -> poste ;
}
2020-09-07 10:18:17 +02:00
print '</td>' ;
}
// Address - Phone - Email
2020-10-28 00:34:59 +01:00
if ( ! empty ( $arrayfields [ 't.address' ][ 'checked' ])) {
2020-09-07 10:18:17 +02:00
print '<td>' ;
print $contactstatic -> getBannerAddress ( 'contact' , $object );
print '</td>' ;
}
// Role
2020-10-28 00:34:59 +01:00
if ( ! empty ( $arrayfields [ 'sc.role' ][ 'checked' ])) {
2020-09-07 10:18:17 +02:00
print '<td>' ;
print $formcompany -> showRoles ( " roles " , $contactstatic , 'view' );
print '</td>' ;
}
// Status
2020-10-28 00:34:59 +01:00
if ( ! empty ( $arrayfields [ 't.statut' ][ 'checked' ])) {
2020-09-07 10:18:17 +02:00
print '<td class="center">' . $contactstatic -> getLibStatut ( 5 ) . '</td>' ;
}
2022-07-18 11:51:28 +02:00
if ( $showuserlogin ) {
print '<td>' ;
$tmpuser = new User ( $db );
$resfetch = $tmpuser -> fetch ( 0 , '' , '' , 0 , - 1 , '' , $contactstatic -> id );
if ( $resfetch > 0 ) {
print $tmpuser -> getNomUrl ( 1 , '' , 0 , 0 , 24 , 1 );
}
print '</td>' ;
}
2020-09-07 10:18:17 +02:00
// Extra fields
$extrafieldsobjectkey = $contactstatic -> table_element ;
include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_list_print_fields.tpl.php' ;
// Actions
2018-03-06 13:26:40 +01:00
print '<td align="right">' ;
// Add to agenda
2022-06-09 22:10:51 +02:00
if ( isModEnabled ( 'agenda' ) && $user -> rights -> agenda -> myactions -> create ) {
2020-09-07 10:18:17 +02:00
print '<a href="' . DOL_URL_ROOT . '/comm/action/card.php?action=create&actioncode=&contactid=' . $obj -> rowid . '&socid=' . $object -> id . '&backtopage=' . urlencode ( $backtopage ) . '">' ;
print img_object ( $langs -> trans ( " Event " ), " action " );
print '</a> ' ;
}
// Edit
2020-10-28 00:34:59 +01:00
if ( $user -> rights -> societe -> contact -> creer ) {
2021-09-27 12:24:01 +02:00
print '<a class="editfielda paddingleft" href="' . DOL_URL_ROOT . '/contact/card.php?action=edit&token=' . newToken () . '&id=' . $obj -> rowid . '&backtopage=' . urlencode ( $backtopage ) . '">' ;
2020-09-07 10:18:17 +02:00
print img_edit ();
print '</a>' ;
}
print '</td>' ;
print " </tr> \n " ;
$i ++ ;
}
} else {
2019-11-13 19:35:02 +01:00
$colspan = 1 ;
2021-02-23 22:03:23 +01:00
foreach ( $arrayfields as $key => $val ) {
if ( ! empty ( $val [ 'checked' ])) {
$colspan ++ ;
}
}
2018-03-06 13:26:40 +01:00
print '<tr><td colspan="' . $colspan . '" class="opacitymedium">' . $langs -> trans ( " None " ) . '</td></tr>' ;
2020-09-07 10:18:17 +02:00
}
print " \n </table> \n " ;
2017-09-16 00:49:46 +02:00
print '</div>' ;
2010-08-21 17:30:17 +02:00
2020-09-07 10:18:17 +02:00
print '</form>' . " \n " ;
2014-01-05 15:46:39 +01:00
2020-09-07 10:18:17 +02:00
return $i ;
2008-07-27 23:22:44 +02:00
}
2008-01-11 11:25:26 +01:00
/**
2011-04-10 23:30:11 +02:00
* Show html area with actions to do
2012-02-04 14:39:47 +01:00
*
2019-02-13 22:43:12 +01:00
* @ param Conf $conf Object conf
* @ param Translate $langs Object langs
* @ param DoliDB $db Object db
* @ param Adherent | Societe $filterobj Object thirdparty or member
* @ param Contact $objcon Object contact
* @ param int $noprint Return string but does not output it
* @ param int $actioncode Filter on actioncode
* @ return string | void Return html part or void if noprint is 1
2008-07-29 21:20:33 +02:00
*/
2019-01-27 15:20:16 +01:00
function show_actions_todo ( $conf , $langs , $db , $filterobj , $objcon = '' , $noprint = 0 , $actioncode = '' )
2008-01-08 09:30:05 +01:00
{
2020-09-07 10:18:17 +02:00
global $user , $conf ;
2010-08-21 17:30:17 +02:00
2020-09-07 10:18:17 +02:00
$out = show_actions_done ( $conf , $langs , $db , $filterobj , $objcon , 1 , $actioncode , 'todo' );
2011-04-11 09:35:15 +02:00
2021-02-23 22:03:23 +01:00
if ( $noprint ) {
return $out ;
} else {
print $out ;
}
2008-01-08 09:30:05 +01:00
}
2008-01-11 11:25:26 +01:00
/**
2019-06-12 19:32:29 +02:00
* Show html area with actions ( done or not , ignore the name of function ) .
* Note : Global parameter $param must be defined .
2011-12-21 18:56:44 +01:00
*
2016-09-11 13:38:15 +02:00
* @ param Conf $conf Object conf
* @ param Translate $langs Object langs
* @ param DoliDB $db Object db
2020-07-24 11:53:44 +02:00
* @ param mixed $filterobj Filter on object Adherent | Societe | Project | Product | CommandeFournisseur | Dolresource | Ticket ... to list events linked to an object
2018-12-08 16:37:41 +01:00
* @ param Contact $objcon Filter on object contact to filter events on a contact
2016-09-11 13:38:15 +02:00
* @ param int $noprint Return string but does not output it
* @ param string $actioncode Filter on actioncode
2017-03-30 11:25:28 +02:00
* @ param string $donetodo Filter on event 'done' or 'todo' or '' = nofilter ( all ) .
2016-10-18 00:02:18 +02:00
* @ param array $filters Filter on other fields
2016-10-30 12:39:51 +01:00
* @ param string $sortfield Sort field
* @ param string $sortorder Sort order
2020-07-24 11:53:44 +02:00
* @ param string $module You can add module name here if elementtype in table llx_actioncomm is objectkey @ module
2019-02-13 22:43:12 +01:00
* @ return string | void Return html part or void if noprint is 1
2008-07-29 21:20:33 +02:00
*/
2020-07-24 11:53:44 +02:00
function show_actions_done ( $conf , $langs , $db , $filterobj , $objcon = '' , $noprint = 0 , $actioncode = '' , $donetodo = 'done' , $filters = array (), $sortfield = 'a.datep,a.id' , $sortorder = 'DESC' , $module = '' )
2008-01-08 09:30:05 +01:00
{
2020-09-07 10:18:17 +02:00
global $user , $conf ;
global $form ;
global $param , $massactionbutton ;
2020-12-29 17:48:52 +01:00
2021-02-07 19:44:22 +01:00
$start_year = GETPOST ( 'dateevent_startyear' , 'int' );
$start_month = GETPOST ( 'dateevent_startmonth' , 'int' );
$start_day = GETPOST ( 'dateevent_startday' , 'int' );
$end_year = GETPOST ( 'dateevent_endyear' , 'int' );
$end_month = GETPOST ( 'dateevent_endmonth' , 'int' );
$end_day = GETPOST ( 'dateevent_endday' , 'int' );
2020-12-29 17:48:52 +01:00
$tms_start = '' ;
$tms_end = '' ;
2020-09-07 10:18:17 +02:00
if ( ! empty ( $start_year ) && ! empty ( $start_month ) && ! empty ( $start_day )) {
2021-02-07 19:44:22 +01:00
$tms_start = dol_mktime ( 0 , 0 , 0 , $start_month , $start_day , $start_year , 'tzuserrel' );
2020-09-07 10:18:17 +02:00
}
if ( ! empty ( $end_year ) && ! empty ( $end_month ) && ! empty ( $end_day )) {
2021-02-07 19:44:22 +01:00
$tms_end = dol_mktime ( 23 , 59 , 59 , $end_month , $end_day , $end_year , 'tzuserrel' );
2020-09-07 10:18:17 +02:00
}
2020-10-28 00:34:59 +01:00
if ( GETPOST ( 'button_removefilter_x' , 'alpha' ) || GETPOST ( 'button_removefilter.x' , 'alpha' ) || GETPOST ( 'button_removefilter' , 'alpha' )) { // All test are required to be compatible with all browsers
2020-09-07 10:18:17 +02:00
$tms_start = '' ;
$tms_end = '' ;
}
dol_include_once ( '/comm/action/class/actioncomm.class.php' );
// Check parameters
2021-02-23 22:03:23 +01:00
if ( ! is_object ( $filterobj ) && ! is_object ( $objcon )) {
dol_print_error ( '' , 'BadParameter' );
}
2020-09-07 10:18:17 +02:00
$out = '' ;
$histo = array ();
$numaction = 0 ;
$now = dol_now ( 'tzuser' );
// Open DSI -- Fix order by -- Begin
$sortfield_list = explode ( ',' , $sortfield );
$sortfield_label_list = array ( 'a.id' => 'id' , 'a.datep' => 'dp' , 'a.percent' => 'percent' );
$sortfield_new_list = array ();
foreach ( $sortfield_list as $sortfield_value ) {
$sortfield_new_list [] = $sortfield_label_list [ trim ( $sortfield_value )];
}
$sortfield_new = implode ( ',' , $sortfield_new_list );
$sql = '' ;
2022-06-09 22:16:48 +02:00
if ( isModEnabled ( 'agenda' )) {
2020-09-07 10:18:17 +02:00
// Recherche histo sur actioncomm
if ( is_object ( $objcon ) && $objcon -> id > 0 ) {
$sql = " SELECT DISTINCT a.id, a.label as label, " ;
} else {
$sql = " SELECT a.id, a.label as label, " ;
}
$sql .= " a.datep as dp, " ;
$sql .= " a.datep2 as dp2, " ;
$sql .= " a.percent as percent, 'action' as type, " ;
$sql .= " a.fk_element, a.elementtype, " ;
$sql .= " a.fk_contact, " ;
$sql .= " c.code as acode, c.libelle as alabel, c.picto as apicto, " ;
$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 " ;
2021-02-20 15:52:45 +01:00
if ( is_object ( $filterobj ) && in_array ( get_class ( $filterobj ), array ( 'Societe' , 'Client' , 'Fournisseur' ))) {
$sql .= " , sp.lastname, sp.firstname " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Dolresource' ) {
/* Nothing */
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Project' ) {
/* Nothing */
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Adherent' ) {
$sql .= " , m.lastname, m.firstname " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'CommandeFournisseur' ) {
$sql .= " , o.ref " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Product' ) {
$sql .= " , o.ref " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Ticket' ) {
$sql .= " , o.ref " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'BOM' ) {
$sql .= " , o.ref " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Contrat' ) {
$sql .= " , o.ref " ;
2021-09-27 11:20:38 +02:00
} elseif ( is_object ( $filterobj ) && is_array ( $filterobj -> fields ) && is_array ( $filterobj -> fields [ 'rowid' ]) && $filterobj -> table_element && $filterobj -> element ) {
if ( ! empty ( $filterobj -> fields [ 'ref' ])) {
$sql .= " , o.ref " ;
} elseif ( ! empty ( $filterobj -> fields [ 'label' ])) {
$sql .= " , o.label " ;
}
2021-02-20 15:52:45 +01:00
}
2020-09-07 10:18:17 +02:00
$sql .= " FROM " . MAIN_DB_PREFIX . " actioncomm as a " ;
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " user as u on u.rowid = a.fk_user_action " ;
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " c_actioncomm as c ON a.fk_action = c.id " ;
$force_filter_contact = false ;
if ( is_object ( $objcon ) && $objcon -> id > 0 ) {
$force_filter_contact = true ;
$sql .= " INNER JOIN " . MAIN_DB_PREFIX . " actioncomm_resources as r ON a.id = r.fk_actioncomm " ;
2021-06-09 15:36:47 +02:00
$sql .= " AND r.element_type = ' " . $db -> escape ( $objcon -> table_element ) . " ' AND r.fk_element = " . (( int ) $objcon -> id );
2020-09-07 10:18:17 +02:00
}
2021-02-23 22:03:23 +01:00
if ( is_object ( $filterobj ) && in_array ( get_class ( $filterobj ), array ( 'Societe' , 'Client' , 'Fournisseur' ))) {
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " socpeople as sp ON a.fk_contact = sp.rowid " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Dolresource' ) {
2020-09-07 10:18:17 +02:00
$sql .= " INNER JOIN " . MAIN_DB_PREFIX . " element_resources as er " ;
$sql .= " ON er.resource_type = 'dolresource' " ;
$sql .= " AND er.element_id = a.id " ;
2021-06-09 15:36:47 +02:00
$sql .= " AND er.resource_id = " . (( int ) $filterobj -> id );
2021-02-20 15:52:45 +01:00
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Project' ) {
/* Nothing */
2021-02-23 22:03:23 +01:00
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Adherent' ) {
$sql .= " , " . MAIN_DB_PREFIX . " adherent as m " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'CommandeFournisseur' ) {
$sql .= " , " . MAIN_DB_PREFIX . " commande_fournisseur as o " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Product' ) {
$sql .= " , " . MAIN_DB_PREFIX . " product as o " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Ticket' ) {
$sql .= " , " . MAIN_DB_PREFIX . " ticket as o " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'BOM' ) {
$sql .= " , " . MAIN_DB_PREFIX . " bom_bom as o " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Contrat' ) {
$sql .= " , " . MAIN_DB_PREFIX . " contrat as o " ;
2021-09-27 11:20:38 +02:00
} elseif ( is_object ( $filterobj ) && is_array ( $filterobj -> fields ) && is_array ( $filterobj -> fields [ 'rowid' ]) && ( is_array ( $filterobj -> fields [ 'ref' ]) || is_array ( $filterobj -> fields [ 'label' ])) && $filterobj -> table_element && $filterobj -> element ) {
2021-02-23 22:03:23 +01:00
$sql .= " , " . MAIN_DB_PREFIX . $filterobj -> table_element . " as o " ;
}
2020-09-07 10:18:17 +02:00
$sql .= " WHERE a.entity IN ( " . getEntity ( 'agenda' ) . " ) " ;
if ( $force_filter_contact === false ) {
2021-02-23 22:03:23 +01:00
if ( is_object ( $filterobj ) && in_array ( get_class ( $filterobj ), array ( 'Societe' , 'Client' , 'Fournisseur' )) && $filterobj -> id ) {
2021-08-23 17:41:11 +02:00
$sql .= " AND a.fk_soc = " . (( int ) $filterobj -> id );
2021-02-23 22:03:23 +01:00
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Dolresource' ) {
/* Nothing */
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Project' && $filterobj -> id ) {
2021-08-23 17:41:11 +02:00
$sql .= " AND a.fk_project = " . (( int ) $filterobj -> id );
2021-02-23 22:03:23 +01:00
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Adherent' ) {
2020-09-07 10:18:17 +02:00
$sql .= " AND a.fk_element = m.rowid AND a.elementtype = 'member' " ;
2021-02-23 22:03:23 +01:00
if ( $filterobj -> id ) {
2021-08-23 17:41:11 +02:00
$sql .= " AND a.fk_element = " . (( int ) $filterobj -> id );
2021-02-23 22:03:23 +01:00
}
2020-10-28 00:34:59 +01:00
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'CommandeFournisseur' ) {
2020-09-07 10:18:17 +02:00
$sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'order_supplier' " ;
2021-02-23 22:03:23 +01:00
if ( $filterobj -> id ) {
2021-08-23 17:41:11 +02:00
$sql .= " AND a.fk_element = " . (( int ) $filterobj -> id );
2021-02-23 22:03:23 +01:00
}
2020-10-28 00:34:59 +01:00
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Product' ) {
2020-09-07 10:18:17 +02:00
$sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'product' " ;
2021-02-23 22:03:23 +01:00
if ( $filterobj -> id ) {
2021-08-23 17:41:11 +02:00
$sql .= " AND a.fk_element = " . (( int ) $filterobj -> id );
2021-02-23 22:03:23 +01:00
}
2020-10-28 00:34:59 +01:00
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Ticket' ) {
2020-09-07 10:18:17 +02:00
$sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'ticket' " ;
2021-02-23 22:03:23 +01:00
if ( $filterobj -> id ) {
2021-08-23 17:41:11 +02:00
$sql .= " AND a.fk_element = " . (( int ) $filterobj -> id );
2021-02-23 22:03:23 +01:00
}
2020-10-28 00:34:59 +01:00
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'BOM' ) {
2020-09-07 10:18:17 +02:00
$sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'bom' " ;
2021-02-23 22:03:23 +01:00
if ( $filterobj -> id ) {
2021-08-23 17:41:11 +02:00
$sql .= " AND a.fk_element = " . (( int ) $filterobj -> id );
2021-02-23 22:03:23 +01:00
}
2020-10-28 00:34:59 +01:00
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Contrat' ) {
2020-09-07 10:18:17 +02:00
$sql .= " AND a.fk_element = o.rowid AND a.elementtype = 'contract' " ;
2021-02-23 22:03:23 +01:00
if ( $filterobj -> id ) {
2021-08-23 17:41:11 +02:00
$sql .= " AND a.fk_element = " . (( int ) $filterobj -> id );
2021-02-23 22:03:23 +01:00
}
2021-09-27 11:20:38 +02:00
} elseif ( is_object ( $filterobj ) && is_array ( $filterobj -> fields ) && is_array ( $filterobj -> fields [ 'rowid' ]) && ( is_array ( $filterobj -> fields [ 'ref' ]) || is_array ( $filterobj -> fields [ 'label' ])) && $filterobj -> table_element && $filterobj -> element ) {
2020-09-07 10:18:17 +02:00
// Generic case
2021-08-28 00:55:51 +02:00
$sql .= " AND a.fk_element = o.rowid AND a.elementtype = ' " . $db -> escape ( $filterobj -> element ) . ( $module ? " @ " . $module : " " ) . " ' " ;
2021-02-23 22:03:23 +01:00
if ( $filterobj -> id ) {
2021-08-23 17:41:11 +02:00
$sql .= " AND a.fk_element = " . (( int ) $filterobj -> id );
2021-02-23 22:03:23 +01:00
}
2020-09-07 10:18:17 +02:00
}
}
2021-02-07 19:44:22 +01:00
if ( ! empty ( $tms_start ) && ! empty ( $tms_end )) {
$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 ) . " ')) " ;
2021-02-23 22:03:23 +01:00
} elseif ( empty ( $tms_start ) && ! empty ( $tms_end )) {
2021-02-07 19:44:22 +01:00
$sql .= " AND ((a.datep <= ' " . $db -> idate ( $tms_end ) . " ') OR (a.datep2 <= ' " . $db -> idate ( $tms_end ) . " ')) " ;
2021-02-23 22:03:23 +01:00
} elseif ( ! empty ( $tms_start ) && empty ( $tms_end )) {
2021-02-07 19:44:22 +01:00
$sql .= " AND ((a.datep >= ' " . $db -> idate ( $tms_start ) . " ') OR (a.datep2 >= ' " . $db -> idate ( $tms_start ) . " ')) " ;
2020-09-07 10:18:17 +02:00
}
2020-09-08 21:27:28 +02:00
if ( is_array ( $actioncode ) && ! empty ( $actioncode )) {
2020-09-07 10:18:17 +02:00
$sql .= ' AND (' ;
foreach ( $actioncode as $key => $code ) {
2021-02-23 22:03:23 +01:00
if ( $key != 0 ) {
$sql .= " OR ( " ;
}
if ( ! empty ( $code )) {
2021-09-10 15:45:03 +02:00
addEventTypeSQL ( $sql , $code );
2021-02-23 22:03:23 +01:00
}
if ( $key != 0 ) {
$sql .= " ) " ;
}
2020-09-07 10:18:17 +02:00
}
$sql .= ')' ;
2021-02-23 22:03:23 +01:00
} elseif ( ! empty ( $actioncode )) {
2021-09-10 15:45:03 +02:00
addEventTypeSQL ( $sql , $actioncode );
2020-09-07 10:18:17 +02:00
}
2021-09-10 15:45:03 +02:00
addOtherFilterSQL ( $sql , $donetodo , $now , $filters );
2020-09-07 10:18:17 +02:00
if ( is_array ( $actioncode )) {
foreach ( $actioncode as $code ) {
$sql2 = addMailingEventTypeSQL ( $code , $objcon , $filterobj );
2020-09-08 21:27:28 +02:00
if ( ! empty ( $sql2 )) {
2021-02-23 22:03:23 +01:00
if ( ! empty ( $sql )) {
$sql = $sql . " UNION " . $sql2 ;
} elseif ( empty ( $sql )) {
$sql = $sql2 ;
}
2020-09-07 10:18:17 +02:00
break ;
}
}
2021-02-23 22:03:23 +01:00
} else {
2020-09-07 10:18:17 +02:00
$sql2 = addMailingEventTypeSQL ( $actioncode , $objcon , $filterobj );
2020-09-08 21:27:28 +02:00
if ( ! empty ( $sql ) && ! empty ( $sql2 )) {
2020-09-07 10:18:17 +02:00
$sql = $sql . " UNION " . $sql2 ;
2021-02-23 22:03:23 +01:00
} elseif ( empty ( $sql ) && ! empty ( $sql2 )) {
2020-09-07 10:18:17 +02:00
$sql = $sql2 ;
}
}
}
//TODO Add limit in nb of results
2020-10-28 00:34:59 +01:00
if ( $sql ) {
2020-09-07 10:18:17 +02:00
$sql .= $db -> order ( $sortfield_new , $sortorder );
dol_syslog ( " company.lib::show_actions_done " , LOG_DEBUG );
$resql = $db -> query ( $sql );
2020-10-28 00:34:59 +01:00
if ( $resql ) {
2020-09-07 10:18:17 +02:00
$i = 0 ;
$num = $db -> num_rows ( $resql );
2020-10-28 00:34:59 +01:00
while ( $i < $num ) {
2020-09-07 10:18:17 +02:00
$obj = $db -> fetch_object ( $resql );
if ( $obj -> type == 'action' ) {
$contactaction = new ActionComm ( $db );
$contactaction -> id = $obj -> id ;
$result = $contactaction -> fetchResources ();
if ( $result < 0 ) {
dol_print_error ( $db );
setEventMessage ( " company.lib::show_actions_done Error fetch ressource " , 'errors' );
}
//if ($donetodo == 'todo') $sql.= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep > '".$db->idate($now)."'))";
//elseif ($donetodo == 'done') $sql.= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= '".$db->idate($now)."'))";
$tododone = '' ;
2021-02-23 22:03:23 +01:00
if (( $obj -> percent >= 0 and $obj -> percent < 100 ) || ( $obj -> percent == - 1 && ( ! empty ( $obj -> datep ) && $obj -> datep > $now ))) {
$tododone = 'todo' ;
}
2020-09-07 10:18:17 +02:00
$histo [ $numaction ] = array (
'type' => $obj -> type ,
'tododone' => $tododone ,
'id' => $obj -> id ,
'datestart' => $db -> jdate ( $obj -> dp ),
'dateend' => $db -> jdate ( $obj -> dp2 ),
'note' => $obj -> label ,
'percent' => $obj -> percent ,
'userid' => $obj -> user_id ,
'login' => $obj -> user_login ,
'userfirstname' => $obj -> user_firstname ,
'userlastname' => $obj -> user_lastname ,
'userphoto' => $obj -> user_photo ,
'contact_id' => $obj -> fk_contact ,
'socpeopleassigned' => $contactaction -> socpeopleassigned ,
2021-06-16 11:50:52 +02:00
'lastname' => empty ( $obj -> lastname ) ? '' : $obj -> lastname ,
'firstname' => empty ( $obj -> firstname ) ? '' : $obj -> firstname ,
2020-09-07 10:18:17 +02:00
'fk_element' => $obj -> fk_element ,
'elementtype' => $obj -> elementtype ,
// Type of event
'acode' => $obj -> acode ,
'alabel' => $obj -> alabel ,
'libelle' => $obj -> alabel , // deprecated
'apicto' => $obj -> apicto
);
} else {
$histo [ $numaction ] = array (
'type' => $obj -> type ,
'tododone' => 'done' ,
'id' => $obj -> id ,
'datestart' => $db -> jdate ( $obj -> dp ),
'dateend' => $db -> jdate ( $obj -> dp2 ),
'note' => $obj -> label ,
'percent' => $obj -> percent ,
'acode' => $obj -> acode ,
'userid' => $obj -> user_id ,
'login' => $obj -> user_login ,
'userfirstname' => $obj -> user_firstname ,
'userlastname' => $obj -> user_lastname ,
'userphoto' => $obj -> user_photo
);
}
$numaction ++ ;
$i ++ ;
}
} else {
dol_print_error ( $db );
}
}
2022-06-09 22:10:51 +02:00
if ( isModEnabled ( 'agenda' ) || ( isModEnabled ( 'mailing' ) && ! empty ( $objcon -> email ))) {
2020-09-07 10:18:17 +02:00
$delay_warning = $conf -> global -> MAIN_DELAY_ACTIONS_TODO * 24 * 60 * 60 ;
require_once DOL_DOCUMENT_ROOT . '/comm/action/class/actioncomm.class.php' ;
include_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php' ;
$formactions = new FormActions ( $db );
$actionstatic = new ActionComm ( $db );
$userstatic = new User ( $db );
2020-10-28 00:34:59 +01:00
$userlinkcache = array ();
2020-09-07 10:18:17 +02:00
$contactstatic = new Contact ( $db );
2020-10-28 00:34:59 +01:00
$elementlinkcache = array ();
2020-09-07 10:18:17 +02:00
$out .= '<form name="listactionsfilter" class="listactionsfilter" action="' . $_SERVER [ " PHP_SELF " ] . '" method="POST">' ;
2020-10-16 13:36:05 +02:00
$out .= '<input type="hidden" name="token" value="' . newToken () . '">' ;
2020-09-07 10:18:17 +02:00
if ( $objcon && get_class ( $objcon ) == 'Contact' &&
2020-10-28 00:34:59 +01:00
( is_null ( $filterobj ) || get_class ( $filterobj ) == 'Societe' )) {
2020-09-07 10:18:17 +02:00
$out .= '<input type="hidden" name="id" value="' . $objcon -> id . '" />' ;
} else {
$out .= '<input type="hidden" name="id" value="' . $filterobj -> id . '" />' ;
}
2021-02-23 22:03:23 +01:00
if ( $filterobj && get_class ( $filterobj ) == 'Societe' ) {
$out .= '<input type="hidden" name="socid" value="' . $filterobj -> id . '" />' ;
}
2020-09-07 10:18:17 +02:00
$out .= " \n " ;
$out .= '<div class="div-table-responsive-no-min">' ;
$out .= '<table class="noborder centpercent">' ;
$out .= '<tr class="liste_titre">' ;
2020-10-28 00:34:59 +01:00
if ( $donetodo ) {
2020-09-07 10:18:17 +02:00
$out .= '<td class="liste_titre"></td>' ;
}
$out .= '<td class="liste_titre"></td>' ;
$out .= '<td class="liste_titre"></td>' ;
$out .= '<td class="liste_titre">' ;
2022-02-02 17:57:20 +01:00
$out .= $formactions -> select_type_actions ( $actioncode , " actioncode " , '' , empty ( $conf -> global -> AGENDA_USE_EVENT_TYPE ) ? 1 : - 1 , 0 , ( empty ( $conf -> global -> AGENDA_USE_MULTISELECT_TYPE ) ? 0 : 1 ), 1 , 'minwidth200' );
2020-09-07 10:18:17 +02:00
$out .= '</td>' ;
$out .= '<td class="liste_titre maxwidth100onsmartphone"><input type="text" class="maxwidth100onsmartphone" name="search_agenda_label" value="' . $filters [ 'search_agenda_label' ] . '"></td>' ;
2021-02-07 19:44:22 +01:00
$out .= '<td class="liste_titre center">' ;
$out .= $form -> selectDateToDate ( $tms_start , $tms_end , 'dateevent' , 1 );
$out .= '</td>' ;
2020-09-07 10:18:17 +02:00
$out .= '<td class="liste_titre"></td>' ;
$out .= '<td class="liste_titre"></td>' ;
$out .= '<td class="liste_titre"></td>' ;
// Action column
$out .= '<td class="liste_titre" align="middle">' ;
$searchpicto = $form -> showFilterAndCheckAddButtons ( $massactionbutton ? 1 : 0 , 'checkforselect' , 1 );
$out .= $searchpicto ;
$out .= '</td>' ;
$out .= '</tr>' ;
$out .= '<tr class="liste_titre">' ;
2020-10-28 00:34:59 +01:00
if ( $donetodo ) {
2020-09-07 10:18:17 +02:00
$tmp = '' ;
2021-02-23 22:03:23 +01:00
if ( get_class ( $filterobj ) == 'Societe' ) {
2021-12-11 13:17:31 +01:00
$tmp .= '<a href="' . DOL_URL_ROOT . '/comm/action/list.php?mode=show_list&socid=' . $filterobj -> id . '&status=done">' ;
2021-02-23 22:03:23 +01:00
}
2020-09-07 10:18:17 +02:00
$tmp .= ( $donetodo != 'done' ? $langs -> trans ( " ActionsToDoShort " ) : '' );
$tmp .= ( $donetodo != 'done' && $donetodo != 'todo' ? ' / ' : '' );
$tmp .= ( $donetodo != 'todo' ? $langs -> trans ( " ActionsDoneShort " ) : '' );
//$out.=$langs->trans("ActionsToDoShort").' / '.$langs->trans("ActionsDoneShort");
2021-02-23 22:03:23 +01:00
if ( get_class ( $filterobj ) == 'Societe' ) {
$tmp .= '</a>' ;
}
2020-09-07 10:18:17 +02:00
$out .= getTitleFieldOfList ( $tmp );
2015-07-21 10:24:54 +02:00
}
2022-02-02 17:57:20 +01:00
$out .= getTitleFieldOfList ( " Ref " , 0 , $_SERVER [ " PHP_SELF " ], 'a.id' , '' , $param , '' , $sortfield , $sortorder );
$out .= getTitleFieldOfList ( " Owner " );
$out .= getTitleFieldOfList ( " Type " );
$out .= getTitleFieldOfList ( " Label " , 0 , $_SERVER [ " PHP_SELF " ], '' , '' , $param , '' , $sortfield , $sortorder );
$out .= getTitleFieldOfList ( " Date " , 0 , $_SERVER [ " PHP_SELF " ], 'a.datep,a.id' , '' , $param , '' , $sortfield , $sortorder , 'center ' );
$out .= getTitleFieldOfList ( " RelatedObjects " , 0 , $_SERVER [ " PHP_SELF " ], '' , '' , $param , '' , $sortfield , $sortorder );
$out .= getTitleFieldOfList ( " ActionOnContact " , 0 , $_SERVER [ " PHP_SELF " ], '' , '' , $param , '' , $sortfield , $sortorder , 'tdoverflowmax125 ' , 0 , '' , 0 );
$out .= getTitleFieldOfList ( " Status " , 0 , $_SERVER [ " PHP_SELF " ], 'a.percent' , '' , $param , '' , $sortfield , $sortorder , 'center ' );
2019-11-13 19:35:02 +01:00
$out .= getTitleFieldOfList ( '' , 0 , $_SERVER [ " PHP_SELF " ], '' , '' , $param , '' , $sortfield , $sortorder , 'maxwidthsearch ' );
$out .= '</tr>' ;
2017-06-26 10:09:22 +02:00
2018-03-22 10:46:42 +01:00
require_once DOL_DOCUMENT_ROOT . '/comm/action/class/cactioncomm.class.php' ;
2019-11-13 19:35:02 +01:00
$caction = new CActionComm ( $db );
$arraylist = $caction -> liste_array ( 1 , 'code' , '' , ( empty ( $conf -> global -> AGENDA_USE_EVENT_TYPE ) ? 1 : 0 ), '' , 1 );
2018-03-22 10:46:42 +01:00
2020-10-28 00:34:59 +01:00
foreach ( $histo as $key => $value ) {
2019-11-13 19:35:02 +01:00
$actionstatic -> fetch ( $histo [ $key ][ 'id' ]); // TODO Do we need this, we already have a lot of data of line into $histo
2016-10-17 17:52:58 +02:00
2019-11-13 19:35:02 +01:00
$actionstatic -> type_picto = $histo [ $key ][ 'apicto' ];
$actionstatic -> type_code = $histo [ $key ][ 'acode' ];
2018-03-22 10:46:42 +01:00
2020-09-07 10:18:17 +02:00
$out .= '<tr class="oddeven">' ;
// Done or todo
2020-10-28 00:34:59 +01:00
if ( $donetodo ) {
2020-09-07 10:18:17 +02:00
$out .= '<td class="nowrap">' ;
$out .= '</td>' ;
}
// Ref
$out .= '<td class="nowraponall">' ;
if ( isset ( $histo [ $key ][ 'type' ]) && $histo [ $key ][ 'type' ] == 'mailing' ) {
$out .= '<a href="' . DOL_URL_ROOT . '/comm/mailing/card.php?id=' . $histo [ $key ][ 'id' ] . '">' . img_object ( $langs -> trans ( " ShowEMailing " ), " email " ) . ' ' ;
$out .= $histo [ $key ][ 'id' ];
$out .= '</a>' ;
} else {
$out .= $actionstatic -> getNomUrl ( 1 , - 1 );
}
$out .= '</td>' ;
// Author of event
2022-02-02 17:57:20 +01:00
$out .= '<td class="tdoverflowmax150">' ;
2020-09-07 10:18:17 +02:00
//$userstatic->id=$histo[$key]['userid'];
//$userstatic->login=$histo[$key]['login'];
//$out.=$userstatic->getLoginUrl(1);
2020-10-31 14:32:18 +01:00
if ( $histo [ $key ][ 'userid' ] > 0 ) {
if ( isset ( $userlinkcache [ $histo [ $key ][ 'userid' ]])) {
$link = $userlinkcache [ $histo [ $key ][ 'userid' ]];
} else {
$userstatic -> fetch ( $histo [ $key ][ 'userid' ]);
$link = $userstatic -> getNomUrl ( - 1 , '' , 0 , 0 , 16 , 0 , 'firstelselast' , '' );
$userlinkcache [ $histo [ $key ][ 'userid' ]] = $link ;
}
$out .= $link ;
}
2020-09-07 10:18:17 +02:00
$out .= '</td>' ;
// Type
$labeltype = $actionstatic -> type_code ;
2021-02-23 22:03:23 +01:00
if ( empty ( $conf -> global -> AGENDA_USE_EVENT_TYPE ) && empty ( $arraylist [ $labeltype ])) {
$labeltype = 'AC_OTH' ;
}
2020-09-07 10:18:17 +02:00
if ( $actionstatic -> type_code == 'AC_OTH' && $actionstatic -> code == 'TICKET_MSG' ) {
$labeltype = $langs -> trans ( " Message " );
} else {
2021-02-23 22:03:23 +01:00
if ( ! empty ( $arraylist [ $labeltype ])) {
$labeltype = $arraylist [ $labeltype ];
}
if ( $actionstatic -> type_code == 'AC_OTH_AUTO' && ( $actionstatic -> type_code != $actionstatic -> code ) && $labeltype && ! empty ( $arraylist [ $actionstatic -> code ])) {
$labeltype .= ' - ' . $arraylist [ $actionstatic -> code ]; // Use code in priority on type_code
}
2020-09-07 10:18:17 +02:00
}
2022-02-02 17:57:20 +01:00
$out .= '<td class="tdoverflowmax150" title="' . $labeltype . '">' ;
2021-03-17 11:34:19 +01:00
$out .= $actionstatic -> getTypePicto ();
$out .= $labeltype ;
2020-09-07 10:18:17 +02:00
$out .= '</td>' ;
2022-02-02 17:57:20 +01:00
// Title/Label of event
$out .= '<td class="tdoverflowmax300"' ;
2020-10-28 00:34:59 +01:00
if ( isset ( $histo [ $key ][ 'type' ]) && $histo [ $key ][ 'type' ] == 'action' ) {
2020-09-07 10:18:17 +02:00
$transcode = $langs -> trans ( " Action " . $histo [ $key ][ 'acode' ]);
$libelle = ( $transcode != " Action " . $histo [ $key ][ 'acode' ] ? $transcode : $histo [ $key ][ 'alabel' ]);
//$actionstatic->libelle=$libelle;
$libelle = $histo [ $key ][ 'note' ];
$actionstatic -> id = $histo [ $key ][ 'id' ];
2022-02-02 17:57:20 +01:00
$out .= ' title="' . dol_escape_htmltag ( $libelle ) . '">' ;
2020-09-07 10:18:17 +02:00
$out .= dol_trunc ( $libelle , 120 );
}
2020-10-28 00:34:59 +01:00
if ( isset ( $histo [ $key ][ 'type' ]) && $histo [ $key ][ 'type' ] == 'mailing' ) {
2020-09-07 10:18:17 +02:00
$out .= '<a href="' . DOL_URL_ROOT . '/comm/mailing/card.php?id=' . $histo [ $key ][ 'id' ] . '">' . img_object ( $langs -> trans ( " ShowEMailing " ), " email " ) . ' ' ;
$transcode = $langs -> trans ( " Action " . $histo [ $key ][ 'acode' ]);
$libelle = ( $transcode != " Action " . $histo [ $key ][ 'acode' ] ? $transcode : 'Send mass mailing' );
2022-02-02 17:57:20 +01:00
$out .= ' title="' . dol_escape_htmltag ( $libelle ) . '">' ;
2020-09-07 10:18:17 +02:00
$out .= dol_trunc ( $libelle , 120 );
}
$out .= '</td>' ;
// Date
$out .= '<td class="center nowrap">' ;
$out .= dol_print_date ( $histo [ $key ][ 'datestart' ], 'dayhour' , 'tzuserrel' );
2020-10-28 00:34:59 +01:00
if ( $histo [ $key ][ 'dateend' ] && $histo [ $key ][ 'dateend' ] != $histo [ $key ][ 'datestart' ]) {
2020-09-07 10:18:17 +02:00
$tmpa = dol_getdate ( $histo [ $key ][ 'datestart' ], true );
$tmpb = dol_getdate ( $histo [ $key ][ 'dateend' ], true );
2021-02-23 22:03:23 +01:00
if ( $tmpa [ 'mday' ] == $tmpb [ 'mday' ] && $tmpa [ 'mon' ] == $tmpb [ 'mon' ] && $tmpa [ 'year' ] == $tmpb [ 'year' ]) {
$out .= '-' . dol_print_date ( $histo [ $key ][ 'dateend' ], 'hour' , 'tzuserrel' );
} else {
$out .= '-' . dol_print_date ( $histo [ $key ][ 'dateend' ], 'dayhour' , 'tzuserrel' );
}
2020-09-07 10:18:17 +02:00
}
$late = 0 ;
2021-02-23 22:03:23 +01:00
if ( $histo [ $key ][ 'percent' ] == 0 && $histo [ $key ][ 'datestart' ] && $histo [ $key ][ 'datestart' ] < ( $now - $delay_warning )) {
$late = 1 ;
}
if ( $histo [ $key ][ 'percent' ] == 0 && ! $histo [ $key ][ 'datestart' ] && $histo [ $key ][ 'dateend' ] && $histo [ $key ][ 'datestart' ] < ( $now - $delay_warning )) {
$late = 1 ;
}
if ( $histo [ $key ][ 'percent' ] > 0 && $histo [ $key ][ 'percent' ] < 100 && $histo [ $key ][ 'dateend' ] && $histo [ $key ][ 'dateend' ] < ( $now - $delay_warning )) {
$late = 1 ;
}
if ( $histo [ $key ][ 'percent' ] > 0 && $histo [ $key ][ 'percent' ] < 100 && ! $histo [ $key ][ 'dateend' ] && $histo [ $key ][ 'datestart' ] && $histo [ $key ][ 'datestart' ] < ( $now - $delay_warning )) {
$late = 1 ;
}
if ( $late ) {
$out .= img_warning ( $langs -> trans ( " Late " )) . ' ' ;
}
2020-09-07 10:18:17 +02:00
$out .= " </td> \n " ;
// Title of event
//$out.='<td>'.dol_trunc($histo[$key]['note'], 40).'</td>';
// Linked object
$out .= '<td class="nowraponall">' ;
2020-10-28 00:34:59 +01:00
if ( isset ( $histo [ $key ][ 'elementtype' ]) && ! empty ( $histo [ $key ][ 'fk_element' ])) {
if ( isset ( $elementlinkcache [ $histo [ $key ][ 'elementtype' ]]) && isset ( $elementlinkcache [ $histo [ $key ][ 'elementtype' ]][ $histo [ $key ][ 'fk_element' ]])) {
$link = $elementlinkcache [ $histo [ $key ][ 'elementtype' ]][ $histo [ $key ][ 'fk_element' ]];
} else {
if ( ! isset ( $elementlinkcache [ $histo [ $key ][ 'elementtype' ]])) {
$elementlinkcache [ $histo [ $key ][ 'elementtype' ]] = array ();
}
$link = dolGetElementUrl ( $histo [ $key ][ 'fk_element' ], $histo [ $key ][ 'elementtype' ], 1 );
$elementlinkcache [ $histo [ $key ][ 'elementtype' ]][ $histo [ $key ][ 'fk_element' ]] = $link ;
}
$out .= $link ;
} else {
$out .= ' ' ;
}
2020-09-07 10:18:17 +02:00
$out .= '</td>' ;
// Contact(s) for action
2022-02-02 17:57:20 +01:00
if ( isset ( $histo [ $key ][ 'socpeopleassigned' ]) && is_array ( $histo [ $key ][ 'socpeopleassigned' ]) && count ( $histo [ $key ][ 'socpeopleassigned' ]) > 0 ) {
$out .= '<td class="valignmiddle">' ;
2020-01-07 14:01:12 +01:00
$contact = new Contact ( $db );
foreach ( $histo [ $key ][ 'socpeopleassigned' ] as $cid => $value ) {
2018-10-04 09:45:12 +02:00
$result = $contact -> fetch ( $cid );
2021-02-23 22:03:23 +01:00
if ( $result < 0 ) {
2018-10-04 09:45:12 +02:00
dol_print_error ( $db , $contact -> error );
2021-02-23 22:03:23 +01:00
}
2018-10-04 09:45:12 +02:00
if ( $result > 0 ) {
2022-02-02 17:57:20 +01:00
$out .= $contact -> getNomUrl ( - 3 , '' , 10 , '' , - 1 , 0 , 'paddingright' );
2018-10-04 09:47:04 +02:00
if ( isset ( $histo [ $key ][ 'acode' ]) && $histo [ $key ][ 'acode' ] == 'AC_TEL' ) {
2021-02-23 22:03:23 +01:00
if ( ! empty ( $contact -> phone_pro )) {
2019-11-13 19:35:02 +01:00
$out .= '(' . dol_print_phone ( $contact -> phone_pro ) . ')' ;
2021-02-23 22:03:23 +01:00
}
2018-10-04 09:45:12 +02:00
}
$out .= '<div class="paddingright"></div>' ;
}
}
$out .= '</td>' ;
2022-02-02 17:57:20 +01:00
} elseif ( empty ( $objcon -> id ) && isset ( $histo [ $key ][ 'contact_id' ]) && $histo [ $key ][ 'contact_id' ] > 0 ) {
$contactstatic -> lastname = $histo [ $key ][ 'lastname' ];
$contactstatic -> firstname = $histo [ $key ][ 'firstname' ];
$contactstatic -> id = $histo [ $key ][ 'contact_id' ];
$contactstatic -> photo = $histo [ $key ][ 'contact_photo' ];
$out .= '<td width="120">' . $contactstatic -> getNomUrl ( - 1 , '' , 10 ) . '</td>' ;
2020-05-21 15:05:19 +02:00
} else {
2020-09-07 10:18:17 +02:00
$out .= '<td> </td>' ;
}
2010-08-21 17:30:17 +02:00
2020-09-07 10:18:17 +02:00
// Status
2021-07-12 12:28:21 +02:00
$out .= '<td class="nowrap center">' . $actionstatic -> LibStatut ( $histo [ $key ][ 'percent' ], 2 , 0 , $histo [ $key ][ 'datestart' ]) . '</td>' ;
2010-08-21 17:30:17 +02:00
2020-09-07 10:18:17 +02:00
// Actions
$out .= '<td></td>' ;
2017-06-26 10:09:22 +02:00
2020-09-07 10:18:17 +02:00
$out .= " </tr> \n " ;
$i ++ ;
}
$out .= " </table> \n " ;
$out .= " </div> \n " ;
2008-08-06 16:50:06 +02:00
2020-09-07 10:18:17 +02:00
$out .= '</form>' ;
}
2017-06-26 10:09:22 +02:00
2021-02-23 22:03:23 +01:00
if ( $noprint ) {
return $out ;
} else {
print $out ;
}
2008-07-29 21:20:33 +02:00
}
2011-03-22 20:31:29 +01:00
/**
* Show html area for list of subsidiaries
2012-02-04 14:39:47 +01:00
*
* @ param Conf $conf Object conf
* @ param Translate $langs Object langs
* @ param DoliDB $db Database handler
* @ param Societe $object Third party object
2019-02-13 22:43:12 +01:00
* @ return int
2011-03-22 20:31:29 +01:00
*/
2019-01-27 15:20:16 +01:00
function show_subsidiaries ( $conf , $langs , $db , $object )
2011-03-22 20:31:29 +01:00
{
global $user ;
2019-11-13 19:35:02 +01:00
$i = - 1 ;
2011-03-22 20:31:29 +01:00
2018-06-20 22:02:36 +02:00
$sql = " SELECT s.rowid, s.client, s.fournisseur, s.nom as name, s.name_alias, s.email, s.address, s.zip, s.town, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur, s.canvas " ;
2019-11-13 19:35:02 +01:00
$sql .= " FROM " . MAIN_DB_PREFIX . " societe as s " ;
2021-06-09 15:36:47 +02:00
$sql .= " WHERE s.parent = " . (( int ) $object -> id );
2019-11-13 19:35:02 +01:00
$sql .= " AND s.entity IN ( " . getEntity ( 'societe' ) . " ) " ;
$sql .= " ORDER BY s.nom " ;
2011-03-22 20:31:29 +01:00
$result = $db -> query ( $sql );
$num = $db -> num_rows ( $result );
2020-10-28 00:34:59 +01:00
if ( $num ) {
2011-03-22 20:31:29 +01:00
$socstatic = new Societe ( $db );
2011-04-10 23:30:11 +02:00
2016-12-05 13:45:57 +01:00
print load_fiche_titre ( $langs -> trans ( " Subsidiaries " ), '' , '' );
2021-07-23 00:02:14 +02:00
print " \n " . '<div class="div-table-responsive-no-min">' . " \n " ;
print '<table class="noborder centpercent">' . " \n " ;
2011-03-22 20:31:29 +01:00
print '<tr class="liste_titre"><td>' . $langs -> trans ( " Company " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Address " ) . '</td><td>' . $langs -> trans ( " Zip " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Town " ) . '</td><td>' . $langs -> trans ( " CustomerCode " ) . '</td>' ;
print " <td> </td> " ;
print " </tr> " ;
2019-11-13 19:35:02 +01:00
$i = 0 ;
2011-03-22 20:31:29 +01:00
2020-10-28 00:34:59 +01:00
while ( $i < $num ) {
2011-03-22 20:31:29 +01:00
$obj = $db -> fetch_object ( $result );
$socstatic -> id = $obj -> rowid ;
$socstatic -> name = $obj -> name ;
2018-06-20 22:02:36 +02:00
$socstatic -> name_alias = $obj -> name_alias ;
$socstatic -> email = $obj -> email ;
$socstatic -> code_client = $obj -> code_client ;
$socstatic -> code_fournisseur = $obj -> code_client ;
$socstatic -> code_compta = $obj -> code_compta ;
$socstatic -> code_compta_fournisseur = $obj -> code_compta_fournisseur ;
$socstatic -> email = $obj -> email ;
2011-03-22 20:31:29 +01:00
$socstatic -> canvas = $obj -> canvas ;
2018-06-20 22:02:36 +02:00
$socstatic -> client = $obj -> client ;
$socstatic -> fournisseur = $obj -> fournisseur ;
print '<tr class="oddeven">' ;
2021-07-23 00:02:14 +02:00
print '<td class="tdoverflowmax150">' ;
2011-03-22 20:31:29 +01:00
print $socstatic -> getNomUrl ( 1 );
print '</td>' ;
2021-07-23 00:02:14 +02:00
print '<td class="tdoverflowmax400" title="' . dol_escape_htmltag ( $obj -> address ) . '">' . dol_escape_htmltag ( $obj -> address ) . '</td>' ;
print '<td class="tdoverflowmax100" title="' . dol_escape_htmltag ( $obj -> zip ) . '">' . $obj -> zip . '</td>' ;
print '<td class="tdoverflowmax200" title="' . dol_escape_htmltag ( $obj -> town ) . '">' . $obj -> town . '</td>' ;
print '<td class="tdoverflowmax200" title="' . dol_escape_htmltag ( $obj -> code_client ) . '">' . $obj -> code_client . '</td>' ;
2011-03-22 20:31:29 +01:00
2019-12-12 10:31:08 +01:00
print '<td class="center">' ;
2021-09-27 12:24:01 +02:00
print '<a class="editfielda" href="' . DOL_URL_ROOT . '/societe/card.php?socid=' . (( int ) $obj -> rowid ) . '&action=edit&token=' . newToken () . '">' ;
2011-03-22 20:31:29 +01:00
print img_edit ();
print '</a></td>' ;
print " </tr> \n " ;
$i ++ ;
}
print " \n </table> \n " ;
2021-07-23 00:02:14 +02:00
print '</div>' . " \n " ;
2011-03-22 20:31:29 +01:00
}
print " <br> \n " ;
return $i ;
}
2020-06-08 15:58:20 +02:00
/**
* Add Event Type SQL
*
* @ param string $sql $sql modified
* @ param string $actioncode Action code
2020-07-01 14:04:41 +02:00
* @ param string $sqlANDOR " AND " , " OR " or " " sql condition
* @ return string sql request
2020-06-08 15:58:20 +02:00
*/
2021-09-10 15:45:03 +02:00
function addEventTypeSQL ( & $sql , $actioncode , $sqlANDOR = " AND " )
2020-06-08 16:00:57 +02:00
{
2020-09-07 10:18:17 +02:00
global $conf , $db ;
// Condition on actioncode
2020-06-08 14:43:14 +02:00
2020-10-28 00:34:59 +01:00
if ( empty ( $conf -> global -> AGENDA_USE_EVENT_TYPE )) {
2021-02-23 22:03:23 +01:00
if ( $actioncode == 'AC_NON_AUTO' ) {
$sql .= " $sqlANDOR c.type != 'systemauto' " ;
} elseif ( $actioncode == 'AC_ALL_AUTO' ) {
$sql .= " $sqlANDOR c.type = 'systemauto' " ;
} else {
if ( $actioncode == 'AC_OTH' ) {
$sql .= " $sqlANDOR c.type != 'systemauto' " ;
} elseif ( $actioncode == 'AC_OTH_AUTO' ) {
$sql .= " $sqlANDOR c.type = 'systemauto' " ;
}
}
} else {
if ( $actioncode == 'AC_NON_AUTO' ) {
$sql .= " $sqlANDOR c.type != 'systemauto' " ;
} elseif ( $actioncode == 'AC_ALL_AUTO' ) {
$sql .= " $sqlANDOR c.type = 'systemauto' " ;
} else {
$sql .= " $sqlANDOR c.code = ' " . $db -> escape ( $actioncode ) . " ' " ;
2020-06-08 16:00:57 +02:00
}
}
2020-06-08 14:43:14 +02:00
2021-09-10 15:45:03 +02:00
return $sql ;
}
/**
* Add Event Type SQL
*
* @ param string $sql $sql modified
* @ param string $donetodo donetodo
* @ param string $now now
* @ param string $filters array
* @ return string sql request
*/
function addOtherFilterSQL ( & $sql , $donetodo , $now , $filters )
{
global $conf , $db ;
// Condition on actioncode
2021-02-23 22:03:23 +01:00
if ( $donetodo == 'todo' ) {
$sql .= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep > ' " . $db -> idate ( $now ) . " ')) " ;
} elseif ( $donetodo == 'done' ) {
$sql .= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= ' " . $db -> idate ( $now ) . " ')) " ;
}
if ( is_array ( $filters ) && $filters [ 'search_agenda_label' ]) {
$sql .= natural_search ( 'a.label' , $filters [ 'search_agenda_label' ]);
}
2020-07-01 14:04:41 +02:00
2020-09-07 10:18:17 +02:00
return $sql ;
2020-06-08 14:43:14 +02:00
}
2020-06-08 15:58:20 +02:00
/**
2020-10-28 00:34:59 +01:00
* Add Mailing Event Type SQL
2020-06-08 15:58:20 +02:00
*
2020-10-28 00:34:59 +01:00
* @ param string $actioncode Action code
* @ param Object $objcon objcon
* @ param Object $filterobj filterobj
* @ return string
2020-06-08 15:58:20 +02:00
*/
2020-06-08 16:00:57 +02:00
function addMailingEventTypeSQL ( $actioncode , $objcon , $filterobj )
{
2020-09-07 10:18:17 +02:00
global $conf , $langs , $db ;
// Add also event from emailings. TODO This should be replaced by an automatic event ? May be it's too much for very large emailing.
2022-06-09 22:10:51 +02:00
if ( isModEnabled ( 'mailing' ) && ! empty ( $objcon -> email )
2020-09-07 10:18:17 +02:00
&& ( empty ( $actioncode ) || $actioncode == 'AC_OTH_AUTO' || $actioncode == 'AC_EMAILING' )) {
$langs -> load ( " mails " );
$sql2 = " SELECT m.rowid as id, m.titre as label, mc.date_envoi as dp, mc.date_envoi as dp2, '100' as percent, 'mailing' as type " ;
2021-12-10 11:40:25 +01:00
$sql2 .= " , null as fk_element, '' as elementtype, null as contact_id " ;
2020-09-07 10:18:17 +02:00
$sql2 .= " , 'AC_EMAILING' as acode, '' as alabel, '' as apicto " ;
$sql2 .= " , 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 " ; // User that valid action
2021-02-23 22:03:23 +01:00
if ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Societe' ) {
$sql2 .= " , '' as lastname, '' as firstname " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Adherent' ) {
$sql2 .= " , '' as lastname, '' as firstname " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'CommandeFournisseur' ) {
$sql2 .= " , '' as ref " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Product' ) {
$sql2 .= " , '' as ref " ;
} elseif ( is_object ( $filterobj ) && get_class ( $filterobj ) == 'Ticket' ) {
$sql2 .= " , '' as ref " ;
}
2020-09-07 10:18:17 +02:00
$sql2 .= " FROM " . MAIN_DB_PREFIX . " mailing as m, " . MAIN_DB_PREFIX . " mailing_cibles as mc, " . MAIN_DB_PREFIX . " user as u " ;
$sql2 .= " WHERE mc.email = ' " . $db -> escape ( $objcon -> email ) . " ' " ; // Search is done on email.
$sql2 .= " AND mc.statut = 1 " ;
$sql2 .= " AND u.rowid = m.fk_user_valid " ;
$sql2 .= " AND mc.fk_mailing=m.rowid " ;
return $sql2 ;
}
2020-06-08 14:43:14 +02:00
}