123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- import axios from 'axios'
- import {
- INIT_SALE_URL,
- CREATE_PRODUCT_URL,
- CREATE_CUSTOMER_URL,
- PROCESS_SALE_URL
- } from '@/constants/resourcePaths'
- import {
- SET_PROCESSING,
- SET_COMPLETED
- } from '@/constants/mutationTypes'
- import {
- INIT_SALE,
- NOTIFY,
- EXPLODE_DATA,
- CREATE_PRODUCT,
- CREATE_CUSTOMER,
- RECEIVE_PRODUCT,
- RECEIVE_CUSTOMER,
- CHECK_CART,
- CHECK_CUSTOMER,
- CHECK_PAYMENT_METHOD,
- CHECK_AMOUNT_RECEIVED,
- CREATE_SALE,
- COMPLETE_SALE,
- RESET_SALE
- } from '@/constants/actionTypes'
- const actions = {
- /**
- *
- * @param {*} param0
- * @param {*} payload
- */
- [NOTIFY] ({ commit }, payload) {
- openerp.web.notification.do_warn('Atención', payload)
- return false
- },
- /**
- *
- * @param {*} param0
- */
- [INIT_SALE] ({ commit, dispatch }) {
- return axios.get(INIT_SALE_URL).then(response => {
- dispatch(COMPLETE_SALE, false)
- dispatch(EXPLODE_DATA, response.data)
- }).catch(error => {
- console.log(error)
- })
- },
- /**
- *
- * @param {*} param0
- * @param {*} payload
- */
- [EXPLODE_DATA] ({ dispatch }, payload) {
- for (let value in payload) {
- dispatch(`init${value[0].toUpperCase()}${value.slice(1)}`, payload[value])
- }
- },
- /**
- *
- * @param {*} param0
- * @param {*} payload
- */
- [CREATE_PRODUCT] ({ dispatch }, payload) {
- const data = {
- jsonrpc: '2.0',
- method: 'call',
- params: {
- ...payload
- }
- }
- return axios.post(CREATE_PRODUCT_URL, data).then(response => {
- dispatch(RECEIVE_PRODUCT, response.data.result)
- }).catch(error => {
- console.log(error)
- })
- },
- /**
- *
- * @param {*} param0
- * @param {*} payload
- */
- [CREATE_CUSTOMER] ({ dispatch }, payload) {
- const data = {
- jsonrpc: '2.0',
- method: 'call',
- params: {
- ...payload
- }
- }
- return axios.post(CREATE_CUSTOMER_URL, data).then(response => {
- dispatch(RECEIVE_CUSTOMER, response.data.result)
- }).catch(error => {
- console.log(error)
- })
- },
- /**
- *
- * @param {*} param0
- */
- [CHECK_CART] ({ getters, dispatch }) {
- return !!getters.cartItems.length || dispatch(NOTIFY, 'Necesitas agregar productos al carrito para continuar')
- },
- /**
- *
- * @param {*} param0
- */
- [CHECK_CUSTOMER] ({ getters, dispatch }) {
- if (getters.processing) {
- return dispatch(NOTIFY, 'Espere mientras se está procesando')
- }
- return !!getters.selectedCustomer || dispatch(NOTIFY, 'Necesitas seleccionar un cliente para continuar')
- },
- /**
- *
- * @param {*} param0
- */
- [CHECK_PAYMENT_METHOD] ({ getters }) {
- if (getters.processing) {
- return dispatch(NOTIFY, 'Espere mientras se está procesando')
- }
- return true
- },
- /**
- *
- * @param {*} param0
- */
- [CHECK_AMOUNT_RECEIVED] ({ getters, dispatch }) {
- if (getters.paymentType == 'cash') {
- return getters.initialPayment >= getters.cartTotal || dispatch(NOTIFY, 'El monto recibido no puede ser menor al monto a pagar')
- } else {
- return getters.initialPayment < getters.cartTotal || dispatch(NOTIFY, 'El monto recibido no puede ser igual o mayor al monto a pagar')
- }
- },
- /**
- *
- * @param {*} param0
- */
- [CREATE_SALE] ({ getters, commit, dispatch }, payload) {
- commit(SET_PROCESSING, true)
- const data = {
- jsonrpc: '2.0',
- method: 'call',
- params: {
- items: getters.cartItems.map(item => {
- return {
- id: item.id,
- quantity: item.quantity,
- price: item.price
- }
- }),
- total: getters.cartTotal,
- customerId: getters.selectedCustomer.id,
- paymentTermId: getters.selectedPaymentTerm.id,
- journalId: getters.selectedJournal.id,
- payment: getters.initialPayment > getters.cartTotal ? getters.cartTotal : getters.initialPayment
- }
- }
- return axios.post(PROCESS_SALE_URL, data).then(response => {
- commit(SET_PROCESSING, !response.data.result)
- dispatch(COMPLETE_SALE, response.data.result)
- }).catch(error => {
- console.log(error)
- commit(SET_PROCESSING, false)
- })
- },
- /**
- *
- * @param {*} param0
- * @param {*} payload
- */
- [COMPLETE_SALE] ({ commit }, payload) {
- commit(SET_COMPLETED, !!payload)
- },
- /**
- *
- * @param {*} param0
- */
- [RESET_SALE] ({ rootState, commit, dispatch }) {
- for (let key in rootState) {
- if (!(rootState[key] instanceof Object)) {
- continue
- }
- dispatch(`reset${key[0].toUpperCase()}${key.slice(1)}`)
- }
- dispatch(INIT_SALE)
- }
- }
- export default actions
|