业务需求:比如总经理组是可以修改低于产品里的价格,销售组没权限修改低于的价格 但是可以改高价格
解决方案(以合同订单为例):
1、单据分录增加一个字段“单价”类型的字段“最低限价”,并设置为不可编辑
2、查询新增加字段的列名
SELECT *FROM ld_producttoolfield WHERE tabid=22 AND presence<>1
3、把“最低限价”根据“负责人”控制的规则写入控制表:ld_related_producttoolfield
这里以用户“职位级别”为“”做控制为例:
SET @query_sql="SELECT
CASE
WHEN userlevel='总经理' THEN 0
ELSE (SELECT ROUND(unit_price,2) FROM ld_products WHERE productid='{hdnProductId}')
END AS sf1687
FROM ld_users
WHERE id='{ld_salesorder.smownerid}'";
INSERT INTO ld_related_producttoolfield(modulename,trigger_columnname,effect_columnname,query_sql)
SELECT 'SalesOrder','hdnProductId','sf1687',@query_sql FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM ld_related_producttoolfield WHERE modulename='SalesOrder' AND trigger_columnname='hdnProductId' AND effect_columnname='sf1687');
说明:
1、职位级别=总经理取 0 表示不限制加个,其他情况下取产品的“参考价”
2、红色部分的内容需要根据模块和“最低限价”字段修改
4、插入验证规则控制单据分录“含税单价”不能低于“最低限价”(目前验证规则没有放开单价字段的设置,暂时通过脚本写入验证规则)
SET @module='SalesOrder';
SET @columnname='sf1687';
SET @rule_name='含税单价不允许低于最低限价';
SET @rule_tip="第{line}行『含税单价』必须高于『最低限价』";
INSERT INTO `ld_validatasave` (`module`,`relatedtable`,`fieldname`,`comparator`,`formulavalue`,`comparatordescription`,`rulename`,`status`,`validatacheckbutton`,`allowsave`,`tipzh`,`tipen`, `funtype`, `fungroupdbcolumns`, `fungrouphiddencolumns`,`sequence`,`validatasavetype`,`isshowlist`)
SELECT @module,'ld_producttoolfield','taxprice','h',NULL,NULL,@rule_name,'active','create,edit','no',@rule_tip,@rule_tip,NULL,NULL,NULL,'1','php','no' FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM ld_validatasave WHERE module=@module AND rulename=@rule_name AND fieldname='taxprice');
SET @id=(SELECT id FROM ld_validatasave WHERE module=@module AND rulename=@rule_name AND fieldname='taxprice' LIMIT 1);
INSERT INTO `ld_validatasavedetail` (`relateid`,`relatefieldname`, `sequence`, `relatedtable`)
SELECT @id,@columnname,1,'ld_producttoolfield' FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM ld_validatasavedetail WHERE relateid=@id AND relatefieldname=@columnname)
AND @id>0;
说明:红色部分的内容需要根据模块和“最低限价”字段修改
5、清除缓存,验证规则: