[FIX] point_of_sale: ACLs & security rules
POS users/managers should not have any access to the account.move/account.move.line, since they are not accountants. Regarding the bank statements, they should only have access to the ones coming from the POS specifically. opw-628000
This commit is contained in:
@@ -9,7 +9,7 @@ import sets
|
|||||||
|
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
from openerp import tools, models
|
from openerp import tools, models, SUPERUSER_ID
|
||||||
from openerp.osv import fields, osv
|
from openerp.osv import fields, osv
|
||||||
from openerp.tools import float_is_zero
|
from openerp.tools import float_is_zero
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
@@ -204,7 +204,7 @@ class pos_config(osv.osv):
|
|||||||
def create(self, cr, uid, values, context=None):
|
def create(self, cr, uid, values, context=None):
|
||||||
ir_sequence = self.pool.get('ir.sequence')
|
ir_sequence = self.pool.get('ir.sequence')
|
||||||
# force sequence_id field to new pos.order sequence
|
# force sequence_id field to new pos.order sequence
|
||||||
values['sequence_id'] = ir_sequence.create(cr, uid, {
|
values['sequence_id'] = ir_sequence.create(cr, SUPERUSER_ID, {
|
||||||
'name': 'POS Order %s' % values['name'],
|
'name': 'POS Order %s' % values['name'],
|
||||||
'padding': 4,
|
'padding': 4,
|
||||||
'prefix': "%s/" % values['name'],
|
'prefix': "%s/" % values['name'],
|
||||||
@@ -214,7 +214,7 @@ class pos_config(osv.osv):
|
|||||||
|
|
||||||
# TODO master: add field sequence_line_id on model
|
# TODO master: add field sequence_line_id on model
|
||||||
# this make sure we always have one available per company
|
# this make sure we always have one available per company
|
||||||
ir_sequence.create(cr, uid, {
|
ir_sequence.create(cr, SUPERUSER_ID, {
|
||||||
'name': 'POS order line %s' % values['name'],
|
'name': 'POS order line %s' % values['name'],
|
||||||
'padding': 4,
|
'padding': 4,
|
||||||
'prefix': "%s/" % values['name'],
|
'prefix': "%s/" % values['name'],
|
||||||
@@ -394,7 +394,7 @@ class pos_session(osv.osv):
|
|||||||
if not pos_config.journal_id:
|
if not pos_config.journal_id:
|
||||||
jid = jobj.default_get(cr, uid, ['journal_id'], context=context)['journal_id']
|
jid = jobj.default_get(cr, uid, ['journal_id'], context=context)['journal_id']
|
||||||
if jid:
|
if jid:
|
||||||
jobj.write(cr, openerp.SUPERUSER_ID, [pos_config.id], {'journal_id': jid}, context=context)
|
jobj.write(cr, SUPERUSER_ID, [pos_config.id], {'journal_id': jid}, context=context)
|
||||||
else:
|
else:
|
||||||
raise UserError(_("Unable to open the session. You have to assign a sale journal to your point of sale."))
|
raise UserError(_("Unable to open the session. You have to assign a sale journal to your point of sale."))
|
||||||
|
|
||||||
@@ -407,24 +407,21 @@ class pos_session(osv.osv):
|
|||||||
if not cashids:
|
if not cashids:
|
||||||
cashids = journal_proxy.search(cr, uid, [('journal_user','=',True)], context=context)
|
cashids = journal_proxy.search(cr, uid, [('journal_user','=',True)], context=context)
|
||||||
|
|
||||||
journal_proxy.write(cr, openerp.SUPERUSER_ID, cashids, {'journal_user': True})
|
journal_proxy.write(cr, SUPERUSER_ID, cashids, {'journal_user': True})
|
||||||
jobj.write(cr, openerp.SUPERUSER_ID, [pos_config.id], {'journal_ids': [(6,0, cashids)]})
|
jobj.write(cr, SUPERUSER_ID, [pos_config.id], {'journal_ids': [(6,0, cashids)]})
|
||||||
|
|
||||||
|
|
||||||
pos_config = jobj.browse(cr, uid, config_id, context=context)
|
pos_config = jobj.browse(cr, uid, config_id, context=context)
|
||||||
bank_statement_ids = []
|
|
||||||
for journal in pos_config.journal_ids:
|
statements = [(0, 0, {
|
||||||
bank_values = {
|
'journal_id': journal.id,
|
||||||
'journal_id' : journal.id,
|
'user_id': uid,
|
||||||
'user_id' : uid,
|
'company_id': pos_config.company_id.id
|
||||||
'company_id' : pos_config.company_id.id
|
}) for journal in pos_config.journal_ids]
|
||||||
}
|
|
||||||
statement_id = self.pool.get('account.bank.statement').create(cr, uid, bank_values, context=context)
|
|
||||||
bank_statement_ids.append(statement_id)
|
|
||||||
|
|
||||||
values.update({
|
values.update({
|
||||||
'name': self.pool['ir.sequence'].next_by_code(cr, uid, 'pos.session'),
|
'name': self.pool['ir.sequence'].next_by_code(cr, uid, 'pos.session'),
|
||||||
'statement_ids' : [(6, 0, bank_statement_ids)],
|
'statement_ids': statements,
|
||||||
'config_id': config_id
|
'config_id': config_id
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -488,7 +485,10 @@ class pos_session(osv.osv):
|
|||||||
|
|
||||||
def wkf_action_close(self, cr, uid, ids, context=None):
|
def wkf_action_close(self, cr, uid, ids, context=None):
|
||||||
# Close CashBox
|
# Close CashBox
|
||||||
|
local_context = dict(context)
|
||||||
for record in self.browse(cr, uid, ids, context=context):
|
for record in self.browse(cr, uid, ids, context=context):
|
||||||
|
company_id = record.config_id.company_id.id
|
||||||
|
local_context.update({'force_company': company_id, 'company_id': company_id})
|
||||||
for st in record.statement_ids:
|
for st in record.statement_ids:
|
||||||
if abs(st.difference) > st.journal_id.amount_authorized_diff:
|
if abs(st.difference) > st.journal_id.amount_authorized_diff:
|
||||||
# The pos manager can close statements with maximums.
|
# The pos manager can close statements with maximums.
|
||||||
@@ -496,9 +496,9 @@ class pos_session(osv.osv):
|
|||||||
raise UserError(_("Your ending balance is too different from the theoretical cash closing (%.2f), the maximum allowed is: %.2f. You can contact your manager to force it.") % (st.difference, st.journal_id.amount_authorized_diff))
|
raise UserError(_("Your ending balance is too different from the theoretical cash closing (%.2f), the maximum allowed is: %.2f. You can contact your manager to force it.") % (st.difference, st.journal_id.amount_authorized_diff))
|
||||||
if (st.journal_id.type not in ['bank', 'cash']):
|
if (st.journal_id.type not in ['bank', 'cash']):
|
||||||
raise UserError(_("The type of the journal for your payment method should be bank or cash "))
|
raise UserError(_("The type of the journal for your payment method should be bank or cash "))
|
||||||
st.button_confirm_bank()
|
self.pool['account.bank.statement'].button_confirm_bank(cr, SUPERUSER_ID, [st.id], context=local_context)
|
||||||
self._confirm_orders(cr, uid, ids, context=context)
|
self._confirm_orders(cr, uid, ids, context=local_context)
|
||||||
self.write(cr, uid, ids, {'state' : 'closed'}, context=context)
|
self.write(cr, uid, ids, {'state' : 'closed'}, context=local_context)
|
||||||
|
|
||||||
obj = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'point_of_sale', 'menu_point_root')[1]
|
obj = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'point_of_sale', 'menu_point_root')[1]
|
||||||
return {
|
return {
|
||||||
@@ -640,7 +640,7 @@ class pos_order(osv.osv):
|
|||||||
if to_invoice:
|
if to_invoice:
|
||||||
self.action_invoice(cr, uid, [order_id], context)
|
self.action_invoice(cr, uid, [order_id], context)
|
||||||
order_obj = self.browse(cr, uid, order_id, context)
|
order_obj = self.browse(cr, uid, order_id, context)
|
||||||
self.pool['account.invoice'].signal_workflow(cr, uid, [order_obj.invoice_id.id], 'invoice_open')
|
self.pool['account.invoice'].signal_workflow(cr, SUPERUSER_ID, [order_obj.invoice_id.id], 'invoice_open')
|
||||||
|
|
||||||
return order_ids
|
return order_ids
|
||||||
|
|
||||||
@@ -962,6 +962,9 @@ class pos_order(osv.osv):
|
|||||||
inv_ids = []
|
inv_ids = []
|
||||||
|
|
||||||
for order in self.pool.get('pos.order').browse(cr, uid, ids, context=context):
|
for order in self.pool.get('pos.order').browse(cr, uid, ids, context=context):
|
||||||
|
# Force company for all SUPERUSER_ID action
|
||||||
|
company_id = order.company_id.id
|
||||||
|
local_context = dict(context or {}, force_company=company_id, company_id=company_id)
|
||||||
if order.invoice_id:
|
if order.invoice_id:
|
||||||
inv_ids.append(order.invoice_id.id)
|
inv_ids.append(order.invoice_id.id)
|
||||||
continue
|
continue
|
||||||
@@ -980,6 +983,7 @@ class pos_order(osv.osv):
|
|||||||
'partner_id': order.partner_id.id,
|
'partner_id': order.partner_id.id,
|
||||||
'comment': order.note or '',
|
'comment': order.note or '',
|
||||||
'currency_id': order.pricelist_id.currency_id.id, # considering partner's sale pricelist's currency
|
'currency_id': order.pricelist_id.currency_id.id, # considering partner's sale pricelist's currency
|
||||||
|
'company_id': company_id,
|
||||||
}
|
}
|
||||||
invoice = inv_ref.new(cr, uid, inv)
|
invoice = inv_ref.new(cr, uid, inv)
|
||||||
invoice._onchange_partner_id()
|
invoice._onchange_partner_id()
|
||||||
@@ -987,30 +991,30 @@ class pos_order(osv.osv):
|
|||||||
inv = invoice._convert_to_write(invoice._cache)
|
inv = invoice._convert_to_write(invoice._cache)
|
||||||
if not inv.get('account_id', None):
|
if not inv.get('account_id', None):
|
||||||
inv['account_id'] = acc
|
inv['account_id'] = acc
|
||||||
inv_id = inv_ref.create(cr, uid, inv, context=context)
|
inv_id = inv_ref.create(cr, SUPERUSER_ID, inv, context=local_context)
|
||||||
|
|
||||||
self.write(cr, uid, [order.id], {'invoice_id': inv_id, 'state': 'invoiced'}, context=context)
|
self.write(cr, uid, [order.id], {'invoice_id': inv_id, 'state': 'invoiced'}, context=local_context)
|
||||||
inv_ids.append(inv_id)
|
inv_ids.append(inv_id)
|
||||||
for line in order.lines:
|
for line in order.lines:
|
||||||
inv_name = product_obj.name_get(cr, uid, [line.product_id.id], context=context)[0][1]
|
inv_name = product_obj.name_get(cr, uid, [line.product_id.id], context=local_context)[0][1]
|
||||||
inv_line = {
|
inv_line = {
|
||||||
'invoice_id': inv_id,
|
'invoice_id': inv_id,
|
||||||
'product_id': line.product_id.id,
|
'product_id': line.product_id.id,
|
||||||
'quantity': line.qty,
|
'quantity': line.qty,
|
||||||
'account_analytic_id': self._prepare_analytic_account(cr, uid, line, context=context),
|
'account_analytic_id': self._prepare_analytic_account(cr, uid, line, context=local_context),
|
||||||
'name': inv_name,
|
'name': inv_name,
|
||||||
}
|
}
|
||||||
|
|
||||||
#Oldlin trick
|
#Oldlin trick
|
||||||
|
invoice_line = inv_line_ref.new(cr, SUPERUSER_ID, inv_line, context=local_context)
|
||||||
invoice_line = inv_line_ref.new(cr, uid, inv_line, context=context)
|
|
||||||
invoice_line._onchange_product_id()
|
invoice_line._onchange_product_id()
|
||||||
|
invoice_line.invoice_line_tax_ids = [tax.id for tax in invoice_line.invoice_line_tax_ids if tax.company_id.id == company_id]
|
||||||
# We convert a new id object back to a dictionary to write to bridge between old and new api
|
# We convert a new id object back to a dictionary to write to bridge between old and new api
|
||||||
inv_line = invoice_line._convert_to_write(invoice_line._cache)
|
inv_line = invoice_line._convert_to_write(invoice_line._cache)
|
||||||
inv_line_ref.create(cr, uid, inv_line, context=context)
|
inv_line_ref.create(cr, SUPERUSER_ID, inv_line, context=local_context)
|
||||||
inv_ref.compute_taxes(cr, uid, [inv_id], context=context)
|
inv_ref.compute_taxes(cr, SUPERUSER_ID, [inv_id], context=local_context)
|
||||||
self.signal_workflow(cr, uid, [order.id], 'invoice')
|
self.signal_workflow(cr, uid, [order.id], 'invoice')
|
||||||
inv_ref.signal_workflow(cr, uid, [inv_id], 'validate')
|
inv_ref.signal_workflow(cr, SUPERUSER_ID, [inv_id], 'validate')
|
||||||
|
|
||||||
if not inv_ids: return {}
|
if not inv_ids: return {}
|
||||||
|
|
||||||
@@ -1037,11 +1041,10 @@ class pos_order(osv.osv):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def _create_account_move(self, cr, uid, dt, ref, journal_id, company_id, context=None):
|
def _create_account_move(self, cr, uid, dt, ref, journal_id, company_id, context=None):
|
||||||
local_context = dict(context or {}, company_id=company_id)
|
|
||||||
start_at_datetime = datetime.strptime(dt, tools.DEFAULT_SERVER_DATETIME_FORMAT)
|
start_at_datetime = datetime.strptime(dt, tools.DEFAULT_SERVER_DATETIME_FORMAT)
|
||||||
date_tz_user = fields.datetime.context_timestamp(cr, uid, start_at_datetime, context=context)
|
date_tz_user = fields.datetime.context_timestamp(cr, uid, start_at_datetime, context=context)
|
||||||
date_tz_user = date_tz_user.strftime(tools.DEFAULT_SERVER_DATE_FORMAT)
|
date_tz_user = date_tz_user.strftime(tools.DEFAULT_SERVER_DATE_FORMAT)
|
||||||
return self.pool['account.move'].create(cr, uid, {'ref': ref, 'journal_id': journal_id, 'date': date_tz_user}, context=context)
|
return self.pool['account.move'].create(cr, SUPERUSER_ID, {'ref': ref, 'journal_id': journal_id, 'date': date_tz_user}, context=context)
|
||||||
|
|
||||||
def _create_account_move_line(self, cr, uid, ids, session=None, move_id=None, context=None):
|
def _create_account_move_line(self, cr, uid, ids, session=None, move_id=None, context=None):
|
||||||
# Tricky, via the workflow, we only have one id in the ids variable
|
# Tricky, via the workflow, we only have one id in the ids variable
|
||||||
@@ -1079,7 +1082,7 @@ class pos_order(osv.osv):
|
|||||||
# Create an entry for the sale
|
# Create an entry for the sale
|
||||||
move_id = self._create_account_move(cr, uid, order.session_id.start_at, order.name, order.sale_journal.id, order.company_id.id, context=context)
|
move_id = self._create_account_move(cr, uid, order.session_id.start_at, order.name, order.sale_journal.id, order.company_id.id, context=context)
|
||||||
|
|
||||||
move = account_move_obj.browse(cr, uid, move_id, context=context)
|
move = account_move_obj.browse(cr, SUPERUSER_ID, move_id, context=context)
|
||||||
|
|
||||||
def insert_data(data_type, values):
|
def insert_data(data_type, values):
|
||||||
# if have_to_group_by:
|
# if have_to_group_by:
|
||||||
@@ -1202,8 +1205,8 @@ class pos_order(osv.osv):
|
|||||||
for value in group_data:
|
for value in group_data:
|
||||||
all_lines.append((0, 0, value),)
|
all_lines.append((0, 0, value),)
|
||||||
if move_id: #In case no order was changed
|
if move_id: #In case no order was changed
|
||||||
self.pool.get("account.move").write(cr, uid, [move_id], {'line_ids':all_lines}, context=context)
|
self.pool.get("account.move").write(cr, SUPERUSER_ID, [move_id], {'line_ids':all_lines}, context=context)
|
||||||
self.pool.get("account.move").post(cr, uid, [move_id], context=context)
|
self.pool.get("account.move").post(cr, SUPERUSER_ID, [move_id], context=context)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from openerp import SUPERUSER_ID
|
||||||
from openerp.osv import osv
|
from openerp.osv import osv
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
from openerp.exceptions import UserError
|
from openerp.exceptions import UserError
|
||||||
@@ -33,4 +34,4 @@ class PosInvoiceReport(osv.AbstractModel):
|
|||||||
'doc_model': report.model,
|
'doc_model': report.model,
|
||||||
'docs': selected_orders,
|
'docs': selected_orders,
|
||||||
}
|
}
|
||||||
return report_obj.render(cr, uid, ids, 'account.report_invoice', docargs, context=context)
|
return report_obj.render(cr, SUPERUSER_ID, ids, 'account.report_invoice', docargs, context=context)
|
||||||
|
|||||||
@@ -1,12 +1,7 @@
|
|||||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
access_pos_order,pos.order,model_pos_order,group_pos_user,1,1,1,1
|
access_pos_order,pos.order,model_pos_order,group_pos_user,1,1,1,1
|
||||||
access_pos_order_line,pos.order.line,model_pos_order_line,group_pos_user,1,1,1,1
|
access_pos_order_line,pos.order.line,model_pos_order_line,group_pos_user,1,1,1,1
|
||||||
access_pos_order_manager,pos.order manager,model_pos_order,group_pos_manager,1,0,0,0
|
|
||||||
access_pos_order_line_manager,pos.order.line manager,model_pos_order_line,group_pos_manager,1,0,0,0
|
|
||||||
access_report_transaction_pos,report.transaction.pos,model_report_transaction_pos,group_pos_manager,1,1,1,1
|
access_report_transaction_pos,report.transaction.pos,model_report_transaction_pos,group_pos_manager,1,1,1,1
|
||||||
access_account_journal_pos_user,account.journal pos_user,account.model_account_journal,group_pos_user,1,0,0,0
|
|
||||||
access_account_move_pos_user,account.move pos_user,account.model_account_move,group_pos_user,1,1,1,0
|
|
||||||
access_account_account_pos_user,account.account pos_user,account.model_account_account,group_pos_user,1,0,0,0
|
|
||||||
access_stock_picking_pos_user,stock.picking pos_user,stock.model_stock_picking,group_pos_user,1,1,1,1
|
access_stock_picking_pos_user,stock.picking pos_user,stock.model_stock_picking,group_pos_user,1,1,1,1
|
||||||
access_stock_warehouse_pos_user,stock.warehouse pos_user,stock.model_stock_warehouse,group_pos_user,1,0,0,0
|
access_stock_warehouse_pos_user,stock.warehouse pos_user,stock.model_stock_warehouse,group_pos_user,1,0,0,0
|
||||||
access_pos_order_stock_worker,pos.order stock_worker,model_pos_order,stock.group_stock_user,1,0,0,0
|
access_pos_order_stock_worker,pos.order stock_worker,model_pos_order,stock.group_stock_user,1,0,0,0
|
||||||
@@ -14,40 +9,26 @@ access_stock_move_pos_user,stock.move pos_user,stock.model_stock_move,group_pos_
|
|||||||
access_report_sales_by_user_pos,report.sales.by.user.pos,model_report_sales_by_user_pos,group_pos_user,1,0,0,0
|
access_report_sales_by_user_pos,report.sales.by.user.pos,model_report_sales_by_user_pos,group_pos_user,1,0,0,0
|
||||||
access_report_sales_by_user_pos_month,report.sales.by.user.pos.month,model_report_sales_by_user_pos_month,group_pos_user,1,0,0,0
|
access_report_sales_by_user_pos_month,report.sales.by.user.pos.month,model_report_sales_by_user_pos_month,group_pos_user,1,0,0,0
|
||||||
access_report_pos_order,report.pos.order,model_report_pos_order,group_pos_user,1,1,1,1
|
access_report_pos_order,report.pos.order,model_report_pos_order,group_pos_user,1,1,1,1
|
||||||
|
access_account_journal_pos_user,account.journal pos_user,account.model_account_journal,group_pos_user,1,0,0,0
|
||||||
|
access_account_payment_method_pos_user,account.payment.method pos_user,account.model_account_payment_method,group_pos_manager,1,0,0,0
|
||||||
access_account_bank_statement,account.bank.statement,account.model_account_bank_statement,group_pos_user,1,1,1,0
|
access_account_bank_statement,account.bank.statement,account.model_account_bank_statement,group_pos_user,1,1,1,0
|
||||||
access_account_bank_statement_manager,account.bank.statement manager,account.model_account_bank_statement,group_pos_manager,1,1,1,1
|
access_account_bank_statement_manager,account.bank.statement manager,account.model_account_bank_statement,group_pos_manager,1,1,1,1
|
||||||
access_account_bank_statement_line,account.bank.statement.line,account.model_account_bank_statement_line,group_pos_user,1,1,1,0
|
access_account_bank_statement_line,account.bank.statement.line,account.model_account_bank_statement_line,group_pos_user,1,1,1,0
|
||||||
access_account_invoice_pos,account.invoice pos user,account.model_account_invoice,group_pos_user,1,1,1,0
|
|
||||||
access_account_invoice_pos_manager,account.invoice pos manager,account.model_account_invoice,group_pos_manager,1,0,0,0
|
|
||||||
access_account_invoice_line_pos,account.invoice.line pos user,account.model_account_invoice_line,group_pos_user,1,1,1,0
|
|
||||||
access_account_invoice_line_pos_manager,account.invoice.line pos manager,account.model_account_invoice_line,group_pos_manager,1,0,0,0
|
|
||||||
access_account_invoice_tax_pos,account.invoice.tax pos user,account.model_account_invoice_tax,group_pos_user,1,1,1,0
|
|
||||||
access_account_invoice_tax_pos_manager,account.invoice.tax pos manager,account.model_account_invoice_tax,group_pos_manager,1,0,0,0
|
|
||||||
access_product_product,product.product,product.model_product_product,group_pos_user,1,0,0,0
|
access_product_product,product.product,product.model_product_product,group_pos_user,1,0,0,0
|
||||||
access_product_template_pos_user,product.template pos user,product.model_product_template,group_pos_user,1,0,0,0
|
access_product_template_pos_user,product.template pos user,product.model_product_template,group_pos_user,1,0,0,0
|
||||||
access_product_product_pos_manager,product.product.pos manager,product.model_product_product,group_pos_manager,1,1,1,1
|
access_product_product_pos_manager,product.product.pos manager,product.model_product_product,group_pos_manager,1,1,1,1
|
||||||
access_product_template_pos_manager,product.template pos manager,product.model_product_template,group_pos_manager,1,1,1,1
|
access_product_template_pos_manager,product.template pos manager,product.model_product_template,group_pos_manager,1,1,1,1
|
||||||
access_account_move_line,account.move.line,account.model_account_move_line,group_pos_user,1,1,1,0
|
|
||||||
access_account_move_line_manager,account.move.line manager,account.model_account_move_line,group_pos_manager,1,1,1,1
|
|
||||||
access_account_move,account.move,account.model_account_move,group_pos_manager,1,0,0,0
|
|
||||||
access_account_journal,account.journal,account.model_account_journal,group_pos_manager,1,1,1,0
|
|
||||||
access_account_analytic_line,account.analytic.line,analytic.model_account_analytic_line,group_pos_user,1,1,1,0
|
|
||||||
access_account_analytic_account,account.analytic.account,analytic.model_account_analytic_account,group_pos_user,1,1,1,0
|
|
||||||
access_ir_property_pos_manager,ir.property manager,base.model_ir_property,group_pos_manager,1,1,1,1
|
|
||||||
access_account_bank_statement_line_manager,account.bank.statement.line manager,account.model_account_bank_statement_line,group_pos_manager,1,1,1,1
|
access_account_bank_statement_line_manager,account.bank.statement.line manager,account.model_account_bank_statement_line,group_pos_manager,1,1,1,1
|
||||||
access_account_invoice_manager,account.invoice manager,account.model_account_invoice,group_pos_manager,1,1,1,1
|
|
||||||
access_product_product_supplierinfo_user,product.supplierinfo user,product.model_product_supplierinfo,group_pos_user,1,0,0,0
|
access_product_product_supplierinfo_user,product.supplierinfo user,product.model_product_supplierinfo,group_pos_user,1,0,0,0
|
||||||
access_product_product_packaging_user,product.packaging user,product.model_product_packaging,group_pos_user,1,0,0,0
|
access_product_product_packaging_user,product.packaging user,product.model_product_packaging,group_pos_user,1,0,0,0
|
||||||
access_stock_warehouse_manager,stock.warehouse manager,stock.model_stock_warehouse,group_pos_manager,1,0,0,0
|
access_stock_warehouse_manager,stock.warehouse manager,stock.model_stock_warehouse,group_pos_manager,1,0,0,0
|
||||||
access_stock_location_manager,stock.location manager,stock.model_stock_location,group_pos_manager,1,0,0,0
|
access_stock_location_manager,stock.location manager,stock.model_stock_location,group_pos_manager,1,0,0,0
|
||||||
access_product_uom_manager,product.uom manager,product.model_product_uom,group_pos_manager,1,1,1,1
|
access_product_uom_manager,product.uom manager,product.model_product_uom,group_pos_manager,1,1,1,1
|
||||||
access_res_partner_manager,res.partner manager,base.model_res_partner,group_pos_manager,1,0,0,0
|
|
||||||
access_product_category_manager,product.category manager,product.model_product_category,group_pos_manager,1,1,1,1
|
access_product_category_manager,product.category manager,product.model_product_category,group_pos_manager,1,1,1,1
|
||||||
access_product_pricelist_manager,product.pricelist manager,product.model_product_pricelist,group_pos_manager,1,0,0,0
|
access_product_pricelist_manager,product.pricelist manager,product.model_product_pricelist,group_pos_manager,1,0,0,0
|
||||||
access_pos_session_user,pos.session user,model_pos_session,group_pos_user,1,1,1,0
|
access_pos_session_user,pos.session user,model_pos_session,group_pos_user,1,1,1,0
|
||||||
access_pos_config_user,pos.config user,model_pos_config,group_pos_user,1,0,0,0
|
access_pos_config_user,pos.config user,model_pos_config,group_pos_user,1,0,0,0
|
||||||
access_pos_config_manager,pos.config user,model_pos_config,group_pos_manager,1,1,1,0
|
access_pos_config_manager,pos.config user,model_pos_config,group_pos_manager,1,1,1,0
|
||||||
access_ir_sequence_manager,ir.sequence manager,base.model_ir_sequence,group_pos_manager,1,1,1,1
|
|
||||||
access_product_category_pos_manager,pos.category manager,model_pos_category,group_pos_manager,1,1,1,1
|
access_product_category_pos_manager,pos.category manager,model_pos_category,group_pos_manager,1,1,1,1
|
||||||
access_product_category_pos_user,pos.category user,model_pos_category,group_pos_user,1,0,0,0
|
access_product_category_pos_user,pos.category user,model_pos_category,group_pos_user,1,0,0,0
|
||||||
access_barcode_nomenclature_pos_user,barcode.nomenclature.pos.user,barcodes.model_barcode_nomenclature,group_pos_user,1,0,0,0
|
access_barcode_nomenclature_pos_user,barcode.nomenclature.pos.user,barcodes.model_barcode_nomenclature,group_pos_user,1,0,0,0
|
||||||
|
|||||||
|
@@ -13,6 +13,42 @@
|
|||||||
<field name="users" eval="[(4, ref('base.user_root'))]"/>
|
<field name="users" eval="[(4, ref('base.user_root'))]"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
<record id="rule_pos_bank_statement_user" model="ir.rule">
|
||||||
|
<field name="name">Point Of Sale Bank Statement POS User</field>
|
||||||
|
<field name="model_id" ref="account.model_account_bank_statement" />
|
||||||
|
<field name="groups" eval="[(4, ref('group_pos_user'))]"/>
|
||||||
|
<field name="domain_force">[('pos_session_id', '!=', False)]</field>
|
||||||
|
</record>
|
||||||
|
<record id="rule_pos_bank_statement_account_user" model="ir.rule">
|
||||||
|
<field name="name">Point Of Sale Bank Statement Accountant</field>
|
||||||
|
<field name="model_id" ref="account.model_account_bank_statement" />
|
||||||
|
<field name="groups" eval="[(4, ref('account.group_account_user'))]"/>
|
||||||
|
<field name="domain_force">[(1, '=', 1)]</field>
|
||||||
|
</record>
|
||||||
|
<record id="rule_pos_bank_statement_line_user" model="ir.rule">
|
||||||
|
<field name="name">Point Of Sale Bank Statement Line POS User</field>
|
||||||
|
<field name="model_id" ref="account.model_account_bank_statement_line" />
|
||||||
|
<field name="groups" eval="[(4, ref('group_pos_user'))]"/>
|
||||||
|
<field name="domain_force">[('statement_id.pos_session_id', '!=', False)]</field>
|
||||||
|
</record>
|
||||||
|
<record id="rule_pos_bank_statement_line_account_user" model="ir.rule">
|
||||||
|
<field name="name">Point Of Sale Bank Statement Line Accountant</field>
|
||||||
|
<field name="model_id" ref="account.model_account_bank_statement_line" />
|
||||||
|
<field name="groups" eval="[(4, ref('account.group_account_user'))]"/>
|
||||||
|
<field name="domain_force">[(1, '=', 1)]</field>
|
||||||
|
</record>
|
||||||
|
<record id="rule_pos_cashbox_line_user" model="ir.rule">
|
||||||
|
<field name="name">Point Of Sale Cashbox Line POS User</field>
|
||||||
|
<field name="model_id" ref="account.model_account_cashbox_line" />
|
||||||
|
<field name="groups" eval="[(4, ref('group_pos_user'))]"/>
|
||||||
|
<field name="domain_force">[('bank_statement_id.pos_session_id', '!=', False)]</field>
|
||||||
|
</record>
|
||||||
|
<record id="rule_pos_cashbox_line_accountant" model="ir.rule">
|
||||||
|
<field name="name">Point Of Sale Cashbox Line Accountant</field>
|
||||||
|
<field name="model_id" ref="account.model_account_cashbox_line" />
|
||||||
|
<field name="groups" eval="[(4, ref('account.group_account_user'))]"/>
|
||||||
|
<field name="domain_force">[(1, '=', 1)]</field>
|
||||||
|
</record>
|
||||||
<record id="rule_pos_multi_company" model="ir.rule">
|
<record id="rule_pos_multi_company" model="ir.rule">
|
||||||
<field name="name">Point Of Sale Order</field>
|
<field name="name">Point Of Sale Order</field>
|
||||||
<field name="model_id" ref="model_pos_order" />
|
<field name="model_id" ref="model_pos_order" />
|
||||||
|
|||||||
Reference in New Issue
Block a user