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 ""; +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 ''; +print ''; +print ''; +print ''.$langs->trans('AgentContactTypeDetails').''; +print ''; +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); } }