123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- const state = {
- loadingPaymentTerms: false,
- paymentTerms: [],
- paymentMethods: ['Efectivo', 'Banco'],
- paymentTerm: null,
- paymentType: 'cash',
- paymentMethod: 'Efectivo',
- amountToPay: 0,
- initialPayment: 0,
- amountResidual: 0,
- paymentLines: [],
- firstPaymentDate: new Date(),
- firstPaymentAfterDate: new Date(),
- bankPaymentData: null,
- }
- const getters = {
- paymentTerms(state) {
- return state.paymentTerms
- },
- paymentMethods(state) {
- return state.paymentMethods.filter(p => p !== state.paymentMethod)
- },
- loadingPaymentTerms(state) {
- return state.loadingPaymentTerms
- },
- paymentTerm(state) {
- return state.paymentTerm
- },
- paymentType(state) {
- return state.paymentType
- },
- paymentMethod(state) {
- return state.paymentMethod
- },
- 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
- },
- amountResidual(state) {
- return state.amountResidual
- },
- paymentLines(state) {
- return state.paymentLines
- },
- firstPaymentDate(state) {
- if (state.paymentLines && state.paymentLines.length > 1) {
- const date = new Date(state.paymentLines[0].date)
- if (moment(date).isSameOrAfter(state.firstPaymentDate)) {
- return date
- }
- }
- return state.firstPaymentDate
- },
- firstPaymentAfterDate(state) {
- return state.firstPaymentAfterDate
- },
- bankPaymentData(state) {
- return state.bankPaymentData
- }
- }
- const mutations = {
- setPaymentTerms(state, payload) {
- state.paymentTerms = payload
- },
- setLoadingPaymentTerms(state, payload) {
- state.loadingPaymentTerms = !!payload
- },
- 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)
- }
- },
- setPaymentTerm(state, payload) {
- if (!payload) {
- state.paymentTerm = payload
- return
- }
- state.paymentTerm = state.paymentTerms.find(item => item.id === payload)
- },
- setPaymentType(state, payload) {
- state.paymentType = payload
- },
- setPaymentMethod(state, payload) {
- state.paymentMethod = payload
- },
- setAmountToPay(state, amount) {
- if (!this.getters.baseCurrency) {
- 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.paymentTerm.lines.length)
- let totals = []
- let residual = payload.total
- let dueDate = null
- for (let line of state.paymentTerm.lines) {
- dueDate = moment(payload.date).add(line.days + line.days2, 'days').format('DD/MM/YYYY')
- if(percentPaid && percentPaid < 1) {
- let firstDate = moment(payload.date).format('DD/MM/YYYY')
- totals.push([firstDate, percentPaid])
- percentPaid = 0
- if (dueDate === firstDate) {
- distributedPercentage = ((totals[0][1] - line.valueAmount) / (state.paymentTerm.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: parseFloat(currentPrice !== parseFloat(0).toFixed(2) ? currentPrice : residual.toFixed(2))
- })
- }
- totals = []
- }
- },
- setFirstPaymentDate(state, paymentDate) {
- state.firstPaymentDate = paymentDate
- if (moment(state.firstPaymentAfterDate).isSameOrBefore(paymentDate)) {
- state.firstPaymentAfterDate = paymentDate
- }
- },
- setBankPaymentData(state, bankPaymentData) {
- state.bankPaymentData = bankPaymentData
- }
- }
- const actions = {
- initPaymentTerms({ commit }, payload) {
- commit('setPaymentTerms', payload)
- commit('autoSelectPaymentTerm')
- commit('setLoadingPaymentTerms')
- },
- selectPaymentTerm({ commit }, payload) {
- if (!payload) {
- return
- }
- commit('setPaymentTerm', payload)
- },
- changePaymentType({ commit, dispatch, getters }, paymentType) {
- commit('setPaymentType', paymentType)
- commit('autoSelectPaymentTerm', paymentType)
- 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 }, payload) {
- commit('setInitialPayment', payload)
- commit('setAmountResidual')
- if (getters.paymentType === 'credit') {
- dispatch('computePaymentLines')
- }
- },
- changeFirstPaymentDate({ commit }, paymentDate) {
- commit('setFirstPaymentDate', paymentDate)
- },
- changeBankPaymentData({ commit, dispatch }, bankPaymentData) {
- commit('setBankPaymentData', bankPaymentData)
- if (bankPaymentData.amount) {
- dispatch('changeInitialPayment', bankPaymentData.amount)
- }
- },
- computePaymentLines({ commit, getters }) {
- commit('setPaymentLines', {
- date: getters.date,
- total: getters.amountToPay
- })
- },
- resetPayment({ getters, commit }) {
- if (getters.isWired) {
- commit('setLoadingPaymentTerms', true)
- commit('setPaymentTerms', [])
- }
-
- commit('setPaymentTerm', null)
- commit('setPaymentType', 'cash')
- commit('setPaymentMethod', 'Efectivo')
- commit('setAmountToPay', 0)
- commit('setInitialPayment', 0)
- commit('setAmountResidual')
- commit('autoSelectPaymentTerm')
- }
- }
- export default {
- state,
- getters,
- mutations,
- actions
- }
|