dolibarr  9.0.0
purchasesjournal.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2007-2010 Laurent Destailleur <eldy@users.sourceforge.net>
3  * Copyright (C) 2007-2010 Jean Heimburger <jean@tiaris.info>
4  * Copyright (C) 2011-2014 Juanjo Menent <jmenent@2byte.es>
5  * Copyright (C) 2012 Regis Houssin <regis.houssin@inodbox.com>
6  * Copyright (C) 2011-2012 Alexandre spangaro <aspangaro.dolibarr@gmail.com>
7  * Copyright (C) 2013 Marcos García <marcosgdf@gmail.com>
8  * Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program. If not, see <http://www.gnu.org/licenses/>.
22  */
23 
29 global $mysoc;
30 
31 require '../../main.inc.php';
32 require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php';
33 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
34 require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
35 require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php';
36 
37 // Load translation files required by the page
38 $langs->loadlangs(array('companies', 'other', 'compta'));
39 
40 $date_startmonth=GETPOST('date_startmonth');
41 $date_startday=GETPOST('date_startday');
42 $date_startyear=GETPOST('date_startyear');
43 $date_endmonth=GETPOST('date_endmonth');
44 $date_endday=GETPOST('date_endday');
45 $date_endyear=GETPOST('date_endyear');
46 
47 // Security check
48 if ($user->societe_id > 0) $socid = $user->societe_id;
49 if (! empty($conf->comptabilite->enabled)) $result=restrictedArea($user,'compta','','','resultat');
50 if (! empty($conf->accounting->enabled)) $result=restrictedArea($user,'accounting','','','comptarapport');
51 
52 
53 /*
54  * Actions
55  */
56 
57 // None
58 
59 
60 /*
61  * View
62  */
63 
64 $morequery='&date_startyear='.$date_startyear.'&date_startmonth='.$date_startmonth.'&date_startday='.$date_startday.'&date_endyear='.$date_endyear.'&date_endmonth='.$date_endmonth.'&date_endday='.$date_endday;
65 
66 llxHeader('',$langs->trans("PurchasesJournal"),'','',0,0,'','',$morequery);
67 
68 $form=new Form($db);
69 
70 $year_current = strftime("%Y",dol_now());
71 $pastmonth = strftime("%m",dol_now()) - 1;
72 $pastmonthyear = $year_current;
73 if ($pastmonth == 0)
74 {
75  $pastmonth = 12;
76  $pastmonthyear--;
77 }
78 
79 $date_start=dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear);
80 $date_end=dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear);
81 
82 if (empty($date_start) || empty($date_end)) // We define date_start and date_end
83 {
84  $date_start=dol_get_first_day($pastmonthyear,$pastmonth,false);
85  $date_end=dol_get_last_day($pastmonthyear,$pastmonth,false);
86 }
87 
88 $name=$langs->trans("PurchasesJournal");
89 $periodlink='';
90 $exportlink='';
91 $builddate=dol_now();
92 $description=$langs->trans("DescPurchasesJournal").'<br>';
93 if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.= $langs->trans("DepositsAreNotIncluded");
94 else $description.= $langs->trans("DepositsAreIncluded");
95 $period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
96 
97 report_header($name,'',$period,$periodlink,$description,$builddate,$exportlink);
98 
99 $p = explode(":", $conf->global->MAIN_INFO_SOCIETE_COUNTRY);
100 $idpays = $p[0];
101 
102 
103 $sql = "SELECT f.rowid, f.ref_supplier, f.type, f.datef, f.libelle,";
104 $sql.= " fd.total_ttc, fd.tva_tx, fd.total_ht, fd.tva as total_tva, fd.product_type, fd.localtax1_tx, fd.localtax2_tx, fd.total_localtax1, fd.total_localtax2,";
105 $sql.= " s.rowid as socid, s.nom as name, s.code_compta_fournisseur,";
106 $sql.= " p.rowid as pid, p.ref as ref, p.accountancy_code_buy,";
107 $sql.= " ct.accountancy_code_buy as account_tva, ct.recuperableonly";
108 $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn_det as fd";
109 $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_tva as ct ON fd.tva_tx = ct.taux AND fd.info_bits = ct.recuperableonly AND ct.fk_pays = '".$idpays."'";
110 $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON p.rowid = fd.fk_product";
111 $sql.= " JOIN ".MAIN_DB_PREFIX."facture_fourn as f ON f.rowid = fd.fk_facture_fourn";
112 $sql.= " JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = f.fk_soc" ;
113 $sql.= " WHERE f.fk_statut > 0 AND f.entity = ".$conf->entity;
114 if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2)";
115 else $sql.= " AND f.type IN (0,1,2,3)";
116 if ($date_start && $date_end) $sql .= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'";
117 
118 // TODO Find a better trick to avoid problem with some mysql installations
119 if (in_array($db->type, array('mysql', 'mysqli'))) $db->query('SET SQL_BIG_SELECTS=1');
120 
121 $result = $db->query($sql);
122 if ($result)
123 {
124  $num = $db->num_rows($result);
125  // les variables
126  $cptfour = (! empty($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER)?$conf->global->ACCOUNTING_ACCOUNT_SUPPLIER:$langs->trans("CodeNotDef"));
127  $cpttva = (! empty($conf->global->ACCOUNTING_VAT_BUY_ACCOUNT)?$conf->global->ACCOUNTING_VAT_BUY_ACCOUNT:$langs->trans("CodeNotDef"));
128 
129  $tabfac = array();
130  $tabht = array();
131  $tabtva = array();
132  $tabttc = array();
133  $tablocaltax1 = array();
134  $tablocaltax2 = array();
135  $tabcompany = array();
136 
137  $i=0;
138  while ($i < $num)
139  {
140  $obj = $db->fetch_object($result);
141  // contrôles
142  $compta_soc = (! empty($obj->code_compta_fournisseur)?$obj->code_compta_fournisseur:$cptfour);
143  $compta_prod = $obj->accountancy_code_buy;
144  if (empty($compta_prod))
145  {
146  if($obj->product_type == 0) $compta_prod = (! empty($conf->global->ACCOUNTING_PRODUCT_BUY_ACCOUNT)?$conf->global->ACCOUNTING_PRODUCT_BUY_ACCOUNT:$langs->trans("CodeNotDef"));
147  else $compta_prod = (! empty($conf->global->ACCOUNTING_SERVICE_BUY_ACCOUNT)?$conf->global->ACCOUNTING_SERVICE_BUY_ACCOUNT:$langs->trans("CodeNotDef"));
148  }
149  $compta_tva = (! empty($obj->account_tva)?$obj->account_tva:$cpttva);
150  $compta_localtax1 = (! empty($obj->account_localtax1)?$obj->account_localtax1:$langs->trans("CodeNotDef"));
151  $compta_localtax2 = (! empty($obj->account_localtax2)?$obj->account_localtax2:$langs->trans("CodeNotDef"));
152 
153  $account_localtax1=getLocalTaxesFromRate($obj->tva_tx, 1, $mysoc, $obj->thirdparty);
154  $compta_localtax1= (! empty($account_localtax1[2])?$account_localtax1[2]:$langs->trans("CodeNotDef"));
155  $account_localtax2=getLocalTaxesFromRate($obj->tva_tx, 2, $mysoc, $obj->thirdparty);
156  $compta_localtax2= (! empty($account_localtax2[2])?$account_localtax2[2]:$langs->trans("CodeNotDef"));
157 
158  $tabfac[$obj->rowid]["date"] = $obj->datef;
159  $tabfac[$obj->rowid]["ref"] = $obj->ref_supplier;
160  $tabfac[$obj->rowid]["type"] = $obj->type;
161  $tabfac[$obj->rowid]["lib"] = $obj->libelle;
162  $tabttc[$obj->rowid][$compta_soc] += $obj->total_ttc;
163  $tabht[$obj->rowid][$compta_prod] += $obj->total_ht;
164  if ($obj->recuperableonly != 1) $tabtva[$obj->rowid][$compta_tva] += $obj->total_tva;
165  $tablocaltax1[$obj->rowid][$compta_localtax1] += $obj->total_localtax1;
166  $tablocaltax2[$obj->rowid][$compta_localtax2] += $obj->total_localtax2;
167  $tabcompany[$obj->rowid]=array('id'=>$obj->socid,'name'=>$obj->name);
168 
169  $i++;
170  }
171 }
172 else {
173  dol_print_error($db);
174 }
175 
176 /*
177  * Show result array
178  */
179 print "<table class=\"noborder\" width=\"100%\">";
180 print "<tr class=\"liste_titre\">";
182 print "<td>".$langs->trans("Date")."</td>";
183 print "<td>".$langs->trans("Piece").' ('.$langs->trans("InvoiceRef").")</td>";
184 print "<td>".$langs->trans("Account")."</td>";
185 print "<td>".$langs->trans("Type")."</td><td align='right'>".$langs->trans("Debit")."</td><td align='right'>".$langs->trans("Credit")."</td>";
186 print "</tr>\n";
187 
188 
189 $invoicestatic=new FactureFournisseur($db);
190 $companystatic=new Fournisseur($db);
191 
192 foreach ($tabfac as $key => $val)
193 {
194  $invoicestatic->id = $key;
195  $invoicestatic->ref = $val["ref"];
196  $invoicestatic->type = $val["type"];
197 
198  $companystatic->id = $tabcompany[$key]['id'];
199  $companystatic->name = $tabcompany[$key]['name'];
200 
201  $lines = array(
202  array(
203  'var' => $tabht[$key],
204  'label' => $langs->trans('Products'),
205  ),
206  array(
207  'var' => $tabtva[$key],
208  'label' => $langs->trans('VAT')
209  ),
210  array(
211  'var' => $tablocaltax1[$key],
212  'label' => $langs->transcountry('LT1', $mysoc->country_code)
213  ),
214  array(
215  'var' => $tablocaltax2[$key],
216  'label' => $langs->transcountry('LT2', $mysoc->country_code)
217  ),
218  array(
219  'var' => $tabttc[$key],
220  'label' => $langs->trans('ThirdParty').' ('.$companystatic->getNomUrl(0, 'supplier', 16).')',
221  'nomtcheck' => true,
222  'inv' => true
223  )
224  );
225 
226  foreach ($lines as $line)
227  {
228  foreach ($line['var'] as $k => $mt)
229  {
230  if (isset($line['nomtcheck']) || $mt)
231  {
232  print '<tr class="oddeven">';
233  print "<td>".dol_print_date($db->jdate($val["date"]))."</td>";
234  print "<td>".$invoicestatic->getNomUrl(1)."</td>";
235  print "<td>".$k."</td><td>".$line['label']."</td>";
236 
237  if (isset($line['inv']))
238  {
239  print '<td align="right">'.($mt<0?price(-$mt):'')."</td>";
240  print '<td align="right">'.($mt>=0?price($mt):'')."</td>";
241  }
242  else
243  {
244  print '<td align="right">'.($mt>=0?price($mt):'')."</td>";
245  print '<td align="right">'.($mt<0?price(-$mt):'')."</td>";
246  }
247 
248  print "</tr>";
249  }
250  }
251  }
252 }
253 
254 print "</table>";
255 
256 // End of page
257 llxFooter();
258 $db->close();
llxFooter()
Empty footer.
Definition: wrapper.php:56
GETPOST($paramname, $check='none', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
print
Draft customers invoices.
Definition: index.php:91
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm=false, $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
dol_get_first_day($year, $month=1, $gm=false)
Return GMT time for first day of a month or year.
Definition: date.lib.php:453
dol_print_error($db='', $error='', $errors=null)
Affiche message erreur system avec toutes les informations pour faciliter le diagnostic et la remonte...
Class to manage suppliers invoices.
Class to manage suppliers.
Class to manage generation of HTML components Only common components must be here.
llxHeader()
Empty header.
Definition: wrapper.php:44
dol_now($mode='gmt')
Return date for now.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages...
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
Definition: date.lib.php:467
restrictedArea($user, $features, $objectid=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0)
Check permissions of a user to show a page and an object.
getLocalTaxesFromRate($vatrate, $local, $buyer, $seller, $firstparamisid=0)
Get type and rate of localtaxes for a particular vat rate/country of a thirdparty.
report_header($reportname, $notused, $period, $periodlink, $description, $builddate, $exportlink='', $moreparam=array(), $calcmode='', $varlink='')
Show header of a report.
Definition: report.lib.php:41