Bladeren bron

[FIX] payment term selector

Gogs 7 jaren geleden
bovenliggende
commit
fea9ac974c

+ 1 - 1
controllers/main.py

@@ -169,7 +169,7 @@ class PosSales(http.Controller):
                 'days': line.days,
                 'days': line.days,
                 'days2': line.days2,
                 'days2': line.days2,
                 'value': line.value,
                 'value': line.value,
-                'value_amount': line.value_amount
+                'valueAmount': line.value_amount
             } for line in payment_term.line_ids]
             } for line in payment_term.line_ids]
         } for payment_term in request.env['account.payment.term'].search([('active', '=', True)])]
         } for payment_term in request.env['account.payment.term'].search([('active', '=', True)])]
 
 

+ 24 - 5
src/components/steps/PaymentAmount.vue

@@ -32,7 +32,7 @@
 
 
     import Ticket from '@@/common/Ticket'
     import Ticket from '@@/common/Ticket'
 
 
-    import { CHANGE_INITIAL_PAYMENT } from '@/constants/actionTypes'
+    import { CHANGE_INITIAL_PAYMENT, COMPUTE_PAYMENT_LINES } from '@/constants/actionTypes'
 
 
     export default {
     export default {
         components: {
         components: {
@@ -45,7 +45,14 @@
                 },
                 },
                 set(value) {
                 set(value) {
                     value = parseFloat(value)
                     value = parseFloat(value)
-                    this.changeInitialPayment(Number.isNaN(value) ? 0 : value)    
+                    value = Number.isNaN(value) ? 0 : value
+
+                    this.changeInitialPayment(value)
+                    this.computePaymentResidual(value)
+
+                    if (this.paymentType === 'credit') {
+                        this.computePaymentLines()
+                    }
                 }
                 }
             },
             },
             ...mapGetters([
             ...mapGetters([
@@ -59,9 +66,20 @@
                 'paymentResidual'
                 'paymentResidual'
             ])
             ])
         },
         },
-        methods: mapActions([
-            CHANGE_INITIAL_PAYMENT
-        ])
+        methods: {
+            computePaymentResidual(value) {
+                this.paymentResidual = value < this.cartTotal ? 0 : value - this.cartTotal
+            },
+            ...mapActions([
+                CHANGE_INITIAL_PAYMENT,
+                COMPUTE_PAYMENT_LINES
+            ])
+        },
+        data() {
+            return {
+                paymentResidual: 0
+            }
+        }
     }
     }
 </script>
 </script>
 
 
@@ -105,6 +123,7 @@
                 width: 100%
                 width: 100%
                 height: 250px
                 height: 250px
                 border: 1px solid $app-border-color
                 border: 1px solid $app-border-color
+                overflow-y: auto
                 table
                 table
                     width: 100%
                     width: 100%
                     thead
                     thead

+ 26 - 23
src/components/steps/PaymentMethod.vue

@@ -25,12 +25,12 @@
                     label(for='credit') Crédito
                     label(for='credit') Crédito
             transition(name='fade')
             transition(name='fade')
                 .form-item(v-if="payment === 'credit'")
                 .form-item(v-if="payment === 'credit'")
-                    select.form-input.input-only(v-model='paymentTerm')
-                        option(v-for='term in paymentTerms' :value='term' v-if="term.lines.length > 0 && (term.lines[0].days !== 0 || term.lines[0].value !==  'balance')") {{ term.displayName }}
+                    select.form-input.input-only(v-model='paymentTermId')
+                        option(v-for='term in paymentTerms' :value='term.id' v-if="term.lines.length > 0 && (term.lines[0].days !== 0 || term.lines[0].value !==  'balance')") {{ term.displayName }}
                 .form-item(v-else)
                 .form-item(v-else)
                     label.form-label Método de Pago
                     label.form-label Método de Pago
-                    select.form-input(v-model='journal')
-                        option(v-for='journal in journals' :value='journal') {{ journal.displayName }}
+                    select.form-input(v-model='journalId')
+                        option(v-for='journal in journals' :value='journal.id') {{ journal.displayName }}
 </template>
 </template>
 
 
 <script>
 <script>
@@ -38,27 +38,37 @@
 
 
     import Ticket from '@@/common/Ticket'
     import Ticket from '@@/common/Ticket'
 
 
-    import { CHANGE_PAYMENT_TYPE } from '@/constants/actionTypes'
+    import { CHANGE_PAYMENT_TYPE, SELECT_JOURNAL, SELECT_PAYMENT_TERM } from '@/constants/actionTypes'
 
 
     export default {
     export default {
         components: {
         components: {
             Ticket
             Ticket
         },
         },
         computed: {
         computed: {
-            paymentTerm: {
+            paymentTermId: {
                 get() {
                 get() {
-                    return this.selectedPaymentTerm
+                    console.log((this.selectedPaymentTerm && this.selectedPaymentTerm.id) || -1)
+                    return (this.selectedPaymentTerm && this.selectedPaymentTerm.id) || -1
                 },
                 },
                 set(value) {
                 set(value) {
-                    console.log(value)
+                    this.selectPaymentTerm(value)
                 }
                 }
             },
             },
-            journal: {
+            journalId: {
                 get() {
                 get() {
-                    return this.selectedJournal
+                    console.log((this.selectedJournal && this.selectedJournal.id) || -1)
+                    return (this.selectedJournal && this.selectedJournal.id) || -1
                 },
                 },
                 set(value) {
                 set(value) {
-                    console.log(value)
+                   this.selectJournal(value)
+                }
+            },
+            payment: {
+                get() {
+                    return this.paymentType
+                },
+                set(value) {
+                    this.changePaymentType(value)
                 }
                 }
             },
             },
             ...mapGetters([
             ...mapGetters([
@@ -67,24 +77,17 @@
                 'cartTotal',
                 'cartTotal',
                 'customerCredit',
                 'customerCredit',
                 'paymentTerms',
                 'paymentTerms',
+                'paymentType',
                 'selectedPaymentTerm',
                 'selectedPaymentTerm',
                 'journals',
                 'journals',
                 'selectedJournal'
                 'selectedJournal'
             ])
             ])
         },
         },
-        watch: {
-            payment(value) {
-                this.changePaymentType(value)
-            }
-        },
         methods: mapActions([
         methods: mapActions([
-            CHANGE_PAYMENT_TYPE
-        ]),
-        data() {
-            return {
-                payment: 'cash'
-            }
-        }
+            CHANGE_PAYMENT_TYPE,
+            SELECT_JOURNAL,
+            SELECT_PAYMENT_TERM
+        ])
     }
     }
 </script>
 </script>
 
 

+ 7 - 3
src/constants/actionTypes.js

@@ -24,13 +24,17 @@ const SELECT_PRODUCT = 'selectProduct'
 
 
 const INIT_PAYMENT_TERMS = 'initPaymentTerms'
 const INIT_PAYMENT_TERMS = 'initPaymentTerms'
 
 
+const SELECT_PAYMENT_TERM = 'selectPaymentTerm'
+
 const CHANGE_PAYMENT_TYPE = 'changePaymentType'
 const CHANGE_PAYMENT_TYPE = 'changePaymentType'
 
 
 const CHANGE_INITIAL_PAYMENT = 'changeInitialPayment'
 const CHANGE_INITIAL_PAYMENT = 'changeInitialPayment'
 
 
 const COMPUTE_PAYMENT_LINES = 'computePaymentLines'
 const COMPUTE_PAYMENT_LINES = 'computePaymentLines'
 
 
-const INIT_JOURNALS = 'initJournals' 
+const INIT_JOURNALS = 'initJournals'
+
+const SELECT_JOURNAL = 'selectJournal'
 
 
 const INIT_DATE = 'initDate'
 const INIT_DATE = 'initDate'
 
 
@@ -62,8 +66,8 @@ export {
     NOTIFY, INIT_SALE, EXPLODE_DATA, CREATE_SALE, // Sale
     NOTIFY, INIT_SALE, EXPLODE_DATA, CREATE_SALE, // Sale
     INIT_USER, // Users
     INIT_USER, // Users
     INIT_PRODUCTS, SHOW_PRODUCT_FORM, HIDE_PRODUCT_FORM, SUBMIT_PRODUCT, CREATE_PRODUCT, RECEIVE_PRODUCT, SELECT_PRODUCT, // Product
     INIT_PRODUCTS, SHOW_PRODUCT_FORM, HIDE_PRODUCT_FORM, SUBMIT_PRODUCT, CREATE_PRODUCT, RECEIVE_PRODUCT, SELECT_PRODUCT, // Product
-    INIT_PAYMENT_TERMS, CHANGE_PAYMENT_TYPE, CHANGE_INITIAL_PAYMENT, COMPUTE_PAYMENT_LINES, // Payment terms
-    INIT_JOURNALS, // Journals
+    INIT_PAYMENT_TERMS, CHANGE_PAYMENT_TYPE, CHANGE_INITIAL_PAYMENT, COMPUTE_PAYMENT_LINES, SELECT_PAYMENT_TERM, // Payment terms
+    INIT_JOURNALS, SELECT_JOURNAL, // Journals
     INIT_DATE, // Date
     INIT_DATE, // Date
     INIT_CUSTOMERS, SHOW_CUSTOMER_FORM, HIDE_CUSTOMER_FORM, SUBMIT_CUSTOMER, CREATE_CUSTOMER, RECEIVE_CUSTOMER, SELECT_CUSTOMER, // Customer
     INIT_CUSTOMERS, SHOW_CUSTOMER_FORM, HIDE_CUSTOMER_FORM, SUBMIT_CUSTOMER, CREATE_CUSTOMER, RECEIVE_CUSTOMER, SELECT_CUSTOMER, // Customer
     INIT_CURRENCIES, // Currencies
     INIT_CURRENCIES, // Currencies

+ 1 - 1
src/store/modules/journal.js

@@ -68,7 +68,7 @@ const mutations = {
      * @param {*} payload 
      * @param {*} payload 
      */
      */
     [SET_SELECTED_JOURNAL] (state, payload) {
     [SET_SELECTED_JOURNAL] (state, payload) {
-        state.selectedJournal = payload
+        state.selectedJournal = state.journals.find(item => item.id === payload)
     }
     }
 }
 }
 
 

+ 15 - 3
src/store/modules/payment.js

@@ -94,8 +94,12 @@ const mutations = {
      * @param {*} state 
      * @param {*} state 
      * @param {*} payload 
      * @param {*} payload 
      */
      */
-    [AUTOSELECT_PAYMENT_TERM] (state) {
-        state.selectedPaymentTerm = state.paymentTerms.find(t => t.lines.length === 1 && t.lines[0].days === 0) || state.paymentTerms.find(t => t.lines.length === 1 && t.lines[0].days >= 0)
+    [AUTOSELECT_PAYMENT_TERM] (state, payload) {
+        if (!payload || payload === 'cash') {
+            state.selectedPaymentTerm = state.paymentTerms.find(t => t.lines.length === 1 && t.lines[0].days === 0) || state.paymentTerms.find(t => t.lines.length === 1 && t.lines[0].days >= 0)
+        } else {
+            state.selectedPaymentTerm = state.paymentTerms.find(t => t.lines[0].days > 0)
+        }
     },
     },
     /**
     /**
      * 
      * 
@@ -103,7 +107,7 @@ const mutations = {
      * @param {*} payload 
      * @param {*} payload 
      */
      */
     [SET_SELECTED_PAYMENT_TERM] (state, payload) {
     [SET_SELECTED_PAYMENT_TERM] (state, payload) {
-        state.selectedPaymentTerm = payload
+        state.selectedPaymentTerm = state.paymentTerms.find(item => item.id === payload)
     },
     },
     /**
     /**
      * 
      * 
@@ -127,6 +131,8 @@ const mutations = {
      * @param {*} payload 
      * @param {*} payload 
      */
      */
     [SET_PAYMENT_LINES] (state, payload) {
     [SET_PAYMENT_LINES] (state, payload) {
+        state.paymentLines = []
+
         let percentPaid = state.initialPayment / payload.total
         let percentPaid = state.initialPayment / payload.total
         let distributedPercentage = -(percentPaid / state.selectedPaymentTerm.lines.length)
         let distributedPercentage = -(percentPaid / state.selectedPaymentTerm.lines.length)
         let totals = []
         let totals = []
@@ -190,6 +196,10 @@ const actions = {
      * @param {*} payload 
      * @param {*} payload 
      */
      */
     [SELECT_PAYMENT_TERM] ({ commit }, payload) {
     [SELECT_PAYMENT_TERM] ({ commit }, payload) {
+        if (!payload) {
+            return
+        }
+
         commit(SET_SELECTED_PAYMENT_TERM, payload)
         commit(SET_SELECTED_PAYMENT_TERM, payload)
     },
     },
     /**
     /**
@@ -199,6 +209,7 @@ const actions = {
      */
      */
     [CHANGE_PAYMENT_TYPE] ({ commit }, payload) {
     [CHANGE_PAYMENT_TYPE] ({ commit }, payload) {
         commit(SET_PAYMENT_TYPE, payload)
         commit(SET_PAYMENT_TYPE, payload)
+        commit(AUTOSELECT_PAYMENT_TERM, payload)
     },
     },
     /**
     /**
      * 
      * 
@@ -206,6 +217,7 @@ const actions = {
      * @param {*} payload 
      * @param {*} payload 
      */
      */
     [CHANGE_INITIAL_PAYMENT] ({ commit }, payload) {
     [CHANGE_INITIAL_PAYMENT] ({ commit }, payload) {
+        console.log('changePaymentTerm', payload)
         commit(SET_INITIAL_PAYMENT, payload)
         commit(SET_INITIAL_PAYMENT, payload)
     },
     },
     /**
     /**