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')) {
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);
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');
132 $titre = $langs->trans(
"CardProduct".
$object->type);
137 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
138 print $hookmanager->resPrint;
143 $linkback =
'<a href="'.DOL_URL_ROOT.
'/product/stock/productlot_list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
146 if ($user->socid && !in_array(
'product', explode(
',',
getDolGlobalString(
'MAIN_MODULES_FOR_EXTERNAL')))) {
150 dol_banner_tab(
$object,
'id', $linkback, $shownav,
'rowid',
'batch', $morehtmlref);
152 print
'<div class="fichecenter">';
154 print
'<div class="underbanner clearboth"></div>';
155 print
'<table class="border centpercent tableforfield">';
158 print
'<tr><td class="titlefield">'.$langs->trans(
"Product").
'</td><td>';
160 $producttmp->fetch(
$object->fk_product);
161 print $producttmp->getNomUrl(1,
'stock').
" - ".$producttmp->label;
212 print
'<table class="noborder centpercent tableforfield">';
221 print
'<div class="clearboth"></div>';
225 if ($showmessage && $nboflines > 1) {
226 print
'<span class="opacitymedium">'.$langs->trans(
"ClinkOnALinkOfColumn", $langs->transnoentitiesnoconv(
"Referers")).
'</span>';
227 } elseif ($user->hasRight(
'fournisseur',
'commande',
'lire')) {
228 $sql =
"SELECT DISTINCT s.nom as name, s.rowid as socid, s.code_fournisseur,";
229 $sql .=
" cf.ref, cf.date_commande, cf.date_livraison as delivery_date, cf.fk_statut as statut, cf.rowid as facid,";
230 $sql .=
" cfd.rowid, SUM(cfdi.qty) as qty";
232 if (!$user->hasRight(
'societe',
'client',
'voir')) {
233 $sql .=
", sc.fk_soc, sc.fk_user ";
235 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
236 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"commande_fournisseur as cf ON (cf.fk_soc = s.rowid)";
237 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"commande_fournisseurdet as cfd ON (cfd.fk_commande = cf.rowid)";
238 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"receptiondet_batch as cfdi ON (cfdi.fk_elementdet = cfd.rowid)";
239 if (!$user->hasRight(
'societe',
'client',
'voir')) {
240 $sql .=
", ".MAIN_DB_PREFIX.
"societe_commerciaux as sc";
242 $sql .=
" WHERE cf.entity IN (".getEntity(
'product').
")";
243 $sql .=
" AND cfdi.batch = '".($db->escape(
$object->batch)).
"'";
244 $sql .=
" AND cfdi.fk_product = " . (int)
$object->fk_product;
245 if (!empty($search_month)) {
246 $sql .=
' AND MONTH(cf.date_commande) IN ('.$db->sanitize((
string) $search_month).
')';
248 if (!empty($search_year)) {
249 $sql .=
' AND YEAR(cf.date_commande) IN ('.$db->sanitize((
string) $search_year).
')';
251 if (!$user->hasRight(
'societe',
'client',
'voir')) {
252 $sql .=
" AND s.rowid = sc.fk_soc AND sc.fk_user = ".((int) $user->id);
255 $sql .=
" AND cf.fk_soc = ".((int) $socid);
257 $sql .=
" GROUP BY cf.rowid";
258 $sql .=
$db->order($sortfield, $sortorder);
261 $total_ht_pondere = 0;
265 $totalofrecords =
'';
267 $result =
$db->query($sql);
268 $totalofrecords =
$db->num_rows($result);
271 $sql .=
$db->plimit($limit + 1, $offset);
273 $result =
$db->query($sql);
275 $num =
$db->num_rows($result);
277 $option =
'&id='.$object->id;
279 if ($limit > 0 && $limit !=
$conf->liste_limit) {
280 $option .=
'&limit='.((int) $limit);
282 if (!empty($search_month)) {
283 $option .=
'&search_month='.urlencode((
string) ($search_month));
285 if (!empty($search_year)) {
286 $option .=
'&search_year='.urlencode((
string) ($search_year));
289 print
'<form method="post" action="'.$_SERVER [
'PHP_SELF'].
'?id='.
$object->id.
'" name="search_form">'.
"\n";
290 print
'<input type="hidden" name="token" value="'.newToken().
'">';
291 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'"/>';
292 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'"/>';
295 print_barre_liste($langs->trans(
"SuppliersOrders"), $page, $_SERVER[
"PHP_SELF"], $option, $sortfield, $sortorder,
'', $num, $totalofrecords,
'', 0,
'',
'', $limit, 0, 0, 1);
298 $option .=
'&page='.urlencode((
string) ($page));
301 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
302 print
'<div class="divsearchfield">';
303 print $langs->trans(
'Period').
' ('.$langs->trans(
"OrderDate").
') - ';
304 print $langs->trans(
'Month').
':<input class="flat" type="text" size="4" name="search_month" value="'.$search_month.
'"> ';
305 print $langs->trans(
'Year').
':'.$formother->selectyear($search_year ? (
string) $search_year :
'-1',
'search_year', 1, 20, 5);
306 print
'<div style="vertical-align: middle; display: inline-block">';
307 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")).
'">';
308 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")).
'">';
314 print
'<div class="div-table-responsive">';
315 print
'<table class="tagtable liste listwithfilterbefore" width="100%">';
316 print
'<tr class="liste_titre">';
319 print_liste_field_titre(
"SupplierCode", $_SERVER[
"PHP_SELF"],
"s.code_fournisseur",
"", $option,
'', $sortfield, $sortorder);
320 print_liste_field_titre(
"OrderDate", $_SERVER[
"PHP_SELF"],
"cf.date_commande",
"", $option,
'align="center"', $sortfield, $sortorder);
321 print_liste_field_titre(
"DateDeliveryPlanned", $_SERVER[
"PHP_SELF"],
"cf.date_livraison",
"", $option,
'align="center"', $sortfield, $sortorder);
322 print_liste_field_titre(
"Qty", $_SERVER[
"PHP_SELF"],
"cfdi.qty",
"", $option,
'align="center"', $sortfield, $sortorder);
324 print_liste_field_titre(
"Status", $_SERVER[
"PHP_SELF"],
"cf.fk_statut",
"", $option,
'align="right"', $sortfield, $sortorder);
328 while ($i < min($num, $limit)) {
329 $objp =
$db->fetch_object($result);
332 $total_qty += $objp->qty;
334 $commandefournisseurstatic->id = $objp->facid;
335 $commandefournisseurstatic->ref = $objp->ref;
336 $societestatic->fetch($objp->socid);
339 print
'<tr class="oddeven">';
341 print $commandefournisseurstatic->getNomUrl(1);
343 print
'<td>'.$societestatic->getNomUrl(1).
'</td>';
344 print
"<td>".$objp->code_fournisseur.
"</td>\n";
345 print
'<td class="center">';
347 print
'<td class="center">';
349 print
'<td class="center">'.$objp->qty.
"</td>\n";
351 print
'<td align="right">'.$commandefournisseurstatic->LibStatut($objp->statut, 5).
'</td>';
356 print
'<tr class="liste_total">';
358 print
'<td class="left">'.$langs->trans(
"Total").
'</td>';
360 print
'<td class="left">'.$langs->trans(
"Totalforthispage").
'</td>';
362 print
'<td colspan="2"></td>';
365 print
'<td class="center">'.$total_qty.
'</td>';
$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...)
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_liste_field_titre($name, $file="", $field="", $begin="", $param="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
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_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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 a Dolibarr global constant string value.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
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.