Browse Source

[ADD] Importar Cajas

adrielso 6 years ago
parent
commit
fcf7781a7c

+ 2 - 1
__openerp__.py

@@ -11,7 +11,8 @@
     ],
     'data': [
         'views/template.xml',
-        'views/eiru_statement_utility.xml'
+        'views/eiru_statement_utility.xml',
+        'views/import_statement.xml',
     ],
     'qweb': [
         'static/src/xml/*.xml',

+ 1 - 0
models/__init__.py

@@ -1,2 +1,3 @@
 # -*- coding: utf-8 -*-
 import account_bank_statement_utility
+import account_bank_statement

+ 80 - 0
models/account_bank_statement.py

@@ -0,0 +1,80 @@
+# -*- coding: utf-8 -*-
+from openerp import models, fields, tools, api
+
+class AccountBankStatement(models.Model):
+    _inherit = 'account.bank.statement'
+
+    type_statement = fields.Selection([('normal', 'Normal'),('general', 'General')],'Tipo de Caja ', default="normal", help="Tipo de caja")
+
+    @api.model
+    def get_statement_point_of_sale(self, id):
+        accountStatement = self.env['account.bank.statement'].browse(id)
+        decimal_precision = self.env['decimal.precision'].precision_get('Account')
+        if (not accountStatement):
+            return False
+
+        statementPointOfSale = self._get_statement_point_of_sale(accountStatement)
+        if (not statementPointOfSale):
+            return False
+
+        statementLine = []
+
+        for line in statementPointOfSale:
+            lineStatement = self.env['account.bank.statement.line'].search([('name', '=', line['name'])])
+            if (not lineStatement):
+                amount = line['amount']
+
+                statementLine.append([0, False, {
+                    'name': line['name'],
+                    'ref' : 'Responsable/'+line['userName'],
+                    'amount': round(float(amount), decimal_precision),
+                    'journal_id': accountStatement.journal_id.id,
+                    'account_id': accountStatement.journal_id.internal_account_id.id,
+                    'statement_id': accountStatement.id,
+                    'date': line['date'],
+                }])
+
+        line = []
+
+        if (not statementLine):
+            return False
+
+        line = accountStatement.write({'line_ids': statementLine})
+        if (not line):
+            return False
+
+        return len(statementLine)
+
+    '''
+        Get Account Bank Statement Point of Sale
+    '''
+    def _get_statement_point_of_sale(self, statement):
+        statementPoint = self.env['account.bank.statement'].search([
+                                                                    ('date','=',statement.date),
+                                                                    ('journal_id.id', '=',statement.journal_id.id),
+                                                                    ('period_id.id', '=', statement.period_id.id),
+                                                                    ('type_statement', '=', 'normal'),
+                                                                    ('state', '=', 'confirm')], order='id')
+        pointSatatement = []
+        for statementP in statementPoint:
+            amount = 0.0
+            for line in statementP.line_ids:
+                amount += line.amount
+
+            if (statementP.balance_start > 0):
+                amount += statementP.balance_start
+
+            if (amount > 0):
+                pointSatatement.append({
+                    'name': statementP.name,
+                    'date': statementP.date,
+                    'journalId': statementP.journal_id.id,
+                    'periodId': statementP.period_id.id,
+                    'userId': statementP.user_id.id,
+                    'userName': statementP.user_id.name,
+                    'posSessionId': statementP.pos_session_id.id,
+                    'posSessionName': statementP.pos_session_id.name,
+                    'amount': amount
+                })
+
+        return pointSatatement

+ 4 - 0
static/src/css/style.css

@@ -3,6 +3,10 @@
             width: 900px !important;
     }
 }
+.import-statement {
+    width: auto;
+    float: left;
+}
 .eiru-statement-utility {
     width: auto;
     float: left;

+ 122 - 0
static/src/js/import_statement.js

@@ -0,0 +1,122 @@
+(function() {
+    openerp.widgetInstanceStatementImport = null;
+    openerp.parentInstanceStatementImport = {};
+
+    var QWeb = openerp.web.qweb;
+    var instanceWeb = openerp.web;
+
+    openerp.EiruStatementImport = openerp.Widget.extend({
+        template: 'EiruImport.Statement',
+        id: undefined,
+        buttons: undefined,
+        bankStatement: [],
+        /* Init */
+        init: function (parent) {
+            this._super(parent);
+            this.buttons = parent.$buttons;
+        },
+        /* Actualizar id del Objeto */
+        updateId: function(id, type) {
+            var self = this;
+            self.id = id;
+            this.$el.css('display','flex');
+            if (type === 'normal'){
+                this.$el.css('display','none');
+            }
+        },
+        /* start */
+        start: function() {
+            var self = this;
+            this.$el.click(function() {
+                self.fetchInitial();
+            });
+            self.buttons.click(function(e) {
+                /* C (Crear) */
+                if (e.target.accessKey === 'C')
+                    self.$el.css('display','none');
+                /* E (Editar) */
+                if (e.target.accessKey === 'E')
+                    self.$el.css('display','none');
+               /* S (Guarrdar) */
+               if (e.target.accessKey === 'S')
+                    self.$el.css('display','flex');
+                /* D (Cancelar) */
+                if (e.target.accessKey === 'D')
+                    self.$el.css('display','flex');
+            });
+       },
+        /* Iniciar */
+       fetchInitial: function() {
+            var self = this;
+            self.$el.attr("disabled", true);
+            self.fetchBankStatement(self.id).then(function(bankStatement) {
+                return bankStatement;
+            }).then(function(bankStatement) {
+                self.bankStatement = bankStatement;
+                if (!!self.bankStatement.length && self.bankStatement[0].type_statement === 'normal'){
+                    instanceWeb.notification.do_notify("Atención","Esta opción solo esta disponible para la caja general.");
+                    return false;
+                }
+                return self.fetchStatementPointOfSale(self.id).then(function(statementPoinOfSale){
+                    return statementPoinOfSale;
+                }).then(function(statementPoinOfSale){
+                    self.statementPoinOfSale = statementPoinOfSale;
+                    if (!!statementPoinOfSale) {
+                        instanceWeb.notification.do_notify("Atención"," "+statementPoinOfSale+" caja/s fueron importada .");
+                        return
+                    }
+                    instanceWeb.notification.do_notify("Atención","Nada que hacer.");
+               });
+            }).then(function() {
+                self.$el.removeAttr("disabled");
+                return self.reloadPage();
+            });
+        },
+        /* Reload Page*/
+        reloadPage: function() {
+            openerp.parentInstanceStatementTransfer.reload();
+        },
+        /* Registro de Caja */
+        fetchBankStatement: function(id) {
+            var fields = ['id', 'journal_id', 'pos_session_id', 'date'];
+            var domain = [['id', '=', id]];
+            var statement = new instanceWeb.Model('account.bank.statement');
+            return statement.query(fields).filter(domain).all();
+        },
+        /* Get Statement Point of Sale*/
+        fetchStatementPointOfSale: function(id) {
+            var invoiceMoveLine = new instanceWeb.Model('account.bank.statement');
+            return invoiceMoveLine.call('get_statement_point_of_sale',[id], {
+                context: new instanceWeb.CompoundContext()
+            });
+        }
+    });
+
+    if (openerp.web && openerp.web.FormView) {
+        openerp.web.FormView.include({
+            load_record: function(record) {
+                this._super.apply(this, arguments);
+
+                if (this.model !== 'account.bank.statement')
+                    return;
+
+                openerp.parentInstanceStatementImport = this;
+
+                if (openerp.widgetInstanceStatementImport) {
+                    openerp.widgetInstanceStatementImport.updateId(record.id);
+                    if (this.$el.find('.button-import-statement').length !== 0 )
+                        return ;
+                }
+
+                if (this.$el.find('.button-import-statement').length !== 0 )
+                    return;
+
+                openerp.widgetInstanceStatementImport = new openerp.EiruStatementImport(this);
+                var element =this.$el.find('.oe_form').find('.import-statement');
+
+                openerp.widgetInstanceStatementImport.appendTo(element[0]);
+                openerp.widgetInstanceStatementImport.updateId(record.id);
+            }
+        });
+    }
+})();

+ 8 - 0
static/src/xml/import_statement.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates xml:space="preserve">
+    <t t-name="EiruImport.Statement">
+        <button class="button-import-statement oe_button oe_form_button oe_highlight">
+            <span>Importar Caja</span>
+        </button>
+  </t>
+</templates>

+ 59 - 0
views/import_statement.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+	<data>
+		<!-- Registros de caja -->
+        <record id="eiru_import_statement_cash" model="ir.ui.view">
+            <field name="name">eiru.import.statement.cash</field>
+            <field name="model">account.bank.statement</field>
+            <field name="inherit_id" ref="account.view_bank_statement_form2"/>
+            <field name="arch" type="xml">
+				<field name='state' position="before">
+					<div class="import-statement" attrs="{'invisible': [('state','!=','open')]}"></div>
+				</field>
+				<field name="journal_id" position='after'>
+					<field name="type_statement"/>
+				</field>
+            </field>
+        </record>
+		<!-- Extractos bancarios -->
+		<record id="eiru_import_statement_bank" model="ir.ui.view">
+            <field name="name">eiru.import.statement.bank</field>
+            <field name="model">account.bank.statement</field>
+            <field name="inherit_id" ref="account.view_bank_statement_form"/>
+            <field name="arch" type="xml">
+				<field name='state' position="before">
+					<div class="import-statement" attrs="{'invisible': [('state','!=','draft')]}"></div>
+				</field>
+				<field name="journal_id" position='after'>
+					<field name="type_statement"/>
+				</field>
+            </field>
+        </record>
+		<!-- Agrupación por tipo de caja  cash-->
+		<record id="eiru_import_statement_search" model="ir.ui.view">
+			<field name="name">eiru.import.statement.search</field>
+			<field name="model">account.bank.statement</field>
+			<field name="inherit_id" ref="account.view_account_bank_statement_filter"/>
+			<field name="arch" type="xml">
+				<search>
+					 <group expand="0" string="Group By">
+						<filter string="Tipo de Caja" context="{'group_by':'type_statement'}"/>
+					</group>
+				</search>
+			</field>
+		</record>
+		<!-- Agrupación por tipo de caja Bank -->
+		<record id="eiru_import_statement_search_bank" model="ir.ui.view">
+			<field name="name">eiru.import.statement.search.bank</field>
+			<field name="model">account.bank.statement</field>
+			<field name="inherit_id" ref="account.view_bank_statement_search"/>
+			<field name="arch" type="xml">
+				<search>
+					 <group expand="0" string="Group By">
+						<filter string="Tipo de Caja" context="{'group_by':'type_statement'}"/>
+					</group>
+				</search>
+			</field>
+		</record>
+	</data>
+</openerp>

+ 1 - 0
views/template.xml

@@ -4,6 +4,7 @@
             <xpath expr="." position="inside">
                 <link rel="stylesheet" href="/eiru_account_bank_statement_utility/static/src/css/style.css"/>
                 <script type="text/javascript" src="/eiru_account_bank_statement_utility/static/src/js/eiru_statement_transfer.js"/>
+                <script type="text/javascript" src="/eiru_account_bank_statement_utility/static/src/js/import_statement.js"/>
             </xpath>
         </template>
     </data>