Bläddra i källkod

[ADD] budget support in pos

Gogs 7 år sedan
förälder
incheckning
a0a3c67bd7
9 ändrade filer med 63 tillägg och 14 borttagningar
  1. 16 5
      controllers/main.py
  2. 4 3
      src/App.vue
  3. 3 1
      src/constants/mutationTypes.js
  4. 7 0
      src/index.js
  5. 7 2
      src/store/actions.js
  6. 10 0
      src/store/getters.js
  7. 5 1
      src/store/mutations.js
  8. 1 0
      src/store/state.js
  9. 10 2
      templates.xml

+ 16 - 5
controllers/main.py

@@ -312,7 +312,7 @@ class PosSales(http.Controller):
     '''
         Create sale order from cart items values
     '''
-    def create_sale_from_cart(self, partner_id, cart_items, date_confirm, currency_id, pricelist_id, payment_term_id):
+    def create_sale_from_cart(self, partner_id, cart_items, date_confirm, currency_id, pricelist_id, payment_term_id = None,):
         return request.env['sale.order'].create({
             'partner_id': partner_id,
             'order_line': [[0, False, {
@@ -321,18 +321,23 @@ class PosSales(http.Controller):
                 'price_unit': float(line.get('price'))
             }] for line in cart_items],
             'picking_policy': 'direct',
-            'state': 'manual',
             'date_confirm': date_confirm,
             'currency_id': currency_id,
             'pricelist_id': pricelist_id,
-            'payment_term': payment_term_id
+            'payment_term': payment_term_id,
+            'state': 'draft',
         })
 
     '''
         Confirm sale order
     '''
     def confirm_sale_order(self, sale_order_id):
-        return request.env['sale.order'].browse(sale_order_id).action_button_confirm()
+        sale_order = request.env['sale.order'].browse(sale_order_id)
+        sale_order.write({
+            'state': 'manual'
+        })
+
+        return sale_order.action_button_confirm()
 
     '''
         Create invoice from sale order
@@ -578,10 +583,16 @@ class PosSales(http.Controller):
         pricelist = self.get_pricelist(currency_id)
         self.make_info_log('[OK] Getting product pricelist')
 
-        # Create sale orde
+        # Create sale order
         sale_order = self.create_sale_from_cart(kw.get('customerId'), kw.get('items'), date_now, currency_id, pricelist.id, kw.get('paymentTermId'))
         self.make_info_log('[OK] Creating sale order')
 
+        # Check if budget
+        if kw.get('mode', 'sale') != 'sale':
+            return {
+                'process': True
+            }
+
         # Confirm sale
         self.confirm_sale_order(sale_order.id)
         self.make_info_log('[OK] Confirm sale order')

+ 4 - 3
src/App.vue

@@ -5,9 +5,9 @@
                 product-step
             tab-content(title="Quién es el cliente?" :beforeChange="checkCustomer")
                 customer-step
-            tab-content(title="Cómo quieres pagar?" :beforeChange="checkPaymentMethod")
+            tab-content(v-if='isSale' title="Cómo quieres pagar?" :beforeChange="checkPaymentMethod")
                 payment-method-step
-            tab-content(title="Qué monto vas a entregar?" :beforeChange="checkAmountReceived")
+            tab-content(v-if='isSale' title="Qué monto vas a entregar?" :beforeChange="checkAmountReceived")
                 payment-amount-step
 </template>
 
@@ -34,6 +34,7 @@
             PaymentAmountStep
         },
         computed: mapGetters([
+            'isSale',
             'processing',
             'completed'
         ]),
@@ -55,7 +56,7 @@
             }
         },
         mounted() {
-            this.initSale()
+            this.initSale(this.$root.mode)
         }
     }
 </script>

+ 3 - 1
src/constants/mutationTypes.js

@@ -1,3 +1,5 @@
+const SET_MODE = 'setMode'
+
 const SET_PROCESSING = 'setProcessing'
 
 const SET_COMPLETED = 'setCompleted'
@@ -75,7 +77,7 @@ const PULL_FROM_CART = 'pullFromCart'
 const SET_CART_TOTAL = 'setCartTotal'
 
 export {
-    SET_PROCESSING, SET_COMPLETED, SET_ERROR, // App
+    SET_MODE, SET_PROCESSING, SET_COMPLETED, SET_ERROR, // App
     SET_USER, SET_LOADING_USER, // User
     SET_PRODUCTS, SET_FILTERED_PRODUCTS, SET_LOADING_PRODUCTS, ADD_PRODUCT, SET_SHOW_PRODUCT_FORM, SELECT_PRODUCT, SET_PRODUCT_WITH_VARIANT, // Product
     SET_PAYMENT_TERMS, SET_LOADING_PAYMENT_TERMS, AUTOSELECT_PAYMENT_TERM, SET_SELECTED_PAYMENT_TERM, SET_PAYMENT_TYPE, SET_INITIAL_PAYMENT, SET_PAYMENT_LINES, // Payment

+ 7 - 0
src/index.js

@@ -16,6 +16,10 @@ Vue.config.devTools = false
 openerp.eiru_pos = (instance, local) => {
 
     local.PosWidget = instance.Widget.extend({
+        init(parent, action) {
+            this._super(parent)
+            this.mode = action.params.mode
+        },
         start() {
             this.sidebarFold()
 
@@ -25,6 +29,9 @@ openerp.eiru_pos = (instance, local) => {
                 template: '<App />',
                 components: {
                     App
+                },
+                data: { 
+                    mode: this.mode
                 }
             });
         },

+ 7 - 2
src/store/actions.js

@@ -8,12 +8,13 @@ import {
 } from '@/constants/resourcePaths'
 
 import {
+    SET_MODE,
     SET_PROCESSING,
     SET_COMPLETED 
 } from '@/constants/mutationTypes'
 
 import { 
-    INIT_SALE, 
+    INIT_SALE,
     NOTIFY, 
     EXPLODE_DATA, 
     CREATE_PRODUCT, 
@@ -43,10 +44,13 @@ const actions = {
      * 
      * @param {*} param0 
      */
-    [INIT_SALE] ({ commit, dispatch }) {
+    [INIT_SALE] ({ commit, dispatch }, payload) {
+        commit(SET_MODE, payload)
+        
         return axios.get(INIT_SALE_URL).then(response => {
             dispatch(COMPLETE_SALE, false)
             dispatch(EXPLODE_DATA, response.data)
+            
         }).catch(error => {
             console.log(error)
         })
@@ -152,6 +156,7 @@ const actions = {
             jsonrpc: '2.0',
             method: 'call',
             params: {
+                mode: getters.mode,
                 items: getters.cartItems.map(item => {
                     return {
                         id: item.id,

+ 10 - 0
src/store/getters.js

@@ -1,4 +1,14 @@
 const getters = {
+    /**
+     * 
+     * @param {*} state 
+     */
+    mode(state) {
+        return state.mode
+    },
+    isSale(state) {
+        return state.mode === 'sale'
+    },
     /**
      * 
      * @param {*} state 

+ 5 - 1
src/store/mutations.js

@@ -1,10 +1,14 @@
 import { 
+    SET_MODE,
     SET_PROCESSING,
     SET_COMPLETED
  } from '@/constants/mutationTypes'
 
 const mutations = {
-      /**
+    [SET_MODE] (state, payload) {
+        state.mode = payload
+    },
+    /**
      * 
      */
     [SET_PROCESSING] (state, payload) {

+ 1 - 0
src/store/state.js

@@ -1,4 +1,5 @@
 const state = {
+    mode: 'sale',
     processing: false,
     completed: false,
     error: false

+ 10 - 2
templates.xml

@@ -7,11 +7,19 @@
             </xpath>
         </template>
 
-        <record id="eiru_pos.client_action_launch" model="ir.actions.client">
+        <record id="eiru_pos.pos_action" model="ir.actions.client">
             <field name="name">Eiru Ventas</field>
             <field name="tag">eiru_pos.action_launch</field>
+            <field name="params">{'mode': 'sale'}</field>
         </record>
 
-        <menuitem id="eiru_pos.launch" name="Nueva venta" parent="eiru_dashboard.eiru_dashboard_main" action="eiru_pos.client_action_launch" sequence="2"/>
+        <record id="eiru_pos.budget_action" model="ir.actions.client">
+            <field name="name">Eiru Presupuestos</field>
+            <field name="tag">eiru_pos.action_launch</field>
+            <field name="params">{'mode': 'budget'}</field>
+        </record>
+
+        <menuitem id="eiru_pos.new_sale" name="Nueva venta" parent="eiru_dashboard.eiru_dashboard_main" action="eiru_pos.pos_action" sequence="2"/>
+        <menuitem id="eiru_pos.new_budget" name="Nuevo presupuesto" parent="eiru_dashboard.eiru_dashboard_main" action="eiru_pos.budget_action" sequence="3"/>
     </data>
 </openerp>