Quellcode durchsuchen

[ADD] local store

robert vor 6 Jahren
Ursprung
Commit
280c64cb6b

+ 123 - 42
controllers/main.py

@@ -2,25 +2,6 @@
 from openerp import http
 from openerp.http import request
 
-from res_currency import check_base_currency
-from res_config import get_pos_config, save_pos_config
-from server_datetime import get_datetime, get_date
-from res_users import get_current_user
-from account_journal import get_journals, get_currencies_from_journals, get_currency
-from res_partner import get_customers, create_customer
-from product_template import get_products, create_product
-from account_payment_term import get_payment_terms
-from res_bank import get_banks
-from res_bank_payment_type import get_bank_payment_types
-from res_bank_cheque_type import get_cheque_types
-from sale_order import create_sale_from_cart, confirm_sale_order
-from account_invoice import create_invoice, create_invoice_move_lines, number_invoice, close_invoice
-from account_move import create_account_move
-from account_voucher import create_account_voucher
-from account_bank_statement import create_bank_statement
-from res_bank_payment import create_bank_payment_statement
-from res_store import get_stores
-
 from http_response import make_gzip_response
 import logging
 
@@ -45,24 +26,61 @@ class PosSales(http.Controller):
     @http.route('/eiru_sales/init', auth='user', methods=['GET'], cors='*')
     def _init_sale(self, **kw):
         self.make_info_log('Sending JSON response')
-        
+
+        # Imports
+        from server_datetime import get_datetime
+        from res_currency import check_base_currency
+        from res_config import get_pos_config
+        from res_users import get_current_user
+        from account_journal import get_journals, get_currencies_from_journals
+        from res_partner import get_customers
+        from product_template import get_products
+        from account_payment_term import get_payment_terms
+        from res_bank import get_banks
+        from res_bank_payment_type import get_bank_payment_types
+        from res_bank_cheque_type import get_cheque_types
+        from res_store import get_stores
+
+        # Logic 
         check_base_currency()
         config = get_pos_config()
-        
-        data = {
-            'settings': config,
-            'date': get_datetime(),
-            'user': get_current_user(),
-            'currencies': get_currencies_from_journals(),
-            'journals': get_journals(),
-            'customers': get_customers(image_type=config.get('imageType')),
-            'products': get_products(image_type=config.get('imageType')),
-            'paymentTerms': get_payment_terms(),
-            'banks': get_banks(),
-            'bankPaymentTypes': get_bank_payment_types(),
-            'chequeTypes': get_cheque_types(),
-            'stores': get_stores()
-        }
+        mode = kw.get('mode', 'unknown')
+        data = {}
+
+        # Take all data
+        if mode == 'sale':
+            data = {
+                'settings': config,
+                'date': get_datetime(),
+                'user': get_current_user(),
+                'currencies': get_currencies_from_journals(),
+                'journals': get_journals(),
+                'customers': get_customers(image_type=config.get('imageType')),
+                'products': get_products(image_type=config.get('imageType')),
+                'paymentTerms': get_payment_terms(),
+                'banks': get_banks(),
+                'bankPaymentTypes': get_bank_payment_types(),
+                'chequeTypes': get_cheque_types(),
+                'stores': get_stores()    
+            }
+
+        # Take data for picking
+        if mode == 'product_picking':
+            data = {
+                'settings': config,
+                'date': get_datetime(),
+                'user': get_current_user(),
+                'customers': get_customers(image_type=config.get('imageType')),
+                'products': get_products(image_type=config.get('imageType')),
+            }
+
+        # Take data for payment
+        if mode == 'payment':
+            data = {}
+
+        # Take data for delivery
+        if mode == 'product_delivery':
+            data = {}
     
         return make_gzip_response(data)
 
@@ -76,6 +94,10 @@ class PosSales(http.Controller):
     def _get_images_only(self, **kw):
         image_type = str(get_pos_config().get('imageType'))
 
+        # Imports
+        from res_partner import get_customers
+        from product_template import get_products
+
         return make_gzip_response({
             'customers': get_customers(image_type=image_type),
             'products': get_products(image_type=image_type)
@@ -89,6 +111,8 @@ class PosSales(http.Controller):
     #################################################################################################
     @http.route('/eiru_sales/create_customer', type='json', auth='user', methods=['POST'], cors='*')
     def _create_customer(self, **kw):
+        from res_partner import create_customer
+
         self.make_info_log('Creating customer')
         return create_customer(kw)
     
@@ -100,6 +124,8 @@ class PosSales(http.Controller):
     #############################################
     @http.route('/eiru_sales/save_settings', type='json', auth='user', methods=['POST'], cors='*')
     def _save_config(self, **kw):
+        from res_config import save_pos_config
+
         self.make_info_log('save settings')
         return save_pos_config(kw)
     
@@ -111,6 +137,8 @@ class PosSales(http.Controller):
     #############################################################################################
     @http.route('/eiru_sales/create_product', type='json', auth='user', methods=['POST'], cors='*')
     def _create_product(self, **kw):
+        from product_template import create_product
+
         return create_product(kw)
     
 
@@ -123,6 +151,9 @@ class PosSales(http.Controller):
     def _finish(self, **kw):
         self.make_info_log('Finishing...')
 
+        # Imports
+        from server_datetime import get_date, get_datetime
+
         # Parameters
         date_now = get_date()
         mode = kw.get('mode', 'sale')
@@ -139,7 +170,11 @@ class PosSales(http.Controller):
         ╠╣ ║║║║║╚═╗╠═╣  ╠╩╗║ ║ ║║║ ╦║╣  ║   ╠═╝║ ║╚═╗  ╠═╝╠╦╝║ ║║  ║╣  ║║║ ║╠╦╝║╣ 
         ╚  ╩╝╚╝╩╚═╝╩ ╩  ╚═╝╚═╝═╩╝╚═╝╚═╝ ╩   ╩  ╚═╝╚═╝  ╩  ╩╚═╚═╝╚═╝╚═╝═╩╝╚═╝╩╚═╚═╝
         '''
-        def finish_budget_pos(journal_id, customer_id, cart_items, date_now, currency_id, payment_term_id):
+        def finish_budget_pos(journal_id, customer_id, cart_items, date_now, payment_term_id):
+            # Imports
+            from account_journal import get_currency
+            from sale_order import create_sale_from_cart
+
             # Get currency
             currency_id = get_currency(journal_id)
             self.make_info_log('[OK] Getting journal')
@@ -148,7 +183,7 @@ class PosSales(http.Controller):
             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
+            return (sale_order.id, currency_id)
 
         '''
         ╔═╗╦╔╗╔╦╔═╗╦ ╦  ╔═╗╔═╗╦  ╔═╗  ╔═╗╔═╗╔═╗  ╔═╗╦═╗╔═╗╔═╗╔═╗╔╦╗╦ ╦╦═╗╔═╗
@@ -157,7 +192,20 @@ class PosSales(http.Controller):
         '''
         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)
+            sale_order_id, currency_id = finish_budget_pos(journal_id, customer_id, cart_items, date_now, payment_term_id)
+
+            # Imports
+            from sale_order import confirm_sale_order
+            from account_invoice import (
+                create_invoice, 
+                create_invoice_move_lines,
+                number_invoice,
+                close_invoice
+            )
+            from account_move import create_account_move
+            from account_voucher import create_account_voucher
+            from account_bank_statement import create_bank_statement
+            from res_bank_payment import create_bank_payment_statement
 
             # Confirm sale
             confirm_sale_order(sale_order_id)
@@ -195,8 +243,41 @@ class PosSales(http.Controller):
             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')
+        
+        '''
+        ╔═╗╦╔╗╔╦╔═╗╦ ╦  ╔═╗╦═╗╔═╗╔╦╗╦ ╦╔═╗╔╦╗  ╔═╗╦╔═╗╦╔═╦╔╗╔╔═╗
+        ╠╣ ║║║║║╚═╗╠═╣  ╠═╝╠╦╝║ ║ ║║║ ║║   ║   ╠═╝║║  ╠╩╗║║║║║ ╦
+        ╚  ╩╝╚╝╩╚═╝╩ ╩  ╩  ╩╚═╚═╝═╩╝╚═╝╚═╝ ╩   ╩  ╩╚═╝╩ ╩╩╝╚╝╚═╝
+        '''
+        def finish_process_picking(journal_id, customer_id, cart_items, date_now, payment_term_id):
+            sale_order_id, _ = finish_budget_pos(journal_id, customer_id, cart_items, date_now, payment_term_id)
+            
+            # Imports
+            from sale_order import confirm_sale_order, force_assign_picking
+
+            # Confirm sale
+            confirm_sale_order(sale_order_id)
+            self.make_info_log('[OK] Confirm sale order')
+
+            # Force assign picking
+            force_assign_picking(sale_order_id)
+            self.make_info_log('[OK] Pick assign')
+
+        '''
+        ╔═╗╦╔╗╔╦╔═╗╦ ╦  ╔═╗╔═╗╦ ╦╔╦╗╔═╗╔╗╔╔╦╗
+        ╠╣ ║║║║║╚═╗╠═╣  ╠═╝╠═╣╚╦╝║║║║╣ ║║║ ║ 
+        ╚  ╩╝╚╝╩╚═╝╩ ╩  ╩  ╩ ╩ ╩ ╩ ╩╚═╝╝╚╝ ╩ 
+        '''
+        def finish_payment():
+            pass
 
-            return True
+        '''
+        ╔═╗╦╔╗╔╦╔═╗╦ ╦  ╔═╗╦═╗╔═╗╔╦╗╦ ╦╔═╗╔╦╗  ╔╦╗╔═╗╦  ╦╦  ╦╔═╗╦═╗╦ ╦
+        ╠╣ ║║║║║╚═╗╠═╣  ╠═╝╠╦╝║ ║ ║║║ ║║   ║    ║║║╣ ║  ║╚╗╔╝║╣ ╠╦╝╚╦╝
+        ╚  ╩╝╚╝╩╚═╝╩ ╩  ╩  ╩╚═╚═╝═╩╝╚═╝╚═╝ ╩   ═╩╝╚═╝╩═╝╩ ╚╝ ╚═╝╩╚═ ╩ 
+        '''
+        def finish_product_delivery():
+            pass
 
         '''
         ╔═╗╦═╗╔═╗╔═╗╔═╗╔═╗╔═╗  ╔═╗╦╔╗╔╦╔═╗╦ ╦  ╔╦╗╔═╗╔═╗╦╔═╗╦╔═╗╔╗╔
@@ -210,13 +291,13 @@ class PosSales(http.Controller):
             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
+            finish_process_picking(journal_id, customer_id, cart_items, date_now, payment_term_id)
 
         if mode == 'payment':
-            pass
+            finish_payment()
         
         if mode == 'product_delivery':
-            pass
+            finish_product_delivery()
 
         return {
             'process': True,

+ 46 - 1
controllers/sale_order.py

@@ -3,6 +3,35 @@ from openerp.http import request
 
 _MODEL = 'sale.order'
 
+'''
+    Get sale orders
+'''
+def get_sale_orders():
+    domain = [
+        ('state', '=', 'manual'), 
+        ('from_pos', '=', True)
+    ]
+
+    return [
+        {
+            'id': sale_order.id,
+            'name': sale_order.display_name,
+            'createDate': sale_order.create_date,
+            'partnerId': sale_order.partner_id.id,
+            'userId': sale_order.user_id.id,
+            'warehouseId': sale_order.warehouse_id.id,
+            'amountTotal': sale_order.amount_total,
+            'lines': [
+                {
+                    'productId': line.product_id.id,
+                    'productTmplId': line.product_tmpl_id.id,
+                    'priceUnit': line.price_unit,
+                    'quantity': line.product_uom_qty,
+                } for line in sale_order.order_line
+            ]
+        } for sale_order in request.env[_MODEL].search(domain)
+    ]
+
 '''
     Create sale from pos cart
 '''
@@ -61,6 +90,7 @@ def create_sale_from_cart(partner_id, cart_items, date_confirm, currency_id, pay
         'pricelist_id': pricelist.id,
         'payment_term': payment_term_id,
         'state': 'draft',
+        'from_pos': True
     }
 
     return request.env[_MODEL].create(values)
@@ -74,4 +104,19 @@ def confirm_sale_order(sale_order_id):
     })
 
     return sale_order.action_button_confirm()
-    
+
+'''
+'''
+def force_assign_picking(sale_order_id):
+    sale_order = request.env['sale.order'].browse(sale_order_id)
+
+    for picking in sale_order.picking_ids:
+        picking.force_assign()
+
+'''
+'''
+def done_picking(sale_order_id):
+    sale_order = request.env['sale.order'].browse(sale_order_id)
+
+    for picking in sale_order.picking_ids:
+        picking.action_done()

+ 1 - 0
models/__init__.py

@@ -1,5 +1,6 @@
 # -*- coding: utf-8 -*-
 import res_config
 import account_invoice_line
+import sale_order
 import sale_order_line
 import account_bank_statement

+ 1 - 1
models/account_bank_statement.py

@@ -4,5 +4,5 @@ from openerp import models, fields
 class AccountBankStatement(models.Model):
     _inherit = 'account.bank.statement'
 
-    from_pos = fields.Boolean(string='Statement created from POS')
+    from_pos = fields.Boolean(string='Created from POS', default=False)
     

+ 7 - 0
models/sale_order.py

@@ -0,0 +1,7 @@
+# -*- coding: utf-8 -*-
+from openerp import models, fields
+
+class SaleOrder(models.Model):
+    _inherit = 'sale.order'
+
+    from_pos = fields.Boolean(string='Created from POS', default=False)

+ 2 - 2
src/App.vue

@@ -51,7 +51,7 @@
                         v-else
                         class='wizard-footer-right finish-button'
                         :style='props.fillButtonStyle'
-                        @click.native='createSale'
+                        @click.native='endProcess'
                     ) {{ props.isLastStep ? 'Finalizar' : 'Continuar' }}
         settings-button(
             v-show='!loading && isManager'
@@ -152,7 +152,7 @@
                 }
                 
                 this.$refs.wizard.changeTab(2, 0, false)
-                this.resetSale()
+                this.resetProcess()
             }
         },
         created() {

+ 17 - 9
src/store/actions.js

@@ -12,7 +12,11 @@ const actions = {
         commit('setLoading', true)
         commit('setCompleted', false)
 
-        return axios.get('/eiru_sales/init').then(({data}) => {
+        return axios.get('/eiru_sales/init', {
+            params: {
+                mode: getters.mode
+            }
+        }).then(({data}) => {
             commit('setLoading', false)
             commit('toggleFooterButtonsVisibility')
 
@@ -117,20 +121,24 @@ const actions = {
         })
     },
     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')
-        } 
+        const mode = getters.mode
 
-        if (getters.paymentType !== 'cash' && getters.initialPayment >= getters.amountToPay) {
-            return dispatch('notify', 'El monto recibido no puede ser igual o mayor al monto a pagar')
+        // Check variables
+        if (mode == 'sale') {
+            if (getters.paymentType === 'cash' && getters.initialPayment < getters.amountToPay) {
+                return dispatch('notify', 'El monto recibido no puede ser menor al monto a pagar')
+            } 
+    
+            if (getters.paymentType !== 'cash' && getters.initialPayment >= getters.amountToPay) {
+                return dispatch('notify', 'El monto recibido no puede ser igual o mayor al monto a pagar')
+            }
         }
 
         commit('setLoading', true)
 
         // Collect data
         const data = {
-            mode: getters.mode,
+            mode,
             items: getters.cartItems.map(item => {
                 return {
                     id: item.id,
@@ -167,7 +175,7 @@ const actions = {
             commit('setCompleted', true)
         })
     },
-    printDocument({ getters }) {
+    printDocument({ getters, dispatch }) {
         if (getters.mode === 'sale') {
             return dispatch('printTicket')
         }

+ 5 - 0
src/store/index.js

@@ -43,4 +43,9 @@ const store = new Vuex.Store({
     strict: true
 })
 
+store.subscribe((mutation, state) => {
+    console.log(mutation)
+    console.log(state)
+})
+
 export default store