diff --git a/htdocs/commissions/admin/commissions.php b/htdocs/commissions/admin/commissions.php
index 66911efc924..e14b97b35b2 100644
--- a/htdocs/commissions/admin/commissions.php
+++ b/htdocs/commissions/admin/commissions.php
@@ -24,8 +24,11 @@
include '../../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/commissions/lib/commissions.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
+require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php');
+require_once(DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php");
$langs->load("admin");
+$langs->load("bills");
$langs->load("commissions");
if (! $user->admin) accessforbidden();
@@ -68,6 +71,17 @@ if (GETPOST('serviceCommissionRate'))
}
}
+if (GETPOST('AGENT_CONTACT_TYPE'))
+{
+ if (dolibarr_set_const($db, 'AGENT_CONTACT_TYPE', GETPOST('AGENT_CONTACT_TYPE'), 'chaine', 0, '', $conf->entity) > 0)
+ {
+ $conf->global->AGENT_CONTACT_TYPE = GETPOST('AGENT_CONTACT_TYPE');
+ }
+ else
+ {
+ dol_print_error($db);
+ }
+}
/*
* View
@@ -145,6 +159,18 @@ print '';
print '
'.$langs->trans('ServiceCommissionRateDetails').' ';
print '';
+// INTERNAL CONTACT TYPE USED AS COMMERCIAL AGENT
+$var=!$var;
+print '';
+print ''.$langs->trans("AgentContactType").' ';
+print '';
+$formcompany = new FormCompany($db);
+$facture = new Facture($db);
+print $formcompany->selectTypeContact($facture, $conf->global->AGENT_CONTACT_TYPE, "AGENT_CONTACT_TYPE","internal","code",1);
+print ' ';
+print ''.$langs->trans('AgentContactTypeDetails').' ';
+print ' ';
+
$var=!$var;
print '';
print '';
@@ -152,7 +178,6 @@ print ' ';
print ' ';
print ' ';
-
print '';
print ' ';
diff --git a/htdocs/commissions/index.php b/htdocs/commissions/index.php
index 0a9c37abb4b..4a68cb8bbd1 100644
--- a/htdocs/commissions/index.php
+++ b/htdocs/commissions/index.php
@@ -134,44 +134,52 @@ print '';
print "";
print '';
-$sql = "SELECT distinct s.nom, s.rowid as socid, s.code_client, s.client, sc.fk_user as agent,";
+$sql = "SELECT s.nom, s.rowid as socid, s.code_client, s.client, sc.fk_user as agent,";
$sql.= " u.login,";
-$sql.= " f.facnumber, f.total as total_ht,";
if ($conf->global->COMMISSION_BASE == "MARGIN") {
$sql.= " sum(case d.product_type when 1 then 0 else (((d.subprice * (1 - d.remise_percent / 100)) - d.buy_price_ht) * d.qty) end) as productBase," ;
- $sql.= " sum(case d.product_type when 1 then (((d.subprice * (1 - d.remise_percent / 100)) - d.buy_price_ht) * d.qty) else 0 end) as serviceBase," ;
+ $sql.= " sum(case d.product_type when 1 then (((d.subprice * (1 - d.remise_percent / 100)) - d.buy_price_ht) * d.qty) else 0 end) as serviceBase" ;
}
elseif ($conf->global->COMMISSION_BASE == "TURNOVER") {
$sql.= " sum(case d.product_type when 1 then 0 else (((d.subprice * (1 - d.remise_percent / 100))) * d.qty) end) as productBase," ;
- $sql.= " sum(case d.product_type when 1 then (((d.subprice * (1 - d.remise_percent / 100))) * d.qty) else 0 end) as serviceBase," ;
+ $sql.= " sum(case d.product_type when 1 then (((d.subprice * (1 - d.remise_percent / 100))) * d.qty) else 0 end) as serviceBase" ;
}
-$sql.= " f.datef, f.paye, f.fk_statut as statut, f.rowid as facid";
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
$sql.= ", ".MAIN_DB_PREFIX."facture as f";
+$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."element_contact e ON e.element_id = f.rowid and e.statut = 4 and e.fk_c_type_contact = ".(empty($conf->global->AGENT_CONTACT_TYPE)?-1:$conf->global->AGENT_CONTACT_TYPE);
$sql.= ", ".MAIN_DB_PREFIX."facturedet as d";
$sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql.= ", ".MAIN_DB_PREFIX."user as u";
$sql.= " WHERE f.fk_soc = s.rowid";
$sql.= " AND sc.fk_soc = f.fk_soc";
-$sql.= " AND sc.fk_user = u.rowid";
+if (! empty($conf->global->AGENT_CONTACT_TYPE))
+ $sql.= " AND ((e.fk_socpeople IS NULL AND sc.fk_user = u.rowid) OR (e.fk_socpeople IS NOT NULL AND e.fk_socpeople = u.rowid))";
+else
+ $sql .= " AND sc.fk_user = u.rowid";
if (GETPOST('unpayed') == 'on')
$sql.= " AND f.fk_statut > 0";
else
$sql.= " AND f.fk_statut > 1";
$sql.= " AND s.entity = ".$conf->entity;
$sql.= " AND d.fk_facture = f.rowid";
-if ($agentid > 0)
- $sql.= " AND sc.fk_user = $agentid";
+if ($agentid > 0) {
+ if (! empty($conf->global->AGENT_CONTACT_TYPE))
+ $sql.= " AND ((e.fk_socpeople IS NULL AND sc.fk_user = ".$agentid.") OR (e.fk_socpeople IS NOT NULL AND e.fk_socpeople = ".$agentid."))";
+ else
+ $sql .= " AND sc.fk_user = ".$agentid;
+}
if (!empty($startdate))
$sql.= " AND f.datef >= '".$startdate."'";
if (!empty($enddate))
$sql.= " AND f.datef <= '".$enddate."'";
+if ($conf->global->COMMISSION_BASE == "MARGIN")
+ $sql .= " AND d.buy_price_ht IS NOT NULL";
if (($conf->global->COMMISSION_BASE == "MARGIN") && isset($conf->global->ForceBuyingPriceIfNull) && $conf->global->ForceBuyingPriceIfNull == 1)
$sql .= " AND d.buy_price_ht <> 0";
if ($agentid > 0)
$sql.= " GROUP BY s.rowid";
else
- $sql.= " GROUP BY sc.fk_user";
+ $sql.= " GROUP BY u.rowid";
$sql.= " ORDER BY $sortfield $sortorder ";
//$sql.= $db->plimit($conf->liste_limit +1, $offset);
@@ -219,6 +227,7 @@ if ($result)
$cumul_base_service = 0;
$cumul_commission_produit = 0;
$cumul_commission_service = 0;
+ $rounding = min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT);
if ($num > 0)
{
$var=True;
@@ -260,22 +269,22 @@ if ($result)
// total commission
print "".price($productCommission + $serviceCommission)." \n";
print "\n";
+
$i++;
- $cumul_base_produit += $productBase;
- $cumul_base_service += $serviceBase;
- $cumul_commission_produit += $productCommission;
- $cumul_commission_service += $serviceCommission;
+
+ $cumul_base_produit += round($productBase, $rounding);
+ $cumul_base_service += round($serviceBase, $rounding);
+ $cumul_commission_produit += round($productCommission, $rounding);
+ $cumul_commission_service += round($serviceCommission, $rounding);
}
}
// affichage totaux commission
$var=!$var;
print '';
- if (! empty($client))
- print '';
- else
- print ' ';
- print $langs->trans('TotalCommission')." ";
+ print '';
+ print $langs->trans('Total');
+ print " ";
// product commission
print "".price($cumul_base_produit)." \n";
print "".price((! empty($conf->global->PRODUCT_COMMISSION_RATE)?$conf->global->PRODUCT_COMMISSION_RATE:0))." \n";
@@ -289,6 +298,7 @@ if ($result)
print " \n";
+ print "";
print "";
}
else
diff --git a/htdocs/langs/en_US/commissions.lang b/htdocs/langs/en_US/commissions.lang
index c7690318142..776f4d0c1a1 100644
--- a/htdocs/langs/en_US/commissions.lang
+++ b/htdocs/langs/en_US/commissions.lang
@@ -38,4 +38,7 @@ CommercialAgent=Commercial agent
StartDate=Start date
EndDate=End date
-Launch=Start
\ No newline at end of file
+Launch=Start
+
+AgentContactType=Contact type used for commissioning
+AgentContactTypeDetails=Défine what contact type (linked on invoices) will be associated with commercial agents
\ No newline at end of file
diff --git a/htdocs/langs/en_US/margins.lang b/htdocs/langs/en_US/margins.lang
index 09775869a45..41203847ba5 100644
--- a/htdocs/langs/en_US/margins.lang
+++ b/htdocs/langs/en_US/margins.lang
@@ -46,4 +46,7 @@ MargeNette=Net margin
MARGIN_TYPE_DETAILS=Raw margin : Selling price - Buying price Net margin : Selling price - Cost price
BuyingCost=Cost price
-UnitCharges=Unit charges
\ No newline at end of file
+UnitCharges=Unit charges
+
+AgentContactType=Contact type used for commissioning
+AgentContactTypeDetails=Défine what contact type (linked on invoices) will be associated with commercial agents
\ No newline at end of file
diff --git a/htdocs/langs/fr_FR/commissions.lang b/htdocs/langs/fr_FR/commissions.lang
index 2ae2aef2332..5fb83f32320 100644
--- a/htdocs/langs/fr_FR/commissions.lang
+++ b/htdocs/langs/fr_FR/commissions.lang
@@ -1,6 +1,7 @@
# Dolibarr language file - fr_FR - commissions
CHARSET=UTF-8
+Module60000Desc=Gestion des commissions
commissionsSetup=Paramétrage de la gestion des commissions
ProductCommissionRate=Taux de commissionnement sur les produits
@@ -37,4 +38,7 @@ CommercialAgent=Agent commercial
StartDate=Date de début
EndDate=Date de fin
-Launch=Démarrer
\ No newline at end of file
+Launch=Démarrer
+
+AgentContactType=Type de contact commissionné
+AgentContactTypeDetails=Permet de définir le type de contact associé aux factures qui sera associé aux agents commerciaux
\ No newline at end of file
diff --git a/htdocs/langs/fr_FR/margins.lang b/htdocs/langs/fr_FR/margins.lang
index a08df30498d..02dfedbbe9a 100644
--- a/htdocs/langs/fr_FR/margins.lang
+++ b/htdocs/langs/fr_FR/margins.lang
@@ -1,6 +1,8 @@
# Dolibarr language file - fr_FR - margins
CHARSET=UTF-8
+Module59000Name=Marges
+Module59000Desc=Gestion des marges commerciales
Margin=Marge
Margins=Marges
TotalMargin=Marge totale
@@ -45,3 +47,6 @@ MARGIN_TYPE_DETAILS=Marge brute : Prix de vente HT - Prix d'achat HT Marge n
BuyingCost=Coût de revient
UnitCharges=Charge unitaire
+
+AgentContactType=Type de contact commissionné
+AgentContactTypeDetails=Permet de définir le type de contact associé aux factures qui sera associé aux agents commerciaux
\ No newline at end of file
diff --git a/htdocs/margin/admin/margin.php b/htdocs/margin/admin/margin.php
index dc401d61f45..963b9289acb 100644
--- a/htdocs/margin/admin/margin.php
+++ b/htdocs/margin/admin/margin.php
@@ -25,8 +25,11 @@ include '../../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/margin/lib/margins.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
+require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php');
+require_once(DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php");
$langs->load("admin");
+$langs->load("bills");
$langs->load("margins");
if (! $user->admin) accessforbidden();
@@ -89,6 +92,18 @@ if ($action == 'typemarges')
}
}
+if ($action == 'contact')
+{
+ if (dolibarr_set_const($db, 'AGENT_CONTACT_TYPE', $_POST['AGENT_CONTACT_TYPE'], 'chaine', 0, '', $conf->entity) > 0)
+ {
+ $conf->global->AGENT_CONTACT_TYPE = $_POST['AGENT_CONTACT_TYPE'];
+ }
+ else
+ {
+ dol_print_error($db);
+ }
+}
+
/*
* View
*/
@@ -244,6 +259,25 @@ print ''.$langs->trans('MARGIN_METHODE_FOR_DISCOUNT_DETAILS').' ';
print '';
print '';
+// INTERNAL CONTACT TYPE USED AS COMMERCIAL AGENT
+$var=!$var;
+print '';
+
print '';
print ' ';
diff --git a/htdocs/margin/agentMargins.php b/htdocs/margin/agentMargins.php
index 5d7e4d389fe..ece6bd192db 100644
--- a/htdocs/margin/agentMargins.php
+++ b/htdocs/margin/agentMargins.php
@@ -118,35 +118,42 @@ if (! empty($conf->global->DISPLAY_MARK_RATES)) {
print "";
print '';
-$sql = "SELECT distinct s.nom, s.rowid as socid, s.code_client, s.client, sc.fk_user as agent,";
+$sql = "SELECT s.nom, s.rowid as socid, s.code_client, s.client, sc.fk_user as agent,";
$sql.= " u.login,";
-$sql.= " f.facnumber, f.total as total_ht,";
$sql.= " sum(d.subprice * d.qty * (1 - d.remise_percent / 100)) as selling_price,";
-$sql.= " sum(d.buy_price_ht * d.qty) as buying_price, sum(((d.subprice * (1 - d.remise_percent / 100)) - d.buy_price_ht) * d.qty) as marge," ;
-$sql.= " f.datef, f.paye, f.fk_statut as statut, f.rowid as facid";
+$sql.= " sum(d.buy_price_ht * d.qty) as buying_price, sum(((d.subprice * (1 - d.remise_percent / 100)) - d.buy_price_ht) * d.qty) as marge" ;
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
$sql.= ", ".MAIN_DB_PREFIX."facture as f";
+$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."element_contact e ON e.element_id = f.rowid and e.statut = 4 and e.fk_c_type_contact = ".(empty($conf->global->AGENT_CONTACT_TYPE)?-1:$conf->global->AGENT_CONTACT_TYPE);
$sql.= ", ".MAIN_DB_PREFIX."facturedet as d";
$sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql.= ", ".MAIN_DB_PREFIX."user as u";
$sql.= " WHERE f.fk_soc = s.rowid";
$sql.= " AND sc.fk_soc = f.fk_soc";
-$sql.= " AND sc.fk_user = u.rowid";
+if (! empty($conf->global->AGENT_CONTACT_TYPE))
+ $sql.= " AND ((e.fk_socpeople IS NULL AND sc.fk_user = u.rowid) OR (e.fk_socpeople IS NOT NULL AND e.fk_socpeople = u.rowid))";
+else
+ $sql .= " AND sc.fk_user = u.rowid";
$sql.= " AND f.fk_statut > 0";
$sql.= " AND s.entity = ".$conf->entity;
$sql.= " AND d.fk_facture = f.rowid";
-if ($agentid > 0)
- $sql.= " AND sc.fk_user = $agentid";
+if ($agentid > 0) {
+ if (! empty($conf->global->AGENT_CONTACT_TYPE))
+ $sql.= " AND ((e.fk_socpeople IS NULL AND sc.fk_user = ".$agentid.") OR (e.fk_socpeople IS NOT NULL AND e.fk_socpeople = ".$agentid."))";
+ else
+ $sql .= " AND sc.fk_user = ".$agentid;
+}
if (!empty($startdate))
$sql.= " AND f.datef >= '".$startdate."'";
if (!empty($enddate))
$sql.= " AND f.datef <= '".$enddate."'";
+$sql .= " AND d.buy_price_ht IS NOT NULL";
if (isset($conf->global->ForceBuyingPriceIfNull) && $conf->global->ForceBuyingPriceIfNull == 1)
$sql .= " AND d.buy_price_ht <> 0";
if ($agentid > 0)
$sql.= " GROUP BY s.rowid";
else
- $sql.= " GROUP BY sc.fk_user";
+ $sql.= " GROUP BY u.rowid";
$sql.= " ORDER BY $sortfield $sortorder ";
$sql.= $db->plimit($conf->liste_limit +1, $offset);
@@ -168,17 +175,19 @@ if ($result)
print_liste_field_titre($langs->trans("CommercialAgent"),$_SERVER["PHP_SELF"],"u.login","","&agentid=".$agentid,'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("SellingPrice"),$_SERVER["PHP_SELF"],"selling_price","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder);
- print_liste_field_titre($langs->trans("BuyingPrice"),$_SERVER["PHP_SELF"],"buyng_price","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("BuyingPrice"),$_SERVER["PHP_SELF"],"buying_price","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Margin"),$_SERVER["PHP_SELF"],"marge","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder);
if (! empty($conf->global->DISPLAY_MARGIN_RATES))
- print_liste_field_titre($langs->trans("MarginRate"),$_SERVER["PHP_SELF"],"d.marge_tx","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("MarginRate"),$_SERVER["PHP_SELF"],"","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder);
if (! empty($conf->global->DISPLAY_MARK_RATES))
- print_liste_field_titre($langs->trans("MarkRate"),$_SERVER["PHP_SELF"],"d.marque_tx","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("MarkRate"),$_SERVER["PHP_SELF"],"","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder);
print "\n";
$cumul_achat = 0;
$cumul_vente = 0;
$cumul_qty = 0;
+ $rounding = min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT);
+
if ($num > 0)
{
$var=true;
@@ -211,9 +220,11 @@ if ($result)
if (! empty($conf->global->DISPLAY_MARK_RATES))
print "".(($markRate === '')?'n/a':price($markRate)."%")." \n";
print "\n";
+
$i++;
- $cumul_achat += $objp->buying_price;
- $cumul_vente += $objp->selling_price;
+
+ $cumul_achat += round($objp->buying_price, $rounding);
+ $cumul_vente += round($objp->selling_price, $rounding);
}
}
@@ -223,11 +234,9 @@ if ($result)
$marginRate = ($cumul_achat != 0)?(100 * round($totalMargin / $cumul_achat, 5)):'';
$markRate = ($cumul_vente != 0)?(100 * round($totalMargin / $cumul_vente, 5)):'';
print '';
- if (! empty($client))
- print '';
- else
- print ' ';
- print $langs->trans('TotalMargin')." ";
+ print '';
+ print $langs->trans('Total');
+ print " ";
print "".price($cumul_vente)." \n";
print "".price($cumul_achat)." \n";
print "".price($totalMargin)." \n";
diff --git a/htdocs/margin/customerMargins.php b/htdocs/margin/customerMargins.php
index 665624ffa53..805b8824267 100644
--- a/htdocs/margin/customerMargins.php
+++ b/htdocs/margin/customerMargins.php
@@ -158,6 +158,7 @@ if (!empty($startdate))
$sql.= " AND f.datef >= '".$startdate."'";
if (!empty($enddate))
$sql.= " AND f.datef <= '".$enddate."'";
+$sql .= " AND d.buy_price_ht IS NOT NULL";
if (isset($conf->global->ForceBuyingPriceIfNull) && $conf->global->ForceBuyingPriceIfNull == 1)
$sql .= " AND d.buy_price_ht <> 0";
if ($client)
@@ -186,17 +187,19 @@ if ($result)
else
print_liste_field_titre($langs->trans("Customer"),$_SERVER["PHP_SELF"],"s.nom","","&socid=".$socid,'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("SellingPrice"),$_SERVER["PHP_SELF"],"selling_price","","&socid=".$socid,'align="right"',$sortfield,$sortorder);
- print_liste_field_titre($langs->trans("BuyingPrice"),$_SERVER["PHP_SELF"],"buyng_price","","&socid=".$socid,'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("BuyingPrice"),$_SERVER["PHP_SELF"],"buying_price","","&socid=".$socid,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Margin"),$_SERVER["PHP_SELF"],"marge","","&socid=".$socid,'align="right"',$sortfield,$sortorder);
if (! empty($conf->global->DISPLAY_MARGIN_RATES))
- print_liste_field_titre($langs->trans("MarginRate"),$_SERVER["PHP_SELF"],"d.marge_tx","","&socid=".$socid,'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("MarginRate"),$_SERVER["PHP_SELF"],"","","&socid=".$socid,'align="right"',$sortfield,$sortorder);
if (! empty($conf->global->DISPLAY_MARK_RATES))
- print_liste_field_titre($langs->trans("MarkRate"),$_SERVER["PHP_SELF"],"d.marque_tx","","&socid=".$socid,'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("MarkRate"),$_SERVER["PHP_SELF"],"","","&socid=".$socid,'align="right"',$sortfield,$sortorder);
print " \n";
$cumul_achat = 0;
$cumul_vente = 0;
$cumul_qty = 0;
+ $rounding = min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT);
+
if ($num > 0)
{
$var=True;
@@ -234,8 +237,8 @@ if ($result)
print "".(($markRate === '')?'n/a':price($markRate)."%")." \n";
print "\n";
$i++;
- $cumul_achat += $objp->buying_price;
- $cumul_vente += $objp->selling_price;
+ $cumul_achat += round($objp->buying_price, $rounding);
+ $cumul_vente += round($objp->selling_price, $rounding);
}
}
diff --git a/htdocs/margin/productMargins.php b/htdocs/margin/productMargins.php
index d91cec567e0..9054e731529 100644
--- a/htdocs/margin/productMargins.php
+++ b/htdocs/margin/productMargins.php
@@ -162,6 +162,7 @@ if (!empty($startdate))
$sql.= " AND f.datef >= '".$startdate."'";
if (!empty($enddate))
$sql.= " AND f.datef <= '".$enddate."'";
+$sql .= " AND d.buy_price_ht IS NOT NULL";
if (isset($conf->global->ForceBuyingPriceIfNull) && $conf->global->ForceBuyingPriceIfNull == 1)
$sql .= " AND d.buy_price_ht <> 0";
if ($id > 0)
@@ -190,17 +191,19 @@ if ($result)
else
print_liste_field_titre($langs->trans("ProductService"),$_SERVER["PHP_SELF"],"p.ref","","&id=".$id,'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("SellingPrice"),$_SERVER["PHP_SELF"],"selling_price","","&id=".$id,'align="right"',$sortfield,$sortorder);
- print_liste_field_titre($langs->trans("BuyingPrice"),$_SERVER["PHP_SELF"],"buyng_price","","&id=".$id,'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("BuyingPrice"),$_SERVER["PHP_SELF"],"buying_price","","&id=".$id,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Margin"),$_SERVER["PHP_SELF"],"marge","","&id=".$id,'align="right"',$sortfield,$sortorder);
if (! empty($conf->global->DISPLAY_MARGIN_RATES))
- print_liste_field_titre($langs->trans("MarginRate"),$_SERVER["PHP_SELF"],"d.marge_tx","","&id=".$id,'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("MarginRate"),$_SERVER["PHP_SELF"],"","","&id=".$id,'align="right"',$sortfield,$sortorder);
if (! empty($conf->global->DISPLAY_MARK_RATES))
- print_liste_field_titre($langs->trans("MarkRate"),$_SERVER["PHP_SELF"],"d.marque_tx","","&id=".$id,'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("MarkRate"),$_SERVER["PHP_SELF"],"","","&id=".$id,'align="right"',$sortfield,$sortorder);
print "\n";
$cumul_achat = 0;
$cumul_vente = 0;
$cumul_qty = 0;
+ $rounding = min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT);
+
if ($num > 0)
{
$var=True;
@@ -241,8 +244,8 @@ if ($result)
print "".(($markRate === '')?'n/a':price($markRate)."%")." \n";
print "\n";
$i++;
- $cumul_achat += $objp->buying_price;
- $cumul_vente += $objp->selling_price;
+ $cumul_achat += round($objp->buying_price, $rounding);
+ $cumul_vente += round($objp->selling_price, $rounding);
}
}
diff --git a/htdocs/margin/tabs/productMargins.php b/htdocs/margin/tabs/productMargins.php
index 646b84fee88..3ca6efee655 100644
--- a/htdocs/margin/tabs/productMargins.php
+++ b/htdocs/margin/tabs/productMargins.php
@@ -142,10 +142,11 @@ if ($id > 0 || ! empty($ref))
$sql.= " AND s.entity = ".$conf->entity;
$sql.= " AND d.fk_facture = f.rowid";
$sql.= " AND d.fk_product =".$object->id;
- if (isset($conf->global->ForceBuyingPriceIfNull) && $conf->global->ForceBuyingPriceIfNull == 1)
- $sql .= " AND d.buy_price_ht <> 0";
if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
if (! empty($socid)) $sql.= " AND f.fk_soc = $socid";
+ $sql .= " AND d.buy_price_ht IS NOT NULL";
+ if (isset($conf->global->ForceBuyingPriceIfNull) && $conf->global->ForceBuyingPriceIfNull == 1)
+ $sql .= " AND d.buy_price_ht <> 0";
$sql.= " ORDER BY $sortfield $sortorder ";
$sql.= $db->plimit($conf->liste_limit +1, $offset);
@@ -165,19 +166,21 @@ if ($id > 0 || ! empty($ref))
print_liste_field_titre($langs->trans("CustomerCode"),$_SERVER["PHP_SELF"],"s.code_client","","&id=".$object->id,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("DateInvoice"),$_SERVER["PHP_SELF"],"f.datef","","&id=".$object->id,'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("SellingPrice"),$_SERVER["PHP_SELF"],"selling_price","","&id=".$object->id,'align="right"',$sortfield,$sortorder);
- print_liste_field_titre($langs->trans("BuyingPrice"),$_SERVER["PHP_SELF"],"buyng_price","","&id=".$object->id,'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("BuyingPrice"),$_SERVER["PHP_SELF"],"buying_price","","&id=".$object->id,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Qty"),$_SERVER["PHP_SELF"],"d.qty","","&id=".$object->id,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Margin"),$_SERVER["PHP_SELF"],"marge","","&id=".$object->id,'align="right"',$sortfield,$sortorder);
if (! empty($conf->global->DISPLAY_MARGIN_RATES))
- print_liste_field_titre($langs->trans("MarginRate"),$_SERVER["PHP_SELF"],"d.marge_tx","","&id=".$object->id,'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("MarginRate"),$_SERVER["PHP_SELF"],"","","&id=".$object->id,'align="right"',$sortfield,$sortorder);
if (! empty($conf->global->DISPLAY_MARK_RATES))
- print_liste_field_titre($langs->trans("MarkRate"),$_SERVER["PHP_SELF"],"d.marque_tx","","&id=".$object->id,'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("MarkRate"),$_SERVER["PHP_SELF"],"","","&id=".$object->id,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"f.paye,f.fk_statut","","&id=".$object->id,'align="right"',$sortfield,$sortorder);
print "\n";
$cumul_achat = 0;
$cumul_vente = 0;
$cumul_qty = 0;
+ $rounding = min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT);
+
if ($num > 0)
{
$var=True;
@@ -209,8 +212,8 @@ if ($id > 0 || ! empty($ref))
print ''.$invoicestatic->LibStatut($objp->paye,$objp->statut,5).' ';
print "\n";
$i++;
- $cumul_achat += $objp->buying_price;
- $cumul_vente += $objp->selling_price;
+ $cumul_achat += round($objp->buying_price, $rounding);
+ $cumul_vente += round($objp->selling_price, $rounding);
$cumul_qty += $objp->qty;
}
}
diff --git a/htdocs/margin/tabs/thirdpartyMargins.php b/htdocs/margin/tabs/thirdpartyMargins.php
index 3689afd240f..65c8d25463d 100644
--- a/htdocs/margin/tabs/thirdpartyMargins.php
+++ b/htdocs/margin/tabs/thirdpartyMargins.php
@@ -138,6 +138,7 @@ if ($socid > 0)
$sql.= " AND s.entity = ".$conf->entity;
$sql.= " AND d.fk_facture = f.rowid";
$sql.= " AND f.fk_soc = $socid";
+ $sql .= " AND d.buy_price_ht IS NOT NULL";
if (isset($conf->global->ForceBuyingPriceIfNull) && $conf->global->ForceBuyingPriceIfNull == 1)
$sql .= " AND d.buy_price_ht <> 0";
$sql.= " GROUP BY f.rowid";
@@ -158,18 +159,20 @@ if ($socid > 0)
print_liste_field_titre($langs->trans("Invoice"),$_SERVER["PHP_SELF"],"f.facnumber","","&socid=".$_REQUEST["socid"],'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("DateInvoice"),$_SERVER["PHP_SELF"],"f.datef","","&socid=".$_REQUEST["socid"],'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("SellingPrice"),$_SERVER["PHP_SELF"],"selling_price","","&socid=".$_REQUEST["socid"],'align="right"',$sortfield,$sortorder);
- print_liste_field_titre($langs->trans("BuyingPrice"),$_SERVER["PHP_SELF"],"buyng_price","","&socid=".$_REQUEST["socid"],'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("BuyingPrice"),$_SERVER["PHP_SELF"],"buying_price","","&socid=".$_REQUEST["socid"],'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Margin"),$_SERVER["PHP_SELF"],"marge","","&socid=".$_REQUEST["socid"],'align="right"',$sortfield,$sortorder);
if (! empty($conf->global->DISPLAY_MARGIN_RATES))
- print_liste_field_titre($langs->trans("MarginRate"),$_SERVER["PHP_SELF"],"d.marge_tx","","&socid=".$_REQUEST["socid"],'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("MarginRate"),$_SERVER["PHP_SELF"],"","","&socid=".$_REQUEST["socid"],'align="right"',$sortfield,$sortorder);
if (! empty($conf->global->DISPLAY_MARK_RATES))
- print_liste_field_titre($langs->trans("MarkRate"),$_SERVER["PHP_SELF"],"d.marque_tx","","&socid=".$_REQUEST["socid"],'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("MarkRate"),$_SERVER["PHP_SELF"],"","","&socid=".$_REQUEST["socid"],'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"f.paye,f.fk_statut","","&socid=".$_REQUEST["socid"],'align="right"',$sortfield,$sortorder);
print "\n";
$cumul_achat = 0;
$cumul_vente = 0;
$cumul_qty = 0;
+ $rounding = min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT);
+
if ($num > 0)
{
$var=True;
@@ -200,8 +203,8 @@ if ($socid > 0)
print ''.$invoicestatic->LibStatut($objp->paye,$objp->statut,5).' ';
print "\n";
$i++;
- $cumul_achat += $objp->buying_price;
- $cumul_vente += $objp->selling_price;
+ $cumul_achat += round($objp->buying_price, $rounding);
+ $cumul_vente += round($objp->selling_price, $rounding);
}
}