123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- const state = {
- loadingPaymentTerms: true,
- paymentTerms: [],
- paymentMethods: ['Efectivo', 'Banco'],
- selectedPaymentTerm: null,
- paymentType: 'cash',
- paymentMethod: 'Efectivo',
- amountToPay: 0,
- initialPayment: 0,
- amountResidual: 0,
- paymentLines: [],
- bankPaymentData: null,
- supplierInvoiceNumber: null
- }
- const getters = {
- paymentTerms(state) {
- return state.paymentTerms
- },
- paymentMethods(state) {
- return state.paymentMethods.filter(p => p !== state.paymentMethod)
- },
- selectedPaymentTerm(state) {
- return state.selectedPaymentTerm
- },
- paymentType(state) {
- return state.paymentType
- },
- paymentMethod(state) {
- return state.paymentMethod
- },
- amountToPay(state) {
- return state.amountToPay
- },
- // amountToPayInOtherCurrencies(state, { settings, currencies, user, selectedCurrency, cartTotal }) {
- // console.log(settings)
- // console.log(currencies)
- // console.log(user)
- // console.log(selectedCurrency)
- // console.log(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
- },
- amountResidual(state) {
- return state.amountResidual
- },
- paymentLines(state) {
- return state.paymentLines
- },
- supplierInvoiceNumber(state) {
- return state.supplierInvoiceNumber
- },
- loadingPaymentTerms(state) {
- return state.loadingPaymentTerms
- }
- }
- const mutations = {
- setPaymentTerms(state, payload) {
- state.paymentTerms = [...payload]
- },
- setLoadingPaymentTerms(state, payload) {
- state.loadingPaymentTerms = !!payload
- },
- autoSelectPaymentTerm(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)
- }
- },
- setSelectedPaymentTerm(state, termId) {
- if (!termId) {
- state.selectedPaymentTerm = null
- return
- }
- state.selectedPaymentTerm = state.paymentTerms.find(item => item.id === termId)
- },
- setPaymentType(state, payload) {
- state.paymentType = payload
- },
- setPaymentMethod(state, payload) {
- state.paymentMethod = payload
- },
- setAmountToPay(state, amount) {
- if (!this.getters.baseCurrency) {
- this.amountToPay = amount
- return
- }
- let rate = 1
- if (this.getters.baseCurrency.id !== this.getters.selectedCurrency.id) {
- rate = this.getters.baseCurrency.rateSilent / this.getters.selectedCurrency.rateSilent
- }
- state.amountToPay = amount / rate
- },
- setAmountResidual(state) {
- state.amountResidual = state.initialPayment < state.amountToPay ? 0 : state.initialPayment - state.amountToPay
- },
- computePaymentInCurrency(state, { fromSymbol, toSymbol }) {
- const fromCurrency = this.getters.currencies.find(c => c.symbol === fromSymbol)
- const toCurrency = this.getters.currencies.find(c => c.symbol === toSymbol)
- if (!fromCurrency || !toCurrency) {
- return
- }
- const rate = fromCurrency.rateSilent / toCurrency.rateSilent
- state.amountToPay = state.amountToPay / rate
- state.initialPayment = state.initialPayment / rate
- state.amountResidual = state.amountResidual / rate
- },
- setInitialPayment(state, payload) {
- state.initialPayment = payload
- },
- setPaymentLines(state, payload) {
- state.paymentLines = []
-
- if (!payload) {
- return
- }
-
- let percentPaid = state.initialPayment / payload.total
- let distributedPercentage = -(percentPaid / state.selectedPaymentTerm.lines.length)
- let totals = []
- let residual = payload.total
- let dueDate = null
-
- for (let line of state.selectedPaymentTerm.lines) {
- dueDate = moment(payload.date).add(line.days + line.days2, 'days').format('YYYY-MM-DD')
-
- if(percentPaid && percentPaid < 1) {
- totals.push([payload.date, percentPaid])
- percentPaid = 0
-
- if (dueDate === payload.date) {
- distributedPercentage = ((totals[0][1] - line.valueAmount) / (state.selectedPaymentTerm.lines.length - 1))
- continue
- }
- }
-
- if (line.value !== 'balance') {
- totals.push([dueDate, line.valueAmount + distributedPercentage])
- continue
- }
-
- totals.push([dueDate, line.valueAmount])
-
- for (let line of totals) {
- let currentPrice = (payload.total * line[1]).toFixed(2)
-
- if (currentPrice < 0) {
- continue
- }
-
- residual = residual - currentPrice
-
- state.paymentLines.push({
- date: line[0],
- total: currentPrice !== parseFloat(0).toFixed(2) ? currentPrice : residual.toFixed(2)
- })
- }
-
- totals = []
- }
- },
- setBankPaymentData(state, bankPaymentData) {
- state.bankPaymentData = bankPaymentData
- },
- setSupplierInvoiceNumber(state, invoiceNumber) {
- state.supplierInvoiceNumber = invoiceNumber
- }
- }
- const actions = {
- initPaymentTerms({ commit }, payload) {
- commit('setPaymentTerms', payload)
- commit('autoSelectPaymentTerm')
- commit('setLoadingPaymentTerms', false)
- },
- autoSelectPaymentTerm(state, payload) {
- if (!payload || payload === 'cash') {
- state.paymentTerm = 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.paymentTerm = state.paymentTerms.find(t => t.lines[0].days > 0)
- }
- },
- selectPaymentTerm({ commit }, payload) {
- if (!payload) {
- return
- }
- commit('setSelectedPaymentTerm', payload)
- },
- changePaymentType({ getters, commit, dispatch }, payload) {
- commit('setPaymentType', payload),
- commit('autoSelectPaymentTerm', payload)
- commit('setInitialPayment', 0)
- commit('setPaymentLines')
- if (getters.paymentType === 'credit') {
- dispatch('computePaymentLines')
- }
- },
- changePaymentMethod({ commit, dispatch }, methodName) {
- if (methodName === 'Banco') {
- dispatch('toggleBankPayment')
- }
- commit('setPaymentMethod', methodName)
- dispatch('changeInitialPayment', 0)
- },
- changeAmountToPay({ commit }, amount) {
- commit('setAmountToPay', amount)
- },
- changeInitialPayment({ commit, dispatch, getters }, initialPayment) {
- commit('setInitialPayment', initialPayment)
- commit('setAmountResidual')
- if (getters.paymentType === 'credit') {
- dispatch('computePaymentLines')
- }
- },
- computePaymentLines({ commit, getters }) {
- commit('setPaymentLines', {
- date: getters.date,
- total: getters.cartTotal
- })
- },
- changeSupplierInvoiceNumber({ commit }, invoiceNumber) {
- commit('setSupplierInvoiceNumber', invoiceNumber)
- },
- resetPayment({ commit }) {
- commit('setLoadingPaymentTerms', true)
- commit('setPaymentTerms', [])
- commit('setSelectedPaymentTerm', null)
- commit('setPaymentType', 'cash')
- commit('setPaymentMethod', 'Efectivo')
- commit('setAmountToPay', 0)
- commit('setInitialPayment', 0)
- commit('setAmountResidual')
- commit('setSupplierInvoiceNumber', null)
- commit('autoSelectPaymentTerm')
- }
- }
- export default {
- state,
- getters,
- mutations,
- actions
- }
|