Browse Source

[ADD] Paso 4 finalizar pagos

adrielso 7 years ago
parent
commit
a383e96850

+ 2 - 0
__init__.py

@@ -1,3 +1,5 @@
 # -*- coding: utf-8 -*-
 from models import payment_journal
 from models import res_partner
+from models import account_voucher
+from models import res_company

+ 91 - 0
models/account_voucher.py

@@ -0,0 +1,91 @@
+# -*- coding: utf-8 -*-
+from openerp import api, fields, models
+from openerp.exceptions import except_orm
+
+
+class AccountVoucher(models.Model):
+    _inherit = 'account.voucher'
+
+    @api.model
+    def create_from_payments(self, values):
+        # step 1  Verificar Datos
+        #period Actual
+        period = self.env['account.period'].search([('date_start', '<=', fields.Date.context_today(self) ),('date_stop', '>=', fields.Date.context_today(self))])
+        # Diario & Moneda
+        journal = self.env['account.journal'].browse(int(values['journal_id']))
+        currency_id = journal.default_credit_account_id.currency_id.id or journal.default_credit_account_id.company_currency_id.id
+        # Move line
+        move_line = self.env['account.move.line'].browse(values['line_cr_ids']).sorted(key=lambda r: r.id)
+        #company
+        company = self.env['res.company'].browse(int(values['company']))
+        #partner
+        partner = self.env['res.partner'].browse(int(values['partner_id']))
+        #invoice
+        invoice = self.env['account.invoice'].browse(int(values['invoice']))
+
+        line_cr_ids = []
+        amount = float(values['amount'])
+
+        for line in move_line:
+            line_cr_ids.append([0, False, {
+                'date_due': line.date_maturity,
+                'account_id': line.account_id.id,
+                'date_original': line.move_id.date,
+                'move_line_id': line.id,
+                'amount_original': abs(line.credit or line.debit or 0.0),
+                'amount_unreconciled': abs(line.amount_residual),
+                'amount': min(abs(amount), line.amount_residual),
+                'reconcile': line.move_id.date <= line.date_maturity,
+                'currency_id': currency_id
+            }])
+            amount -= min(abs(amount), line.amount_residual)
+
+        values = {
+                'reference': values['reference'],
+                'type': 'receipt',
+                'journal_id': journal.id,
+                'company_id': company.id,
+                'pre_line': True,
+                'amount': float(values['amount']),
+                'period_id': int(period.id),
+                'date': fields.Date.context_today(self),
+                'partner_id': partner.id,
+                'account_id': journal.default_credit_account_id.id,
+                'currency_id': currency_id,
+                'line_cr_ids': line_cr_ids
+            }
+
+        account_voucher = self.create(values)
+        account_voucher.action_move_line_create()
+
+        if  invoice.residual <= 0:
+            invoice.write({
+                'state': 'paid'
+            })
+
+
+        # step 2 create voucher
+        # account_voucher = self.create({
+        #     'reference': values['reference'],
+        #     'type': 'receipt',
+        #     'journal_id': journal.id,
+        #     'company_id': company.id,
+        #     'pre_line': True,
+        #     'amount': float(values['amount']),
+        #     'period_id': int(period.id),
+        #     'date': fields.Date.context_today(self),
+        #     'partner_id': partner.id,
+        #     'account_id': journal.default_credit_account_id.id,
+        #     'currency_id': currency_id,
+            # 'line_cr_ids': [[0, False, {
+            #     'date_due': line.date_maturity,
+            #     'account_id': line.account_id.id,
+            #     'date_original': line.move_id.date,
+            #     'move_line_id': line.id,
+            #     'amount_original': abs(line.credit or line.debit or 0.0),
+            #     'amount_unreconciled': abs(line.amount_residual),
+            #     'amount': abs(line.debit) if amount > line.debit else amount,
+            #     'reconcile': line.move_id.date <= line.date_maturity,
+            #     'currency_id': currency_id
+            # }] for line in move_line]
+        # })

+ 30 - 2
models/payment_journal.py

@@ -14,7 +14,9 @@ class PaymentJournal(models.Model):
         paymentsJournals = []
 
         for journal in self.env['account.journal'].search(domain, order="id"):
-
+            if not (journal.store_ids >= self.env.user.store_ids):
+                continue
+                
             paymentsJournals.append({
                 'id': journal.id,
                 'name': journal.name,
@@ -28,8 +30,34 @@ class PaymentJournal(models.Model):
                     'display_name': journal.currency.display_name,
                     'symbol': journal.currency.symbol,
                     'rate_silent': journal.currency.rate_silent
+                },
+                'default_credit_account':{
+                    'id': journal.default_credit_account_id.id,
+                    'name': journal.default_credit_account_id.name,
+                    'display_name': journal.default_credit_account_id.display_name,
+                    'code': journal.default_credit_account_id.code,
+                    'exchange_rate': journal.default_credit_account_id.exchange_rate,
+                    'foreign_balance': journal.default_credit_account_id.foreign_balance,
+                    'reconcile': journal.default_credit_account_id.reconcile,
+                    'debit': journal.default_credit_account_id.debit,
+                    'credit': journal.default_credit_account_id.credit,
+                    'currency_mode': journal.default_credit_account_id.currency_mode,
+                    'company_currency':{
+                        'id': journal.default_credit_account_id.company_currency_id.id,
+                        'name': journal.default_credit_account_id.company_currency_id.name,
+                        'display_name': journal.default_credit_account_id.company_currency_id.display_name,
+                        'symbol': journal.default_credit_account_id.company_currency_id.symbol,
+                        'rate_silent': journal.default_credit_account_id.company_currency_id.rate_silent
+                    },
+                    'currency':{
+                        'id': journal.default_credit_account_id.currency_id.id,
+                        'name': journal.default_credit_account_id.currency_id.name,
+                        'display_name': journal.default_credit_account_id.currency_id.display_name,
+                        'symbol': journal.default_credit_account_id.currency_id.symbol,
+                        'rate_silent': journal.default_credit_account_id.currency_id.rate_silent
+                    },
                 }
             })
 
-        print(paymentsJournals)
+        # print(paymentsJournals)
         return paymentsJournals

+ 20 - 0
models/res_company.py

@@ -0,0 +1,20 @@
+from openerp import api, fields, models
+
+class ResCompany(models.Model):
+    _inherit = 'res.company'
+
+    @api.model
+    def get_paymentsCompany(self):
+        user = self.env.user
+
+        return {
+            'id': user.company_id.id,
+            'name': user.company_id.name,
+            'currency': {
+                'id': user.company_id.currency_id.id,
+                'name': user.company_id.currency_id.name,
+                'display_name': user.company_id.currency_id.display_name,
+                'symbol': user.company_id.currency_id.symbol
+            },
+            'today' : fields.Date.context_today(self)
+        }

+ 7 - 1
models/res_partner.py

@@ -22,6 +22,7 @@ class ResPartner(models.Model):
 
             for invoice in customer.invoice_ids:
                 movelines = []
+                moves = []
                 currency_symbol = ""
 
                 for move in invoice.move_id:
@@ -46,7 +47,12 @@ class ResPartner(models.Model):
                         'amount_total': invoice.amount_total,
                         'residual': invoice.residual,
                         'moveLines': movelines,
-                        'currency_symbol' : currency_symbol
+                        'currency_symbol' : currency_symbol,
+                        'moves' :{
+                            'id': invoice.move_id.id,
+                            'name': invoice.move_id.name,
+                            'date': invoice.move_id.date
+                        }
                     })
 
             partners.append({

+ 2 - 1
src/Payments.vue

@@ -1,6 +1,6 @@
 <template lang="pug">
 	.payments
-		form-wizard(title="" subtitle="" finishButtonText="Finalizar" color="#8c9bad" nextButtonText="Continuar" backButtonText="Volver" transition="fade" @on-complete="completeSale()")
+		form-wizard(title="" subtitle="" finishButtonText="Finalizar" color="#8c9bad" nextButtonText="Continuar" backButtonText="Volver" transition="fade" @on-complete="completePayment()")
 			tab-content(title="Quien es el cliente?" :before-change="checkPartner")
 				partner-step
 			tab-content(title="Cual es la factura?" :before-change="checkInvoice")
@@ -20,6 +20,7 @@
 	import InvoiceStep from '@/components/invoice/InvoiceStep'
 	import MoveStep from '@/components/move/MoveStep'
 	import MethodPaymentStep from '@/components/payment/MethodPaymentStep'
+
 	import Loader from '@/components/Loader'
 
 	import {mapActions, mapGetters } from 'vuex'

+ 19 - 7
src/components/payment/VoucherTicket.vue

@@ -20,13 +20,13 @@
                         label.voucher-ticket-from-grid-item-right {{ formatNumber(line.amount_residual) }} {{ getSymbol() }}
                 .voucher-ticket-from-item-total
                     label.voucher-ticket-from-label-total Total
-                    label.voucher-ticket-from-input-total {{ getTotal() }} {{ getSymbol() }}
+                    label.voucher-ticket-from-input-total {{ getTotal() }}
                 .voucher-ticket-from-item-total
                     label.voucher-ticket-from-label-total Pagado
-                    label.voucher-ticket-from-input-total {{ 0 }} {{ getSymbol() }}
+                    label.voucher-ticket-from-input-total {{ getpagado() }}
                 .voucher-ticket-from-item-total
                     label.voucher-ticket-from-label-total Saldo
-                    label.voucher-ticket-from-input-total {{ getTotal() }} {{ getSymbol() }}
+                    label.voucher-ticket-from-input-total {{ formatResidual() }}
 </template>
 
 <script>
@@ -39,7 +39,9 @@
                 'selectedPartner',
                 'selectedInvoices',
                 'addMove',
-                'total'
+                'total',
+                'paymentAmount',
+                'companySymbol'
             ])
         },
         methods: {
@@ -56,11 +58,21 @@
                 return accounting.format(amount, 0,'.', ',')
             },
             getSymbol() {
-                return this.selectedInvoices.currency_symbol
+                return this.selectedInvoices ? this.selectedInvoices.currency_symbol : ''
             },
             getTotal() {
-                return !!this.total ? accounting.format(this.total, 0,'.', ',') : 0
-            }
+                return accounting.formatMoney(this.total,this.companySymbol, 0,'.', ',')
+            },
+            getpagado() {
+                let pagado = this.paymentAmount
+                pagado = this.paymentAmount <= this.total ? this.paymentAmount : this.total
+                return accounting.formatMoney(pagado,this.companySymbol, 0,'.', ',')
+            },
+            formatResidual() {
+                let residual = 0
+                residual = this.paymentAmount <= this.total ? this.total - this.paymentAmount : 0
+                return accounting.formatMoney(residual, this.companySymbol, 0,'.',',')
+            },
         }
     }
 </script>

+ 43 - 7
src/components/payment/method/MethodPayment.vue

@@ -15,13 +15,13 @@
                 option(v-for="journal in paymentsJournals" :value="journal") {{ journal.display_name}}
         .method-form-item
             label.method-form-label Total
-            input.method-form-input(readonly :value="getTotal()")
+            input.method-form-input-number(readonly :value="getTotal()")
         .method-form-item
             label.method-form-label Monto a Pagar
-            input.method-form-input(readonly :value="getTotal()")
+            input.method-form-input-number(:value="paid" v-model="paid" autofocus)
         .method-form-item
             label.method-form-label Monto a Devolver
-            input.method-form-input(readonly :value="0")
+            input.method-form-input-number(readonly :value="formatResidual()")
 </template>
 <script>
 
@@ -31,13 +31,29 @@
         computed: {
             journal: {
                 get() {
-                    return this.paymentsJournals
+                    return this.selectedPaymentsJournals
+                },
+                set(value) {
+                    this.selectPaymentsJournal(value)
                 }
             } ,
+            paid:{
+                get() {
+                    return accounting.formatMoney(this.paymentAmount, this.companySymbol,0,'.',',')
+                },
+                set(value) {
+                    value =  accounting.unformat(value,',')
+                    this.changePaymentAmount(value)
+                    this.residualCalculate()
+                }
+            },
             ...mapGetters([
                 'selectedPartner',
+                'selectedPaymentsJournals',
                 'total',
-                'paymentsJournals'
+                'paymentsJournals',
+                'companySymbol',
+                'paymentAmount'
             ])
         },
         methods: {
@@ -48,8 +64,26 @@
                 return !!this.selectedPartner ? this.selectedPartner.ruc : ''
             },
             getTotal() {
-                return !!this.total ? accounting.format(this.total,0,'.',',') : 0
+                return accounting.formatMoney(this.total,this.companySymbol,0,'.',',')
+            },
+            residualCalculate() {
+                this.residual = this.paymentAmount >= this.total ? this.paymentAmount - this.total : 0
+            },
+            formatResidual() {
+                return accounting.formatMoney(this.residual, this.companySymbol, 0,'.',',')
+            },
+            ...mapActions([
+                'selectPaymentsJournal',
+                'changePaymentAmount'
+            ])
+        },
+        data() {
+            return {
+                residual: 0
             }
+        },
+        mounted() {
+            this.changePaymentAmount(0)
         }
 
     }
@@ -85,12 +119,14 @@
                 font:
                     size: 14pt
 
-            .method-form-input
+            .method-form-input, .method-form-input-number
                 width: 350px
                 height: 45px
                 font:
                     size: 14pt
                 border-radius: 0
 
+            .method-form-input-number
+                text-align: right
 
 </style>

+ 38 - 3
src/store/actions.js

@@ -2,12 +2,14 @@ const actions = {
     notify({ commit }, payload ){
             openerp.web.notification.do_warn("Atention", payload)
     },
-    initPayment({ commit , dispatch},payload){
+    initPayment({ commit , dispatch}, payload){
+
         commit('setPaymentsInstance', payload)
 
         let promises =[
             dispatch('fetchPartners'),
-            dispatch('fetchPaymentsJournal')
+            dispatch('fetchPaymentsJournal'),
+            dispatch('fetchPaymentsCompany')
         ]
 
         Promise.all(promises).then(() => {
@@ -16,8 +18,41 @@ const actions = {
             console.log(error)
         })
     },
-    completePayment({ getters }){
+    completePayment({ dispatch, getters, state}) {
+        let newObjet = []
+
+        return new Promise((resolve, reject) => {
+            let AccountVoucher = new openerp.web.Model('account.voucher')
+
+            AccountVoucher.call('create_from_payments',[
+                {
+                    reference : getters.selectedInvoices.number,
+                    journal_id : getters.selectedPaymentsJournals.id,
+                    company : getters.paymentsCompany.id,
+                    amount : getters.paymentAmount <= getters.total ? getters.paymentAmount : getters.total,
+                    partner_id : getters.selectedPartner.id,
+                    invoice: getters.selectedInvoices.id,
+                    line_cr_ids : getters.addMove.map(item => {
+                        return  item.id
+                    })
+                }
+            ],{
+                context: new openerp.web.CompoundContext()
+            }).then(response => {
+
+                window.location.reload()
 
+                resolve(response)
+            }).fail(error => {
+                console.log(error)
+                reject(error)
+            })
+        })
+
+        console.log(newObjet);
+    },
+    printPayments({ getters, dispatch },payload) {
+        // let self = getters.getPaymentsInstance
     }
 }
 

+ 12 - 10
src/store/index.js

@@ -6,11 +6,12 @@ import getters from '@/store/getters'
 import actions from '@/store/actions'
 import mutations from '@/store/mutations'
 // Modules
-import partners from '@/store/modules/partners'
-import invoices from '@/store/modules/invoices'
-import moveLines from '@/store/modules/moveLines'
-import journal from '@/store/modules/journal'
-import loader from '@/store/modules/loader'
+import paymentsPartners from '@/store/modules/paymentsPartners'
+import paymentsInvoices from '@/store/modules/paymentsInvoices'
+import paymentsMoveLines from '@/store/modules/paymentsMoveLines'
+import paymentsJournal from '@/store/modules/paymentsJournal'
+import paymentsCompany from '@/store/modules/paymentsCompany'
+import paymentsLoader from '@/store/modules/paymentsLoader'
 
 Vue.use(Vuex)
 
@@ -20,11 +21,12 @@ const Store = new Vuex.Store({
     mutations,
     actions,
     modules:{
-        partners,
-        journal,
-        invoices,
-        moveLines,
-        loader
+        paymentsPartners,
+        paymentsInvoices,
+        paymentsMoveLines,
+        paymentsJournal,
+        paymentsCompany,
+        paymentsLoader
     }
 })
 

+ 0 - 46
src/store/modules/journal.js

@@ -1,46 +0,0 @@
-const state = {
-    paymentsJournals: [],
-}
-
-const getters = {
-    paymentsJournals(state) {
-        return state.paymentsJournals
-    }
-}
-
-const mutations = {
-    pushPaymentsJournal(state, payload) {
-        state.paymentsJournals = [...payload.paymentsJournals]
-    }
-}
-
-const actions = {
-    fetchPaymentsJournal({ commit, dispatch}) {
-        return new Promise((resolve, reject) => {
-            let Accountjournal = new openerp.web.Model('account.journal')
-
-            Accountjournal.call('get_paymentsJournals',{
-                context: new openerp.web.CompoundContext()
-            }).then(response => {
-                commit('pushPaymentsJournal',{
-                    paymentsJournals: response
-                })
-
-                dispatch('loaded', 'paymentsJournals')
-
-                resolve()
-            }).fail(error => {
-                console.error(error)
-                reject(error)
-            })
-        })
-    }
-
-}
-
-export default {
-    state,
-    getters,
-    mutations,
-    actions
-}

+ 57 - 0
src/store/modules/paymentsCompany.js

@@ -0,0 +1,57 @@
+const state = {
+    paymentsCompany: null,
+    companySymbol : null
+}
+
+const getters = {
+    paymentsCompany(state) {
+        return state.paymentsCompany
+    },
+    companyCurrency(state) {
+        return state.paymentsCompany ? state.paymentsCompany.currency : ''
+    },
+    companySymbol(state) {
+        return state.companySymbol ? state.companySymbol : ''
+    }
+}
+
+const mutations = {
+    pushsPaymentsCompany(state, payload) {
+        state.paymentsCompany = payload.resCompany
+    },
+    getcompanySymbol(state, payload) {
+        // console.log(payload);
+        state.companySymbol = payload.symbol
+    }
+}
+const actions = {
+    fetchPaymentsCompany( { commit, dispatch }){
+        return new Promise((resolve, reject) =>{
+            let ResCompany = new openerp.web.Model('res.company')
+
+            ResCompany.call('get_paymentsCompany',{
+                context: new openerp.web.CompoundContext()
+            }).then(response => {
+                commit('pushsPaymentsCompany',{
+                    resCompany : response
+                })
+
+                commit("getcompanySymbol", response.currency)
+
+                dispatch('loaded', 'paymentsCompany')
+
+                resolve()
+            }).fail(error => {
+                console.log(error)
+                reject(error)
+            })
+        })
+    }
+}
+
+export default {
+    state,
+    getters,
+    mutations,
+    actions
+}

+ 0 - 0
src/store/modules/invoices.js → src/store/modules/paymentsInvoices.js


+ 81 - 0
src/store/modules/paymentsJournal.js

@@ -0,0 +1,81 @@
+const state = {
+    paymentsJournals: [],
+    selectedPaymentsJournals : null,
+    paymentAmount: 0
+    // paymentsJournalsSymbol: null
+
+}
+
+const getters = {
+    paymentsJournals(state) {
+        return state.paymentsJournals
+    },
+    selectedPaymentsJournals(state) {
+        return state.selectedPaymentsJournals
+    },
+    paymentAmount(state){
+        return state.paymentAmount
+    },
+    paymentsJournalsSymbol(state) {
+
+        // console.log();
+        // console.log(state.selectedPaymentsJournals.currency);\
+        // return state.selectedPaymentsJournals.currency.symbol ? state.selectedPaymentsJournals.currency.symbol : state.companySymbol
+    }
+}
+
+const mutations = {
+    pushPaymentsJournal(state, payload) {
+        state.paymentsJournals = [...payload.paymentsJournals]
+    },
+    setSelectPaymentsJournal(state, payload) {
+        state.selectedPaymentsJournals = payload
+    },
+    changePaymentAmount(state, payload) {
+        state.paymentAmount = payload
+    }
+}
+
+const actions = {
+    fetchPaymentsJournal({ commit, dispatch}) {
+        return new Promise((resolve, reject) => {
+            let Accountjournal = new openerp.web.Model('account.journal')
+
+            Accountjournal.call('get_paymentsJournals',{
+                context: new openerp.web.CompoundContext()
+            }).then(response => {
+                commit('pushPaymentsJournal',{
+                    paymentsJournals: response
+                })
+
+                dispatch('autoSelectPaymentsJournal', response)
+
+                dispatch('loaded', 'paymentsJournals')
+
+                resolve()
+            }).fail(error => {
+                console.error(error)
+                reject(error)
+            })
+        })
+    },
+    autoSelectPaymentsJournal ({ dispatch }, payload ) {
+        dispatch('selectPaymentsJournal', payload.find(j => j.type === 'cash'))
+    },
+    selectPaymentsJournal({ commit}, payload) {
+        commit('setSelectPaymentsJournal', payload)
+
+        commit('changePaymentAmount', 0)
+
+    },
+    changePaymentAmount({ commit }, payload) {
+        commit('changePaymentAmount', payload)
+    }
+}
+
+export default {
+    state,
+    getters,
+    mutations,
+    actions
+}

+ 5 - 3
src/store/modules/loader.js → src/store/modules/paymentsLoader.js

@@ -3,14 +3,15 @@ const state = {
         // company: false,
         // currencies: false,
         partners: false,
-        paymentsJournals: false
+        paymentsJournals: false,
+        paymentsCompany: false
         // products: false,
         // journals: false,
         // periods: false,
         // paymentTerms: false
     },
     messages: [
-        // 'Cargando compañía',
+        'Cargando compañía',
         // 'Cargando monedas',
         'Cargando clientes',
         'Cargando Método de Pago'
@@ -24,7 +25,8 @@ const getters = {
     },
     isLoaded(state) {
         return state.loaded.partners &&
-               state.loaded.paymentsJournals
+               state.loaded.paymentsJournals &&
+               state.loaded.paymentsCompany
     }
 }
 

+ 0 - 0
src/store/modules/moveLines.js → src/store/modules/paymentsMoveLines.js


+ 0 - 0
src/store/modules/partners.js → src/store/modules/paymentsPartners.js