Procházet zdrojové kódy

[ADD] pos by steps

robert před 6 roky
rodič
revize
4ac0f0291c
4 změnil soubory, kde provedl 154 přidání a 89 odebrání
  1. 132 76
      controllers/main.py
  2. 4 4
      src/App.vue
  3. 15 6
      src/store/actions.js
  4. 3 3
      templates.xml

+ 132 - 76
controllers/main.py

@@ -28,14 +28,20 @@ LOGGER = logging.getLogger(__name__)
 
 class PosSales(http.Controller):
  
-    '''
-    '''
+    #################
+    #   ╦  ╔═╗╔═╗   #
+    #   ║  ║ ║║ ╦   #
+    #   ╩═╝╚═╝╚═╝   #
+    #################
     def make_info_log(self, log):
         LOGGER.info('\033[1;34m[INFO] --> \033[m{}'.format(log))
 
-    '''
-        New purchase resource route
-    '''
+
+    #####################################
+    #   ╦╔╗╔╦╔╦╗  ╔═╗╦═╗╔═╗╔═╗╔═╗╔═╗╔═╗ #
+    #   ║║║║║ ║   ╠═╝╠╦╝║ ║║  ║╣ ╚═╗╚═╗ #
+    #   ╩╝╚╝╩ ╩   ╩  ╩╚═╚═╝╚═╝╚═╝╚═╝╚═╝ #
+    #####################################
     @http.route('/eiru_sales/init', auth='user', methods=['GET'], cors='*')
     def _init_sale(self, **kw):
         self.make_info_log('Sending JSON response')
@@ -59,10 +65,13 @@ class PosSales(http.Controller):
         }
     
         return make_gzip_response(data)
-    
-    '''
-        Get products data only
-    '''
+
+
+    #####################################################################
+    #   ╔═╗╔═╗╔╦╗  ╔═╗╦═╗╔═╗╔╦╗╦ ╦╔═╗╔╦╗╔═╗  ╔╦╗╔═╗╔╦╗╔═╗  ╔═╗╔╗╔╦ ╦ ╦  #
+    #   ║ ╦║╣  ║   ╠═╝╠╦╝║ ║ ║║║ ║║   ║ ╚═╗   ║║╠═╣ ║ ╠═╣  ║ ║║║║║ ╚╦╝  #
+    #   ╚═╝╚═╝ ╩   ╩  ╩╚═╚═╝═╩╝╚═╝╚═╝ ╩ ╚═╝  ═╩╝╩ ╩ ╩ ╩ ╩  ╚═╝╝╚╝╩═╝╩   #
+    #####################################################################
     @http.route('/eiru_sales/get_images', auth='user', methods=['GET'], cors='*')
     def _get_images_only(self, **kw):
         image_type = str(get_pos_config().get('imageType'))
@@ -72,97 +81,144 @@ class PosSales(http.Controller):
             'products': get_products(image_type=image_type)
         })
 
-    '''
-        Create customer and return data
-    '''
+
+    #################################################################################################
+    #   ╔═╗╦═╗╔═╗╔═╗╔╦╗╔═╗  ╔═╗╦ ╦╔═╗╔╦╗╔═╗╔╦╗╔═╗╦═╗  ╔═╗╔╗╔╔╦╗  ╦═╗╔═╗╔╦╗╦ ╦╦═╗╔╗╔  ╔╦╗╔═╗╔╦╗╔═╗   #
+    #   ║  ╠╦╝║╣ ╠═╣ ║ ║╣   ║  ║ ║╚═╗ ║ ║ ║║║║║╣ ╠╦╝  ╠═╣║║║ ║║  ╠╦╝║╣  ║ ║ ║╠╦╝║║║   ║║╠═╣ ║ ╠═╣   #
+    #   ╚═╝╩╚═╚═╝╩ ╩ ╩ ╚═╝  ╚═╝╚═╝╚═╝ ╩ ╚═╝╩ ╩╚═╝╩╚═  ╩ ╩╝╚╝═╩╝  ╩╚═╚═╝ ╩ ╚═╝╩╚═╝╚╝  ═╩╝╩ ╩ ╩ ╩ ╩   #
+    #################################################################################################
     @http.route('/eiru_sales/create_customer', type='json', auth='user', methods=['POST'], cors='*')
     def _create_customer(self, **kw):
         self.make_info_log('Creating customer')
         return create_customer(kw)
     
-    '''
-        Save settings
-    '''
+
+    #############################################
+    #   ╔═╗╔═╗╦  ╦╔═╗  ╔═╗╔═╗╔╦╗╔╦╗╦╔╗╔╔═╗╔═╗   #
+    #   ╚═╗╠═╣╚╗╔╝║╣   ╚═╗║╣  ║  ║ ║║║║║ ╦╚═╗   #
+    #   ╚═╝╩ ╩ ╚╝ ╚═╝  ╚═╝╚═╝ ╩  ╩ ╩╝╚╝╚═╝╚═╝   #
+    #############################################
     @http.route('/eiru_sales/save_settings', type='json', auth='user', methods=['POST'], cors='*')
     def _save_config(self, **kw):
         self.make_info_log('save settings')
         return save_pos_config(kw)
     
-    '''
-        Create product and return data
-    '''
+
+    #############################################################################################
+    #   ╔═╗╦═╗╔═╗╔═╗╔╦╗╔═╗  ╔═╗╦═╗╔═╗╔╦╗╦ ╦╔═╗╔╦╗  ╔═╗╔╗╔╔╦╗  ╦═╗╔═╗╔╦╗╦ ╦╦═╗╔╗╔  ╔╦╗╔═╗╔╦╗╔═╗  #
+    #   ║  ╠╦╝║╣ ╠═╣ ║ ║╣   ╠═╝╠╦╝║ ║ ║║║ ║║   ║   ╠═╣║║║ ║║  ╠╦╝║╣  ║ ║ ║╠╦╝║║║   ║║╠═╣ ║ ╠═╣  #
+    #   ╚═╝╩╚═╚═╝╩ ╩ ╩ ╚═╝  ╩  ╩╚═╚═╝═╩╝╚═╝╚═╝ ╩   ╩ ╩╝╚╝═╩╝  ╩╚═╚═╝ ╩ ╚═╝╩╚═╝╚╝  ═╩╝╩ ╩ ╩ ╩ ╩  #
+    #############################################################################################
     @http.route('/eiru_sales/create_product', type='json', auth='user', methods=['POST'], cors='*')
     def _create_product(self, **kw):
         return create_product(kw)
-        
-    '''
-        Process sale
-    '''
-    @http.route('/eiru_sales/process_sale', type='json', auth='user', methods=['POST'], cors='*')
-    def _process_sale(self, **kw):
-        self.make_info_log('Processing sale...')
+    
 
+    #############################################
+    #   ╔═╗╦╔╗╔╦╔═╗╦ ╦  ╔═╗╦═╗╔═╗╔═╗╔═╗╔═╗╔═╗   #
+    #   ╠╣ ║║║║║╚═╗╠═╣  ╠═╝╠╦╝║ ║║  ║╣ ╚═╗╚═╗   #
+    #   ╚  ╩╝╚╝╩╚═╝╩ ╩  ╩  ╩╚═╚═╝╚═╝╚═╝╚═╝╚═╝   #
+    #############################################
+    @http.route('/eiru_sales/finish', type='json', auth='user', methods=['POST'], cors='*')
+    def _finish(self, **kw):
+        self.make_info_log('Finishing...')
+
+        # Parameters
         date_now = get_date()
+        mode = kw.get('mode', 'sale')
         journal_id = kw.get('journalId', None)
         customer_id = kw.get('customerId', None)
         cart_items = kw.get('items', [])
         payment_term_id = kw.get('paymentTermId', None)
         payment = float(kw.get('payment'))
+        payment_method = kw.get('paymentMethod', 'Efectivo')
         bank_payment_data = kw.get('bankPaymentData', {})
-
-        # Get currency
-        currency_id = get_currency(journal_id)
-        self.make_info_log('[OK] Getting journal')
-
-        # Create sale order
-        sale_order = create_sale_from_cart(customer_id, cart_items, date_now, currency_id, payment_term_id)
-        self.make_info_log('[OK] Creating sale order')
-
-        # Check if budget
-        if kw.get('mode', 'sale') != 'sale':
-            return {
-                'process': True
-            }
-
-        # Confirm sale
-        confirm_sale_order(sale_order.id)
-        self.make_info_log('[OK] Confirm sale order')
-
-        # Create invoice
-        invoice = create_invoice(sale_order.id, currency_id, date_now)
-        self.make_info_log('[OK] Creating invoice')
-
-        # Create invoice move lines
-        invoice_move_lines = create_invoice_move_lines(invoice.id, payment, date_now)
-        self.make_info_log('[OK] Creating invoice move lines')
-
-        # Create account move
-        account_move = create_account_move(invoice.id, invoice_move_lines)
-        self.make_info_log('[OK] Creating account move')
-
-        # Number invoice
-        number_invoice(invoice.id)
-        self.make_info_log('[OK] Number invoice')
-
-        # Create account voucher
-        account_voucher = create_account_voucher(account_move.id, journal_id, currency_id, payment)
-        self.make_info_log('[OK] Creating account voucher')
-
-        # Close invoice
-        close_invoice(invoice.id)
-        self.make_info_log('[OK] Closing invoice')
-
-        # Create bank statement
-        create_bank_statement(account_voucher.id, date_now)
-        self.make_info_log('[OK] Creating account bank statement')
         
-        # Create bank payment statement
-        if kw.get('paymentMethod', 'Efectivo') == 'Banco':
-            create_bank_payment_statement(bank_payment_data, invoice.id, account_voucher.id)
-            self.make_info_log('[OK] Creating bank payment statement')
+        '''
+        ╔═╗╦╔╗╔╦╔═╗╦ ╦  ╔╗ ╦ ╦╔╦╗╔═╗╔═╗╔╦╗  ╔═╗╔═╗╔═╗  ╔═╗╦═╗╔═╗╔═╗╔═╗╔╦╗╦ ╦╦═╗╔═╗
+        ╠╣ ║║║║║╚═╗╠═╣  ╠╩╗║ ║ ║║║ ╦║╣  ║   ╠═╝║ ║╚═╗  ╠═╝╠╦╝║ ║║  ║╣  ║║║ ║╠╦╝║╣ 
+        ╚  ╩╝╚╝╩╚═╝╩ ╩  ╚═╝╚═╝═╩╝╚═╝╚═╝ ╩   ╩  ╚═╝╚═╝  ╩  ╩╚═╚═╝╚═╝╚═╝═╩╝╚═╝╩╚═╚═╝
+        '''
+        def finish_budget_pos(journal_id, customer_id, cart_items, date_now, currency_id, payment_term_id):
+            # Get currency
+            currency_id = get_currency(journal_id)
+            self.make_info_log('[OK] Getting journal')
+
+            # Create sale order
+            sale_order = create_sale_from_cart(customer_id, cart_items, date_now, currency_id, payment_term_id)
+            self.make_info_log('[OK] Creating sale order')
+
+            return sale_order.id
+
+        '''
+        ╔═╗╦╔╗╔╦╔═╗╦ ╦  ╔═╗╔═╗╦  ╔═╗  ╔═╗╔═╗╔═╗  ╔═╗╦═╗╔═╗╔═╗╔═╗╔╦╗╦ ╦╦═╗╔═╗
+        ╠╣ ║║║║║╚═╗╠═╣  ╚═╗╠═╣║  ║╣   ╠═╝║ ║╚═╗  ╠═╝╠╦╝║ ║║  ║╣  ║║║ ║╠╦╝║╣ 
+        ╚  ╩╝╚╝╩╚═╝╩ ╩  ╚═╝╩ ╩╩═╝╚═╝  ╩  ╚═╝╚═╝  ╩  ╩╚═╚═╝╚═╝╚═╝═╩╝╚═╝╩╚═╚═╝
+        '''
+        def finish_sale_pos(journal_id, customer_id, cart_items, date_now, payment_term_id, payment, payment_method, bank_payment_data):
+            # Create budget
+            sale_order_id = finish_budget_pos(journal_id, customer_id, cart_items, date_now, currency_id, payment_term_id)
+
+            # Confirm sale
+            confirm_sale_order(sale_order_id)
+            self.make_info_log('[OK] Confirm sale order')
+
+            # Create invoice
+            invoice = create_invoice(sale_order_id, currency_id, date_now)
+            self.make_info_log('[OK] Creating invoice')
+
+            # Create invoice move lines
+            invoice_move_lines = create_invoice_move_lines(invoice.id, payment, date_now)
+            self.make_info_log('[OK] Creating invoice move lines')
+
+            # Create account move
+            account_move = create_account_move(invoice.id, invoice_move_lines)
+            self.make_info_log('[OK] Creating account move')
+
+            # Number invoice
+            number_invoice(invoice.id)
+            self.make_info_log('[OK] Number invoice')
+
+            # Create account voucher
+            account_voucher = create_account_voucher(account_move.id, journal_id, currency_id, payment)
+            self.make_info_log('[OK] Creating account voucher')
+
+            # Close invoice
+            close_invoice(invoice.id)
+            self.make_info_log('[OK] Closing invoice')
+
+            # Create bank statement
+            create_bank_statement(account_voucher.id, date_now)
+            self.make_info_log('[OK] Creating account bank statement')
+            
+            # Create bank payment statement
+            if payment_method == 'Banco':
+                create_bank_payment_statement(bank_payment_data, invoice.id, account_voucher.id)
+                self.make_info_log('[OK] Creating bank payment statement')
+
+            return True
+
+        '''
+        ╔═╗╦═╗╔═╗╔═╗╔═╗╔═╗╔═╗  ╔═╗╦╔╗╔╦╔═╗╦ ╦  ╔╦╗╔═╗╔═╗╦╔═╗╦╔═╗╔╗╔
+        ╠═╝╠╦╝║ ║║  ║╣ ╚═╗╚═╗  ╠╣ ║║║║║╚═╗╠═╣   ║║║╣ ║  ║╚═╗║║ ║║║║
+        ╩  ╩╚═╚═╝╚═╝╚═╝╚═╝╚═╝  ╚  ╩╝╚╝╩╚═╝╩ ╩  ═╩╝╚═╝╚═╝╩╚═╝╩╚═╝╝╚╝
+        '''
+        if mode == 'budget':
+            finish_budget_pos(journal_id, customer_id, cart_items, date_now, currency_id, payment_term_id)
+
+        if mode == 'sale':
+            finish_sale_pos(journal_id, customer_id, cart_items, date_now, payment_term_id, payment, payment_method, bank_payment_data)
+
+        if mode == 'product_picking':
+            pass
+
+        if mode == 'payment':
+            pass
+        
+        if mode == 'product_delivery':
+            pass
 
         return {
             'process': True,
-            'name': sale_order.display_name,
             'date': get_datetime()
         }

+ 4 - 4
src/App.vue

@@ -134,15 +134,15 @@
                 }
             },
             ...mapActions([
-                'initSale',
+                'initProcess',
                 'checkCart',
                 'checkCustomer',
                 'toggleSettingsVisibility',
                 'changeSetting',
                 'changeInitialPayment',
                 'selectStore',
-                'createSale',
-                'resetSale'
+                'endProcess',
+                'resetProcess'
             ])
         },
         watch: {
@@ -162,7 +162,7 @@
             document.removeEventListener('keyup', this.handleKeyboard)
         },
         mounted() {
-            this.initSale(this.$root.mode)
+            this.initProcess(this.$root.mode)
         }
     }
 </script>

+ 15 - 6
src/store/actions.js

@@ -5,7 +5,7 @@ const actions = {
         openerp.web.notification.do_warn('Atención', message)
         return false
     },
-    initSale({ getters, commit, dispatch }, payload) {
+    initProcess({ getters, commit, dispatch }, payload) {
         commit('setMode', payload || getters.mode)
         commit('setResult', '')
         
@@ -116,7 +116,8 @@ const actions = {
             console.error(error)
         })
     },
-    createSale({ getters, commit, dispatch }) {
+    endProcess({ getters, commit, dispatch }) {
+        // Check variables
         if (getters.paymentType === 'cash' && getters.initialPayment < getters.amountToPay) {
             return dispatch('notify', 'El monto recibido no puede ser menor al monto a pagar')
         } 
@@ -127,6 +128,7 @@ const actions = {
 
         commit('setLoading', true)
 
+        // Collect data
         const data = {
             mode: getters.mode,
             items: getters.cartItems.map(item => {
@@ -148,7 +150,8 @@ const actions = {
             }
         }
 
-        axios.post('/eiru_sales/process_sale', {
+        // Send data to server endpoint
+        axios.post('/eiru_sales/finish', {
             jsonrpc: '2.0',
             method: 'call',
             params: {
@@ -158,11 +161,17 @@ const actions = {
             dispatch('notify', 'La transacción no terminó correctamente')
         })
 
-        dispatch('printTicket', data).then(() => {
+        // Print document
+        dispatch('printDocument').then(() => {
             commit('setLoading', false)
             commit('setCompleted', true)
         })
     },
+    printDocument({ getters }) {
+        if (getters.mode === 'sale') {
+            return dispatch('printTicket')
+        }
+    },
     printTicket({ getters }) {
         const data = {
             company: getters.companyName,
@@ -231,7 +240,7 @@ const actions = {
     resetSettings() {
         // Ignore this
     },
-    resetSale({rootState, dispatch}) {
+    resetProcess({rootState, dispatch}) {
         for (let key in rootState) {
             if (!(rootState[key] instanceof Object)) {
                 continue
@@ -242,7 +251,7 @@ const actions = {
             dispatch(`reset${key[0].toUpperCase()}${key.slice(1)}`)
         }
 
-        dispatch('initSale')
+        dispatch('initProcess')
     }
 }
 

+ 3 - 3
templates.xml

@@ -23,19 +23,19 @@
         <record id="eiru_pos.pos_rel_1_action" model="ir.actions.client">
             <field name="name">Eiru Ventas 1</field>
             <field name="tag">eiru_pos.action_launch</field>
-            <field name="params">{'mode': 'rel_1'}</field>
+            <field name="params">{'mode': 'product_picking'}</field>
         </record>
 
         <record id="eiru_pos.pos_rel_2_action" model="ir.actions.client">
             <field name="name">Eiru Ventas 2</field>
             <field name="tag">eiru_pos.action_launch</field>
-            <field name="params">{'mode': 'rel_2'}</field>
+            <field name="params">{'mode': 'payment'}</field>
         </record>
 
         <record id="eiru_pos.pos_rel_3_action" model="ir.actions.client">
             <field name="name">Eiru Ventas 3</field>
             <field name="tag">eiru_pos.action_launch</field>
-            <field name="params">{'mode': 'rel_3'}</field>
+            <field name="params">{'mode': 'product_delivery'}</field>
         </record>
 
         <!-- <menuitem id="eiru_pos.new_sale" name="Nueva venta" parent="eiru_dashboard.eiru_dashboard_main" action="eiru_pos.pos_action" sequence="2" /> -->