dolibarr 19.0.3
contrat.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2009 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
26// Load Dolibarr environment
27require '../../main.inc.php';
28require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php';
29require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
30require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
31
32// Load translation files required by the page
33$langs->loadLangs(array('contracts', 'products', 'companies'));
34
35$id = GETPOST('id', 'int');
36$ref = GETPOST('ref', 'alpha');
37
38// Security check
39$fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : ''));
40$fieldtype = (!empty($ref) ? 'ref' : 'rowid');
41if ($user->socid) {
42 $socid = $user->socid;
43}
44
45// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
46$hookmanager->initHooks(array('productstatscontract'));
47
48// Load variable for pagination
49$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit;
50$sortfield = GETPOST('sortfield', 'aZ09comma');
51$sortorder = GETPOST('sortorder', 'aZ09comma');
52$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
53if (empty($page) || $page == -1) {
54 $page = 0;
55} // If $page is not defined, or '' or -1
56$offset = $limit * $page;
57$pageprev = $page - 1;
58$pagenext = $page + 1;
59if (!$sortorder) {
60 $sortorder = "DESC";
61}
62if (!$sortfield) {
63 $sortfield = "c.date_contrat";
64}
65
66$result = restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype);
67
68
69/*
70 * View
71 */
72
73$staticcontrat = new Contrat($db);
74$staticcontratligne = new ContratLigne($db);
75
76$form = new Form($db);
77
78if ($id > 0 || !empty($ref)) {
79 $product = new Product($db);
80 $result = $product->fetch($id, $ref);
81
82 $object = $product;
83
84 $parameters = array('id'=>$id);
85 $reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks
86 if ($reshook < 0) {
87 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
88 }
89
90 llxHeader("", "", $langs->trans("CardProduct".$product->type));
91
92 if ($result > 0) {
93 $head = product_prepare_head($product);
94 $titre = $langs->trans("CardProduct".$product->type);
95 $picto = ($product->type == Product::TYPE_SERVICE ? 'service' : 'product');
96 print dol_get_fiche_head($head, 'referers', $titre, -1, $picto);
97
98 $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $product, $action); // Note that $action and $object may have been modified by hook
99 print $hookmanager->resPrint;
100 if ($reshook < 0) {
101 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
102 }
103
104 $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
105
106 $shownav = 1;
107 if ($user->socid && !in_array('product', explode(',', getDolGlobalString('MAIN_MODULES_FOR_EXTERNAL')))) {
108 $shownav = 0;
109 }
110
111 dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
112
113 print '<div class="fichecenter">';
114
115 print '<div class="underbanner clearboth"></div>';
116 print '<table class="border tableforfield" width="100%">';
117
118 $nboflines = show_stats_for_company($product, $socid);
119
120 print "</table>";
121
122 print '</div>';
123 print '<div class="clearboth"></div>';
124
125 print dol_get_fiche_end();
126
127
128 $now = dol_now();
129
130 $sql = "SELECT";
131 $sql .= " sum(".$db->ifsql("cd.statut=0", 1, 0).') as nb_initial,';
132 $sql .= " sum(".$db->ifsql("cd.statut=4 AND cd.date_fin_validite > '".$db->idate($now)."'", 1, 0).") as nb_running,";
133 $sql .= " sum(".$db->ifsql("cd.statut=4 AND (cd.date_fin_validite IS NULL OR cd.date_fin_validite <= '".$db->idate($now)."')", 1, 0).') as nb_late,';
134 $sql .= " sum(".$db->ifsql("cd.statut=5", 1, 0).') as nb_closed,';
135 $sql .= " c.rowid as rowid, c.ref, c.ref_customer, c.ref_supplier, c.date_contrat, c.statut as statut,";
136 $sql .= " s.nom as name, s.rowid as socid, s.code_client";
137 $sql .= " FROM ".MAIN_DB_PREFIX."societe as s";
138 if (!$user->hasRight('societe', 'client', 'voir') && !$socid) {
139 $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
140 }
141 $sql .= ", ".MAIN_DB_PREFIX."contrat as c";
142 $sql .= ", ".MAIN_DB_PREFIX."contratdet as cd";
143 $sql .= " WHERE c.rowid = cd.fk_contrat";
144 $sql .= " AND c.fk_soc = s.rowid";
145 $sql .= " AND c.entity IN (".getEntity('contract').")";
146 $sql .= " AND cd.fk_product = ".((int) $product->id);
147 if (!$user->hasRight('societe', 'client', 'voir') && !$socid) {
148 $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".((int) $user->id);
149 }
150 if ($socid) {
151 $sql .= " AND s.rowid = ".((int) $socid);
152 }
153 $sql .= " GROUP BY c.rowid, c.ref, c.ref_customer, c.ref_supplier, c.date_contrat, c.statut, s.nom, s.rowid, s.code_client";
154 $sql .= $db->order($sortfield, $sortorder);
155
156 //Calcul total qty and amount for global if full scan list
157 $total_ht = 0;
158 $total_qty = 0;
159
160 // Count total nb of records
161 $totalofrecords = '';
162 if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
163 $result = $db->query($sql);
164 $totalofrecords = $db->num_rows($result);
165 }
166
167 $sql .= $db->plimit($limit + 1, $offset);
168
169 $result = $db->query($sql);
170 if ($result) {
171 $num = $db->num_rows($result);
172
173 $option = '&id='.$product->id;
174
175 if ($limit > 0 && $limit != $conf->liste_limit) {
176 $option .= '&limit='.((int) $limit);
177 }
178 if (!empty($search_month)) {
179 $option .= '&search_month='.urlencode($search_month);
180 }
181 if (!empty($search_year)) {
182 $option .= '&search_year='.urlencode($search_year);
183 }
184
185 print '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$product->id.'" name="search_form">'."\n";
186 print '<input type="hidden" name="token" value="'.newToken().'">';
187 if (!empty($sortfield)) {
188 print '<input type="hidden" name="sortfield" value="'.$sortfield.'"/>';
189 }
190 if (!empty($sortorder)) {
191 print '<input type="hidden" name="sortorder" value="'.$sortorder.'"/>';
192 }
193
194 print_barre_liste($langs->trans("Contrats"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1);
195
196 if (!empty($page)) {
197 $option .= '&page='.urlencode($page);
198 }
199
200 $i = 0;
201 print '<div class="div-table-responsive">';
202 print '<table class="tagtable liste listwithfilterbefore" width="100%">';
203
204 print '<tr class="liste_titre">';
205 print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "c.rowid", "", "&amp;id=".$product->id, '', $sortfield, $sortorder);
206 print_liste_field_titre("Company", $_SERVER["PHP_SELF"], "s.nom", "", "&amp;id=".$product->id, '', $sortfield, $sortorder);
207 print_liste_field_titre("CustomerCode", $_SERVER["PHP_SELF"], "s.code_client", "", "&amp;id=".$product->id, '', $sortfield, $sortorder);
208 print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "c.date_contrat", "", "&amp;id=".$product->id, 'align="center"', $sortfield, $sortorder);
209 //print_liste_field_titre("AmountHT"),$_SERVER["PHP_SELF"],"c.amount","","&amp;id=".$product->id,'align="right"',$sortfield,$sortorder);
210 print_liste_field_titre($staticcontratligne->LibStatut($staticcontratligne::STATUS_INITIAL, 3, -1, 'class="nochangebackground"'), $_SERVER["PHP_SELF"], "", '', '', 'align="center" width="16"', $sortfield, $sortorder, 'maxwidthsearch ');
211 print_liste_field_titre($staticcontratligne->LibStatut($staticcontratligne::STATUS_OPEN, 3, -1, 'class="nochangebackground"'), $_SERVER["PHP_SELF"], "", '', '', 'align="center" width="16"', $sortfield, $sortorder, 'maxwidthsearch ');
212 print_liste_field_titre($staticcontratligne->LibStatut($staticcontratligne::STATUS_CLOSED, 3, -1, 'class="nochangebackground"'), $_SERVER["PHP_SELF"], "", '', '', 'align="center" width="16"', $sortfield, $sortorder, 'maxwidthsearch ');
213 print "</tr>\n";
214
215 $contracttmp = new Contrat($db);
216
217 if ($num > 0) {
218 while ($i < min($num, $limit)) {
219 $objp = $db->fetch_object($result);
220
221 $contracttmp->id = $objp->rowid;
222 $contracttmp->ref = $objp->ref;
223 $contracttmp->ref_customer = $objp->ref_customer;
224 $contracttmp->ref_supplier = $objp->ref_supplier;
225
226 print '<tr class="oddeven">';
227 print '<td>';
228 print $contracttmp->getNomUrl(1);
229 print "</td>\n";
230 print '<td><a href="'.DOL_URL_ROOT.'/comm/card.php?socid='.$objp->socid.'">'.img_object($langs->trans("ShowCompany"), "company").' '.dol_trunc($objp->name, 44).'</a></td>';
231 print "<td>".$objp->code_client."</td>\n";
232 print "<td align=\"center\">";
233 print dol_print_date($db->jdate($objp->date_contrat), 'dayhour')."</td>";
234 //print "<td align=\"right\">".price($objp->total_ht)."</td>\n";
235 //print '<td align="right">';
236 print '<td class="center">'.($objp->nb_initial > 0 ? $objp->nb_initial : '').'</td>';
237 print '<td class="center">'.($objp->nb_running + $objp->nb_late > 0 ? $objp->nb_running + $objp->nb_late : '').'</td>';
238 print '<td class="center">'.($objp->nb_closed > 0 ? $objp->nb_closed : '').'</td>';
239 //$contratstatic->LibStatut($objp->statut,5).'</td>';
240 print "</tr>\n";
241 $i++;
242 }
243 }
244
245 print '</table>';
246 print '</div>';
247 print '</form>';
248 } else {
249 dol_print_error($db);
250 }
251 $db->free($result);
252 }
253} else {
255}
256
257// End of page
258llxFooter();
259$db->close();
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Definition wrapper.php:55
llxFooter()
Empty footer.
Definition wrapper.php:69
Class to manage contracts.
Class to manage lines of contracts.
Class to manage generation of HTML components Only common components must be here.
Class to manage products or services.
const TYPE_SERVICE
Service.
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
print_barre_liste($titre, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
product_prepare_head($object)
Prepare array with list of tabs.
show_stats_for_company($product, $socid)
Show stats for company.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.