Przeglądaj źródła

[IMP] setting management

Gogs 6 lat temu
rodzic
commit
bd844fdf9b

+ 10 - 2
__openerp__.py

@@ -4,9 +4,17 @@
     'author': "Robert Gauto",
     'category': 'Uncategorized',
     'version': '0.1',
-    'depends': ['base', 'sale', 'account', 'multi_store', 'eiru_product_extra_price', 'currency_utility'],
+    'depends': [
+        'account',
+        'base',
+        'currency_utility',
+        'eiru_bank_payments_references',
+        'eiru_product_extra_price',
+        'multi_store',
+        'sale',
+    ],
     'data': [
         'templates.xml',
-        'data/eiru_pos_data.xml'
+        'security/eiru_pos_security.xml'
     ]
 }

+ 44 - 21
controllers/main.py

@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-from openerp import http
+from openerp import api, http
 from openerp.http import request
 from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, float_round
 from werkzeug.wrappers import Response
@@ -69,13 +69,25 @@ class PosSales(http.Controller):
     '''
         Get POS data
     '''
-    def get_pos_data(self):
-        pos = request.env['eiru.pos'].search([])
+    def get_pos_settings(self):
+        settings = request.env['base.config.settings'].search([], limit=1, order='id desc')
 
         return {
-            'imageType': pos.image_type,
-            'allowCurrencyExchange': pos.allow_currency_exchange,
-            'viewCurrencyExchanges': pos.view_currency_exchanges
+            'imageType': settings.image_type,
+            'allowCurrencyExchange': settings.allow_currency_exchange,
+            'viewCurrencyExchanges': settings.view_currency_exchanges,
+            'currencies': [
+                {
+                    'id': currency.id,
+                    'name': currency.display_name,
+                    'symbol': currency.symbol,
+                    'position': currency.position,
+                    'rateSilent': currency.rate_silent,
+                    'decimalSeparator': currency.decimal_separator,
+                    'decimalPlaces': currency.decimal_places,
+                    'thousandsSeparator': currency.thousands_separator
+                } for currency in settings.currency_ids
+            ]
         }
 
     '''
@@ -112,8 +124,10 @@ class PosSales(http.Controller):
                 'id': user.company_id.id,
                 'name': user.company_id.display_name,
                 'phone': user.company_id.phone or None,
-                'city': user.company_id.city or None
-            }
+                'city': user.company_id.city or None,
+                'currencyId': user.company_id.currency_id.id or None
+            },
+            'isManager': 'Gerente' in user.groups_id.filtered(lambda g: g.category_id.name == 'Eiru POS').mapped(lambda g: g.name)
         }
     
     '''
@@ -147,6 +161,13 @@ class PosSales(http.Controller):
         domain = [('type', 'in', ['bank', 'cash']), ('active', '=', True)]
         has_subtype = self.is_module_installed('eiru_bank_payments_references')
 
+        if not self.get_pos_settings().get('allowCurrencyExchange'):
+            currency_id = self.get_user().get('company').get('currencyId')
+
+            domain.append('|')
+            domain.append(('currency', '=', currency_id))
+            domain.append(('company_id.currency_id', '=', currency_id))
+
         return [{
             'id': journal.id,
             'name': journal.display_name,
@@ -349,8 +370,6 @@ class PosSales(http.Controller):
             'state': 'draft',
         }
 
-        # import web_pdb; web_pdb.set_trace()
-
         return request.env['sale.order'].create(values)
 
     '''
@@ -401,8 +420,6 @@ class PosSales(http.Controller):
         invoice.check_tax_lines(compute_taxes)
         invoice._recompute_tax_amount()
 
-        # import web_pdb; web_pdb.set_trace()
-
         invoice_move_lines += request.env['account.invoice.tax'].move_line_get(invoice.id)
         total, total_currency, invoice_move_lines = invoice.with_context(context).compute_invoice_totals(invoice.company_id.currency_id, invoice.reference, invoice_move_lines)
 
@@ -614,6 +631,11 @@ class PosSales(http.Controller):
 
         return account_bank_statement
 
+    '''
+    '''
+    def create_bank_payment_statement(self):
+        pass
+
     '''
         New purchase resource route
     '''
@@ -621,17 +643,17 @@ class PosSales(http.Controller):
     def init_sale(self, **kw):
         self.make_info_log('Sending JSON response')
         
-        pos_data = self.get_pos_data()
+        settings = self.get_pos_settings()
 
         return self.make_gzip_response(
             {
-                'pos': pos_data,
+                'settings': settings,
                 'date': self.get_server_datetime(),
                 'user': self.get_user(),
                 'currencies': self.get_currencies_from_journals(),
                 'journals': self.get_journals(),
-                'customers': self.get_customers(image_type=pos_data['imageType']),
-                'products': self.get_products(image_type=pos_data['imageType']),
+                'customers': self.get_customers(image_type=settings.get('imageType')),
+                'products': self.get_products(image_type=settings.get('imageType')),
                 'paymentTerms': self.get_payment_terms(),
                 'banks': self.get_banks(),
                 'bankPaymentTypes': self.get_bank_payment_types(),
@@ -644,8 +666,8 @@ class PosSales(http.Controller):
     '''
     @http.route('/eiru_sales/get_images', auth='user', methods=['GET'], cors='*')
     def get_images_only(self, **kw):
-        pos_data = self.get_pos_data()
-        image_type = str(pos_data['imageType'])
+        settings = self.get_pos_settings()
+        image_type = str(settings.get('imageType'))
 
         return self.make_gzip_response(
             {
@@ -696,10 +718,11 @@ class PosSales(http.Controller):
         if kw.get('setting') == 'viewCurrencyExchanges':
             values['view_currency_exchanges'] = kw.get('value', False)
 
-        pos = request.env['eiru.pos'].search([])
-        pos.write(values)
+        settings = request.env['base.config.settings'].search([], limit=1, order='id desc')
+        settings.write(values)
+        settings.execute()
         
-        return self.get_pos_data()
+        return self.get_pos_settings()
     
     '''
         Create product and return data

+ 1 - 1
models/__init__.py

@@ -1,4 +1,4 @@
 # -*- coding: utf-8 -*-
-import eiru_pos
+import res_config
 import account_invoice_line
 import sale_order_line

+ 0 - 15
models/eiru_pos.py

@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-from openerp import models, fields
-
-class EiruPointOfSale(models.Model):
-    _name = 'eiru.pos'
-
-    IMAGE_TYPES = [
-        ('small', 'Pequeña'),
-        ('big', 'Grande')
-    ]
-
-    image_type = fields.Selection(selection=IMAGE_TYPES, default=0)
-    allow_currency_exchange = fields.Boolean(default=False)
-    view_currency_exchanges = fields.Boolean(default=False)
-    

+ 34 - 0
models/res_config.py

@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+from openerp import api, models, fields
+from openerp.tools.safe_eval import safe_eval
+
+class ResConfig(models.TransientModel):
+    _inherit = 'base.config.settings'
+
+    image_type = fields.Selection(selection=[('small', 'Pequeña'), ('big', 'Grande')], default='small', string='Imagen', required=True)
+    allow_currency_exchange = fields.Boolean(default=False, string='Permitir cambiar moneda')
+    view_currency_exchanges = fields.Boolean(default=False, string='Permitir ver cambio de monedas')
+    currency_ids = fields.Many2many('res.currency', string='Monedas')
+
+    '''
+    '''
+    @api.multi
+    def set_default_settings(self):
+        ir_config = self.env['ir.config_parameter']
+        
+        ir_config.set_param('eiru_pos.image_type', str(self.image_type))
+        ir_config.set_param('eiru_pos.allow_currency_exchange', repr(self.allow_currency_exchange))
+        ir_config.set_param('eiru_pos.view_currency_exchanges', repr(self.view_currency_exchanges))
+        ir_config.set_param('eiru_pos.currency_ids', repr(self.currency_ids.mapped(lambda x: x.id)))
+
+    @api.model
+    def get_default_settings(self, fields):
+        ir_config = self.env['ir.config_parameter']
+        res_currency = self.env['res.currency']
+
+        return {
+            'image_type': ir_config.get_param('eiru_pos.image_type', 'small'),
+            'allow_currency_exchange': safe_eval(ir_config.get_param('eiru_pos.allow_currency_exchange', 'False')),
+            'view_currency_exchanges': safe_eval(ir_config.get_param('eiru_pos.view_currency_exchanges', 'False')),
+            'currency_ids': safe_eval(ir_config.get_param('eiru_pos.currency_ids', '[]'))
+        }

+ 20 - 0
security/eiru_pos_security.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data noupdate="0">
+        <record id="eiru_pos_category" model="ir.module.category">
+            <field name="name">Eiru POS</field>
+            <field name="description">Eiru POS Access Level</field>
+            <field name="sequence">200</field>
+        </record>
+        <record id="group_eiru_pos_user" model="res.groups">
+            <field name="name">Usuario</field>
+            <field name="category_id" ref="eiru_pos_category"/>
+        </record>
+        <record id="group_eiru_pos_manager" model="res.groups">
+            <field name="name">Gerente</field>
+            <field name="category_id" ref="eiru_pos_category"/>
+            <field name="implied_ids" eval="[(4, ref('group_eiru_pos_user'))]"/>
+            <field name="users" eval="[(4, ref('base.user_root'))]"/>
+        </record>
+    </data>
+</openerp>

+ 48 - 19
src/App.vue

@@ -19,7 +19,6 @@
             tab-content(
                 v-if='isSale'
                 title='Cómo quieres pagar?'
-                :beforeChange='checkPaymentMethod'
             )
                 payment-step
             template(
@@ -31,7 +30,7 @@
                 )
                     wizard-button(
                         v-if='props.activeTabIndex > 0'
-                        @click.native='props.prevTab()'
+                        @click.native='goBack'
                         :style='props.fillButtonStyle'
                     ) Volver
                 div(
@@ -41,7 +40,7 @@
                         v-if='!props.isLastStep'
                         class='wizard-footer-right'
                         :style='props.fillButtonStyle'
-                        @click.native='props.nextTab()'
+                        @click.native='goNext'
                     ) Continuar
                     wizard-button(
                         v-else
@@ -50,7 +49,7 @@
                         @click.native='createSale'
                     ) {{ props.isLastStep ? 'Finalizar' : 'Continuar' }}
         settings-button(
-            v-show='!loading'
+            v-show='!loading && isManager'
             @onClick='toggleSettingsVisibility'
         )
         settings-modal(
@@ -68,9 +67,9 @@
     import { FormWizard, TabContent, WizardButton } from 'vue-form-wizard'
     import 'vue-form-wizard/dist/vue-form-wizard.min.css'
 
-    import ProductStep from '@@/steps/Product'
-    import CustomerStep from '@@/steps/Customer'
-    import PaymentStep from '@@/steps/Payment'
+    import ProductStep from './components/steps/Product'
+    import CustomerStep from './components/steps/Customer'
+    import PaymentStep from './components/steps/Payment'
     import SettingsModal from './components/modals/SettingsModal'
     import { LoadingOverlay, SettingsButton } from './components/common'
 
@@ -91,20 +90,45 @@
             'footerButtonsVisibility',
             'settingsVisibility',
             'settings',
+            'isManager',
             'loading',
             'completed'
         ]),
-        methods: mapActions([
-            'initSale',
-            'checkCart',
-            'checkCustomer',
-            'checkPaymentMethod',
-            'checkAmountReceived',
-            'toggleSettingsVisibility',
-            'changeSetting',
-            'createSale',
-            'resetSale'
-        ]),
+        methods: {
+            goNext() {
+                this.$refs.wizard.nextTab()
+            },
+            goBack() {
+                if (this.$refs.wizard.isLastStep) {
+                    this.changeInitialPayment(0)
+                }
+
+                this.$refs.wizard.prevTab()
+            },
+            handleKeyboard({key}) {
+               this.handleNavigation(key)
+            },
+            handleNavigation(key) {
+                if (key === 'ArrowRight') {
+                    this.goNext()
+                    return
+                }
+
+                if (key === 'ArrowLeft') {
+                    this.goBack()
+                }
+            },
+            ...mapActions([
+                'initSale',
+                'checkCart',
+                'checkCustomer',
+                'toggleSettingsVisibility',
+                'changeSetting',
+                'changeInitialPayment',
+                'createSale',
+                'resetSale'
+            ])
+        },
         watch: {
             completed(value) {
                 if (!value) {
@@ -112,10 +136,15 @@
                 }
                 
                 this.$refs.wizard.changeTab(2, 0, false)
-
                 this.resetSale()
             }
         },
+        created() {
+            document.addEventListener('keyup', this.handleKeyboard)
+        },
+        destroyed() {
+            document.removeEventListener('keyup', this.handleKeyboard)
+        },
         mounted() {
             this.initSale(this.$root.mode)
         }

+ 23 - 8
src/components/modals/BankPaymentModal.vue

@@ -32,10 +32,10 @@
                             ) {{ bankPaymentType.name }}
                     .form-item(v-show="canBeShow('number_cta')")
                         label.form-label Nº de Cuenta
-                        input.form-input
+                        input.form-input(v-model='voucherNumber')
                     .form-item(v-show="canBeShow('date_maturity')")
                         label.form-label Vencimiento
-                        input.form-input
+                        input.form-input(v-model='dueDate')
                     .form-item(v-show="canBeShow('check_type_id')")
                         label.form-label Tipo de Cheque
                         select.form-input(v-model='selectedChequeTypeId')
@@ -45,10 +45,10 @@
                             ) {{ chequeType.name }}
                     .form-item(v-show="canBeShow('name_holder')")
                         label.form-label Titular
-                        input.form-input
+                        input.form-input(v-model='accountHolder')
                     .form-item
                         label.form-label Nº de Comprobante
-                        input.form-input
+                        input.form-input(v-model='voucherNumber')
                     .form-item(v-show="canBeShow('bank_id')")
                         label.form-label Banco
                         dropdown-searcher.form-input(
@@ -57,15 +57,15 @@
                         )
                     .form-item(v-show="canBeShow('number')")
                         label.form-label Nº de Vale
-                        input.form-input
+                        input.form-input(v-model='voucherNumber')
                     .form-item(v-show="canBeShow('number_cta_origin')")
                         label.form-label Nº de Cuenta Origen
-                        input.form-input
+                        input.form-input(v-model='originAccount')
             tab-content(title='De qué monto es la operación?')
                 form.payment-details-form
                     .form-item(v-show="canBeShow('amount_total')")
                         label.form-label Monto del Pago
-                        input.form-input
+                        input.form-input(v-model='amount')
             template(
                 slot='footer'
                 slot-scope='props'
@@ -214,11 +214,26 @@
                 this.$emit('onSelectBank', bank.id)
             },
             onDone() {
-                this.$emit('onDone')
+                this.$emit('onDone', {
+                    voucherNumber: this.voucherNumber,
+                    dueDate: this.dueDate,
+                    accountHolder: this.accountHolder,
+                    originAccount: this.originAccount,
+                    amount: this.amount
+                })
             },
             onCancel() {
                 this.$emit('onCancel')
             }
+        },
+        data() {
+            return {
+                voucherNumber: '',
+                dueDate: '',
+                accountHolder: '',
+                originAccount: '',
+                amount: 0
+            }
         }
     }
 </script>

+ 3 - 3
src/components/modals/DiscountModal.vue

@@ -155,9 +155,9 @@
         width: 600px
         height: 340px !important
         form
-            width: 100%
-            height: 290px
-            padding: 15px
+            width: 100% !important
+            height: 290px !important
+            padding: 15px !important
             .discount-item
                 width: 100%
                 height: 45px

+ 1 - 2
src/components/modals/VariantModal.vue

@@ -18,7 +18,6 @@
     import { mapGetters, mapActions } from 'vuex'
 
     import { Searcher } from '@@/common'
-    import { SELECT_PRODUCT } from '@/constants/actionTypes'
 
     export default {
         components: {
@@ -38,7 +37,7 @@
                 this.selectProduct(null)
             },
             ...mapActions([
-                SELECT_PRODUCT
+                'selectProduct'
             ])
         },
         watch: {

+ 9 - 10
src/components/steps/Customer.vue

@@ -30,12 +30,10 @@
 
 <script>
     import { mapGetters, mapActions } from 'vuex'
-    import { Searcher, CardGrid } from '@@/common'
+    import { Searcher, CardGrid } from '../common'
 
-    import CustomerModal from '@@/modals/CustomerModal'
-    import CustomerForm from '@@/forms/CustomerForm'
-
-    import { FILTER_CUSTOMERS, SHOW_CUSTOMER_FORM, SUBMIT_CUSTOMER, HIDE_CUSTOMER_FORM, SELECT_CUSTOMER } from '@/constants/actionTypes'
+    import CustomerModal from '../modals/CustomerModal'
+    import CustomerForm from '../forms/CustomerForm'
 
     export default {
         components: {
@@ -52,11 +50,12 @@
             'selectedCustomer'
         ]),
         methods: mapActions([
-            FILTER_CUSTOMERS,
-            SHOW_CUSTOMER_FORM,
-            SUBMIT_CUSTOMER,
-            HIDE_CUSTOMER_FORM,
-            SELECT_CUSTOMER
+            'filterCustomers',
+            'showCustomerForm',
+            'showCustomerForm',
+            'submitCustomer',
+            'hideCustomerForm',
+            'selectCustomer'
         ])
     }
 </script>

+ 68 - 25
src/components/steps/Payment.vue

@@ -18,14 +18,13 @@
                     @onChange="changePaymentType($event ? 'cash' : 'credit')"
                 )
             //- input para condiciones de pago en caso de pago a crédito
-            transition(name='fade')
-                .form-item(v-show="paymentType === 'credit'")
-                    select.form-input.input-only(v-model='paymentTermId')
-                        option(
-                            :value='term.id' 
-                            v-for='term in paymentTerms'
-                            v-if="term.lines.length > 0 && (term.lines[0].days !== 0 || term.lines[0].value !==  'balance')"
-                        ) {{ term.name }}
+            .form-item(v-show="paymentType === 'credit'")
+                select.form-input.input-only(v-model='paymentTermId')
+                    option(
+                        :value='term.id' 
+                        v-for='term in paymentTerms'
+                        v-if="term.lines.length > 0 && (term.lines[0].days !== 0 || term.lines[0].value !==  'balance')"
+                    ) {{ term.name }}
             //- input para monto de pago
             .form-item
                 label.form-label Monto a Pagar
@@ -38,6 +37,10 @@
                     @onChangeValue='onChangeValue'
                     @onClickOption='changeCurrency'
                 )
+                .other_exchanges(v-if='settings.viewExchanges')
+                    h2 En otras monedas
+                    ul
+                        li(v-for='value in amountToPayInOtherCurrencies') {{ value.amount | currency(value.currency) }}
             //- input para el monto recibido
             .form-item
                 label.form-label Monto Recibido
@@ -62,17 +65,16 @@
                         :editable='false'
                     )
             //- input para el monto de cuotas calculadas en caso de pago a crédito
-            transition(name='fade')
-                .form-item-table(v-show="paymentType === 'credit'")
-                    table
-                        thead
-                            tr
-                                th Monto a Pagar
-                                th Fecha de Pago
-                        tbody
-                            tr(v-for='line in paymentLines')
-                                td {{ line.total | currency(...selectedCurrency) }}
-                                td {{ line.date }}
+            .form-item-table(v-show="paymentType === 'credit'")
+                table
+                    thead
+                        tr
+                            th Monto a Pagar
+                            th Fecha de Pago
+                    tbody
+                        tr(v-for='line in paymentLines')
+                            td {{ line.total | currency(...selectedCurrency) }}
+                            td {{ line.date }}
         bank-payment-modal(
             :journals='bankJournals'
             :hasSelectedJournal='hasBankJournalSelected'
@@ -120,6 +122,7 @@
             ...mapGetters([
                 'companyName',
                 'amountToPay',
+                'amountToPayInOtherCurrencies',
                 'initialPayment',
                 'amountResidual',
                 'paymentLines',
@@ -143,7 +146,8 @@
                 'paymentMethods',
                 'banks',
                 'bankPaymentTypes',
-                'chequeTypes'
+                'chequeTypes',
+                'settings'
             ])
         },
         watch: {
@@ -161,7 +165,8 @@
             focusInitialPayment() {
                 this.$nextTick(() => this.$refs.initialAmount.$el.children[0].children[0].focus())
             },
-            endBankPayment() {
+            endBankPayment(data) {
+                this.changeBankPaymentData(data)
                 this.toggleBankPayment()
             },
             changeBankJournal(journalId) {
@@ -169,7 +174,6 @@
                 this.changeBankPaymentType()
             },
             cancelBankPayment() {
-                console.log('canceling')
                 this.toggleBankPayment()
                 this.changePaymentMethod('Efectivo')
                 this.autoSelectJournal()
@@ -188,6 +192,7 @@
                 'changeChequeType',
                 'changeBank',
                 'changeInitialPayment',
+                'changeBankPaymentData',
                 'computePaymentLines',
                 'toggleBankPayment',
                 'notify'
@@ -208,8 +213,8 @@
             width: calc(100% - 450px)
             height: 100%
             margin-right: 50px
-            padding: 35px
-            background: $app-light-color
+            padding: 25px
+            background: $app-bg-color
             .form-item
                 width: 100%
                 height: 35px
@@ -239,14 +244,50 @@
                     label
                         font-size: 12pt
                         margin: 0 35px 15px 5px
+                .other_exchanges
+                    width: 145px
+                    height: 150px
+                    border: 1px solid #e0e0e0
+                    display: inline-block
+                    position: relative
+                    bottom: calc(50% + 40px)
+                    margin-left: 25px
+                    &:after
+                        content: ''
+                        position: absolute
+                        left: 0
+                        top: 50%
+                        width: 0
+                        height: 0
+                        border: 16px solid transparent
+                        border-right-color: #e0e0e0
+                        border-left: 0
+                        margin-top: -16px
+                        margin-left: -16px
+                    h2
+                        font-size: 8pt
+                        margin: 10px 0 0
+                        color: #d3d3d3
+                        text-align: center
+                    ul
+                        list-style: none
+                        margin: 0
+                        padding: 10px
+                        font-size: 12pt
+                        text-align: center
+                        li
+                            margin-bottom: 10px
+                            border-bottom: 1px solid #eeeeee
             .form-item-table
                 width: 100%
                 height: 200px
-                border: 1px solid $app-border-color
+                border: 1px solid #e0e0e0
                 overflow-y: auto
                 table
                     width: 100%
                     thead
+                        background-color: #7c7bad
+                        color: #fff
                         th
                             line-height: 35px
                             padding-left: 10px
@@ -258,6 +299,8 @@
                         td
                             height: 35px
                             padding-left: 10px
+                            line-height: 30px
+                            font-size: 11pt
 
                         td:nth-child(1)
                             width: 200px

+ 4 - 4
src/components/steps/Product.vue

@@ -42,10 +42,10 @@
 
 <script>
     import { mapGetters, mapActions } from 'vuex'
-    import { Searcher, CardGrid, Cart } from '@@/common'
-    import ProductModal from '@@/modals/ProductModal'
-    import VariantModal from '@@/modals/VariantModal'
-    import DiscountModal from '@@/modals/DiscountModal'
+    import { Searcher, CardGrid, Cart } from '../common'
+    import ProductModal from '../modals/ProductModal'
+    import VariantModal from '../modals/VariantModal'
+    import DiscountModal from '../modals/DiscountModal'
 
     export default {
         components: {

+ 0 - 122
src/constants/actionTypes.js

@@ -1,122 +0,0 @@
-const COMPLETE_SALE = 'completeSale'
-
-const ERROR_SALE = 'errorSale'
-
-const NOTIFY = 'notify'
-
-const ASK_FOR_PRINT = 'askForPrint'
-
-const PROCESS_PRINT = 'processPrint'
-
-const PRINT_TICKET = 'printTicket'
-
-const INIT_SALE = 'initSale'
-
-const EXPLODE_DATA = 'explodeData'
-
-const CHECK_CART = 'checkCart'
-
-const CHECK_CUSTOMER = 'checkCustomer'
-
-const CHECK_AMOUNT_RECEIVED = 'checkAmountReceived'
-
-const CHECK_PAYMENT_METHOD = 'checkPaymentMethod'
-
-const CREATE_SALE = 'createSale'
-
-const INIT_USER = 'initUser'
-
-const INIT_PRODUCTS = 'initProducts'
-
-const FILTER_PRODUCTS = 'filterProducts'
-
-const SHOW_PRODUCT_FORM = 'showProductForm'
-
-const HIDE_PRODUCT_FORM = 'hideProductForm'
-
-const SUBMIT_PRODUCT = 'submitProduct'
-
-const CREATE_PRODUCT = 'createProduct'
-
-const RECEIVE_PRODUCT = 'receiveProduct'
-
-const SELECT_PRODUCT = 'selectProduct'
-
-const INIT_PAYMENT_TERMS = 'initPaymentTerms'
-
-const SELECT_PAYMENT_TERM = 'selectPaymentTerm'
-
-const CHANGE_PAYMENT_TYPE = 'changePaymentType'
-
-const CHANGE_INITIAL_PAYMENT = 'changeInitialPayment'
-
-const COMPUTE_PAYMENT_LINES = 'computePaymentLines'
-
-const INIT_JOURNALS = 'initJournals'
-
-const SELECT_JOURNAL = 'selectJournal'
-
-const INIT_DATE = 'initDate'
-
-const INIT_CUSTOMERS = 'initCustomers'
-
-const FILTER_CUSTOMERS = 'filterCustomers'
-
-const SHOW_CUSTOMER_FORM = 'showCustomerForm'
-
-const HIDE_CUSTOMER_FORM = 'hideCustomerForm'
-
-const SUBMIT_CUSTOMER = 'submitCustomer'
-
-const CREATE_CUSTOMER = 'createCustomer'
-
-const RECEIVE_CUSTOMER = 'receiveCustomer'
-
-const SELECT_CUSTOMER = 'selectCustomer'
-
-const INIT_CURRENCIES = 'initCurrencies'
-
-const CHANGE_CART_TOTAL = 'changeCartTotal'
-
-const ADD_TO_CART = 'addToCart'
-
-const DECREASE_FROM_CART = 'decreaseFromCart'
-
-const UNDO_PRICE = 'undoPrice'
-
-const CHANGE_PRICE = 'changePrice'
-
-const APPLY_PRICE = 'applyPrice'
-
-const REMOVE_FROM_CART = 'removeFromCart'
-
-const RESET_CART = 'resetCart'
-
-const RESET_CURRENCY = 'resetCurrency'
-
-const RESET_CUSTOMER = 'resetCustomer'
-
-const RESET_DATE = 'resetDate'
-
-const RESET_JOURNAL = 'resetJournal'
-
-const RESET_PAYMENT = 'resetPayment'
-
-const RESET_PRODUCT = 'resetProduct'
-
-const RESET_USER = 'resetUser'
-
-const RESET_SALE = 'resetSale'
-
-export {
-    COMPLETE_SALE, ERROR_SALE, ASK_FOR_PRINT, PROCESS_PRINT, PRINT_TICKET, // App
-    NOTIFY, INIT_SALE, EXPLODE_DATA, CHECK_CART, CHECK_CUSTOMER, CHECK_PAYMENT_METHOD, CHECK_AMOUNT_RECEIVED, CREATE_SALE, RESET_SALE, // Sale
-    INIT_USER, RESET_USER, // Users
-    INIT_PRODUCTS, FILTER_PRODUCTS, SHOW_PRODUCT_FORM, HIDE_PRODUCT_FORM, SUBMIT_PRODUCT, CREATE_PRODUCT, RECEIVE_PRODUCT, SELECT_PRODUCT, RESET_PRODUCT, // Product
-    INIT_PAYMENT_TERMS, CHANGE_PAYMENT_TYPE, CHANGE_INITIAL_PAYMENT, COMPUTE_PAYMENT_LINES, SELECT_PAYMENT_TERM, RESET_PAYMENT, // Payment terms
-    INIT_JOURNALS, SELECT_JOURNAL, RESET_JOURNAL, // Journals
-    INIT_DATE, RESET_DATE, // Date
-    INIT_CUSTOMERS, FILTER_CUSTOMERS, SHOW_CUSTOMER_FORM, HIDE_CUSTOMER_FORM, SUBMIT_CUSTOMER, CREATE_CUSTOMER, RECEIVE_CUSTOMER, SELECT_CUSTOMER, RESET_CUSTOMER, // Customer
-    INIT_CURRENCIES, RESET_CURRENCY, // Currencies
-    CHANGE_CART_TOTAL, ADD_TO_CART, DECREASE_FROM_CART, UNDO_PRICE, CHANGE_PRICE, APPLY_PRICE, REMOVE_FROM_CART, RESET_CART // Cart
-}

+ 0 - 99
src/constants/mutationTypes.js

@@ -1,99 +0,0 @@
-const SET_MODE = 'setMode'
-
-const SET_PROCESSING = 'setProcessing'
-
-const SET_ASK_FOR_PRINT = 'setAskForPrint'
-
-const SET_COMPLETED = 'setCompleted'
-
-const SET_ERROR = 'setError'
-
-const SET_USER = 'setUser'
-
-const SET_LOADING_USER = 'setLoadingUser'
-
-const SET_PRODUCTS = 'setProducts'
-
-const SET_FILTERED_PRODUCTS = 'setFilteredProducts'
-
-const SET_LOADING_PRODUCTS = 'setLoadingProducts'
-
-const ADD_PRODUCT = 'addProduct'
-
-const SET_SHOW_PRODUCT_FORM = 'setShowProductForm'
-
-const SELECT_PRODUCT = 'selectProduct'
-
-const SET_PRODUCT_WITH_VARIANT = 'setProductWithVariant'
-
-const SET_PAYMENT_TERMS = 'setPaymentTerms'
-
-const SET_LOADING_PAYMENT_TERMS = 'setLoadingPaymentTerms'
-
-const AUTOSELECT_PAYMENT_TERM = 'autoSelectPaymentTerm'
-
-const SET_SELECTED_PAYMENT_TERM = 'setSelectedPaymentTerm'
-
-const SET_PAYMENT_TYPE = 'setPaymentType'
-
-const SET_INITIAL_PAYMENT = 'setInitialPayment'
-
-const SET_PAYMENT_LINES = 'setPaymentLines'
-
-const SET_JOURNALS = 'setJournals'
-
-const SET_LOADING_JOURNALS= 'setLoadingJournals'
-
-const AUTOSELECT_JOURNAL = 'autoSelectJournal'
-
-const SET_SELECTED_JOURNAL = 'setSelectedJournal'
-
-const SET_DATE = 'setDate'
-
-const SET_LOADING_DATE = 'setLoadingDate'
-
-const SET_CUSTOMERS = 'setCustomers'
-
-const SET_FILTERED_CUSTOMERS = 'setFilteredCustomers'
-
-const SET_LOADING_CUSTOMERS = 'setLoadingCustomers'
-
-const SET_SHOW_CUSTOMER_FORM = 'setShowCustomerForm'
-
-const SET_SELECTED_CUSTOMER = 'setSelectedCustomer'
-
-const ADD_CUSTOMER = 'addCustomer'
-
-const SET_CURRENCIES = 'setCurrencies'
-
-const SET_LOADING_CURRENCIES = 'setLoadingCurrencies'
-
-const AUTOSELECT_CURRENCY = 'autoSelectCurrency'
-
-const SET_CART = 'setCart'
-
-const PUSH_TO_CART = 'pushToCart'
-
-const PULL_FROM_CART = 'pullFromCart'
-
-const SET_CART_TOTAL = 'setCartTotal'
-
-const SET_ITEM_TO_DISCOUNT = 'setItemToDiscount'
-
-const SET_ITEM_PRICE = 'setItemPrice'
-
-const RESET_PRICE = 'resetPrice'
-
-const SET_RESULT = 'setResult'
-
-export {
-    SET_MODE, SET_PROCESSING, SET_ASK_FOR_PRINT,  SET_COMPLETED, SET_RESULT, SET_ERROR, // App
-    SET_USER, SET_LOADING_USER, // User
-    SET_PRODUCTS, SET_FILTERED_PRODUCTS, SET_LOADING_PRODUCTS, ADD_PRODUCT, SET_SHOW_PRODUCT_FORM, SELECT_PRODUCT, SET_PRODUCT_WITH_VARIANT, // Product
-    SET_PAYMENT_TERMS, SET_LOADING_PAYMENT_TERMS, AUTOSELECT_PAYMENT_TERM, SET_SELECTED_PAYMENT_TERM, SET_PAYMENT_TYPE, SET_INITIAL_PAYMENT, SET_PAYMENT_LINES, // Payment
-    SET_JOURNALS, SET_LOADING_JOURNALS, AUTOSELECT_JOURNAL, SET_SELECTED_JOURNAL, // Journal
-    SET_DATE, SET_LOADING_DATE, // Date
-    SET_CUSTOMERS, SET_FILTERED_CUSTOMERS, SET_LOADING_CUSTOMERS, SET_SHOW_CUSTOMER_FORM, SET_SELECTED_CUSTOMER, ADD_CUSTOMER, // Customer
-    SET_CURRENCIES, SET_LOADING_CURRENCIES, AUTOSELECT_CURRENCY, // Currency
-    PUSH_TO_CART, PULL_FROM_CART, SET_CART_TOTAL, SET_CART, SET_ITEM_TO_DISCOUNT, SET_ITEM_PRICE, RESET_PRICE // Cart
-}

+ 0 - 16
src/constants/resourcePaths.js

@@ -1,16 +0,0 @@
-const BASE_URL = '/eiru_sales'
-
-const INIT_SALE_URL = `${BASE_URL}/init`
-
-const CREATE_PRODUCT_URL = `${BASE_URL}/create_product`
-
-const CREATE_CUSTOMER_URL = `${BASE_URL}/create_customer`
-
-const PROCESS_SALE_URL = `${BASE_URL}/process_sale`
-
-export {
-    INIT_SALE_URL,
-    CREATE_PRODUCT_URL,
-    CREATE_CUSTOMER_URL,
-    PROCESS_SALE_URL
-}

+ 26 - 13
src/store/actions.js

@@ -1,19 +1,21 @@
 import axios from 'axios'
 
 const actions = {
-    notify({ commit }, message) {
+    notify(_, message) {
         openerp.web.notification.do_warn('Atención', message)
         return false
     },
     initSale({ getters, commit, dispatch }, payload) {
         commit('setMode', payload || getters.mode)
         commit('setResult', '')
+        
+        commit('setLoading', true)
+        commit('setCompleted', false)
 
         return axios.get('/eiru_sales/init').then(({data}) => {
             commit('setLoading', false)
             commit('toggleFooterButtonsVisibility')
 
-            dispatch('completeSale', false)
             dispatch('explodeData', data)
         }).catch(error => {
             console.error(error)
@@ -21,7 +23,7 @@ const actions = {
     },
     explodeData({ dispatch, commit }, payload) {
         for (let value in payload) {
-            if (value === 'pos') {
+            if (value === 'settings') {
                 commit('updateSettings', payload[value])
                 continue
             }
@@ -73,10 +75,10 @@ const actions = {
         return true
     },
     checkAmountReceived({ getters, dispatch }) {
-        if (getters.paymentType == 'cash') {
-            return getters.initialPayment >= getters.cartTotal || dispatch('notify', 'El monto recibido no puede ser menor al monto a pagar')
+        if (getters.paymentType === 'cash') {
+            return getters.initialPayment >= getters.amountToPay || dispatch('notify', 'El monto recibido no puede ser menor al monto a pagar')
         } else {
-            return getters.initialPayment < getters.cartTotal || dispatch('notify', 'El monto recibido no puede ser igual o mayor al monto a pagar')
+            return getters.initialPayment < getters.amountToPay || dispatch('notify', 'El monto recibido no puede ser igual o mayor al monto a pagar')
         }
     },
     toggleSettingsVisibility({ commit }) {
@@ -115,6 +117,14 @@ const actions = {
         })
     },
     createSale({ getters, commit, dispatch }) {
+        if (getters.paymentType === 'cash' && getters.initialPayment < getters.amountToPay) {
+            return dispatch('notify', 'El monto recibido no puede ser menor al monto a pagar')
+        } 
+
+        if (getters.paymentType !== 'cash' && getters.initialPayment >= getters.amountToPay) {
+            return dispatch('notify', 'El monto recibido no puede ser igual o mayor al monto a pagar')
+        }
+
         commit('setLoading', true)
 
         return axios.post('/eiru_sales/process_sale', {
@@ -134,23 +144,26 @@ const actions = {
                 paymentTermId: getters.paymentTerm.id,
                 journalId: getters.selectedJournal.id,
                 payment: getters.initialPayment > getters.amountToPay ? getters.amountToPay : getters.initialPayment,
-                currencyId: getters.selectedCurrency.id
+                currencyId: getters.selectedCurrency.id,
+                bankPaymentData: {
+                    bankPaymentTypeId: (getters.selectedBankPaymentType && getters.selectedBankPaymentType.id) || null,
+                    chequeTypeId: (getters.selectedChequeType && getters.selectedChequeType.id) || null,
+                    bankId: (getters.selectedBank && getters.selectedBank.id) || null,
+                    ...getters.bankPaymentData
+                }
             }
-        }).then(({data}) => {
+        }).then(() => {
             commit('setLoading', false)
             commit('setCompleted', true)
-        }).catch(error => {
+        }).catch(() => {
             commit('setLoading', false)
             commit('setCompleted', true)
         })
     },
-    completeSale({ commit }, payload) {
-        commit('setAskForPrint', !!payload)
-    },
     resetSettings() {
         // Ignore this
     },
-    resetSale({rootState, commit, dispatch}) {
+    resetSale({rootState, dispatch}) {
         for (let key in rootState) {
             if (!(rootState[key] instanceof Object)) {
                 continue

+ 3 - 1
src/store/getters.js

@@ -18,7 +18,8 @@ const getters = {
         let values = {
             imageType: true,
             allowExchange: false,
-            viewExchanges: false
+            viewExchanges: false,
+            currencies: []
         }
 
         if (!state.settings) {
@@ -28,6 +29,7 @@ const getters = {
         values.imageType = state.settings.imageType === 'small'
         values.allowExchange = state.settings.allowCurrencyExchange
         values.viewExchanges = state.settings.viewCurrencyExchanges
+        values.currencies = state.settings.currencies
 
         return values
     },

+ 0 - 1
src/store/index.js

@@ -1,6 +1,5 @@
 import Vue from 'vue'
 import Vuex from 'vuex'
-import createPersistedState from 'vuex-persistedstate'
 
 import state from '@/store/state'
 import getters from '@/store/getters'

+ 13 - 27
src/store/modules/currency.js

@@ -8,8 +8,16 @@ const getters = {
     currencies(state) {
         return state.currencies
     },
-    currencySymbols(state) {
-        return (state.currencies && state.selectedCurrency) && state.currencies.filter(c => state.selectedCurrency.id !== c.id).map(c => c.symbol)
+    currencySymbols(state, { settings }) {
+        if (!state.currencies || !state.selectedCurrency) {
+            return []
+        }
+
+        if (settings && !settings.allowCurrencyExchange) {
+            return []
+        }
+
+        return state.currencies.filter(c => state.selectedCurrency.id !== c.id).map(c => c.symbol)
     },
     baseCurrency(state) {
         return state.currencies.find(c => c.base === true)
@@ -34,55 +42,33 @@ const mutations = {
         
         state.selectedCurrency = state.currencies.find(c => c.base === true)
     },
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     setCurrencies(state, payload) {
         state.currencies = payload
     },
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     setLoadingCurrencies(state, payload) {
         state.loadingCurrencies = !!payload
     }
 }
 
 const actions = {
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
     initCurrencies({ commit }, payload) {
         commit('setCurrencies', payload)
         commit('setSelectedCurrency')
         commit('setLoadingCurrencies')
     },
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
     resetCurrency({ commit }) {
         commit('setLoadingCurrencies', true)
         commit('setCurrencies', [])
     },
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
     changeCurrency({ commit, dispatch, getters }, currencySymbol) {
         commit('computePaymentInCurrency', {
             fromSymbol: getters.currencySymbol,
             toSymbol: currencySymbol
         });
+
         commit('setSelectedCurrency', currencySymbol)
+        // commit('setInitialPayment', 0)
+        // commit('setAmountResidual')
 
         if (getters.paymentType === 'credit') {
             dispatch('computePaymentLines')

+ 0 - 94
src/store/modules/customer.js

@@ -8,170 +8,76 @@ const state = {
 }
 
 const getters = {
-    /**
-     * 
-     * @param {*} state 
-     */
     customers(state) {
         return state.customers
     },
-    /**
-     * 
-     * @param {*} state 
-     */
     visibleCustomers(state) {
         return state.filteredCustomers.length === 0 ? state.customers : state.filteredCustomers
     },
-    /**
-     * 
-     * @param {*} state 
-     */
     loadingCustomers(state) {
         return state.loadingCustomers
     },
-    /**
-     * 
-     * @param {*} state 
-     */
     showingCustomerForm(state) {
         return state.showingCustomerForm
     },
-    /**
-     * 
-     * @param {*} state 
-     */
     selectedCustomer(state) {
         return state.selectedCustomer
     },
-    /**
-     * 
-     * @param {*} state 
-     */
     selectedCustomerName(state) {
         return state.selectedCustomer && state.selectedCustomer.name
     },
-    /**
-     * 
-     * @param {*} state 
-     */
     customerCredit(state) {
         return state.selectedCustomer && state.selectedCustomer.creditLimit >= state.selectedCustomer.credit ? state.selectedCustomer.creditLimit - state.credit : 0
     }
 }
 
 const mutations = {
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     setCustomers(state, payload) {
         state.customers = payload
     },
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     setFilteredCustomers(state, payload) {
         state.filteredCustomers = [...payload]
     },
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     setLoadingCustomers(state, payload) {
         state.loadingCustomers = !!payload
     },
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     setShowCustomerForm(state, payload) {
         state.showingCustomerForm = !!payload
     },
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     addCustomer(state, payload) {
         state.customers = [payload, ...state.customers]
     },
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     setSelectedCustomer(state, payload) {
         state.selectedCustomer = payload
     }
 }
 
 const actions = {
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
     initCustomers({ commit }, payload) {
         commit('setCustomers', payload)
         commit('setLoadingCustomers')
     },
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
     filterCustomers({ commit }, payload) {
         commit('setFilteredCustomers', payload)
     },
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
     showCustomerForm({ commit }) {
         commit('setShowCustomerForm', true)
     },
-    /**
-     * 
-     * @param {*} param0 
-     */
     hideCustomerForm({ commit }) {
         commit('setShowCustomerForm', false)
     },
-    /**
-     * 
-     * @param {*} param0 
-     */
     submitCustomer({ commit, dispatch }, payload) {
         commit('setLoadingCustomers', true)
         dispatch('createCustomer', payload)
         dispatch('hideCustomerForm')
     },
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
     receiveCustomer({ commit }, payload) {
         commit('addCustomer', payload)
         commit('setLoadingCustomers', false)
     },
-    /**
-     * 
-     * @param {*} param0 
-     */
     selectCustomer({ commit }, payload) {
         commit('setSelectedCustomer', payload)
     },
-    /**
-     * 
-     * @param {*} param0 
-     */
     resetCustomer({ commit }) {
         commit('setLoadingCustomers', true)
         commit('setCustomers', [])

+ 0 - 27
src/store/modules/date.js

@@ -9,55 +9,28 @@ const state = {
 }
 
 const getters = {
-    /**
-     * 
-     * @param {*} state 
-     */
     date(state) {
         return state.date
     },
-    /**
-     * 
-     * @param {*} state 
-     */
     loadingDate(state) {
         return state.loadingDate
     }
 }
 
 const mutations = {
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     setDate(state, payload) {
         state.date = payload
     },
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     setLoadingDate(state, loading) {
         state.loadingDate = !!loading
     }
 }
 
 const actions = {
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
     initDate({ commit }, payload) {
         commit('setDate', payload)
         commit('setLoadingDate')
     },
-    /**
-     * 
-     * @param {*} param0 
-     */
     resetDate({ commit }) {
         commit('setLoadingDate', true)
         commit('setDate', null)

+ 35 - 1
src/store/modules/payment.js

@@ -8,7 +8,8 @@ const state = {
     amountToPay: 0,
     initialPayment: 0,
     amountResidual: 0,
-    paymentLines: []
+    paymentLines: [],
+    bankPaymentData: null,
 }
 
 const getters = {
@@ -33,6 +34,30 @@ const getters = {
     amountToPay(state) {
         return state.amountToPay
     },
+    amountToPayInOtherCurrencies(state, { settings, currencies, user, selectedCurrency, cartTotal }) {
+        let values = []
+
+        if (!user || !selectedCurrency || cartTotal === 0) {
+            return values
+        }
+
+        const base = currencies.find(c => c.id === user.company.currencyId)
+
+        for(let currency of settings.currencies) {
+            if (currency.id === selectedCurrency.id) {
+                continue
+            }
+
+            const rate = base.rateSilent / currency.rateSilent
+
+            values.push({
+                currency,
+                amount: cartTotal / rate,
+            })
+        }
+
+        return values
+    },
     initialPayment(state) {
         return state.initialPayment
     },
@@ -41,6 +66,9 @@ const getters = {
     },
     paymentLines(state) {
         return state.paymentLines
+    },
+    bankPaymentData(state) {
+        return state.bankPaymentData
     }
 }
 
@@ -157,6 +185,9 @@ const mutations = {
 
             totals = []
         }
+    },
+    setBankPaymentData(state, bankPaymentData) {
+        state.bankPaymentData = bankPaymentData
     }
 }
 
@@ -201,6 +232,9 @@ const actions = {
             dispatch('computePaymentLines')
         }
     },
+    changeBankPaymentData({ commit }, bankPaymentData) {
+        commit('setBankPaymentData', bankPaymentData)
+    },
     computePaymentLines({ commit, getters }) {
         commit('setPaymentLines', {
             date: getters.date,

+ 0 - 92
src/store/modules/product.js

@@ -8,158 +8,70 @@ const state = {
 }
 
 const getters = {
-    /**
-     * 
-     * @param {*} state 
-     */
     products(state) {
         return state.products
     },
-    /**
-     * 
-     * @param {*} state 
-     */
     visibleProducts(state) {
         return state.filteredProducts.length === 0 ? state.products : state.filteredProducts
     },
-    /**
-     * 
-     * @param {*} state 
-     */
     loadingProducts(state) {
         return state.loadingProducts
     },
-    /**
-     * 
-     * @param {*} state 
-     */
     showingProductForm(state) {
         return state.showingProductForm
     },
-    /**
-     * 
-     * @param {*} state 
-     */
     showVariants(state) {
         return state.showVariants
     },
-    /**
-     * 
-     * @param {*} state 
-     */
     productWithVariant(state) {
         return state.productWithVariant
     }
 }
 
 const mutations = {
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     setProducts(state, payload) {
         state.products = payload
     },
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     setFilteredProducts(state, payload) {
         state.filteredProducts = [...payload]
     },
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     setLoadingProducts(state, payload) {
         state.loadingProducts = !!payload
     },
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     setShowProductForm(state, payload) {
         state.showingProductForm = !!payload
     },
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     addProduct(state, payload) {
         state.products = [payload, ...state.products]
     },
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
     setProductWithVariant(state, payload) {
         state.productWithVariant = payload
     }
 }
 
 const actions = {
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
     initProducts({ commit }, payload) {
         commit('setProducts', payload)
         commit('setLoadingProducts')
     },
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
     filterProducts({ commit }, payload) {
         commit('setFilteredProducts', payload)
     },
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
     showProductForm({ commit }) {
         commit('setShowProductForm', true)
     },
-    /**
-     * 
-     * @param {*} param0 
-     */
     hideProductForm({ commit }) {
         commit('setShowProductForm', false)
     },
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
     submitProduct({ commit, dispatch }, payload) {
         commit('setLoadingProducts', true)
         dispatch('createProduct', payload)
         dispatch('hideProductForm')
     },
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
     receiveProduct({ commit }, payload) {
         commit('addProduct', payload)
         commit('setLoadingProducts', false)
     },
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
     selectProduct({ commit, dispatch }, payload) {
         if (!payload) {
             commit('setProductWithVariant', null)
@@ -178,10 +90,6 @@ const actions = {
             dispatch('addToCart', payload.variants[0])
         }
     },
-    /**
-     * 
-     * @param {*} param0 
-     */
     resetProduct({ commit }) {
         commit('setLoadingProducts', true)
         commit('setProducts', [])

+ 11 - 48
src/store/modules/user.js

@@ -1,12 +1,3 @@
-import { 
-    SET_USER, 
-    SET_LOADING_USER 
-} from '@/constants/mutationTypes'
-
-import { 
-    INIT_USER,
-    RESET_USER
-} from '@/constants/actionTypes'
 
 const initialState = {
     user: null,
@@ -19,65 +10,37 @@ const state = {
 }
 
 const getters = {
-    /**
-     * 
-     * @param {*} state 
-     */
     user(state) {
         return state.user
     },
-    /**
-     * 
-     * @param {*} state 
-     */
     companyName(state) {
         return state.user && state.user.company.name
     },
-    /**
-     * 
-     * @param {*} state 
-     */
+    isManager(state) {
+        return state.user && state.user.isManager
+    },
     loadingUser(state) {
         return state.loadingUser
     }
 }
 
 const mutations = {
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
-    [SET_USER] (state, payload) {
+    setUser(state, payload) {
         state.user = payload
     },
-    /**
-     * 
-     * @param {*} state 
-     * @param {*} payload 
-     */
-    [SET_LOADING_USER] (state, payload) {
+    setLoadingUser(state, payload) {
         state.loadingUser = !!payload
     }
 }
 
 const actions = {
-    /**
-     * 
-     * @param {*} param0 
-     * @param {*} payload 
-     */
-    [INIT_USER] ({ commit }, payload) {
-        commit(SET_USER, payload)
-        commit(SET_LOADING_USER)
+    initUser({ commit }, payload) {
+        commit('setUser', payload)
+        commit('setLoadingUser')
     },
-    /**
-     * 
-     * @param {*} param0 
-     */
-    [RESET_USER] ({ commit }) {
-        commit(SET_LOADING_USER, true)
-        commit(SET_USER, null)
+    resetUser({ commit }) {
+        commit('setLoadingUser', true)
+        commit('setUser', null)
     }
 }
 

+ 1 - 1
src/utils/db.js

@@ -1,4 +1,4 @@
-export class Store {
+export class Db {
 
     /**
      * 

+ 2 - 2
src/utils/index.js

@@ -1,5 +1,5 @@
-import { Store } from './db'
+import { Db } from './db'
 
 export {
-    Store
+    Db
 }

+ 38 - 0
templates.xml

@@ -21,5 +21,43 @@
 
         <!-- <menuitem id="eiru_pos.new_sale" name="Nueva venta" parent="eiru_dashboard.eiru_dashboard_main" action="eiru_pos.pos_action" sequence="2" /> -->
         <!-- <menuitem id="eiru_pos.new_budget" name="Nuevo presupuesto" parent="eiru_dashboard.eiru_dashboard_main" action="eiru_pos.budget_action" sequence="3" /> -->
+
+        <record id="eiru_pos.settings_form" model="ir.ui.view">
+            <field name="name">Preferencias Eiru POS</field>
+            <field name="model">base.config.settings</field>
+            <field name="arch" type="xml">
+                <form string="Eiru POS">
+                    <header>
+                        <button string="Guardar" type="object" name="execute" class="oe_highlight" />
+                        or
+                        <button string="Cancelar" type="object" name="cancel" class="oe_link" />
+                    </header>
+                    <div name="general">
+                        <separator string="Preferencias" />
+                        <group>
+                            <group>
+                                <field name="image_type" />
+                                <field name="allow_currency_exchange" />
+                                <field name="view_currency_exchanges" />
+                            </group>
+                            <group>
+                                <field name="currency_ids" widget="many2many_tags" options="{'no_create_edit': True}" />
+                            </group>
+                        </group>
+                    </div>
+                </form>
+            </field>
+        </record>
+
+        <record id="eiru_pos.action_settings" model="ir.actions.act_window">
+            <field name="name">Preferencias Eiru POS</field>
+            <field name="type">ir.actions.act_window</field>
+            <field name="res_model">base.config.settings</field>
+            <field name="view_id" ref="eiru_pos.settings_form"></field>
+            <field name="view_mode">form</field>
+            <field name="target">inline</field>
+        </record>
+
+        <menuitem id="eiru_pos.preferences" name="TPV" parent="base.menu_config" action="eiru_pos.action_settings" sequence="100" />
     </data>
 </openerp>