1.强制必填字段
(1)【客户名称】、【税ID】、【Email】、【销售员】、【标签】为强制必填 (2)【电话】、【手机】两个字段控制为二选一强制必填 2.客户校验规则: (1)【客户名称】+【税ID】两个字段分别与已经创建客户的档案信息进行校验,任意一项100%吻合则不允许创建客户 3.强制必填字段 (1)【名称】、【Email】、【销售员】为强制必填 (2)【电话】、【手机】两个字段控制为二选一强制必填 4.个人校验规则: (1)【名称】+【Email】两个字段分别与已经创建客户的档案信息进行校验,两项一起100%吻合则不允许创建个人 5.下拉仅显示销售人员的账户用户名(非相关用户及姓名不显示),字段为强制必填 (1)创建人的权限为销售经理,则【销售员】字段自动默认为当前账号的用户姓名,且不可修改 (2)创建人的权限为销售总监,则【销售员】字段自动默认为当前账号的用户姓名,可下拉选择,修改销售人员姓名
This commit is contained in:
@@ -6,8 +6,8 @@ import os
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.modules import get_resource_path
|
||||
from OCC.Extend.DataExchange import read_step_file
|
||||
from OCC.Extend.DataExchange import write_stl_file
|
||||
# from OCC.Extend.DataExchange import read_step_file
|
||||
# from OCC.Extend.DataExchange import write_stl_file
|
||||
|
||||
|
||||
class ResProductMo(models.Model):
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -17,6 +17,7 @@
|
||||
'wizard/sale_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'
|
||||
],
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import logging
|
||||
from odoo.modules import get_resource_path
|
||||
from odoo import fields, models, api
|
||||
from quatotion import readSql, feature_recognize, auto_quatotion
|
||||
# from quatotion import readSql, feature_recognize, auto_quatotion
|
||||
|
||||
__author__ = 'jinling.yang'
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -5,8 +5,8 @@ import os
|
||||
import json
|
||||
from datetime import datetime
|
||||
import requests
|
||||
from OCC.Extend.DataExchange import read_step_file
|
||||
from OCC.Extend.DataExchange import write_stl_file
|
||||
# from OCC.Extend.DataExchange import read_step_file
|
||||
# from OCC.Extend.DataExchange import write_stl_file
|
||||
from odoo import models, fields, api
|
||||
from odoo.modules import get_resource_path
|
||||
from odoo.exceptions import ValidationError, UserError
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import datetime
|
||||
import base64
|
||||
from odoo import models, fields, api
|
||||
from odoo.osv import expression
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class ReSaleOrder(models.Model):
|
||||
@@ -86,6 +86,24 @@ class RePurchaseOrder(models.Model):
|
||||
class ResPartnerToSale(models.Model):
|
||||
_inherit = 'res.partner'
|
||||
|
||||
@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):
|
||||
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'):
|
||||
@@ -95,3 +113,21 @@ class ResPartnerToSale(models.Model):
|
||||
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)
|
||||
|
||||
@api.onchange('user_id')
|
||||
def _get_salesman(self):
|
||||
self.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)
|
||||
return super()._name_search(name, args, operator, limit, name_get_uid)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<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="domain_force">[(1,'=',1),('customer_rank','>',0)]</field>
|
||||
<field name="groups" eval="[(4, ref('sf_base.group_sale_director'))]"/>
|
||||
<field name="perm_read" eval="1"/>
|
||||
<field name="perm_write" eval="1"/>
|
||||
@@ -32,7 +32,8 @@
|
||||
<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="domain_force">[('user_id','=',user.id),('customer_rank','>',0)]
|
||||
</field>
|
||||
<field name="groups" eval="[(4, ref('sf_base.group_sale_salemanager'))]"/>
|
||||
<field name="perm_read" eval="1"/>
|
||||
<field name="perm_write" eval="1"/>
|
||||
@@ -73,7 +74,7 @@
|
||||
<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>
|
||||
<field name="domain_force">[(1,'=',1),('supplier_rank','>', 0)]</field>
|
||||
<field name="groups" eval="[(4, ref('sf_base.group_purchase_director'))]"/>
|
||||
<field name="perm_read" eval="1"/>
|
||||
<field name="perm_write" eval="1"/>
|
||||
@@ -82,7 +83,7 @@
|
||||
<record model="ir.rule" id="purchase_supplier_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="domain_force">[('user_id','=',user.id),('supplier_rank','>', 0)]</field>
|
||||
<field name="groups" eval="[(4, ref('sf_base.group_purchase'))]"/>
|
||||
<field name="perm_read" eval="1"/>
|
||||
<field name="perm_write" eval="1"/>
|
||||
|
||||
@@ -38,13 +38,20 @@ 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_user_group_purchase_director,model_res_users,sf_base.group_purchase_director,1,1,1,0
|
||||
access_res_users_sale_salemanager,res_user_group_sale_salemanager,model_res_users,sf_base.group_sale_salemanager,1,0,0,0
|
||||
access_res_users_group_sale_director,res_user_group_sale_director,model_res_users,sf_base.group_sale_director,1,1,1,0
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
access_sale_order,sale_order,model_sale_order,sf_base.group_plan_dispatch,1,0,0,0
|
||||
|
||||
|
||||
|
||||
|
||||
|
35
sf_sale/views/res_partner_view.xml
Normal file
35
sf_sale/views/res_partner_view.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="view_partner_form_inherit_sf">
|
||||
<field name="name">res.partner.form.inherit.sf</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="vat" position="replace">
|
||||
<field name="vat" attrs="{'required' : [('company_type', '=', 'company')]}"/>
|
||||
</field>
|
||||
<field name="email" position="replace">
|
||||
<field name="email" required="1"/>
|
||||
</field>
|
||||
<field name="mobile" position="attributes">
|
||||
<attribute name="attrs">{'required': [('phone', '=', False),('company_type','=', 'company')]}
|
||||
</attribute>
|
||||
</field>
|
||||
<field name="phone" position="attributes">
|
||||
<attribute name="attrs">{'required': [('mobile', '=', False),('company_type','=', 'company')]}
|
||||
</attribute>
|
||||
</field>
|
||||
<xpath expr="//group[@name='sale']/field[@name='user_id']" position="replace">
|
||||
<field name="user_id" widget="many2one_avatar_user" context="{'is_sale': True }"
|
||||
attrs="{'required' : [('company_type', '=', 'company')]}"/>
|
||||
</xpath>
|
||||
<field name="category_id" position="attributes">
|
||||
<attribute name="attrs">{'required': [('company_type', '=', 'company')]}</attribute>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user