dolibarr/htdocs/core/boxes/box_services_contracts.php

251 lines
8.7 KiB
PHP
Raw Normal View History

<?php
/* 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>
* Copyright (C) 2017 Nicolas Zabouri <info@inovea-conseil.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
* 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
/**
* \file htdocs/core/boxes/box_services_contracts.php
2008-11-16 23:43:10 +00:00
* \ingroup produits,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
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
{
public $boxcode = "lastproductsincontract";
public $boximg = "object_product";
public $boxlabel = "BoxLastProductsInContract";
public $depends = array("service", "contrat");
2005-02-27 17:57:21 +00:00
2018-08-22 08:51:55 +00:00
/**
* @var DoliDB Database handler.
*/
public $db;
2018-10-21 10:03:22 +00:00
public $param;
public $info_box_head = array();
public $info_box_contents = array();
2013-06-07 22:52:02 +00:00
2017-06-12 12:09:00 +00:00
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
2019-02-27 23:15:32 +00:00
public function __construct($db, $param)
2017-06-12 12:09:00 +00:00
{
global $user;
2017-06-12 12:09:00 +00:00
$this->db = $db;
2017-06-12 12:09:00 +00:00
$this->hidden = !(!empty($user->rights->service->lire) && !empty($user->rights->contrat->lire));
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
* @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;
$this->max = $max;
include_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
2019-09-23 16:39:21 +00:00
$form = new Form($this->db);
2017-07-31 11:48:00 +00:00
$this->info_box_head = array('text' => $langs->trans("BoxLastProductsInContract", $max));
2021-02-23 21:03:23 +00:00
if ($user->rights->service->lire && $user->rights->contrat->lire) {
$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,";
$sql .= " c.rowid, c.ref, c.statut as contract_status, c.ref_customer, c.ref_supplier,";
$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";
$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";
2021-10-22 20:15:59 +00:00
if (empty($user->rights->societe->client->voir) && !$user->socid) {
$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
}
$sql .= ")";
$sql .= " WHERE c.entity = ".$conf->entity;
2021-02-23 21:03:23 +00:00
if ($user->socid) {
$sql .= " AND s.rowid = ".((int) $user->socid);
2021-02-23 21:03:23 +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);
$now = dol_now();
2008-11-16 23:43:10 +00:00
$i = 0;
2021-02-23 21:03:23 +00:00
while ($i < $num) {
$late = '';
2019-09-23 16:39:21 +00:00
$objp = $this->db->fetch_object($result);
$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;
$contractlinestatic->product_id = $objp->product_id;
$contractlinestatic->product_ref = $objp->product_ref;
2020-10-19 15:10:38 +00:00
$contractlinestatic->product_type = $objp->product_type;
$contractlinestatic->statut = $objp->contractline_status;
$contractstatic->id = $objp->rowid;
$contractstatic->ref = $objp->ref;
$contractstatic->ref_customer = $objp->ref_customer;
$contractstatic->ref_supplier = $objp->ref_supplier;
$contractstatic->statut = $objp->contract_status;
2016-06-27 11:57:10 +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;
$thirdpartytmp->code_compta_fournisseur = $objp->code_compta_fournisseur;
2016-06-27 11:57:10 +00:00
$dateline = $this->db->jdate($objp->date_line);
2021-02-23 21:03:23 +00:00
if ($contractstatic->statut == Contrat::STATUS_VALIDATED && $objp->contractline_status == ContratLigne::STATUS_OPEN && !empty($dateline) && ($dateline + $conf->contrat->services->expires->warning_delay) < $now) {
$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) {
$productstatic->id = $objp->product_id;
$productstatic->type = $objp->product_type;
$productstatic->ref = $objp->product_ref;
2021-03-16 16:47:24 +00:00
$productstatic->entity = $objp->product_entity;
$productstatic->label = $objp->product_label;
2020-02-24 05:55:08 +00:00
$productstatic->status = $objp->tosell;
$productstatic->status_buy = $objp->tobuy;
$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;
// Add description in form
2021-02-23 21:03:23 +00:00
if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) {
2020-10-15 18:28:27 +00:00
//$text .= (! empty($objp->description) && $objp->description!=$objp->product_label)?'<br>'.dol_htmlentitiesbr($objp->description):'';
$description = ''; // Already added into main visible desc
2017-07-31 11:48:00 +00:00
}
$s = $form->textwithtooltip($text, $description, 3, '', '', '', 0, (!empty($objp->fk_parent_line) ?img_picto('', 'rightarrow') : ''));
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(
'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(
'td' => 'class="nowraponall"',
'text' => $contractstatic->getNomUrl(1),
'asis' => 1
);
2019-02-09 14:24:21 +00:00
$this->info_box_contents[$i][] = array(
'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"',
'text' => $thirdpartytmp->getNomUrl(1),
'asis' => 1
);
2019-02-09 14:24:21 +00:00
$this->info_box_contents[$i][] = array(
2021-05-24 22:29:32 +00:00
'td' => 'class="center nowraponall"',
'text' => dol_print_date($datem, 'day', 'tzuserrel'),
'text2'=> $late,
);
2019-02-09 14:24:21 +00:00
$this->info_box_contents[$i][] = array(
'td' => 'class="right" width="18"',
'text' => $contractlinestatic->getLibStatut(3)
2008-11-16 23:43:10 +00:00
);
2008-11-16 23:43:10 +00:00
$i++;
}
2021-02-23 21:03:23 +00:00
if ($num == 0) {
$this->info_box_contents[$i][0] = array(
2020-05-14 12:56:15 +00:00
'td' => 'class="center opacitymedium"',
'text'=>$langs->trans("NoContractedProducts")
2021-02-23 21:03:23 +00:00
);
}
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(
'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 {
$this->info_box_contents[0][0] = array(
'td' => 'class="nohover opacitymedium left"',
'text' => $langs->trans("ReadPermissionNotAllowed")
);
2008-11-16 23:43:10 +00:00
}
}
2011-11-23 17:28:14 +00:00
/**
* Method to show box
*
* @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines
2016-06-27 11:57:10 +00:00
* @param int $nooutput No print, only return string
2017-06-12 12:09:00 +00:00
* @return string
2011-11-23 17:28:14 +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
}