* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file htdocs/commissions/index.php * \ingroup commissions * \brief Page des commissions par agent commercial */ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; if (! empty($conf->margin->enabled)) require_once DOL_DOCUMENT_ROOT.'/margin/lib/margins.lib.php'; $langs->load("companies"); $langs->load("bills"); $langs->load("products"); $langs->load("commissions"); if (! empty($conf->margin->enabled)) $langs->load("margins"); // Security check $agentid = GETPOST('agentid','int'); $mesg = ''; $sortfield = GETPOST("sortfield",'alpha'); $sortorder = GETPOST("sortorder",'alpha'); $page = GETPOST("page",'int'); if ($page == -1) { $page = 0; } $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; $startdate=$enddate=''; if (!empty($_POST['startdatemonth'])) $startdate = date('Y-m-d', dol_mktime(12, 0, 0, $_POST['startdatemonth'], $_POST['startdateday'], $_POST['startdateyear'])); if (!empty($_POST['enddatemonth'])) $enddate = date('Y-m-d', dol_mktime(12, 0, 0, $_POST['enddatemonth'], $_POST['enddateday'], $_POST['enddateyear'])); /* * View */ $userstatic = new User($db); $companystatic = new Societe($db); $invoicestatic=new Facture($db); $form = new Form($db); llxHeader('',$langs->trans("Commissions")); $text=$langs->trans("Commissions"); print_fiche_titre($text); print '
'; print ''; if ($agentid > 0) { print ''; print ''; if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="s.nom"; } else { print ''; print ''; if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="u.login"; } // Start date print ''; print ''; print ''; print ''; print ''; // Include unpayed invoices print ''; // Total Margin if ($conf->global->COMMISSION_BASE == "MARGIN") { print ''; } elseif ($conf->global->COMMISSION_BASE == "TURNOVER") { print ''; } // Total Commission print ''; print "
'.$langs->trans('CommercialAgent').''; print $form->select_dolusers($agentid,'agentid',1,'',0,'',''); print '
'.$langs->trans('CommercialAgent').''; print $form->select_dolusers('','agentid',1,'',0,'',''); print '
'.$langs->trans('StartDate').''; $form->select_date($startdate,'startdate','','',1,"sel",1,1); print ''.$langs->trans('EndDate').''; $form->select_date($enddate,'enddate','','',1,"sel",1,1); print ''; print ''; print '
'.$langs->trans("IncludeUnpayedInvoices").''; print ''; print '
'.$langs->trans("TotalMargin").''; print ''; // set by jquery (see below) print '
'.$langs->trans("TurnoverTotal").''; print ''; // set by jquery (see below) print '
'.$langs->trans("TotalCommission").''; print ''; // set by jquery (see below) print '
"; print '
'; $sql = "SELECT s.nom, s.rowid as socid, s.code_client, s.client, sc.fk_user as agent,"; $sql.= " u.login,"; 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" ; } 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.= " 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"; 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) { 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 u.rowid"; $sql.= " ORDER BY $sortfield $sortorder "; //$sql.= $db->plimit($conf->liste_limit +1, $offset); $result = $db->query($sql); if ($result) { $num = $db->num_rows($result); print '
'; print_barre_liste($langs->trans("CommissionDetails"),$page,$_SERVER["PHP_SELF"],"",$sortfield,$sortorder,'',$num,0,''); $i = 0; print ""; print ''; if ($agentid > 0) print_liste_field_titre($langs->trans("Customer"),$_SERVER["PHP_SELF"],"s.nom","","&agentid=".$agentid,'align="center"',$sortfield,$sortorder); else print_liste_field_titre($langs->trans("CommercialAgent"),$_SERVER["PHP_SELF"],"u.login","","&agentid=".$agentid,'align="center"',$sortfield,$sortorder); // product commission if ($conf->global->COMMISSION_BASE == "MARGIN") print_liste_field_titre($langs->trans("ProductMargin"),$_SERVER["PHP_SELF"],"productBase","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder); elseif ($conf->global->COMMISSION_BASE == "TURNOVER") print_liste_field_titre($langs->trans("ProductTurnover"),$_SERVER["PHP_SELF"],"productBase","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("CommissionRate"),$_SERVER["PHP_SELF"],"","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("ProductCommission"),$_SERVER["PHP_SELF"],"","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder); // service commission if ($conf->global->COMMISSION_BASE == "MARGIN") print_liste_field_titre($langs->trans("ServiceMargin"),$_SERVER["PHP_SELF"],"serviceBase","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder); elseif ($conf->global->COMMISSION_BASE == "TURNOVER") print_liste_field_titre($langs->trans("ServiceTurnover"),$_SERVER["PHP_SELF"],"serviceBase","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("CommissionRate"),$_SERVER["PHP_SELF"],"","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("ServiceCommission"),$_SERVER["PHP_SELF"],"","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder); // total commission print_liste_field_titre($langs->trans("TotalCommission"),$_SERVER["PHP_SELF"],"","","&agentid=".$agentid,'align="right"',$sortfield,$sortorder); print "\n"; $cumul_base_produit = 0; $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; while ($i < $num && $i < $conf->liste_limit) { $objp = $db->fetch_object($result); $var=!$var; print ""; if ($agentid > 0) { $companystatic->id=$objp->socid; $companystatic->nom=$objp->nom; $companystatic->client=$objp->client; print "\n"; } else { $userstatic->id=$objp->agent; $userstatic->login=$objp->login; print "\n"; } // product commission $productCommissionRate=(! empty($conf->global->PRODUCT_COMMISSION_RATE)?$conf->global->PRODUCT_COMMISSION_RATE:0); $productBase=(! empty($objp->productBase)?$objp->productBase:0); $productCommission = (! empty($productBase)?($productCommissionRate * $productBase / 100):0); print "\n"; print "\n"; print "\n"; // service commission $serviceCommissionRate=(! empty($conf->global->SERVICE_COMMISSION_RATE)?$conf->global->SERVICE_COMMISSION_RATE:0); $serviceBase=(! empty($objp->serviceBase)?$objp->serviceBase:0); $serviceCommission = (! empty($serviceBase)?($serviceCommissionRate * $serviceBase / 100):0); print "\n"; print "\n"; print "\n"; // total commission print "\n"; print "\n"; $i++; $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 ''; print '"; // product commission print "\n"; print "\n"; print "\n"; // service commission print "\n"; print "\n"; print "\n"; // total commission print "\n"; print "\n"; print ""; print "
".$companystatic->getNomUrl(1,'customer')."".$userstatic->getLoginUrl(1)."".price($productBase)."".price($productCommissionRate)."".price($productCommission)."".price($serviceBase)."".price($serviceCommissionRate)."".price($serviceCommission)."".price($productCommission + $serviceCommission)."
'; print $langs->trans('Total'); print "".price($cumul_base_produit)."".price((! empty($conf->global->PRODUCT_COMMISSION_RATE)?$conf->global->PRODUCT_COMMISSION_RATE:0))."".price($cumul_commission_produit)."".price($cumul_base_service)."".price((! empty($conf->global->SERVICE_COMMISSION_RATE)?$conf->global->SERVICE_COMMISSION_RATE:0))."".price($cumul_commission_service)."".price($cumul_commission_produit + $cumul_commission_service)."
"; } else { dol_print_error($db); } $db->free($result); llxFooter(); $db->close(); ?>