Debug barcode module

This commit is contained in:
Laurent Destailleur 2008-08-28 00:31:27 +00:00
parent 2819aa1ed2
commit 79eb1e85a8
12 changed files with 1312 additions and 929 deletions

View File

@ -19,11 +19,11 @@
*/ */
/** /**
\file htdocs/admin/barcode.php \file htdocs/admin/barcode.php
\ingroup barcode \ingroup barcode
\brief Page d'administration/configuration du module Code barre \brief Page d'administration/configuration du module Code barre
\version $Id$ \version $Id$
*/ */
require("./pre.inc.php"); require("./pre.inc.php");
require_once(DOL_DOCUMENT_ROOT."/lib/admin.lib.php"); require_once(DOL_DOCUMENT_ROOT."/lib/admin.lib.php");
@ -34,7 +34,7 @@ $dir = DOL_DOCUMENT_ROOT."/includes/modules/barcode/";
$langs->load("admin"); $langs->load("admin");
if (!$user->admin) if (!$user->admin)
accessforbidden(); accessforbidden();
if ($_POST["action"] == 'setcoder') if ($_POST["action"] == 'setcoder')
{ {
@ -47,17 +47,23 @@ if ($_POST["action"] == 'setcoder')
else if ($_POST["action"] == 'setgenbarcodelocation') else if ($_POST["action"] == 'setgenbarcodelocation')
{ {
dolibarr_set_const($db, "GENBARCODE_LOCATION",$_POST["genbarcodelocation"]); dolibarr_set_const($db, "GENBARCODE_LOCATION",$_POST["genbarcodelocation"]);
Header("Location: barcode.php"); }
exit; else if ($_POST["action"] == 'setdefaultbarcodetype')
{
dolibarr_set_const($db, "PRODUIT_DEFAULT_BARCODE_TYPE", $_POST["coder_id"]);
}
else if ($_POST["action"] == 'GENBARCODE_BARCODETYPE_THIRDPARTY')
{
dolibarr_set_const($db, "GENBARCODE_BARCODETYPE_THIRDPARTY", $_POST["coder_id"]);
} }
/* /*
else if ($_POST["action"] == 'setproductusebarcode') else if ($_POST["action"] == 'setproductusebarcode')
{ {
dolibarr_set_const($db, "PRODUIT_USE_BARCODE",$_POST["value"]); dolibarr_set_const($db, "PRODUIT_USE_BARCODE",$_POST["value"]);
Header("Location: barcode.php"); Header("Location: barcode.php");
exit; exit;
} }
*/ */
$html = new Form($db); $html = new Form($db);
@ -80,7 +86,7 @@ $var=true;
while (($file = readdir($handle))!==false) while (($file = readdir($handle))!==false)
{ {
if (substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS') if (substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS')
{ {
if (is_readable($dir.$file)) if (is_readable($dir.$file))
{ {
if (eregi('(.*)\.modules\.php',$file,$reg)) if (eregi('(.*)\.modules\.php',$file,$reg))
@ -88,13 +94,13 @@ while (($file = readdir($handle))!==false)
$filebis=$reg[1]; $filebis=$reg[1];
// Chargement de la classe de codage // Chargement de la classe de codage
require_once($dir.$file); require_once($dir.$file);
$classname = "mod".ucfirst($filebis); $classname = "mod".ucfirst($filebis);
$module = new $classname($db); $module = new $classname($db);
// Show modules according to features level // Show modules according to features level
if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) continue; if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) continue;
if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) continue; if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) continue;
$barcodelist[$filebis]=$module->info(); $barcodelist[$filebis]=$module->info();
} }
@ -153,7 +159,7 @@ if ($resql)
{ {
$url=DOL_URL_ROOT.'/viewimage.php?modulepart=barcode&generator='.urlencode($obj->coder).'&code='.urlencode($obj->example).'&encoding='.urlencode($obj->encoding); $url=DOL_URL_ROOT.'/viewimage.php?modulepart=barcode&generator='.urlencode($obj->coder).'&code='.urlencode($obj->example).'&encoding='.urlencode($obj->encoding);
//print $url; //print $url;
print '<img src="'.$url.'" border="0">'; print '<img src="'.$url.'" title="'.$obj->example.'" border="0">';
} }
else else
{ {
@ -213,137 +219,153 @@ if (!isset($_ENV['windir']) && !file_exists($_ENV['windir']))
} }
// Module produits // Module produits
/* if ($conf->societe->enabled)
if ($conf->produit->enabled)
{ {
$var=!$var; $var=!$var;
print '<form method="post" action="'.$_SERVER["PHP_SELF"].'">'; print "<form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\">";
print '<input type="hidden" name="action" value="setproductusebarcode">'; print "<input type=\"hidden\" name=\"action\" value=\"setdefaultbarcodetype\">";
print '<tr '.$bc[$var].'>'; print "<tr ".$bc[$var].">";
print '<td>'.$langs->trans("UseBarcodeInProductModule").'</td>'; print '<td>'.$langs->trans("SetDefaultBarcodeTypeProducts").'</td>';
print '<td width="60" align="right">'; print '<td width="60" align="right">';
print $html->selectyesno('value',$conf->global->PRODUIT_USE_BARCODE,1); print $formbarcode->select_barcode_type($conf->global->PRODUIT_DEFAULT_BARCODE_TYPE,"coder_id",1);
print '</td>'; print '</td><td align="right">';
print '<td width="60" align="center"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td>'; print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print "</td>";
print '</tr>';
print '</form>';
}
// Module produits
if ($conf->produit->enabled)
{
$var=!$var;
print "<form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\">";
print "<input type=\"hidden\" name=\"action\" value=\"GENBARCODE_BARCODETYPE_THIRDPARTY\">";
print "<tr ".$bc[$var].">";
print '<td>'.$langs->trans("SetDefaultBarcodeTypeThirdParties").'</td>';
print '<td width="60" align="right">';
print $formbarcode->select_barcode_type($conf->global->GENBARCODE_BARCODETYPE_THIRDPARTY,"coder_id",1);
print '</td><td align="right">';
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print "</td>";
print '</tr>'; print '</tr>';
print '</form>'; print '</form>';
} }
*/
print '</table>'; print '</table>';
/* /*
//EAN13 //EAN13
$var=!$var; $var=!$var;
print '<tr '.$bc[$var].'><td width="100">'; print '<tr '.$bc[$var].'><td width="100">';
print "EAN13"; print "EAN13";
print "</td><td>\n"; print "</td><td>\n";
print "L'EAN se compose de 13 caract<63>res, 12 chiffres plus une cl<63> de contr<74>le. Il fonctionne de la m<>me mani<6E>re que l'UPC, avec lequel il est compatible.<br>"; print "L'EAN se compose de 13 caract<63>res, 12 chiffres plus une cl<63> de contr<74>le. Il fonctionne de la m<>me mani<6E>re que l'UPC, avec lequel il est compatible.<br>";
print "L'utilisation des symbologies EAN13 impose la souscription et l'abonnement aupr<70>s d'organisme tel que GENCOD.<br>"; print "L'utilisation des symbologies EAN13 impose la souscription et l'abonnement aupr<70>s d'organisme tel que GENCOD.<br>";
print "Codes num<75>riques utilis<69>s exclusivement <20> l'identification des produits susceptibles d'<27>tre vendus au grand public."; print "Codes num<75>riques utilis<69>s exclusivement <20> l'identification des produits susceptibles d'<27>tre vendus au grand public.";
print '</td>'; print '</td>';
// Affiche exemple // Affiche exemple
print '<td align="center"><img src="'.dol_genbarcode('123456789012','EAN',1).'"></td>'; print '<td align="center"><img src="'.dol_genbarcode('123456789012','EAN',1).'"></td>';
print '<td align="center">'; print '<td align="center">';
print $formbarcode->setBarcodeEncoder('EAN13','form'.$i); print $formbarcode->setBarcodeEncoder('EAN13','form'.$i);
print "</td></tr>\n"; print "</td></tr>\n";
$i++; $i++;
//UPC //UPC
$var=!$var; $var=!$var;
print '<tr '.$bc[$var].'><td width="100">'; print '<tr '.$bc[$var].'><td width="100">';
print "UPC"; print "UPC";
print "</td><td>\n"; print "</td><td>\n";
print "L'UPC est l'<27>quivalent de l'EAN8/13 pour des pays codificateurs autre que l'Europe.<br>"; print "L'UPC est l'<27>quivalent de l'EAN8/13 pour des pays codificateurs autre que l'Europe.<br>";
print "Il ne comporte que 11 chiffres plus la cl<63>.<br>"; print "Il ne comporte que 11 chiffres plus la cl<63>.<br>";
print "C'est en r<>alit<69> un code EAN13 dont le premier chiffre serait z<>ro et dont la pr<70>sentation serait l<>g<EFBFBD>rement diff<66>rente.<br>"; print "C'est en r<>alit<69> un code EAN13 dont le premier chiffre serait z<>ro et dont la pr<70>sentation serait l<>g<EFBFBD>rement diff<66>rente.<br>";
print "Codes num<75>riques utilis<69>s exclusivement <20> l'identification des produits susceptibles d'<27>tre vendus au grand public."; print "Codes num<75>riques utilis<69>s exclusivement <20> l'identification des produits susceptibles d'<27>tre vendus au grand public.";
print '</td>'; print '</td>';
// Affiche exemple // Affiche exemple
print '<td align="center"><img src="'.dol_genbarcode('123456789012','UPC',1).'"></td>'; print '<td align="center"><img src="'.dol_genbarcode('123456789012','UPC',1).'"></td>';
print '<td align="center">'; print '<td align="center">';
print $formbarcode->setBarcodeEncoder('UPC','form'.$i); print $formbarcode->setBarcodeEncoder('UPC','form'.$i);
print "</td></tr>\n"; print "</td></tr>\n";
$i++; $i++;
//ISBN //ISBN
$var=!$var; $var=!$var;
print '<tr '.$bc[$var].'><td width="100">'; print '<tr '.$bc[$var].'><td width="100">';
print "ISBN"; print "ISBN";
print "</td><td>\n"; print "</td><td>\n";
print "Le code ISBN est un code d<>di<64> au milieu de la presse <20>crite."; print "Le code ISBN est un code d<>di<64> au milieu de la presse <20>crite.";
print '</td>'; print '</td>';
// Affiche exemple // Affiche exemple
print '<td align="center"><img src="'.dol_genbarcode('123456789','ISBN',1).'"></td>'; print '<td align="center"><img src="'.dol_genbarcode('123456789','ISBN',1).'"></td>';
print '<td align="center">'; print '<td align="center">';
print $formbarcode->setBarcodeEncoder('ISBN','form'.$i); print $formbarcode->setBarcodeEncoder('ISBN','form'.$i);
print "</td></tr>\n"; print "</td></tr>\n";
$i++; $i++;
//code 39 //code 39
$var=!$var; $var=!$var;
print '<tr '.$bc[$var].'><td width="100">'; print '<tr '.$bc[$var].'><td width="100">';
print "Code 39"; print "Code 39";
print "</td><td>\n"; print "</td><td>\n";
print "Premier code alpha num<75>rique utilis<69> massivement dans l'Industrie pour sa capacit<69> d'encodage (chiffres et lettres)<br>"; print "Premier code alpha num<75>rique utilis<69> massivement dans l'Industrie pour sa capacit<69> d'encodage (chiffres et lettres)<br>";
print "ainsi que par son degr<67> de s<>curit<69> <20> l'encodage (clef de contr<74>le).<br>"; print "ainsi que par son degr<67> de s<>curit<69> <20> l'encodage (clef de contr<74>le).<br>";
print "Il met a disposition les 10 chiffres, les 26 lettres de l'alphabet et sept symboles.<br>"; print "Il met a disposition les 10 chiffres, les 26 lettres de l'alphabet et sept symboles.<br>";
print "l'ast<73>risque (*) sert de caract<63>re de bornage. La lecture est bidirectionnelle.<br>"; print "l'ast<73>risque (*) sert de caract<63>re de bornage. La lecture est bidirectionnelle.<br>";
print "La longueur est variable mais en g<>n<EFBFBD>ral ne d<>passe pas 32 caract<63>res."; print "La longueur est variable mais en g<>n<EFBFBD>ral ne d<>passe pas 32 caract<63>res.";
print '</td>'; print '</td>';
// Affiche exemple // Affiche exemple
print '<td align="center"><img src="'.dol_genbarcode('1234567890','39',1).'"></td>'; print '<td align="center"><img src="'.dol_genbarcode('1234567890','39',1).'"></td>';
print '<td align="center">'; print '<td align="center">';
print $formbarcode->setBarcodeEncoder('C39','form'.$i); print $formbarcode->setBarcodeEncoder('C39','form'.$i);
print "</td></tr>\n"; print "</td></tr>\n";
$i++; $i++;
//code 128 //code 128
$var=!$var; $var=!$var;
print '<tr '.$bc[$var].'><td width="100">'; print '<tr '.$bc[$var].'><td width="100">';
print "Code 128"; print "Code 128";
print "</td><td>\n"; print "</td><td>\n";
print "Ce code \"derni<EFBFBD>re g<>n<EFBFBD>ration\" alpha num<75>rique est susceptible d'encoder les 128 caract<63>res de la table ASCII ( chiffres + lettres + symboles ).<br>"; print "Ce code \"derni<EFBFBD>re g<>n<EFBFBD>ration\" alpha num<75>rique est susceptible d'encoder les 128 caract<63>res de la table ASCII ( chiffres + lettres + symboles ).<br>";
print "Le code 128 poss<73>de des algorithmes de cryptage s<>curis<69>s assez avanc<6E>s.<br>"; print "Le code 128 poss<73>de des algorithmes de cryptage s<>curis<69>s assez avanc<6E>s.<br>";
print "C'est le plus complet des codes <20> barres, il propose 3 jeux de 128 caract<63>res.<br>"; print "C'est le plus complet des codes <20> barres, il propose 3 jeux de 128 caract<63>res.<br>";
print "La lecture est bidirectionnelle.<br>"; print "La lecture est bidirectionnelle.<br>";
print "La longueur est variable mais en g<>n<EFBFBD>ral ne d<>passe pas 20 caract<63>res."; print "La longueur est variable mais en g<>n<EFBFBD>ral ne d<>passe pas 20 caract<63>res.";
print '</td>'; print '</td>';
// Affiche exemple // Affiche exemple
print '<td align="center"><img src="'.dol_genbarcode('ABCD1234567890','128',1).'"></td>'; print '<td align="center"><img src="'.dol_genbarcode('ABCD1234567890','128',1).'"></td>';
print '<td align="center">'; print '<td align="center">';
print $formbarcode->setBarcodeEncoder('C128','form'.$i); print $formbarcode->setBarcodeEncoder('C128','form'.$i);
print "</td></tr>\n"; print "</td></tr>\n";
$i++; $i++;
//I25 //I25
$var=!$var; $var=!$var;
print '<tr '.$bc[$var].'><td width="100">'; print '<tr '.$bc[$var].'><td width="100">';
print "I25"; print "I25";
print "</td><td>\n"; print "</td><td>\n";
print "information"; print "information";
print '</td>'; print '</td>';
// Affiche exemple // Affiche exemple
print '<td align="center"><img src="'.dol_genbarcode('1234567890','I25',1).'"></td>'; print '<td align="center"><img src="'.dol_genbarcode('1234567890','I25',1).'"></td>';
print '<td align="center">'; print '<td align="center">';
print $formbarcode->setBarcodeEncoder('I25','form'.$i); print $formbarcode->setBarcodeEncoder('I25','form'.$i);
print "</td></tr>\n"; print "</td></tr>\n";
$i++; $i++;
*/ */
print "<br>"; print "<br>";

View File

@ -21,11 +21,11 @@
*/ */
/** /**
\file htdocs/admin/produit.php \file htdocs/admin/produit.php
\ingroup produit \ingroup produit
\brief Page d'administration/configuration du module Produit \brief Page d'administration/configuration du module Produit
\version $Id$ \version $Id$
*/ */
require("./pre.inc.php"); require("./pre.inc.php");
require_once(DOL_DOCUMENT_ROOT."/lib/admin.lib.php"); require_once(DOL_DOCUMENT_ROOT."/lib/admin.lib.php");
@ -36,87 +36,87 @@ $langs->load("propal");
$langs->load("products"); $langs->load("products");
if (!$user->admin) if (!$user->admin)
accessforbidden(); accessforbidden();
if ($_POST["action"] == 'nbprod') if ($_POST["action"] == 'nbprod')
{ {
dolibarr_set_const($db, "PRODUIT_LIMIT_SIZE", $_POST["value"]); dolibarr_set_const($db, "PRODUIT_LIMIT_SIZE", $_POST["value"]);
} }
else if ($_POST["action"] == 'multiprix_num') else if ($_POST["action"] == 'multiprix_num')
{ {
dolibarr_set_const($db, "PRODUIT_MULTIPRICES_LIMIT", $_POST["value"]); dolibarr_set_const($db, "PRODUIT_MULTIPRICES_LIMIT", $_POST["value"]);
} }
if ($_POST["action"] == 'multiprix') if ($_POST["action"] == 'multiprix')
{ {
$res=$db->DDLDescTable(MAIN_DB_PREFIX."societe","price_level"); $res=$db->DDLDescTable(MAIN_DB_PREFIX."societe","price_level");
if(! $db->fetch_row($res)) if(! $db->fetch_row($res))
{ {
$field_desc = array('type'=>'TINYINT','value'=>'4','default'=>'1'); $field_desc = array('type'=>'TINYINT','value'=>'4','default'=>'1');
if ($_POST["activate_multiprix"]) if ($_POST["activate_multiprix"])
{ {
// on ajoute le champ price_level dans la table societe // on ajoute le champ price_level dans la table societe
if ($db->DDLAddField(MAIN_DB_PREFIX."societe","price_level",$field_desc) < 0) if ($db->DDLAddField(MAIN_DB_PREFIX."societe","price_level",$field_desc) < 0)
{ {
dolibarr_print_error($db); dolibarr_print_error($db);
exit; exit;
} }
} }
dolibarr_set_const($db, "PRODUIT_MULTIPRICES", $_POST["activate_multiprix"]); dolibarr_set_const($db, "PRODUIT_MULTIPRICES", $_POST["activate_multiprix"]);
dolibarr_set_const($db, "PRODUIT_MULTIPRICES_LIMIT", "6"); dolibarr_set_const($db, "PRODUIT_MULTIPRICES_LIMIT", "6");
} }
else else
{ {
dolibarr_syslog("Table definition for ".MAIN_DB_PREFIX."societe already ok"); dolibarr_syslog("Table definition for ".MAIN_DB_PREFIX."societe already ok");
dolibarr_set_const($db, "PRODUIT_MULTIPRICES", $_POST["activate_multiprix"]); dolibarr_set_const($db, "PRODUIT_MULTIPRICES", $_POST["activate_multiprix"]);
dolibarr_set_const($db, "PRODUIT_MULTIPRICES_LIMIT", "6"); dolibarr_set_const($db, "PRODUIT_MULTIPRICES_LIMIT", "6");
} }
} }
else if ($_POST["action"] == 'sousproduits') else if ($_POST["action"] == 'sousproduits')
{ {
$res=$db->DDLDescTable(MAIN_DB_PREFIX."product_association"); $res=$db->DDLDescTable(MAIN_DB_PREFIX."product_association");
if(! $db->fetch_row($res)) if(! $db->fetch_row($res))
{
$table = MAIN_DB_PREFIX."product_association";
$fields['fk_product_pere'] = array('type'=>'int','value'=>'11','null'=> 'not null','default'=> '0');
$fields['fk_product_fils'] = array('type'=>'int','value'=>'11','null'=> 'not null','default'=> '0');
$fields['qty'] = array('type'=>'double','default'=> 'null');
$keys['idx_product_association_fk_product_pere'] = "fk_product_pere" ;
$keys['idx_product_association_fk_product_fils'] = "fk_product_fils" ;
if ($db->DDLCreateTable($table,$fields,"","InnoDB","","",$keys) < 0)
{ {
$table = MAIN_DB_PREFIX."product_association";
$fields['fk_product_pere'] = array('type'=>'int','value'=>'11','null'=> 'not null','default'=> '0');
$fields['fk_product_fils'] = array('type'=>'int','value'=>'11','null'=> 'not null','default'=> '0');
$fields['qty'] = array('type'=>'double','default'=> 'null');
$keys['idx_product_association_fk_product_pere'] = "fk_product_pere" ;
$keys['idx_product_association_fk_product_fils'] = "fk_product_fils" ;
if ($db->DDLCreateTable($table,$fields,"","InnoDB","","",$keys) < 0)
{
dolibarr_print_error($db); dolibarr_print_error($db);
exit; exit;
} }
else else
{ {
dolibarr_set_const($db, "PRODUIT_SOUSPRODUITS", $_POST["activate_sousproduits"]); dolibarr_set_const($db, "PRODUIT_SOUSPRODUITS", $_POST["activate_sousproduits"]);
}
}
else
{
dolibarr_syslog("Table definition already ok");
dolibarr_set_const($db, "PRODUIT_SOUSPRODUITS", $_POST["activate_sousproduits"]);
} }
}
else
{
dolibarr_syslog("Table definition already ok");
dolibarr_set_const($db, "PRODUIT_SOUSPRODUITS", $_POST["activate_sousproduits"]);
}
} }
else if ($_POST["action"] == 'viewProdDescInForm') else if ($_POST["action"] == 'viewProdDescInForm')
{ {
dolibarr_set_const($db, "PRODUIT_DESC_IN_FORM", $_POST["activate_viewProdDescInForm"]); dolibarr_set_const($db, "PRODUIT_DESC_IN_FORM", $_POST["activate_viewProdDescInForm"]);
} }
else if ($_POST["action"] == 'confirmDeleteProdLineInForm') else if ($_POST["action"] == 'confirmDeleteProdLineInForm')
{ {
dolibarr_set_const($db, "PRODUIT_CONFIRM_DELETE_LINE", $_POST["activate_confirmDeleteProdLineInForm"]); dolibarr_set_const($db, "PRODUIT_CONFIRM_DELETE_LINE", $_POST["activate_confirmDeleteProdLineInForm"]);
} }
else if ($_POST["action"] == 'ProductCanvasAbility') else if ($_POST["action"] == 'ProductCanvasAbility')
{ {
dolibarr_set_const($db, "PRODUCT_CANVAS_ABILITY", $_POST["ProductCanvasAbility"]); dolibarr_set_const($db, "PRODUCT_CANVAS_ABILITY", $_POST["ProductCanvasAbility"]);
// Create temp directory for smarty // Create temp directory for smarty
if (! empty($dolibarr_smarty_compile)) create_exdir($dolibarr_smarty_compile); if (! empty($dolibarr_smarty_compile)) create_exdir($dolibarr_smarty_compile);
if (! empty($dolibarr_smarty_cache)) create_exdir($dolibarr_smarty_cache); if (! empty($dolibarr_smarty_cache)) create_exdir($dolibarr_smarty_cache);
} }
else if ($_POST["action"] == 'usesearchtoselectproduct') else if ($_POST["action"] == 'usesearchtoselectproduct')
{ {
dolibarr_set_const($db, "PRODUIT_USE_SEARCH_TO_SELECT", $_POST["activate_usesearchtoselectproduct"]); dolibarr_set_const($db, "PRODUIT_USE_SEARCH_TO_SELECT", $_POST["activate_usesearchtoselectproduct"]);
} }
else if ($_GET["action"] == 'set') else if ($_GET["action"] == 'set')
{ {
@ -126,11 +126,7 @@ else if ($_GET["action"] == 'set')
} }
else if ($_POST["action"] == 'useecotaxe') else if ($_POST["action"] == 'useecotaxe')
{ {
dolibarr_set_const($db, "PRODUIT_USE_ECOTAXE", $_POST["activate_useecotaxe"]); dolibarr_set_const($db, "PRODUIT_USE_ECOTAXE", $_POST["activate_useecotaxe"]);
}
else if ($_POST["action"] == 'setdefaultbarcodetype')
{
dolibarr_set_const($db, "PRODUIT_DEFAULT_BARCODE_TYPE", $_POST["coder_id"]);
} }
@ -186,15 +182,15 @@ print '</form>';
// multiprix nombre de prix a proposer // multiprix nombre de prix a proposer
if($conf->global->PRODUIT_MULTIPRICES == 1) if($conf->global->PRODUIT_MULTIPRICES == 1)
{ {
$var=!$var; $var=!$var;
print "<form method=\"post\" action=\"produit.php\">"; print "<form method=\"post\" action=\"produit.php\">";
print "<input type=\"hidden\" name=\"action\" value=\"multiprix_num\">"; print "<input type=\"hidden\" name=\"action\" value=\"multiprix_num\">";
print "<tr ".$bc[$var].">"; print "<tr ".$bc[$var].">";
print '<td>'.$langs->trans("MultiPricesNumPrices").'</td>'; print '<td>'.$langs->trans("MultiPricesNumPrices").'</td>';
print "<td align=\"right\"><input size=\"3\" type=\"text\" class=\"flat\" name=\"value\" value=\"".$conf->global->PRODUIT_MULTIPRICES_LIMIT."\"></td>"; print "<td align=\"right\"><input size=\"3\" type=\"text\" class=\"flat\" name=\"value\" value=\"".$conf->global->PRODUIT_MULTIPRICES_LIMIT."\"></td>";
print '<td align="right"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td>'; print '<td align="right"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td>';
print '</tr>'; print '</tr>';
print '</form>'; print '</form>';
} }
// sousproduits activation/desactivation // sousproduits activation/desactivation
@ -219,17 +215,17 @@ print "<tr ".$bc[$var].">";
print '<td>'.$langs->trans("UseSearchToSelectProduct").'</td>'; print '<td>'.$langs->trans("UseSearchToSelectProduct").'</td>';
if (! $conf->use_javascript_ajax) if (! $conf->use_javascript_ajax)
{ {
print '<td nowrap="nowrap" align="right" colspan="2">'; print '<td nowrap="nowrap" align="right" colspan="2">';
print $langs->trans("NotAvailableWhenAjaxDisabled"); print $langs->trans("NotAvailableWhenAjaxDisabled");
print "</td>"; print "</td>";
} }
else else
{ {
print '<td width="60" align="right">'; print '<td width="60" align="right">';
print $html->selectyesno("activate_usesearchtoselectproduct",$conf->global->PRODUIT_USE_SEARCH_TO_SELECT,1); print $html->selectyesno("activate_usesearchtoselectproduct",$conf->global->PRODUIT_USE_SEARCH_TO_SELECT,1);
print '</td><td align="right">'; print '</td><td align="right">';
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">'; print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print "</td>"; print "</td>";
} }
print '</tr>'; print '</tr>';
print '</form>'; print '</form>';
@ -276,22 +272,6 @@ print "</td>";
print '</tr>'; print '</tr>';
print '</form>'; print '</form>';
// Barcode
if ($conf->global->MAIN_MODULE_BARCODE)
{
$var=!$var;
print "<form method=\"post\" action=\"produit.php\">";
print "<input type=\"hidden\" name=\"action\" value=\"setdefaultbarcodetype\">";
print "<tr ".$bc[$var].">";
print '<td>'.$langs->trans("SetDefaultBarcodeType").'</td>';
print '<td width="60" align="right">';
print $formbarcode->select_barcode_type($conf->global->PRODUIT_DEFAULT_BARCODE_TYPE,"coder_id",1);
print '</td><td align="right">';
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print "</td>";
print '</tr>';
print '</form>';
}
// Only rodolphe and auguria menu manage canvas menu (auguria not correctly yet) // Only rodolphe and auguria menu manage canvas menu (auguria not correctly yet)
if (eregi('^rodolphe',$conf->left_menu) || eregi('^auguria',$conf->left_menu)) if (eregi('^rodolphe',$conf->left_menu) || eregi('^auguria',$conf->left_menu))

View File

@ -0,0 +1,365 @@
<?php
/* Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004 Éric Seigne <eric.seigne@ryxeo.com>
* Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Id$
*/
/**
\file htdocs/compta/facture/retardspaiement.php
\ingroup facture
\brief Page de liste des factures clients impayées
\version $Revision$
*/
require("./pre.inc.php");
require_once(DOL_DOCUMENT_ROOT."/html.formfile.class.php");
require_once(DOL_DOCUMENT_ROOT."/facture.class.php");
require_once(DOL_DOCUMENT_ROOT."/paiement.class.php");
require_once(DOL_DOCUMENT_ROOT."/lib/files.lib.php");
require_once(DOL_DOCUMENT_ROOT."/includes/fpdf/fpdfi/fpdi.php");
$langs->load("bills");
// Security check
$facid = isset($_GET["facid"])?$_GET["facid"]:'';
if ($user->societe_id) $socid=$user->societe_id;
$result = restrictedArea($user, 'facture',$facid,'');
llxHeader('',$langs->trans("BillsLate"));
$html = new Form($db);
$formfile = new FormFile($db);
?><script type="text/javascript">
<!--
function checkall(checked){
var checkboxes = [];
checkboxes = $$('input').each(function(e){ if(e.type == 'checkbox') checkboxes.push(e) });
checkboxes.each(function(e){ e.checked = checked });
}
-->
</script>
<?php
/***************************************************************************
* *
* Mode Liste *
* *
***************************************************************************/
$page = $_GET["page"];
$sortfield=$_GET["sortfield"];
$sortorder=$_GET["sortorder"];
if (! $sortfield) $sortfield="f.date_lim_reglement";
if (! $sortorder) $sortorder="ASC";
if ($user->rights->facture->lire)
{
if ($_POST["action"] == "generate_pdf"){
if(is_array($_POST['toGenerate']))
{
$factures = dol_dir_list($conf->facture->dir_output,'all',1,implode('\.pdf|',$_POST['toGenerate']).'\.pdf','\.meta$|\.png','date',SORT_DESC) ;
// liste les fichiers
$files = array() ;
$factures_bak = $factures ;
foreach($_POST['toGenerate'] as $basename){
foreach($factures as $facture){
if(strstr($facture["name"],$basename)){
$files[] = DOL_DATA_ROOT . '/facture/' . $basename . '/' . $facture["name"] ;
}
}
}
// génère le PDF à partir de tous les autres fichiers
$pdf=new FPDI();
foreach($files as $file){
// Charge un document PDF depuis un fichier.
$pagecount = $pdf->setSourceFile($file);
for ($i = 1; $i <= $pagecount; $i++) {
$tplidx = $pdf->ImportPage($i);
$s = $pdf->getTemplatesize($tplidx);
$pdf->AddPage($s['h'] > $s['w'] ? 'P' : 'L');
$pdf->useTemplate($tplidx);
}
}
// vérifie que le chemin d'accès est bien accessible
if(!is_dir(DOL_DATA_ROOT . '/facture/impayes')) mkdir(DOL_DATA_ROOT . '/facture/impayes') ;
// enregistre le fichier pdf concaténé
$pdf->Output( DOL_DATA_ROOT . '/facture/impayes/impayes '.dolibarr_date('Y-m-d H:i:s',time()).'.pdf');
} else {
print '<div class="error">'.$langs->trans('UnpayedNotChecked').'</div>' ;
}
}
$limit = $conf->liste_limit;
$offset = $limit * $page ;
$sql = "SELECT s.nom, s.rowid as socid";
$sql.= ", f.facnumber,f.increment,f.total as total_ht,f.total_ttc";
$sql.= ", ".$db->pdate("f.datef")." as df, ".$db->pdate("f.date_lim_reglement")." as datelimite";
$sql.= ", f.paye as paye, f.rowid as facid, f.fk_statut";
$sql.= ", sum(pf.amount) as am";
if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", sc.fk_soc, sc.fk_user ";
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql.= ",".MAIN_DB_PREFIX."facture as f";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid=pf.fk_facture ";
$sql.= " WHERE f.fk_soc = s.rowid";
$sql.= " AND f.paye = 0 AND f.fk_statut = 1 AND f.date_lim_reglement < NOW()";
if (! $user->rights->societe->client->voir && ! $socid) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
if ($socid) $sql .= " AND s.rowid = ".$socid;
if ($_GET["filtre"])
{
$filtrearr = split(",", $_GET["filtre"]);
foreach ($filtrearr as $fil)
{
$filt = split(":", $fil);
$sql .= " AND " . $filt[0] . " = " . $filt[1];
}
}
if ($_GET["search_ref"])
{
$sql .= " AND f.facnumber like '%".$_GET["search_ref"]."%'";
}
if ($_GET["search_societe"])
{
$sql .= " AND s.nom like '%".$_GET["search_societe"]."%'";
}
if ($_GET["search_montant_ht"])
{
$sql .= " AND f.total = '".$_GET["search_montant_ht"]."'";
}
if ($_GET["search_montant_ttc"])
{
$sql .= " AND f.total_ttc = '".$_GET["search_montant_ttc"]."'";
}
if (strlen($_POST["sf_ref"]) > 0)
{
$sql .= " AND f.facnumber like '%".$_POST["sf_ref"] . "%'";
}
$sql.= " GROUP BY f.facnumber";
$sql.= " ORDER BY ";
$listfield=split(',',$sortfield);
foreach ($listfield as $key => $value) $sql.=$listfield[$key]." ".$sortorder.",";
$sql.= " f.facnumber DESC";
//$sql .= $db->plimit($limit+1,$offset);
$result = $db->query($sql);
if ($result)
{
$num = $db->num_rows($result);
if ($socid)
{
$soc = new Societe($db);
$soc->fetch($socid);
}
$titre=($socid?$langs->trans("BillsCustomersUnpayedForCompany",$soc->nom):$langs->trans("BillsLate"));
print_barre_liste($titre,$page,"retardspaiement.php","&amp;socid=$socid",$sortfield,$sortorder,'',0); // We don't want pagination on this page
$i = 0;
print '<table class="liste" width="100%">';
print '<tr class="liste_titre">';
print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],"f.facnumber","","&amp;socid=$socid","",$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Generate"),$_SERVER["PHP_SELF"],"");
print_liste_field_titre($langs->trans("Date"),$_SERVER["PHP_SELF"],"f.datef","","&amp;socid=$socid",'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("DateDue"),$_SERVER["PHP_SELF"],"f.date_lim_reglement","","&amp;socid=$socid",'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","","&amp;socid=$socid","",$sortfield,$sortorder);
print_liste_field_titre($langs->trans("AmountHT"),$_SERVER["PHP_SELF"],"f.total","","&amp;socid=$socid",'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("AmountTTC"),$_SERVER["PHP_SELF"],"f.total_ttc","","&amp;socid=$socid",'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Received"),$_SERVER["PHP_SELF"],"am","","&amp;socid=$socid",'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"fk_statut,paye,am","","&amp;socid=$socid",'align="right"',$sortfield,$sortorder);
print "</tr>\n";
// Lignes des champs de filtre
print '<form method="get" action="retardspaiement.php">';
print '<tr class="liste_titre">';
print '<td class="liste_titre" valign="right">';
print '<input class="flat" size="10" type="text" name="search_ref" value="'.$_GET["search_ref"].'"></td>';
print '<td class="liste_titre" align="center"><input type="checkbox" onclick="checkall(this.checked);"></td>';
print '<td class="liste_titre">&nbsp;</td>';
print '<td class="liste_titre">&nbsp;</td>';
print '<td class="liste_titre" align="left">';
print '<input class="flat" type="text" name="search_societe" value="'.$_GET["search_societe"].'">';
print '</td><td class="liste_titre" align="right">';
print '<input class="flat" type="text" size="10" name="search_montant_ht" value="'.$_GET["search_montant_ht"].'">';
print '</td><td class="liste_titre" align="right">';
print '<input class="flat" type="text" size="10" name="search_montant_ttc" value="'.$_GET["search_montant_ttc"].'">';
print '</td><td class="liste_titre" colspan="2" align="right">';
print '<input type="image" class="liste_titre" name="button_search" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/search.png" alt="'.$langs->trans("Search").'">';
print '</td>';
print "</tr>\n";
print '</form>';
$facturestatic=new Facture($db);
if ($num > 0)
{
$var=True;
$total_ht=0;
$total_ttc=0;
$total_payed=0;
print '<form id="form_generate_pdf" method="post" action="retardspaiement.php?sortfield='. $_GET['sortfield'] .'&sortorder='. $_GET['sortorder'] .'">';
print '<input type="hidden" name="action" value="generate_pdf">';
while ($i < $num)
{
$objp = $db->fetch_object($result);
$var=!$var;
print "<tr $bc[$var]>";
$class = "impayee";
print '<td nowrap="nowrap">';
$facturestatic->id=$objp->facid;
$facturestatic->ref=$objp->facnumber;
$facturestatic->type=$objp->type;
print '<table class="nobordernopadding"><tr class="nocellnopadd">';
print '<td width="90" class="nobordernopadding" nowrap="nowrap">';
print $facturestatic->getNomUrl(1);
print '</td>';
print '<td width="20" class="nobordernopadding" nowrap="nowrap">';
if ($objp->datelimite < (time() - $conf->facture->client->warning_delay) && ! $objp->paye && $objp->fk_statut == 1) print img_warning($langs->trans("Late"));
print '</td>';
print '<td width="16" align="right" class="nobordernopadding">';
$filename=sanitize_string($objp->facnumber);
$filedir=$conf->facture->dir_output . '/' . sanitize_string($objp->facnumber);
$urlsource=$_SERVER['PHP_SELF'].'?facid='.$objp->facid;
$formfile->show_documents('facture',$filename,$filedir,$urlsource,'','','','','',1);
print '</td></tr></table>';
print '<td align="center"><input id="cb'.$objp->facid.'" type="checkbox" name="toGenerate[]" value="'.$objp->facnumber.'"></td>' ;
print "</td>\n";
print "<td nowrap align=\"center\">".dolibarr_print_date($objp->df)."</td>\n";
print "<td nowrap align=\"center\">".dolibarr_print_date($objp->datelimite)."</td>\n";
print '<td><a href="'.DOL_URL_ROOT.'/compta/fiche.php?socid='.$objp->socid.'">'.img_object($langs->trans("ShowCompany"),"company").' '.dolibarr_trunc($objp->nom,32).'</a></td>';
print "<td align=\"right\">".price($objp->total_ht)."</td>";
print "<td align=\"right\">".price($objp->total_ttc)."</td>";
print "<td align=\"right\">".price($objp->am)."</td>";
// Affiche statut de la facture
print '<td align="right" nowrap="nowrap">';
print $facturestatic->LibStatut($objp->paye,$objp->fk_statut,5,$objp->am);
print '</td>';
print "</tr>\n";
$total_ht+=$objp->total_ht;
$total_ttc+=$objp->total_ttc;
$total_payed+=$objp->am;
$i++;
}
print '<tr class="liste_total">';
print "<td colspan=\"4\" align=\"left\">".$langs->trans("Total").": </td>";
print "<td align=\"right\"><b>".price($total_ht)."</b></td>";
print "<td align=\"right\"><b>".price($total_ttc)."</b></td>";
print "<td align=\"right\"><b>".price($total_payed)."</b></td>";
print '<td align="center">&nbsp;</td>';
print "</tr>\n";
}
print "</table>";
/*
* Gestion des documents générés
*/
$filedir=$conf->facture->dir_output . '/impayes';
$urlsource=$_SERVER['PHP_SELF'].'?facid='.$fac->id;
$genallowed=$user->rights->facture->creer;
$delallowed=$user->rights->facture->supprimer;
//class="pair" ou "impair" pour les tr
$var = false ; $bc = array("pair","impair") ;
// liste des fichier
$file_list=dol_dir_list($filedir,'files',0,'impayes.*','\.meta$','date',SORT_DESC);;
print '<br>' ;
print_titre($langs->trans("Documents"));
print '<table class="border" width="60%">';
print '<tr class="liste_titre">' ;
print '<td align="center">'.$langs->trans("File").'</td><td align="center" width="20%">'.$langs->trans("Size").'</td><td align="center" width="20%">'.$langs->trans("Date").'</td><td align="center" width="20%"><input type="submit" value="'.$langs->trans("Generate").'"></td>' ;
print '</tr>' ;
// Pour chaque fichier on affiche une ligne
foreach($file_list as $file){
$filepath = $filedir."/".$file["name"] ;
$var = !$var ;
print '<tr class="'.$bc[$var].'">' ;
// Nom du fichier
print '<td><a href="'.DOL_URL_ROOT . '/document.php?modulepart=impayes&amp;file='.urlencode($filepath).'">'.img_pdf($file["name"],2)."&nbsp;".$file["name"].'</td>' ;
// Taille
print '<td align="center" width="20%">'.filesize($filepath). ' bytes</td>' ;
// Date
print '<td align="center" width="20%">'.dolibarr_print_date(filemtime($filepath),'dayhour').'</td>' ;
// Suppression
print '<td align="center" width="20%"><a href="'.DOL_URL_ROOT.'/document.php?action=remove_file&amp;modulepart=impayes&amp;file='.urlencode($filepath).'&amp;urlsource='.urlencode($urlsource).'">'.img_delete().'</a></td>' ;
print '</tr>' ;
}
print '</table>';
print '</form>';
$db->free();
}
else
{
dolibarr_print_error($db);
}
}
$db->close();
llxFooter('$Date$ - $Revision$');
?>

View File

@ -109,6 +109,16 @@ if ($modulepart)
$sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."facture WHERE ref='$refname'"; $sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."facture WHERE ref='$refname'";
} }
if ($modulepart == 'impayes')
{
$user->getrights('facture');
if ($user->rights->facture->lire || eregi('^specimen',$original_file))
{
$accessallowed=1;
}
$original_file=$original_file;
}
// Wrapping pour les fiches intervention // Wrapping pour les fiches intervention
if ($modulepart == 'ficheinter') if ($modulepart == 'ficheinter')
{ {

View File

@ -22,11 +22,11 @@
*/ */
/** /**
\file htdocs/fourn/product/fiche.php \file htdocs/fourn/product/fiche.php
\ingroup product \ingroup product
\brief Page de la fiche produit \brief Page de la fiche produit
\version $Revision$ \version $Revision$
*/ */
require("./pre.inc.php"); require("./pre.inc.php");
require_once(DOL_DOCUMENT_ROOT."/product.class.php"); require_once(DOL_DOCUMENT_ROOT."/product.class.php");
@ -55,142 +55,142 @@ if ($_GET["action"] == 'fastappro')
// Action ajout d'un produit ou service // Action ajout d'un produit ou service
if ($_POST["action"] == 'add' && $user->rights->produit->creer) if ($_POST["action"] == 'add' && $user->rights->produit->creer)
{ {
$product = new Product($db); $product = new Product($db);
$product->ref = $_POST["ref"]; $product->ref = $_POST["ref"];
$product->libelle = $_POST["libelle"]; $product->libelle = $_POST["libelle"];
$product->price = $_POST["price"]; $product->price = $_POST["price"];
$product->catid = $_POST["catid"]; $product->catid = $_POST["catid"];
$product->tva_tx = $_POST["tva_tx"]; $product->tva_tx = $_POST["tva_tx"];
$product->type = $_POST["type"]; $product->type = $_POST["type"];
$product->status = $_POST["statut"]; $product->status = $_POST["statut"];
$product->description = $_POST["desc"]; $product->description = $_POST["desc"];
$product->duration_value = $_POST["duration_value"]; $product->duration_value = $_POST["duration_value"];
$product->duration_unit = $_POST["duration_unit"]; $product->duration_unit = $_POST["duration_unit"];
$product->seuil_stock_alerte = $_POST["seuil_stock_alerte"]; $product->seuil_stock_alerte = $_POST["seuil_stock_alerte"];
$e_product = $product; $e_product = $product;
$id = $product->create($user); $id = $product->create($user);
if ($id > 0) if ($id > 0)
{ {
Header("Location: fiche.php?id=$id"); Header("Location: fiche.php?id=$id");
} }
else else
{ {
if ($id == -3) if ($id == -3)
{ {
$mesg='<div class="error">'.$product->error.'</div>'; $mesg='<div class="error">'.$product->error.'</div>';
$_error = 1; $_error = 1;
$_GET["action"] = "create"; $_GET["action"] = "create";
$_GET["type"] = $_POST["type"]; $_GET["type"] = $_POST["type"];
} }
} }
} }
// Action mise a jour d'un produit ou service // Action mise a jour d'un produit ou service
if ($_POST["action"] == 'update' && if ($_POST["action"] == 'update' &&
$_POST["cancel"] <> $langs->trans("Cancel") && $_POST["cancel"] <> $langs->trans("Cancel") &&
$user->rights->produit->creer) $user->rights->produit->creer)
{ {
$product = new Product($db); $product = new Product($db);
if ($product->fetch($_POST["id"])) if ($product->fetch($_POST["id"]))
{
$product->ref = $_POST["ref"];
$product->libelle = $_POST["libelle"];
$product->price = $_POST["price"];
$product->description = $_POST["desc"];
$product->seuil_stock_alerte = $_POST["seuil_stock_alerte"];
$product->duration_value = $_POST["duration_value"];
$product->duration_unit = $_POST["duration_unit"];
if ($product->check())
{ {
$product->ref = $_POST["ref"];
$product->libelle = $_POST["libelle"];
$product->price = $_POST["price"];
$product->description = $_POST["desc"];
$product->seuil_stock_alerte = $_POST["seuil_stock_alerte"];
$product->duration_value = $_POST["duration_value"];
$product->duration_unit = $_POST["duration_unit"];
if ($product->check())
{
if ($product->update($product->id, $user) > 0) if ($product->update($product->id, $user) > 0)
{ {
$_GET["action"] = ''; $_GET["action"] = '';
$_GET["id"] = $_POST["id"]; $_GET["id"] = $_POST["id"];
Header("Location: fiche.php?id=".$_POST["id"]); Header("Location: fiche.php?id=".$_POST["id"]);
} }
else else
{ {
$_GET["action"] = 're-edit'; $_GET["action"] = 're-edit';
$_GET["id"] = $_POST["id"]; $_GET["id"] = $_POST["id"];
$mesg = $product->mesg_error; $mesg = $product->mesg_error;
} }
} }
else else
{ {
$_GET["action"] = 're-edit'; $_GET["action"] = 're-edit';
$_GET["id"] = $_POST["id"]; $_GET["id"] = $_POST["id"];
$mesg = $langs->trans("ErrorProductBadRefOrLabel"); $mesg = $langs->trans("ErrorProductBadRefOrLabel");
}
} }
}
} }
if ($_POST["action"] == 'add_fourn' && $_POST["cancel"] <> $langs->trans("Cancel")) if ($_POST["action"] == 'add_fourn' && $_POST["cancel"] <> $langs->trans("Cancel"))
{ {
$product = new Product($db); $product = new Product($db);
if( $product->fetch($_GET["id"]) ) if( $product->fetch($_GET["id"]) )
{
if ($product->add_fournisseur($user, $_POST["id_fourn"], $_POST["ref_fourn"]) > 0)
{ {
if ($product->add_fournisseur($user, $_POST["id_fourn"], $_POST["ref_fourn"]) > 0)
{
$action = ''; $action = '';
} }
else else
{ {
$action = ''; $action = '';
}
} }
}
} }
if ($_GET["action"] == 'remove_fourn') if ($_GET["action"] == 'remove_fourn')
{ {
$product = new ProductFournisseur($db); $product = new ProductFournisseur($db);
if( $product->fetch($_GET["id"]) ) if( $product->fetch($_GET["id"]) )
{
if ($product->remove_fournisseur($user, $_GET["id_fourn"]) > 0)
{ {
if ($product->remove_fournisseur($user, $_GET["id_fourn"]) > 0)
{
$_GET["action"] = ''; $_GET["action"] = '';
$mesg = $langs->trans("SupplierRemoved"); $mesg = $langs->trans("SupplierRemoved");
} }
else else
{ {
$_GET["action"] = ''; $_GET["action"] = '';
}
} }
}
} }
if ($_POST["action"] == 'update_price' && if ($_POST["action"] == 'update_price' &&
$_POST["cancel"] <> $langs->trans("Cancel") && $user->rights->produit->creer) $_POST["cancel"] <> $langs->trans("Cancel") && $user->rights->produit->creer)
{ {
$product = new Product($db); $product = new Product($db);
$result = $product->fetch($_GET["id"]); $result = $product->fetch($_GET["id"]);
$product->price = ereg_replace(" ","",$_POST["price"]); $product->price = ereg_replace(" ","",$_POST["price"]);
if ( $product->update_price($product->id, $user) > 0 ) if ( $product->update_price($product->id, $user) > 0 )
{ {
$_GET["action"] = ''; $_GET["action"] = '';
$mesg = 'Fiche mise à jour'; $mesg = 'Fiche mise à jour';
} }
else else
{ {
$_GET["action"] = 'edit_price'; $_GET["action"] = 'edit_price';
$mesg = 'Fiche non mise à jour !' . "<br>" . $product->mesg_error; $mesg = 'Fiche non mise à jour !' . "<br>" . $product->mesg_error;
} }
} }
if ($_POST["cancel"] == $langs->trans("Cancel")) if ($_POST["cancel"] == $langs->trans("Cancel"))
{ {
$action = ''; $action = '';
Header("Location: fiche.php?id=".$_POST["id"]); Header("Location: fiche.php?id=".$_POST["id"]);
} }
@ -203,360 +203,360 @@ llxHeader("","",$langs->trans("CardProduct0"));
*/ */
if ($_GET["action"] == 'create' && $user->rights->produit->creer) if ($_GET["action"] == 'create' && $user->rights->produit->creer)
{ {
$html = new Form($db); $html = new Form($db);
$nbligne=0; $nbligne=0;
$product = new Product($db); $product = new Product($db);
if ($_error == 1) if ($_error == 1)
{
$product = $e_product;
}
print '<form action="fiche.php" method="post">';
print '<input type="hidden" name="action" value="add">';
print '<input type="hidden" name="type" value="'.$_GET["type"].'">'."\n";
print '<input type="hidden" name="catid" value="'.$_REQUEST["catid"].'">'."\n";
if ($_GET["type"]!=1) { $title=$langs->trans("NewProduct"); }
if ($_GET["type"]==1) { $title=$langs->trans("NewService"); }
print_fiche_titre($title);
print '<table class="border" width="100%">';
if ($mesg) print $mesg;
if ($conf->categorie->enabled)
{
print '<tr><td>'.$langs->trans("Categorie");
print '</td><td>';
if (isset($_REQUEST["catid"]))
{ {
$product = $e_product;
}
print '<form action="fiche.php" method="post">';
print '<input type="hidden" name="action" value="add">';
print '<input type="hidden" name="type" value="'.$_GET["type"].'">'."\n";
print '<input type="hidden" name="catid" value="'.$_REQUEST["catid"].'">'."\n";
if ($_GET["type"]!=1) { $title=$langs->trans("NewProduct"); }
if ($_GET["type"]==1) { $title=$langs->trans("NewService"); }
print_fiche_titre($title);
print '<table class="border" width="100%">';
if ($mesg) print $mesg;
if ($conf->categorie->enabled)
{
print '<tr><td>'.$langs->trans("Categorie");
print '</td><td>';
if (isset($_REQUEST["catid"]))
{
$c = new Categorie ($db, $_REQUEST["catid"]); $c = new Categorie ($db, $_REQUEST["catid"]);
$ways = $c->print_all_ways(' &gt; ','fourn/product/liste.php'); $ways = $c->print_all_ways(' &gt; ','fourn/product/liste.php');
print $ways[0]."<br />\n"; print $ways[0]."<br />\n";
}
print '</td></tr>';
} }
print '</td></tr>';
}
print '<tr><td>'.$langs->trans("Ref").'</td><td><input name="ref" size="20" value="'.$product->ref.'">'; print '<tr><td>'.$langs->trans("Ref").'</td><td><input name="ref" size="20" value="'.$product->ref.'">';
if ($_error == 1) if ($_error == 1)
{ {
print $langs->trans("RefAlreadyExists"); print $langs->trans("RefAlreadyExists");
} }
print '</td></tr>'; print '</td></tr>';
print '<tr><td>'.$langs->trans("Label").'</td><td><input name="libelle" size="40" value="'.$product->libelle.'"></td></tr>'; print '<tr><td>'.$langs->trans("Label").'</td><td><input name="libelle" size="40" value="'.$product->libelle.'"></td></tr>';
if ($_GET["type"] != 1 && $conf->stock->enabled) if ($_GET["type"] != 1 && $conf->stock->enabled)
{ {
print "<tr>".'<td>Seuil stock</td><td colspan="2">'; print "<tr>".'<td>Seuil stock</td><td colspan="2">';
print '<input name="seuil_stock_alerte" size="4" value="0">'; print '<input name="seuil_stock_alerte" size="4" value="0">';
print '</td></tr>'; print '</td></tr>';
} }
else else
{ {
print '<input name="seuil_stock_alerte" type="hidden" value="0">'; print '<input name="seuil_stock_alerte" type="hidden" value="0">';
} }
print '<tr><td valign="top">'.$langs->trans("Description").'</td><td>'; print '<tr><td valign="top">'.$langs->trans("Description").'</td><td>';
print '<textarea name="desc" rows="8" cols="50">'; print '<textarea name="desc" rows="8" cols="50">';
print "</textarea></td></tr>"; print "</textarea></td></tr>";
if ($_GET["type"] == 1) if ($_GET["type"] == 1)
{ {
print '<tr><td>'.$langs->trans("Duration").'</td><td><input name="duration_value" size="6" maxlength="5" value="'.$product->duree.'"> &nbsp;'; print '<tr><td>'.$langs->trans("Duration").'</td><td><input name="duration_value" size="6" maxlength="5" value="'.$product->duree.'"> &nbsp;';
print '<input name="duration_unit" type="radio" value="d">'.$langs->trans("Day").'&nbsp;'; print '<input name="duration_unit" type="radio" value="d">'.$langs->trans("Day").'&nbsp;';
print '<input name="duration_unit" type="radio" value="w">'.$langs->trans("Week").'&nbsp;'; print '<input name="duration_unit" type="radio" value="w">'.$langs->trans("Week").'&nbsp;';
print '<input name="duration_unit" type="radio" value="m">'.$langs->trans("Month").'&nbsp;'; print '<input name="duration_unit" type="radio" value="m">'.$langs->trans("Month").'&nbsp;';
print '<input name="duration_unit" type="radio" value="y">'.$langs->trans("Year").'&nbsp;'; print '<input name="duration_unit" type="radio" value="y">'.$langs->trans("Year").'&nbsp;';
print '</td></tr>'; print '</td></tr>';
} }
print '<tr><td>&nbsp;</td><td><input type="submit" class="button" value="'.$langs->trans("Create").'"></td></tr>'; print '<tr><td>&nbsp;</td><td><input type="submit" class="button" value="'.$langs->trans("Create").'"></td></tr>';
print '</table>'; print '</table>';
print '</form>'; print '</form>';
} }
else else
{ {
/* /*
* Fiche produit * Fiche produit
*/ */
if ($_GET["id"]) if ($_GET["id"])
{ {
if ($_GET["action"] <> 're-edit') if ($_GET["action"] <> 're-edit')
{
$product = new Product($db);
$result = $product->fetch($_GET["id"]);
}
if ( $product->id > 0 )
{
if ($_GET["action"] <> 'edit' && $_GET["action"] <> 're-edit')
{
/*
* En mode visu
*/
$h=0;
$head[$h][0] = DOL_URL_ROOT."/fourn/product/fiche.php?id=".$product->id;
$head[$h][1] = $langs->trans("Card");
$hselected = $h;
$h++;
if($product->isproduct())
{
if ($conf->stock->enabled)
{
$head[$h][0] = DOL_URL_ROOT."/product/stock/product.php?id=".$product->id;
$head[$h][1] = $langs->trans("Stock");
$h++;
}
}
$head[$h][0] = DOL_URL_ROOT."/fourn/product/photos.php?id=".$product->id;
$head[$h][1] = $langs->trans("Photos");
$h++;
//Affichage onglet Catégories
if ($conf->categorie->enabled){
$head[$h][0] = DOL_URL_ROOT."/fourn/product/categorie.php?id=".$product->id;
$head[$h][1] = $langs->trans('Categories');
$h++;
}
$head[$h][0] = DOL_URL_ROOT."/product/fiche.php?id=".$product->id;
$head[$h][1] = $langs->trans("CommercialCard");
$h++;
dolibarr_fiche_head($head, $hselected, $langs->trans("CardProduct".$product->type).' : '.$product->ref);
if ($mesg) print($mesg);
print '<table class="border" width="100%">';
if ($conf->categorie->enabled)
{
print '<tr id="ways">';
print '<td colspan="3">';
$cat = new Categorie ($db);
$way = $cat->print_primary_way($product->id," &gt; ",'fourn/product/liste.php',"product");
if ($way == "")
{
print "Ce produit n'appartient à aucune catégorie";
}
else
{
print $langs->trans("Categorie")." : ";
print $way;
}
print '</td>';
print '</tr>';
}
print "<tr>";
print '<td width="20%">'.$langs->trans("Ref").'</td><td width="40%">'.$product->ref.'</td>';
print '<td width="40%">';
print $product->getLibStatut(2);
print '</td></tr>';
print '<tr><td>'.$langs->trans("Label").'</td><td colspan="2">'.$product->libelle.'</td></tr>';
print '<tr><td>'.$langs->trans("SellingPrice").'</td><td>'.price($product->price).'</td>';
$nblignefour=2;
if ($product->isproduct() && $conf->stock->enabled) $nblignefour++;
if ($product->isservice()) $nblignefour++;
print '<td valign="middle" align="center" rowspan="'.$nblignefour.'">';
$product->show_photos($conf->produit->dir_output,1,1,0);
print '</td></tr>';
// Description
print '<tr><td valign="top">'.$langs->trans("Description").'</td><td>'.nl2br($product->description).'</td></tr>';
// Stock
if ($product->isproduct() && $conf->stock->enabled)
{ {
print '<tr><td><a href="'.DOL_URL_ROOT.'/product/stock/product.php?id='.$product->id.'">'.$langs->trans("Stock").'</a></td>'; $product = new Product($db);
if ($product->no_stock) $result = $product->fetch($_GET["id"]);
{
print "<td>Pas de définition de stock pour ce produit";
}
else
{
if ($product->stock_reel <= $product->seuil_stock_alerte)
{
print '<td>'.img_warning().' '.$product->stock_reel.' Seuil : '.$product->seuil_stock_alerte;
}
else
{
print "<td>".$product->stock_reel;
}
}
print '</td></tr>';
} }
// Duration if ( $product->id > 0 )
if ($product->isservice())
{ {
print '<tr><td>'.$langs->trans("Duration").'</td><td>'.$product->duration_value.'&nbsp;'; if ($_GET["action"] <> 'edit' && $_GET["action"] <> 're-edit')
if ($product->duration_value > 1)
{
$dur=array("d"=>$langs->trans("Days"),"w"=>$langs->trans("Weeks"),"m"=>$langs->trans("Months"),"y"=>$langs->trans("Years"));
}
else
{
$dur=array("d"=>$langs->trans("Day"),"w"=>$langs->trans("Week"),"m"=>$langs->trans("Month"),"y"=>$langs->trans("Year"));
}
print $langs->trans($dur[$product->duration_unit])."&nbsp;";
print '</td></tr>';
}
print "</table><br>\n";
// Liste des fournisseurs
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre"><td>';
print $langs->trans("Suppliers").'</td>';
print '<td>'.$langs->trans("Ref").'</td>';
print '<td align="right">'.$langs->trans("BuiingPrice").'</td>';
print '<td align="center">'.$langs->trans("Quantity").'</td>';
print '</tr>';
$sql = "SELECT s.nom, s.rowid as socid, pf.ref_fourn, pfp.price, pfp.quantity";
$sql .= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."product_fournisseur as pf";
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON s.rowid = pfp.fk_soc";
$sql .= " AND pfp.fk_product =".$product->id;
$sql .= " WHERE pf.fk_soc = s.rowid AND pf.fk_product = ".$product->id;
$sql .= " ORDER BY pfp.price ASC, lower(s.nom)";
if ( $db->query($sql) )
{
$num_fournisseur = $db->num_rows($resql);
$i = 0;
$var=True;
while ($i < $num_fournisseur)
{
$objp = $db->fetch_object($resql);
$var=!$var;
print "<tr $bc[$var]>";
print '<td><a href="'.DOL_URL_ROOT.'/fourn/fiche.php?socid='.$objp->socid.'">'.$objp->nom.'</a></td>';
print '<td>';
print '<a href="fourn.php?id='.$product->id.'&amp;id_fourn='.$objp->socid.'">';
print img_edit($langs->trans("Modify"));
print '&nbsp;<a href="fourn.php?id='.$product->id.'&amp;id_fourn='.$objp->socid.'">';
print $objp->ref_fourn.'</a></td>';
print '<td align="right">';
print price($objp->price);
print '</td>';
print '<td align="center">'.$objp->quantity.'</td></tr>';
$i++;
}
$db->free();
}
print '</table>';
print "</div>\n";
/*
* Ajouter un fournisseur
*
*/
if ($_GET["action"] == 'ajout_fourn' && $user->rights->produit->creer)
{
$langs->load("suppliers");
print_titre($langs->trans("AddSupplier"));
print '<form action="fiche.php?id='.$product->id.'" method="post">';
print '<input type="hidden" name="action" value="add_fourn">';
print '<input type="hidden" name="id" value="'.$product->id.'">';
print '<table class="border" width="100%"><tr>';
print '<td>'.$langs->trans("Suppliers").'</td><td><select name="id_fourn">';
$sql = "SELECT s.rowid as socid, s.nom, s.ville";
$sql .= " FROM ".MAIN_DB_PREFIX."societe as s WHERE s.fournisseur=1";
$sql .= " ORDER BY lower(s.nom)";
$resql = $db->query($sql);
if ($resql)
{
$num = $db->num_rows($resql);
$i = 0;
while ($i < $num)
{ {
$obj = $db->fetch_object($resql); /*
print '<option value="'.$obj->socid.'">'.$obj->nom . ($obj->ville?" ($obj->ville)":""); * En mode visu
$i++; */
$h=0;
$head[$h][0] = DOL_URL_ROOT."/fourn/product/fiche.php?id=".$product->id;
$head[$h][1] = $langs->trans("Card");
$hselected = $h;
$h++;
if($product->isproduct())
{
if ($conf->stock->enabled)
{
$head[$h][0] = DOL_URL_ROOT."/product/stock/product.php?id=".$product->id;
$head[$h][1] = $langs->trans("Stock");
$h++;
}
}
$head[$h][0] = DOL_URL_ROOT."/fourn/product/photos.php?id=".$product->id;
$head[$h][1] = $langs->trans("Photos");
$h++;
//Affichage onglet Catégories
if ($conf->categorie->enabled){
$head[$h][0] = DOL_URL_ROOT."/fourn/product/categorie.php?id=".$product->id;
$head[$h][1] = $langs->trans('Categories');
$h++;
}
$head[$h][0] = DOL_URL_ROOT."/product/fiche.php?id=".$product->id;
$head[$h][1] = $langs->trans("CommercialCard");
$h++;
dolibarr_fiche_head($head, $hselected, $langs->trans("CardProduct".$product->type).' : '.$product->ref);
if ($mesg) print($mesg);
print '<table class="border" width="100%">';
if ($conf->categorie->enabled)
{
print '<tr id="ways">';
print '<td colspan="3">';
$cat = new Categorie ($db);
$way = $cat->print_primary_way($product->id," &gt; ",'fourn/product/liste.php',"product");
if ($way == "")
{
print "Ce produit n'appartient à aucune catégorie";
}
else
{
print $langs->trans("Categorie")." : ";
print $way;
}
print '</td>';
print '</tr>';
}
print "<tr>";
print '<td width="20%">'.$langs->trans("Ref").'</td><td width="40%">'.$product->ref.'</td>';
print '<td width="40%">';
print $product->getLibStatut(2);
print '</td></tr>';
print '<tr><td>'.$langs->trans("Label").'</td><td colspan="2">'.$product->libelle.'</td></tr>';
print '<tr><td>'.$langs->trans("SellingPrice").'</td><td>'.price($product->price).'</td>';
$nblignefour=2;
if ($product->isproduct() && $conf->stock->enabled) $nblignefour++;
if ($product->isservice()) $nblignefour++;
print '<td valign="middle" align="center" rowspan="'.$nblignefour.'">';
$product->show_photos($conf->produit->dir_output,1,1,0);
print '</td></tr>';
// Description
print '<tr><td valign="top">'.$langs->trans("Description").'</td><td>'.nl2br($product->description).'</td></tr>';
// Stock
if ($product->isproduct() && $conf->stock->enabled)
{
print '<tr><td><a href="'.DOL_URL_ROOT.'/product/stock/product.php?id='.$product->id.'">'.$langs->trans("Stock").'</a></td>';
if ($product->no_stock)
{
print "<td>Pas de définition de stock pour ce produit";
}
else
{
if ($product->stock_reel <= $product->seuil_stock_alerte)
{
print '<td>'.img_warning().' '.$product->stock_reel.' Seuil : '.$product->seuil_stock_alerte;
}
else
{
print "<td>".$product->stock_reel;
}
}
print '</td></tr>';
}
// Duration
if ($product->isservice())
{
print '<tr><td>'.$langs->trans("Duration").'</td><td>'.$product->duration_value.'&nbsp;';
if ($product->duration_value > 1)
{
$dur=array("d"=>$langs->trans("Days"),"w"=>$langs->trans("Weeks"),"m"=>$langs->trans("Months"),"y"=>$langs->trans("Years"));
}
else
{
$dur=array("d"=>$langs->trans("Day"),"w"=>$langs->trans("Week"),"m"=>$langs->trans("Month"),"y"=>$langs->trans("Year"));
}
print $langs->trans($dur[$product->duration_unit])."&nbsp;";
print '</td></tr>';
}
print "</table><br>\n";
// Liste des fournisseurs
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre"><td>';
print $langs->trans("Suppliers").'</td>';
print '<td>'.$langs->trans("Ref").'</td>';
print '<td align="right">'.$langs->trans("BuiingPrice").'</td>';
print '<td align="center">'.$langs->trans("Quantity").'</td>';
print '</tr>';
$sql = "SELECT s.nom, s.rowid as socid, pf.ref_fourn, pfp.price, pfp.quantity";
$sql .= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."product_fournisseur as pf";
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON s.rowid = pfp.fk_soc";
$sql .= " AND pfp.fk_product =".$product->id;
$sql .= " WHERE pf.fk_soc = s.rowid AND pf.fk_product = ".$product->id;
$sql .= " ORDER BY pfp.price ASC, lower(s.nom)";
if ( $db->query($sql) )
{
$num_fournisseur = $db->num_rows($resql);
$i = 0;
$var=True;
while ($i < $num_fournisseur)
{
$objp = $db->fetch_object($resql);
$var=!$var;
print "<tr $bc[$var]>";
print '<td><a href="'.DOL_URL_ROOT.'/fourn/fiche.php?socid='.$objp->socid.'">'.$objp->nom.'</a></td>';
print '<td>';
print '<a href="fourn.php?id='.$product->id.'&amp;id_fourn='.$objp->socid.'">';
print img_edit($langs->trans("Modify"));
print '&nbsp;<a href="fourn.php?id='.$product->id.'&amp;id_fourn='.$objp->socid.'">';
print $objp->ref_fourn.'</a></td>';
print '<td align="right">';
print price($objp->price);
print '</td>';
print '<td align="center">'.$objp->quantity.'</td></tr>';
$i++;
}
$db->free();
}
print '</table>';
print "</div>\n";
/*
* Ajouter un fournisseur
*
*/
if ($_GET["action"] == 'ajout_fourn' && $user->rights->produit->creer)
{
$langs->load("suppliers");
print_titre($langs->trans("AddSupplier"));
print '<form action="fiche.php?id='.$product->id.'" method="post">';
print '<input type="hidden" name="action" value="add_fourn">';
print '<input type="hidden" name="id" value="'.$product->id.'">';
print '<table class="border" width="100%"><tr>';
print '<td>'.$langs->trans("Suppliers").'</td><td><select name="id_fourn">';
$sql = "SELECT s.rowid as socid, s.nom, s.ville";
$sql .= " FROM ".MAIN_DB_PREFIX."societe as s WHERE s.fournisseur=1";
$sql .= " ORDER BY lower(s.nom)";
$resql = $db->query($sql);
if ($resql)
{
$num = $db->num_rows($resql);
$i = 0;
while ($i < $num)
{
$obj = $db->fetch_object($resql);
print '<option value="'.$obj->socid.'">'.$obj->nom . ($obj->ville?" ($obj->ville)":"");
$i++;
}
$db->free($resql);
}
print '</select></td></tr><tr><td>'.$langs->trans("SupplierRef").'</td>';
print '<td><input name="ref_fourn" size="25" value=""></td></tr>';
print '<tr><td colspan="2" align="center">';
print '<input type="submit" value="'.$langs->trans("Save").'">&nbsp;';
print '<input type="submit" name="cancel" value="'.$langs->trans("Cancel").'"></td></tr>';
print '</table>';
print '</form>';
}
} }
$db->free($resql);
}
print '</select></td></tr><tr><td>'.$langs->trans("SupplierRef").'</td>';
print '<td><input name="ref_fourn" size="25" value=""></td></tr>';
print '<tr><td colspan="2" align="center">';
print '<input type="submit" value="'.$langs->trans("Save").'">&nbsp;';
print '<input type="submit" name="cancel" value="'.$langs->trans("Cancel").'"></td></tr>';
print '</table>';
print '</form>';
}
}
/* /*
* Fiche en mode edition * Fiche en mode edition
*/ */
if (($_GET["action"] == 'edit' || $_GET["action"] == 're-edit') && $user->rights->produit->creer) if (($_GET["action"] == 'edit' || $_GET["action"] == 're-edit') && $user->rights->produit->creer)
{ {
if ($product->isservice()) { if ($product->isservice()) {
print_fiche_titre($langs->trans('Modify').' '.$langs->trans('Service').' : '.$product->ref, ""); print_fiche_titre($langs->trans('Modify').' '.$langs->trans('Service').' : '.$product->ref, "");
} else { } else {
print_fiche_titre($langs->trans('Modify').' '.$langs->trans('Product').' : '.$product->ref, ""); print_fiche_titre($langs->trans('Modify').' '.$langs->trans('Product').' : '.$product->ref, "");
} }
if ($mesg) { if ($mesg) {
print '<br><div class="error">'.$mesg.'</div><br>'; print '<br><div class="error">'.$mesg.'</div><br>';
} }
print "<form action=\"fiche.php\" method=\"post\">\n"; print "<form action=\"fiche.php\" method=\"post\">\n";
print '<input type="hidden" name="action" value="update">'; print '<input type="hidden" name="action" value="update">';
print '<input type="hidden" name="id" value="'.$product->id.'">'; print '<input type="hidden" name="id" value="'.$product->id.'">';
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
print "<tr>".'<td width="20%">'.$langs->trans("Ref").'</td><td colspan="2"><input name="ref" size="20" value="'.$product->ref.'"></td></tr>'; print "<tr>".'<td width="20%">'.$langs->trans("Ref").'</td><td colspan="2"><input name="ref" size="20" value="'.$product->ref.'"></td></tr>';
print '<td>'.$langs->trans("Label").'</td><td colspan="2"><input name="libelle" size="40" value="'.$product->libelle.'"></td></tr>'; print '<td>'.$langs->trans("Label").'</td><td colspan="2"><input name="libelle" size="40" value="'.$product->libelle.'"></td></tr>';
if ($product->isproduct() && $conf->stock->enabled) if ($product->isproduct() && $conf->stock->enabled)
{ {
print "<tr>".'<td>Seuil stock</td><td colspan="2">'; print "<tr>".'<td>Seuil stock</td><td colspan="2">';
print '<input name="seuil_stock_alerte" size="4" value="'.$product->seuil_stock_alerte.'">'; print '<input name="seuil_stock_alerte" size="4" value="'.$product->seuil_stock_alerte.'">';
print '</td></tr>'; print '</td></tr>';
} }
else else
{ {
print '<input name="seuil_stock_alerte" type="hidden" value="0">'; print '<input name="seuil_stock_alerte" type="hidden" value="0">';
} }
print '<tr><td valign="top">'.$langs->trans("Description").'</td><td colspan="2">'; print '<tr><td valign="top">'.$langs->trans("Description").'</td><td colspan="2">';
print '<textarea name="desc" rows="8" cols="50">'; print '<textarea name="desc" rows="8" cols="50">';
print $product->description; print $product->description;
print "</textarea></td></tr>"; print "</textarea></td></tr>";
if ($product->isservice()) if ($product->isservice())
{ {
print '<tr><td>'.$langs->trans("Duration").'</td><td colspan="2"><input name="duration_value" size="3" maxlength="5" value="'.$product->duration_value.'">'; print '<tr><td>'.$langs->trans("Duration").'</td><td colspan="2"><input name="duration_value" size="3" maxlength="5" value="'.$product->duration_value.'">';
print '&nbsp; '; print '&nbsp; ';
print '<input name="duration_unit" type="radio" value="d"'.($product->duration_unit=='d'?' checked':'').'>'.$langs->trans("Day"); print '<input name="duration_unit" type="radio" value="d"'.($product->duration_unit=='d'?' checked':'').'>'.$langs->trans("Day");
print '&nbsp; '; print '&nbsp; ';
print '<input name="duration_unit" type="radio" value="w"'.($product->duration_unit=='w'?' checked':'').'>'.$langs->trans("Week"); print '<input name="duration_unit" type="radio" value="w"'.($product->duration_unit=='w'?' checked':'').'>'.$langs->trans("Week");
print '&nbsp; '; print '&nbsp; ';
print '<input name="duration_unit" type="radio" value="m"'.($product->duration_unit=='m'?' checked':'').'>'.$langs->trans("Month"); print '<input name="duration_unit" type="radio" value="m"'.($product->duration_unit=='m'?' checked':'').'>'.$langs->trans("Month");
print '&nbsp; '; print '&nbsp; ';
print '<input name="duration_unit" type="radio" value="y"'.($product->duration_unit=='y'?' checked':'').'>'.$langs->trans("Year"); print '<input name="duration_unit" type="radio" value="y"'.($product->duration_unit=='y'?' checked':'').'>'.$langs->trans("Year");
print '</td></tr>'; print '</td></tr>';
} }
print '<tr><td colspan="3" align="center"><input type="submit" value="'.$langs->trans("Save").'">&nbsp;'; print '<tr><td colspan="3" align="center"><input type="submit" value="'.$langs->trans("Save").'">&nbsp;';
print '<input type="submit" name="cancel" value="'.$langs->trans("Cancel").'"></td></tr>'; print '<input type="submit" name="cancel" value="'.$langs->trans("Cancel").'"></td></tr>';
print '</table>'; print '</table>';
print '</form>'; print '</form>';
} }
@ -569,41 +569,41 @@ else
print "\n<div class=\"tabsAction\">\n"; print "\n<div class=\"tabsAction\">\n";
if ($_GET["action"] == '') if ($_GET["action"] == '')
{ {
if ( $user->rights->produit->creer) if ( $user->rights->produit->creer)
{ {
print '<a class="butAction" href="fiche.php?action=edit&amp;id='.$product->id.'">'.$langs->trans("Modify").'</a>'; print '<a class="butAction" href="fiche.php?action=edit&amp;id='.$product->id.'">'.$langs->trans("Modify").'</a>';
} }
if ($product->isproduct() && $conf->stock->enabled) if ($product->isproduct() && $conf->stock->enabled)
{ {
print '<a class="butAction" href="'.DOL_URL_ROOT.'/product/stock/product.php?id='.$product->id.'&amp;action=correction">'.$langs->trans("CorrectStock").'</a>'; print '<a class="butAction" href="'.DOL_URL_ROOT.'/product/stock/product.php?id='.$product->id.'&amp;action=correction">'.$langs->trans("CorrectStock").'</a>';
} }
print '<a class="butAction" href="fiche.php?id='.$product->id.'&amp;action=ajout_fourn">'.$langs->trans("AddSupplier").'</a>'; print '<a class="butAction" href="fiche.php?id='.$product->id.'&amp;action=ajout_fourn">'.$langs->trans("AddSupplier").'</a>';
if ($product->isproduct() && $user->rights->commande->creer) if ($product->isproduct() && $user->rights->commande->creer)
{ {
$langs->load('orders'); $langs->load('orders');
print '<a class="butAction" href="fiche.php?action=fastappro&amp;id='.$product->id.'">'; print '<a class="butAction" href="fiche.php?action=fastappro&amp;id='.$product->id.'">';
print $langs->trans("CreateOrder").'</a>'; print $langs->trans("CreateOrder").'</a>';
} }
} }
print "\n</div>\n"; print "\n</div>\n";
} }
else else
{ {
print $langs->trans("BadId"); print $langs->trans("BadId");
}
}
else
{
print $langs->trans("BadId");
} }
}
else
{
print $langs->trans("BadId");
}
} }
$db->close(); $db->close();

View File

@ -111,7 +111,7 @@ if ($_GET["id"])
* Ajouter une photo * Ajouter une photo
* *
*/ */
if ($_GET["action"] == 'ajout_photo' && $user->rights->produit->creer && $product->isproduct() && $conf->upload) if ($_GET["action"] == 'ajout_photo' && $user->rights->produit->creer && $conf->upload)
{ {
print_titre($langs->trans("AddPhoto")); print_titre($langs->trans("AddPhoto"));
@ -195,7 +195,7 @@ if ($_GET["id"])
if ($_GET["action"] == '') if ($_GET["action"] == '')
{ {
if ( $user->rights->produit->creer && $product->isproduct() && $conf->upload) if ( $user->rights->produit->creer && $conf->upload)
{ {
print '<a class="butAction" href="photos.php?action=ajout_photo&amp;id='.$product->id.'">'; print '<a class="butAction" href="photos.php?action=ajout_photo&amp;id='.$product->id.'">';
print $langs->trans("AddPhoto").'</a>'; print $langs->trans("AddPhoto").'</a>';

View File

@ -425,6 +425,8 @@ class MenuLeft {
} }
if (eregi("customers_bills",$leftmenu)) $newmenu->add_submenu(DOL_URL_ROOT."/compta/facture/impayees.php?leftmenu=customers_bills",$langs->trans("Unpayed"),2,$user->rights->facture->lire); if (eregi("customers_bills",$leftmenu)) $newmenu->add_submenu(DOL_URL_ROOT."/compta/facture/impayees.php?leftmenu=customers_bills",$langs->trans("Unpayed"),2,$user->rights->facture->lire);
if (eregi("customers_bills",$leftmenu)) $newmenu->add_submenu(DOL_URL_ROOT."/compta/facture/retardspaiement.php?leftmenu=customers_bills",$langs->trans("BillsLate"),2,$user->rights->facture->lire);
if (eregi("customers_bills",$leftmenu)) $newmenu->add_submenu(DOL_URL_ROOT."/compta/paiement/liste.php?leftmenu=customers_bills_payments",$langs->trans("Payments"),2,$user->rights->facture->lire); if (eregi("customers_bills",$leftmenu)) $newmenu->add_submenu(DOL_URL_ROOT."/compta/paiement/liste.php?leftmenu=customers_bills_payments",$langs->trans("Payments"),2,$user->rights->facture->lire);
if (eregi("customers_bills_payments",$leftmenu)) $newmenu->add_submenu(DOL_URL_ROOT."/compta/paiement/avalider.php?leftmenu=customers_bills_payments",$langs->trans("MenuToValid"),3,$user->rights->facture->lire); if (eregi("customers_bills_payments",$leftmenu)) $newmenu->add_submenu(DOL_URL_ROOT."/compta/paiement/avalider.php?leftmenu=customers_bills_payments",$langs->trans("MenuToValid"),3,$user->rights->facture->lire);

View File

@ -826,7 +826,8 @@ ModifyProductDescAbility=Personalization of descriptions produced in the forms
ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip) ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
UseSearchToSelectProduct=Use a search form to choose a product (intead of using a list box) UseSearchToSelectProduct=Use a search form to choose a product (intead of using a list box)
UseEcoTaxeAbility=Support Eco-Taxe (WEEE) UseEcoTaxeAbility=Support Eco-Taxe (WEEE)
SetDefaultBarcodeType=Default barcode type to use for products SetDefaultBarcodeTypeProducts=Default barcode type to use for products
SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
##### Syslog ##### ##### Syslog #####
SyslogSetup=Syslog module setup SyslogSetup=Syslog module setup
SyslogOutput=Log output SyslogOutput=Log output

View File

@ -930,7 +930,7 @@ ModifyProductDescAbility=Personalizaci
ViewProductDescInFormAbility=Visualización de las descripciones de los productos en los formularios ViewProductDescInFormAbility=Visualización de las descripciones de los productos en los formularios
UseSearchToSelectProduct=Utilizar un formulario de búsqueda para la selección de un producto (en vez de la lista desplegable) UseSearchToSelectProduct=Utilizar un formulario de búsqueda para la selección de un producto (en vez de la lista desplegable)
UseEcoTaxeAbility=Asumir ecotasa (DEEE) UseEcoTaxeAbility=Asumir ecotasa (DEEE)
SetDefaultBarcodeType=tipo códigos de barra utiliazdos por defecto para los productos SetDefaultBarcodeTypeProducts=tipo códigos de barra utiliazdos por defecto para los productos
##### Suppliers ##### ##### Suppliers #####

View File

@ -826,7 +826,8 @@ ViewProductDescInFormAbility=Visualisation des descriptions produits dans les fo
UseSearchToSelectProduct=Utiliser un formulaire de recherche pour choix d'un produit (plutôt que liste déroulante) UseSearchToSelectProduct=Utiliser un formulaire de recherche pour choix d'un produit (plutôt que liste déroulante)
UseEcoTaxeAbility=Prise en charge des éco-taxes (DEEE) UseEcoTaxeAbility=Prise en charge des éco-taxes (DEEE)
UseMinPrice=Utilisation d'un prix minimum de vente UseMinPrice=Utilisation d'un prix minimum de vente
SetDefaultBarcodeType=Type de code barre utilisé par défaut pour les produits SetDefaultBarcodeTypeProducts=Type de code barre utilisé par défaut pour les produits
SetDefaultBarcodeTypeThirdParties=Type de code barre utilisé par défaut pour les tiers
##### Suppliers ##### ##### Suppliers #####
SuppliersSetup=Configuration du module Fournisseur SuppliersSetup=Configuration du module Fournisseur
##### Syslog ##### ##### Syslog #####

View File

@ -7,6 +7,7 @@ BillsCustomersUnpayed=Factures clients impay
BillsCustomersUnpayedForCompany=Factures clients impayées pour %s BillsCustomersUnpayedForCompany=Factures clients impayées pour %s
BillsSuppliersUnpayed=Factures fournisseurs impayées BillsSuppliersUnpayed=Factures fournisseurs impayées
BillsUnpayed=Impayées BillsUnpayed=Impayées
BillsLate=Retards de paiement
BillsStatistics=Statistiques factures BillsStatistics=Statistiques factures
InvoiceStandard=Facture standard InvoiceStandard=Facture standard
InvoiceStandardAsk=Facture standard InvoiceStandardAsk=Facture standard
@ -233,6 +234,7 @@ InvoicePayed=Facture pay
PaymentNumber=Numéro paiement PaymentNumber=Numéro paiement
RemoveDiscount=Supprimer remise RemoveDiscount=Supprimer remise
WatermarkOnDraftBill=Filigrane sur les brouillons de factures (aucun si vide) WatermarkOnDraftBill=Filigrane sur les brouillons de factures (aucun si vide)
UnpayedNotChecked=Aucune facture impayées n'a été sélectionnée
# PaymentConditions # PaymentConditions
PaymentConditionShortRECEP=A réception PaymentConditionShortRECEP=A réception

View File

@ -19,233 +19,233 @@
*/ */
/** /**
\file htdocs/lib/product.lib.php \file htdocs/lib/product.lib.php
\brief Ensemble de fonctions de base pour le module produit et service \brief Ensemble de fonctions de base pour le module produit et service
\version $Id$ \version $Id$
*/ */
function product_prepare_head($product, $user) function product_prepare_head($product, $user)
{ {
global $langs, $conf; global $langs, $conf;
$h = 0; $h = 0;
$head = array(); $head = array();
$head[$h][0] = DOL_URL_ROOT."/product/fiche.php?id=".$product->id; $head[$h][0] = DOL_URL_ROOT."/product/fiche.php?id=".$product->id;
$head[$h][1] = $langs->trans("Card"); $head[$h][1] = $langs->trans("Card");
$head[$h][2] = 'card'; $head[$h][2] = 'card';
$h++; $h++;
$head[$h][0] = DOL_URL_ROOT."/product/price.php?id=".$product->id; $head[$h][0] = DOL_URL_ROOT."/product/price.php?id=".$product->id;
$head[$h][1] = $langs->trans("Price"); $head[$h][1] = $langs->trans("Price");
$head[$h][2] = 'price'; $head[$h][2] = 'price';
$h++; $h++;
$head[$h][0] = DOL_URL_ROOT."/product/photos.php?id=".$product->id; $head[$h][0] = DOL_URL_ROOT."/product/photos.php?id=".$product->id;
$head[$h][1] = $langs->trans("Photos"); $head[$h][1] = $langs->trans("Photos");
$head[$h][2] = 'photos'; $head[$h][2] = 'photos';
$h++; $h++;
//affichage onglet cat<61>gorie //affichage onglet cat<61>gorie
if ($conf->categorie->enabled) if ($conf->categorie->enabled)
{
$head[$h][0] = DOL_URL_ROOT."/categories/categorie.php?id=".$product->id;
$head[$h][1] = $langs->trans('Categories');
$head[$h][2] = 'category';
$h++;
}
// Affichage onglet code barre
if ($conf->global->MAIN_MODULE_BARCODE && $product->isproduct() && $user->rights->barcode->lire)
{
$head[$h][0] = DOL_URL_ROOT."/product/barcode.php?id=".$product->id;
$head[$h][1] = $langs->trans("BarCode");
$head[$h][2] = 'barcode';
$h++;
}
// Multilangs
if($conf->global->MAIN_MULTILANGS)
{
$head[$h][0] = DOL_URL_ROOT."/product/traduction.php?id=".$product->id;
$head[$h][1] = $langs->trans("Translation");
$head[$h][2] = 'translation';
$h++;
}
// sousproduits
if($conf->global->PRODUIT_SOUSPRODUITS == 1)
{
$head[$h][0] = DOL_URL_ROOT."/product/sousproduits/fiche.php?id=".$product->id;
$head[$h][1] = $langs->trans('AssociatedProducts');
$head[$h][2] = 'subproduct';
$h++;
}
if ($conf->fournisseur->enabled)
{
$head[$h][0] = DOL_URL_ROOT."/product/fournisseurs.php?id=".$product->id;
$head[$h][1] = $langs->trans("Suppliers");
$head[$h][2] = 'suppliers';
$h++;
}
$head[$h][0] = DOL_URL_ROOT."/product/stats/fiche.php?id=".$product->id;
$head[$h][1] = $langs->trans('Statistics');
$head[$h][2] = 'stats';
$h++;
$head[$h][0] = DOL_URL_ROOT."/product/stats/facture.php?id=".$product->id;
$head[$h][1] = $langs->trans('Referers');
$head[$h][2] = 'referers';
$h++;
$head[$h][0] = DOL_URL_ROOT.'/product/document.php?id='.$product->id;
$head[$h][1] = $langs->trans('Documents');
$head[$h][2] = 'documents';
$h++;
if($product->isproduct()) // Si produit stockable
{
if ($conf->stock->enabled)
{ {
$head[$h][0] = DOL_URL_ROOT."/categories/categorie.php?id=".$product->id;
$head[$h][1] = $langs->trans('Categories');
$head[$h][2] = 'category';
$h++;
}
// Affichage onglet code barre
if ($conf->global->MAIN_MODULE_BARCODE)
{
$head[$h][0] = DOL_URL_ROOT."/product/barcode.php?id=".$product->id;
$head[$h][1] = $langs->trans("BarCode");
$head[$h][2] = 'barcode';
$h++;
}
// Multilangs
if($conf->global->MAIN_MULTILANGS)
{
$head[$h][0] = DOL_URL_ROOT."/product/traduction.php?id=".$product->id;
$head[$h][1] = $langs->trans("Translation");
$head[$h][2] = 'translation';
$h++;
}
// sousproduits
if($conf->global->PRODUIT_SOUSPRODUITS == 1)
{
$head[$h][0] = DOL_URL_ROOT."/product/sousproduits/fiche.php?id=".$product->id;
$head[$h][1] = $langs->trans('AssociatedProducts');
$head[$h][2] = 'subproduct';
$h++;
}
if ($conf->fournisseur->enabled)
{
$head[$h][0] = DOL_URL_ROOT."/product/fournisseurs.php?id=".$product->id;
$head[$h][1] = $langs->trans("Suppliers");
$head[$h][2] = 'suppliers';
$h++;
}
$head[$h][0] = DOL_URL_ROOT."/product/stats/fiche.php?id=".$product->id;
$head[$h][1] = $langs->trans('Statistics');
$head[$h][2] = 'stats';
$h++;
$head[$h][0] = DOL_URL_ROOT."/product/stats/facture.php?id=".$product->id;
$head[$h][1] = $langs->trans('Referers');
$head[$h][2] = 'referers';
$h++;
$head[$h][0] = DOL_URL_ROOT.'/product/document.php?id='.$product->id;
$head[$h][1] = $langs->trans('Documents');
$head[$h][2] = 'documents';
$h++;
if($product->isproduct()) // Si produit stockable
{
if ($conf->stock->enabled)
{
$head[$h][0] = DOL_URL_ROOT."/product/stock/product.php?id=".$product->id; $head[$h][0] = DOL_URL_ROOT."/product/stock/product.php?id=".$product->id;
$head[$h][1] = $langs->trans("Stock"); $head[$h][1] = $langs->trans("Stock");
$head[$h][2] = 'stock'; $head[$h][2] = 'stock';
$h++; $h++;
}
} }
}
/* /*
* Onglets additionnels pour les canvas * Onglets additionnels pour les canvas
*/ */
if(is_array($product->onglets)) if(is_array($product->onglets))
{
foreach ($product->onglets as $onglet)
{ {
foreach ($product->onglets as $onglet)
{
$head[$h] = $onglet; $head[$h] = $onglet;
$h++; $h++;
}
} }
}
return $head; return $head;
} }
function show_stats_for_company($product,$socid) function show_stats_for_company($product,$socid)
{ {
global $conf,$langs,$user,$db; global $conf,$langs,$user,$db;
print '<tr>'; print '<tr>';
print '<td align="left" width="25%" valign="top">'.$langs->trans("Referers").'</td>'; print '<td align="left" width="25%" valign="top">'.$langs->trans("Referers").'</td>';
print '<td align="right" width="25%">'.$langs->trans("NbOfThirdParties").'</td>'; print '<td align="right" width="25%">'.$langs->trans("NbOfThirdParties").'</td>';
print '<td align="right" width="25%">'.$langs->trans("NbOfReferers").'</td>'; print '<td align="right" width="25%">'.$langs->trans("NbOfReferers").'</td>';
print '<td align="right" width="25%">'.$langs->trans("TotalQuantity").'</td>'; print '<td align="right" width="25%">'.$langs->trans("TotalQuantity").'</td>';
print '</tr>'; print '</tr>';
// Propals // Propals
if ($conf->propal->enabled && $user->rights->propale->lire) if ($conf->propal->enabled && $user->rights->propale->lire)
{ {
$ret=$product->load_stats_propale($socid); $ret=$product->load_stats_propale($socid);
if ($ret < 0) dolibarr_print_error($db); if ($ret < 0) dolibarr_print_error($db);
$langs->load("propal"); $langs->load("propal");
print '<tr><td>'; print '<tr><td>';
print '<a href="propal.php?id='.$product->id.'">'.img_object('','propal').' '.$langs->trans("Proposals").'</a>'; print '<a href="propal.php?id='.$product->id.'">'.img_object('','propal').' '.$langs->trans("Proposals").'</a>';
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_propale['customers']; print $product->stats_propale['customers'];
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_propale['nb']; print $product->stats_propale['nb'];
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_propale['qty']; print $product->stats_propale['qty'];
print '</td>'; print '</td>';
print '</tr>'; print '</tr>';
} }
// Commandes clients // Commandes clients
if ($conf->commande->enabled && $user->rights->commande->lire) if ($conf->commande->enabled && $user->rights->commande->lire)
{ {
$ret=$product->load_stats_commande($socid); $ret=$product->load_stats_commande($socid);
if ($ret < 0) dolibarr_print_error($db); if ($ret < 0) dolibarr_print_error($db);
$langs->load("orders"); $langs->load("orders");
print '<tr><td>'; print '<tr><td>';
print '<a href="commande.php?id='.$product->id.'">'.img_object('','order').' '.$langs->trans("CustomersOrders").'</a>'; print '<a href="commande.php?id='.$product->id.'">'.img_object('','order').' '.$langs->trans("CustomersOrders").'</a>';
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_commande['customers']; print $product->stats_commande['customers'];
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_commande['nb']; print $product->stats_commande['nb'];
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_commande['qty']; print $product->stats_commande['qty'];
print '</td>'; print '</td>';
print '</tr>'; print '</tr>';
} }
// Commandes fournisseurs // Commandes fournisseurs
if ($conf->fournisseur->enabled && $user->rights->fournisseur->commande->lire) if ($conf->fournisseur->enabled && $user->rights->fournisseur->commande->lire)
{ {
$ret=$product->load_stats_commande_fournisseur($socid); $ret=$product->load_stats_commande_fournisseur($socid);
if ($ret < 0) dolibarr_print_error($db); if ($ret < 0) dolibarr_print_error($db);
$langs->load("orders"); $langs->load("orders");
print '<tr><td>'; print '<tr><td>';
print '<a href="commande_fournisseur.php?id='.$product->id.'">'.img_object('','order').' '.$langs->trans("SuppliersOrders").'</a>'; print '<a href="commande_fournisseur.php?id='.$product->id.'">'.img_object('','order').' '.$langs->trans("SuppliersOrders").'</a>';
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_commande_fournisseur['suppliers']; print $product->stats_commande_fournisseur['suppliers'];
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_commande_fournisseur['nb']; print $product->stats_commande_fournisseur['nb'];
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_commande_fournisseur['qty']; print $product->stats_commande_fournisseur['qty'];
print '</td>'; print '</td>';
print '</tr>'; print '</tr>';
} }
// Contrats // Contrats
if ($conf->contrat->enabled && $user->rights->contrat->lire) if ($conf->contrat->enabled && $user->rights->contrat->lire)
{ {
$ret=$product->load_stats_contrat($socid); $ret=$product->load_stats_contrat($socid);
if ($ret < 0) dolibarr_print_error($db); if ($ret < 0) dolibarr_print_error($db);
$langs->load("contracts"); $langs->load("contracts");
print '<tr><td>'; print '<tr><td>';
print '<a href="contrat.php?id='.$product->id.'">'.img_object('','contract').' '.$langs->trans("Contracts").'</a>'; print '<a href="contrat.php?id='.$product->id.'">'.img_object('','contract').' '.$langs->trans("Contracts").'</a>';
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_contrat['customers']; print $product->stats_contrat['customers'];
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_contrat['nb']; print $product->stats_contrat['nb'];
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_contrat['qty']; print $product->stats_contrat['qty'];
print '</td>'; print '</td>';
print '</tr>'; print '</tr>';
} }
// Factures clients // Factures clients
if ($conf->facture->enabled && $user->rights->facture->lire) if ($conf->facture->enabled && $user->rights->facture->lire)
{ {
$ret=$product->load_stats_facture($socid); $ret=$product->load_stats_facture($socid);
if ($ret < 0) dolibarr_print_error($db); if ($ret < 0) dolibarr_print_error($db);
$langs->load("bills"); $langs->load("bills");
print '<tr><td>'; print '<tr><td>';
print '<a href="facture.php?id='.$product->id.'">'.img_object('','bill').' '.$langs->trans("CustomersInvoices").'</a>'; print '<a href="facture.php?id='.$product->id.'">'.img_object('','bill').' '.$langs->trans("CustomersInvoices").'</a>';
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_facture['customers']; print $product->stats_facture['customers'];
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_facture['nb']; print $product->stats_facture['nb'];
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_facture['qty']; print $product->stats_facture['qty'];
print '</td>'; print '</td>';
print '</tr>'; print '</tr>';
} }
// Factures fournisseurs // Factures fournisseurs
if ($conf->fournisseur->enabled && $user->rights->fournisseur->facture->lire) if ($conf->fournisseur->enabled && $user->rights->fournisseur->facture->lire)
{ {
$ret=$product->load_stats_facture_fournisseur($socid); $ret=$product->load_stats_facture_fournisseur($socid);
if ($ret < 0) dolibarr_print_error($db); if ($ret < 0) dolibarr_print_error($db);
$langs->load("bills"); $langs->load("bills");
print '<tr><td>'; print '<tr><td>';
print '<a href="facture_fournisseur.php?id='.$product->id.'">'.img_object('','bill').' '.$langs->trans("SuppliersInvoices").'</a>'; print '<a href="facture_fournisseur.php?id='.$product->id.'">'.img_object('','bill').' '.$langs->trans("SuppliersInvoices").'</a>';
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_facture_fournisseur['suppliers']; print $product->stats_facture_fournisseur['suppliers'];
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_facture_fournisseur['nb']; print $product->stats_facture_fournisseur['nb'];
print '</td><td align="right">'; print '</td><td align="right">';
print $product->stats_facture_fournisseur['qty']; print $product->stats_facture_fournisseur['qty'];
print '</td>'; print '</td>';
print '</tr>'; print '</tr>';
} }
return 0; return 0;
} }