deisy 6 年 前
コミット
f637d763f3

+ 2 - 0
__init__.py

@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+import models

BIN
__init__.pyc


+ 24 - 0
__openerp__.py

@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+{
+    'name': "Eiru Reports Commission by Seller",
+    'author': "Eiru",
+    'website': "https://www.eiru.com.py",
+    'category': 'Uncategorized',
+    'version': '2.0',
+    'depends': [
+        'base',
+        'account',
+        'eiru_reports',
+        'sale_order_cemobo',
+    ],
+    'qweb': [
+        'static/src/xml/*.xml',
+        'static/src/reports/*.xml'
+    ],
+    'data': [
+        'views/commission_by_seller.xml',
+        'templates.xml',
+        'views/actions.xml',
+        'views/menus.xml',
+    ],
+}

+ 2 - 0
models/__init__.py

@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+import commission_by_seller

BIN
models/__init__.pyc


+ 19 - 0
models/commission_by_seller.py

@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+from openerp import models, fields, api
+
+class DashboardObjective(models.Model):
+    _name = 'salesman.commission'
+
+    sale_type = fields.Selection([
+        ('credito', 'Crédito'),
+        ('contado', 'Contado')],
+        string='Tipo de Venta')
+    sale_commission = fields.Float(string="Comisión de Ventas (Porcentaje)")
+
+    @api.onchange('user_id')
+    def onchange_user_id(self):
+        res = {}
+        user = self.env['res.users'].search([('id','=', self.user_id.id)])
+        self.store_id = user.store_id.id
+        res = {'value' :{'store_id': self.store_id}}
+        return res

BIN
models/commission_by_seller.pyc


BIN
static/description/icon.png


+ 10 - 0
static/src/css/custom.css

@@ -0,0 +1,10 @@
+.openerp_webclient_container {
+    height: 100% !important;
+    height: calc(100% - 45px) !important;
+    overflow: auto !important;
+  }
+
+.hover:hover{
+  cursor: -webkit-grab;
+  cursor: grab;
+}

+ 19 - 0
static/src/js/main.js

@@ -0,0 +1,19 @@
+openerp.eiru_reports_commission_by_seller = function(instance) {
+  "use strict";
+
+  var reporting = instance.eiru_reports_commission_by_seller;
+
+  reporting_base(instance, reporting);
+
+  try {
+    report_salesman_commission(reporting);
+
+  } catch (e) {
+    // ignorar error
+  }
+
+
+  instance.web.client_actions.add('eiru_reports_commission_by_seller.salesman_commission_action', 'instance.eiru_reports_commission_by_seller.ReportSalesmanCommissionWidget');
+
+
+}

+ 22 - 0
static/src/js/reporting_base.js

@@ -0,0 +1,22 @@
+function reporting_base (instance, widget) {
+    "use strict";
+
+    widget.Base = instance.Widget.extend({
+
+        position: 0,
+
+        init: function (parent, position) {
+            this._super(parent);
+            this.position = position || this.position;
+        },
+        start: function () {
+            
+        },
+        getPosition: function () {
+            return this.position;
+        },
+        setPosition: function (position) {
+            this.position = position;
+        }
+    });
+}

+ 620 - 0
static/src/js/reports/report_salesman_commission.js

@@ -0,0 +1,620 @@
+function report_salesman_commission(reporting){
+  "use strict";
+
+  var model = openerp;
+
+  reporting.ReportSalesmanCommissionWidget = reporting.Base.extend({
+    template: 'ReportSalesmanCommissionWidget',
+    rowsData: [],
+    content: [],
+
+    events: {
+      'click #toolbar > button': 'clickOnAction',
+      'click #generate': 'fetchGenerate',
+      'change #current-company': 'updateSelections',
+      'change #current-store': 'updateUsers',
+    },
+
+    init: function(parent) {
+      this._super(parent);
+    },
+
+    start: function () {
+      var table = this.$el.find('#table');
+      table.bootstrapTable({data : self.rowsData});
+      var date = new model.eiru_reports.ReportDatePickerWidget(self);
+      date.fecthFecha();
+      this.fetchInitial();
+     },
+
+    valorNull: function(dato) {
+      var valor = "";
+      if (dato) {
+        valor = dato;
+      }
+      return valor;
+    },
+
+    checkModel: function(model) {
+      var self = this;
+      return _.filter(self.IrModuleModule, function(item) {
+        return item.name === model
+      });
+    },
+
+
+    fetchInitial: function() {
+      var self = this;
+      self.fetchResUser().then(function(ResUser) {
+        return ResUser;
+      }).then(function(ResUser) {
+        self.ResUser = ResUser;
+        if (ResUser.length > 0) {
+          self.$el.find('#current-user').append('<option value="9999999">Todos los usuarios</option>');
+          _.each(ResUser, function(item) {
+            self.$el.find('#current-user').append('<option value="' + item.id + '">' + item.name + '</option>');
+          });
+        } else {
+          self.$el.find('.user').css('display', 'none');
+        }
+
+        return self.fetchResCompany();
+      }).then(function(ResCompany) {
+        self.ResCompany = ResCompany;
+        if (ResCompany.length > 1) {
+          self.$el.find('#current-company').append('<option value="9999999">Todas las empresas</option>');
+          _.each(ResCompany, function(item) {
+            self.$el.find('#current-company').append('<option value="' + item.id + '">' + item.name + '</option>');
+          });
+        } else {
+          self.$el.find('.company').css('display', 'none');
+        }
+        return self.fetchResStore();
+      }).then(function(ResStore) {
+        self.ResStore = ResStore;
+        if (ResStore.length > 1) {
+          self.$el.find('#current-store').append('<option value="9999999">Todas las sucursales</option>');
+          _.each(ResStore, function(item) {
+            self.$el.find('#current-store').append('<option value="' + item.id + '">' + item.name + '</option>');
+          });
+        } else {
+          self.$el.find('.store').css('display', 'none');
+        }
+        return self.fetchAccountPeriod();
+      }).then(function(AccountPeriod) {
+        self.AccountPeriod = AccountPeriod;
+        self.$el.find('#current-period').append('<option value="9999999">Todos los periodos</option>');
+        _.each(AccountPeriod, function(item) {
+          self.$el.find('#current-period').append('<option value="' + item.id + '">' + item.name + '</option>');
+        });
+
+        return self.fetchResCurrency();
+      }).then(function(ResCurrency) {
+        self.ResCurrency = ResCurrency;
+      });
+      self.$el.find('#generate').css('display', 'inline');
+      return;
+    },
+
+    fetchGenerate: function() {
+      var self = this;
+      self.$el.find('.search-form').block({
+        message: null,
+        overlayCSS: {
+          backgroundColor: '#FAFAFA'
+        }
+      });
+      self.$el.find('.report-form').block({
+        message: null,
+        overlayCSS: {
+          backgroundColor: '#FAFAFA'
+        }
+      });
+
+      this.fetchAccountJournal().then(function(AccountJournal) {
+        return AccountJournal;
+      }).then(function(AccountJournal) {
+        self.AccountJournal = AccountJournal;
+        return self.fetchAccountInvoice();
+      }).then(function(AccountInvoice) {
+        self.AccountInvoice = AccountInvoice;
+        return self.fetchCommission();
+      }).then(function(Commission) {
+        self.Commission = Commission;
+        return self.fetchResUser();
+      }).then(function(ResUser) {
+        self.ResUser = ResUser;
+        return self.BuildTable();
+      });
+    },
+
+    fetchAccountJournal: function() {
+      var self = this;
+      var domain = [
+        ['active', '=', true],
+        ['type', '=', 'sale']
+      ];
+      var AccountJournal = new model.web.Model('account.journal');
+      return AccountJournal.call('getAccountJournal', [domain], {
+        context: new model.web.CompoundContext()
+      });
+    },
+
+    /*=====================================================================
+        USER
+    =====================================================================*/
+    fetchResUser: function() {
+      var self = this;
+      var defer = $.Deferred();
+      var fields = ['id', 'name', 'store_id'];
+      var user = self.$el.find('#current-user').val();
+      var store = self.$el.find('#current-store').val();
+
+      var domain = [
+        ['active', '=', true]
+      ];
+
+      if(store && store != 9999999){
+        domain.push(['store_id','=', parseInt(store)]);
+      }
+
+      if (user && user != 9999999) {
+        domain.push(['id', '=', parseInt(user)]);
+      }
+
+      var ResUser = new model.web.Model('res.users');
+      ResUser.query(fields).filter(domain).all().then(function(results) {
+        defer.resolve(results);
+      });
+      return defer;
+    },
+
+    /*====================================================================
+        RES COMPANY
+    ====================================================================*/
+    fetchResCompany: function() {
+      var self = this;
+      var defer = $.Deferred();
+      var currency = new model.web.Model('res.company');
+      var field = ['id', 'name', 'currency_id', 'logo'];
+      currency.query(field).filter().all().then(function(results) {
+        defer.resolve(results);
+      });
+      return defer;
+    },
+
+    /*====================================================================
+        RES STORE
+    ====================================================================*/
+    fetchResStore: function() {
+      var self = this;
+      var defer = $.Deferred();
+      var field = ['id', 'name', 'company_id'];
+      var ResStore = new model.web.Model('res.store');
+      ResStore.query(field).all().then(function(results) {
+        defer.resolve(results);
+      });
+      return defer;
+    },
+
+    /*=====================================================================
+        ACCOUNT PERIOD
+    =====================================================================*/
+    fetchAccountPeriod: function() {
+      var self = this;
+      var defer = $.Deferred();
+      var domain = [
+        ['special', '=', false]
+      ];
+      var field = ['id', 'name', 'date_start', 'date_stop', 'company_id'];
+      var AccountPeriod = new model.web.Model('account.period');
+      AccountPeriod.query(field).filter(domain).all().then(function(results) {
+        defer.resolve(results);
+      });
+      return defer;
+    },
+
+    /*====================================================================
+        RES CURRENCY
+    ====================================================================*/
+    fetchResCurrency: function() {
+      var self = this;
+      var defer = $.Deferred();
+      var fields = ['id', 'name', 'symbol', 'rate_silent', 'base', 'decimal_separator', 'decimal_places', 'thousands_separator', 'symbol_position'];
+      var domain = [
+        ['active', '=', true]
+      ];
+      var ResCurrency = new model.web.Model('res.currency');
+      ResCurrency.query(fields).filter(domain).all().then(function(results) {
+        defer.resolve(results);
+      });
+      return defer;
+    },
+
+    /*====================================================================
+        ACCOUNT INVOICE
+    ====================================================================*/
+
+    fetchAccountInvoice: function () {
+      var self = this;
+      var defer = $.Deferred();
+
+      var store = self.$el.find('#current-store').val();
+      var period = self.$el.find('#current-period').val();
+      var company = self.$el.find('#current-company').val();
+
+      if (store && store != 9999999) {
+        var journal_ids = _.map(_.filter(self.AccountJournal, function(item) {
+          return item.store_ids[0] == store;
+        }), function(map) {
+          return map.id;
+        });
+      } else {
+        var journal_ids = _.flatten(_.map(self.AccountJournal, function(item) {
+          return item.id;
+        }));
+      }
+
+      var domain = [
+        ['state', 'in', ['open', 'paid']],
+        ['type', '=', 'out_invoice'],
+        ['journal_id', 'in', journal_ids],
+      ];
+
+      if (company && company != 9999999) {
+        domain.push(['company_id', '=', parseInt(company)]);
+      }
+
+      if (period && period != 9999999) {
+        domain.push(['period_id', '=', parseInt(period)]);
+      }
+
+      var field =['id', 'number', 'state','type','amount_total','user_id','company_id','period_id','date_invoice','journal_id', 'credito','contado'];
+      var AccountInvoice = new model.web.Model('account.invoice');
+      AccountInvoice.query(field).filter(domain).all().then(function (results) {
+        defer.resolve(results);
+      });
+        return defer;
+    },
+
+
+    fetchCommission: function() {
+      var self = this;
+      var defer = $.Deferred();
+      var fields = ['id', 'store_id', 'sale_type', 'sale_commission'];
+      var domain = [];
+      var Commission = new model.web.Model('salesman.commission');
+      Commission.query(fields).filter(domain).all().then(function(results) {
+        defer.resolve(results);
+      });
+      return defer;
+    },
+
+    /*====================================================================
+        UPDATE SELECTIONS
+    ====================================================================*/
+    updateSelections: function() {
+      var self = this;
+      var company = self.$el.find('#current-company').val();
+      if (company != 9999999) {
+        /*===================
+            STORE SELECTION
+        ===================*/
+        var store = self.$el.find('#current-store').empty();
+        self.$el.find('#current-store').append('<option value="9999999">Todas las sucursales</option>');
+        _.each(self.ResStore, function(item) {
+          if (parseFloat(company) == item.company_id[0]) {
+            self.$el.find('#current-store').append('<option value="' + item.id + '">' + item.name + '</option>');
+          }
+        });
+        /*====================
+            PERIOD SELECTION
+        ====================*/
+        var period = self.$el.find('#current-period').empty();
+        self.$el.find('#current-period').append('<option value="9999999">Todos los periodos</option>');
+        _.each(self.AccountPeriod, function(item) {
+          if (parseFloat(company) == item.company_id[0]) {
+            self.$el.find('#current-period').append('<option value="' + item.id + '">' + item.name + '</option>');
+          }
+        });
+      } else {
+        /*===================
+            STORE SELECTION
+        ===================*/
+        var store = self.$el.find('#current-store').empty();
+        self.$el.find('#current-store').append('<option value="9999999">Todas las sucursales</option>');
+        _.each(self.ResStore, function(item) {
+          self.$el.find('#current-store').append('<option value="' + item.id + '">' + item.name + '</option>');
+        });
+        /*====================
+            PERIOD SELECTION
+        ====================*/
+        var period = self.$el.find('#current-period').empty();
+        self.$el.find('#current-period').append('<option value="9999999">Todas los periodos</option>');
+        _.each(self.AccountPeriod, function(item) {
+          self.$el.find('#current-period').append('<option value="' + item.id + '">' + item.name + '</option>');
+        });
+      }
+    },
+
+    updateUsers: function() {
+      var self = this;
+      var store = self.$el.find('#current-store').val();
+      if (store != 9999999) {
+        var user = self.$el.find('#current-user').empty();
+        self.$el.find('#current-user').append('<option value="9999999">Todos los usuarios</option>');
+        _.each(self.ResUser, function(item) {
+          if (parseFloat(store) == item.store_id[0]) {
+            self.$el.find('#current-user').append('<option value="' + item.id + '">' + item.name + '</option>');
+          }
+        });
+      } else {
+        var user = self.$el.find('#current-user').empty();
+        self.$el.find('#current-user').append('<option value="9999999">Todos los usuarios</option>');
+        _.each(self.ResUser, function(item) {
+          self.$el.find('#current-user').append('<option value="' + item.id + '">' + item.name + '</option>');
+        });
+      }
+    },
+
+    /*====================================================================
+        GET RES COMPANY
+    ====================================================================*/
+    getResCompany: function(id) {
+      var self = this;
+      return _.filter(self.ResCompany, function(item) {
+        return item.id == id;
+      })
+    },
+
+    /*====================================================================
+        GET RES CURRENCY BASE
+    ====================================================================*/
+    getResCurrency: function(id) {
+      var self = this;
+      return _.filter(self.ResCurrency, function(item) {
+        return item.id === id;
+      })
+    },
+
+    getAccountInvoice: function(id) {
+      var self = this;
+      return _.filter(self.AccountInvoice, function(item) {
+        return item.user_id[0] === id;
+      })
+    },
+
+
+    getCommission: function(type) {
+      var self = this;
+      return _.map(_.filter(self.Commission, function(item) {
+          return item.sale_type == type
+      }), function(map){
+        return map.sale_commission;
+      })
+    },
+
+    /*====================================================================
+        BUILD
+    ====================================================================*/
+    BuildTable: function() {
+      var self = this;
+      var data = [];
+      var x= 9999999;
+      var company = $('#current-company').val();
+      var store = $('#current-store').val();
+
+      if (company && company != 9999999) {
+        var ResCompany = self.getResCompany(company).shift();
+        var CurrencyBase = self.getResCurrency(ResCompany.currency_id[0]).shift();
+      } else {
+        var CurrencyBase = self.getResCurrency(self.ResCompany[0].currency_id[0]).shift();
+      };
+
+      var ResUser = self.ResUser;
+      _.each(ResUser, function(i) {
+
+        var suma_credito = 0;
+        var suma_contado = 0;
+        var credito_commission = 0;
+        var contado_commission = 0;
+
+        var credito_amount = self.getCommission("credito");
+        var contado_amount = self.getCommission("contado");
+
+        var AccountInvoice = self.getAccountInvoice(i.id);
+        _.each(AccountInvoice, function(item){
+          if (item.credito == true){
+            suma_credito = suma_credito + item.amount_total;
+          }
+
+          if (item.contado == true){
+            suma_contado = suma_contado + item.amount_total;
+          }
+        })
+
+        credito_commission = suma_credito * (credito_amount[0]/100);
+        contado_commission = suma_contado * (contado_amount[0]/100);
+
+        data.push({
+          user : i.name,
+
+          suma_credito : accounting.formatMoney(suma_credito, '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+          suma_contado : accounting.formatMoney(suma_contado, '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+          credito_commission : accounting.formatMoney(credito_commission, '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+          contado_commission : accounting.formatMoney(contado_commission, '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+
+          suma_credito_no_format : self.valorNull(suma_credito),
+          suma_contado_no_format : self.valorNull(suma_contado),
+          credito_commission_no_format : self.valorNull(credito_commission),
+          contado_commission_no_format : self.valorNull(contado_commission),
+
+          decimal_places: CurrencyBase.decimal_places,
+          thousands_separator: CurrencyBase.thousands_separator,
+          decimal_separator: CurrencyBase.decimal_separator,
+        });
+      })
+
+      self.content = data;
+      self.loadTable(data);
+
+      self.$el.find('.report-form').css('display', 'block');
+      self.$el.find('.search-form').unblock();
+      self.$el.find('.report-form').unblock();
+    },
+
+    /*====================================================================
+        LOAD BOOTSTRAP TABLE
+    ====================================================================*/
+    loadTable:function(rowsTable){
+      var self = this;
+      self.rowsData = rowsTable;
+      var table = this.$el.find('#table');
+      table.bootstrapTable('load', rowsTable);
+    },
+
+    /*====================================================================
+        PRINT PDF
+    ====================================================================*/
+    clickOnAction: function(e) {
+      var self = this;
+      var ResCompany;
+      var action = this.$el.find(e.target).val();
+      var company = $('#current-company').val();
+      if (company && company != 9999999) {
+        ResCompany = self.getResCompany(company).shift();
+        var CurrencyBase = self.getResCurrency(ResCompany.currency_id[0]).shift();
+      } else {
+        ResCompany = self.ResCompany[0];
+        var CurrencyBase = self.getResCurrency(self.ResCompany[0].currency_id[0]).shift();
+      }
+      var getColumns = [];
+      var rows = [];
+      var table = this.$el.find("#table");
+      var column = table.bootstrapTable('getVisibleColumns');
+      var row = table.bootstrapTable('getData');
+
+      if (action === 'pdf') {
+        var suma_credito = creditoFormatter(row);
+        var suma_contado = contadoFormatter(row);
+        var credito_commission = creditoCommissionFormatter(row);
+        var contado_commission = contadoCommissionFormatter(row);
+
+        row.push({
+          user: 'Totales',
+          suma_contado: suma_contado,
+          contado_commission: contado_commission,
+          suma_credito: suma_credito,
+          credito_commission: credito_commission,
+        })
+        var data = _.map(column, function(val) {
+          return val.field
+        });
+        _.each(_.map(column, function(val) {
+          return val
+        }), function(item) {
+          getColumns.push([{
+            title: item.title,
+            dataKey: item.field
+          }]);
+        });
+        /*
+        ============================================================
+            CONFIGURACION DEL PDF
+        ============================================================
+        */
+        var pdf_title = 'Comisión por vendedor.';
+        var pdf_type = '';
+        var pdf_name = 'comision_por_vendedor_';
+        var pdf_columnStyles = {
+          user: {
+            halign: 'left'
+          },
+          suma_contado: {
+            columnWidth: 30,
+            halign: 'center'
+          },
+          contado_commission: {
+            columnWidth: 30,
+            halign: 'center'
+          },
+          suma_credito: {
+            columnWidth: 30,
+            halign: 'center'
+          },
+          contado_commission: {
+            columnWidth: 30,
+            halign: 'center'
+          },
+        };
+        /*
+        ============================================================
+            LLAMAR FUNCION DE IMPRESION
+        ============================================================
+        */
+        var filter = self.getFilter();
+        var pdf = new model.eiru_reports.ReportPdfWidget(self);
+        pdf.drawPDF(
+          _.flatten(getColumns),
+          row,
+          ResCompany,
+          pdf_title,
+          pdf_type,
+          pdf_name,
+          pdf_columnStyles,
+          filter,
+        );
+      }
+
+    },
+    getFilter: function() {
+      var self = this;
+      var company = self.$el.find('#current-company').val();
+      var store = self.$el.find('#current-store').val();
+      var user = self.$el.find('#current-user').val();
+      var period = self.$el.find('#current-period').val();
+
+      var filter = [];
+      if (company && company != 9999999) {
+        var ResCompany = _.filter(self.ResCompany, function(item) {
+          return item.id == company;
+        });
+        filter.push({
+          title: 'Empresa',
+          value: ResCompany[0].name,
+        });
+      };
+      if (store && store != 9999999) {
+        var ResStore = _.filter(self.ResStore, function(item) {
+          return item.id == store;
+        });
+        filter.push({
+          title: 'Sucursal',
+          value: ResStore[0].name,
+        });
+      };
+
+      if (user && user != 9999999) {
+        var ResUser = _.filter(self.ResUser, function(item) {
+          return item.id == user;
+        });
+        filter.push({
+          title: 'Usuario',
+          value: ResUser[0].name,
+        });
+      };
+
+      if (period && period != 9999999) {
+        var AccountPeriod = _.filter(self.AccountPeriod, function(item) {
+          return item.id == period;
+        });
+        filter.push({
+          title: 'Periodo',
+          value: AccountPeriod[0].name,
+        });
+      };
+
+      return filter;
+    },
+  });
+}

+ 165 - 0
static/src/reports/report_salesman_commission.xml

@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<template xml:space="preserve">
+    <t t-name="ReportSalesmanCommissionWidget">
+        <div class="report_view">
+            <div class="reporting_page_header">
+                <h1 class="report_title">Comisión por vendedor</h1>
+            </div>
+            <div class="container search-form" style="border-bottom:1px solid #eee; width:95%;">
+                <div class="row">
+                    <div class="col-lg-3 company filter-style">
+                        <label>Empresa</label>
+                        <select id="current-company" class="form-control form-control-sm"></select>
+                    </div>
+                    <div class="col-lg-3 store filter-style">
+                        <label>Sucursal</label>
+                        <select id="current-store" class="form-control form-control-sm">
+                        </select>
+                    </div>
+                    <div class="col-lg-3 user filter-style">
+                        <label>Usuario</label>
+                        <select id="current-user" class="form-control form-control-sm">
+                        </select>
+                    </div>
+                    <div class="col-lg-3 filter-style">
+                        <label>Periodo</label>
+                        <select id="current-period" class="form-control form-control-sm">
+                        </select>
+                    </div>
+                </div>
+
+                <div class="row">
+                    <div class="text-center" style="padding-top:20px;">
+                        <button id="generate" class="myButton" aria-label="Left Align" style="color:#fff;display:none;">
+                          Generar
+                      </button>
+                    </div>
+                    <br/>
+                </div>
+            </div>
+
+            <div class="report-form" style="display:none;">
+                <div id="toolbar">
+                    <button class="oe_button myButton" value="pdf">Imprimir Informe</button>
+
+                </div>
+                <div class="container" style="width:95%;">
+                    <table id="table"
+                        data-pagination="true"
+                        data-toggle="table"
+                        data-toolbar="#toolbar"
+                        data-show-columns="true"
+                        data-classes="table table-condensed  table-no-bordered"
+                        data-search="true"
+                        data-show-export="true"
+                        data-show-toggle="true"
+                        data-pagination-detail-h-align="left"
+                        data-show-footer="true"
+                        data-footer-style="footerStyle"
+                        data-buttons-class="oe_button myButton"
+                        data-show-pagination-switch="true"
+                        data-page-size="10"
+                        data-search-on-enter-key="true"
+                        data-undefined-text=" "
+
+                        >
+                        <thead style="background:none;">
+                            <tr>
+                                <th data-field="user" data-align="left" data-footer-formatter="Totales">Vendedor</th>
+                                <th data-field="suma_contado" data-align="center" data-footer-formatter="contadoFormatter">Venta al Contado</th>
+                                <th data-field="contado_commission" data-align="center" data-footer-formatter="contadoCommissionFormatter">Comisión por venta al contado</th>
+                                <th data-field="suma_credito" data-align="center" data-footer-formatter="creditoFormatter">Venta a Crédito</th>
+                                <th data-field="credito_commission" data-align="center" data-footer-formatter="creditoCommissionFormatter">Comisión por venta a crédito</th>
+                            </tr>
+                        </thead>
+                    </table>
+                </div>
+            </div>
+            <script>
+                <!--
+                    TOTAL VENTA CONTADO
+                -->
+                function contadoFormatter(rowsTable) {
+                    var decimal_places = 0;
+                    var thousands_separator = '.';
+                    var decimal_separator = ',';
+                    if(rowsTable.length > 0){
+                        decimal_places = rowsTable[0].decimal_places;
+                        thousands_separator = rowsTable[0].thousands_separator;
+                        decimal_separator = rowsTable[0].decimal_separator;
+                    }
+                    var amount =  _.reduce(_.map(rowsTable,function(item){
+                        return (item.suma_contado_no_format);
+                    }), function(memo, num){
+                    return memo + num; },0)
+                    return accounting.formatNumber(amount,decimal_places,thousands_separator,decimal_separator);
+                }
+                <!--
+                    TOTAL COMISION AL CONTADO
+                -->
+                function contadoCommissionFormatter(rowsTable) {
+                    var decimal_places = 0;
+                    var thousands_separator = '.';
+                    var decimal_separator = ',';
+                    if(rowsTable.length > 0){
+                        decimal_places = rowsTable[0].decimal_places;
+                        thousands_separator = rowsTable[0].thousands_separator;
+                        decimal_separator = rowsTable[0].decimal_separator;
+                    }
+                    var amount =  _.reduce(_.map(rowsTable,function(item){
+                        return (item.contado_commission_no_format);
+                    }), function(memo, num){
+                    return memo + num; },0)
+                    return accounting.formatNumber(amount,decimal_places,thousands_separator,decimal_separator);
+                }
+                <!--
+                    TOTAL VENTA A CREDITO
+                -->
+                function creditoFormatter(rowsTable) {
+                    var decimal_places = 0;
+                    var thousands_separator = '.';
+                    var decimal_separator = ',';
+                    if(rowsTable.length > 0){
+                        decimal_places = rowsTable[0].decimal_places;
+                        thousands_separator = rowsTable[0].thousands_separator;
+                        decimal_separator = rowsTable[0].decimal_separator;
+                    }
+                    var amount =  _.reduce(_.map(rowsTable,function(item){
+                        return (item.suma_credito_no_format);
+                    }), function(memo, num){
+                    return memo + num; },0)
+                    return accounting.formatNumber(amount,decimal_places,thousands_separator,decimal_separator);
+                }
+                <!--
+                    TOTAL COMISION A CREDITO
+                -->
+                function creditoCommissionFormatter(rowsTable) {
+                    var decimal_places = 0;
+                    var thousands_separator = '.';
+                    var decimal_separator = ',';
+                    if(rowsTable.length > 0){
+                        decimal_places = rowsTable[0].decimal_places;
+                        thousands_separator = rowsTable[0].thousands_separator;
+                        decimal_separator = rowsTable[0].decimal_separator;
+                    }
+                    var amount =  _.reduce(_.map(rowsTable,function(item){
+                        return (item.credito_commission_no_format);
+                    }), function(memo, num){
+                    return memo + num; },0)
+                    return accounting.formatNumber(amount,decimal_places,thousands_separator,decimal_separator);
+                }
+
+                <!--
+                    FOOTER STYLE
+                -->
+                function footerStyle(row, index) {
+                    return {
+                        css: {
+                          "font-weight": "bold"
+                        }
+                    };
+                };
+            </script>
+        </div>
+    </t>
+</template>

+ 5 - 0
static/src/xml/eiru_reporting.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<template xml:space="preserve">
+    
+</template>

+ 5 - 0
static/src/xml/eiru_reporting_base.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<template xml:space="preserve">
+    
+</template>

+ 16 - 0
templates.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+  <data>
+    <template id="eiru_reports_baco_assets" inherit_id="eiru_assets.assets">
+      <xpath expr="." position="inside">
+        <link rel="stylesheet" href="/eiru_reports_baco/static/src/css/custom.css"/>
+
+        <script type="text/javascript" src="/eiru_reports_commission_by_seller/static/src/js/main.js"/>
+        <script type="text/javascript" src="/eiru_reports_commission_by_seller/static/src/js/reporting_base.js"/>
+
+        <script type="text/javascript" src="/eiru_reports_commission_by_seller/static/src/js/reports/report_salesman_commission.js"/>
+
+      </xpath>
+    </template>
+  </data>
+</openerp>

+ 10 - 0
views/actions.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+	<data>
+
+		<record id="salesman_commission_action" model="ir.actions.client">
+			<field name="name">Comisión por vendedor</field>
+			<field name="tag">eiru_reports_commission_by_seller.salesman_commission_action</field>
+		</record>
+	</data>
+</openerp>

+ 27 - 0
views/commission_by_seller.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+  <data>
+
+    <record id="salesman_commission_tree_view" model="ir.ui.view">
+      <field name="name">salesman_commission_tree_view</field>
+      <field name="model">salesman.commission</field>
+      <field name="arch" type="xml">
+        <tree string="salesman_commission" editable="botom">
+          <field name="sale_type" required="1"/>
+          <field name="sale_commission" required="1"/>
+        </tree>
+      </field>
+    </record>
+
+    <record model="ir.actions.act_window" id="action_salesman_commission">
+      <field name="name">Comisión por tipo de venta</field>
+      <field name="res_model">salesman.commission</field>
+      <field name="view_type">form</field>
+      <field name="view_mode">tree</field>
+    </record>
+
+    <menuitem name="Comisiones" parent="account.menu_finance" id="commission_parent_menu" sequence="5"/>
+    <menuitem name="Establecer Comisión" parent="commission_parent_menu" id="commission_submenu2" action="action_salesman_commission"/>
+
+  </data>
+</openerp>

+ 12 - 0
views/menus.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+  <data>
+    <!-- main menu name -->
+    <menuitem id="report_commission_parent_menu" name="Comisión" parent="eiru_reports.eiru_reports_main_menu" sequence="10"/>
+
+    <!-- sub menu -->
+
+    <menuitem id="salesman_commission_menu" parent="report_commission_parent_menu" name="Comisión por vendedor" action="salesman_commission_action" sequence="1"/>
+
+  </data>
+</openerp>