32require
'../../../main.inc.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
41require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
47$langs->loadLangs(array(
'companies',
'bills',
'products',
'orders'));
51$batch =
GETPOST(
'batch',
'alpha');
55$fieldvalue = (!empty($id) ?
$id : (!empty($ref) ? $ref :
''));
56$fieldtype = (!empty($ref) ?
'ref' :
'rowid');
58if (!empty($user->socid)) {
59 $socid = $user->socid;
63$hookmanager->initHooks(array(
'batchproductstatssupplierorder'));
65$showmessage =
GETPOST(
'showmessage');
69$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
70$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
72if (empty($page) || $page == -1) {
75$offset = $limit * $page;
78if (empty($sortorder)) {
81if (empty($sortfield)) {
82 $sortfield =
"cf.date_commande";
85$search_month =
GETPOST(
'search_month');
86$search_year =
GETPOST(
'search_year');
88if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
93if (!$user->hasRight(
'produit',
'lire')) {
103$societestatic =
new Societe($db);
105$form =
new Form($db);
108if ($id > 0 || !empty($ref)) {
111 $tmp = explode(
'_', $ref);
115 $result =
$object->fetch($id, $objectid, $batch);
117 $parameters = array(
'id' => $id);
118 $reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
120 setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
125 $title = $langs->trans(
'Batch').
" ".$shortlabel.
" - ".$langs->trans(
'Referers');
126 $helpurl =
'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos';
128 llxHeader(
'', $title, $helpurl,
'', 0, 0,
'',
'',
'',
'mod-product page-stock-stats_commande_fournisseur');
136 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
137 print $hookmanager->resPrint;
139 setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
142 $linkback =
'<a href="'.DOL_URL_ROOT.
'/product/stock/productlot_list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
145 if ($user->socid && !in_array(
'product', explode(
',',
getDolGlobalString(
'MAIN_MODULES_FOR_EXTERNAL')))) {
149 dol_banner_tab(
$object,
'id', $linkback, $shownav,
'rowid',
'batch', $morehtmlref);
151 print
'<div class="fichecenter">';
153 print
'<div class="underbanner clearboth"></div>';
154 print
'<table class="border centpercent tableforfield">';
157 print
'<tr><td class="titlefield">'.$langs->trans(
"Product").
'</td><td>';
158 $producttmp =
new Product($db);
159 $producttmp->fetch(
$object->fk_product);
160 print $producttmp->getNomUrl(1,
'stock').
" - ".$producttmp->label;
211 print
'<table class="noborder centpercent tableforfield">';
220 print
'<div class="clearboth"></div>';
224 if ($showmessage && $nboflines > 1) {
225 print
'<span class="opacitymedium">'.$langs->trans(
"ClinkOnALinkOfColumn", $langs->transnoentitiesnoconv(
"Referers")).
'</span>';
226 } elseif ($user->hasRight(
'fournisseur',
'commande',
'lire')) {
227 $sql =
"SELECT DISTINCT s.nom as name, s.rowid as socid, s.code_fournisseur,";
228 $sql .=
" cf.ref, cf.date_commande, cf.date_livraison as delivery_date, cf.fk_statut as statut, cf.rowid as facid,";
229 $sql .=
" cfd.rowid, SUM(cfdi.qty) as qty";
231 if (!$user->hasRight(
'societe',
'client',
'voir')) {
232 $sql .=
", sc.fk_soc, sc.fk_user ";
234 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
235 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"commande_fournisseur as cf ON (cf.fk_soc = s.rowid)";
236 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"commande_fournisseurdet as cfd ON (cfd.fk_commande = cf.rowid)";
237 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"receptiondet_batch as cfdi ON (cfdi.fk_elementdet = cfd.rowid)";
238 if (!$user->hasRight(
'societe',
'client',
'voir')) {
239 $sql .=
", ".MAIN_DB_PREFIX.
"societe_commerciaux as sc";
241 $sql .=
" WHERE cf.entity IN (".getEntity(
'product').
")";
242 $sql .=
" AND cfdi.batch = '".($db->escape(
$object->batch)).
"'";
243 $sql .=
" AND cfdi.fk_product = " . (int)
$object->fk_product;
244 if (!empty($search_month)) {
245 $sql .=
' AND MONTH(cf.date_commande) IN ('.$db->sanitize((
string) $search_month).
')';
247 if (!empty($search_year)) {
248 $sql .=
' AND YEAR(cf.date_commande) IN ('.$db->sanitize((
string) $search_year).
')';
250 if (!$user->hasRight(
'societe',
'client',
'voir')) {
251 $sql .=
" AND s.rowid = sc.fk_soc AND sc.fk_user = ".((int) $user->id);
254 $sql .=
" AND cf.fk_soc = ".((int) $socid);
256 $sql .=
" GROUP BY cf.rowid";
257 $sql .= $db->order($sortfield, $sortorder);
260 $total_ht_pondere = 0;
264 $totalofrecords =
'';
266 $result = $db->query($sql);
267 $totalofrecords = $db->num_rows($result);
270 $sql .= $db->plimit($limit + 1, $offset);
272 $result = $db->query($sql);
274 $num = $db->num_rows($result);
276 $option =
'&id='.$object->id;
278 if ($limit > 0 && $limit !=
$conf->liste_limit) {
279 $option .=
'&limit='.((int) $limit);
281 if (!empty($search_month)) {
282 $option .=
'&search_month='.urlencode((
string) ($search_month));
284 if (!empty($search_year)) {
285 $option .=
'&search_year='.urlencode((
string) ($search_year));
288 print
'<form method="post" action="'.$_SERVER [
'PHP_SELF'].
'?id='.
$object->id.
'" name="search_form">'.
"\n";
289 print
'<input type="hidden" name="token" value="'.newToken().
'">';
290 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'"/>';
291 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'"/>';
294 print_barre_liste($langs->trans(
"SuppliersOrders"), $page, $_SERVER[
"PHP_SELF"], $option, $sortfield, $sortorder,
'', $num, $totalofrecords,
'', 0,
'',
'', $limit, 0, 0, 1);
297 $option .=
'&page='.urlencode((
string) ($page));
300 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
301 print
'<div class="divsearchfield">';
302 print $langs->trans(
'Period').
' ('.$langs->trans(
"OrderDate").
') - ';
303 print $langs->trans(
'Month').
':<input class="flat" type="text" size="4" name="search_month" value="'.$search_month.
'"> ';
304 print $langs->trans(
'Year').
':'.$formother->selectyear($search_year ? (
string) $search_year :
'-1',
'search_year', 1, 20, 5);
305 print
'<div style="vertical-align: middle; display: inline-block">';
306 print
'<input type="image" class="liste_titre" name="button_search" src="'.img_picto($langs->trans(
"Search"),
'search.png',
'', 0, 1).
'" value="'.
dol_escape_htmltag($langs->trans(
"Search")).
'" title="'.
dol_escape_htmltag($langs->trans(
"Search")).
'">';
307 print
'<input type="image" class="liste_titre" name="button_removefilter" src="'.img_picto($langs->trans(
"Search"),
'searchclear.png',
'', 0, 1).
'" value="'.
dol_escape_htmltag($langs->trans(
"RemoveFilter")).
'" title="'.
dol_escape_htmltag($langs->trans(
"RemoveFilter")).
'">';
313 print
'<div class="div-table-responsive">';
314 print
'<table class="tagtable liste listwithfilterbefore" width="100%">';
315 print
'<tr class="liste_titre">';
318 print_liste_field_titre(
"SupplierCode", $_SERVER[
"PHP_SELF"],
"s.code_fournisseur",
"", $option,
'', $sortfield, $sortorder);
319 print_liste_field_titre(
"OrderDate", $_SERVER[
"PHP_SELF"],
"cf.date_commande",
"", $option,
'align="center"', $sortfield, $sortorder);
320 print_liste_field_titre(
"DateDeliveryPlanned", $_SERVER[
"PHP_SELF"],
"cf.date_livraison",
"", $option,
'align="center"', $sortfield, $sortorder);
321 print_liste_field_titre(
"Qty", $_SERVER[
"PHP_SELF"],
"cfdi.qty",
"", $option,
'align="center"', $sortfield, $sortorder);
323 print_liste_field_titre(
"Status", $_SERVER[
"PHP_SELF"],
"cf.fk_statut",
"", $option,
'align="right"', $sortfield, $sortorder);
327 while ($i < min($num, $limit)) {
328 $objp = $db->fetch_object($result);
331 $total_qty += $objp->qty;
333 $commandefournisseurstatic->id = $objp->facid;
334 $commandefournisseurstatic->ref = $objp->ref;
335 $societestatic->fetch($objp->socid);
338 print
'<tr class="oddeven">';
340 print $commandefournisseurstatic->getNomUrl(1);
342 print
'<td>'.$societestatic->getNomUrl(1).
'</td>';
343 print
"<td>".$objp->code_fournisseur.
"</td>\n";
344 print
'<td class="center">';
345 print
dol_print_date($db->jdate($objp->date_commande),
'dayhour').
"</td>";
346 print
'<td class="center">';
347 print
dol_print_date($db->jdate($objp->delivery_date),
'dayhour').
"</td>";
348 print
'<td class="center">'.$objp->qty.
"</td>\n";
350 print
'<td align="right">'.$commandefournisseurstatic->LibStatut($objp->statut, 5).
'</td>';
355 print
'<tr class="liste_total">';
357 print
'<td class="left">'.$langs->trans(
"Total").
'</td>';
359 print
'<td class="left">'.$langs->trans(
"Totalforthispage").
'</td>';
361 print
'<td colspan="2"></td>';
364 print
'<td class="center">'.$total_qty.
'</td>';
371 dol_print_error($db);
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage predefined suppliers products.
Class to manage products or services.
Class with list of lots and properties.
Class to manage third parties objects (customers, suppliers, prospects...)
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
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.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
print_liste_field_titre($name, $file="", $field="", $begin="", $param="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
show_stats_for_batch($batch, $socid)
Show stats for product batch.
productlot_prepare_head($object)
Prepare array with list of tabs.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.