mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2026-02-07 16:41:48 +01:00
Maxi debug of stock management.
This commit is contained in:
@@ -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<EFBFBD>ation si l'option "stock personnel" est d<EFBFBD>sactiv<EFBFBD>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<63>t<EFBFBD> rattach<63>e comme client
|
||||
// Define third party as a customer
|
||||
$result=$this->client->set_as_client();
|
||||
|
||||
// Si activ<69> on d<>cr<63>mente le produit principal et ses composants <20> 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<69> 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<69> 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<EFBFBD>e,
|
||||
//! TODO Ce statut doit etre 2 et non 1 class<EFBFBD>e pay<EFBFBD>e partiellement (close_code='discount_vat','badcustomer') ou compl<EFBFBD>tement (close_code=null),
|
||||
//! TODO Ce statut doit etre 2 et non 1 class<EFBFBD>e abandonn<EFBFBD>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<EFBFBD>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<63>s base de donn<6E>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<EFBFBD>ation de la facture en base
|
||||
* \param user object utilisateur qui cr<EFBFBD>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 <20> jour prix
|
||||
// Update total price
|
||||
if ($this->update_price() > 0)
|
||||
{
|
||||
$this->db->commit();
|
||||
@@ -168,8 +168,8 @@ class FactureFournisseur extends Facture
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Recup<75>re l'objet facture et ses lignes de factures
|
||||
* \param rowid id de la facture a r<>cup<75>rer
|
||||
* \brief Recup<75>re l'objet facture et ses lignes de factures
|
||||
* \param rowid id de la facture a r<>cup<75>rer
|
||||
* \return int >0 si ok, <0 si ko
|
||||
*/
|
||||
function fetch($rowid)
|
||||
@@ -250,7 +250,7 @@ class FactureFournisseur extends Facture
|
||||
|
||||
|
||||
/**
|
||||
\brief Recup<75>re les lignes de factures dans this->lignes
|
||||
\brief Recup<75>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<75>re l'objet fournisseur li<6C> <20> la facture
|
||||
* \brief Recup<75>re l'objet fournisseur li<6C> <20> la facture
|
||||
*
|
||||
*/
|
||||
function fetch_fournisseur()
|
||||
@@ -319,7 +319,7 @@ class FactureFournisseur extends Facture
|
||||
|
||||
/**
|
||||
* \brief Supprime la facture
|
||||
* \param rowid id de la facture <20> supprimer
|
||||
* \param rowid id de la facture <20> supprimer
|
||||
*/
|
||||
function delete($rowid)
|
||||
{
|
||||
@@ -355,8 +355,8 @@ class FactureFournisseur extends Facture
|
||||
|
||||
|
||||
/**
|
||||
* \brief Tag la facture comme pay<61>e compl<70>tement
|
||||
* \param user Objet utilisateur qui modifie l'<27>tat
|
||||
* \brief Tag la facture comme pay<61>e compl<70>tement
|
||||
* \param user Objet utilisateur qui modifie l'<27>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<EFBFBD>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<63> <20> aucun produit/service pr<70>d<EFBFBD>fini)
|
||||
* \brief Ajoute une ligne de facture (associ<63> <20> aucun produit/service pr<70>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<72>, sinon -1
|
||||
* \param qty Quantit<69>
|
||||
* \param fk_product Id du produit/service pred<65>fini
|
||||
* \param txtva Taux de tva forc<72>, sinon -1
|
||||
* \param qty Quantit<69>
|
||||
* \param fk_product Id du produit/service pred<65>fini
|
||||
* \param remise_percent Pourcentage de remise de la ligne
|
||||
* \param date_start Date de debut de validit<69> du service
|
||||
* \param date_end Date de fin de validit<69> du service
|
||||
* \param date_start Date de debut de validit<69> du service
|
||||
* \param date_end Date de fin de validit<69> 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<6E> 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<6E> etre juste et avec valeurs finales a l'appel
|
||||
* de cette methode. Aussi, pour le taux tva, il doit deja avoir ete d<>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<61>tres
|
||||
// Nettoyage param<61>tres
|
||||
if ($txtva == '') $txtva=0;
|
||||
$txtva=price2num($txtva);
|
||||
|
||||
@@ -475,12 +502,12 @@ class FactureFournisseur extends Facture
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Mets <20> jour une ligne de facture
|
||||
* \brief Mets <20> 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<69>
|
||||
* \param qty Quantit<69>
|
||||
* \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<EFBFBD>e
|
||||
//$this->date_validation = $obj->datev; \todo La date de validation n'est pas encore g<>r<EFBFBD>e
|
||||
}
|
||||
$this->db->free($result);
|
||||
}
|
||||
@@ -666,14 +693,14 @@ class FactureFournisseur extends Facture
|
||||
|
||||
|
||||
/**
|
||||
* \brief Initialise la facture avec valeurs fictives al<61>atoire
|
||||
* Sert <20> g<>n<EFBFBD>rer une facture pour l'aperu des mod<6F>les ou demo
|
||||
* \brief Initialise la facture avec valeurs fictives al<61>atoire
|
||||
* Sert <20> g<>n<EFBFBD>rer une facture pour l'aperu des mod<6F>les ou demo
|
||||
*/
|
||||
function initAsSpecimen()
|
||||
{
|
||||
global $user,$langs;
|
||||
|
||||
// Charge tableau des id de soci<63>t<EFBFBD> socids
|
||||
// Charge tableau des id de soci<63>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<61>tres
|
||||
// Initialise param<61>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<6C> 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<6F>ticamente en la creaci<63>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<6E>os
|
||||
DeStockOnBill=Decrementar las existencias con las facturas/abonos
|
||||
DeStockOnValidateOrder=Decrementar las existencias en los pedidos
|
||||
DeStockOnShipment=Decrementar los stocks en los env<6E>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<63>mentations de stock
|
||||
RuleForStockManagementIncrease=R<>gle de gestion des incr<63>mentations de stock
|
||||
DeStockReStockOnBill=D<>cr<63>mente/Incr<63>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<63>mente/Incr<63>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<63>mente/Incr<63>mente les stocks physiques sur les exp<78>ditions (recommand<6E>)
|
||||
DeStockOnBill=D<>cr<63>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<63>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<63>mente les stocks physiques sur les exp<78>ditions (recommand<6E>)
|
||||
ReStockOnBill=Incr<63>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<63>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 <20>cart stock physique-th<74>orique
|
||||
StockLimitShort=Seuil
|
||||
StockLimit=Seuil alerte stock
|
||||
|
||||
@@ -39,9 +39,11 @@ UserWarehouseAutoCreate =Creare uno stock automaticamente durante la creaz
|
||||
QtyDispatched =Quantit<69> 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, <20> solo nel magazzino numero 1 che viene modificata)
|
||||
DeStockReStockOnValidateOrder =Diminuzione / aumento reale delle scorte per ordini note (avviso, in questa versione, <20> 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, <20> solo nel magazzino numero 1 che viene modificata)
|
||||
DeStockOnValidateOrder =Diminuzione reale delle scorte per ordini note (avviso, in questa versione, <20> 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, <20> solo nel magazzino numero 1 che viene modificata)
|
||||
ReStockOnValidateOrder =Aumente reale delle scorte per ordini note (avviso, in questa versione, <20> 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<43>e un mouvement en base pour tous les sous-produits
|
||||
* \brief Cr<43>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<69>
|
||||
* \param qty float Quantit<69>
|
||||
* \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<63>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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user