Maxi debug of stock management.

This commit is contained in:
Laurent Destailleur 2008-10-24 20:16:36 +00:00
parent f2746207c4
commit fc0ebfa9b5
11 changed files with 217 additions and 135 deletions

View File

@ -29,42 +29,44 @@ require_once(DOL_DOCUMENT_ROOT."/lib/admin.lib.php");
$langs->load("admin");
$langs->load("stocks");
// Securit check
if (!$user->admin)
accessforbidden();
/*
* Actions
*/
if ($_POST["action"] == 'stock_userstock')
if ($_POST["action"] == 'STOCK_USERSTOCK')
{
dolibarr_set_const($db, "STOCK_USERSTOCK", $_POST["stock_userstock"]);
//On d<EFBFBD>sactive l'autocr<63>ation si l'option "stock personnel" est d<>sactiv<69>e
if ($_POST["stock_userstock"] == 0)
dolibarr_set_const($db, "STOCK_USERSTOCK", $_POST["STOCK_USERSTOCK"]);
//On desactive l'autocreation si l'option "stock personnel" est desactivee
if ($_POST["STOCK_USERSTOCK"] == 0)
{
dolibarr_set_const($db, "STOCK_USERSTOCK_AUTOCREATE", 0);
}
Header("Location: stock.php");
exit;
}
elseif ($_POST["action"] == 'stock_userstock_autocreate')
elseif ($_POST["action"] == 'STOCK_USERSTOCK_AUTOCREATE')
{
dolibarr_set_const($db, "STOCK_USERSTOCK_AUTOCREATE", $_POST["stock_userstock_autocreate"]);
dolibarr_set_const($db, "STOCK_USERSTOCK_AUTOCREATE", $_POST["STOCK_USERSTOCK_AUTOCREATE"]);
Header("Location: stock.php");
exit;
}
// Mode of stock changement
elseif ( $_POST["action"] == 'stock_bill'
|| $_POST["action"] == 'stock_validateorder'
|| $_POST["action"] == 'stock_shipment')
// Mode of stock decrease
if ($_POST["action"] == 'STOCK_CALCULATE_ON_BILL'
|| $_POST["action"] == 'STOCK_CALCULATE_ON_VALIDATE_ORDER'
|| $_POST["action"] == 'STOCK_CALCULATE_ON_SHIPMENT')
{
$count=0;
$db->begin();
$count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_BILL", '');
$count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_VALIDATE_ORDER", '');
$count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SHIPMENT", '');
if ($_POST["action"] == 'stock_bill') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_BILL", $_POST["stock_bill"]);
if ($_POST["action"] == 'stock_validateorder') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_VALIDATE_ORDER", $_POST["stock_validateorder"]);
if ($_POST["action"] == 'stock_shipment') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SHIPMENT", $_POST["stock_shipment"]);
if ($_POST["action"] == 'STOCK_CALCULATE_ON_BILL') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_BILL", $_POST["STOCK_CALCULATE_ON_BILL"]);
if ($_POST["action"] == 'STOCK_CALCULATE_ON_VALIDATE_ORDER') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_VALIDATE_ORDER", $_POST["STOCK_CALCULATE_ON_VALIDATE_ORDER"]);
if ($_POST["action"] == 'STOCK_CALCULATE_ON_SHIPMENT') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SHIPMENT", $_POST["STOCK_CALCULATE_ON_SHIPMENT"]);
if ($count == 4)
{
$db->commit();
@ -77,6 +79,28 @@ elseif ( $_POST["action"] == 'stock_bill'
dolibarr_print_error("Error in some requests", LOG_ERR);
}
}
// Mode of stock decrease
if ($_POST["action"] == 'STOCK_CALCULATE_ON_SUPPLIER_BILL'
|| $_POST["action"] == 'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER')
{
$count=0;
$db->begin();
$count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_BILL", '');
$count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER", '');
if ($_POST["action"] == 'STOCK_CALCULATE_ON_SUPPLIER_BILL') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_BILL", $_POST["STOCK_CALCULATE_ON_SUPPLIER_BILL"]);
if ($_POST["action"] == 'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER", $_POST["STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER"]);
if ($count == 3)
{
$db->commit();
Header("Location: stock.php");
exit;
}
else
{
$db->rollback();
dolibarr_print_error("Error in some requests", LOG_ERR);
}
}
@ -109,8 +133,8 @@ print "<tr ".$bc[$var].">";
print '<td width="60%">'.$langs->trans("UserWarehouse").'</td>';
print '<td width="160" align="right">';
print "<form method=\"post\" action=\"stock.php\">";
print "<input type=\"hidden\" name=\"action\" value=\"stock_userstock\">";
print $html->selectyesno("stock_userstock",$conf->global->STOCK_USERSTOCK,1);
print "<input type=\"hidden\" name=\"action\" value=\"STOCK_USERSTOCK\">";
print $html->selectyesno("STOCK_USERSTOCK",$conf->global->STOCK_USERSTOCK,1);
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print "</form>\n</td>\n</tr>\n";
@ -123,8 +147,8 @@ if ($conf->global->STOCK_USERSTOCK == 1)
print '<td width="160" align="right">';
print "<form method=\"post\" action=\"stock.php\">";
print "<input type=\"hidden\" name=\"action\" value=\"stock_userstock_autocreate\">";
print $html->selectyesno("stock_userstock_autocreate",$conf->global->STOCK_USERSTOCK_AUTOCREATE,1);
print "<input type=\"hidden\" name=\"action\" value=\"STOCK_USERSTOCK_AUTOCREATE\">";
print $html->selectyesno("STOCK_USERSTOCK_AUTOCREATE",$conf->global->STOCK_USERSTOCK_AUTOCREATE,1);
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print '</form>';
@ -144,11 +168,11 @@ if ($conf->facture->enabled)
{
$var=!$var;
print "<tr ".$bc[$var].">";
print '<td width="60%">'.$langs->trans("DeStockReStockOnBill").'</td>';
print '<td width="60%">'.$langs->trans("DeStockOnBill").'</td>';
print '<td width="160" align="right">';
print "<form method=\"post\" action=\"stock.php\">";
print "<input type=\"hidden\" name=\"action\" value=\"stock_bill\">";
print $html->selectyesno("stock_bill",$conf->global->STOCK_CALCULATE_ON_BILL,1);
print "<input type=\"hidden\" name=\"action\" value=\"STOCK_CALCULATE_ON_BILL\">";
print $html->selectyesno("STOCK_CALCULATE_ON_BILL",$conf->global->STOCK_CALCULATE_ON_BILL,1);
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print "</form>\n</td>\n</tr>\n";
}
@ -157,11 +181,11 @@ if ($conf->commande->enabled)
{
$var=!$var;
print "<tr ".$bc[$var].">";
print '<td width="60%">'.$langs->trans("DeStockReStockOnValidateOrder").'</td>';
print '<td width="60%">'.$langs->trans("DeStockOnValidateOrder").'</td>';
print '<td width="160" align="right">';
print "<form method=\"post\" action=\"stock.php\">";
print "<input type=\"hidden\" name=\"action\" value=\"stock_validateorder\">";
print $html->selectyesno("stock_validateorder",$conf->global->STOCK_CALCULATE_ON_VALIDATE_ORDER,1);
print "<input type=\"hidden\" name=\"action\" value=\"STOCK_CALCULATE_ON_VALIDATE_ORDER\">";
print $html->selectyesno("STOCK_CALCULATE_ON_VALIDATE_ORDER",$conf->global->STOCK_CALCULATE_ON_VALIDATE_ORDER,1);
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print "</form>\n</td>\n</tr>\n";
}
@ -170,11 +194,11 @@ if ($conf->expedition->enabled)
{
$var=!$var;
print "<tr ".$bc[$var].">";
print '<td width="60%">'.$langs->trans("DeStockReStockOnShipment").'</td>';
print '<td width="60%">'.$langs->trans("DeStockOnShipment").'</td>';
print '<td width="160" align="right">';
print "<form method=\"post\" action=\"stock.php\">";
print "<input type=\"hidden\" name=\"action\" value=\"stock_shipment\">";
print $html->selectyesno("stock_shipment",$conf->global->STOCK_CALCULATE_ON_SHIPMENT,1);
print "<input type=\"hidden\" name=\"action\" value=\"STOCK_CALCULATE_ON_SHIPMENT\">";
print $html->selectyesno("STOCK_CALCULATE_ON_SHIPMENT",$conf->global->STOCK_CALCULATE_ON_SHIPMENT,1);
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print "</form>\n</td>\n</tr>\n";
}
@ -187,11 +211,31 @@ print " <td align=\"right\" width=\"160\">".$langs->trans("Value")."</td>\n";
print '</tr>'."\n";
$var=true;
if ($conf->fournisseur->enabled)
{
$var=!$var;
print "<tr ".$bc[$var].">";
print '<td width="60%">'.$langs->trans("ReStockOnBill").'</td>';
print '<td width="160" align="right">';
print "<form method=\"post\" action=\"stock.php\">";
print "<input type=\"hidden\" name=\"action\" value=\"STOCK_CALCULATE_ON_SUPPLIER_BILL\">";
print $html->selectyesno("STOCK_CALCULATE_ON_SUPPLIER_BILL",$conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL,1);
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print "</form>\n</td>\n</tr>\n";
}
$var=!$var;
print "<tr ".$bc[$var].">";
print '<td colspan="2">'.$langs->trans("FeatureNotYetAvailable").'</td>';
print '</tr>'."\n";
if ($conf->commande->enabled)
{
$var=!$var;
print "<tr ".$bc[$var].">";
print '<td width="60%">'.$langs->trans("ReStockOnValidateOrder").'</td>';
print '<td width="160" align="right">';
print "<form method=\"post\" action=\"stock.php\">";
print "<input type=\"hidden\" name=\"action\" value=\"STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER\">";
print $html->selectyesno("STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER",$conf->global->STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER,1);
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print "</form>\n</td>\n</tr>\n";
}
print '</table>';

View File

@ -1083,7 +1083,7 @@ class Facture extends CommonObject
$this->update_price();
// Validation de la facture
$sql = 'UPDATE '.MAIN_DB_PREFIX.'facture ';
$sql = 'UPDATE '.MAIN_DB_PREFIX.'facture';
$sql.= " SET facnumber='".$numfa."', fk_statut = 1, fk_user_valid = ".$user->id;
if ($conf->global->FAC_FORCE_DATE_VALIDATION)
{
@ -1094,15 +1094,16 @@ class Facture extends CommonObject
$sql.= ', date_lim_reglement='.$this->db->idate($datelim);
}
$sql.= ' WHERE rowid = '.$this->id;
dolibarr_syslog("Facture::set_valid() sql=".$sql, LOG_DEBUG);
$resql=$this->db->query($sql);
if ($resql)
{
$this->facnumber=$numfa;
dolibarr_syslog("Facture::set_valid() sql=$sql");
}
else
{
dolibarr_syslog("Facture::set_valid() Echec update - 10 - sql=$sql");
dolibarr_syslog("Facture::set_valid() Echec update - 10 - sql=".$sql, LOG_DEBUG);
dolibarr_print_error($this->db);
$error++;
}
@ -1138,11 +1139,11 @@ class Facture extends CommonObject
if (! $error)
{
// Classe la société rattachée comme client
// Define third party as a customer
$result=$this->client->set_as_client();
// Si activé on décrémente le produit principal et ses composants à la validation de facture
if ($conf->stock->enabled && $conf->global->STOCK_CALCULATE_ON_BILL)
if ($result >= 0 && $conf->stock->enabled && $conf->global->STOCK_CALCULATE_ON_BILL)
{
require_once(DOL_DOCUMENT_ROOT."/product/stock/mouvementstock.class.php");
@ -1150,27 +1151,8 @@ class Facture extends CommonObject
{
if ($this->lignes[$i]->fk_product && $this->lignes[$i]->product_type == 0)
{
dolibarr_syslog("Facture::set_valid() correct stock for ".$this->lignes[$i]->rowid);
// It's a product
if ($conf->global->PRODUIT_SOUSPRODUITS)
{
$prod = new Product($this->db, $this->lignes[$i]->fk_product);
$prod -> get_sousproduits_arbo();
$prods_arbo = $prod->get_each_prod();
if(sizeof($prods_arbo) > 0)
{
foreach($prods_arbo as $key => $value)
{
// on décompte le stock de tous les sousproduits
$mouvS = new MouvementStock($this->db);
$entrepot_id = "1"; //Todo: ajouter possibilité de choisir l'entrepot
$result=$mouvS->livraison($user, $value[1], $entrepot_id, $value[0]*$this->lignes[$i]->qty);
}
}
}
$mouvP = new MouvementStock($this->db);
// on décompte le stock du produit principal
// We decrease stock for product
$entrepot_id = "1"; // TODO ajouter possibilité de choisir l'entrepot
$result=$mouvP->livraison($user, $this->lignes[$i]->fk_product, $entrepot_id, $this->lignes[$i]->qty);
}
@ -1181,15 +1163,24 @@ class Facture extends CommonObject
$this->use_webcal=($conf->global->PHPWEBCALENDAR_BILLSTATUS=='always'?1:0);
// Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
$interface=new Interfaces($this->db);
$result=$interface->run_triggers('BILL_VALIDATE',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
$this->db->commit();
return 1;
if ($result > 0)
{
// Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
$interface=new Interfaces($this->db);
$result=$interface->run_triggers('BILL_VALIDATE',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
$this->db->commit();
return 1;
}
else
{
$this->db->rollback();
return -1;
}
}
else
{

View File

@ -44,13 +44,13 @@ class FactureFournisseur extends Facture
var $table_element='facture_fourn';
var $table_element_line='facture_fourn_det';
var $fk_element='fk_facture_fourn';
//! 0=brouillon,
//! 1=validée,
//! TODO Ce statut doit etre 2 et non 1 classée payée partiellement (close_code='discount_vat','badcustomer') ou complètement (close_code=null),
//! TODO Ce statut doit etre 2 et non 1 classée abandonnée et aucun paiement n'a eu lieu (close_code='badcustomer','abandon' ou 'replaced')
//! 0=draft,
//! 1=validated,
//! TODO Ce statut doit etre 2 et non 1 classee payee partiellement (close_code='discount_vat','badcustomer') ou completement (close_code=null),
//! TODO Ce statut doit etre 2 et non 1 classee abandonnee et aucun paiement n'a eu lieu (close_code='badcustomer','abandon' ou 'replaced')
var $statut;
//! 1 si facture payée COMPLETEMENT, 0 sinon (ce champ ne devrait plus servir car insuffisant)
//! 1 si facture payee COMPLETEMENT, 0 sinon (ce champ ne devrait plus servir car insuffisant)
var $paye;
var $author;
@ -71,7 +71,7 @@ class FactureFournisseur extends Facture
/**
* \brief Constructeur de la classe
* \param DB Handler accès base de données
* \param DB Database access handler
* \param socid Id societe ('' par defaut)
* \param facid Id facture ('' par defaut)
*/
@ -97,8 +97,8 @@ class FactureFournisseur extends Facture
}
/**
* \brief Création de la facture en base
* \param user object utilisateur qui crée
* \brief Creation de la facture en base
* \param user object utilisateur qui cree
* \return int id facture si ok, < 0 si erreur
*/
function create($user)
@ -137,7 +137,7 @@ class FactureFournisseur extends Facture
$this->lignes[$i]->qty);
}
}
// Mise à jour prix
// Update total price
if ($this->update_price() > 0)
{
$this->db->commit();
@ -168,8 +168,8 @@ class FactureFournisseur extends Facture
}
/**
* \brief Recupére l'objet facture et ses lignes de factures
* \param rowid id de la facture a récupérer
* \brief Recup<EFBFBD>re l'objet facture et ses lignes de factures
* \param rowid id de la facture a r<EFBFBD>cup<EFBFBD>rer
* \return int >0 si ok, <0 si ko
*/
function fetch($rowid)
@ -250,7 +250,7 @@ class FactureFournisseur extends Facture
/**
\brief Recupére les lignes de factures dans this->lignes
\brief Recup<EFBFBD>re les lignes de factures dans this->lignes
\return int 1 si ok, < 0 si erreur
*/
function fetch_lines()
@ -307,7 +307,7 @@ class FactureFournisseur extends Facture
/**
* \brief Recupére l'objet fournisseur lié à la facture
* \brief Recup<EFBFBD>re l'objet fournisseur li<EFBFBD> <EFBFBD> la facture
*
*/
function fetch_fournisseur()
@ -319,7 +319,7 @@ class FactureFournisseur extends Facture
/**
* \brief Supprime la facture
* \param rowid id de la facture à supprimer
* \param rowid id de la facture <EFBFBD> supprimer
*/
function delete($rowid)
{
@ -355,8 +355,8 @@ class FactureFournisseur extends Facture
/**
* \brief Tag la facture comme payée complètement
* \param user Objet utilisateur qui modifie l'état
* \brief Tag la facture comme pay<EFBFBD>e compl<EFBFBD>tement
* \param user Objet utilisateur qui modifie l'<EFBFBD>tat
* \return int <0 si ko, >0 si ok
*/
function set_payed($user)
@ -376,7 +376,7 @@ class FactureFournisseur extends Facture
/**
* \brief Tag la facture comme validée
* \brief Set invoice status as validate
* \param user Objet utilisateur qui valide la facture
* \return int <0 si ko, >0 si ok
*/
@ -390,19 +390,46 @@ class FactureFournisseur extends Facture
$sql.= " SET fk_statut = 1, fk_user_valid = ".$user->id;
$sql.= " WHERE rowid = ".$this->id;
dolibarr_syslog("FactureFournisseur::set_valid sql=".$sql,LOG_DEBUG);
dolibarr_syslog("FactureFournisseur::set_valid sql=".$sql, LOG_DEBUG);
$resql = $this->db->query($sql);
if ($resql)
{
// Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
$interface=new Interfaces($this->db);
$result=$interface->run_triggers('BILL_SUPPLIER_VALIDATE',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
$result=0;
// Si activé on décrémente le produit principal et ses composants à la validation de facture
if ($result >= 0 && $conf->stock->enabled && $conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL)
{
require_once(DOL_DOCUMENT_ROOT."/product/stock/mouvementstock.class.php");
$this->db->commit();
return 1;
for ($i = 0 ; $i < sizeof($this->lignes) ; $i++)
{
if ($this->lignes[$i]->fk_product && $this->lignes[$i]->product_type == 0)
{
$mouvP = new MouvementStock($this->db);
// We increase stock for product
$entrepot_id = "1"; // TODO ajouter possibilité de choisir l'entrepot
$result=$mouvP->reception($user, $this->lignes[$i]->fk_product, $entrepot_id, $this->lignes[$i]->qty);
}
}
}
if ($result > 0)
{
// Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
$interface=new Interfaces($this->db);
$result=$interface->run_triggers('BILL_SUPPLIER_VALIDATE',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
$this->db->commit();
return 1;
}
else
{
$this->db->rollback();
return -1;
}
}
else
{
@ -414,20 +441,20 @@ class FactureFournisseur extends Facture
/**
* \brief Ajoute une ligne de facture (associé à aucun produit/service prédéfini)
* \brief Ajoute une ligne de facture (associ<EFBFBD> <EFBFBD> aucun produit/service pr<EFBFBD>d<EFBFBD>fini)
* \param desc Description de la ligne
* \param pu Prix unitaire (HT ou TTC selon price_base_type)
* \param txtva Taux de tva forcé, sinon -1
* \param qty Quantité
* \param fk_product Id du produit/service predéfini
* \param txtva Taux de tva forc<EFBFBD>, sinon -1
* \param qty Quantit<EFBFBD>
* \param fk_product Id du produit/service pred<EFBFBD>fini
* \param remise_percent Pourcentage de remise de la ligne
* \param date_start Date de debut de validité du service
* \param date_end Date de fin de validité du service
* \param date_start Date de debut de validit<EFBFBD> du service
* \param date_end Date de fin de validit<EFBFBD> du service
* \param ventil Code de ventilation comptable
* \param info_bits Bits de type de lignes
* \param price_base_type HT ou TTC
* \remarks Les parametres sont deja censé etre juste et avec valeurs finales a l'appel
* de cette methode. Aussi, pour le taux tva, il doit deja avoir ete défini
* \remarks Les parametres sont deja cens<EFBFBD> etre juste et avec valeurs finales a l'appel
* de cette methode. Aussi, pour le taux tva, il doit deja avoir ete d<EFBFBD>fini
* par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,taux_produit)
* et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue)
*/
@ -438,7 +465,7 @@ class FactureFournisseur extends Facture
$this->db->begin();
// Nettoyage paramètres
// Nettoyage param<EFBFBD>tres
if ($txtva == '') $txtva=0;
$txtva=price2num($txtva);
@ -475,12 +502,12 @@ class FactureFournisseur extends Facture
}
/**
* \brief Mets à jour une ligne de facture
* \brief Mets <EFBFBD> jour une ligne de facture
* \param id Id de la ligne de facture
* \param label Description de la ligne
* \param pu Prix unitaire (HT ou TTC selon price_base_type)
* \param tauxtva Taux tva
* \param qty Quantité
* \param qty Quantit<EFBFBD>
* \param idproduct Id produit
* \param price_base_type HT ou TTC
* \param info_bits Miscellanous informations of line
@ -596,7 +623,7 @@ class FactureFournisseur extends Facture
$this->user_validation = $vuser;
}
$this->date_creation = $obj->datec;
//$this->date_validation = $obj->datev; \todo La date de validation n'est pas encore gérée
//$this->date_validation = $obj->datev; \todo La date de validation n'est pas encore g<EFBFBD>r<EFBFBD>e
}
$this->db->free($result);
}
@ -666,14 +693,14 @@ class FactureFournisseur extends Facture
/**
* \brief Initialise la facture avec valeurs fictives aléatoire
* Sert à générer une facture pour l'aperu des modèles ou demo
* \brief Initialise la facture avec valeurs fictives al<EFBFBD>atoire
* Sert <EFBFBD> g<EFBFBD>n<EFBFBD>rer une facture pour l'aperu des mod<EFBFBD>les ou demo
*/
function initAsSpecimen()
{
global $user,$langs;
// Charge tableau des id de société socids
// Charge tableau des id de soci<EFBFBD>t<EFBFBD> socids
$socids = array();
$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe WHERE fournisseur=1 LIMIT 10";
$resql = $this->db->query($sql);
@ -706,7 +733,7 @@ class FactureFournisseur extends Facture
}
}
// Initialise paramètres
// Initialise param<EFBFBD>tres
$this->id=0;
$this->ref = 'SPECIMEN';
$this->specimen=1;

View File

@ -1974,7 +1974,8 @@ class Form
print '<option value="'.$obj->code.'">';
}
// Si traduction existe, on l'utilise, sinon on prend le libellé par défaut
print $obj->code . ' - ' .($langs->trans("JuridicalStatus".$obj->code)!="JuridicalStatus".$obj->code?$langs->trans("JuridicalStatus".$obj->code):($obj->nom!='-'?$obj->nom:''));
print $obj->code . ' - ';
print ($langs->trans("JuridicalStatus".$obj->code)!="JuridicalStatus".$obj->code?$langs->trans("JuridicalStatus".$obj->code):($obj->nom!='-'?$langs->convToOuptutCharset($obj->nom):''));
print '</option>';
}
$i++;

View File

@ -40,9 +40,11 @@ QtyDispatched=Quantity dispatched
OrderDispatch=Order dispatching
RuleForStockManagementDecrease=Rule for stock management decrease
RuleForStockManagementIncrease=Rule for stock management increase
DeStockReStockOnBill=Decrease/increase real stocks on invoices/credit notes (warning, in this version, it's only in warehouse number 1 that stock is modified)
DeStockReStockOnValidateOrder=Decrease/increase real stocks on orders notes (warning, in this version, it's only in warehouse number 1 that stock is modified)
DeStockReStockOnShipment=Decrease/increase real stocks on shipment (recommanded)
DeStockOnBill=Decrease real stocks on invoices/credit notes (warning, in this version, it's only in warehouse number 1 that stock is modified)
DeStockOnValidateOrder=Decrease real stocks on orders notes (warning, in this version, it's only in warehouse number 1 that stock is modified)
DeStockOnShipment=Decrease real stocks on shipment (recommanded)
ReStockOnBill=Increase real stocks on invoices/credit notes (warning, in this version, it's only in warehouse number 1 that stock is modified)
ReStockOnValidateOrder=Increase real stocks on orders notes (warning, in this version, it's only in warehouse number 1 that stock is modified)
StockDiffPhysicTeoric=Reason for difference stock physical and theorical
StockLimitShort=Limit
StockLimit=Stock limit for alerts

View File

@ -38,9 +38,11 @@ EnhancedValueOfWarehouses=Valor de stocks
UserWarehouseAutoCreate=Crear existencias automáticamente en la creación de un usuario
QtyDispatched=Cantidad desglosada
OrderDispatch=Desglose pedido
DeStockReStockOnBill=Decrementar/incrementar las existencias con las facturas/abonos
DeStockReStockOnValidateOrder=Decrementar/incrementar las existencias en los pedidos
DeStockReStockOnShipment=Decrementar/incrementar los stocks en los envíos
DeStockOnBill=Decrementar las existencias con las facturas/abonos
DeStockOnValidateOrder=Decrementar las existencias en los pedidos
DeStockOnShipment=Decrementar los stocks en los envíos
ReStockOnBill=Incrementar las existencias con las facturas/abonos
ReStockOnValidateOrder=Incrementar las existencias en los pedidos
StockLimitShort=Límite máximo
StockLimit=Límite máximo existencias
PhysicalStock=Stock físico

View File

@ -40,9 +40,11 @@ QtyDispatched=Quantit
OrderDispatch=Ventilation commande
RuleForStockManagementDecrease=Règle de gestion des décrémentations de stock
RuleForStockManagementIncrease=Règle de gestion des incrémentations de stock
DeStockReStockOnBill=Décrémente/Incrémente les stocks physiques sur les factures/avoirs (attention, dans cette version, c'est toujours dans le premier entrepot numero 1 que se fait l'ajustement)
DeStockReStockOnValidateOrder=Décrémente/Incrémente les stocks physiques sur les commandes (attention, dans cette version, c'est toujours dans le premier entrepot numero 1 que se fait l'ajustement)
DeStockReStockOnShipment=Décrémente/Incrémente les stocks physiques sur les expéditions (recommandé)
DeStockOnBill=Décrémente les stocks physiques sur les factures/avoirs (attention, dans cette version, c'est toujours dans le premier entrepot numero 1 que se fait l'ajustement)
DeStockOnValidateOrder=Décrémente les stocks physiques sur les commandes (attention, dans cette version, c'est toujours dans le premier entrepot numero 1 que se fait l'ajustement)
DeStockOnShipment=Décrémente les stocks physiques sur les expéditions (recommandé)
ReStockOnBill=Incrémente les stocks physiques sur les factures/avoirs (attention, dans cette version, c'est toujours dans le premier entrepot numero 1 que se fait l'ajustement)
ReStockOnValidateOrder=Incrémente les stocks physiques sur les commandes (attention, dans cette version, c'est toujours dans le premier entrepot numero 1 que se fait l'ajustement)
StockDiffPhysicTeoric=Raison écart stock physique-théorique
StockLimitShort=Seuil
StockLimit=Seuil alerte stock

View File

@ -39,9 +39,11 @@ UserWarehouseAutoCreate =Creare uno stock automaticamente durante la creaz
QtyDispatched =Quantità spedita
OrderDispatch =Spedizione dell'ordine
RuleForStockManagement =Regola per gestione delle scorte
DeStockReStockOnBill =Diminuzione / aumento reale delle scorte sulle fatture / note di credito (attenzione, in questa versione, è solo nel magazzino numero 1 che viene modificata)
DeStockReStockOnValidateOrder =Diminuzione / aumento reale delle scorte per ordini note (avviso, in questa versione, è solo nel magazzino numero 1 che viene modificata)
DeStockReStockOnShipment =Diminuzione / aumento reale delle scorte sulla spedizione (Raccomandato)
DeStockOnBill =Diminuzione reale delle scorte sulle fatture / note di credito (attenzione, in questa versione, è solo nel magazzino numero 1 che viene modificata)
DeStockOnValidateOrder =Diminuzione reale delle scorte per ordini note (avviso, in questa versione, è solo nel magazzino numero 1 che viene modificata)
DeStockOnShipment =Diminuzione reale delle scorte sulla spedizione (Raccomandato)
ReStockOnBill =Aumente reale delle scorte sulle fatture / note di credito (attenzione, in questa versione, è solo nel magazzino numero 1 che viene modificata)
ReStockOnValidateOrder =Aumente reale delle scorte per ordini note (avviso, in questa versione, è solo nel magazzino numero 1 che viene modificata)
StockDiffPhysicTeoric =Motivo per la differenza di magazzino fisico e teorico
StockLimitShort =Limite
StockLimit =Magazzino limite per le segnalazioni

View File

@ -97,8 +97,7 @@ $user->rights->produit->creer)
// action recherche des produits par mot-cle et/ou par categorie
if($action == 'search' )
{
#$sql = 'SELECT p.rowid, p.ref, p.label, p.price, p.fk_product_type';
$sql = 'SELECT p.rowid, p.ref, p.label, p.price';
$sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.price';
$sql.= ' FROM '.MAIN_DB_PREFIX.'product as p';
$sql.= ' left join '.MAIN_DB_PREFIX.'categorie_product as cp on p.rowid=cp.fk_product';
$sql.= " WHERE 1=1";

View File

@ -48,6 +48,8 @@ class MouvementStock
*/
function _create($user, $fk_product, $entrepot_id, $qty, $type, $price=0)
{
global $conf;
$error = 0;
dolibarr_syslog("MouvementStock::_Create $user->id, $fk_product, $entrepot_id, $qty, $type, $price");
@ -132,7 +134,10 @@ class MouvementStock
}
// Add movement for sub products
$error = $this->_createSubProduct($user, $fk_product, $entrepot_id, $qty, $type, $price=0);
if ($conf->global->PRODUIT_SOUSPRODUITS)
{
$error = $this->_createSubProduct($user, $fk_product, $entrepot_id, $qty, $type, $price=0);
}
if ($error == 0)
{
@ -150,13 +155,14 @@ class MouvementStock
/**
* \brief Crée un mouvement en base pour tous les sous-produits
* \brief Cr<EFBFBD>e un mouvement en base pour tous les sous-produits
* \return int <0 si ko, 0 si ok
*/
function _createSubProduct($user, $idProduct, $entrepot_id, $qty, $type, $price=0)
{
$error = 0;
$pids = array();
$pqtys = array();
$sql = "SELECT fk_product_pere, fk_product_fils, qty";
$sql.= " FROM ".MAIN_DB_PREFIX."product_association";
@ -166,9 +172,12 @@ class MouvementStock
$resql=$this->db->query($sql);
if ($resql)
{
$i=0;
while ($obj=$this->db->fetch_object($resql))
{
$pids[]=$obj->fk_product_fils;
{
$pids[$i]=$obj->fk_product_fils;
$pqtys[$i]=$obj->qty;
$i++;
}
$this->db->free($resql);
}
@ -179,9 +188,9 @@ class MouvementStock
}
// Create movement for each subproduct
foreach($pids as $pid)
foreach($pids as $key => $value)
{
$this->_create($user, $pid, $entrepot_id, $qty, $type, $price);
$this->_create($user, $pids[$key], $entrepot_id, $pqtys[$key], $type, $price);
}
return $error;
@ -293,7 +302,7 @@ class MouvementStock
* \brief ???
* \param mvid int Id du mouvement
* \param fk_product int Id produit
* \param qty float Quantité
* \param qty float Quantit<EFBFBD>
* \param price float Prix unitaire du produit
* \param value_ope float Valeur du mouvement en retour
* \return int <0 si ko, 0 si ok

View File

@ -914,19 +914,22 @@ class Societe extends CommonObject
}
/**
* \brief D<EFBFBD>finit la soci<EFBFBD>t<EFBFBD> comme un client
*
* \brief Define third party as a customer
* \return int <0 if KO, >0 if OK
*/
function set_as_client()
{
if ($this->id)
{
$sql = "UPDATE ".MAIN_DB_PREFIX."societe ";
$sql .= " SET client = 1";
$sql .= " WHERE rowid = " . $this->id .";";
$sql = "UPDATE ".MAIN_DB_PREFIX."societe";
$sql.= " SET client = 1";
$sql.= " WHERE rowid = " . $this->id;
return $this->db->query($sql);
$resql=$this->db->query($sql);
if ($resql) return 1;
else return -1;
}
return 0;
}
/**