/*
说明:获取产品配置方案明细分组类型
参数:IsBeiji 是否备机,IsDonate是否赠送,IsService是否服务,IsBaseService是否基本服务,TypeCode产品类型值
输出:int
1 正常销售产品
2 备机
3 赠送
4 基本保修服务
5 收费服务
6 赠送服务
7 赠送-其他公司产品
注意:TypeCode 为产品配置方案明细中的 产品类型
*/
function getGroupTypeCode(IsBeiji, IsDonate, IsService, IsBasicService, TypeCode) {
if ((!IsBeiji) && (!IsDonate) && (!IsService) && (!IsBasicService) && TypeCode != 4) return 1;
if (IsBeiji && (!IsDonate) && (!IsService) && (!IsBasicService) && TypeCode != 4) return 2;
if ((!IsBeiji) && (IsDonate) && (!IsService) && (!IsBasicService) && TypeCode != 4) return 3;
if ((!IsBeiji) && (!IsDonate) && (IsService) && (IsBasicService) && TypeCode != 4) return 4;
if ((!IsBeiji) && (!IsDonate) && (IsService) && (!IsBasicService) && TypeCode != 4) return 5;
if ((!IsBeiji) && (IsDonate) && (IsService) && (!IsBasicService) && TypeCode != 4) return 6;
if ((!IsBeiji) && (!IsDonate) && (!IsService) && (!IsBasicService) && TypeCode == 4) return 7;
}
/*
商务审批窗体的Ribbon按钮“计算毛利”在点击后需要检查产品配置方案明细后进行以下检查操作:
步骤:
1,获取当前记录下的所有配置方案明细记录;
2,如果检查记录中不存在分组类型为“销售产品”、“收费服务”、“备机”的记录,则提示“没有可进行毛利计算的明细记录。”,不进行毛利对接;
2,如果存在分组类型为“销售产品”、“收费服务”、“备机”的记录,则做以下检查:
正常销售产品:类型=主机或模块,判断销售报价和最终用户单价是否有值;类型=配件,标选配等于选配,判断销售报价和最终用户单价
收费服务:类型=主机或模块,判断销售报价是否有值;类型=配件,标选配等于选配,判断销售报价是否有值。
备机:类型=主机或模块,判断备机年限是否有值;类型=配件,标选配等于选配,判断备机年限是否有值。
注意:最终用户单价是否要录,与销售模式有关。(销售模式=直销时,不用判断最终用户单价;销售模式=非直销时,就要判断最终用户单价)
*/
function CheckXsbjBeforeUpdateML() {
debugger;
var xsms = Xrm.Page.getAttribute("mp_xsms").getValue(); //获取销售模式的值
var swspid = Xrm.Page.data.entity.getId(); //获取当前的商务审批ID
if (swspid != null && swspid != undefined) { //判断当前商务审批ID不为null或没定义
var r = new fwREST(); //需要引入fw_restJS函数库
var rest_query = "mp_cppzfamxSet?$select=mp_lx,mp_xsbj,mp_zzyhdj,mp_bjnx,mp_isbj,mp_iszs,mp_isfw,mp_isjbfw,mp_bxp&$filter=(statecode/Value eq 0) and (mp_swsp/Id eq (guid'" + swspid + "'))"; //查询字符串 注意:mp_swsp为 一对多,多方的父ID。
var array = r.get(rest_query);
if (array.length < 1) {
alert("没有明细记录");
return false;
}
var a = 0, b = 0, c = 0;
for (var i = 0; i < array.length; i++) {
var lx = array[i].mp_lx.Value; //获取产品类型的值
var xsbj = array[i].mp_xsbj.Value; //获取销售报价的值
var zzyhdj = array[i].mp_zzyhdj.Value; //获取最终用户单价的值
var bjnx = array[i].mp_bjnx; //获取备机年限的值
var isbj = array[i].mp_isbj; //获取是否备机的值
var iszs = array[i].mp_iszs; //获取是否赠送的值
var isfw = array[i].mp_isfw; //获取是否服务的值
var isjbfw = array[i].mp_isjbfw; //获取是否基本服务的值
var bxp = array[i].mp_bxp.Value; //获取标选配的值
//判断的是所有的指定的三个分组没有记录 要一条条判断。
if ((getGroupTypeCode(isbj, iszs, isfw, isjbfw, lx) == 1)) a++;
if ((getGroupTypeCode(isbj, iszs, isfw, isjbfw, lx) == 2)) b++;
if ((getGroupTypeCode(isbj, iszs, isfw, isjbfw, lx) == 5)) c++;
//判断的是指定的三个分组有记录 有记录的情况下,需要检查所有记录的分组类型
//如果分组类型为“正常销售产品",类型=主机或模块,判断销售报价和最终用户单价是否有值;
//类型=配件,标选配等于选配,判断销售报价和最终用户单价(销售模式=直销时,不用判断最终用户单价;销售模式=非直销时,就要判断最终用户单价)
if ((getGroupTypeCode(isbj, iszs, isfw, isjbfw, lx) == 1)) {
if (lx == 1) { //判断类型等于主机或模块
if ((xsbj <= 0 || xsbj == null)) { //如果销售报价小于或等于0或为空
alert("没有可进行毛利计算的明细记录");
return false;
}
if (xsms != 2) { //如果销售模式为非直销
if (zzyhdj <= 0 || zzyhdj == null) { //最终用户单价
alert("产品明细中存在最终用户单价为空或0的记录,请填写完整后再进行毛利计算");
return false;
}
}
}
if (lx == 2 && bxp == 0) { //如果产品类型为配件,标选配等于选配
if ((xsbj <= 0 || xsbj == null)) { //如果销售报价小于或等于0或为空
alert("没有可进行毛利计算的明细记录");
return false;
}
if (xsms != 2) { //如果销售模式为非直销
if (zzyhdj <= 0 || zzyhdj == null) { //最终用户单价
alert("产品明细中存在销售报价为空或0的记录,请填写完整后再进行毛利计算");
return false;
}
}
}
}
//如果分组类型为“收费服务",类型=主机或模块,判断销售报价是否有值;类型=配件,标选配等于选配,判断销售报价是否有值
if ((getGroupTypeCode(isbj, iszs, isfw, isjbfw, lx) == 5)) {
if (lx == 1) { //判断类型等于主机或模块
if ((xsbj <= 0 || xsbj == null)) { //如果销售报价小于或等于0或为空
alert("没有可进行毛利计算的明细记录");
return false;
}
}
if (lx == 2 && bxp == 0) {//如果产品类型为配件,标选配等于选配
if ((xsbj <= 0 || xsbj == null)) { //如果销售报价小于或等于0或为空
alert("没有可进行毛利计算的明细记录");
return false;
}
}
}
//如果分组类型为“备机",类型=主机或模块,判断备机年限是否有值;类型=配件,标选配等于选配,判断备机年限是否有值
if ((getGroupTypeCode(isbj, iszs, isfw, isjbfw, lx) == 5)) {
if (lx == 1) { //判断类型等于主机或模块
if ((bjnx <= 0 || bjnx == null)) { //如果备机年限小于或等于0或为空
alert("没有可进行毛利计算的明细记录");
return false;
}
}
if (lx == 2 && bxp == 0) { //如果产品类型为配件,标选配等于选配
if ((bjnx <= 0 || bjnx == null)) { //如果备机年限小于或等于0或为空
alert("没有可进行毛利计算的明细记录");
return false;
}
}
}
} //for循环结尾
if (a == 0 && b == 0 && c == 0) {
alert("没有可进行毛利计算的明细记录,不进行毛利对接");
return false;
}
return true;
}
}
// 手动计算毛利
function UpdateML_Swsp() {
//检查是否满足条件
if (!CheckXsbjBeforeUpdateML()) {
return;
}
if (Xrm.Page.getAttribute("mp_zzspzt").getValue() == 3) {
if (!confirm("注意!!当前审批状态为“已通过”,如果执行毛利计算,表单将会被退回为草稿状态,如果表单没有改动清不要重新计算毛利。您确认要继续操作吗?")) {
return;
}
}
if (Xrm.Page.getAttribute("mp_cppzfa").getValue() != null) {
if (confirm("您确认要计算毛利吗?")) {
var rest = new fwREST();
var cppzfaId = Xrm.Page.getAttribute("mp_cppzfa").getValue()[0].id;
var rest_cppzfa = "mp_cppzfaSet?$select=mp_bbh&$filter=(statecode/Value eq 0) and (mp_cppzfaId eq (guid'" + cppzfaId + "'))";
var array_cppzfa = rest.get(rest_cppzfa);
for (var i = 0; i < array_cppzfa.length; i++) {
var bbh = array_cppzfa[i].mp_bbh;
if (bbh == null || bbh == undefined) bbh = 0;
var bbh = bbh + 1;
rest.update("mp_cppzfa", cppzfaId, "{'mp_bbh':'" + bbh + "'}", OnloadSwspUI);
}
}
}
}
检查是否有数据:
http://IP地址/MPTest/XRMServices/2011/OrganizationData.svc/mp_cppzfamxSet?$select=mp_lx,mp_xsbj,mp_zzyhdj,mp_bjnx,mp_isbj,mp_iszs,mp_isfw,mp_isjbfw,mp_bxp&$filter=(statecode/Value eq 0) and (mp_swsp/Id eq (guid'24FFA3A7-1411-E211-9C85-D4AE52A300B9'))