diff --git a/ChangeLog b/ChangeLog
index c567d47a9bc..ed4498c342a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -162,7 +162,8 @@ Dolibarr better:
creation of a pdf or odt, hook "afterPDFCreation" or "afterODTCreation" must be used instead.
- A lot of pages called fiche.php were renamed into card.php
- A lot of pages called liste.php were renamed into list.php
-
+- If you used warehouse/stock module, recheck setup of stock increase/decrease rules of the
+ warehouse module and your Point Of Sale module if you use one.
***** ChangeLog for 3.6.2 compared to 3.6.1 *****
diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php
index fd3f74c06c2..9ce93a6bc26 100644
--- a/htdocs/admin/modules.php
+++ b/htdocs/admin/modules.php
@@ -534,7 +534,7 @@ dol_fiche_end();
// Show warning about external users
-if ($mode != 'marketplace') print '
';
diff --git a/htdocs/cashdesk/css/style.css b/htdocs/cashdesk/css/style.css
index 0972527a73b..f62a9193830 100644
--- a/htdocs/cashdesk/css/style.css
+++ b/htdocs/cashdesk/css/style.css
@@ -222,6 +222,7 @@ p.titre {
margin: 0 15px;
padding: 0;
max-width: 500px;
+ width: 100%;
}
.titre1 {
@@ -308,7 +309,7 @@ p.titre {
}
.texte_ref {
- width: 80px;
+ min-width: 150px;
}
.texte1,.texte1_off {
@@ -321,8 +322,8 @@ p.titre {
/* ------------------- */
.textarea_note {
- width: 300px;
- height: 150px;
+ width: 100%;
+ height: 50px;
padding: 2px 2px;
}
@@ -362,7 +363,7 @@ p.titre {
}
.resume_label,.note_label {
- width: 200px;
+ min-width: 200px;
font-weight: bold;
font-size: 1.1em;
}
diff --git a/htdocs/cashdesk/facturation_verif.php b/htdocs/cashdesk/facturation_verif.php
index 42e1c00f651..8953f7b0ccc 100644
--- a/htdocs/cashdesk/facturation_verif.php
+++ b/htdocs/cashdesk/facturation_verif.php
@@ -137,16 +137,17 @@ switch ( $_GET['action'] )
case 'ajout_article': // We have clicked on button "Add product"
- //var_dump($obj_facturation);
+ //var_dump('ajout_article');
//exit;
- if (! empty($obj_facturation->id)) // A product has been selected and stored in session
+ if (! empty($obj_facturation->id)) // A product was previously selected and stored in session, so we can add it
{
$obj_facturation->qte($_POST['txtQte']);
$obj_facturation->tva($_POST['selTva']);
$obj_facturation->remisePercent($_POST['txtRemise']);
- $obj_facturation->ajoutArticle();
-
+ $obj_facturation->ajoutArticle(); // This add an entry into $_SESSION['poscart']
+ // We update prixTotalTtc
+
}
$redirection = DOL_URL_ROOT.'/cashdesk/affIndex.php?menu=facturation';
@@ -160,7 +161,7 @@ switch ( $_GET['action'] )
}
-
+// We saved object obj_facturation
$_SESSION['serObjFacturation'] = serialize($obj_facturation);
header('Location: '.$redirection);
diff --git a/htdocs/cashdesk/include/environnement.php b/htdocs/cashdesk/include/environnement.php
index f0545181ff0..7411b998272 100644
--- a/htdocs/cashdesk/include/environnement.php
+++ b/htdocs/cashdesk/include/environnement.php
@@ -32,6 +32,7 @@ $conf_db_base = $dolibarr_main_db_name;
$conf_fksoc = (! empty($_SESSION["CASHDESK_ID_THIRDPARTY"]))?$_SESSION["CASHDESK_ID_THIRDPARTY"]:($conf->global->CASHDESK_ID_THIRDPARTY>0?$conf->global->CASHDESK_ID_THIRDPARTY:0);
// Identifiant unique correspondant a l'entrepot a utiliser
$conf_fkentrepot = (! empty($_SESSION["CASHDESK_ID_WAREHOUSE"]))?$_SESSION["CASHDESK_ID_WAREHOUSE"]:($conf->global->CASHDESK_ID_WAREHOUSE>0?$conf->global->CASHDESK_ID_WAREHOUSE:0);
+if (! empty($conf->global->CASHDESK_NO_DECREASE_STOCK)) $conf_fkentrepot = 0; // If option to disable stock decrease is on, we set warehouse id to 0.
// Identifiant unique correspondant au compte caisse / liquide
$conf_fkaccount_cash = (! empty($_SESSION["CASHDESK_ID_BANKACCOUNT_CASH"]))?$_SESSION["CASHDESK_ID_BANKACCOUNT_CASH"]:($conf->global->CASHDESK_ID_BANKACCOUNT_CASH>0?$conf->global->CASHDESK_ID_BANKACCOUNT_CASH:0);
diff --git a/htdocs/cashdesk/index.php b/htdocs/cashdesk/index.php
index a2eb40f2932..fa1c6723d20 100644
--- a/htdocs/cashdesk/index.php
+++ b/htdocs/cashdesk/index.php
@@ -99,16 +99,15 @@ print $form->select_company(GETPOST('socid','int')?GETPOST('socid','int'):$conf-
print '';
print "\n";
-if (! empty($conf->stock->enabled))
+if (! empty($conf->stock->enabled) && empty($conf->global->CASHDESK_NO_DECREASE_STOCK))
{
$langs->load("stocks");
print "
";
print '
'.$langs->trans("Warehouse").'
';
print '
';
$disabled=0;
- if (! empty($conf->global->CASHDESK_ID_WAREHOUSE)) $disabled=1; // If a particular stock is defined, we disable choice
- print $formproduct->selectWarehouses((GETPOST('warehouseid')?GETPOST('warehouseid'):(empty($conf->global->CASHDESK_ID_WAREHOUSE)?'ifone':$conf->global->CASHDESK_ID_WAREHOUSE)),'warehouseid','',!$disabled,$disabled);
- //print '';
+ if ($conf->global->CASHDESK_ID_WAREHOUSE > 0) $disabled=1; // If a particular stock is defined, we disable choice
+ print $formproduct->selectWarehouses((GETPOST('warehouseid')?GETPOST('warehouseid','int'):(empty($conf->global->CASHDESK_ID_WAREHOUSE)?'ifone':$conf->global->CASHDESK_ID_WAREHOUSE)),'warehouseid','',!$disabled,$disabled);
print '
diff --git a/htdocs/cashdesk/validation_verif.php b/htdocs/cashdesk/validation_verif.php
index 173c1894555..fa943acda96 100644
--- a/htdocs/cashdesk/validation_verif.php
+++ b/htdocs/cashdesk/validation_verif.php
@@ -218,7 +218,33 @@ switch ($action)
$resultcreate=$invoice->create($user,0,dol_stringtotime($obj_facturation->paiementLe()));
if ($resultcreate > 0)
{
- $resultvalid=$invoice->validate($user, $obj_facturation->numInvoice(), (isset($_SESSION["CASHDESK_ID_WAREHOUSE"])?$_SESSION["CASHDESK_ID_WAREHOUSE"]:0));
+ $warehouseidtodecrease=(isset($_SESSION["CASHDESK_ID_WAREHOUSE"])?$_SESSION["CASHDESK_ID_WAREHOUSE"]:0);
+ if (! empty($conf->global->CASHDESK_NO_DECREASE_STOCK)) $warehouseidtodecrease=0; // If a particular stock is defined, we disable choice
+
+ $resultvalid=$invoice->validate($user, $obj_facturation->numInvoice(), 0);
+
+ if ($warehouseidtodecrease > 0)
+ {
+ // Decrease
+ require_once DOL_DOCUMENT_ROOT.'/product/stock/class/mouvementstock.class.php';
+ $langs->load("agenda");
+ // Loop on each line
+ $cpt=count($invoice->lines);
+ for ($i = 0; $i < $cpt; $i++)
+ {
+ if ($invoice->lines[$i]->fk_product > 0)
+ {
+ $mouvP = new MouvementStock($db);
+ $mouvP->origin = &$invoice;
+ // We decrease stock for product
+ if ($invoice->type == $invoice::TYPE_CREDIT_NOTE) $result=$mouvP->reception($user, $invoice->lines[$i]->fk_product, $warehouseidtodecrease, $invoice->lines[$i]->qty, $invoice->lines[$i]->subprice, $langs->trans("InvoiceValidatedInDolibarrFromPos",$invoice->newref));
+ else $result=$mouvP->livraison($user, $invoice->lines[$i]->fk_product, $warehouseidtodecrease, $invoice->lines[$i]->qty, $invoice->lines[$i]->subprice, $langs->trans("InvoiceValidatedInDolibarrFromPos",$invoice->newref));
+ if ($result < 0) {
+ $error++;
+ }
+ }
+ }
+ }
}
else
{
@@ -232,7 +258,33 @@ switch ($action)
$resultcreate=$invoice->create($user,0,0);
if ($resultcreate > 0)
{
- $resultvalid=$invoice->validate($user, $obj_facturation->numInvoice(), (isset($_SESSION["CASHDESK_ID_WAREHOUSE"])?$_SESSION["CASHDESK_ID_WAREHOUSE"]:0));
+ $warehouseidtodecrease=(isset($_SESSION["CASHDESK_ID_WAREHOUSE"])?$_SESSION["CASHDESK_ID_WAREHOUSE"]:0);
+ if (! empty($conf->global->CASHDESK_NO_DECREASE_STOCK)) $warehouseidtodecrease=0; // If a particular stock is defined, we disable choice
+
+ $resultvalid=$invoice->validate($user, $obj_facturation->numInvoice(), 0);
+
+ if ($warehouseidtodecrease > 0)
+ {
+ // Decrease
+ require_once DOL_DOCUMENT_ROOT.'/product/stock/class/mouvementstock.class.php';
+ $langs->load("agenda");
+ // Loop on each line
+ $cpt=count($invoice->lines);
+ for ($i = 0; $i < $cpt; $i++)
+ {
+ if ($invoice->lines[$i]->fk_product > 0)
+ {
+ $mouvP = new MouvementStock($db);
+ $mouvP->origin = &$invoice;
+ // We decrease stock for product
+ if ($invoice->type == $invoice::TYPE_CREDIT_NOTE) $result=$mouvP->reception($user, $invoice->lines[$i]->fk_product, $warehouseidtodecrease, $invoice->lines[$i]->qty, $invoice->lines[$i]->subprice, $langs->trans("InvoiceValidatedInDolibarrFromPos",$invoice->newref));
+ else $result=$mouvP->livraison($user, $invoice->lines[$i]->fk_product, $warehouseidtodecrease, $invoice->lines[$i]->qty, $invoice->lines[$i]->subprice, $langs->trans("InvoiceValidatedInDolibarrFromPos",$invoice->newref));
+ if ($result < 0) {
+ $error++;
+ }
+ }
+ }
+ }
$id = $invoice->id;
diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php
index 15a74483411..ca4c27bfdbc 100644
--- a/htdocs/comm/mailing/card.php
+++ b/htdocs/comm/mailing/card.php
@@ -94,6 +94,13 @@ $object->substitutionarrayfortest=array(
//,'__PERSONALIZED__' => 'TESTPersonalized' // Not used yet
);
+// List of sending methods
+$listofmethods=array();
+$listofmethods['mail']='PHP mail function';
+//$listofmethods['simplemail']='Simplemail class';
+$listofmethods['smtps']='SMTP/SMTPS socket library';
+
+
/*
* Actions
@@ -741,10 +748,21 @@ else
{
// Define message to recommand from command line
- // Pour des raisons de securite, on ne permet pas cette fonction via l'IHM,
- // on affiche donc juste un message
+ $sendingmode=$conf->global->MAIN_MAIL_SENDMODE;
+ if (empty($sendingmode)) $sendingmode='mail'; // If not defined, we use php mail function
- if (empty($conf->global->MAILING_LIMIT_SENDBYWEB))
+ if (! empty($conf->global->MAILING_NO_USING_PHPMAIL) && $sendingmode == 'mail')
+ {
+ // EMailing feature may be a spam problem, so when you host several users/instance, having this option may force each user to use their own SMTP agent.
+ // You ensure that every user is using its own SMTP server.
+ $linktoadminemailbefore='';
+ $linktoadminemailend='';
+ setEventMessage($langs->trans("MailSendSetupIs", $listofmethods[$sendingmode]), 'warnings');
+ setEventMessage($langs->trans("MailSendSetupIs2", $linktoadminemailbefore, $linktoadminemailend, $langs->transnoentitiesnoconv("MAIN_MAIL_SENDMODE"), $listofmethods['smtps']), 'warnings');
+ if (! empty($conf->global->MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS)) setEventMessage($langs->trans("MailSendSetupIs3", $conf->global->MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS), 'warnings');
+ $_GET["action"]='';
+ }
+ else if (empty($conf->global->MAILING_LIMIT_SENDBYWEB))
{
// Pour des raisons de securite, on ne permet pas cette fonction via l'IHM,
// on affiche donc juste un message
@@ -764,7 +782,7 @@ else
}
$text.=$langs->trans('ConfirmSendingEmailing').' ';
$text.=$langs->trans('LimitSendingEmailing',$conf->global->MAILING_LIMIT_SENDBYWEB);
- print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id,$langs->trans('SendMailing'),$text,'sendallconfirmed',$formquestion,'',1,260);
+ print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id,$langs->trans('SendMailing'),$text,'sendallconfirmed',$formquestion,'',1,270);
}
}
diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php
index 49d2f1befa2..75f2399017b 100644
--- a/htdocs/comm/mailing/cibles.php
+++ b/htdocs/comm/mailing/cibles.php
@@ -276,7 +276,8 @@ if ($object->fetch($id) >= 0)
$obj = new $classname($db);
- $qualified=1;
+ // Check dependencies
+ $qualified=(isset($obj->enabled)?$obj->enabled:1);
foreach ($obj->require_module as $key)
{
if (! $conf->$key->enabled || (! $user->admin && $obj->require_admin))
diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php
index a6877ad9ed8..b924b059bfd 100644
--- a/htdocs/compta/facture/class/facture.class.php
+++ b/htdocs/compta/facture/class/facture.class.php
@@ -1600,7 +1600,7 @@ class Facture extends CommonInvoice
*
* @param User $user Object user that validate
* @param string $force_number Reference to force on invoice
- * @param int $idwarehouse Id of warehouse to use for stock decrease
+ * @param int $idwarehouse Id of warehouse to use for stock decrease if option to decreasenon stock is on (0=no decrease)
* @param int $notrigger 1=Does not execute triggers, 0= execuete triggers
* @return int <0 if KO, >0 if OK
*/
@@ -1728,7 +1728,7 @@ class Facture extends CommonInvoice
$result=$this->client->set_as_client();
// Si active on decremente le produit principal et ses composants a la validation de facture
- if ($this->type != self::TYPE_DEPOSIT && $result >= 0 && ! empty($conf->stock->enabled) && ! empty($conf->global->STOCK_CALCULATE_ON_BILL))
+ if ($this->type != self::TYPE_DEPOSIT && $result >= 0 && ! empty($conf->stock->enabled) && ! empty($conf->global->STOCK_CALCULATE_ON_BILL) && $idwarehouse > 0)
{
require_once DOL_DOCUMENT_ROOT.'/product/stock/class/mouvementstock.class.php';
$langs->load("agenda");
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index 87ee2f1a1d2..1b0438bdea1 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -3016,30 +3016,33 @@ abstract class CommonObject
$marginInfo = $this->getMarginInfos($force_price);
- print $langs->trans('ShowMarginInfos').' : ';
- $hidemargininfos = $_COOKIE['DOLUSER_MARGININFO_HIDE_SHOW'];
- print ''.img_picto($langs->trans("Disabled"),'switch_off').'';
- print ''.img_picto($langs->trans("Enabled"),'switch_on').'';
+ if (! empty($conf->global->MARGIN_ADD_SHOWHIDE_BUTTON)) // FIXME Warning this feature rely on an external js file that may be removed. Using native js function document.cookie should be better
+ {
+ print $langs->trans('ShowMarginInfos').' : ';
+ $hidemargininfos = $_COOKIE['DOLUSER_MARGININFO_HIDE_SHOW'];
+ print ''.img_picto($langs->trans("Disabled"),'switch_off').'';
+ print ''.img_picto($langs->trans("Enabled"),'switch_on').'';
- print '';
- if (!empty($hidemargininfos)) print '';
-
- print '
';
if ($conf->global->MARGIN_TYPE == "1")
- print '
'.$langs->trans('BuyingPrice').'
';
+ print '
'.$langs->trans('BuyingPrice').'
';
else
- print '
'.$langs->trans('CostPrice').'
';
- print '
'.$langs->trans('Margin').'
';
+ print '
'.$langs->trans('CostPrice').'
';
+ print '
'.$langs->trans('Margin').'
';
if (! empty($conf->global->DISPLAY_MARGIN_RATES))
- print '
'.$langs->trans('MarginRate').'
';
+ print '
'.$langs->trans('MarginRate').'
';
if (! empty($conf->global->DISPLAY_MARK_RATES))
- print '
'.$langs->trans('MarkRate').'
';
+ print '
'.$langs->trans('MarkRate').'
';
print '
';
if (! empty($conf->product->enabled))
diff --git a/htdocs/core/class/html.formadmin.class.php b/htdocs/core/class/html.formadmin.class.php
index 042474781d7..30ecadedb55 100644
--- a/htdocs/core/class/html.formadmin.class.php
+++ b/htdocs/core/class/html.formadmin.class.php
@@ -53,9 +53,10 @@ class FormAdmin
* @param array $filter Array of keys to exclude in list
* @param int $showempty Add empty value
* @param int $showwarning Show a warning if language is not complete
+ * @param int $disabled Disable edit of select
* @return string Return HTML select string with list of languages
*/
- function select_language($selected='',$htmlname='lang_id',$showauto=0,$filter=0,$showempty=0,$showwarning=0)
+ function select_language($selected='',$htmlname='lang_id',$showauto=0,$filter=0,$showempty=0,$showwarning=0,$disabled=0)
{
global $langs;
@@ -63,7 +64,7 @@ class FormAdmin
$out='';
- $out.= '
';
if ($user->admin) print info_admin($langs->trans("WarningOnlyPermissionOfActivatedModules"), 0, 1).' ';
// Show warning about external users
-if (empty($user->societe_id)) print showModulesExludedForExternal($modules).'