2004-10-19 22:24:10 +00:00
< ? php
2006-03-09 18:22:44 +00:00
/* Copyright ( C ) 2003 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2017-06-22 09:04:29 +00:00
* Copyright ( C ) 2005 - 2017 Laurent Destailleur < eldy @ users . sourceforge . net >
2018-10-27 12:43:12 +00:00
* Copyright ( C ) 2005 - 2011 Regis Houssin < regis . houssin @ inodbox . com >
2017-09-25 08:49:56 +00:00
* Copyright ( C ) 2017 Nicolas Zabouri < info @ inovea - conseil . com >
2026-02-08 14:29:53 +00:00
* Copyright ( C ) 2024 - 2026 MDW < mdeweerd @ users . noreply . github . com >
2003-08-29 20:44:42 +00: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 14:36:08 +00:00
* the Free Software Foundation ; either version 3 of the License , or
2003-08-29 20:44:42 +00: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 19:55:30 +00:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2003-08-29 20:44:42 +00:00
*/
2005-01-31 12:21:44 +00:00
/**
2012-02-19 12:12:11 +00:00
* \file htdocs / core / boxes / box_services_contracts . php
2026-02-08 14:29:53 +00:00
* \ingroup product , services
2017-06-22 09:04:29 +00:00
* \brief Widget of sells products
2008-11-16 23:43:10 +00:00
*/
2005-01-31 12:21:44 +00:00
2012-08-23 00:04:35 +00:00
include_once DOL_DOCUMENT_ROOT . '/core/boxes/modules_boxes.php' ;
2003-08-29 20:44:42 +00:00
2012-01-26 12:49:15 +00:00
/**
2017-07-31 11:48:00 +00:00
* Class to manage the box to show last contracted products / services lines
2012-01-26 12:49:15 +00:00
*/
2012-02-20 08:42:57 +00:00
class box_services_contracts extends ModeleBoxes
{
2020-10-31 13:32:18 +00:00
public $boxcode = " lastproductsincontract " ;
public $boximg = " object_product " ;
public $boxlabel = " BoxLastProductsInContract " ;
2025-12-16 15:05:27 +00:00
public $depends = array ( " service " , " contract " );
2005-02-27 17:57:21 +00:00
2017-06-12 12:09:00 +00:00
/**
* Constructor
*
* @ param DoliDB $db Database handler
* @ param string $param More parameters
*/
2026-04-20 10:36:21 +00:00
public function __construct ( $db , $param ) // @phpstan-ignore constructor.unusedParameter
2017-06-12 12:09:00 +00:00
{
2020-10-31 13:32:18 +00:00
global $user ;
2017-06-12 12:09:00 +00:00
2020-10-31 13:32:18 +00:00
$this -> db = $db ;
2017-06-12 12:09:00 +00:00
2023-06-19 21:05:59 +00:00
$this -> hidden = ! ( $user -> hasRight ( 'service' , 'lire' ) && $user -> hasRight ( 'contrat' , 'lire' ));
2024-10-14 09:56:59 +00:00
$this -> urltoaddentry = DOL_URL_ROOT . '/contrat/card.php?action=create' ;
$this -> msgNoRecords = 'NoContractedProducts' ;
2017-06-12 12:09:00 +00:00
}
2008-11-16 23:43:10 +00:00
/**
2011-11-23 17:28:14 +00:00
* Load data into info_box_contents array to show array later .
*
* @ param int $max Maximum number of records to load
2020-10-31 13:32:18 +00:00
* @ return void
2008-11-16 23:43:10 +00:00
*/
2019-02-27 23:15:32 +00:00
public function loadBox ( $max = 5 )
2008-11-16 23:43:10 +00:00
{
2019-09-23 16:39:21 +00:00
global $user , $langs , $conf ;
2007-07-30 13:17:39 +00:00
2020-04-10 08:59:32 +00:00
$this -> max = $max ;
2009-06-08 18:14:37 +00:00
2012-08-23 00:04:35 +00:00
include_once DOL_DOCUMENT_ROOT . '/contrat/class/contrat.class.php' ;
2005-02-27 16:45:59 +00:00
2019-09-23 16:39:21 +00:00
$form = new Form ( $this -> db );
2017-07-31 11:48:00 +00:00
2024-06-08 17:34:54 +00:00
$this -> info_box_head = array (
'text' => $langs -> trans ( " BoxLastProductsInContract " , $max ) . '<a class="paddingleft valignmiddle" href="' . DOL_URL_ROOT . '/contrat/list.php?sortfield=c.tms&sortorder=DESC"><span class="badge">...</span></a>'
);
2005-02-27 16:45:59 +00:00
2023-10-11 17:32:04 +00:00
if ( $user -> hasRight ( 'service' , 'lire' ) && $user -> hasRight ( 'contrat' , 'lire' )) {
2020-10-31 13:32:18 +00:00
$contractstatic = new Contrat ( $this -> db );
$contractlinestatic = new ContratLigne ( $this -> db );
$thirdpartytmp = new Societe ( $this -> db );
$productstatic = new Product ( $this -> db );
2016-06-27 11:57:10 +00:00
2018-10-21 10:03:22 +00:00
$sql = " SELECT s.nom as name, s.rowid as socid, s.email, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur, " ;
2020-04-10 08:59:32 +00:00
$sql .= " c.rowid, c.ref, c.statut as contract_status, c.ref_customer, c.ref_supplier, " ;
2020-09-11 22:58:06 +00:00
$sql .= " cd.rowid as cdid, cd.label, cd.description, cd.tms as datem, cd.statut as contractline_status, cd.product_type as type, cd.date_fin_validite as date_line, " ;
2021-03-16 16:47:24 +00:00
$sql .= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as product_type, p.entity as product_entity, p.tobuy, p.tosell " ;
2020-04-10 08:59:32 +00:00
$sql .= " FROM ( " . MAIN_DB_PREFIX . " societe as s " ;
$sql .= " INNER JOIN " . MAIN_DB_PREFIX . " contrat as c ON s.rowid = c.fk_soc " ;
$sql .= " INNER JOIN " . MAIN_DB_PREFIX . " contratdet as cd ON c.rowid = cd.fk_contrat " ;
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " product as p ON cd.fk_product = p.rowid " ;
2025-01-13 10:58:16 +00:00
if ( empty ( $user -> socid ) && ! $user -> hasRight ( 'societe' , 'client' , 'voir' )) {
2021-08-23 15:41:11 +00:00
$sql .= " INNER JOIN " . MAIN_DB_PREFIX . " societe_commerciaux as sc ON s.rowid = sc.fk_soc AND sc.fk_user = " . (( int ) $user -> id );
2021-02-23 21:03:23 +00:00
}
2020-04-10 08:59:32 +00:00
$sql .= " ) " ;
2026-07-20 00:51:54 +00:00
$sql .= " WHERE c.entity = " . (( int ) $conf -> entity );
2021-02-23 21:03:23 +00:00
if ( $user -> socid ) {
2021-08-23 15:41:11 +00:00
$sql .= " AND s.rowid = " . (( int ) $user -> socid );
2021-02-23 21:03:23 +00:00
}
2020-04-10 08:59:32 +00:00
$sql .= $this -> db -> order ( " c.tms " , " DESC " );
$sql .= $this -> db -> plimit ( $max , 0 );
2008-11-16 23:43:10 +00:00
2019-09-23 16:39:21 +00:00
$result = $this -> db -> query ( $sql );
2021-02-23 21:03:23 +00:00
if ( $result ) {
2019-09-23 16:39:21 +00:00
$num = $this -> db -> num_rows ( $result );
2020-04-10 08:59:32 +00:00
$now = dol_now ();
2009-06-08 18:14:37 +00:00
2008-11-16 23:43:10 +00:00
$i = 0 ;
2021-02-23 21:03:23 +00:00
while ( $i < $num ) {
2020-06-23 09:27:40 +00:00
$late = '' ;
2019-09-23 16:39:21 +00:00
$objp = $this -> db -> fetch_object ( $result );
2020-04-10 08:59:32 +00:00
$datem = $this -> db -> jdate ( $objp -> datem );
$contractlinestatic -> id = $objp -> cdid ;
$contractlinestatic -> fk_contrat = $objp -> rowid ;
$contractlinestatic -> label = $objp -> label ;
$contractlinestatic -> description = $objp -> description ;
$contractlinestatic -> type = $objp -> type ;
2022-11-08 14:11:30 +00:00
$contractlinestatic -> fk_product = $objp -> product_id ;
2020-04-10 08:59:32 +00:00
$contractlinestatic -> product_ref = $objp -> product_ref ;
2020-10-19 15:10:38 +00:00
$contractlinestatic -> product_type = $objp -> product_type ;
2020-09-11 22:58:06 +00:00
$contractlinestatic -> statut = $objp -> contractline_status ;
2020-04-10 08:59:32 +00:00
$contractstatic -> id = $objp -> rowid ;
$contractstatic -> ref = $objp -> ref ;
$contractstatic -> ref_customer = $objp -> ref_customer ;
$contractstatic -> ref_supplier = $objp -> ref_supplier ;
2020-06-23 09:27:40 +00:00
$contractstatic -> statut = $objp -> contract_status ;
2024-06-08 17:34:54 +00:00
$contractstatic -> status = $objp -> contract_status ;
2016-06-27 11:57:10 +00:00
2016-06-06 15:18:31 +00:00
$thirdpartytmp -> name = $objp -> name ;
$thirdpartytmp -> id = $objp -> socid ;
2018-10-21 10:03:22 +00:00
$thirdpartytmp -> email = $objp -> email ;
$thirdpartytmp -> client = $objp -> client ;
$thirdpartytmp -> fournisseur = $objp -> fournisseur ;
$thirdpartytmp -> code_client = $objp -> code_client ;
$thirdpartytmp -> code_fournisseur = $objp -> code_fournisseur ;
$thirdpartytmp -> code_compta = $objp -> code_compta ;
2024-06-08 17:34:54 +00:00
$thirdpartytmp -> code_compta_client = $objp -> code_compta ;
2018-10-21 10:03:22 +00:00
$thirdpartytmp -> code_compta_fournisseur = $objp -> code_compta_fournisseur ;
2016-06-27 11:57:10 +00:00
2020-06-23 09:27:40 +00:00
$dateline = $this -> db -> jdate ( $objp -> date_line );
2025-07-20 17:54:06 +00:00
if ( $contractstatic -> status == Contrat :: STATUS_VALIDATED && $objp -> contractline_status == ContratLigne :: STATUS_OPEN && ! empty ( $dateline ) && ( $dateline + getWarningDelay ( 'contract' , 'services' , 'expires' )) < $now ) {
2021-02-23 21:03:23 +00:00
$late = img_warning ( $langs -> trans ( " Late " ));
}
2008-11-16 23:43:10 +00:00
2017-07-31 11:48:00 +00:00
// Label
2021-02-23 21:03:23 +00:00
if ( $objp -> product_id > 0 ) {
2020-04-10 08:59:32 +00:00
$productstatic -> id = $objp -> product_id ;
2020-10-15 19:00:49 +00:00
$productstatic -> type = $objp -> product_type ;
2020-04-10 08:59:32 +00:00
$productstatic -> ref = $objp -> product_ref ;
2021-03-16 16:47:24 +00:00
$productstatic -> entity = $objp -> product_entity ;
2020-10-15 19:00:49 +00:00
$productstatic -> label = $objp -> product_label ;
2020-02-24 05:55:08 +00:00
$productstatic -> status = $objp -> tosell ;
$productstatic -> status_buy = $objp -> tobuy ;
2019-01-27 10:55:16 +00:00
$text = $productstatic -> getNomUrl ( 1 , '' , 20 );
2021-02-23 21:03:23 +00:00
if ( $objp -> product_label ) {
2017-07-31 11:48:00 +00:00
$text .= ' - ' ;
//$productstatic->ref=$objp->label;
//$text .= $productstatic->getNomUrl(0,'',16);
2020-10-15 18:28:27 +00:00
$text .= $objp -> product_label ;
2017-07-31 11:48:00 +00:00
}
$description = $objp -> description ;
2024-12-04 22:16:16 +00:00
$s = $form -> textwithtooltip ( $text , $description , 3 , 0 , '' , '' , 0 , '' );
2020-05-21 13:05:19 +00:00
} else {
2017-07-31 11:48:00 +00:00
$s = img_object ( $langs -> trans ( " ShowProductOrService " ), ( $objp -> product_type ? 'service' : 'product' )) . ' ' . dol_htmlentitiesbr ( $objp -> description );
}
2019-02-09 14:24:21 +00:00
$this -> info_box_contents [ $i ][] = array (
2020-10-31 13:32:18 +00:00
'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"' ,
'text' => $s ,
'asis' => 1
);
2016-06-27 11:57:10 +00:00
2019-02-09 14:24:21 +00:00
$this -> info_box_contents [ $i ][] = array (
2020-10-31 13:32:18 +00:00
'td' => 'class="nowraponall"' ,
'text' => $contractstatic -> getNomUrl ( 1 ),
'asis' => 1
);
2016-06-06 15:18:31 +00:00
2019-02-09 14:24:21 +00:00
$this -> info_box_contents [ $i ][] = array (
2020-10-31 13:32:18 +00:00
'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"' ,
'text' => $thirdpartytmp -> getNomUrl ( 1 ),
'asis' => 1
);
2016-06-06 15:18:31 +00:00
2019-02-09 14:24:21 +00:00
$this -> info_box_contents [ $i ][] = array (
2022-06-28 10:26:49 +00:00
'td' => 'class="center nowraponall" title="' . dol_escape_htmltag ( $langs -> trans ( " DateModification " ) . ': ' . dol_print_date ( $datem , 'dayhour' , 'tzuserrel' )) . '"' ,
2021-05-24 22:29:32 +00:00
'text' => dol_print_date ( $datem , 'day' , 'tzuserrel' ),
2024-08-18 16:16:08 +00:00
'text2' => $late ,
2020-10-31 13:32:18 +00:00
);
2007-07-30 13:17:39 +00:00
2019-02-09 14:24:21 +00:00
$this -> info_box_contents [ $i ][] = array (
2020-10-31 13:32:18 +00:00
'td' => 'class="right" width="18"' ,
2020-09-11 22:58:06 +00:00
'text' => $contractlinestatic -> getLibStatut ( 3 )
2008-11-16 23:43:10 +00:00
);
2009-06-08 18:14:37 +00:00
2008-11-16 23:43:10 +00:00
$i ++ ;
}
2013-06-07 22:52:02 +00:00
2019-09-23 16:39:21 +00:00
$this -> db -> free ( $result );
2020-05-21 13:05:19 +00:00
} else {
2019-02-09 14:24:21 +00:00
$this -> info_box_contents [ 0 ][ 0 ] = array (
2020-10-31 13:32:18 +00:00
'td' => '' ,
'maxlength' => 500 ,
'text' => ( $this -> db -> error () . ' sql=' . $sql ),
);
2008-11-16 23:43:10 +00:00
}
2020-05-21 13:05:19 +00:00
} else {
2017-06-09 22:05:47 +00:00
$this -> info_box_contents [ 0 ][ 0 ] = array (
2023-12-05 14:21:26 +00:00
'td' => 'class="nohover left"' ,
'text' => '<span class="opacitymedium">' . $langs -> trans ( " ReadPermissionNotAllowed " ) . '</span>'
2017-06-09 22:05:47 +00:00
);
2008-11-16 23:43:10 +00:00
}
}
2024-09-28 10:09:35 +00:00
2011-11-23 17:28:14 +00:00
/**
2024-09-28 10:09:35 +00:00
* Method to show box . Called when the box needs to be displayed .
2011-11-23 17:28:14 +00:00
*
2024-09-28 10:09:35 +00:00
* @ param ? array < array { text ? : string , sublink ? : string , subtext ? : string , subpicto ? : ? string , picto ? : string , nbcol ? : int , limit ? : int , subclass ? : string , graph ? : int < 0 , 1 > , target ? : string } > $head Array with properties of box title
* @ param ? array < array { tr ? : string , td ? : string , target ? : string , text ? : string , text2 ? : string , textnoformat ? : string , tooltip ? : string , logo ? : string , url ? : string , maxlength ? : int , asis ? : int < 0 , 1 > } > $contents Array with properties of box lines
2024-08-18 16:16:08 +00:00
* @ param int < 0 , 1 > $nooutput No print , only return string
2017-06-12 12:09:00 +00:00
* @ return string
2011-11-23 17:28:14 +00:00
*/
2020-10-31 13:32:18 +00:00
public function showBox ( $head = null , $contents = null , $nooutput = 0 )
{
return parent :: showBox ( $this -> info_box_head , $this -> info_box_contents , $nooutput );
}
2003-08-29 20:44:42 +00:00
}