diff --git a/sf_base/__manifest__.py b/sf_base/__manifest__.py index da6919a4..e2fb731c 100644 --- a/sf_base/__manifest__.py +++ b/sf_base/__manifest__.py @@ -10,7 +10,7 @@ """, 'category': 'sf', 'website': 'https://www.sf.jikimo.com', - 'depends': ['account', 'base', 'mrp_workorder', 'sale', 'purchase', 'sales_team'], + 'depends': ['base', 'mrp_workorder', 'sale', 'purchase', 'sales_team'], 'data': [ 'security/group_security.xml', 'security/ir.model.access.csv', diff --git a/sf_dlm/views/product_template_view.xml b/sf_dlm/views/product_template_view.xml index 6331d841..3748a669 100644 --- a/sf_dlm/views/product_template_view.xml +++ b/sf_dlm/views/product_template_view.xml @@ -42,11 +42,53 @@ - stock.group_stock_user,product.group_stock_packaging + + stock.group_stock_user,product.group_stock_packaging,sf_base.group_sale_salemanager,sf_base.group_sale_director,sf_base.group_purchase,sf_base.group_purchase_director + + + product.template_procurement.form.inherit.sf + product.template + + + + + stock.group_stock_user,sf_base.group_sale_salemanager,sf_base.group_sale_director,sf_base.group_purchase,sf_base.group_purchase_director + + + + + stock.group_stock_user,sf_base.group_sale_salemanager,sf_base.group_sale_director,sf_base.group_purchase,sf_base.group_purchase_director + + + + + stock.group_stock_user,sf_base.group_sale_salemanager,sf_base.group_sale_director,sf_base.group_purchase,sf_base.group_purchase_director + + + + + stock.group_stock_user,sf_base.group_sale_salemanager,sf_base.group_sale_director,sf_base.group_purchase,sf_base.group_purchase_director + + + + + + stock.group_stock_user,sf_base.group_sale_salemanager,sf_base.group_sale_director,sf_base.group_purchase,sf_base.group_purchase_director + + + + + + + + + + + mrp.bom.form.inherit.sf mrp.bom @@ -80,5 +122,6 @@ + \ No newline at end of file diff --git a/sf_dlm_management/data/stock_data.xml b/sf_dlm_management/data/stock_data.xml index d6067cdf..3d2c4527 100644 --- a/sf_dlm_management/data/stock_data.xml +++ b/sf_dlm_management/data/stock_data.xml @@ -14,6 +14,14 @@ + + 刀具组装位置 + internal + DJZZ + true + + + 刀具组装入库 diff --git a/sf_dlm_management/views/product_template_management_view.xml b/sf_dlm_management/views/product_template_management_view.xml index 485499d4..737d56db 100644 --- a/sf_dlm_management/views/product_template_management_view.xml +++ b/sf_dlm_management/views/product_template_management_view.xml @@ -7,7 +7,7 @@ - + + attrs="{'invisible': ['|',('categ_type', '!=', '坯料'),('categ_type', '=', False)],'readonly': [('categ_id', '!=', False)]}"/> + attrs="{'invisible': [('categ_type', 'not in', ['成品','坯料', '原材料'])],'readonly': [('categ_id', '!=', False)]}"/> + attrs="{'invisible': [('categ_type', 'not in', ['成品','坯料', '原材料'])],'readonly': [('categ_id', '!=', False)]}"/> - - + + {'readonly': [('categ_id', '!=', False)]} + @@ -91,48 +95,51 @@ product.template - + - + - + placeholder="请选择" attrs="{'readonly': [('categ_type', '=', '刀具')]}"/> + - + attrs="{'invisible': [('cutting_tool_type', 'not in', ('整体式刀具','刀杆','刀盘','夹头','刀柄'))],'readonly': [('categ_type', '=', '刀具')]}"/> + - + - + string="材质" attrs="{'readonly': [('categ_type', '=', '刀具')]}"/> + + attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'required': [('cutting_tool_type','=','整体式刀具')],'invisible': [('cutting_tool_type', 'not in', ('整体式刀具','刀片'))],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs='{"invisible": [("cutting_tool_type","not in",("夹头","刀柄"))],"readonly": [("categ_type", "=", "刀具")]}'/> + attrs="{'invisible': [('cutting_tool_type', 'not in', ('夹头','刀柄'))],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', 'not in', ('刀片'))],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', 'not in', ('刀片','刀杆'))],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', 'not in', ('刀片'))],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '夹头')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '夹头')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '夹头')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '夹头')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '夹头')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀杆')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', 'not in', ('刀杆','刀盘'))],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', 'not in', ('刀杆','刀盘'))],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', 'not in', ('刀杆','刀盘'))],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', 'not in', ('刀杆','刀盘'))],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀杆')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀杆')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀杆')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', 'not in', ('刀杆','刀柄'))],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', 'not in', ('刀杆','刀柄'))],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀盘')],'readonly': [('categ_type', '=', '刀具')]}"/> + attrs="{'invisible': [('cutting_tool_type', '!=', '刀盘')],'readonly': [('categ_type', '=', '刀具')]}"/> - + - + - + - + - + - + @@ -444,8 +465,9 @@ - + attrs="{'invisible': [('cutting_tool_type', 'not in', ('整体式刀具','刀片'))],'readonly': [('categ_type', '=', '刀具')]}"> + diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index 473a9b43..4f2c43f3 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -201,17 +201,18 @@ class StockRule(models.Model): sale_order = self.env['sale.order'].sudo().search([('name', '=', production.origin)]) if sale_order: + sale_order.write({'schedule_status': 'to schedule'}) self.env['sf.production.plan'].sudo().with_company(company_id). \ create({ - 'name': production.name, - 'order_deadline': sale_order.deadline_of_delivery, - 'production_id': production.id, - 'date_planned_start': production.date_planned_start, - 'origin': production.origin, - 'product_qty': production.product_qty, - 'product_id': production.product_id.id, - 'state': 'draft', - }) + 'name': production.name, + 'order_deadline': sale_order.deadline_of_delivery, + 'production_id': production.id, + 'date_planned_start': production.date_planned_start, + 'origin': production.origin, + 'product_qty': production.product_qty, + 'product_id': production.product_id.id, + 'state': 'draft', + }) return True diff --git a/sf_quality/security/ir.model.access.csv b/sf_quality/security/ir.model.access.csv index 0ed30ac1..d59ff730 100644 --- a/sf_quality/security/ir.model.access.csv +++ b/sf_quality/security/ir.model.access.csv @@ -53,8 +53,13 @@ access_product_template_group_equipment_manager,product_template_group_equipment access_quality_alert_stage_group_quality,quality_alert_stage_group_quality,quality.model_quality_alert_stage,sf_base.group_quality,1,0,0,0 access_quality_alert_stage_group_quality_director,quality_alert_stage_group_quality_director,quality.model_quality_alert_stage,sf_base.group_quality_director,1,0,0,0 +access_quality_point_test_type_group_quality,quality_point_test_type_group_quality,quality.model_quality_point_test_type,sf_base.group_quality,1,0,0,0 +access_quality_point_test_type_group_quality_director,quality_point_test_type_group_quality_director,quality.model_quality_point_test_type,sf_base.group_quality_director,1,0,0,0 + +access_quality_point_test_type_group_quality,quality_point_test_type_group_quality,quality.model_quality_point_test_type,sf_base.group_quality,1,0,0,0 +access_quality_point_test_type_group_quality_director,quality_point_test_type_group_quality_director,quality.model_quality_point_test_type,sf_base.group_quality_director,1,0,0,0 + -access_quality_alert_stage,quality.alert.stage,quality.model_quality_alert_stage,sf_base.group_plan_dispatch,1,0,0,0 diff --git a/sf_sale/__manifest__.py b/sf_sale/__manifest__.py index f30bb014..ba6a99db 100644 --- a/sf_sale/__manifest__.py +++ b/sf_sale/__manifest__.py @@ -10,13 +10,15 @@ """, 'category': 'sf', 'website': 'https://www.sf.jikimo.com', - 'depends': ['sale', 'sale_management', 'web_widget_model_viewer', 'sf_base'], + 'depends': ['sale', 'sale_management', 'web_widget_model_viewer', 'sf_base', 'account', 'purchase'], 'data': [ 'security/group_security.xml', 'security/ir.model.access.csv', 'wizard/sale_order_wizard_views.xml', + 'wizard/purchase_order_wizard_views.xml', 'views/sale_team.xml', 'views/sale_order_view.xml', + 'views/res_partner_view.xml', 'views/purchase_order_view.xml', 'views/quick_easy_order_view.xml' ], diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index 93bf5c10..a26c1461 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -1,7 +1,7 @@ import datetime import base64 -from odoo import models, fields, api -from odoo.osv import expression +from odoo import models, fields, api, _ +from odoo.exceptions import UserError class ReSaleOrder(models.Model): @@ -13,14 +13,18 @@ class ReSaleOrder(models.Model): address_of_delivery = fields.Char('交货人地址') payments_way = fields.Selection([('现结', '现结'), ('月结', '月结')], '结算方式', default='现结', tracking=True) pay_way = fields.Selection([('转账', '转账'), ('微信', '微信'), ('支付宝', '支付宝')], '支付方式') - check_status = fields.Selection([('unchecked', '未审核'), ('checked', '已审核')], '审核状态', default='unchecked') - + check_status = fields.Selection([('pending', '待审核'), ('approved', '已审核'), ('fail', '不通过')], '审核状态') + schedule_status = fields.Selection( + [('to schedule', '待排程'), ('to process', '待加工'), ('to deliver', '待发货'), ('to receive', '待收货'), + ('received', '已收货')], + '进度状态') payment_term_id = fields.Many2one( comodel_name='account.payment.term', string="交付条件", compute='_compute_payment_term_id', store=True, readonly=False, precompute=True, check_company=True, tracking=True, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]") + remark = fields.Text('备注') # 业务平台分配工厂后在智能工厂先创建销售订单 def sale_order_create(self, company_id, delivery_name, delivery_telephone, delivery_address, @@ -32,7 +36,7 @@ class ReSaleOrder(models.Model): 'date_order': now_time, 'name': self.env['ir.sequence'].next_by_code('sale.order', sequence_date=now_time), 'partner_id': partner.id, - 'check_status': 'checked', + 'check_status': 'approved', 'state': 'draft', 'person_of_delivery': delivery_name, 'telephone_of_delivery': delivery_telephone, @@ -43,9 +47,16 @@ class ReSaleOrder(models.Model): }) return order_id - # 审核 - def action_check(self): - self.check_status = 'checked' + def write(self, vals): + if self.env.user.has_group('sf_base.group_sale_director'): + if vals.get('check_status'): + if vals['check_status'] in ('pending', False): + vals['check_status'] = 'approved' + return super().write(vals) + + # 提交 + def submit(self): + self.check_status = 'pending' def get_customer(self): customer = self.env['res.partner'].search([('name', '=', '业务平台')]) @@ -80,18 +91,89 @@ class ResaleOrderLine(models.Model): class RePurchaseOrder(models.Model): _inherit = 'purchase.order' - check_status = fields.Selection([('unchecked', '未审核'), ('checked', '已审核')], '审核状态', default='unchecked') + check_status = fields.Selection([('pending', '待审核'), ('approved', '已审核'), ('fail', '不通过')], '审核状态') + remark = fields.Text('备注') + + def write(self, vals): + if self.env.user.has_group('sf_base.group_purchase_director'): + if vals.get('check_status'): + if vals['check_status'] in ('pending', False): + vals['check_status'] = 'approved' + return super().write(vals) + + def button_confirm(self): + self.check_status = 'pending' + return super().button_confirm() class ResPartnerToSale(models.Model): _inherit = 'res.partner' + purchase_user_id = fields.Many2one('res.users', '采购员') + + @api.constrains('name') + def _check_name(self): + obj = self.sudo().search([('name', '=', self.name), ('id', '!=', self.id)]) + if obj: + raise UserError('该名称已存在,请重新输入') + + @api.constrains('vat') + def _check_vat(self): + obj = self.sudo().search([('vat', '=', self.vat), ('id', '!=', self.id)]) + if obj: + raise UserError('该税ID已存在,请重新输入') + + @api.constrains('email') + def _check_email(self): + if self.customer_rank > 0: + obj = self.sudo().search([('email', '=', self.email), ('id', '!=', self.id)]) + if obj: + raise UserError('该邮箱已存在,请重新输入') + @api.model def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None): if self._context.get('is_customer'): if self.env.user.has_group('sf_base.group_sale_director'): - domain = [('customer_rank', '=', 1)] - else: - domain = [('user_id', '=', self.env.user.id)] + domain = [('customer_rank', '>', 0)] + elif self.env.user.has_group('sf_base.group_sale_salemanager'): + customer = self.env['res.partner'].search( + [('customer_rank', '>', 0), ('user_id', '=', self.env.user.id)]) + if customer: + ids = [t.id for t in customer] + domain = [('id', 'in', ids)] + return self._search(domain, limit=limit, access_rights_uid=name_get_uid) + return super()._name_search(name, args, operator, limit, name_get_uid) + + @api.onchange('user_id') + def _get_salesman(self): + if self.customer_rank > 0: + self.user_id = self.env.user.id + + @api.onchange('purchase_user_id') + def _get_purchaseman(self): + if self.supplier_rank > 0: + self.purchase_user_id = self.env.user.id + + +class ResUserToSale(models.Model): + _inherit = 'res.users' + + @api.model + def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None): + if self._context.get('is_sale'): + if self.env.user.has_group('sf_base.group_sale_director'): + domain = [] + elif self.env.user.has_group('sf_base.group_sale_salemanager'): + domain = [('id', '=', self.env.user.id)] + return self._search(domain, limit=limit, access_rights_uid=name_get_uid) + elif self._context.get('supplier_rank'): + if self.env.user.has_group('sf_base.group_purchase_director'): + domain = [('supplier_rank', '>', 0)] + elif self.env.user.has_group('sf_base.group_purchase'): + supplier = self.env['res.partner'].search( + [('supplier_rank', '>', 0), ('purchase_user_id', '=', self.env.user.id)]) + if supplier: + ids = [t.id for t in supplier] + domain = [('id', 'in', ids)] return self._search(domain, limit=limit, access_rights_uid=name_get_uid) return super()._name_search(name, args, operator, limit, name_get_uid) diff --git a/sf_sale/security/group_security.xml b/sf_sale/security/group_security.xml index 5afd8196..ee08cd4c 100644 --- a/sf_sale/security/group_security.xml +++ b/sf_sale/security/group_security.xml @@ -11,7 +11,7 @@ - 销售总监查看所有的订单 + 销售总监查看所有团队 [(1,'=',1)] @@ -23,7 +23,7 @@ 销售总监查看所有客户 - [(1,'=',1),('customer_rank','=',1)] + [(1,'=',1),('customer_rank','>',0)] @@ -32,7 +32,8 @@ 销售经理查看自己的客户 - ['|',('user_id','=',user.id),('create_uid', '=',user.id)] + [('user_id','=',user.id),('customer_rank','>',0)] + @@ -40,11 +41,11 @@ - - 销售经理查看自己的订单 + + 销售总监查看所有订单 - [('user_id', '=',user.id)] - + [(1,'=',1)] + @@ -53,7 +54,7 @@ 采购总监查看所有的订单 - [(1,'=',1)] + [(1,'=',1),('check_status','!=', False] @@ -65,7 +66,7 @@ ['|',('user_id','=',user.id),('create_uid', '=',user.id)] - + @@ -73,7 +74,7 @@ 采购总监查看所有供应商 - [(1,'=',1)] + [(1,'=',1),('supplier_rank','>', 0)] @@ -82,7 +83,7 @@ 采购岗查看自己的供应商 - ['|',('user_id','=',user.id),('create_uid', '=',user.id)] + [('user_id','=',user.id),('supplier_rank','>', 0)] diff --git a/sf_sale/security/ir.model.access.csv b/sf_sale/security/ir.model.access.csv index 7e697a8f..3cd3ccd7 100644 --- a/sf_sale/security/ir.model.access.csv +++ b/sf_sale/security/ir.model.access.csv @@ -9,9 +9,11 @@ access_crm_team_member_manager,crm_team_manager,sales_team.model_crm_team,sf_bas access_crm_team_member_director,crm_team_member_director,sales_team.model_crm_team_member,sf_base.group_sale_director,1,1,1,0 access_res_users,res_users,base.model_res_users,sf_base.group_sale_director,1,1,1,0 access_product_template_group_sale_salemanager,product_template_group_sale_salemanager,product.model_product_template,sf_base.group_sale_salemanager,1,0,0,0 -access_product_template_group_sale_director,product_template_group_sale_director,product.model_product_template,sf_base.group_sale_director,1,0,0,0 +access_product_template_group_sale_director,product_template_group_sale_director,product.model_product_template,sf_base.group_sale_director,1,1,1,0 access_product_template_group_purchase,product_template_group_purchase,product.model_product_template,sf_base.group_purchase,1,0,0,0 -access_product_template_group_purchase_director,product_template_group_purchase_director,product.model_product_template,sf_base.group_purchase_director,1,0,0,0 +access_product_template_group_purchase_director,product_template_group_purchase_director,product.model_product_template,sf_base.group_purchase_director,1,1,1,0 +access_product_template_group_plan_dispatch,product_template_group_plan_dispatch,product.model_product_template,sf_base.group_plan_dispatch,1,0,0,0 +access_product_template_group_plan_director,product_template_group_plan_director,product.model_product_template,sf_base.group_plan_director,1,1,1,0 access_stock_picking_group_sale_salemanager,stock_picking_group_sale_salemanager,stock.model_stock_picking,sf_base.group_sale_salemanager,1,0,0,0 access_stock_picking_group_sale_director,stock_picking_group_sale_director,stock.model_stock_picking,sf_base.group_sale_director,1,0,0,0 access_stock_picking_group_purchase,stock_picking_group_purchase,stock.model_stock_picking,sf_base.group_purchase,1,0,0,0 @@ -38,13 +40,36 @@ access_uom_category_group_purchase_director,uom_category_group_purchase_director access_sale_order_check_wizard_group_sale_salemanager,sale_order_check_wizard_group_sale_salemanager,model_sale_order_check_wizard,sf_base.group_sale_salemanager,1,1,1,0 access_sale_order_check_wizard_group_sale_director,sale_order_check_wizard_group_sale_director,model_sale_order_check_wizard,sf_base.group_sale_director,1,1,1,0 +access_account_move_line_group_purchase,account_move_line_group_purchase,account.model_account_move_line,sf_base.group_purchase,1,1,1,0 +access_account_move_line_group_purchase_director,account_move_line_group_purchase_director,account.model_account_move_line,sf_base.group_purchase_director,1,1,1,0 + +access_res_users_group_purchase,res_user_group_purchase,model_res_users,sf_base.group_purchase,1,1,1,0 +access_res_users_group_purchase_director,res_users_group_purchase_director,model_res_users,sf_base.group_purchase_director,1,1,1,0 +access_res_users_group_sale_salemanager,res_users_group_sale_salemanager,model_res_users,sf_base.group_sale_salemanager,1,0,0,0 +access_res_users_group_sale_director,res_users_group_sale_director,model_res_users,sf_base.group_sale_director,1,1,1,0 + +access_mrp_bom_byproduct_group_purchase,mrp_bom_byproduct_group_purchase,mrp.model_mrp_bom_byproduct,sf_base.group_purchase,1,1,1,0 +access_mrp_bom_byproduct_group_purchase_director,mrp_bom_byproduct_group_purchase_director,mrp.model_mrp_bom_byproduct,sf_base.group_purchase_director,1,1,1,0 +access_mrp_bom_byproduct_group_sale_salemanager,mrp_bom_byproduct_group_sale_salemanager,mrp.model_mrp_bom_byproduct,sf_base.group_sale_salemanager,1,0,0,0 +access_mrp_bom_byproduct_group_sale_director,mrp_bom_byproduct_group_sale_director,mrp.model_mrp_bom_byproduct,sf_base.group_sale_director,1,1,1,0 + +access_purchase_order_group_purchase,purchase_order_group_purchase,purchase.model_purchase_order,sf_base.group_purchase,1,1,1,0 +access_purchase_order_group_purchase_director,purchase_order_group_purchase_director,purchase.model_purchase_order,sf_base.group_purchase_director,1,1,1,0 + +access_purchase_order_line_group_purchase,purchase_order_line_group_purchase,purchase_stock.model_purchase_order_line,sf_base.group_purchase,1,1,1,0 +access_purchase_order_line_group_purchase_director,purchase_order_line_group_purchase_director,purchase_stock.model_purchase_order_line,sf_base.group_purchase_director,1,1,1,0 +access_purchase_order_line_group_sale_salemanager,purchase_order_line_group_sale_salemanager,purchase_stock.model_purchase_order_line,sf_base.group_sale_salemanager,1,0,0,0 +access_purchase_order_line_group_sale_director,purchase_order_line_group_sale_director,purchase_stock.model_purchase_order_line,sf_base.group_sale_director,1,1,1,0 + +access_purchase_order_wizard_group_purchase,purchase_order_wizard_group_purchase,model_purchase_order_wizard,sf_base.group_purchase,1,1,1,0 +access_purchase_order_wizard_group_purchase_director,purchase_order_wizard_group_purchase_director,model_purchase_order_wizard,sf_base.group_purchase_director,1,1,1,0 + + - -access_sale_order,sale_order,model_sale_order,sf_base.group_plan_dispatch,1,0,0,0 diff --git a/sf_sale/views/purchase_order_view.xml b/sf_sale/views/purchase_order_view.xml index 4139dd19..93b59032 100644 --- a/sf_sale/views/purchase_order_view.xml +++ b/sf_sale/views/purchase_order_view.xml @@ -6,62 +6,137 @@ purchase.order - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - sf_base.group_purchase + + + + + + +