Maxi debug of stock management.
This commit is contained in:
parent
f2746207c4
commit
fc0ebfa9b5
@ -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>';
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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++;
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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";
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user