Merge branch 'feature/修复销售权限组' into develop
This commit is contained in:
@@ -13,7 +13,7 @@
|
||||
'author': 'jikimo',
|
||||
'website': 'https://sf.cs.jikimo.com',
|
||||
# 此处依赖sf_manufacturing是因为我要重写其中的一个字段operation_id的string,故需要sf_manufacturing先安装
|
||||
'depends': ['quality_control', 'sf_maintenance'],
|
||||
'depends': ['quality_control'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'views/view.xml'
|
||||
|
||||
@@ -50,5 +50,8 @@ access_product_template_group_sf_mrp_manager,product_template_group_sf_mrp_manag
|
||||
access_product_template_group_equipment_user,product_template_group_equipment_user,product.model_product_template,sf_maintenance.sf_group_equipment_user,1,0,0,0
|
||||
access_product_template_group_equipment_manager,product_template_group_equipment_manager,product.model_product_template,sf_maintenance.sf_group_equipment_manager,1,0,0,0
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -1 +1,3 @@
|
||||
from . import models
|
||||
from . import wizard
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
'data': [
|
||||
'security/group_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'wizard/sale_order_wizard_views.xml',
|
||||
'views/sale_team.xml',
|
||||
'views/sale_order_view.xml',
|
||||
'views/purchase_order_view.xml',
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,6 +1,7 @@
|
||||
import datetime
|
||||
import base64
|
||||
from odoo import models, fields
|
||||
from odoo import models, fields, api
|
||||
from odoo.osv import expression
|
||||
|
||||
|
||||
class ReSaleOrder(models.Model):
|
||||
@@ -81,7 +82,16 @@ class RePurchaseOrder(models.Model):
|
||||
|
||||
check_status = fields.Selection([('unchecked', '未审核'), ('checked', '已审核')], '审核状态', default='unchecked')
|
||||
|
||||
# 审核
|
||||
def action_check(self):
|
||||
self.check_status = 'checked'
|
||||
|
||||
class ResPartnerToSale(models.Model):
|
||||
_inherit = 'res.partner'
|
||||
|
||||
@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)]
|
||||
return self._search(domain, limit=limit, access_rights_uid=name_get_uid)
|
||||
return super()._name_search(name, args, operator, limit, name_get_uid)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</record>
|
||||
|
||||
<record model="ir.rule" id="crm_team_rule_director">
|
||||
<field name="name">销售总监</field>
|
||||
<field name="name">销售总监查看所有的订单</field>
|
||||
<field name="model_id" ref="sales_team.model_crm_team"/>
|
||||
<field name="domain_force">[(1,'=',1)]</field>
|
||||
<field name="groups" eval="[(4, ref('sf_base.group_sale_director'))]"/>
|
||||
@@ -20,20 +20,30 @@
|
||||
<field name="perm_create" eval="1"/>
|
||||
</record>
|
||||
|
||||
<!-- <record model="ir.rule" id="sale_order_rule_director">-->
|
||||
<!-- <field name="name">销售总监查看所有的订单</field>-->
|
||||
<!-- <field name="model_id" ref="model_sale_order"/>-->
|
||||
<!-- <field name="domain_force">[(1,'=',1)]</field>-->
|
||||
<!-- <field name="groups" eval="[(4, ref('sf_base.group_sale_director'))]"/>-->
|
||||
<!-- <field name="perm_read" eval="1"/>-->
|
||||
<!-- <field name="perm_write" eval="1"/>-->
|
||||
<!-- </record>-->
|
||||
<record model="ir.rule" id="sale_customer_rule_director">
|
||||
<field name="name">销售总监查看所有客户</field>
|
||||
<field name="model_id" ref="base.model_res_partner"/>
|
||||
<field name="domain_force">[(1,'=',1),('customer_rank','=',1)]</field>
|
||||
<field name="groups" eval="[(4, ref('sf_base.group_sale_director'))]"/>
|
||||
<field name="perm_read" eval="1"/>
|
||||
<field name="perm_write" eval="1"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.rule" id="sale_customer_rule_my">
|
||||
<field name="name">销售经理查看自己的客户</field>
|
||||
<field name="model_id" ref="base.model_res_partner"/>
|
||||
<field name="domain_force">['|',('user_id','=',user.id),('create_uid', '=',user.id)]</field>
|
||||
<field name="groups" eval="[(4, ref('sf_base.group_sale_salemanager'))]"/>
|
||||
<field name="perm_read" eval="1"/>
|
||||
<field name="perm_write" eval="1"/>
|
||||
<field name="perm_create" eval="1"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record model="ir.rule" id="sale_order_rule_salemanager">
|
||||
<field name="name">销售经理查看自己的订单</field>
|
||||
<field name="model_id" ref="model_sale_order"/>
|
||||
<field name="domain_force">['|',('partner_id','=',user.partner_id.id),('create_uid', '=',user.id)]</field>
|
||||
<field name="domain_force">[('user_id', '=',user.id)]</field>
|
||||
<field name="groups" eval="[(4, ref('sf_base.group_sale_salemanager'))]"/>
|
||||
<field name="perm_read" eval="1"/>
|
||||
<field name="perm_write" eval="1"/>
|
||||
@@ -60,7 +70,7 @@
|
||||
</record>
|
||||
|
||||
|
||||
<record model="ir.rule" id="purchase_supplier_rule_director">
|
||||
<record model="ir.rule" id="purchase_supplier_rule_director">
|
||||
<field name="name">采购总监查看所有供应商</field>
|
||||
<field name="model_id" ref="base.model_res_partner"/>
|
||||
<field name="domain_force">[(1,'=',1)]</field>
|
||||
|
||||
@@ -8,6 +8,40 @@ access_sale_order_line_director,sale_order_line_director,model_sale_order_line,s
|
||||
access_crm_team_member_manager,crm_team_manager,sales_team.model_crm_team,sf_base.group_sale_director,1,1,1,0
|
||||
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_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_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
|
||||
access_stock_picking_group_purchase_director,stock_picking_group_purchase_director,stock.model_stock_picking,sf_base.group_purchase_director,1,0,0,0
|
||||
access_account_move_group_sale_salemanager,account_move_group_sale_salemanager,account.model_account_move,sf_base.group_sale_salemanager,1,0,0,0
|
||||
access_account_move_group_sale_director,account_move_group_sale_director,account.model_account_move,sf_base.group_sale_director,1,0,0,0
|
||||
access_resource_resource_group_sale_director,resource_resource_group_sale_director,resource.model_resource_resource,sf_base.group_sale_director,1,1,1,0
|
||||
|
||||
access_mrp_bom_group_purchase,mrp_bom_group_purchase,mrp.model_mrp_bom,sf_base.group_purchase,1,0,0,0
|
||||
access_mrp_bom_group_purchase_director,mrp_bom_group_purchase_director,mrp.model_mrp_bom,sf_base.group_purchase_director,1,0,0,0
|
||||
access_stock_move_group_purchase,stock_move_group_purchase,stock.model_stock_move,sf_base.group_purchase,1,0,0,0
|
||||
access_stock_move_group_purchase_director,stock_move_group_purchase_director,stock.model_stock_move,sf_base.group_purchase_director,1,0,0,0
|
||||
|
||||
access_uom_uom_group_sale_salemanager,uom_uom_group_sale_salemanager,uom.model_uom_uom,sf_base.group_sale_salemanager,1,0,0,0
|
||||
access_uom_uom_group_sale_director,uom_uom_group_sale_director,uom.model_uom_uom,sf_base.group_sale_director,1,1,1,0
|
||||
access_uom_uom_group_purchase,uom_uom_group_purchase,uom.model_uom_uom,sf_base.group_purchase,1,0,0,0
|
||||
access_uom_uom_group_purchase_director,uom_uom_group_purchase_director,uom.model_uom_uom,sf_base.group_purchase_director,1,0,0,0
|
||||
|
||||
access_uom_category_group_sale_salemanager,uom_category_group_sale_salemanager,uom.model_uom_category,sf_base.group_sale_salemanager,1,0,0,0
|
||||
access_uom_category_group_sale_director,uom_category_group_sale_director,uom.model_uom_category,sf_base.group_sale_director,1,1,1,0
|
||||
access_uom_category_group_purchase,uom_category_group_purchase,uom.model_uom_category,sf_base.group_purchase,1,0,0,0
|
||||
access_uom_category_group_purchase_director,uom_category_group_purchase_director,uom.model_uom_category,sf_base.group_purchase_director,1,0,0,0
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -2,6 +2,25 @@
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<!-- <record id="sale_order_view_search_inherit_quotation_inherit_sf" model="ir.ui.view">-->
|
||||
<!-- <field name="name">sale.order.search.quotation.inherit.sf</field>-->
|
||||
<!-- <field name="model">sale.order</field>-->
|
||||
<!-- <!– <field name="inherit_id" ref="sale.view_sales_order_filter"/>–>-->
|
||||
|
||||
<!-- <field name="inherit_id" ref="sale.sale_order_view_search_inherit_quotation"/>-->
|
||||
<!-- <field name="arch" type="xml">-->
|
||||
<!-- <xpath expr="//filter[@name='my_sale_orders_filter']" position="replace">-->
|
||||
<!-- <!– <field name="campaign_id"/>–>-->
|
||||
<!-- <!– <separator/>–>-->
|
||||
<!-- <!– <filter string="Quotations" name="draft" domain="[('state','in',('draft', 'sent'))]"/>–>-->
|
||||
<!-- <!– <filter string="Sales Orders" name="sales" domain="[('state','in',('sale','done'))]"/>–>-->
|
||||
<!-- <!– <separator/>–>-->
|
||||
<!-- <filter string="Create Date" name="filter_create_date" date="create_date"/>-->
|
||||
<!-- </xpath>-->
|
||||
<!-- </field>-->
|
||||
<!-- </record>-->
|
||||
|
||||
|
||||
<record model="ir.ui.view" id="view_sale_order_form_inherit_sf">
|
||||
<field name="name">sale.order.form.inherit.sf</field>
|
||||
<field name="model">sale.order</field>
|
||||
@@ -9,13 +28,11 @@
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//form/header/button[@name='action_confirm']" position="after">
|
||||
<field name="check_status" invisible="1"/>
|
||||
<button name="action_check" string="审核" type="object"
|
||||
<button name="sf_sale.action_sale_order_check_wizard" string="审核" type="action"
|
||||
context="{'default_order_id':active_id}"
|
||||
attrs="{'invisible': [('check_status','=', 'checked')]}"
|
||||
class="oe_highlight"/>
|
||||
</xpath>
|
||||
<xpath expr="//form/header/button[@name='action_check']" position="attributes">
|
||||
<attribute name="groups">sf_base.group_sale_director</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//form/header/button[@name='action_confirm'][1]" position="attributes">
|
||||
<attribute name="attrs">{'invisible': [('check_status', '=', 'unchecked'),('state', 'not in',
|
||||
['sent'])]}
|
||||
@@ -26,6 +43,10 @@
|
||||
['draft'])]}
|
||||
</attribute>
|
||||
</xpath>
|
||||
<field name="partner_id" position="replace">
|
||||
<field name="partner_id" widget="res_partner_many2one" context="{'is_customer': True }"
|
||||
options='{"always_reload": True}'/>
|
||||
</field>
|
||||
<field name="payment_term_id" position="after">
|
||||
<field name="deadline_of_delivery"/>
|
||||
<field name="payments_way"/>
|
||||
|
||||
1
sf_sale/wizard/__init__.py
Normal file
1
sf_sale/wizard/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import sale_order_wizard
|
||||
16
sf_sale/wizard/sale_order_wizard.py
Normal file
16
sf_sale/wizard/sale_order_wizard.py
Normal file
@@ -0,0 +1,16 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import models, api, fields
|
||||
|
||||
|
||||
class saleOrderCheckWizard(models.TransientModel):
|
||||
_name = 'sale.order.check.wizard'
|
||||
|
||||
_description = '报价/销售订单审核向导'
|
||||
|
||||
order_id = fields.Many2one('sale.order')
|
||||
check_state = fields.Selection([('pass', '通过'), ('back', '退回')], '审核状态', default='pass')
|
||||
check_audit = fields.Text('审核意见')
|
||||
|
||||
def submit(self):
|
||||
self.order_id.check_status = 'unchecked' if not self.check_state == 'pass' else 'checked'
|
||||
self.order_id.message_ids = '1'
|
||||
28
sf_sale/wizard/sale_order_wizard_views.xml
Normal file
28
sf_sale/wizard/sale_order_wizard_views.xml
Normal file
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record model="ir.ui.view" id="sale_order_check_wizard_form_view">
|
||||
<field name="name">sale.order.check.wizard.form.view</field>
|
||||
<field name="model">sale.order.check.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<field name="order_id" invisible="True"/>
|
||||
<group>
|
||||
<field name="check_state" required="True"/>
|
||||
<field name="check_audit" attrs="{'required': [('check_state', '=', 'back')]}"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button string="提交" name="submit" type="object" class="oe_highlight"/>
|
||||
<button string="取消" class="btn btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_sale_order_check_wizard" model="ir.actions.act_window">
|
||||
<field name="name">销售订单审核向导</field>
|
||||
<field name="res_model">sale.order.check.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user