app.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  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. }
  8. const getters = {
  9. /**
  10. *
  11. */
  12. mode() {
  13. return state.currentMode
  14. },
  15. /**
  16. *
  17. */
  18. isProcessing() {
  19. return state.currentState === States.PROCESSING
  20. },
  21. /**
  22. *
  23. */
  24. isDone() {
  25. return state.currentState === States.DONE
  26. },
  27. /**
  28. *
  29. */
  30. hasError() {
  31. return state.currentState === States.ERROR
  32. },
  33. /**
  34. *
  35. */
  36. state() {
  37. return state.currentState
  38. }
  39. }
  40. const mutations = {
  41. /**
  42. *
  43. * @param {*} state
  44. * @param {*} payload
  45. */
  46. setMode(state, payload) {
  47. state.currentMode = payload
  48. },
  49. /**
  50. *
  51. * @param {*} state
  52. * @param {*} payload
  53. */
  54. setState(state, payload) {
  55. state.currentState = payload
  56. }
  57. }
  58. const actions = {
  59. /**
  60. *
  61. * @param {*} param0
  62. * @param {*} payload
  63. */
  64. initPurchase({ getters, commit, dispatch }, payload) {
  65. commit('setMode', payload || getters.mode)
  66. const timeStarted = Date.now()
  67. return axios.get(Urls.INIT_PURCHASE_URL).then(response => {
  68. commit('setState', States.NONE)
  69. dispatch('explodeData', response.data)
  70. const timeElapsed = Date.now() - timeStarted
  71. dispatch('notify', 'Datos cargados en ' + (timeElapsed / 1000) + ' segundos')
  72. }).catch(error => console.log(error))
  73. },
  74. /**
  75. *
  76. * @param {*} param0
  77. * @param {*} payload
  78. */
  79. explodeData({ dispatch }, payload) {
  80. for (let key in payload) {
  81. dispatch(`init${key[0].toUpperCase()}${key.slice(1)}`, payload[key])
  82. }
  83. },
  84. /**
  85. *
  86. * @param {*} param0
  87. * @param {*} payload
  88. */
  89. createObject({ dispatch }, payload) {
  90. const data = {
  91. jsonrpc: '2.0',
  92. method: 'call',
  93. params: {
  94. type: payload.type,
  95. data: payload.data
  96. }
  97. }
  98. return axios.post(Urls.CREATE_OBJECT_URL, data).then(response => {
  99. console.log(response)
  100. }).catch(error => console.log(error))
  101. },
  102. /**
  103. *
  104. * @param {*} param0
  105. */
  106. checkSupplier({ getters, dispatch}) {
  107. return !!getters.selectedSupplier || dispatch('notify', 'Necesitas seleccionar un proveedor para continuar')
  108. },
  109. /**
  110. *
  111. * @param {*} param0
  112. */
  113. checkCart({ getters, dispatch}) {
  114. return !!getters.cartItems.length || dispatch('notify', 'Necesitar agregar producto al carrito para continuar')
  115. },
  116. /**
  117. *
  118. * @param {*} param0
  119. */
  120. checkAmountReceived({ getters, dispatch }) {
  121. if (getters.paymentType == 'cash') {
  122. return getters.initialPayment >= getters.cartTotal || dispatch('notify', 'El monto recibido no puede ser menor al monto a pagar')
  123. } else {
  124. return getters.initialPayment < getters.cartTotal || dispatch('notify', 'El monto recibido no puede ser igual o mayor al monto a pagar')
  125. }
  126. },
  127. /**
  128. *
  129. * @param {*} param0
  130. */
  131. createPurchase({ getters, commit, dispatch }) {
  132. commit('setState', States.PROCESSING)
  133. const data = {
  134. jsonrpc: '2.0',
  135. method: 'call',
  136. params: {
  137. mode: getters.mode,
  138. items: getters.cartItems.map(item => {
  139. return {
  140. id: item.id,
  141. name: item.name,
  142. quantity: item.quantity,
  143. price: item.price
  144. }
  145. }),
  146. supplierId: getters.selectedSupplier.id,
  147. paymentTermId: getters.selectedPaymentTerm.id,
  148. journalId: getters.selectedJournal.id,
  149. payment: getters.initialPayment > getters.cartTotal ? getters.cartTotal : getters.initialPayment
  150. }
  151. }
  152. return axios.post(Urls.PROCESS_PURCHASE_URL, data).then(response => {
  153. commit('setState', States.DONE)
  154. dispatch('resetPurchase')
  155. }).catch(error => {
  156. commit('setState', States.ERROR)
  157. })
  158. },
  159. /**
  160. *
  161. * @param {*} param0
  162. */
  163. resetPurchase({ rootState, dispatch }) {
  164. for (let key in rootState) {
  165. if (!(rootState[key] instanceof Object)) {
  166. continue
  167. }
  168. dispatch(`reset${key[0].toUpperCase()}${key.slice(1)}`)
  169. }
  170. dispatch('initPurchase')
  171. },
  172. /**
  173. *
  174. * @param {*} param0
  175. * @param {*} payload
  176. */
  177. notify({ commit }, payload) {
  178. openerp.web.notification.do_warn('Atención', payload)
  179. return false
  180. },
  181. }
  182. export default {
  183. state,
  184. getters,
  185. mutations,
  186. actions
  187. }