Browse Source

[ADD] Adicionado Registro de operaciones bancarias

adrielso 7 years ago
parent
commit
6883236d9c

+ 55 - 18
controllers/main.py

@@ -358,22 +358,6 @@ class PaymentsSales(http.Controller):
     def create_bank_statement(self, date_server, user_id, account_voucher):
         # Get bank Statamente
         bank_statement = request.env['account.bank.statement'].search([('journal_id', '=', account_voucher.journal_id.id), ('date', '=', date_server)])
-        amount = account_voucher.amount
-        if account_voucher.type == 'payment':
-            amount = amount * -1
-
-        # Create line bank
-        bank_statement_line = [[0, False, {
-            'name': account_voucher.reference,
-            'partner_id': account_voucher.partner_id.id,
-            'amount': amount,
-            'voucher_id': account_voucher.id,
-            'journal_id': account_voucher.journal_id.id,
-            'account_id': account_voucher.account_id.id,
-            'journal_entry_id': account_voucher.move_id.id,
-            'currency_id': account_voucher.currency_id.id,
-            'ref': 'NP'
-        }]]
 
         bank = {
             'journal_id': account_voucher.journal_id.id,
@@ -381,12 +365,11 @@ class PaymentsSales(http.Controller):
             'date': date_server,
             'user_id': user_id,
             'state': 'open' if account_voucher.journal_id.type == 'cash' else 'draft',
-            'line_ids': bank_statement_line
         }
 
         if bank_statement:
             if len(bank_statement) == 1:
-                bank_statement.write(bank)
+                 bank_statement.write(bank)
             else:
                 bank_statement[len(bank_statement) -1].write(bank)
         else:
@@ -394,6 +377,53 @@ class PaymentsSales(http.Controller):
 
         return bank_statement
 
+    '''
+        Create Statemne Line
+    '''
+    def create_bank_statement_line(self, account_voucher, statement):
+        # Create line bank
+        amount = account_voucher.amount
+        if account_voucher.type == 'payment':
+            amount = amount * -1
+        bank_statement_line = {
+            'name': account_voucher.reference,
+            'partner_id': account_voucher.partner_id.id,
+            'amount': amount,
+            'voucher_id': account_voucher.id,
+            'journal_id': account_voucher.journal_id.id,
+            'account_id': account_voucher.account_id.id,
+            'journal_entry_id': account_voucher.move_id.id,
+            'currency_id': account_voucher.currency_id.id,
+            'ref': 'NP',
+            'statement_id': statement.id
+        }
+        line_id = request.env['account.bank.statement.line'].create(bank_statement_line)
+
+        return line_id
+    '''
+        Create  payments reference
+    '''
+    def create_bank_paymnets_line(self, statement_line, account_voucher, date_server, bankId, bankTypeId, paymentsBankRef, paymentsBankDateMaturity, paymentsBankNumber_cta, paymentsBankName_holder):
+        bank_id = request.env['res.bank'].browse(bankId)
+        bank_type_id = request.env['res.bank.payments.type'].browse(bankTypeId)
+
+        bank_line ={
+            'number': paymentsBankRef,
+            'date_maturity': paymentsBankDateMaturity,
+            'amount': account_voucher.amount,
+            'date': date_server,
+            'state': bank_type_id.default_state,
+            'bank_id': bank_id.id,
+            'bank_payments_type_id': bank_type_id.id,
+            'statement_line_id': statement_line.id,
+            'comment': 'Np',
+            'number_cta': paymentsBankNumber_cta,
+            'name_holder': paymentsBankName_holder,
+            'type_operation': 'payment'
+        }
+        paymnets_line = request.env['res.bank.payments.line'].create(bank_line)
+
+        return paymnets_line
     '''
         Payment process
     '''
@@ -423,6 +453,13 @@ class PaymentsSales(http.Controller):
         #  Create bank statement
         bank_statement = self.create_bank_statement(date_server, user_id, voucher)
         self.make_info_log('[OK] creating bank statement')
+        #   Create bank statement Line
+        bank_statement_line = self.create_bank_statement_line(voucher, bank_statement)
+        self.make_info_log('[OK] creating bank statement Line')
+        # Crete Payments Bank Reference
+        if (kw.get('journalType') == 'bank'):
+            bank_payments_line =  self.create_bank_paymnets_line(bank_statement_line, voucher, date_server, kw.get('bankId'), kw.get('bankTypeId'), kw.get('bankRef'), kw.get('bankDateMaturity'), kw.get('paymentsBankNumber_cta'), kw.get('paymentsBankName_holder'))
+            self.make_info_log('[OK] creating bank payments line')
 
         return {
             'process': True

+ 1 - 1
package.json

@@ -33,7 +33,7 @@
         "fuse.js": "^3.0.5",
         "vue": "^2.4.1",
         "vue-form-wizard": "^0.6.1",
-        "vue-js-modal": "^1.2.6",
+        "vue-js-modal": "^1.3.9",
         "vue-simple-spinner": "^1.2.1",
         "vuex": "^2.3.1"
     }

+ 1 - 0
src/assets/_variables.sass

@@ -5,3 +5,4 @@ $app-bg-color: #fff
 $app-border-color: #d3d3d3
 $app-title-color: #d3d3d3
 $app-separator-color: #9e9e9e
+$app-error-color: #ef9a9a

+ 246 - 0
src/components/modals/PaymentReferenceModals.vue

@@ -0,0 +1,246 @@
+<template lang="pug">
+    modal(name='payments-reference' transition='nice-modal-fade' :classes="['v--modal', 'payments-reference', is_not_completed &&'is-not-completed']" @before-close="beforeClose" @before-open="beforeOpen")
+        form
+            .payment-reference-title
+                h3 Detalles de Operaciones Bancarias
+                hr
+            .payment-reference-item
+                label.payment-reference-item-label Banco / Entidad
+                select.payment-reference-item-input(v-model='selectBank' :class="{'item-input-invalid': !this.selectedPaymentsBank}")
+                    option(v-for="bank in bank" :value="bank") {{ bank.name }}
+            .payment-reference-item
+                label.payment-reference-item-label Tipo de Operación
+                select.payment-reference-item-input(v-model="selectBankType" :class="{'item-input-invalid': !this.selectedPaymentsBankType}")
+                    option(v-for="bankType in bankType" :value="bankType") {{ bankType.name }}
+            .payment-reference-item
+                label.payment-reference-item-label Nº cheque / boleta
+                input.payment-reference-item-input(v-model='bankRef' required='required' :class="{'item-input-invalid': !this.paymentsBankRef}")
+            .payment-reference-item
+                label.payment-reference-item-label Fecha de Vencimiento
+                input.payment-reference-item-input(v-model='dateMaturity' type="date" value='' :class="{'item-input-invalid': !this.paymentsBankDateMaturity}")
+            .payment-reference-item(:class="{'item-disabled': this.bankTypeSelected}")
+                label.payment-reference-item-label Nº  Cuenta
+                input.payment-reference-item-input(:disabled="this.bankTypeSelected" v-model='bankNumberCta' value='')
+            .payment-reference-item(:class="{'item-disabled': this.bankTypeSelected}")
+                label.payment-reference-item-label Titular
+                input.payment-reference-item-input(:disabled="this.bankTypeSelected" v-model='bankNameHolder' value='')
+            hr
+            .payment-reference-options
+                button.payments-reference-button(@click.prevent='onAccept') Aceptar
+                button.payments-reference-button(@click.prevent='onCancel') Cancelar
+</template>
+
+<script>
+
+    import { mapGetters, mapActions } from 'vuex'
+    import {
+        SELECT_PAYMENTS_PURCHASES_BANK,
+        SELECT_PAYMENTS_PURCHASES_BANK_TYPE,
+        CHANGE_PAYMENTS_PURCHASES_BANK_REF,
+        CHANGE_PAYMENTS_PURCHASES_BANK_DATE_MATURITY,
+        CHANGE_PAYMENTS_PURCHASES_BANK_NUMBER_CTA,
+        CHANGE_PAYMENTS_PURCHASES_BANK_NAME_HOLDER
+    } from '@/constants/actionTypes'
+
+    export default {
+        props: {
+            show: {
+                type: Boolean,
+                default: false
+            },
+        },
+
+        computed: {
+            selectBank: {
+                get() {
+                    return (this.selectedPaymentsBank) || -1
+                },
+                set(value) {
+                    if (value)
+                        this.selectPaymentsPurchasesBank(value)
+                        this.is_not_completed = false
+                }
+            },
+
+            selectBankType: {
+                get() {
+                    return (this.selectedPaymentsBankType) || -1
+                },
+                set(value) {
+                    if (value)
+                        this.selectPaymentsPurchasesBankType(value)
+                        this.bankTypeSelected = value.code === "TJ"
+                        this.is_not_completed = false
+                }
+            },
+
+            dateMaturity: {
+                get() {
+                    return this.paymentsBankDateMaturity || ''
+                },
+                set(value){
+                    this.changePaymentsPurchasesBankDateMaturity(value)
+                    this.is_not_completed = false
+                }
+            },
+
+            bankRef: {
+                get() {
+                    return this.paymentsBankRef || ''
+                },
+                set(value){
+                    this.changePaymentsPurchasesBankRef(value)
+                    this.is_not_completed = false
+                }
+            },
+            bankNumberCta: {
+                get() {
+                    return this.paymentsBankNumberCta || ''
+                },
+                set(value) {
+                    this.changePaymentsPurchasesBankNumberCta(value)
+                }
+            },
+
+            bankNameHolder: {
+                get() {
+                    return this.paymentsBankNameHolder || ''
+                },
+                set(value) {
+                    this.changePaymentsPurchasesBankNameHolder(value)
+                }
+            },
+
+            ...mapGetters([
+                'bank',
+                'bankType',
+                'selectedPaymentsBank',
+                'selectedPaymentsBankType',
+                'paymentsBankRef',
+                'paymentsBankDateMaturity',
+                'paymentsBankNumberCta',
+                'paymentsBankNameHolder'
+            ]),
+        },
+        methods: {
+            beforeClose(e) {
+                if ((!this.isValid()) && (this.is_cancel === false)) {
+                    this.is_not_completed = true
+                    e.stop()
+                }
+            },
+            beforeOpen(e){
+                this.is_cancel = false
+                this.is_not_completed = false
+                this.bankTypeSelected = false
+            },
+            onAccept(e) {
+                if (!this.isValid())
+                    return
+                this.$emit('onAccept', 'Accept')
+            },
+            onCancel(e) {
+                this.is_cancel= true
+                this.$emit('onCancel', 'Cancel')
+            },
+
+            isValid() {
+
+                if (!this.selectedPaymentsBank) {
+                    return false
+                }
+
+                if (!this.selectedPaymentsBankType) {
+                    return false
+                }
+
+                if (!this.paymentsBankDateMaturity) {
+                    return false
+                }
+
+                if (!this.paymentsBankRef) {
+                    return false
+                }
+                /*Return final si pasa todas las validaciones */
+                return true
+            },
+            ...mapActions([
+                SELECT_PAYMENTS_PURCHASES_BANK,
+                SELECT_PAYMENTS_PURCHASES_BANK_TYPE,
+                CHANGE_PAYMENTS_PURCHASES_BANK_REF,
+                CHANGE_PAYMENTS_PURCHASES_BANK_DATE_MATURITY,
+                CHANGE_PAYMENTS_PURCHASES_BANK_NUMBER_CTA,
+                CHANGE_PAYMENTS_PURCHASES_BANK_NAME_HOLDER
+            ])
+        },
+        watch: {
+            show(value) {
+                if (value) {
+                    this.$modal.show('payments-reference')
+                } else {
+                    this.$modal.hide('payments-reference')
+                }
+            }
+        },
+        data() {
+            return {
+                is_cancel: false,
+                is_not_completed: false,
+                bankTypeSelected: false
+            }
+        }
+    }
+</script>
+
+<style lang="sass">
+    @import '../../assets/variables'
+    .payments-reference
+        width: 600px
+        height: 400px !important
+        transition: box-shadow 1s
+        &.is-not-completed
+            box-shadow: 0 24px 80px -2px rgba(255, 0, 0, .6) !important
+        form
+            width: 100%
+            height: 290px
+            padding: 15px
+            .payment-reference-title
+                h3
+                    color: $app-separator-color
+                    font-size: 15pt
+                    margin-top: 10px
+                hr
+                    margin-top: 10px
+                    margin-bottom: 10px
+            .payment-reference-item
+                width: 100%
+                height: 30px
+                margin-bottom: 10px
+                &.item-disabled
+                    color: #9e9e9e
+                .payment-reference-item-label
+                    width: 30%
+                    height: 30px
+                    font-size: 10pt
+                .payment-reference-item-input
+                    width: 70% !important
+                    height: 30px
+                    font-size: 10pt
+                    float: right
+                    &.item-input-invalid
+                        border-color: $app-error-color
+                        box-shadow: 1px 1px 2px $app-error-color, -1px -1px 2px $app-error-color
+                hr
+
+            .payment-reference-options
+                float: right
+                .payments-reference-button
+                    width: 160px
+                    height: 40px
+                    border: none
+                    box-shadow: none
+                    border-radius: 0
+                    margin-right: 5px
+                    background: $app-main-color
+                    color: $app-bg-color
+</style>

+ 15 - 4
src/components/steps/payments.vue

@@ -20,6 +20,7 @@
                     label.method-form-label Método de pago
                     select.method-form-input(v-model="SelectedJournal")
                         option(v-for="journal in paymentsJournals" :value="journal") {{ journal.displayName }}
+                payment-modals(:show="this.typeJournal === 'bank'" @onAccept='methodbutton' @onCancel='methodbutton')
                 .method-form-item
                     label.method-form-label Total
                     input.method-form-input-number(readonly :value="paymentsTotal | currency(...paymentsCurrencyJournal)")
@@ -33,14 +34,16 @@
 
 <script>
     import { mapGetters, mapActions } from 'vuex'
-    import { SELECT_PAYMENTS_JOURNALS, CHANGE_INITIAL_PAID } from '@/constants/actionTypes'
+    import { SELECT_PAYMENTS_JOURNALS, CHANGE_INITIAL_PAID, RESET_SUPPLIER_PAYMENTS_BANK } from '@/constants/actionTypes'
     import  VoucherTicket from '@@/payments/VoucherTicket'
     import Spinner from '@@/common/Spinner'
+    import PaymentModals from '@@/modals/PaymentReferenceModals'
 
     export default {
         components: {
             VoucherTicket,
-            Spinner
+            Spinner,
+            PaymentModals
         },
         computed: {
             SelectedJournal: {
@@ -52,6 +55,7 @@
 
                     if (value)
                         this.selectPaymentsJournals(value)
+                        this.typeJournal = value.type
                 }
             },
             paid: {
@@ -86,15 +90,22 @@
             computePayment(value) {
                 this.paymentsReturned = value < this.paymentsTotal ? 0 : value - this.paymentsTotal
             },
+            methodbutton(value) {
+                    this.typeJournal = ''
+                if (value === 'Cancel') {
+                    this.resetSupplierPaymentsBank()
+                }
+            },
             ...mapActions([
                 CHANGE_INITIAL_PAID,
-                SELECT_PAYMENTS_JOURNALS
+                SELECT_PAYMENTS_JOURNALS,
+                RESET_SUPPLIER_PAYMENTS_BANK
             ])
         },
         data() {
             return {
                 paymentsReturned: 0,
-
+                typeJournal: ''
             }
         }
     }

+ 5 - 3
src/constants/actionTypes.js

@@ -82,8 +82,9 @@ const RESET_PAYMENTS_PURCHASES_CURRENCIES = 'resetPaymentsPurchasesCurrencies'
 const RESET_SUPPLIER_INVOICES = 'resetSupplierInvoices'
 const RESET_SUPPLIER_MOVE_LINES = 'resetSupplierMoveLines'
 const RESET_SUPPLIER_PAYMENTS = 'resetSupplierPayments'
-const RESET_PAYMENTS_PURCHASES_BANK = 'resetPaymentsPurchasesbank'
-const RESET_PAYMENTS_PURCHASES_BANK_TYPE = 'resetPaymentsPurchasesbankType'
+const RESET_PAYMENTS_PURCHASES_BANK = 'resetPaymentsPurchasesBank'
+const RESET_PAYMENTS_PURCHASES_BANK_TYPE = 'resetPaymentsPurchasesBankType'
+const RESET_SUPPLIER_PAYMENTS_BANK = 'resetSupplierPaymentsBank'
 
 export {
     //INIT - PROCESS - RESET-
@@ -149,5 +150,6 @@ export {
     RESET_SUPPLIER_MOVE_LINES,
     RESET_SUPPLIER_PAYMENTS,
     RESET_PAYMENTS_PURCHASES_BANK,
-    RESET_PAYMENTS_PURCHASES_BANK_TYPE
+    RESET_PAYMENTS_PURCHASES_BANK_TYPE,
+    RESET_SUPPLIER_PAYMENTS_BANK
 }

+ 3 - 1
src/index.js

@@ -3,10 +3,12 @@ import App from '@/App'
 import store from '@/store'
 import currency from '@@/filters/currency'
 import dateFormat from '@@/filters/dateFormat'
+import VModal from 'vue-js-modal'
+
 
 Vue.filter('currency', currency)
 Vue.filter('dateFormat', dateFormat)
-
+Vue.use(VModal)
 /*config*/
 Vue.config.productionTip = false
 Vue.config.silent = true

+ 22 - 1
src/store/actions.js

@@ -67,6 +67,13 @@ const actions = {
                 amountPayments: getters.paidTotal <= getters.paymentsTotal ? getters.paidTotal : getters.paymentsTotal,
                 supplierId: getters.selectedSupplier.id,
                 invoiceId: getters.selectedInvoices.id,
+                journalType: getters.paymentsSelectedJournal.type,
+                bankId: getters.paymentsSelectedJournal.type ==='bank' ? getters.selectedPaymentsBank.id : '',
+                bankTypeId: getters.paymentsSelectedJournal.type ==='bank' ? getters.selectedPaymentsBankType.id : '',
+                bankRef: getters.paymentsSelectedJournal.type ==='bank' ? getters.paymentsBankRef : '',
+                bankDateMaturity: getters.paymentsSelectedJournal.type ==='bank' ? getters.paymentsBankDateMaturity : '',
+                paymentsBankNumber_cta: getters.paymentsSelectedJournal.type ==='bank' ? getters.paymentsBankNumberCta : '',
+                paymentsBankName_holder: getters.paymentsSelectedJournal.type ==='bank' ? getters.paymentsBankNameHolder : '',
                 moveLinesId: getters.paymentsMoveLines.map( item => {
                     return item.id
                 })
@@ -127,6 +134,21 @@ const actions = {
          if (getters.paidTotal <= 0){
              return dispatch(PAYMENTS_PURCHASES_NOTIFY, 'El monto no puede ser cero(0), ingrese un monto para continuar.')
          }
+
+         if (getters.paymentsSelectedJournal && getters.paymentsSelectedJournal.type ==='bank') {
+             if (!getters.selectedPaymentsBank || getters.selectedPaymentsBank.length <= 0) {
+                  return dispatch(PAYMENTS_NOTIFY, 'Necesitas seleccionar un banco')
+             }
+             if (!getters.selectedPaymentsBankType || getters.selectedPaymentsBankType.length <= 0) {
+                  return dispatch(PAYMENTS_NOTIFY, 'Necesitas seleccionar el tipo de transacción bancaria')
+             }
+             if (!getters.paymentsBankRef){
+                 return dispatch(PAYMENTS_NOTIFY, 'Necesitas ingresar el Nº cheque / boleta')
+             }
+             if (!getters.paymentsBankDateMaturity){
+                 return dispatch(PAYMENTS_NOTIFY, 'Necesitas ingresar una fecha de vencimiento')
+             }
+         }
          return true
      },
      /**
@@ -134,7 +156,6 @@ const actions = {
       * @type {[type]}
       */
      [SET_CHANGE_TAB_STEPS] ({ commit, dispatch, getters }, paylod) {
-         console.log(paylod);
          /* Si abandona el modulo */
          if (paylod.prev === 0 && paylod.next === -1){
             dispatch(RESET_PAYMENTS_PURCHASES)

+ 15 - 2
src/store/modules/supplierPayments.js

@@ -12,8 +12,8 @@ import {
     CHANGE_PAYMENTS_PURCHASES_BANK_REF,
     CHANGE_PAYMENTS_PURCHASES_BANK_DATE_MATURITY,
     CHANGE_PAYMENTS_PURCHASES_BANK_NUMBER_CTA,
-    CHANGE_PAYMENTS_PURCHASES_BANK_NAME_HOLDER
-
+    CHANGE_PAYMENTS_PURCHASES_BANK_NAME_HOLDER,
+    RESET_SUPPLIER_PAYMENTS_BANK
 } from '@/constants/actionTypes'
 /* Mutations */
 import {
@@ -437,6 +437,19 @@ const actions = {
      */
     [CHANGE_PAYMENTS_PURCHASES_BANK_NAME_HOLDER] ({ commit }, payload ){
         commit(SET_PAYMENTS_PURCHASES_BANK_NAME_HOLDER, payload)
+    },
+    /**
+     * [RESET_SUPPLIER_PAYMENTS_BANK]
+     */
+    [RESET_SUPPLIER_PAYMENTS_BANK] ({ commit, dispatch }, payload) {
+        commit(SELECTED_PAYMENTS_PURCHASES_BANK, null)
+        commit(SELECTED_PAYMENTS_PURCHASES_BANK_TYPE, null)
+        commit(SET_PAYMENTS_PURCHASES_BANK_REF, '')
+        commit(SET_PAYMENTS_PURCHASES_BANK_DATE_MATURITY,  '')
+        commit(SET_PAYMENTS_PURCHASES_BANK_NUMBER_CTA, '')
+        commit(SET_PAYMENTS_PURCHASES_BANK_NAME_HOLDER, '')
+
+        dispatch(RESET_SELECTED_JOURNAL_PAYMENTS)
     }
 }
 

+ 3 - 3
yarn.lock

@@ -4319,9 +4319,9 @@ vue-hot-reload-api@^2.1.0:
   version "2.2.4"
   resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.2.4.tgz#683bd1d026c0d3b3c937d5875679e9a87ec6cd8f"
 
-vue-js-modal@^1.2.6:
-  version "1.3.8"
-  resolved "https://registry.yarnpkg.com/vue-js-modal/-/vue-js-modal-1.3.8.tgz#72a51d7e9979c9f5bb91d4367a84386d30479e69"
+vue-js-modal@^1.3.9:
+  version "1.3.9"
+  resolved "https://registry.yarnpkg.com/vue-js-modal/-/vue-js-modal-1.3.9.tgz#f2107252111bd0d16eb8e320bc383aa2c4d03a47"
 
 vue-loader@^12.2.2:
   version "12.2.2"