Browse Source

[ADD] user selector

robert 6 năm trước cách đây
mục cha
commit
b8a0a57a88

+ 2 - 1
controllers/account_invoice.py

@@ -7,7 +7,7 @@ from dateutil.relativedelta import relativedelta as rd
 _MODEL = 'account.invoice'
 
 
-def create_invoice(sale_order_id, currency_id, date_today, picking_done=True):
+def create_invoice(sale_order_id, currency_id, user_id, date_today, picking_done=True):
     sale_order = request.env['sale.order'].browse(sale_order_id)
     invoice_id = sale_order.action_invoice_create()
     invoice = request.env[_MODEL].browse(invoice_id)
@@ -23,6 +23,7 @@ def create_invoice(sale_order_id, currency_id, date_today, picking_done=True):
         'currency_id': currency_id,
         'date_invoice': date_today,
         'date_due': date_due.strftime(DEFAULT_SERVER_DATE_FORMAT),
+        'user_id': user_id,
         'state': 'open'
     })
 

+ 12 - 11
controllers/main.py

@@ -84,7 +84,7 @@ class PosSales(http.Controller):
             data = {
                 'settings': config,
                 'date': get_datetime(),
-                'user': get_current_user(),
+                'users': get_users(),
                 'currencies': currencies,
                 'journals': get_journals(),
                 'customers': get_customers(image_type=image_type),
@@ -192,7 +192,7 @@ class PosSales(http.Controller):
         ╠╣ ║║║║║╚═╗╠═╣  ╠╩╗║ ║ ║║║ ╦║╣  ║   ╠═╝║ ║╚═╗  ╠═╝╠╦╝║ ║║  ║╣  ║║║ ║╠╦╝║╣ 
         ╚  ╩╝╚╝╩╚═╝╩ ╩  ╚═╝╚═╝═╩╝╚═╝╚═╝ ╩   ╩  ╚═╝╚═╝  ╩  ╩╚═╚═╝╚═╝╚═╝═╩╝╚═╝╩╚═╚═╝
         '''
-        def finish_budget_pos(journal_id, customer_id, cart_items, date_now, payment_term_id, warehouse_id):
+        def finish_budget_pos(journal_id, customer_id, cart_items, date_now, payment_term_id, warehouse_id, user_id):
             # Imports
             from account_journal import get_currency
             from sale_order import create_sale_from_cart
@@ -206,7 +206,7 @@ class PosSales(http.Controller):
             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, warehouse_id)
+            sale_order = create_sale_from_cart(customer_id, cart_items, date_now, currency_id, payment_term_id, warehouse_id, user_id)
             self.make_info_log('[OK] Creating sale order')
 
             return (sale_order.id, currency_id)
@@ -216,9 +216,9 @@ 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, warehouse_id):
+        def finish_sale_pos(journal_id, customer_id, cart_items, date_now, payment_term_id, payment, payment_method, bank_payment_data, warehouse_id, user_id):
             # Create budget
-            sale_order_id, currency_id = finish_budget_pos(journal_id, customer_id, cart_items, date_now, payment_term_id, warehouse_id)
+            sale_order_id, currency_id = finish_budget_pos(journal_id, customer_id, cart_items, date_now, payment_term_id, warehouse_id, user_id)
 
             # Imports
             from sale_order import confirm_sale_order
@@ -238,7 +238,7 @@ class PosSales(http.Controller):
             self.make_info_log('[OK] Confirm sale order')
 
             # Create invoice
-            invoice = create_invoice(sale_order_id, currency_id, date_now)
+            invoice = create_invoice(sale_order_id, currency_id, user_id, date_now)
             self.make_info_log('[OK] Creating invoice')
 
             # Create invoice move lines
@@ -294,7 +294,7 @@ class PosSales(http.Controller):
         ╠╣ ║║║║║╚═╗╠═╣  ╠═╝╠═╣╚╦╝║║║║╣ ║║║ ║ 
         ╚  ╩╝╚╝╩╚═╝╩ ╩  ╩  ╩ ╩ ╩ ╩ ╩╚═╝╝╚╝ ╩ 
         '''
-        def finish_payment(sale_order_id, currency_id, date_now, payment_term_id, payment, payment_method, bank_payment_data):
+        def finish_payment(sale_order_id, currency_id, date_now, payment_term_id, user_id, payment, payment_method, bank_payment_data):
             # Imports
             from account_invoice import (
                 create_invoice,
@@ -314,7 +314,7 @@ class PosSales(http.Controller):
             })
 
             # Create invoice
-            invoice = create_invoice(sale_order_id, currency_id, date_now, False)
+            invoice = create_invoice(sale_order_id, currency_id, user_id, date_now, False)
             self.make_info_log('[OK] Creating invoice')
 
             # Create invoice move lines
@@ -372,15 +372,16 @@ class PosSales(http.Controller):
             cart_items = row.get('items', [])
             payment_term_id = row.get('paymentTermId', None)
             warehouse_id = row.get('warehouseId', None)
+            user_id = row.get('userId', None)
             payment = float(row.get('payment', 0.0))
             payment_method = row.get('paymentMethod', 'Efectivo')
             bank_payment_data = row.get('bankPaymentData', {})
 
             if mode == 'budget':
-                finish_budget_pos(journal_id, customer_id, cart_items, date_now, payment_term_id, warehouse_id)
+                finish_budget_pos(journal_id, customer_id, cart_items, date_now, payment_term_id, warehouse_id, user_id)
 
             if mode == 'sale':
-                finish_sale_pos(journal_id, customer_id, cart_items, date_now, payment_term_id, payment, payment_method, bank_payment_data, warehouse_id)
+                finish_sale_pos(journal_id, customer_id, cart_items, date_now, payment_term_id, payment, payment_method, bank_payment_data, warehouse_id, user_id)
 
             if mode == 'product_picking':
                 finish_process_picking(journal_id, customer_id, cart_items, date_now, payment_term_id, warehouse_id)
@@ -389,7 +390,7 @@ class PosSales(http.Controller):
                 sale_order_id = row.get('saleOrderId', None)
                 currency_id = row.get('currencyId', None)
 
-                finish_payment(sale_order_id, currency_id, date_now, payment_term_id, payment, payment_method, bank_payment_data)
+                finish_payment(sale_order_id, currency_id, date_now, payment_term_id, user_id, payment, payment_method, bank_payment_data)
             
             if mode == 'product_delivery':
                 stock_picking_id = row.get('stockPickingId', None)

+ 2 - 1
controllers/sale_order.py

@@ -44,7 +44,7 @@ def get_sale_orders():
     ]
 
 
-def create_sale_from_cart(partner_id, cart_items, date_confirm, currency_id, payment_term_id=None, warehouse_id=None):
+def create_sale_from_cart(partner_id, cart_items, date_confirm, currency_id, payment_term_id=None, warehouse_id=None, user_id=None):
     '''
     '''
     def get_pricelist(currency_id):
@@ -103,6 +103,7 @@ def create_sale_from_cart(partner_id, cart_items, date_confirm, currency_id, pay
         'pricelist_id': pricelist.id,
         'payment_term': payment_term_id,
         'warehouse_id': warehouse_id,
+        'user_id': user_id,
         'state': 'draft',
         'from_pos': True
     }

+ 8 - 12
src/App.vue

@@ -67,15 +67,7 @@
                         @click.native='goBack'
                         :style='props.fillButtonStyle'
                     ) Volver
-                .wizard-footer-center(v-show='showStoreSelector')
-                    .store-selector
-                        span
-                            strong Sucursal
-                        input-select(
-                            :options='stores.map(s => ({ id: s.id, name: s.name }))'
-                            :selected='selectedStore'
-                            @onSelect='selectStore'
-                        )
+                    user-selector(v-if='allowChangeUser')
                 connection-status(
                     v-if='isSynchronizable'
                     @onChangeNet='changeNetStatus'
@@ -125,7 +117,8 @@
         LoadingOverlay,
         SettingsButton,
         InputSelect,
-        ConnectionStatus
+        ConnectionStatus,
+        UserSelector
     } from './components/common'
 
     export default {
@@ -143,7 +136,8 @@
             SettingsButton,
             SettingsModal,
             InputSelect,
-            ConnectionStatus
+            ConnectionStatus,
+            UserSelector
         },
         computed: mapGetters([
             'isSale',
@@ -153,10 +147,12 @@
             'isSynchronizable',
             'footerButtonsVisibility',
             'settingsVisibility',
+            'allowChangeUser',
             'settings',
             'stores',
             'initialPayment',
             'selectedStore',
+            'users',
             'showStoreSelector',
             'isManager',
             'loading',
@@ -202,7 +198,7 @@
                 'changeSetting',
                 'changeInitialPayment',
                 'changeNetStatus',
-                'selectStore',
+                'selectUser',
                 'endProcess',
                 'resetProcess'
             ])

+ 47 - 0
src/components/common/UserSelector.vue

@@ -0,0 +1,47 @@
+<template lang="pug">
+    .user-selector
+        h3 Vendedor
+        select(v-model='selectedUserId')
+            option(v-for='u in users' :key='u.id' :value='u.id') {{ u.name }}
+</template>
+
+<script>
+    import { mapGetters, mapActions } from 'vuex'
+
+    export default {
+        computed: {
+            selectedUserId: {
+                get() {
+                    return this.selectedUser && this.selectedUser.id
+                },
+                set(value) {
+                    this.selectUser(value)
+                }
+            },
+            ...mapGetters([
+                'users',
+                'selectedUser'
+            ])
+        },
+        methods: mapActions([
+            'selectUser'
+        ])
+    }
+</script>
+
+<style lang="sass">
+    .user-selector
+        display: inline-block
+        line-height: 48px
+        h3
+            display: inline-block
+            font-size: 10pt
+            margin: 0
+            padding-right: 10px
+            padding-left: 10px
+            color: #666
+        select
+            width: 135px
+            display: inline-block
+            border-radius: 0
+</style>

+ 3 - 1
src/components/common/index.js

@@ -11,6 +11,7 @@ import SwitchButtonInput from './SwitchButtonInput'
 import InputSelect from './InputSelect'
 import ConnectionStatus from './ConnectionStatus'
 import StoreSelector from './StoreSelector'
+import UserSelector from './UserSelector'
 
 export {
     CardGrid,
@@ -25,5 +26,6 @@ export {
     SwitchButtonInput,
     InputSelect,
     ConnectionStatus,
-    StoreSelector
+    StoreSelector,
+    UserSelector
 }

+ 2 - 1
src/store/actions.js

@@ -163,7 +163,8 @@ const actions = {
                 }),
                 customerId: getters.selectedCustomer.id,
                 currencyId: getters.selectedCurrency.id,
-                warehouseId: getters.selectedWarehouse.id
+                warehouseId: getters.selectedWarehouse.id,
+                userId: getters.selectedUser.id
             }
         }
 

+ 3 - 0
src/store/getters.js

@@ -54,6 +54,9 @@ const getters = {
 
         return values
     },
+    allowChangeUser(state) {
+        return state.settings && state.settings.allowChangeUser
+    },
     result(state) {
         return state.result
     },

+ 12 - 1
src/store/modules/users.js

@@ -1,7 +1,8 @@
 const state = {
     loadingUsers: false,
     users: [],
-    selectedUser: null
+    selectedUser: null,
+    userSelectorIsVisible: false
 }
 
 const getters = {
@@ -14,6 +15,9 @@ const getters = {
     selectedUser(state) {
         return state.selectedUser
     },
+    userSelectorIsVisible(state) {
+        return state.userSelectorIsVisible
+    },
     companyName(state) {
         const currentUser = state.users.find(u => u.currentUser)
         return currentUser && currentUser.company.name
@@ -30,6 +34,7 @@ const mutations = {
     },
     setUsers(state, users) {
         state.users = users
+        state.selectedUser = users.find(u => u.currentUser)
     },
     setSelectedUser(state, userId) {
         if (!userId) {
@@ -37,6 +42,9 @@ const mutations = {
         }
 
         state.selectedUser = state.users.find(u => u.id === userId)
+    },
+    setVisibleUserSelector(state, visible) {
+        state.userSelectorIsVisible = !!visible
     }
 }
 
@@ -53,6 +61,9 @@ const actions = {
         commit('setSelectedUser')
         commit('setLoadingUsers')
     },
+    showUserSelector({ commit }, show) {
+        commit('setVisibleUserSelector', show)
+    },
     resetUser({ commit }) {
         // Ignore this
     }