dolibarr  19.0.0-dev
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
27 require '../../main.inc.php';
28 require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php';
29 require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
30 require_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');
41 if ($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');
53 if (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;
59 if (!$sortorder) {
60  $sortorder = "DESC";
61 }
62 if (!$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 
78 if ($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(',', $conf->global->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 (empty($user->rights->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 (empty($user->rights->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 {
254  dol_print_error();
255 }
256 
257 // End of page
258 llxFooter();
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:56
llxFooter()
Empty footer.
Definition: wrapper.php:70
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.
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
Definition: index.php:746
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
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 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.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
product_prepare_head($object)
Prepare array with list of tabs.
Definition: product.lib.php:36
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.