app.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import axios from 'axios'
  2. import { Modes, States } from '../constants/app'
  3. import * as Urls from '../constants/resourcePaths'
  4. const state = {
  5. currentMode: Modes.PURCHASE,
  6. currentState: States.NONE,
  7. footerButtonsVisibility: false,
  8. completed: false,
  9. loading: true
  10. }
  11. const getters = {
  12. mode() {
  13. return state.currentMode
  14. },
  15. isProcessing() {
  16. return state.currentState === States.PROCESSING
  17. },
  18. isDone() {
  19. return state.currentState === States.DONE
  20. },
  21. hasError() {
  22. return state.currentState === States.ERROR
  23. },
  24. state() {
  25. return state.currentState
  26. },
  27. isPurchase() {
  28. return state.currentMode === 'purchase'
  29. },
  30. isExpense() {
  31. return state.currentMode === 'expense'
  32. },
  33. isPurchasePicking() {
  34. return state.currentMode === 'product_picking'
  35. },
  36. isPurchasePayment() {
  37. return state.currentMode === 'payment'
  38. },
  39. isPurchaseTaking() {
  40. return state.currentMode === 'product_taking'
  41. },
  42. isCompleted(state) {
  43. return state.completed
  44. },
  45. isLoading() {
  46. return state.loading
  47. }
  48. }
  49. const mutations = {
  50. setMode(state, payload) {
  51. state.currentMode = payload
  52. },
  53. setState(state, payload) {
  54. state.currentState = payload
  55. },
  56. toggleFooterButtonsVisibility(state) {
  57. state.footerButtonsVisibility = !state.footerButtonsVisibility
  58. },
  59. setCompleted(state, completed) {
  60. state.completed = completed
  61. },
  62. setLoading(state, loading) {
  63. state.loading = loading
  64. }
  65. }
  66. const actions = {
  67. initPurchase({ getters, commit, dispatch }, payload) {
  68. commit('setMode', payload || getters.mode)
  69. commit('setLoading', true)
  70. commit('setCompleted', false)
  71. return axios.get(Urls.INIT_PURCHASE_URL, {
  72. params: {
  73. mode: getters.mode
  74. }
  75. }).then(response => {
  76. commit('setLoading', false)
  77. commit('toggleFooterButtonsVisibility')
  78. dispatch('explodeData', response.data)
  79. }).catch(error => console.log(error))
  80. },
  81. explodeData({ dispatch }, payload) {
  82. for (let key in payload) {
  83. dispatch(`init${key[0].toUpperCase()}${key.slice(1)}`, payload[key])
  84. }
  85. },
  86. createObject({ _ }, payload) {
  87. const data = {
  88. jsonrpc: '2.0',
  89. method: 'call',
  90. params: {
  91. type: payload.type,
  92. data: payload.data
  93. }
  94. }
  95. return axios.post(Urls.CREATE_OBJECT_URL, data).then(response => {
  96. console.log(response)
  97. }).catch(error => console.log(error))
  98. },
  99. checkSupplier({ getters, dispatch}) {
  100. return !!getters.selectedSupplier || dispatch('notify', 'Necesitas seleccionar un proveedor para continuar')
  101. },
  102. checkCart({ getters, dispatch}) {
  103. for (let cartItem of getters.cartItems) {
  104. if (cartItem.price == 0) {
  105. return dispatch('notify', 'No puede haber items sin precio definido en el carrito')
  106. }
  107. }
  108. return !!getters.cartItems.length || dispatch('notify', 'Necesitar agregar producto al carrito para continuar')
  109. },
  110. checkAmountReceived({ getters, dispatch }) {
  111. if (getters.paymentType == 'cash') {
  112. return getters.initialPayment >= getters.cartTotal || dispatch('notify', 'El monto recibido no puede ser menor al monto a pagar')
  113. } else {
  114. return getters.initialPayment < getters.cartTotal || dispatch('notify', 'El monto recibido no puede ser igual o mayor al monto a pagar')
  115. }
  116. },
  117. createPurchase({ getters, commit, dispatch }) {
  118. commit('setLoading', true)
  119. const data = {
  120. jsonrpc: '2.0',
  121. method: 'call',
  122. params: {
  123. mode: getters.mode,
  124. items: getters.cartItems.map(item => {
  125. return {
  126. id: item.id,
  127. name: item.name,
  128. quantity: item.quantity,
  129. price: item.price
  130. }
  131. }),
  132. supplierId: getters.selectedSupplier.id,
  133. paymentTermId: getters.selectedPaymentTerm.id,
  134. journalId: getters.selectedJournal.id,
  135. payment: getters.initialPayment > getters.cartTotal ? getters.cartTotal : getters.initialPayment,
  136. supplierInvoiceNumber: getters.supplierInvoiceNumber || null
  137. }
  138. }
  139. return axios.post(Urls.PROCESS_PURCHASE_URL, data).then(_ => {
  140. dispatch('resetPurchase')
  141. commit('setLoading', false)
  142. commit('setCompleted', true)
  143. }).catch(error => {
  144. console.log(error)
  145. })
  146. },
  147. resetPurchase({ rootState, dispatch }) {
  148. for (let key in rootState) {
  149. if (!(rootState[key] instanceof Object)) {
  150. continue
  151. }
  152. dispatch(`reset${key[0].toUpperCase()}${key.slice(1)}`)
  153. }
  154. dispatch('initPurchase')
  155. },
  156. notify({ _ }, payload) {
  157. openerp.web.notification.do_warn('Atención', payload)
  158. return false
  159. }
  160. }
  161. export default {
  162. state,
  163. getters,
  164. mutations,
  165. actions
  166. }