Skip to content

Instantly share code, notes, and snippets.

@mdull99
Last active July 3, 2024 03:47
Show Gist options
  • Save mdull99/b9df0d75404ca19e780dc079167f6aea to your computer and use it in GitHub Desktop.
Save mdull99/b9df0d75404ca19e780dc079167f6aea to your computer and use it in GitHub Desktop.
xxx.js
define([
"csi/api",
"csi/types",
"csi/xml",
"csi/widget/MessageDialog",
"csi/locale",
"csi/resolver",
"dojo/topic",
"dojo/_base/lang",
"csi/def/Action",
"csi/session",
"csi/state/rootStore",
"csi/page",
"csi/comm",
"csi/xml/Query",
"csi/xml/Search",
"csi/comm/PostRequest"
], function(api,types,xml,MessageDialog,locale,resolver,topic,lang,Action,session,{ sessionStore, routerStore },page,comm,Query,Search,PostRequest) {
//全局变量定义
var pluginsURL = window.location.origin + "/plmservice";
var currentUserUrl = sessionStore.currentUser.$URL;
var currentUserNode = sessionStore.currentUser;
//var currentUserName = sessionStore.currentUser.$Name;
var currentRole = sessionStore.currentUser.$Name;
//用户控制否打印组货相关的控制台日志,如果MiddleName=log
var currentUserMidName = currentUserNode.MiddleName;
// 获取过滤表格url list
function wrapCnls(ac) {
var cnlArray = ac.widget.getQueryResult().getChildResultUrls();
var cnls = "";
if (cnlArray.length === 0) {
jp.alert("未过滤数据!");
return cnls;
}
if (cnlArray.length > 1000) {
jp.alert("单次选择不成超过500条数据,请筛选后重新操作");
return cnls;
}
for (var i = 0; i < cnlArray.length; i++) {
if (cnls.length > 0)
cnls += ",";
cnls += cnlArray[i];
}
return cnls;
}
// 从缓存中取对象,如果没有缓存,则直接添加到缓存
function getNode(ac, url) {
return ac.m_cache.getNode(url) ? ac.m_cache.getNode(url) : ac.m_cache.addNode(url);
}
//1、如果配置了失效日期;如果缓存存入的时间小于失效日期,则清空缓存
//2、缓存最多有效时间为2小时
function getLocalStorage() {
var filedCache = localStorage.getItem("C8_Field_Right");
if (filedCache) {
//已经有缓存
var filedCacheNode = JSON.parse(filedCache);
var expire = new Date(filedCacheNode.expire);
var json = [{
attr: "Node Name", value: "字段权限", type: "string", op: "EQ", path: "Child:Subtype"
}, {attr: "Node Name", value: "缓存失效时间", type: "string", op: "EQ"}];
var node = getCommonURLMulAttr("LookupItem", json, "", "", true);
if (node) {
if (node.C8_LI_CacheTime > expire) {
return searchFieldRight();//重新获取缓存
} else if (new Date() - expire > 2 * 60 * 60 * 1000) {
//缓存超过2小时
return searchFieldRight();
}
return filedCacheNode;
}
} else {
return searchFieldRight();//无缓存
}
}
//根据type和node name获取URL
//array为数组,内部是json,属性为attr,op,value,type,path
function getCommonURLMulAttr(type, array, url, op, isNode) {
var mtResults = getCommonURLMulAttrList(type, array, url, op);
if (mtResults.length > 0) {
if (isNode) {
return mtResults[0];
} else {
return mtResults[0].$URL;
}
}
return "";
}
var rules = {}
//获取权限规则
function searchFieldRight() {
var rules = {}
var json = [{attr: "Node Name", value: "字段权限", type: "string", op: "EQ", path: "Child:Subtype"}];
var mtResults = getCommonURLMulAttrList("LookupItem", json, "", "");
mtResults.forEach(function (x) {
var v_rule = new Array();
if (x.C8_LI_RuleEXP.length > 0) {
var v_exp = x.C8_LI_RuleEXP.replace(/([^\u0000-\u00FF])/g, function ($) {
return escape($).toLowerCase().replace(/%u/g, "\\u");
}).replace("-", "\\u002d");
var v_expstr = {m_exp: v_exp}
v_rule.push(v_expstr);
}
if (x.C8_LI_RuleEXP1.length > 0) {
var v_exp1 = x.C8_LI_RuleEXP1.replace(/([^\u0000-\u00FF])/g, function ($) {
return escape($).toLowerCase().replace(/%u/g, "\\u");
}).replace("-", "\\u002d");
var v_expstr = {m_exp: v_exp1};
v_rule.push(v_expstr);
}
if (v_rule.length > 0) {
if (!rules.hasOwnProperty(x.C8_LI_AuditBO)) {
rules[x.C8_LI_AuditBO] = {}
}
;rules[x.C8_LI_AuditBO][x.C8_LI_AuditAttr] = v_rule;
}
})
setLocalStorage(rules);
return rules;
}
function getCommonURLMulAttrList(type, array, url, op) {
var mtquery = new Search();
var mq = mtquery.getQuery();
mq.Node(xml.PROP_TYPE, xml.OP_EQUALS, type);
if (op == "" || op == undefined) {
op = "EQ";
}
if (url != "" && url != undefined) {
mq.Node(xml.PROP_URL, op, url);
}
for (var i = 0; i < array.length; i++) {
var attr = array[i].attr;
var op1 = array[i].op;
var value = array[i].value;
var type = array[i].type;
var path = array[i].path;
if (op1 == "" || op1 == undefined) {
op1 = "EQ";
}
if (type != undefined && type.indexOf("ref") > -1) {
mq.RefAttr(attr, op1, value, path);
} else {
mq.Attr(attr, op1, value, path);
}
}
var resmt = mtquery.execute({sync: true});
return resmt.getResultNodes();
}
//将权限规则保存至本地;并设置当前时间
function setLocalStorage(obj) {
obj.expire = new Date();//设置有效时间
localStorage.setItem("C8_Field_Right", JSON.stringify(obj));
}
// 发送邮件 给角色
function SendMailToRole(ac, roleName, subject, content, urltext) {
var roleNode = "";
var arrUser = Array();
var search = new Search();
var q = search.getQuery();
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "Role")
.Attr("Node Name", xml.OP_EQUALS, roleName);
var res = search.execute({
sync: true
});
var results = res.getResultNodes();
if (results.length > 0) {
roleNode = results[0];
}
var Assignment = "";
var __Members__ = "";
Assignment = ac.m_cache.getNode(roleNode.Assignment, true);
if (Assignment.__Members__.length > 0) {
for (var i = 0; i < Assignment.__Members__.length; i++) {
arrUser.push(Assignment.__Members__[i]);
}
}
uniqueArr(arrUser);
content += "\n";
content += urltext;
if (arrUser.length > 0) {
ac.m_writer.callMethod("SiteAdmin", "EmailPageLink")
.addParameter("SendTo", "reflist", arrUser)
.addParameter("Subject", "string", subject)
.addParameter("ContentType", "string", "text/html")
.addParameter("Text", "string", content);
//jp.alert("邮件发送成功!");
};
}
// 数组去重
function uniqueArr(array) {
var n = []; //一个新的临时数组
//遍历当前数组
for (var i = 0; i < array.length; i++) {
//如果当前数组的第i已经保存进了临时数组,那么跳过,
//否则把当前项push到临时数组里面
if (n.indexOf(array[i]) == -1)
n.push(array[i]);
}
return n;
}
//校验字段权限
function checkFieldRight(view) {
if (view.defView.m_typeView != "Tabs" && view.defView.m_typeView != "Html" && view.defView.m_typeView != "Form") {
if (!view.defView.dataPointResolver || !view.defView.dataPointResolver.rcPage) {
return;
}
var nodetype = view.defView.dataPointResolver.rcPage.m_type;
if (!currentRole) {
return;
}
if (JSON.stringify(rules) != '{}') {
//设置当前视图字段rule exp
view.defView.m_headings.forEach(function (heading) {
var headList = [];
if (heading.bMatrixGroup) {
heading.m_subheadings.forEach(function (subHeading) {
headList.push(subHeading);
})
} else {
headList.push(heading);
}
headList.forEach(function (heading) {
//获取字段所在BO
if (!heading._rc) {
return;
}
if (!heading._rc.m_type) {
return;
}
var attrbo = heading._rc.m_type;
var v_exps = '';
//依次判断权限设置中是否包含相应的BO设置、字段设置
if (rules.hasOwnProperty(attrbo)) {
if (rules[attrbo].hasOwnProperty(heading.m_id)) {
//判断是否已经存在m_action m_rules设置 或 未定义,(如 xml中字段的ref定义等)
if (!heading.hasOwnProperty('m_action') || !heading.m_action) {
heading.m_action = lang.mixin(new Action(), {
m_rules: [],
m_id: "Action",
m_name: "Action",
m_right: "Write",
m_typeControl: "Link"
});
}
if (!heading.m_action.hasOwnProperty('m_rules') || !heading.m_action.m_rules) {
heading.m_action["m_rules"] = [];
}
rules[attrbo][heading.m_id].forEach(function (y, i) {
heading.m_action.m_rules.push({
m_exp: y.m_exp, bApplyToForm: false, __proto__: proto.__proto__
});
v_exps = y.m_exp + '; ' + v_exps;
})
}
}
//管理员角色时,显示字段提示信息,辅助查看权限设置
if (currentRole == "Administrator") {
heading.m_tooltip = heading.m_id + ':' + unescape(v_exps.replace(/\\/g, "%"));
}
})
});
}
}
}
//获取enum的Value值,去掉enumList的名称
function getEnumValue(enumValue){
var retStr = "";
if(!enumValue || enumValue==null || enumValue==""){
retStr = "";
}else{
if(enumValue.indexOf(":")>0){
var index = enumValue.indexOf(":");
if(enumValue.endsWith(":")){
retStr = "";
}else{
retStr = enumValue.substring(index+1);
}
}else{
retStr = "";
}
}
return retStr;
}
// 查找Node Type+Node Name唯一的对象URL,如类型等
function searchNodeURL(type, name) {
var returnValue = "";
var resultNode = searchNode(type,name);
if(resultNode){
returnValue = resultNode.$URL;
}
return returnValue;
};
// 查找Node Type+Node Name唯一的对象URL,如类型等
function searchNode(type, name) {
var search = new Search();
var q = search.getQuery();
var returnValue;
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, type)
.Attr("Node Name", xml.OP_EQUALS, name);
var res = search.execute({
sync: true
});
var results = res.getResultNodes();
if (results.length != 0 && results.length != null) {
returnValue = results[0];
}
return returnValue;
};
// 查找Node Type+Code 唯一的对象URL,如产品等
function searchNodebyCode(type, code) {
var search = new Search();
var q = search.getQuery();
var returnValue = "";
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, type)
.Attr("Code", xml.OP_EQUALS, code);
var res = search.execute({
sync: true
});
var results = res.getResultNodes();
if (results.length != 0 && results.length != null) {
returnValue = results[0];
}
return returnValue;
};
// 查找Node Type+Node Name唯一的对象URL,如类型等
function searchNodeURLWithParent(type, name, parentURL) {
var search = new Search();
var q = search.getQuery();
var returnValue = "";
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, type)
.Attr("Node Name", xml.OP_EQUALS, name)
.RefAttr("__Parent__", xml.OP_EQUALS, parentURL);
var res = search.execute({
sync: true
});
var results = res.getResultNodes();
if (results.length != 0 && results.length != null) {
returnValue = results[0].$URL;
}
return returnValue;
};
// 查找规则表 - dependcyPath查询每张表的规则
function searchRuleTable(monthNode) {
var ruleTable = {};
var search = new Search();
var q = search.getQuery();
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "SpecificationDataSheet")
.RefAttr("C8_SD_YearSeaon", xml.OP_EQUALS, monthNode.C8_MC_Season)
.Attr("C8_SD_Channel", xml.OP_EQUALS, monthNode.C8_MC_Channel)
.Attr("C8_SD_Brand", xml.OP_EQUALS, monthNode.C8_MC_Brand)
.Attr("C8_SD_ProductSeriation", xml.OP_EQUALS, monthNode.C8_MC_Series)
.RefAttr("__Parent__", xml.OP_EQUALS, "centric://REFLECTION/INSTANCE/_CS_Data/null");
var dependcyPath = ["Child:CurrentRevision/Child:Items"];
search = search.addDependencyPaths(dependcyPath);
var res = search.execute({ sync: true });
var rulesNode = res.getNonResultNodes();
//将规则表按照编号存储
if(rulesNode){
rulesNode.forEach(function(node,index){
if(node.$Type == "SpecificationDataSheetItem"){
var tableNum = getEnumValue(node.UR_SDS_TableRule);
if(tableNum && tableNum!=""){
if(ruleTable[tableNum]){
ruleTable[tableNum].push(node);
}else{
ruleTable[tableNum]=[];
ruleTable[tableNum].push(node);
}
}
}
});
}
return ruleTable;
};
//查找品类管控规则 Agnes: 品类管控变更
function searchControlRules(monthNode) {
var keySet = new Set();
var search = new Search();
var q = search.getQuery();
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "SpecificationDataSheet")
.Attr("Node Name", xml.OP_EQUALS, "组货管控规则", "Child:Subtype")
.Attr("C8_SD_Channel", xml.OP_EQUALS, monthNode.C8_MC_Channel)
.Attr("C8_SD_Brand", xml.OP_EQUALS, monthNode.C8_MC_Brand)
.Attr("C8_SD_ProductSeriation", xml.OP_EQUALS, monthNode.C8_MC_Series)
.RefAttr("__Parent__", xml.OP_EQUALS, "centric://REFLECTION/INSTANCE/_CS_Data/null");
var dependcyPath = ["Child:CurrentRevision/Child:Items"];
search = search.addDependencyPaths(dependcyPath);
var res = search.execute({ sync: true });
var rulesNode = res.getNonResultNodes();
//将规则内容提取控制keyset:(渠道_品牌_系列,不需要,组货的skc这部分都相同)品类_中品类_子品类_级别
if(rulesNode){
rulesNode.forEach(function(node,index){
if(node.$Type == "SpecificationDataSheetItem"){
//getEnumValue(monthNode.C8_MC_Channel) + getEnumValue(monthNode.C8_MC_Brand) + getEnumValue(monthNode.C8_MC_Series) +
var key = getEnumValue(node.UR_SDS_ProductLargeType) + getEnumValue(node.UR_SDS_MiddleCategoryType) + getEnumValue(node.UR_SDS_Silhouette) + getEnumValue(node.UR_SDS_DSLevel);
keySet.add(key);
}
});
}
return keySet;
}
/**
* 创建会话Comments Agnes 20231019
* docContainer: DocumentContainer URL
* subject: 会话主题
* mentions: @的用户URL list
* comments: 会话内容
*/
function createConversation(ac, docContainer, subject, mentions, comments) {
var newUrl = comm.createUrl("Comment");
ac.m_writer.createNode(newUrl, "Comment")
.changeAttribute("Node Name", "string", subject)
.changeAttribute("Author", "ref", currentUserUrl)
.changeAttribute("Revision", "ref", "centric:")
.changeAttribute("ThreeDInfo", "string", null)
.changeAttribute("Comment", "string", comments)
.changeAttribute("Mentions", "refset", mentions);
ac.m_writer.callMethod("SiteAdmin", "AttachComment")
.addParameter("ParentURL", "ref", docContainer)
.addParameter("URL", "ref", newUrl);
}
//通过用户组名称取用户
function getGroup(ac, name) {
var GroupAssignment = searchNodeURL("GroupAssignment", name);
var groupNode = getNode(ac, GroupAssignment);
var list = [];
var users = groupNode.__Members__;
for (var i = 0; i < users.length; i++) {
list.push(users[i]);
}
return list;
};
//获取月度目标的key-商品层-品类-中类
function getMonthTargetKey(monthTargetNode,isDisplay,isDianShang){
var commodityType = monthTargetNode.C8_MCM_CommodityType;
var category = monthTargetNode.C8_MCM_ProductLargeType;
var midCategory = monthTargetNode.C8_MCM_CategoryInPlan;
var classLevel = monthTargetNode.C8_MCM_DSLevel;
var subCategory = monthTargetNode.UR_MCM_Silhouette;
if(isDianShang){
if(isDisplay){
return "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】【"+locale.getEnumName(subCategory)+"】【"+locale.getEnumName(classLevel)+"】";
}else{
return getEnumValue(commodityType)+getEnumValue(category)+getEnumValue(midCategory)+getEnumValue(classLevel)+getEnumValue(subCategory);
}
}else{
if(isDisplay){
return "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】【"+locale.getEnumName(subCategory)+"】";
}else{
return getEnumValue(commodityType)+getEnumValue(category)+getEnumValue(midCategory)+getEnumValue(subCategory);
}
}
}
//根据条件获取规则表条目
//filterRule: {} 规则表字段,全部符合才返回,主要用于过滤商品层,品类,中品类等维度
function filterRuleTable(ruleTable,tableNum,ifFirst,filterRule){
var returnRules = [];
if(tableNum && ruleTable[tableNum]){
ruleTable[tableNum].forEach(function(ruleNode,index){
if(filterRule){
var ifReturn = true;
Object.keys(filterRule).forEach(function(rule){
var targetValue = filterRule[rule];
var nodeValue = ruleNode[rule];
if(targetValue != nodeValue){ifReturn = false;}
});
if(ifReturn){
returnRules.push(ruleNode);
}
}else{
returnRules.push(ruleNode);
}
});
}
if(ifFirst && returnRules.length>0){
return returnRules[0];
}else{
return returnRules;
}
}
function HaiWaiCalculateClean(ac){
var startTime = new Date();
var loadingMessage = "正在执行组货取消确认,请耐心等待................";
var loading = jp.loading(loadingMessage);
var currentNode = routerStore.locationNode;
var weekURL = ac.m_urlParent;
printLog("========开始执行时间:"+startTime);
var weekNode = getNode(ac,weekURL);
var weekHYNode = getNode(ac,weekURL);
var monthNode = getNode(ac,weekNode.PrimaryCollection);
//1.获取规则表
//var ruleTableNode = searchRuleTable(monthNode);
//1+.获取品类管控规则表 Agnes 20240223 品类管控变更
var controlRuleKeys = searchControlRules(monthNode);
//2.获取目标表
var targetTableNode = searchHyTargetTable(weekNode);
printLog("获取规则表,目标表完成");
//3.获取计算skc数据表所需要的数据信息
var resultURLs = weekNode.LookProducts;//ac.widget.getQueryResult().store._allResultUrls;
//4. 获取计算所需要的数据,封装到JSON中,便于后续校验和计算
var beginTime = new Date();
var skcsData = getAndGroupSKCDataHW(ac,resultURLs, controlRuleKeys);
//4.深度 G表计算组货宽度
//错误信息声明
var errMsg = [];
var weekList = targetTableNode.weekTarget;
var orderType = getEnumValue(monthNode.C8_MC_MonthOrderAattribute);
//品类循环
var categoryList = skcsData.categoryKey;
Object.keys(categoryList).forEach(function(key){
var weekTargetNode = targetTableNode.weekTarget[key];
if(weekTargetNode == undefined){
weekTargetNode = targetTableNode.weakWeekTarget[key];
if(weekTargetNode == undefined) {
return;
}
}
var monthTargetNode = weekTargetNode.monthTarget;
ac.m_writer.changeNode(weekTargetNode.$URL).changeAttribute("C8_MCMC_GroupGoodsSKCFinish", "double", 0)//组货SKC
.changeAttribute("C8_MCMC_GroupGoodsAmountFinish", "double", 0)//组货金额
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish", "double", 0)//组货深度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish", "double", 0);//组货深度平均价
ac.m_writer.execute({ sync: true });//由于要用到月度数据 必须先提交事务
monthTargetNode = ac.m_cache.addNode(monthTargetNode.$URL);
if(monthTargetNode.C8_MCM_MonthGroupGoodsDepth != 0) {
ac.m_writer.changeNode(monthTargetNode.$URL).changeAttribute("C8_MCM_PlannedAvgPrice", "double", monthTargetNode.C8_MCM_MonthGroupGoodsAmount / monthTargetNode.C8_MCM_MonthGroupGoodsDepth)//组货SKC
}
});
jp.close(loading);
var endTime = new Date();
printLog("========结束执行时间:"+endTime);
}
//flag用于区分是检核flase 还是确认true force判断是否强制确认 Jarvis
function HaiWaiCalculate(ac,flag,force){
var startTime = new Date();
var loadingMessage = "正在执行组货计算,请耐心等待................";
var loading = jp.loading(loadingMessage);
var currentNode = routerStore.locationNode;
var weekURL = ac.m_urlParent;
printLog("========开始执行时间:"+startTime);
var weekNode = getNode(ac,weekURL);
var weekHYNode = getNode(ac,weekURL);
var monthNode = getNode(ac,weekNode.PrimaryCollection);
var errorMsg = checkRequiredToConfirm(ac, 3);
if (errorMsg) {
jp.alert(errorMsg);
return
}
//1.获取规则表
var ruleTableNode = searchRuleTable(monthNode);
//1+.获取品类管控规则表 Agnes 20240223 品类管控变更
var controlRuleKeys = searchControlRules(monthNode);
//2.获取目标表
var targetTableNode = searchHyTargetTable(weekNode);
printLog("获取规则表,目标表完成");
//3.获取计算skc数据表所需要的数据信息
var resultURLs = weekNode.LookProducts;//ac.widget.getQueryResult().store._allResultUrls;
//4. 获取计算所需要的数据,封装到JSON中,便于后续校验和计算
var beginTime = new Date();
var skcsData = getAndGroupSKCDataHW(ac,resultURLs, controlRuleKeys);
//4.深度 G表计算组货宽度
//错误信息声明
var errMsg = [];
var GList = ruleTableNode.G;
var FList = ruleTableNode.F;
var weekList = targetTableNode.weekTarget;
var zhPrice = 0;
var zhVolumn = 0;
var skcs = 0;
var orderType = getEnumValue(monthNode.C8_MC_MonthOrderAattribute);
var lookProducts = weekHYNode.LookProducts;
var mcNode = monthNode;
var groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
var allskc = 0;
for(var i=0;i<lookProducts.length;i++){
var mcProductNode = getNode(ac,lookProducts[i]);
updateURStyleAttributesGroupBillNo(ac, mcProductNode, groupOrderAattribute, currentNode, weekNode.C8_ML_Week, true, 2);
var allDepth = 0;
var storeVolumnMap = new Map(Object.entries(mcProductNode.C8_MCP_AdjustingDepthHy));
for (const [volumnkey, value] of storeVolumnMap) {
if(key == volumnkey && value != 0){
allskc = allskc + 1;
}
allDepth = allDepth + value; //统计SKC下深度 不根据店群区分
}
ac.m_writer.changeNode(mcProductNode.C8_MCP_SKC).changeAttribute("C8_CW_HWChangeTag","boolean",false);
//统计组货深度
ac.m_writer.changeNode(mcProductNode.C8_MCP_SKC).changeAttribute("C8_CW_HWDepth","integer",allDepth);
ac.m_writer.changeNode(mcProductNode.$URL).changeAttribute("C8_MCP_AdjustingDepth","integer",allDepth);//调整深度
ac.m_writer.changeNode(mcProductNode.$URL).changeAttribute("C8_MCP_SuggestedDepth","integer",allDepth);//建议深度
//20240415 计算组货金额 汇总到国内电商同一字段
if(null != mcProductNode.C8_MCP_AdjustingAmountHy) {
var allAmount = 0;
var storeAmountMap = new Map(Object.entries(mcProductNode.C8_MCP_AdjustingAmountHy));
for (const [amountkey, value] of storeAmountMap) {
allAmount = allAmount + value; //统计SKC下深度 不根据店群区分
}
ac.m_writer.changeNode(mcProductNode.$URL).changeAttribute("C8_MCP_SuggestedAmount", "double", allAmount);//建议金额
}
}
if(orderType && (orderType==="E" || orderType==="F" || orderType==="T")){
//将结果写入SKC上,海外组货深度,组货单号
Object.keys(skcsData.categoryKey).forEach(function(key){
var catKeyNode = skcsData.categoryKey[key];
var categorySKCList = catKeyNode.list;
if(categorySKCList != undefined) {
categorySKCList.forEach(function (skcId) {
var skcNode = skcsData.list[skcId];
ac.m_writer.changeNode(skcId)
// .changeAttribute("C8_CW_HWDepth", "integer", skcNode.finalQty)
.changeAttribute("C8_CW_HWPick", "boolean", true)
.changeAttribute("UR_CW_GroupBillNo", "ref", weekURL);
//更新SKC上的确认唯一码UR_Colorway_OKCode:如果是计划单用UR_Colorway_PLMUniqueValue,否则用UR_Colorway_OriginalUniqueCode
// if(orderType == "N"){//计划单
// ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_PLMUniqueValue",true);
// }else{
// ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_OriginalUniqueCode",true);
// }
//0521 不分渠道 都取UR_Colorway_PLMUniqueValue
var urSkcNode = getNode(ac, skcId);
if (urSkcNode.UR_Colorway_OKCode == "") {
ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode", "UR_Colorway_PLMUniqueValue", true);
}
//0530 Jarvis 渠道款设置编辑
var styleNode = getNode(ac,urSkcNode.__Parent__);
ac.m_writer.changeNode(styleNode.$URL).changeAttributeFlag("UR_Style_KNSStyle", xml.ATTR_FLAG_NOEDIT, true);
ac.m_writer.changeNode(styleNode.Attributes).changeAttributeFlag("UR_StyleAttributes_GroupCarPrice", xml.ATTR_FLAG_NOEDIT, true);
});
}
});
if(flag){
//如果是应急单,则组货确认时,不做检查,等同于强制确认
jp.alert("海外组货确认完成!");
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Complete");
}else{
jp.alert("海外组货检核完成!");
}
if (ac.widget.viewParent.getChildView("C8_HWWeekTargets") != undefined) {
ac.widget.viewParent.getChildView("C8_HWWeekTargets").refreshData();
}
// var LookProducts = weekNode.LookProducts;
// var mcNode = getNode(ac, weekNode.__Parent__);
// var groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
// for (var i = 0; i < LookProducts.length; i++) {
// var lookProductNode = getNode(ac, LookProducts[i]);
// updateURStyleAttributesGroupBillNo(ac, lookProductNode, groupOrderAattribute, currentNode, weekNode.C8_ML_Week, true, 2);
// }
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("UR_ML_Send_Ready_Flag", "boolean", "true");
ac.m_writer.changeNode(weekNode.__Parent__).changeAttribute("UR_MC_Send_Ready_Flag", "boolean", "true");
ac.widget.refreshData();
return true;
}
//F表 匹配
if(FList == undefined){
jp.alert("在月度单号占比表没找到对应的数据,请检查!");
return;
}
if(GList == undefined){
jp.alert("在组货金额,宽度,平均单价,平均深度检核参数表没找到对应的数据,请检查!");
return;
}
//品类循环 先清空之前的数据
var categoryList = skcsData.categoryKey;
Object.keys(categoryList).forEach(function(key){
var weekTargetNode = targetTableNode.weekTarget[key];
if(weekTargetNode == undefined){
weekTargetNode = targetTableNode.weakWeekTarget[key];
if(weekTargetNode == undefined) {
return;
}
}
var monthTargetNode = weekTargetNode.monthTarget;
ac.m_writer.changeNode(weekTargetNode.$URL).changeAttribute("C8_MCMC_GroupGoodsSKCFinish", "double", 0)//组货SKC
.changeAttribute("C8_MCMC_GroupGoodsAmountFinish", "double", 0)//组货金额
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish", "double", 0)//组货深度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish", "double", 0);//组货深度平均价
ac.m_writer.execute({ sync: true });//由于要用到月度数据 必须先提交事务
monthTargetNode = ac.m_cache.addNode(monthTargetNode.$URL);
if(monthTargetNode.C8_MCM_MonthGroupGoodsDepth != 0) {
ac.m_writer.changeNode(monthTargetNode.$URL).changeAttribute("C8_MCM_PlannedAvgPrice", "double", monthTargetNode.C8_MCM_MonthGroupGoodsAmount / monthTargetNode.C8_MCM_MonthGroupGoodsDepth)//组货SKC
}
});
//获取最低深度并且判断
for(var i=0;i<resultURLs.length;i++){
var mcProductNode = getNode(ac,resultURLs[i]);
var lowDepthHy = mcProductNode.C8_MCP_SpecialLowDepthHy;
var adDepthHyMap = new Map(Object.entries(mcProductNode.C8_MCP_AdjustingDepthHy));
for (const [key, value] of adDepthHyMap) {
if(lowDepthHy[key] != undefined){
if(value > lowDepthHy[key]){
printLog("调整深度大于最低深度,验证通过!");
}else{
var customerNode = getNode(ac,key);
errMsg.push("店群为:【" + customerNode.$Name + "】的调整深度小于最低深度,请调整!");
}
}
}
}
//用于记录已循环过的品类 其中G表一定要有该数据
var typeList = [];
var isLastOrder = weekHYNode.UR_ML_IsLastOrder;//是否月末单号
var skcsList = skcsData.skcIds;
// if(skcsList.length == 0){
// jp.alert("此单号下没有SKC,不能进行检核!");
// return true;
// }
skcsList.forEach(function(skcId){
var skcNode = skcsData.list[skcId];
if(Object.keys(skcNode.store).length == 0){
errMsg.push("SKC为:" + skcNode.skcCode + "的店铺没有维护产品等级信息!不能进行检核!");
return;
}
var catFlag = typeList.includes(skcNode.catId);
var midFlag = typeList.includes(skcNode.catId+skcNode.midCatId);
if(catFlag || midFlag){
printLog("与"+ skcNode.skcCode + "相同的品类或者品类+中品类的数据已计算,不再重复计算!")
return;
}
var series = skcNode.originalSeries;
// var mtquery = new Search();
// var mq = mtquery.getQuery();
// mq.Node(xml.PROP_TYPE, xml.OP_EQUALS, "StyleAttributes")
// .Attr("Code", xml.OP_EQUALS, skcNode.styleId, "Child:__Parent__");
// var resmt = mtquery.execute({sync: true});
// var mtResults = resmt.getResultNodes();
// if (mtResults.length > 0) {
// series = mtResults[0].UR_StyleAttributes_OriginalSeries;
// }
Object.keys(skcNode.store).forEach(function(key) {
var weekGroupGoodsAmountFinish = 0;
var weekGroupGoodsDepthFinish = 0;
//,UR_SDS_MiddleCategoryType:skcNode.midCatId 中品类过滤取消 20240321
var tableRuleTG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_MiddleCategoryType:skcNode.midCatId,UR_SDS_Dimension:"UR_enum_Dimension:组货宽度"});
if(tableRuleTG.length == 0){ //如果查询为空,则取消中品类再次查询,如果再为空代表配置表没有数据 Jarvis
tableRuleTG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_Dimension:"UR_enum_Dimension:组货宽度"});
if(tableRuleTG.length == 0){
// var arr = "【" + skcNode.skcCode+ "】在查询组货金额,宽度,平均单价,平均深度检核参数表中未在配置表查到【组货宽度】数据!";
// if(!errMsg.includes(arr)){
// errMsg.push(arr);
// }
return;
}else{
if(!typeList.includes(skcNode.catId)){
typeList.push(skcNode.catId);
}
}
}else{
if(!typeList.includes(skcNode.catId+skcNode.midCatId)){
typeList.push(skcNode.catId+skcNode.midCatId);
}
}
var allskcs = 0;
var customerNode = getNode(ac,tableRuleTG.UR_SDS_Customer);
var tsName = "【" + customerNode.$Name+ "】【" + locale.getEnumName(skcNode.commodityType) + "】【" + locale.getEnumName(tableRuleTG.UR_SDS_ProductLargeType)+ "】【" + locale.getEnumName(tableRuleTG.UR_SDS_MiddleCategoryType) +"】";
if(getEnumValue(tableRuleTG.UR_SDS_Dimension) == "组货宽度"){
//月目标SKU数
var monthKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleTG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var weekKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleTG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var mTarget = targetTableNode.monthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weekTarget[weekKeyStr];//周目标
if(mTarget == undefined || weekNode == undefined){ //有可能目标表没有数据,SKC有了
return;
}
if(getEnumValue(tableRuleTG.UR_SDS_MiddleCategoryType) != ""){
var mTarget = targetTableNode.weakMonthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weakWeekTarget[weekKeyStr];//周目标
}
var gdskc = mTarget.C8_MCM_PlannedSKC;
var allSku = mTarget.C8_MCM_MonthGroupGoodsSKC;//组货SKC
var skcs = skcsData.categoryKey[skcNode.categoryKey+key].skcs;//实际SKC
allskcs = skcs + mTarget.C8_MCM_MonthGroupGoodsSKC; //加上月已组
if(weekNode == undefined){//可能存在目标表没有店群 跳过循环
return ;
}
//获取规则表的上下限
var minskcs = parseFloat((gdskc * tableRuleTG.UR_SDS_MonthLowerRate).toFixed(2));
var maxskcs = parseFloat((gdskc * tableRuleTG.UR_SDS_MonthUpperRate).toFixed(2));
if(isLastOrder) {
if (minskcs <= allskcs && allskcs <= maxskcs) {
console.log(typeKey + "的skc条件满足");
} else {
var arr =tsName + "的实际SKC数为:" + allskcs + ",SKC数下限为:" + minskcs + ",SKC数上限为:" + maxskcs + "因此不满足SKC数要求,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}else{
if(skcs <= maxskcs){
console.log(typeKey + "的skc条件满足");
}else{
var arr =tsName + "的实际SKC数为:" + allskcs + ",SKC数上限为:" + maxskcs + "因此不满足SKC数要求,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_MCMC_GroupGoodsSKCFinish","integer",skcs);
ac.m_writer.changeNode(mTarget.$URL).changeAttribute("C8_MCM_MonthGroupGoodsSKC","integer",allskcs);
//ac.m_writer.execute({sync: true});//后面计算需要用到SKC数 (提交事务的值,可以暂存起来后面用)
}
var tableRuleJG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_MiddleCategoryType:skcNode.midCatId,UR_SDS_Dimension:"UR_enum_Dimension:组货金额"});
if(tableRuleJG.length == 0){ //如果查询为空,则取消中品类再次查询,如果再为空代表配置表没有数据 Jarvis
tableRuleJG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_Dimension:"UR_enum_Dimension:组货金额"});
if(tableRuleJG.length == 0){
// var arr = "【" + skcNode.skcCode+ "】在查询组货金额,宽度,平均单价,平均深度检核参数表中未在配置表查到【组货金额】数据!";
// if(!errMsg.includes(arr)){
// errMsg.push(arr);
// }
return;
}
}
var allzhPrice = 0; //整月的实际企划金额
var allzhVolumn = 0;//整夜的实际企划宽度
var customerNode = getNode(ac,tableRuleJG.UR_SDS_Customer);
var tsName = "【" + customerNode.$Name+ "】【" + locale.getEnumName(skcNode.commodityType) + "】【" + locale.getEnumName(tableRuleJG.UR_SDS_ProductLargeType)+ "】【" + locale.getEnumName(tableRuleJG.UR_SDS_MiddleCategoryType) +"】";
//企划金额 深度统计
if(getEnumValue(tableRuleJG.UR_SDS_Dimension) == "组货金额"){
//月目标SKU数
var monthKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleJG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var weekKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleJG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var mTarget = targetTableNode.monthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weekTarget[weekKeyStr];//周目标
if(getEnumValue(tableRuleJG.UR_SDS_MiddleCategoryType) != ""){
var mTarget = targetTableNode.weakMonthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weakWeekTarget[weekKeyStr];//周目标
}
if(weekNode == undefined){//可能存在目标表没有店群 跳过循环
return ;
}
var typeKey = skcNode.commodityTypeKey+getEnumValue(tableRuleJG.UR_SDS_ProductLargeType)+getEnumValue(tableRuleJG.UR_SDS_MiddleCategoryType);
var storeKey = typeKey+tableRuleJG.UR_SDS_Customer;
if(skcsData.categoryKey.hasOwnProperty(typeKey) ) { //&& getEnumValue(GNode.UR_SDS_Dimension)=="组货宽度"
var jMap = new Map();//记录相同品类的深度 以及 金额
var hylist = skcsData.categoryKey[typeKey].hylist;
hylist.forEach(function (map) {
for (var k = 0; k < map.length; k++) {
var resMap = map[k];
//金额
var price = resMap.get(storeKey+"price");
if(price != undefined){
if(jMap.has(storeKey+"price")){
jMap.set(storeKey+"price",jMap.get(storeKey+"price")+price);
}else{
jMap.set(storeKey+"price",price);
}
}
//宽度
var volumn = resMap.get(storeKey+"volumn");
if(volumn != undefined){
if(jMap.has(storeKey+"volumn")){
jMap.set(storeKey+"volumn",jMap.get(storeKey+"volumn")+volumn);
}else{
jMap.set(storeKey+"volumn",volumn);
}
}
}
})
//拿到金额后 判断上下限
console.log(jMap.toString());
zhPrice = jMap.get(storeKey+"price");
zhVolumn = jMap.get(storeKey+"volumn");
//查询其他单号里面的金额获取到最终月金额
// 0607(月度下面有mcmc对象的值)
// var search = new Search();
// var q = search.getQuery();
// q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterialColor")
// .RefAttr("C8_MCM_Store", xml.OP_EQUALS, tableRuleJG.UR_SDS_Customer,"Child:__Parent__")
// .Attr("C8_MCM_CommodityType", xml.OP_EQUALS, skcNode.commodityType,"Child:__Parent__")
// .Attr("C8_MCM_ProductLargeType", xml.OP_EQUALS, tableRuleJG.UR_SDS_ProductLargeType,"Child:__Parent__")
// .RefAttr("__Parent__", xml.OP_EQUALS,mTarget.$URL);
// if(getEnumValue(tableRuleJG.UR_SDS_MiddleCategoryType) != ""){
// q.Attr("C8_MCM_CategoryInPlan", xml.OP_EQUALS, tableRuleJG.UR_SDS_MiddleCategoryType,"Child:__Parent__");
// }
// var res = search.execute({sync: true});
// var results = res.getResultNodes();
var mcmUrl = mTarget.Colors;
for(var j=0;j<mcmUrl.length;j++){
if(weekNode.$URL == mcmUrl[j]){
allzhPrice = allzhPrice + zhPrice;
allzhVolumn = allzhVolumn + zhVolumn;
}else{
var mcmcNode = getNode(ac,mcmUrl[j]);
allzhPrice = allzhPrice + mcmcNode.C8_MCMC_GroupGoodsAmountFinish;
allzhVolumn = allzhVolumn + mcmcNode.C8_MCMC_GroupGoodsDepthFinish;
}
}
if(zhPrice != undefined){
//企划金额上下限
var mount = mTarget.C8_MCM_PlannedAmount;//目标企划金额
var minPrice = mount * tableRuleJG.UR_SDS_MonthLowerRate;
var maxPrice = mount * tableRuleJG.UR_SDS_MonthUpperRate;
//获取目标表数据比较
if(typeKey + tableRuleJG.UR_SDS_Customer == storeKey) {
if(isLastOrder) {
//判断上下限 金额
if (minPrice <= allzhPrice && allzhPrice <= maxPrice) {
console.log("企划金额满足条件!");
} else {
var arr = tsName + "的实际企划金额为:" + allzhPrice + "下限企划金额为:" + minPrice + "上限企划金额为:" + maxPrice + ",因此不满足条件,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}else{
if(allzhPrice <= maxPrice){
console.log(typeKey + "企划金额满足条件");
}else{
var arr = tsName + "的实际企划金额为:" + allzhPrice + "上限企划金额为:" + maxPrice + ",因此不满足条件,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}
}
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish", "double", zhPrice);
weekGroupGoodsAmountFinish = zhPrice;//组货金额
ac.m_writer.changeNode(mTarget.$URL).changeAttribute("C8_MCM_MonthGroupGoodsAmount", "double", allzhPrice);
}else{
jp.alert("调整企划金额不存在,请检查数据!");
return;
}
if(zhVolumn != undefined){
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_MCMC_GroupGoodsDepthFinish","double",zhVolumn);
weekGroupGoodsDepthFinish = zhVolumn;
ac.m_writer.changeNode(mTarget.$URL).changeAttribute("C8_MCM_MonthGroupGoodsDepth", "double", allzhVolumn);
//0607修改 注釋 提交事務
//ac.m_writer.execute({sync: true});
}
}
}
var tableRuleSG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_MiddleCategoryType:skcNode.midCatId,UR_SDS_Dimension:"UR_enum_Dimension:平均深度"});
if(tableRuleSG.length == 0){ //如果查询为空,则取消中品类再次查询,如果再为空代表配置表没有数据 Jarvis
tableRuleSG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_Dimension:"UR_enum_Dimension:平均深度"});
if(tableRuleSG.length == 0){
// var arr = "【" + skcNode.skcCode+ "】在查询组货金额,宽度,平均单价,平均深度检核参数表中未在配置表查到【平均深度】数据!";
// if(!errMsg.includes(arr)){
// errMsg.push(arr);
// }
return;
}
}
var customerNode = getNode(ac,tableRuleSG.UR_SDS_Customer);
var tsName = "【" + customerNode.$Name+ "】【" + locale.getEnumName(skcNode.commodityType) + "】【" + locale.getEnumName(tableRuleSG.UR_SDS_ProductLargeType)+ "】【" + locale.getEnumName(tableRuleSG.UR_SDS_MiddleCategoryType) +"】";
//企划金额 深度统计
if(getEnumValue(tableRuleSG.UR_SDS_Dimension) == "平均深度"){
//月目标SKU数
var monthKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleSG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var weekKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleSG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var mTarget = targetTableNode.monthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weekTarget[weekKeyStr];//周目标
if(getEnumValue(tableRuleSG.UR_SDS_MiddleCategoryType) != ""){
var mTarget = targetTableNode.weakMonthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weakWeekTarget[weekKeyStr];//周目标
}
//深度在前面提交了,可以直接取值
//var avgDepth = weekNode.C8_MCMC_GroupGoodsDepthFinish / weekNode.C8_MCMC_GroupGoodsSKCFinish;
var avgDeth = 0;//实际深度
if((mTarget.C8_MCM_MonthGroupGoodsSKC + weekNode.C8_MCMC_GroupGoodsSKCFinish) != 0){
var avgDeth = (allzhVolumn + weekNode.C8_MCMC_GroupGoodsDepthFinish)/(allskcs + weekNode.C8_MCMC_GroupGoodsSKCFinish);//实际
avgDeth = avgDeth.toFixed(2);
}
//得到平均上下限
var weekavgDeth = mTarget.C8_MCM_PlannedDepth; //企划平均深度
var minavgDeth = weekavgDeth * tableRuleSG.UR_SDS_MonthLowerRate;
var maxavgDeth = weekavgDeth * tableRuleSG.UR_SDS_MonthUpperRate;
if(typeKey + tableRuleSG.UR_SDS_Customer == storeKey){
//判断上下限 深度
if(isLastOrder){
if(minavgDeth <= avgDeth && avgDeth <= maxavgDeth){
console.log("平均深度满足条件!");
}else{
var arr = tsName + "的实际平均深度为:"+avgDeth+"下限平均深度为:"+minavgDeth.toFixed(2)+"上限平均深度为:"+maxavgDeth.toFixed(2)+",因此不满足条件,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}else{
if(avgDeth <= maxavgDeth){
console.log("平均深度满足条件!");
}else{
var arr = tsName + "的实际平均深度为:"+avgDeth+"上限平均深度为:"+maxavgDeth.toFixed(2)+",因此不满足条件,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}
}
}
var tableRuleDG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_MiddleCategoryType:skcNode.midCatId,UR_SDS_Dimension:"UR_enum_Dimension:平均单价"});
if(tableRuleDG.length == 0){ //如果查询为空,则取消中品类再次查询,如果再为空代表配置表没有数据 Jarvis
tableRuleDG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_Dimension:"UR_enum_Dimension:平均单价"});
if(tableRuleDG.length == 0){
// var arr = "【" + skcNode.skcCode+ "】在查询组货金额,宽度,平均单价,平均深度检核参数表中未在配置表查到【平均单价】数据!";
// if(!errMsg.includes(arr)){
// errMsg.push(arr);
// }
return;
}
}
var customerNode = getNode(ac,tableRuleDG.UR_SDS_Customer);
var tsName = "【" + customerNode.$Name+ "】【" + locale.getEnumName(skcNode.commodityType) + "】【" + locale.getEnumName(tableRuleDG.UR_SDS_ProductLargeType)+ "】【" + locale.getEnumName(tableRuleDG.UR_SDS_MiddleCategoryType) +"】";
//企划金额 深度统计
if(getEnumValue(tableRuleDG.UR_SDS_Dimension) == "平均单价"){
//月目标SKU数
var monthKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleDG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var weekKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleDG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var mTarget = targetTableNode.monthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weekTarget[weekKeyStr];//周目标
if(getEnumValue(tableRuleDG.UR_SDS_MiddleCategoryType) != ""){
var mTarget = targetTableNode.weakMonthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weakWeekTarget[weekKeyStr];//周目标
}
if(weekNode == undefined){//可能存在目标表没有店群 跳过循环
return ;
}
var avgPrice = 0;
if(weekGroupGoodsDepthFinish != 0){
avgPrice = weekGroupGoodsAmountFinish / weekGroupGoodsDepthFinish;
}
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish","double",avgPrice);
// var colors = mTarget.Colors;//月下所有的单号
// colors.forEach(function(weekUrl){
// if(weekUrl != weekNode.$URL){
// var oldWeekNode = getNode(ac,weekUrl);
// isLastOrder = oldWeekNode.UR_ML_IsLastOrder;
// }
// });
//var avgPrice = mTarget.C8_MCM_MonthGroupGoodsAmount / mTarget.C8_MCM_MonthGroupGoodsDepth; 20240320取消原逻辑
var avgPrice = (mTarget.C8_MCM_MonthGroupGoodsAmount + weekNode.C8_MCMC_GroupGoodsAmountFinish) / (mTarget.C8_MCM_MonthGroupGoodsDepth+weekNode.C8_MCMC_GroupGoodsDepthFinish);
avgPrice = avgPrice.toFixed(2);
//得到平均单价上下限
var weekavgPrice = mTarget.C8_MCM_PlannedAvgPrice;//平均单价
var minavgPrice = weekavgPrice * tableRuleDG.UR_SDS_MonthLowerRate;
var maxavgPrice = weekavgPrice * tableRuleDG.UR_SDS_MonthUpperRate;
if(typeKey + tableRuleJG.UR_SDS_Customer == storeKey){
//判断上下限 平均单价
if(isLastOrder){
if(minavgPrice <= avgPrice && avgPrice <= maxavgPrice){
console.log("平均单价满足条件!");
}else{
var arr = tsName + "的实际平均单价为:"+avgPrice+"下限平均单价为:"+minavgPrice.toFixed(2)+"上限平均单价为:"+maxavgPrice.toFixed(2)+",因此不满足条件,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}else{
if(weekavgPrice <= maxavgPrice){
console.log("平均单价满足条件!");
}else{
var arr = tsName + "的实际平均单价为:"+avgPrice+"上限平均单价为:"+maxavgPrice.toFixed(2)+",因此不满足条件,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}
}
//平均单价 调整金额的和/SKC个数和/海外调整深度和
var weekavgPrice = 0;
if(weekNode.C8_MCMC_GroupGoodsDepthFinish != 0){
var weekavgPrice = weekNode.C8_MCMC_GroupGoodsAmountFinish /weekNode.C8_MCMC_GroupGoodsDepthFinish;
}
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish","double",weekavgPrice);
//ac.m_writer.changeNode(mTarget.$URL).changeAttribute("C8_MCM_MonthGroupGoodsAvgPrice","double",avgPrice);
}
var tableRuleF = filterRuleTable(ruleTableNode, "F", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_SubProductSeriation: series,
UR_SDS_Customer: key,UR_SDS_BillNo:weekHYNode.C8_ML_Week});
if(tableRuleF.length == 0){
// var arr = "【" + skcNode.skcCode+ "】在查询月度单号占比表中未在配置表查到相应数据!";
// if(!errMsg.includes(arr)){
// errMsg.push(arr);
// }
return;
}
var customerNode = getNode(ac,tableRuleF.UR_SDS_Customer);
var tsName = "【" + customerNode.$Name+ "】【" + locale.getEnumName(weekHYNode.C8_ML_Week)+ "】";
if(tableRuleF.UR_SDS_TableRule == "UR_Rule:F"){
//月目标SKU数
var monthKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleTG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var weekKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleTG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var mTarget = targetTableNode.monthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weekTarget[weekKeyStr];//周目标
var lower = tableRuleF.UR_SDS_SKCLower;//F表中下限
var upper = tableRuleF.UR_SDS_SKCUpper;//F表中上限
if(lower <= allskc && allskc <= upper){
printLog(tsName + "的SKC数满足月度单号占比上下限值!");
}else{
var arr = tsName + "总SKC数为:" + allskc + ",月度单号占比表下限为:"+lower+",月度单号占比表上限为:" + upper +",不满足条件,请检查!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}
/*var tableRuleD = filterRuleTable(ruleTableNode, "D", true, {
UR_SDS_ProductLargeType: skcNode.catId, UR_SDS_SubProductSeriation: monthNode.C8_MC_Series});
if(tableRuleD.length == 0){
return;
}
var customerNode = getNode(ac,key);
var tsName = "【" + skcNode.skcCode+ "】【" + customerNode.$Name+ "】【" + locale.getEnumName(skcNode.commodityType) + "】【" + locale.getEnumName(skcNode.catId)+ "】【" + locale.getEnumName(skcNode.midCatId) +"】";
if(tableRuleD.UR_SDS_TableRule == "UR_Rule:D"){
//月目标SKU数
var monthKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId)+ key;//商品层+品类+店铺
var weekKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId)+ key;//商品层+品类+店铺
var mTarget = targetTableNode.monthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weekTarget[weekKeyStr];//周目标
var typeKey = skcNode.commodityTypeKey+getEnumValue(tableRuleD.UR_SDS_ProductLargeType)+getEnumValue(tableRuleD.UR_SDS_MiddleCategoryType);
var storeKey = typeKey+tableRuleD.UR_SDS_Customer;
var lowDepth = tableRuleD.UR_SDS_LowDepth;//规则表中最低深度
var styleDepthFinish = weekNode.C8_MCMC_GroupGoodsStyleDepthFinish; //款深度 目标最低深度
if(typeKey + tableRuleD.UR_SDS_Customer == storeKey) {
if(styleDepthFinish < lowDepth){
errMsg.push(tsName + "的目标最低深度低于规则表最低深度,因此不满足条件,请调整!")
}else{
console.log("最低深度满足条件!");
}
}
}*/
});
});
jp.close(loading);
var endTime = new Date();
printLog("========结束执行时间:"+endTime);
if(errMsg.length == 0 || force || !isLastOrder){
//jp.alert("海外组货确认完成!");
//将结果写入SKC上,国内组货深度,组货单号
Object.keys(skcsData.categoryKey).forEach(function(key){
var catKeyNode = skcsData.categoryKey[key];
var categorySKCList = catKeyNode.list;
if(categorySKCList != undefined) {
categorySKCList.forEach(function (skcId) {
var skcNode = skcsData.list[skcId];
ac.m_writer.changeNode(skcId)
//.changeAttribute("C8_CW_HWDepth", "integer", skcNode.finalQty)
.changeAttribute("C8_CW_HWPick", "boolean", true)
.changeAttribute("UR_CW_GroupBillNo", "ref", weekURL);
//更新SKC上的确认唯一码UR_Colorway_OKCode:如果是计划单用UR_Colorway_PLMUniqueValue,否则用UR_Colorway_OriginalUniqueCode
// if(orderType == "N"){//计划单
// ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_PLMUniqueValue",true);
// }else{
// ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_OriginalUniqueCode",true);
// }
//0521 不分渠道 都取UR_Colorway_PLMUniqueValue
var urSkcNode = getNode(ac, skcId);
if (urSkcNode.UR_Colorway_OKCode == "") {
ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode", "UR_Colorway_PLMUniqueValue", true);
}
//0530 Jarvis 渠道款设置编辑
var styleNode = getNode(ac,urSkcNode.__Parent__);
ac.m_writer.changeNode(styleNode.$URL).changeAttributeFlag("UR_Style_KNSStyle", xml.ATTR_FLAG_NOEDIT, true);
ac.m_writer.changeNode(styleNode.Attributes).changeAttributeFlag("UR_StyleAttributes_GroupCarPrice", xml.ATTR_FLAG_NOEDIT, true);
});
}
});
if(flag) {
var LookProducts = weekNode.LookProducts;
var mcNode = getNode(ac, weekNode.__Parent__);
var groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
for (var i = 0; i < LookProducts.length; i++) {
var lookProductNode = getNode(ac, LookProducts[i]);
updateURStyleAttributesGroupBillNo(ac, lookProductNode, groupOrderAattribute, currentNode, weekNode.C8_ML_Week, true, 2);
}
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_ML_Status", "enum", "UR_ZHStatus:Complete");
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("UR_ML_Send_Ready_Flag", "boolean", "true");
ac.m_writer.changeNode(weekNode.__Parent__).changeAttribute("UR_MC_Send_Ready_Flag", "boolean", "true");
}else{
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_ML_Status", "enum", "UR_ZHStatus:Lock");
}
//区分检核还是确认
if(flag){
jp.alert("海外组货确认完成!");
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Complete");
}else{
jp.alert("海外组货检核完成!");
}
//海外组货深度逻辑在前面
//var skcsList = skcsData.list;
// skcsData.skcIds.forEach(function(skcId){
// var skcNode = skcsList[skcId];
// ac.m_writer.changeNode(skcId).changeAttribute("C8_CW_HWDepth","integer",skcNode.finalQty);
// ac.m_writer.changeNode(skcId).changeAttribute("C8_CW_HWChangeTag","boolean",false);
// });
//将结果写入SKC上,电商组货深度
//ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Complete");
var mentions = getGroup(ac, "电商买手");
var subject = "组货确认消息";//主题
var comments = monthNode.$Name + "的" + weekNode.$Name + "组货已确认";//消息文本
var docContainer = monthNode.DocumentsAndComments;
createConversation(ac, docContainer, subject, mentions, comments);
//发送邮件
//SendMailToRole(ac,"海外买手","测试:" + subject,comments,"");
SendMailToRole(ac,"电商买手","测试:" + subject,comments,"");
}else{
jp.alert(errMsg.join("</BR>"));
var errorMessage = errMsg.join("</BR>");
//如果长度超过1000,则截取1000个字符,避免过长保存出错
if(errorMessage.length > 1000){
errorMessage = errorMessage.substring(0,1000);
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string",errorMessage);
}
if (ac.widget.viewParent.getChildView("C8_HWWeekTargets") != undefined) {
ac.widget.viewParent.getChildView("C8_HWWeekTargets").refreshData();
}
//Agnes 更新弱管控品类目标
Object.keys(targetTableNode.weakWeekKey).forEach(function(key){
var weekTargetNode = targetTableNode.weakWeekTarget[key];
var monthTargetNode = weekTargetNode.monthTarget;
var weekSKCTarget = weekTargetNode.C8_MCMC_GroupGoodsSKC;//周 组货宽度目标
var weekSKCUpperTarget = weekTargetNode.C8_MCMC_ExcessSKCRemaining;//周 可超宽度剩余C8_MCMC_ExcessSKCRemaining
var weekSKCDepthTarget = weekSKCTarget+weekSKCUpperTarget;
if(skcsData.weakCategoryKey[key]&& weekSKCDepthTarget>0) {
var catKeyNode = skcsData.weakCategoryKey[key];
var skcCount = catKeyNode.skcs; //组货内skc数量
var styleCount = catKeyNode.styles; //组货内款式数量
var finalQty = catKeyNode.finalQty; //组货深度
var finalDStyleAmout = catKeyNode.finalDStyleAmout;
var finalAmount = catKeyNode.finalAmount; //组货金额
var skcAvgPrice = catKeyNode.AvgPrice; //组货平均价
//写入实际组货金额、宽度、平均价等信息
var weekTargetURL = weekTargetNode.$URL;
ac.m_writer.changeNode(weekTargetURL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish", "double", finalAmount)//组货金额
.changeAttribute("C8_MCMC_DAmountFinish", "double", finalDStyleAmout)//D款大片款超出金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish", "integer", skcCount)//组货宽度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish", "double", skcAvgPrice)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish", "integer", styleCount)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish", "integer", finalQty);//组货深度
}
});
if (ac.widget.viewParent.getChildView("C8_MCMaterialsHW") != undefined) {
ac.widget.viewParent.getChildView("C8_MCMaterialsHW").refreshData();
}
ac.widget.refreshData();
return true;
}
//flag用于区分是检核flase 还是确认true force判断是否强制确认 Jarvis 欧美组货
function HaiWaiCalculateOM(ac,flag,force){
var startTime = new Date();
var loadingMessage = "正在执行组货计算,请耐心等待................";
var loading = jp.loading(loadingMessage);
var currentNode = routerStore.locationNode;
var weekURL = ac.m_urlParent;
printLog("========开始执行时间:"+startTime);
var weekNode = getNode(ac,weekURL);
var weekHYNode = getNode(ac,weekURL);
var monthNode = getNode(ac,weekNode.PrimaryCollection);
var errorMsg = checkRequiredToConfirm(ac, 3);
if (errorMsg) {
jp.alert(errorMsg);
return
}
//1.获取规则表
var ruleTableNode = searchRuleTable(monthNode);
//1+.获取品类管控规则表 Agnes 20240223 品类管控变更
var controlRuleKeys = searchControlRules(monthNode);
//2.获取目标表
var targetTableNode = searchHyTargetTable(weekNode);
printLog("获取规则表,目标表完成");
//3.获取计算skc数据表所需要的数据信息
var resultURLs = weekNode.LookProducts;//ac.widget.getQueryResult().store._allResultUrls;
//4. 获取计算所需要的数据,封装到JSON中,便于后续校验和计算
var beginTime = new Date();
var skcsData = getAndGroupSKCDataHW(ac,resultURLs, controlRuleKeys);
//4.深度 G表计算组货宽度
//错误信息声明
var errMsg = [];
var GList = ruleTableNode.G;
var FList = ruleTableNode.F;
var weekList = targetTableNode.weekTarget;
var zhPrice = 0;
var zhVolumn = 0;
var skcs = 0;
var orderType = getEnumValue(monthNode.C8_MC_MonthOrderAattribute);
var lookProducts = weekHYNode.LookProducts;
var mcNode = monthNode;
var groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
var allskc = 0;
for(var i=0;i<lookProducts.length;i++){
var mcProductNode = getNode(ac,lookProducts[i]);
updateURStyleAttributesGroupBillNo(ac, mcProductNode, groupOrderAattribute, currentNode, weekNode.C8_ML_Week, true, 2);
var allDepth = 0;
var storeVolumnMap = new Map(Object.entries(mcProductNode.C8_MCP_AdjustingDepthHy));
for (const [volumnkey, value] of storeVolumnMap) {
if(key == volumnkey && value != 0){
allskc = allskc + 1;
}
allDepth = allDepth + value; //统计SKC下深度 不根据店群区分
}
ac.m_writer.changeNode(mcProductNode.C8_MCP_SKC).changeAttribute("C8_CW_HWChangeTag","boolean",false);
//统计组货深度
ac.m_writer.changeNode(mcProductNode.C8_MCP_SKC).changeAttribute("C8_CW_HWDepth","integer",allDepth);
ac.m_writer.changeNode(mcProductNode.$URL).changeAttribute("C8_MCP_AdjustingDepth","integer",allDepth);//调整深度
ac.m_writer.changeNode(mcProductNode.$URL).changeAttribute("C8_MCP_SuggestedDepth","integer",allDepth);//建议深度
//20240415 计算组货金额 汇总到国内电商同一字段
if(null != mcProductNode.C8_MCP_AdjustingAmountHy) {
var allAmount = 0;
var storeAmountMap = new Map(Object.entries(mcProductNode.C8_MCP_AdjustingAmountHy));
for (const [amountkey, value] of storeAmountMap) {
allAmount = allAmount + value; //统计SKC下深度 不根据店群区分
}
ac.m_writer.changeNode(mcProductNode.$URL).changeAttribute("C8_MCP_SuggestedAmount", "double", allAmount);//建议金额
}
}
if(orderType && (orderType==="E" || orderType==="F" || orderType==="T")){
//将结果写入SKC上,海外组货深度,组货单号
Object.keys(skcsData.categoryKey).forEach(function(key){
var catKeyNode = skcsData.categoryKey[key];
var categorySKCList = catKeyNode.list;
if(categorySKCList != undefined) {
categorySKCList.forEach(function (skcId) {
var skcNode = skcsData.list[skcId];
ac.m_writer.changeNode(skcId)
// .changeAttribute("C8_CW_HWDepth", "integer", skcNode.finalQty)
.changeAttribute("C8_CW_HWPick", "boolean", true)
.changeAttribute("UR_CW_GroupBillNo", "ref", weekURL);
//更新SKC上的确认唯一码UR_Colorway_OKCode:如果是计划单用UR_Colorway_PLMUniqueValue,否则用UR_Colorway_OriginalUniqueCode
// if(orderType == "N"){//计划单
// ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_PLMUniqueValue",true);
// }else{
// ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_OriginalUniqueCode",true);
// }
//0521 不分渠道 都取UR_Colorway_PLMUniqueValue
var urSkcNode = getNode(ac, skcId);
if (urSkcNode.UR_Colorway_OKCode == "") {
ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode", "UR_Colorway_PLMUniqueValue", true);
}
//0530 Jarvis 渠道款设置编辑
var styleNode = getNode(ac,urSkcNode.__Parent__);
ac.m_writer.changeNode(styleNode.$URL).changeAttributeFlag("UR_Style_KNSStyle", xml.ATTR_FLAG_NOEDIT, true);
ac.m_writer.changeNode(styleNode.Attributes).changeAttributeFlag("UR_StyleAttributes_GroupCarPrice", xml.ATTR_FLAG_NOEDIT, true);
});
}
});
if(flag){
//如果是应急单,则组货确认时,不做检查,等同于强制确认
jp.alert("海外组货确认完成!");
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Complete");
}else{
jp.alert("海外组货检核完成!");
}
if (ac.widget.viewParent.getChildView("C8_HWWeekTargets") != undefined) {
ac.widget.viewParent.getChildView("C8_HWWeekTargets").refreshData();
}
// var LookProducts = weekNode.LookProducts;
// var mcNode = getNode(ac, weekNode.__Parent__);
// var groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
// for (var i = 0; i < LookProducts.length; i++) {
// var lookProductNode = getNode(ac, LookProducts[i]);
// updateURStyleAttributesGroupBillNo(ac, lookProductNode, groupOrderAattribute, currentNode, weekNode.C8_ML_Week, true, 2);
// }
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("UR_ML_Send_Ready_Flag", "boolean", "true");
ac.m_writer.changeNode(weekNode.__Parent__).changeAttribute("UR_MC_Send_Ready_Flag", "boolean", "true");
ac.widget.refreshData();
return true;
}
//F表 匹配
if(FList == undefined){
jp.alert("在月度单号占比表没找到对应的数据,请检查!");
return;
}
if(GList == undefined){
jp.alert("在组货金额,宽度,平均单价,平均深度检核参数表没找到对应的数据,请检查!");
return;
}
//品类循环 先清空之前的数据
var categoryList = skcsData.categoryKey;
Object.keys(categoryList).forEach(function(key){
var weekTargetNode = targetTableNode.weekTarget[key];
if(weekTargetNode == undefined){
weekTargetNode = targetTableNode.weakWeekTarget[key];
if(weekTargetNode == undefined) {
return;
}
}
var monthTargetNode = weekTargetNode.monthTarget;
ac.m_writer.changeNode(weekTargetNode.$URL).changeAttribute("C8_MCMC_GroupGoodsSKCFinish", "double", 0)//组货SKC
.changeAttribute("C8_MCMC_GroupGoodsAmountFinish", "double", 0)//组货金额
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish", "double", 0)//组货深度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish", "double", 0);//组货深度平均价
ac.m_writer.execute({ sync: true });//由于要用到月度数据 必须先提交事务
monthTargetNode = ac.m_cache.addNode(monthTargetNode.$URL);
if(monthTargetNode.C8_MCM_MonthGroupGoodsDepth != 0) {
ac.m_writer.changeNode(monthTargetNode.$URL).changeAttribute("C8_MCM_PlannedAvgPrice", "double", monthTargetNode.C8_MCM_MonthGroupGoodsAmount / monthTargetNode.C8_MCM_MonthGroupGoodsDepth)//组货SKC
}
});
//获取最低深度并且判断
for(var i=0;i<resultURLs.length;i++){
var mcProductNode = getNode(ac,resultURLs[i]);
var lowDepthHy = mcProductNode.C8_MCP_SpecialLowDepthHy;
var adDepthHyMap = new Map(Object.entries(mcProductNode.C8_MCP_AdjustingDepthHy));
for (const [key, value] of adDepthHyMap) {
if(lowDepthHy[key] != undefined){
if(value > lowDepthHy[key]){
printLog("调整深度大于最低深度,验证通过!");
}else{
var customerNode = getNode(ac,key);
errMsg.push("店群为:【" + customerNode.$Name + "】的调整深度小于最低深度,请调整!");
}
}
}
}
//用于记录已循环过的品类 其中G表一定要有该数据
var typeList = [];
var isLastOrder = weekHYNode.UR_ML_IsLastOrder;//是否月末单号
var skcsList = skcsData.skcIds;
// if(skcsList.length == 0){
// jp.alert("此单号下没有SKC,不能进行检核!");
// return true;
// }
skcsList.forEach(function(skcId){
var skcNode = skcsData.list[skcId];
if(Object.keys(skcNode.store).length == 0){
errMsg.push("SKC为:" + skcNode.skcCode + "的店铺没有维护产品等级信息!不能进行检核!");
return;
}
var catFlag = typeList.includes(skcNode.catId);
var midFlag = typeList.includes(skcNode.catId+skcNode.midCatId);
if(catFlag || midFlag){
printLog("与"+ skcNode.skcCode + "相同的品类或者品类+中品类的数据已计算,不再重复计算!")
return;
}
var series = skcNode.originalSeries;
// var mtquery = new Search();
// var mq = mtquery.getQuery();
// mq.Node(xml.PROP_TYPE, xml.OP_EQUALS, "StyleAttributes")
// .Attr("Code", xml.OP_EQUALS, skcNode.styleId, "Child:__Parent__");
// var resmt = mtquery.execute({sync: true});
// var mtResults = resmt.getResultNodes();
// if (mtResults.length > 0) {
// series = mtResults[0].UR_StyleAttributes_OriginalSeries;
// }
Object.keys(skcNode.store).forEach(function(key) {
var weekGroupGoodsAmountFinish = 0;
var weekGroupGoodsDepthFinish = 0;
//,UR_SDS_MiddleCategoryType:skcNode.midCatId 中品类过滤取消 20240321
var tableRuleTG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_MiddleCategoryType:skcNode.midCatId,UR_SDS_Dimension:"UR_enum_Dimension:组货宽度"});
if(tableRuleTG.length == 0){ //如果查询为空,则取消中品类再次查询,如果再为空代表配置表没有数据 Jarvis
tableRuleTG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_Dimension:"UR_enum_Dimension:组货宽度"});
if(tableRuleTG.length == 0){
// var arr = "【" + skcNode.skcCode+ "】在查询组货金额,宽度,平均单价,平均深度检核参数表中未在配置表查到【组货宽度】数据!";
// if(!errMsg.includes(arr)){
// errMsg.push(arr);
// }
return;
}else{
if(!typeList.includes(skcNode.catId)){
typeList.push(skcNode.catId);
}
}
}else{
if(!typeList.includes(skcNode.catId+skcNode.midCatId)){
typeList.push(skcNode.catId+skcNode.midCatId);
}
}
var customerNode = getNode(ac,tableRuleTG.UR_SDS_Customer);
var tsName = "【" + customerNode.$Name+ "】【" + locale.getEnumName(skcNode.commodityType) + "】【" + locale.getEnumName(tableRuleTG.UR_SDS_ProductLargeType)+ "】【" + locale.getEnumName(tableRuleTG.UR_SDS_MiddleCategoryType) +"】";
if(getEnumValue(tableRuleTG.UR_SDS_Dimension) == "组货宽度"){
//月目标SKU数
var monthKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleTG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var weekKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleTG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var mTarget = targetTableNode.monthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weekTarget[weekKeyStr];//周目标
if(mTarget == undefined || weekNode == undefined){ //有可能目标表没有数据,SKC有了
return;
}
if(getEnumValue(tableRuleTG.UR_SDS_MiddleCategoryType) != ""){
var mTarget = targetTableNode.weakMonthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weakWeekTarget[weekKeyStr];//周目标
}
var gdskc = mTarget.C8_MCM_PlannedSKC;
var allSku = mTarget.C8_MCM_MonthGroupGoodsSKC;//组货SKC
var skcs = skcsData.categoryKey[skcNode.categoryKey+key].skcs;//实际SKC
var allskcs = skcs + mTarget.C8_MCM_MonthGroupGoodsSKC; //加上月已组
if(weekNode == undefined){//可能存在目标表没有店群 跳过循环
return ;
}
//获取规则表的上下限
var minskcs = parseFloat((gdskc * tableRuleTG.UR_SDS_MonthLowerRate).toFixed(2));
var maxskcs = parseFloat((gdskc * tableRuleTG.UR_SDS_MonthUpperRate).toFixed(2));
if(isLastOrder) {
if (minskcs <= allskcs && allskcs <= maxskcs) {
console.log(typeKey + "的skc条件满足");
} else {
var arr =tsName + "的实际SKC数为:" + allskcs + ",SKC数下限为:" + minskcs + ",SKC数上限为:" + maxskcs + "因此不满足SKC数要求,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}else{
if(skcs <= maxskcs){
console.log(typeKey + "的skc条件满足");
}else{
var arr =tsName + "的实际SKC数为:" + allskcs + ",SKC数上限为:" + maxskcs + "因此不满足SKC数要求,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_MCMC_GroupGoodsSKCFinish","integer",skcs);
ac.m_writer.changeNode(mTarget.$URL).changeAttribute("C8_MCM_MonthGroupGoodsSKC","integer",allskcs);
//ac.m_writer.execute({sync: true});//后面计算需要用到SKC数 (提交事务的值,可以暂存起来后面用)
}
var tableRuleJG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_MiddleCategoryType:skcNode.midCatId,UR_SDS_Dimension:"UR_enum_Dimension:组货金额"});
if(tableRuleJG.length == 0){ //如果查询为空,则取消中品类再次查询,如果再为空代表配置表没有数据 Jarvis
tableRuleJG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_Dimension:"UR_enum_Dimension:组货金额"});
if(tableRuleJG.length == 0){
// var arr = "【" + skcNode.skcCode+ "】在查询组货金额,宽度,平均单价,平均深度检核参数表中未在配置表查到【组货金额】数据!";
// if(!errMsg.includes(arr)){
// errMsg.push(arr);
// }
return;
}
}
var customerNode = getNode(ac,tableRuleJG.UR_SDS_Customer);
var tsName = "【" + customerNode.$Name+ "】【" + locale.getEnumName(skcNode.commodityType) + "】【" + locale.getEnumName(tableRuleJG.UR_SDS_ProductLargeType)+ "】【" + locale.getEnumName(tableRuleJG.UR_SDS_MiddleCategoryType) +"】";
//企划金额 深度统计
if(getEnumValue(tableRuleJG.UR_SDS_Dimension) == "组货金额"){
//月目标SKU数
var monthKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleJG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var weekKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleJG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var mTarget = targetTableNode.monthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weekTarget[weekKeyStr];//周目标
if(getEnumValue(tableRuleJG.UR_SDS_MiddleCategoryType) != ""){
var mTarget = targetTableNode.weakMonthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weakWeekTarget[weekKeyStr];//周目标
}
if(weekNode == undefined){//可能存在目标表没有店群 跳过循环
return ;
}
var typeKey = skcNode.commodityTypeKey+getEnumValue(tableRuleJG.UR_SDS_ProductLargeType)+getEnumValue(tableRuleJG.UR_SDS_MiddleCategoryType);
var storeKey = typeKey+tableRuleJG.UR_SDS_Customer;
if(skcsData.categoryKey.hasOwnProperty(typeKey) ) { //&& getEnumValue(GNode.UR_SDS_Dimension)=="组货宽度"
var jMap = new Map();//记录相同品类的深度 以及 金额
var hylist = skcsData.categoryKey[typeKey].hylist;
hylist.forEach(function (map) {
for (var k = 0; k < map.length; k++) {
var resMap = map[k];
//金额
var price = resMap.get(storeKey+"price");
if(price != undefined){
if(jMap.has(storeKey+"price")){
jMap.set(storeKey+"price",jMap.get(storeKey+"price")+price);
}else{
jMap.set(storeKey+"price",price);
}
}
//宽度
var volumn = resMap.get(storeKey+"volumn");
if(volumn != undefined){
if(jMap.has(storeKey+"volumn")){
jMap.set(storeKey+"volumn",jMap.get(storeKey+"volumn")+volumn);
}else{
jMap.set(storeKey+"volumn",volumn);
}
}
}
})
//拿到金额后 判断上下限
console.log(jMap.toString());
zhPrice = jMap.get(storeKey+"price");
zhVolumn = jMap.get(storeKey+"volumn");
var allzhPrice = 0; //整月的实际企划金额
var allzhVolumn = 0;//整夜的实际企划宽度
//查询其他单号里面的金额获取到最终月金额
// 0607(月度下面有mcmc对象的值)
// var search = new Search();
// var q = search.getQuery();
// q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterialColor")
// .RefAttr("C8_MCM_Store", xml.OP_EQUALS, tableRuleJG.UR_SDS_Customer,"Child:__Parent__")
// .Attr("C8_MCM_CommodityType", xml.OP_EQUALS, skcNode.commodityType,"Child:__Parent__")
// .Attr("C8_MCM_ProductLargeType", xml.OP_EQUALS, tableRuleJG.UR_SDS_ProductLargeType,"Child:__Parent__")
// .RefAttr("__Parent__", xml.OP_EQUALS,mTarget.$URL);
// if(getEnumValue(tableRuleJG.UR_SDS_MiddleCategoryType) != ""){
// q.Attr("C8_MCM_CategoryInPlan", xml.OP_EQUALS, tableRuleJG.UR_SDS_MiddleCategoryType,"Child:__Parent__");
// }
// var res = search.execute({sync: true});
// var results = res.getResultNodes();
var mcmUrl = mTarget.Colors;
for(var j=0;j<mcmUrl.length;j++){
if(weekNode.$URL == mcmUrl[j]){
allzhPrice = allzhPrice + zhPrice;
allzhVolumn = allzhVolumn + zhVolumn;
}else{
var mcmcNode = getNode(ac,mcmUrl[j]);
allzhPrice = allzhPrice + mcmcNode.C8_MCMC_GroupGoodsAmountFinish;
allzhVolumn = allzhVolumn + mcmcNode.C8_MCMC_GroupGoodsDepthFinish;
}
}
if(zhPrice != undefined){
//企划金额上下限
var mount = mTarget.C8_MCM_PlannedAmount;//目标企划金额
var minPrice = mount * tableRuleJG.UR_SDS_MonthLowerRate;
var maxPrice = mount * tableRuleJG.UR_SDS_MonthUpperRate;
//获取目标表数据比较
if(typeKey + tableRuleJG.UR_SDS_Customer == storeKey) {
if(isLastOrder) {
//判断上下限 金额
if (minPrice <= allzhPrice && allzhPrice <= maxPrice) {
console.log("企划金额满足条件!");
} else {
var arr = tsName + "的实际企划金额为:" + allzhPrice + "下限企划金额为:" + minPrice + "上限企划金额为:" + maxPrice + ",因此不满足条件,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}else{
if(allzhPrice <= maxPrice){
console.log(typeKey + "企划金额满足条件");
}else{
var arr = tsName + "的实际企划金额为:" + allzhPrice + "上限企划金额为:" + maxPrice + ",因此不满足条件,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}
}
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish", "double", zhPrice);
weekGroupGoodsAmountFinish = zhPrice;//组货金额
ac.m_writer.changeNode(mTarget.$URL).changeAttribute("C8_MCM_MonthGroupGoodsAmount", "double", allzhPrice);
}else{
jp.alert("调整企划金额不存在,请检查数据!");
return;
}
if(zhVolumn != undefined){
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_MCMC_GroupGoodsDepthFinish","double",zhVolumn);
weekGroupGoodsDepthFinish = zhVolumn;
ac.m_writer.changeNode(mTarget.$URL).changeAttribute("C8_MCM_MonthGroupGoodsDepth", "double", allzhVolumn);
//0607修改 注釋 提交事務
//ac.m_writer.execute({sync: true});
}
}
}
var tableRuleSG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_MiddleCategoryType:skcNode.midCatId,UR_SDS_Dimension:"UR_enum_Dimension:平均深度"});
if(tableRuleSG.length == 0){ //如果查询为空,则取消中品类再次查询,如果再为空代表配置表没有数据 Jarvis
tableRuleSG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_Dimension:"UR_enum_Dimension:平均深度"});
if(tableRuleSG.length == 0){
// var arr = "【" + skcNode.skcCode+ "】在查询组货金额,宽度,平均单价,平均深度检核参数表中未在配置表查到【平均深度】数据!";
// if(!errMsg.includes(arr)){
// errMsg.push(arr);
// }
return;
}
}
var customerNode = getNode(ac,tableRuleSG.UR_SDS_Customer);
var tsName = "【" + customerNode.$Name+ "】【" + locale.getEnumName(skcNode.commodityType) + "】【" + locale.getEnumName(tableRuleSG.UR_SDS_ProductLargeType)+ "】【" + locale.getEnumName(tableRuleSG.UR_SDS_MiddleCategoryType) +"】";
//企划金额 深度统计
if(getEnumValue(tableRuleSG.UR_SDS_Dimension) == "平均深度"){
//月目标SKU数
var monthKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleSG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var weekKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleSG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var mTarget = targetTableNode.monthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weekTarget[weekKeyStr];//周目标
if(getEnumValue(tableRuleSG.UR_SDS_MiddleCategoryType) != ""){
var mTarget = targetTableNode.weakMonthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weakWeekTarget[weekKeyStr];//周目标
}
//深度在前面提交了,可以直接取值
var avgDepth = weekNode.C8_MCMC_GroupGoodsDepthFinish / weekNode.C8_MCMC_GroupGoodsSKCFinish;
var avgDeth = 0;//实际深度
if((mTarget.C8_MCM_MonthGroupGoodsSKC + weekNode.C8_MCMC_GroupGoodsSKCFinish) != 0){
var avgDeth = (mTarget.C8_MCM_MonthGroupGoodsDepth + weekNode.C8_MCMC_GroupGoodsDepthFinish)/(mTarget.C8_MCM_MonthGroupGoodsSKC + weekNode.C8_MCMC_GroupGoodsSKCFinish);//实际
avgDeth = avgDeth.toFixed(2);
}
//得到平均上下限
var weekavgDeth = mTarget.C8_MCM_PlannedDepth; //企划平均深度
var minavgDeth = weekavgDeth * tableRuleSG.UR_SDS_MonthLowerRate;
var maxavgDeth = weekavgDeth * tableRuleSG.UR_SDS_MonthUpperRate;
if(typeKey + tableRuleSG.UR_SDS_Customer == storeKey){
//判断上下限 深度
if(isLastOrder){
if(minavgDeth <= avgDeth && avgDeth <= maxavgDeth){
console.log("平均深度满足条件!");
}else{
var arr = tsName + "的实际平均深度为:"+avgDeth+"下限平均深度为:"+minavgDeth.toFixed(2)+"上限平均深度为:"+maxavgDeth.toFixed(2)+",因此不满足条件,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}else{
if(avgDeth <= maxavgDeth){
console.log("平均深度满足条件!");
}else{
var arr = tsName + "的实际平均深度为:"+avgDeth+"上限平均深度为:"+maxavgDeth.toFixed(2)+",因此不满足条件,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}
}
}
var tableRuleDG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_MiddleCategoryType:skcNode.midCatId,UR_SDS_Dimension:"UR_enum_Dimension:平均单价"});
if(tableRuleDG.length == 0){ //如果查询为空,则取消中品类再次查询,如果再为空代表配置表没有数据 Jarvis
tableRuleDG = filterRuleTable(ruleTableNode, "G", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_ProductLargeType: skcNode.catId,
UR_SDS_SubProductSeriation: series, UR_SDS_Customer: key,UR_SDS_Dimension:"UR_enum_Dimension:平均单价"});
if(tableRuleDG.length == 0){
// var arr = "【" + skcNode.skcCode+ "】在查询组货金额,宽度,平均单价,平均深度检核参数表中未在配置表查到【平均单价】数据!";
// if(!errMsg.includes(arr)){
// errMsg.push(arr);
// }
return;
}
}
var customerNode = getNode(ac,tableRuleDG.UR_SDS_Customer);
var tsName = "【" + customerNode.$Name+ "】【" + locale.getEnumName(skcNode.commodityType) + "】【" + locale.getEnumName(tableRuleDG.UR_SDS_ProductLargeType)+ "】【" + locale.getEnumName(tableRuleDG.UR_SDS_MiddleCategoryType) +"】";
//企划金额 深度统计
if(getEnumValue(tableRuleDG.UR_SDS_Dimension) == "平均单价"){
//月目标SKU数
var monthKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleDG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var weekKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleDG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var mTarget = targetTableNode.monthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weekTarget[weekKeyStr];//周目标
if(getEnumValue(tableRuleDG.UR_SDS_MiddleCategoryType) != ""){
var mTarget = targetTableNode.weakMonthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weakWeekTarget[weekKeyStr];//周目标
}
if(weekNode == undefined){//可能存在目标表没有店群 跳过循环
return ;
}
var avgPrice = 0;
if(weekGroupGoodsDepthFinish != 0){
avgPrice = weekGroupGoodsAmountFinish / weekGroupGoodsDepthFinish;
}
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish","double",avgPrice);
// var colors = mTarget.Colors;//月下所有的单号
// colors.forEach(function(weekUrl){
// if(weekUrl != weekNode.$URL){
// var oldWeekNode = getNode(ac,weekUrl);
// isLastOrder = oldWeekNode.UR_ML_IsLastOrder;
// }
// });
//var avgPrice = mTarget.C8_MCM_MonthGroupGoodsAmount / mTarget.C8_MCM_MonthGroupGoodsDepth; 20240320取消原逻辑
var avgPrice = (mTarget.C8_MCM_MonthGroupGoodsAmount + weekNode.C8_MCMC_GroupGoodsAmountFinish) / (mTarget.C8_MCM_MonthGroupGoodsDepth+weekNode.C8_MCMC_GroupGoodsDepthFinish);
avgPrice = avgPrice.toFixed(2);
//得到平均单价上下限
var weekavgPrice = mTarget.C8_MCM_PlannedAvgPrice;//平均单价
var minavgPrice = weekavgPrice * tableRuleDG.UR_SDS_MonthLowerRate;
var maxavgPrice = weekavgPrice * tableRuleDG.UR_SDS_MonthUpperRate;
if(typeKey + tableRuleJG.UR_SDS_Customer == storeKey){
//判断上下限 平均单价
if(isLastOrder){
if(minavgPrice <= avgPrice && avgPrice <= maxavgPrice){
console.log("平均单价满足条件!");
}else{
var arr = tsName + "的实际平均单价为:"+avgPrice+"下限平均单价为:"+minavgPrice.toFixed(2)+"上限平均单价为:"+maxavgPrice.toFixed(2)+",因此不满足条件,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}else{
if(weekavgPrice <= maxavgPrice){
console.log("平均单价满足条件!");
}else{
var arr = tsName + "的实际平均单价为:"+avgPrice+"上限平均单价为:"+maxavgPrice.toFixed(2)+",因此不满足条件,请调整!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}
}
//平均单价 调整金额的和/SKC个数和/海外调整深度和
var weekavgPrice = 0;
if(weekNode.C8_MCMC_GroupGoodsDepthFinish != 0){
var weekavgPrice = weekNode.C8_MCMC_GroupGoodsAmountFinish /weekNode.C8_MCMC_GroupGoodsDepthFinish;
}
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish","double",weekavgPrice);
//ac.m_writer.changeNode(mTarget.$URL).changeAttribute("C8_MCM_MonthGroupGoodsAvgPrice","double",avgPrice);
}
var tableRuleF = filterRuleTable(ruleTableNode, "F", true, {
UR_SDS_Month: monthNode.C8_MC_Month, UR_SDS_SubProductSeriation: series,
UR_SDS_Customer: key,UR_SDS_BillNo:weekHYNode.C8_ML_Week});
if(tableRuleF.length == 0){
// var arr = "【" + skcNode.skcCode+ "】在查询月度单号占比表中未在配置表查到相应数据!";
// if(!errMsg.includes(arr)){
// errMsg.push(arr);
// }
return;
}
var customerNode = getNode(ac,tableRuleF.UR_SDS_Customer);
var tsName = "【" + customerNode.$Name+ "】【" + locale.getEnumName(weekHYNode.C8_ML_Week)+ "】";
if(tableRuleF.UR_SDS_TableRule == "UR_Rule:F"){
//月目标SKU数
var monthKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleTG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var weekKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId) + getEnumValue(tableRuleTG.UR_SDS_MiddleCategoryType) + key;//商品层+品类+配置表中品类+店铺
var mTarget = targetTableNode.monthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weekTarget[weekKeyStr];//周目标
var lower = tableRuleF.UR_SDS_SKCLower;//F表中下限
var upper = tableRuleF.UR_SDS_SKCUpper;//F表中上限
if(lower <= allskc && allskc <= upper){
printLog(tsName + "的SKC数满足月度单号占比上下限值!");
}else{
var arr = tsName + "总SKC数为:" + allskc + ",月度单号占比表下限为:"+lower+",月度单号占比表上限为:" + upper +",不满足条件,请检查!";
if(!errMsg.includes(arr)){
errMsg.push(arr);
}
}
}
/*var tableRuleD = filterRuleTable(ruleTableNode, "D", true, {
UR_SDS_ProductLargeType: skcNode.catId, UR_SDS_SubProductSeriation: monthNode.C8_MC_Series});
if(tableRuleD.length == 0){
return;
}
var customerNode = getNode(ac,key);
var tsName = "【" + skcNode.skcCode+ "】【" + customerNode.$Name+ "】【" + locale.getEnumName(skcNode.commodityType) + "】【" + locale.getEnumName(skcNode.catId)+ "】【" + locale.getEnumName(skcNode.midCatId) +"】";
if(tableRuleD.UR_SDS_TableRule == "UR_Rule:D"){
//月目标SKU数
var monthKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId)+ key;//商品层+品类+店铺
var weekKeyStr = skcNode.commodityTypeKey + getEnumValue(skcNode.catId)+ key;//商品层+品类+店铺
var mTarget = targetTableNode.monthTarget[monthKeyStr];//月目标
var weekNode = targetTableNode.weekTarget[weekKeyStr];//周目标
var typeKey = skcNode.commodityTypeKey+getEnumValue(tableRuleD.UR_SDS_ProductLargeType)+getEnumValue(tableRuleD.UR_SDS_MiddleCategoryType);
var storeKey = typeKey+tableRuleD.UR_SDS_Customer;
var lowDepth = tableRuleD.UR_SDS_LowDepth;//规则表中最低深度
var styleDepthFinish = weekNode.C8_MCMC_GroupGoodsStyleDepthFinish; //款深度 目标最低深度
if(typeKey + tableRuleD.UR_SDS_Customer == storeKey) {
if(styleDepthFinish < lowDepth){
errMsg.push(tsName + "的目标最低深度低于规则表最低深度,因此不满足条件,请调整!")
}else{
console.log("最低深度满足条件!");
}
}
}*/
});
});
jp.close(loading);
var endTime = new Date();
printLog("========结束执行时间:"+endTime);
if(errMsg.length == 0 || force || !isLastOrder){
//jp.alert("海外组货确认完成!");
//将结果写入SKC上,国内组货深度,组货单号
Object.keys(skcsData.categoryKey).forEach(function(key){
var catKeyNode = skcsData.categoryKey[key];
var categorySKCList = catKeyNode.list;
if(categorySKCList != undefined) {
categorySKCList.forEach(function (skcId) {
var skcNode = skcsData.list[skcId];
ac.m_writer.changeNode(skcId)
//.changeAttribute("C8_CW_HWDepth", "integer", skcNode.finalQty)
.changeAttribute("C8_CW_HWPick", "boolean", true)
.changeAttribute("UR_CW_GroupBillNo", "ref", weekURL);
//更新SKC上的确认唯一码UR_Colorway_OKCode:如果是计划单用UR_Colorway_PLMUniqueValue,否则用UR_Colorway_OriginalUniqueCode
// if(orderType == "N"){//计划单
// ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_PLMUniqueValue",true);
// }else{
// ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_OriginalUniqueCode",true);
// }
//0521 不分渠道 都取UR_Colorway_PLMUniqueValue
var urSkcNode = getNode(ac, skcId);
if (urSkcNode.UR_Colorway_OKCode == "") {
ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode", "UR_Colorway_PLMUniqueValue", true);
}
//0530 Jarvis 渠道款设置编辑
var styleNode = getNode(ac,urSkcNode.__Parent__);
ac.m_writer.changeNode(styleNode.$URL).changeAttributeFlag("UR_Style_KNSStyle", xml.ATTR_FLAG_NOEDIT, true);
ac.m_writer.changeNode(styleNode.Attributes).changeAttributeFlag("UR_StyleAttributes_GroupCarPrice", xml.ATTR_FLAG_NOEDIT, true);
});
}
});
if(flag) {
var LookProducts = weekNode.LookProducts;
var mcNode = getNode(ac, weekNode.__Parent__);
var groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
for (var i = 0; i < LookProducts.length; i++) {
var lookProductNode = getNode(ac, LookProducts[i]);
updateURStyleAttributesGroupBillNo(ac, lookProductNode, groupOrderAattribute, currentNode, weekNode.C8_ML_Week, true, 2);
}
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_ML_Status", "enum", "UR_ZHStatus:Complete");
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("UR_ML_Send_Ready_Flag", "boolean", "true");
ac.m_writer.changeNode(weekNode.__Parent__).changeAttribute("UR_MC_Send_Ready_Flag", "boolean", "true");
}else{
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_ML_Status", "enum", "UR_ZHStatus:Lock");
}
//区分检核还是确认
if(flag){
jp.alert("海外组货确认完成!");
ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Complete");
}else{
jp.alert("海外组货检核完成!");
}
//海外组货深度逻辑在前面
//var skcsList = skcsData.list;
// skcsData.skcIds.forEach(function(skcId){
// var skcNode = skcsList[skcId];
// ac.m_writer.changeNode(skcId).changeAttribute("C8_CW_HWDepth","integer",skcNode.finalQty);
// ac.m_writer.changeNode(skcId).changeAttribute("C8_CW_HWChangeTag","boolean",false);
// });
//将结果写入SKC上,电商组货深度
//ac.m_writer.changeNode(weekNode.$URL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Complete");
var mentions = getGroup(ac, "电商买手");
var subject = "组货确认消息";//主题
var comments = monthNode.$Name + "的" + weekNode.$Name + "组货已确认";//消息文本
var docContainer = monthNode.DocumentsAndComments;
createConversation(ac, docContainer, subject, mentions, comments);
//发送邮件
//SendMailToRole(ac,"海外买手","测试:" + subject,comments,"");
SendMailToRole(ac,"电商买手","测试:" + subject,comments,"");
}else{
jp.alert(errMsg.join("</BR>"));
var errorMessage = errMsg.join("</BR>");
//如果长度超过1000,则截取1000个字符,避免过长保存出错
if(errorMessage.length > 1000){
errorMessage = errorMessage.substring(0,1000);
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string",errorMessage);
}
if (ac.widget.viewParent.getChildView("C8_HWWeekTargets") != undefined) {
ac.widget.viewParent.getChildView("C8_HWWeekTargets").refreshData();
}
//Agnes 更新弱管控品类目标
Object.keys(targetTableNode.weakWeekKey).forEach(function(key){
var weekTargetNode = targetTableNode.weakWeekTarget[key];
var monthTargetNode = weekTargetNode.monthTarget;
var weekSKCTarget = weekTargetNode.C8_MCMC_GroupGoodsSKC;//周 组货宽度目标
var weekSKCUpperTarget = weekTargetNode.C8_MCMC_ExcessSKCRemaining;//周 可超宽度剩余C8_MCMC_ExcessSKCRemaining
var weekSKCDepthTarget = weekSKCTarget+weekSKCUpperTarget;
if(skcsData.weakCategoryKey[key]&& weekSKCDepthTarget>0) {
var catKeyNode = skcsData.weakCategoryKey[key];
var skcCount = catKeyNode.skcs; //组货内skc数量
var styleCount = catKeyNode.styles; //组货内款式数量
var finalQty = catKeyNode.finalQty; //组货深度
var finalDStyleAmout = catKeyNode.finalDStyleAmout;
var finalAmount = catKeyNode.finalAmount; //组货金额
var skcAvgPrice = catKeyNode.AvgPrice; //组货平均价
//写入实际组货金额、宽度、平均价等信息
var weekTargetURL = weekTargetNode.$URL;
ac.m_writer.changeNode(weekTargetURL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish", "double", finalAmount)//组货金额
.changeAttribute("C8_MCMC_DAmountFinish", "double", finalDStyleAmout)//D款大片款超出金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish", "integer", skcCount)//组货宽度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish", "double", skcAvgPrice)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish", "integer", styleCount)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish", "integer", finalQty);//组货深度
}
});
if (ac.widget.viewParent.getChildView("C8_MCMaterialsHW") != undefined) {
ac.widget.viewParent.getChildView("C8_MCMaterialsHW").refreshData();
}
ac.widget.refreshData();
return true;
}
/**
* 组货时,更改 styelattr 层的UR_StyleAttributes_GroupBillNo 组货单号赋值逻辑
* @param ac
* @param lookProductNode
* @param currentNode
* @param billNo
* @param isZhConfirm
* @param chanleType 0 国内组货 1 电商组货 2 海外组货
*/
function updateURStyleAttributesGroupBillNo(ac, lookProductNode, groupOrderAattribute ,currentNode, billNo, isZhConfirm, chanleType) {
var styleUrl = lookProductNode.ProductStyle;
var style = getNode(ac,styleUrl);
var styleAttr = getNode(ac,style.Attributes);
if(isZhConfirm){
//确认组货,更新组货单号
ac.m_writer.changeNode(styleAttr.$URL).changeAttribute("UR_StyleAttributes_GroupBillNo","enum",billNo);
ac.m_writer.changeNode(styleUrl).changeAttribute("UR_Style_GroupOrderAattribute", "enum", groupOrderAattribute);
}else{
C8_CancellConfirmCleanData(ac, lookProductNode, chanleType);
}
}
/**
* 组货取消 清數據
* @param ac
* @param lookProductNode
* @param chanleType 0 国内组货 1 电商组货 2 海外组货
* @constructor
*/
function C8_CancellConfirmCleanData(ac, lookProductNode, chanleType) {
skcNode = getNode(ac,lookProductNode.C8_MCP_SKC);
var isAllCancel = false;
if (chanleType==0){
isAllCancel = skcNode.C8_CW_HWDepth == 0 && skcNode.C8_CW_DSDepth == 0;
}else if (chanleType==1){
isAllCancel = skcNode.C8_CW_GNDepth == 0 && skcNode.C8_CW_HWDepth == 0
}else if (chanleType==2){
isAllCancel = skcNode.C8_CW_GNDepth == 0 && skcNode.C8_CW_DSDepth == 0;
}
// if (isAllCancel) {
// var styleUrl = lookProductNode.ProductStyle;
// var style = getNode(ac, styleUrl);
// var styleAttr = getNode(ac, style.Attributes);
// // ac.m_writer.changeNode(styleAttr.$URL).changeAttribute("UR_StyleAttributes_GroupBillNo", "enum", "UR_enum_billno:");
// // ac.m_writer.changeNode(skcNode.$URL).changeAttribute("UR_Colorway_OKCode", "string", "");
// }
}
//从规则表9的过滤结果中,获取对应的价格带列表
function getPriceRange(ruleTablesResults){
var priceRange = new Map();
if(ruleTablesResults && ruleTablesResults.length>0){
ruleTablesResults.forEach(function(rule){
if(!priceRange.get("low") || priceRange.get("low") > rule.UR_SDS_PriceLow){
priceRange.set("low", rule.UR_SDS_PriceLow);
}
if(!priceRange.get("high") || priceRange.get("high") < rule.UR_SDS_PriceHigh){
priceRange.set("high", rule.UR_SDS_PriceHigh);
}
});
}
return priceRange;
}
//根据周(单号)获取对应的周目标表,按照商品层+品类+中品类key进行汇总
//每个key下,只有一条周目标和一条月目标
//20240220 Agnes 增加强管控周目标过滤以及存储弱管控
function searchTargetTable(weekNode) {
var search = new Search();
var q = search.getQuery();
var retObj = {weekTarget:{},weekKey:{},monthTarget:{},monthKey:{},weakWeekKey:{},weakWeekTarget:{},weakMonthKey:{},weakMonthTarget:{}};
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterialColor")
.RefAttr("C8_MCMC_Week", xml.OP_EQUALS, weekNode.$URL);
var dependcyPath = ["Child:__Parent__/Child:__Parent__"];
search = search.addDependencyPaths(dependcyPath);
var res = search.execute({ sync: true });
if(res){
var weekNodes = res.getResultNodes();
var monthNodes = res.getNonResultNodes();
var skcs = 0;
var amount = 0;
var monthPlanAmount = 0;//月企划总金额,设计师系列汇总用
var monthGroupedAmount = 0;//月非末单已组总金额(不管单有没有完成),设计师系列末单检核用
//var monthSkcs = 0;//月企划总skc数,设计师系列汇总用
weekNodes.forEach(function(node,index){
var monthId = node.__Parent__;
var monthNode = res.getNode(monthId);
var mcNode = res.getNode(monthNode.__Parent__)
node["monthTarget"]=monthNode;
var monthKeyStr = getEnumValue(monthNode.C8_MCM_CommodityType)+getEnumValue(monthNode.C8_MCM_ProductLargeType)+getEnumValue(monthNode.C8_MCM_CategoryInPlan)+getEnumValue(monthNode.UR_MCM_Silhouette);
var weekKeyStr = monthKeyStr;// + weekNode.$Name
//如果为强管控Node则存储作计算用 Agnes: 品类管控变更
if(node.UR_MCMC_Control) {
skcs = skcs + node.C8_MCMC_GroupGoodsSKC;
amount = amount + node.C8_MCMC_GroupGoodsAmount;
monthPlanAmount = monthPlanAmount + monthNode.C8_MCM_PlannedAmount;
monthGroupedAmount = monthGroupedAmount + monthNode.C8_MCM_MonthGroupGoodsAmountNotLast;
//monthSkcs = monthSkcs + monthNode.C8_MCM_PlannedSKC;
retObj.weekKey[weekKeyStr]=node.$URL;//作为索引,待后续使用
retObj.weekTarget[weekKeyStr]=node;
retObj.monthKey[monthKeyStr]=monthNode.$URL;//作为索引,待后续使用
retObj.monthTarget[monthKeyStr]=monthNode;
}else{//存储到弱管控 Agnes: 品类管控变更
retObj.weakWeekKey[weekKeyStr]=node.$URL;
retObj.weakWeekTarget[weekKeyStr]=node;
retObj.weakMonthKey[monthKeyStr]=monthNode.$URL;
retObj.weakMonthTarget[monthKeyStr]=monthNode;
}
});
//retObj.weekTarget = res.getResultNodes();
//retObj.monthTarget = res.getNonResultNodes();
retObj.weekSkcs = skcs;
retObj.weekAmount = amount;
retObj.monthPlanAmount = monthPlanAmount;
retObj.monthGroupedAmount = monthGroupedAmount;
//retObj.monthSkcs = monthSkcs;
}
return retObj;
};
//20240407 Agnes 新增周skc宽度和金额汇总
function searchTargetTableWeek(weekNode) {
var search = new Search();
var q = search.getQuery();
var retObj = {weekSkcs, weekAmount, weekTarget:{},weekKey:{},monthTarget:{},monthKey:{},mcTarget:{},weakWeekKey:{},weakWeekTarget:{},weakMonthKey:{},weakMonthTarget:{}};
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterialColor")
.RefAttr("C8_MCMC_Week", xml.OP_EQUALS, weekNode.$URL);
var dependcyPath = ["Child:__Parent__/Child:__Parent__"];
search = search.addDependencyPaths(dependcyPath);
var res = search.execute({ sync: true });
if(res){
var weekNodes = res.getResultNodes();
var monthNodes = res.getNonResultNodes();
var skcs = 0;
var amount = 0.0;
weekNodes.forEach(function(node,index){
var monthId = node.__Parent__;
var monthNode = res.getNode(monthId);
var mcNode = res.getNode(monthNode.__Parent__)
node["monthTarget"]=monthNode;
var monthKeyStr = getEnumValue(monthNode.C8_MCM_CommodityType)+getEnumValue(monthNode.C8_MCM_ProductLargeType)+getEnumValue(monthNode.C8_MCM_CategoryInPlan)+getEnumValue(monthNode.UR_MCM_Silhouette);
var weekKeyStr = monthKeyStr;// + weekNode.$Name
var mcKeyStr = monthKeyStr;
//如果为强管控Node则存储作计算用 Agnes: 品类管控变更
if(node.UR_MCMC_Control) {
skcs = skcs + node.C8_MCMC_GroupGoodsSKC;
amount = amount + node.C8_MCMC_GroupGoodsAmount;
retObj.weekKey[weekKeyStr]=node.$URL;//作为索引,待后续使用
retObj.weekTarget[weekKeyStr]=node;
retObj.monthKey[monthKeyStr]=monthNode.$URL;//作为索引,待后续使用
retObj.monthTarget[monthKeyStr]=monthNode;
}else{//存储到弱管控 Agnes: 品类管控变更
retObj.weakWeekKey[weekKeyStr]=node.$URL;
retObj.weakWeekTarget[weekKeyStr]=node;
retObj.weakMonthKey[monthKeyStr]=monthNode.$URL;
retObj.weakMonthTarget[monthKeyStr]=monthNode;
}
retObj.mcTarget[mcKeyStr]=mcNode;
});
retObj.weekSkcs = skcs;
retObj.weekAmount = amount;
}
return retObj;
};
function searchTargetTableMonth(monthNode) {
var search = new Search();
var q = search.getQuery();
var retObj = {weekSkcs, weekAmount, weekTarget:{},weekKey:{},monthTarget:{},monthKey:{},weakWeekKey:{},weakWeekTarget:{},weakMonthKey:{},weakMonthTarget:{}};
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterialColor")
.RefAttr("__Parent__", xml.OP_EQUALS, monthNode.$URL, "Child:__Parent__");
var dependcyPath = ["Child:__Parent__/Child:__Parent__"];
search = search.addDependencyPaths(dependcyPath);
var res = search.execute({ sync: true });
if(res){
var weekNodes = res.getResultNodes();
var skcs = 0;
var amount = 0.0;
weekNodes.forEach(function(node,index){
var monthId = node.__Parent__;
var monthNode = res.getNode(monthId);
var mcNode = res.getNode(monthNode.__Parent__)
node["monthTarget"]=monthNode;
var monthKeyStr = getEnumValue(monthNode.C8_MCM_CommodityType)+getEnumValue(monthNode.C8_MCM_ProductLargeType)+getEnumValue(monthNode.C8_MCM_CategoryInPlan)+getEnumValue(monthNode.UR_MCM_Silhouette);
var weekKeyStr = monthKeyStr;// + weekNode.$Name
//如果为强管控Node则存储作计算用 Agnes: 品类管控变更
if(node.UR_MCMC_Control) {
skcs = skcs + node.C8_MCMC_GroupGoodsSKC;
amount = amount + node.C8_MCMC_GroupGoodsAmount;
retObj.weekKey[weekKeyStr]=node.$URL;//作为索引,待后续使用
retObj.weekTarget[weekKeyStr]=node;
retObj.monthKey[monthKeyStr]=monthNode.$URL;//作为索引,待后续使用
retObj.monthTarget[monthKeyStr]=monthNode;
}else{//存储到弱管控 Agnes: 品类管控变更
retObj.weakWeekKey[weekKeyStr]=node.$URL;
retObj.weakWeekTarget[weekKeyStr]=node;
retObj.weakMonthKey[monthKeyStr]=monthNode.$URL;
retObj.weakMonthTarget[monthKeyStr]=monthNode;
}
});
retObj.weekSkcs = skcs;
retObj.weekAmount = amount;
}
return retObj;
};
//根据周(单号)获取对应的周目标表,按照商品层+品类+中品类key+店铺URL进行汇总
//每个key下,只有一条周目标和一条月目标
function searchHyTargetTable(weekNode) {
var search = new Search();
var q = search.getQuery();
//Agnes 新增弱管控品类返回值weakWeekKey:{},weakWeekTarget:{},weakMonthKey:{},weakMonthTarget:{}
var retObj = {weekTarget:{},weekKey:{},monthTarget:{},monthKey:{},weakWeekKey:{},weakWeekTarget:{},weakMonthKey:{},weakMonthTarget:{}};
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterialColor")
.RefAttr("C8_MCMC_Week", xml.OP_EQUALS, weekNode.$URL);
var dependcyPath = ["Child:__Parent__"];
search = search.addDependencyPaths(dependcyPath);
var res = search.execute({ sync: true });
if(res){
var weekNodes = res.getResultNodes();
var monthNodes = res.getNonResultNodes();
weekNodes.forEach(function(node,index){
var monthId = node.__Parent__;
var monthNode = res.getNode(monthId);
node["monthTarget"]=monthNode;
var monthKeyStr = getEnumValue(monthNode.C8_MCM_CommodityType)+getEnumValue(monthNode.C8_MCM_ProductLargeType)+getEnumValue(monthNode.C8_MCM_CategoryInPlan)+getEnumValue(monthNode.UR_MCM_Silhouette)+monthNode.C8_MCM_Store;
var weekKeyStr = monthKeyStr;// + weekNode.$Name
//如果为强管控Node则存储作计算用 Agnes: 品类管控变更
if(node.UR_MCMC_Control) {
retObj.weekKey[weekKeyStr]=node.$URL;//作为索引,待后续使用
retObj.weekTarget[weekKeyStr]=node;
retObj.monthKey[monthKeyStr]=monthNode.$URL;//作为索引,待后续使用
retObj.monthTarget[monthKeyStr]=monthNode;
}else{//存储到弱管控 Agnes: 品类管控变更
retObj.weakWeekKey[weekKeyStr]=node.$URL;
retObj.weakWeekTarget[weekKeyStr]=node;
retObj.weakMonthKey[monthKeyStr]=monthNode.$URL;
retObj.weakMonthTarget[monthKeyStr]=monthNode;
}
});
//retObj.weekTarget = res.getResultNodes();
//retObj.monthTarget = res.getNonResultNodes();
}
return retObj;
};
//获取电商的目标表
function searchTargetTableDianShang(weekNode) {
var search = new Search();
var q = search.getQuery();
//20240410 Agnes 新增月categoryKey已组skc汇总(跨等级),检核最后一单用
var retObj = {monthSum:{},weekTarget:{},weekKey:{},monthTarget:{},monthKey:{},classLevel:{},weakWeekKey:{},weakWeekTarget:{},weakMonthKey:{},weakMonthTarget:{}};
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterialColor")
.RefAttr("C8_MCMC_Week", xml.OP_EQUALS, weekNode.$URL);
var dependcyPath = ["Child:__Parent__"];
search = search.addDependencyPaths(dependcyPath);
var res = search.execute({ sync: true });
if(res){
var weekNodes = res.getResultNodes();
var targetAmountUpper = 0;//月目标组货金额上限
var targetAmountLower = 0; //月目标组货金额下限
var zhAmount = 0;//月已组金额
weekNodes.forEach(function(node,index){
var monthId = node.__Parent__;
var monthNode = res.getNode(monthId);
//记录周目标的月目标对象
node["monthTarget"]=monthNode;
var classLevel = getEnumValue(monthNode.C8_MCM_DSLevel);
//这里记录一个品类的key,需要在组货计算完成后,获取同品类不同级别的上下线值,然后根据组货深度,给出建议的组货等级
var categoryKey = getEnumValue(monthNode.C8_MCM_CommodityType)+getEnumValue(monthNode.C8_MCM_ProductLargeType)+getEnumValue(monthNode.C8_MCM_CategoryInPlan)+getEnumValue(monthNode.UR_MCM_Silhouette);
var minClassValue = monthNode.C8_MCM_PlannedLevelStart;
var maxClassValue = monthNode.C8_MCM_PlannedLevelEnd;
monthNode["categoryKey"]=categoryKey;//将标记存放到monthNode上
if(!retObj.classLevel[categoryKey]){
retObj.classLevel[categoryKey] = [];
}
//记录同品类不同级别的上下线值,便于后续计算
retObj.classLevel[categoryKey].push({level:classLevel,min:minClassValue,max:maxClassValue});
//记录当前月目标上的不同级别的上下限值
//电商组货Key=商品层+品类+中品类+级别
var monthKeyStr = categoryKey+classLevel;
var weekKeyStr = monthKeyStr;// + weekNode.$Name
//如果为强管控Node则存储作计算用 Agnes: 品类管控变更
//强管控的汇总品类的已组货SKC数量,用于检核最后一单 20240410 Agnes
if(node.UR_MCMC_Control) {
retObj.weekKey[weekKeyStr]=node.$URL;//作为索引,待后续使用
retObj.weekTarget[weekKeyStr]=node;
retObj.monthKey[monthKeyStr]=monthNode.$URL;//作为索引,待后续使用
retObj.monthTarget[monthKeyStr]=monthNode;
if(!retObj.monthSum[categoryKey]){
retObj.monthSum[categoryKey]={monthZHSkcs:0,monthCatNSkcs:0};
}
//记录每个品类的已组skc数量,用于月末单检核
retObj.monthSum[categoryKey].monthZHSkcs=retObj.monthSum[categoryKey].monthZHSkcs+monthNode.C8_MCM_MonthGroupGoodsSKC;//monthZHSkcs数加月目标已组
//记录强管控月目标组货总金额上下限,用于设计师系列月末单检核
targetAmountUpper = targetAmountUpper + monthNode.C8_MCM_ExcessAmount + monthNode.C8_MCM_PlannedAmount;
targetAmountLower = targetAmountLower + monthNode.C8_MCM_ReduceAmount + monthNode.C8_MCM_PlannedAmount;
zhAmount = zhAmount + monthNode.C8_MCM_MonthGroupGoodsAmount;
}else{//存储到弱管控 Agnes: 品类管控变更
retObj.weakWeekKey[weekKeyStr]=node.$URL;
retObj.weakWeekTarget[weekKeyStr]=node;
retObj.weakMonthKey[monthKeyStr]=monthNode.$URL;
retObj.weakMonthTarget[monthKeyStr]=monthNode;
}
//品类N级skc数量统计,无需管强弱管控,因为弱管控对应的强管控目标不带等级
if("N" == classLevel){
if(!retObj.monthSum[categoryKey]){
retObj.monthSum[categoryKey]={monthZHSkcs:0,monthCatNSkcs:0};
}
retObj.monthSum[categoryKey].monthCatNSkcs=retObj.monthSum[categoryKey].monthCatNSkcs+monthNode.C8_MCM_MonthGroupGoodsSKC;//monthCatNSkcs数加月目标已组
}
});
//retObj.weekTarget = res.getResultNodes();
//retObj.monthTarget = res.getNonResultNodes();
retObj.targetAmountUpper = targetAmountUpper;
retObj.targetAmountLower = targetAmountLower;
retObj.zhAmount = zhAmount;
}
return retObj;
};
//设置规则表属性 Jarvis
function setRuleTemple(ac,newURL){
var fieldList = ac?.m_formData.m_fields;
var yearField = fieldList.filter(field => {
return field.m_id == "C8_SD_YearSeaon"
});
var brandField = fieldList.filter(field => {
return field.m_id == "C8_SD_Brand"
});
var chanelField = fieldList.filter(field => {
return field.m_id == "C8_SD_Channel"
});
var serField = fieldList.filter(field => {
return field.m_id == "C8_SD_ProductSeriation"
});
var descriptionField = fieldList.filter(field => {
return field.m_id == "Description"
});
var year = yearField.length > 0 ? yearField[0].m_control.displayedValue : "centric:";
if(year != "centric:"){
year = searchNodeURL("Season", year);
}
var brand = brandField.length > 0 ? brandField[0].m_control.value : "UR_enum_Brand:";
var chanel = chanelField.length > 0 ? chanelField[0].m_control.value : "UR_enum_Channel:";
var ser = serField.length > 0 ? serField[0].m_control.value : "UR_enum_ProductSeriation:";
var description = descriptionField.length > 0 ? descriptionField[0].m_control.value : "";
ac.m_writer.changeNode(newURL).changeAttribute("C8_SD_YearSeaon","ref",year);
ac.m_writer.changeNode(newURL).changeAttribute("C8_SD_Brand","enum",brand);
ac.m_writer.changeNode(newURL).changeAttribute("C8_SD_Channel","enum",chanel);
ac.m_writer.changeNode(newURL).changeAttribute("C8_SD_ProductSeriation","enum",ser);
ac.m_writer.changeNode(newURL).changeAttribute("Description","string",description);
};
//给定数值(组货深度),判断数值对应的级别-电商组货计算后,获取建议等级
//targetTableNode = result of searchTargetTableDianShang Function
function getClassLevel(initQty,categoryKey,targetTableNode){
var retClass = "";
if(targetTableNode && targetTableNode.classLevel && targetTableNode.classLevel[categoryKey]){
var classList = targetTableNode.classLevel[categoryKey];
if(classList.length>0){
for(var i=0; i<classList.length;i++){
var min = classList[i].min;
var max = classList[i].max;
if(initQty>=min && initQty<=max){
retClass = classList[i].level;
break;
}
}
}
}
return retClass;
}
//中品类转换映射
const midCatMapping = new Map([
["BU","BK"],
["BV","BQ"],
["BW","BM"],
["BX","BO"],
["BY","BJ"],
["BA","BS"],
["BB","BT"],
["BF","BL"],
["BG","BN"],
["BH","BE"]
])
//获取组货结果SKC对象,并将需要计算的属性字段重新存储,
//并按照商品层+品类+中品类进行分组存储
//DStyle=D款和大片款 ChannelSKC:==指定渠道款,SpecialSKC:特殊款
function getAndGroupSKCData(ac, resultURLs, controlRuleKeys) {
//Agnes 返回值新增弱管控品类信息 weakCategoryKey:{}
var resultJSON = {skcIds:[],list:{},skcs:{},minDeepRule3:[],prodCatSkcs:{},categoryKey:{},weakCategoryKey:{},errors:[],finalConfirmError:[],
"S":{categoryKey:[],mods:{},dSkcs:{},dCategoryKey:[],channelSKC:[],specialSKC:[]},
"R":{categoryKey:[],mods:{},dSkcs:{},dCategoryKey:[],channelSKC:[],specialSKC:[],styles:{list:[],skcs:{},skcCount:{}}},
"B":{categoryKey:[],mods:{},dSkcs:{},dCategoryKey:[],channelSKC:[],specialSKC:[],styles:{list:[],skcs:{},skcCount:{}}}
};
var stylesList = [];
if(resultURLs && resultURLs.length>0){
resultURLs.forEach(function(url,index){
var nodeObj = getNode(ac,url);
if(nodeObj && nodeObj.$Type == "MCProduct"){
if(nodeObj.C8_MCP_SKC == "centric:"){
return;
}
var skcObj = getNode(ac,nodeObj.C8_MCP_SKC);
var skcName = skcObj.$Name;
var skcCode = skcObj.UR_Colorway_PLMUniqueValue;
var skcId = skcObj.$URL;
var styleNode = getNode(ac,skcObj.__Parent__);
var styleId = styleNode.$Name;
var styleAttNode = getNode(ac,styleNode.Attributes);
// miles 0119 获取系列用于后续判断是否是acc
var cat1Node = getNode(ac,styleNode.Category1);
//从Style和Attributes上获取字段信息
var modNumber = styleNode.UR_Style_ModuleNumber;//模块号
var priceStr = getEnumValue(styleAttNode.UR_StyleAttributes_GroupCarPrice); //组货单价
var price = 0;
if(priceStr && priceStr!=""){
priceStr = priceStr.trim();
price = parseInt(priceStr);
}
var mcpPrice = nodeObj.C8_MCP_Price;
var commodityType = styleNode.UR_Style_CommodityType;//商品层
var commodityName = locale.getEnumName(commodityType);//商品层名称
var commodityTypeKey = getEnumValue(commodityType);
var category = styleNode.UR_Style_ProductLargeType; //品类
var categoryName = locale.getEnumName(category);//品类名称
var midCategory = styleAttNode.UR_StyleAttributes_MiddleCategoryType;//UR_StyleAttributes_CategoryInPlan; //中品类
var midCategoryName = locale.getEnumName(midCategory);//中品类名称
var subCategory = styleAttNode.UR_StyleAttributes_Silhouette;//子品类、
var subCategoryName = locale.getEnumName(subCategory);//子品类名称
var productStyle = styleNode.UR_Style_ProductStyleCount;//风格
//var productStyleName = locale.getEnumName(productStyle);//风格名称
//productStyle = getEnumValue(productStyle);//风格key
var styleDeepCoefficient = styleNode.UR_Style_DepthCoefficient;//单款深度系数 double
var styleDeepIndex = styleNode.UR_Style_DepthIndex;//单款深度指数 enum
var styleDeepIndexValue = getEnumValue(styleDeepIndex);
var monthAvgDeep = styleNode.UR_Style_MonthAvgDepth;//月平均深度,参考值
//从SKC上获取字段信息
var skcDeepIndex = getEnumValue(skcObj.UR_CW_BestBadIndex);//单SKC畅滞指数
var skcDeepCoefficient = skcObj.UR_CW_BestBadCoefficient;//单SKC畅滞系数
var look1 = skcObj.UR_Colorway_Look1;//Look1 boolean
var look2 = skcObj.UR_Colorway_Look2;//Look2 boolean
var look3 = skcObj.UR_Colorway_Look3;//Look3 boolean
var look4 = skcObj.UR_Colorway_Look4;//Look4 boolean
var look5 = skcObj.UR_Colorway_Look5;//Look5 boolean
var look6 = skcObj.UR_Colorway_Look6;//Look6 boolean
var initQty = skcObj.C8_CW_InitialSKCDepth; //初始深度,改值已经经过款式深度指数*skc畅滞指数*款式平均深度
//var calInitQty = parseInt(styleDeepCoefficient*skcDeepCoefficient*monthAvgDeep);
var changeInitQty = false;
//if(calInitQty != initQty){
// changeInitQty = true;//此处为防呆处理,如果skc上的初始深度没有经过计算,此处记录,后续组货完成后更新skc的初始组货深度。
// initQty = calInitQty;
//}
var fixQty = false;
var finalDeep = nodeObj.C8_MCP_AdjustingDepth;//获取用户填写的调整深度
var finalDStyleAmout = nodeObj.C8_MCP_DExcessAmount;
var finalAmount = finalDeep*price;
var userFix = nodeObj.C8_MCP_SKCLock;
if(userFix){
fixQty = true;
initQty = finalDeep;
}
//初始组货金额
var initAmount = initQty*price;
//陈列、橱窗、渠道款,任意有值,则为特殊款
var look = skcObj.C8_CW_MainPromotion;// styleNode.UR_Style_Look;//主推款
var isLook = false;
var lookName = locale.getEnumName(look);
var display = skcObj.C8_CW_DisplayType;//陈列类型
var displayName = locale.getEnumName(display);
var specialType = skcObj.C8_CW_Special;//特殊款类型 D款,大片款,英雄款
var specialTypeName = locale.getEnumName(specialType);
var channelType = skcObj.C8_CW_NSStyle;//指定渠道类型
var channelTypeName = locale.getEnumName(channelType);
var isChannelStyle = getEnumValue(channelType)==""?false:true;
var isDisplayStyle = getEnumValue(display)==""?false:true;
var isDStyle = getEnumValue(specialType)=="trailer_dedicated"||getEnumValue(specialType)=="SD";
var isSpecialStyle = false;
//主题款记录特殊款类型,后续分别计算最低深度
if(commodityTypeKey){
//是否特殊款,用于后续金额归靠时,优先锁定特殊款金额
if(look1 || look2 || look3 || look4 || look5 || look6){
isLook = true;
}
//非D款和大片款的特殊款
if( isLook|| (specialTypeName != "" && !isDStyle) || isChannelStyle || isDisplayStyle){
isSpecialStyle = true; //非D款和大片款,同时是特殊款
}
//渠道款
if(isChannelStyle){
resultJSON[commodityTypeKey].channelSKC.push(skcId);
}
//D款和大片款 - 按照表3计算最低深度
//将D款,大片款,特殊款放到一个组中,用于按照规则表3计算最低深度
if(isSpecialStyle || isDStyle){
resultJSON.minDeepRule3.push(skcId);//其中包含了常销款和基本款的D款和大片款的情况
}
}
//中品类映射转换
var midCatKey = getEnumValue(midCategory);
if(midCatMapping.has(midCatKey)){
midCatKey = midCatMapping.get(midCatKey);
}
//Agnes: 品类管控变更 拼接skc的管控key 品类_中品类_子品类_级别,并对比弱管控key
var skcControlKey = getEnumValue(category)+midCatKey+getEnumValue(subCategory) + getEnumValue(nodeObj.C8_MCP_SuggestedLevel);
var skcWeakControlKey = "";//skc弱管控品类key
var skcWeakControlKeyName = "";
var skcCategoryKey = "";
var skcCategoryKeyName ="";
if(controlRuleKeys.has(skcControlKey) || controlRuleKeys.has(skcControlKey.substring(0, 4))){//弱管控品类,skcCategoryKey只需要到品类,并生成弱管控品类key
skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category);
skcCategoryKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】";
//if (cat1Node.$Name == "UR_ACC"){//区分是否acc决定是否拼接子品类,防止与目标设置不匹配
//skcWeakControlKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey+getEnumValue(subCategory);
skcWeakControlKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】【"+locale.getEnumName(subCategory)+"】";
//}else{
skcWeakControlKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey
skcWeakControlKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】";
//}
}else {//原来的逻辑
//存储categoryKey,用于后续组货计算 // miles 0119 区分是否acc决定是否拼接子品类,防止与目标设置不匹配
//if (cat1Node.$Name == "UR_ACC"){
// skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey+getEnumValue(subCategory);
// skcCategoryKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】【"+locale.getEnumName(subCategory)+"】";
//}else{
skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey
skcCategoryKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】";
//}
}
if(!resultJSON.categoryKey[skcCategoryKey]){
resultJSON.categoryKey[skcCategoryKey]={skcs:0,styles:0,list:[],hylist:[],finalQty:0,finalAmount:0,AvgPrice:0,finalDStyleAmout:0};
}
//记录每个品类的skc数量,用于后续宽度计算(常销款,基本款)
resultJSON.categoryKey[skcCategoryKey].skcs=resultJSON.categoryKey[skcCategoryKey].skcs+1;//skc数加1
/*
//新增记录每个大品类的SKC数量汇总 用于后续宽度计算
var prodCatKey = getEnumValue(commodityType)+getEnumValue(category);
if(!resultJSON.prodCatSkcs[prodCatKey]){
resultJSON.prodCatSkcs[prodCatKey]={skcs:0,styles:0,list:[],hylist:[],finalQty:0,finalAmount:0,AvgPrice:0,finalDStyleAmout:0};
}
resultJSON.prodCatSkcs[prodCatKey].skcs=resultJSON.prodCatSkcs[prodCatKey].skcs+1;//skc数加1
*/
//记录每个品类的styles数量,用于后续宽度计算(常销款,基本款)
if(!stylesList.includes(styleId)){
resultJSON.categoryKey[skcCategoryKey].styles=resultJSON.categoryKey[skcCategoryKey].styles+1;//分类的款式数量加1
stylesList.push(styleId);
}
//计算对应key的汇总深度,汇总金额,平均价,作为后续检核时直接进行校验
var currentFinalQty = resultJSON.categoryKey[skcCategoryKey].finalQty;
currentFinalQty += finalDeep;
var currentFinalAmount = resultJSON.categoryKey[skcCategoryKey].finalAmount;
currentFinalAmount += finalAmount;
//D款大片款组货金额-超出金额
var currentFinalDStyleAmout = resultJSON.categoryKey[skcCategoryKey].finalDStyleAmout;
currentFinalDStyleAmout += finalDStyleAmout;
resultJSON.categoryKey[skcCategoryKey].finalDStyleAmout = currentFinalDStyleAmout;
//组货金额,组货深度
resultJSON.categoryKey[skcCategoryKey].finalQty = currentFinalQty;
resultJSON.categoryKey[skcCategoryKey].finalAmount = currentFinalAmount;
if(currentFinalQty!=0){
resultJSON.categoryKey[skcCategoryKey].AvgPrice = currentFinalAmount/currentFinalQty;
}
if(skcWeakControlKey != ""){//弱管控品类时保存弱管控品类数据
if(!resultJSON.weakCategoryKey[skcWeakControlKey]){
resultJSON.weakCategoryKey[skcWeakControlKey]={skcs:0,styles:0,list:[],hylist:[],finalQty:0,finalAmount:0,AvgPrice:0,finalDStyleAmout:0};
}
//记录每个品类的skc数量,用于后续宽度计算(常销款,基本款)
resultJSON.weakCategoryKey[skcWeakControlKey].skcs=resultJSON.weakCategoryKey[skcWeakControlKey].skcs+1;//skc数加1
//记录每个品类的styles数量,用于后续宽度计算(常销款,基本款)
if(!stylesList.includes(styleId)){
resultJSON.weakCategoryKey[skcWeakControlKey].styles=resultJSON.weakCategoryKey[skcWeakControlKey].styles+1;//分类的款式数量加1
stylesList.push(styleId);
}
//计算对应key的汇总深度,汇总金额,平均价,作为后续检核时直接进行校验
var currentFinalQty = resultJSON.weakCategoryKey[skcWeakControlKey].finalQty;
currentFinalQty += finalDeep;
var currentFinalAmount = resultJSON.weakCategoryKey[skcWeakControlKey].finalAmount;
currentFinalAmount += finalAmount;
//D款大片款组货金额-超出金额
var currentFinalDStyleAmout = resultJSON.weakCategoryKey[skcWeakControlKey].finalDStyleAmout;
currentFinalDStyleAmout += finalDStyleAmout;
resultJSON.weakCategoryKey[skcWeakControlKey].finalDStyleAmout = currentFinalDStyleAmout;
//组货金额,组货深度
resultJSON.weakCategoryKey[skcWeakControlKey].finalQty = currentFinalQty;
resultJSON.weakCategoryKey[skcWeakControlKey].finalAmount = currentFinalAmount;
if(currentFinalQty!=0){
resultJSON.weakCategoryKey[skcWeakControlKey].AvgPrice = currentFinalAmount/currentFinalQty;
}
}
//获取海外的数据值
//1.深度
var storeVolumnMap = new Map(Object.entries(nodeObj.C8_MCP_StoreVolumn));
var storeKey = "";
var storeWeakControlKey = "";
if(controlRuleKeys.has(skcControlKey) || controlRuleKeys.has(skcControlKey.substring(0, 4))){//汇总到品类生成storeKey
storeKey = getEnumValue(commodityType)+getEnumValue(category);
storeWeakControlKey = getEnumValue(commodityType)+getEnumValue(category)+getEnumValue(midCategory);
}else{
storeKey = getEnumValue(commodityType)+getEnumValue(category)+getEnumValue(midCategory);
}
var hylist = [];
var weakHyList = [];
var weakVolumnMap = new Map();
var volumnMap = new Map();
var resValue = 0;
var catKey = "";
var weakCatKey = "";
for (const [key, value] of storeVolumnMap) {
catKey = storeKey + key;
if(volumnMap.hasOwnProperty(catKey+"volumn")){
resValue = volumnMap.get(catKey+"volumn") + value;
}else{
resValue = value;
skcValue = value;
}
volumnMap.set(catKey+"volumn",resValue);
if(!resultJSON.categoryKey[catKey]){
resultJSON.categoryKey[catKey]={skcs:0};
}
if(resValue != 0){
resultJSON.categoryKey[catKey].skcs=resultJSON.categoryKey[catKey].skcs+1;//skc数加1
}
}
hylist.push(volumnMap);
if(storeWeakControlKey != "") { //存储海外弱管控数据
for (const [key, value] of storeVolumnMap) {
weakCatKey = storeWeakControlKey + key;
if(weakVolumnMap.hasOwnProperty(weakCatKey+"volumn")){
resValue = weakVolumnMap.get(weakCatKey+"volumn") + value;
}else{
resValue = value;
skcValue = value;
}
weakVolumnMap.set(weakCatKey+"volumn",resValue);
if(!resultJSON.weakCategoryKey[weakCatKey]){
resultJSON.weakCategoryKey[weakCatKey]={skcs:0};
}
if(resValue != 0){
resultJSON.weakCategoryKey[weakCatKey].skcs=resultJSON.weakCategoryKey[weakCatKey].skcs+1;//skc数加1
}
}
weakHyList.push(weakVolumnMap);
}
//2.企划金额
if(null != nodeObj.C8_MCP_AdjustingAmountHy){
var amountMap = new Map(Object.entries(nodeObj.C8_MCP_AdjustingAmountHy));
//var amountKey = getEnumValue(commodityType)+getEnumValue(category);//+getEnumValue(midCategory)
var priceMap = new Map();
var weakPriceMap = new Map();
var resValue = 0;
for (const [key, value] of amountMap) {
catKey = storeKey + key;
if(priceMap.hasOwnProperty(catKey+"price")){
resValue = priceMap.get(catKey+"price") + value;
}else{
resValue = value;
}
priceMap.set(catKey+"price",resValue);
}
hylist.push(priceMap);
resultJSON.categoryKey[skcCategoryKey].hylist.push(hylist);
if(storeWeakControlKey != "") { //存储海外弱管控数据
for (const [key, value] of amountMap) {
weakCatKey = storeWeakControlKey + key;
if(weakPriceMap.hasOwnProperty(weakCatKey+"price")){
resValue = weakPriceMap.get(weakCatKey+"price") + value;
}else{
resValue = value;
}
weakPriceMap.set(weakCatKey+"price",resValue);
}
}
weakHyList.push(weakPriceMap);
}
//记录每个分类下的skcId
resultJSON.categoryKey[skcCategoryKey].list.push(skcId);//skc添加到对应的categoryKey中
if(controlRuleKeys.has(skcControlKey) || controlRuleKeys.has(skcControlKey.substring(0, 4))){
resultJSON.weakCategoryKey[skcWeakControlKey].list.push(skcId);//skc添加到对应的categoryKey中
}
//单独记录,用于一起组货计算
if(!resultJSON["skcs"][skcCategoryKey]){
resultJSON["skcs"][skcCategoryKey]=[];
}
resultJSON["skcs"][skcCategoryKey].push(skcId);//按照key存储id到各自分类下
//if(!controlRuleKeys.has(skcControlKey) && !controlRuleKeys.has(skcControlKey.substring(0, 4))){//强管控品类才记录进来
//在按照商品层分类下分别记录各自的categoryKey
if(!resultJSON[commodityTypeKey]["categoryKey"].includes(skcCategoryKey)){
resultJSON[commodityTypeKey]["categoryKey"].push(skcCategoryKey);
}
//单独记录D款和大片款
if(isDStyle){
if(!resultJSON[commodityTypeKey]["dSkcs"][skcCategoryKey]){
resultJSON[commodityTypeKey]["dSkcs"][skcCategoryKey]=[];
}
resultJSON[commodityTypeKey]["dSkcs"][skcCategoryKey].push(skcId);//按照key存储id到各自分类下
//在按照商品层分类下分别记录各自的categoryKey
if(!resultJSON[commodityTypeKey]["dCategoryKey"].includes(skcCategoryKey)){
resultJSON[commodityTypeKey]["dCategoryKey"].push(skcCategoryKey);
}
}
//}
//检查style和skc上的指数和系数是否填写
var errorMsg = "";
if(price==0){
errorMsg +="【组货单价等于0】";
}
if(styleDeepCoefficient<=0){
errorMsg +="【单款深度系数必填,且不能小于或等于0】";
}
if(styleDeepIndexValue==""){
errorMsg +="【单款深度指数必填】";
}
if(skcDeepCoefficient<=0){
errorMsg +="【单SKC畅滞系数必填,且不能小于或等于0】";
}
if(skcDeepIndex==""){
errorMsg +="【单SKC畅滞指数必填】";
}
//主题款模块号必填
if(commodityTypeKey=="S" && modNumber==""){
errorMsg +="【主题款的模块号必填】";
}
if(errorMsg!=""){
var msg = skcCategoryKeyName+"skc名称【"+skcName+"】唯一码【"+skcCode+"】数据校验错误:"+errorMsg;
console.log(msg);
resultJSON.errors.push(msg);
}
//组货确认时,需要检查组货单价和调整深度必填
if(finalDeep<=0 || price<=0){
var msg = skcCategoryKeyName+"skc名称【"+skcName+"】唯一码【"+skcCode+"】数据校验错误:调整深度和组货单价必填!";
resultJSON.finalConfirmError.push(msg);
}
//计算look的skc数量,并记录到结果的json中
//主题款,并且存在模块号 look检查需要跨品类汇总,记录look下的skc,以及计算skc数量,look数量
if(commodityTypeKey && commodityTypeKey=="S" && modNumber && modNumber!=""){
var modJSON = resultJSON[commodityTypeKey].mods[modNumber];
if(!modJSON){
//lookCount:look数量,skcCount:模块内skc数量, lookSKCCount:有look标记的skc数量
resultJSON[commodityTypeKey].mods[modNumber] = {skcCount:0,lookCount:0,lookSKCCount:0,looks:{list:[]}};
modJSON = resultJSON[commodityTypeKey].mods[modNumber];
}
//记录模块的skc数量
modJSON.skcCount = modJSON.skcCount+1;
if(look1 || look2 || look3 || look4 || look5 || look6){
modJSON.lookSKCCount = modJSON.lookSKCCount+1;
}
var lookName = "";
var lookArray = [look1,look2,look3,look4,look5,look6];
var lookNameArray = ["look1","look2","look3","look4","look5","look6"];
for(var i=0;i<6;i++){
var lookA = lookArray[i];
var lookAName = lookNameArray[i];
if(lookA){
if(!modJSON.looks.list.includes(lookAName)){
modJSON.looks.list.push(lookAName);
modJSON.lookCount = modJSON.lookCount+1;
}
if(!modJSON.looks[lookAName]){
modJSON.looks[lookAName]=[];
modJSON.looks[lookAName].push(skcId)
}else{
modJSON.looks[lookAName].push(skcId);
}
}
}
}
//如果是常销款或基本款, 同一个款内 SKC 要求: 按照款号汇总,
if(commodityTypeKey && commodityTypeKey=="R" || commodityTypeKey=="B"){
//按照款式汇总skc数量
var stylesJson = resultJSON[commodityTypeKey].styles;
if(stylesJson.list.includes(styleId)){
stylesJson.skcCount[styleId]=stylesJson.skcCount[styleId]+1;
stylesJson.skcs[styleId].push(skcId);//记录一个款式下的skc
}else{
stylesJson.skcCount[styleId]=1;
stylesJson.skcs[styleId] = [skcId];
stylesJson.list.push(styleId);
}
}
//记录skc对象,用于后续组货取值和计算,其中calQty,calAmount为最后建议的深度和金额
////styDeepIdx:styleDeepIndex,styDeepCoefficient:styleDeepCoefficient,skcDeepIndex:skcDeepIndex,skcDeepCoefficient:skcDeepCoefficient,
//字段含义说明: minQty=最低深度,minQtyD=D款大片款最低深度 initQty=初始深度 lookCalQty=计算look最低深度时的中间扣减值
//calQty=建议深度 calAmount=建议金额
var zhSCKObj = {"skcId": skcId,skcName:skcName,"skcCode":skcCode,"styleId":styleId,mcpId:url,categoryKey:skcCategoryKey,categoryKeyName:skcCategoryKeyName,commodityType:commodityType,commodityName:commodityName,
commodityTypeKey:commodityTypeKey,catId:category,catName:categoryName, midCatId:midCategory,midCatName:midCategoryName,productStyle:productStyle,
modNumber:modNumber,look1:look1,look2:look2,look3:look3,look4:look4,look5:look5,look6:look6,isLook:isLook, display:display,specialType:specialType,channelType:channelType,subCategory:subCategory,subCategoryName:subCategoryName,
lookName:lookName,displayName:displayName,specialTypeName:specialTypeName,channelTypeName:channelTypeName,isDStyle:isDStyle,isSpecialStyle:isSpecialStyle,
"price": price, mcpPrice:mcpPrice, "minQty": 0, "minQtyD":0, "initQty": initQty, lookCalQty:initQty,"initAmount":initAmount, "initAmountPct":0, "calQty": 0, "calAmount":0,"calAmountPct":0,
standardDeep:0,shopCoverCount:0, isMinQty:false, fixQty:fixQty,userFix:userFix, fixAmout:false,finalQty:finalDeep,finalAmount:finalAmount,finalDStyleAmout:finalDStyleAmout
};
resultJSON.list[skcId]=zhSCKObj; //url-node
resultJSON.skcIds.push(skcId);//url index
}
});
}
return resultJSON;
};
//获取组货结果SKC对象,并将需要计算的属性字段重新存储,
//并按照商品层+品类+中品类进行分组存储
//DStyle=D款和大片款 ChannelSKC:==指定渠道款,SpecialSKC:特殊款
function getAndGroupSKCDataV2(ac, resultURLs, controlRuleKeys) {
//Agnes 返回值新增弱管控品类信息 weakCategoryKey:{} 20240407 新增总金额汇总
var resultJSON = {skcIds:[],list:{},skcs:{},minDeepRule3:[],prodCatSkcs:{},categoryKey:{},weakCategoryKey:{},errors:[],finalConfirmError:[],
"S":{categoryKey:[],mods:{},dSkcs:{},dCategoryKey:[],channelSKC:[],specialSKC:[]},
"R":{categoryKey:[],mods:{},dSkcs:{},dCategoryKey:[],channelSKC:[],specialSKC:[],styles:{list:[],skcs:{},skcCount:{}}},
"B":{categoryKey:[],mods:{},dSkcs:{},dCategoryKey:[],channelSKC:[],specialSKC:[],styles:{list:[],skcs:{},skcCount:{}}}
};
var stylesList = [];
if(resultURLs && resultURLs.length>0){
var amount = 0;
resultURLs.forEach(function(url,index){
var nodeObj = getNode(ac,url);
if(nodeObj && nodeObj.$Type == "MCProduct"){
if(nodeObj.C8_MCP_SKC == "centric:"){
return;
}
var skcObj = getNode(ac,nodeObj.C8_MCP_SKC);
var skcName = skcObj.$Name;
var skcCode = skcObj.UR_Colorway_PLMUniqueValue;
var skcId = skcObj.$URL;
var styleNode = getNode(ac,skcObj.__Parent__);
var styleId = styleNode.$Name;
var styleAttNode = getNode(ac,styleNode.Attributes);
// miles 0119 获取系列用于后续判断是否是acc
var cat1Node = getNode(ac,styleNode.Category1);
//从Style和Attributes上获取字段信息
var modNumber = styleNode.UR_Style_ModuleNumber;//模块号
var priceStr = getEnumValue(styleAttNode.UR_StyleAttributes_GroupCarPrice); //组货单价
var price = 0;
if(priceStr && priceStr!=""){
priceStr = priceStr.trim();
price = parseInt(priceStr);
}
var mcpPrice = nodeObj.C8_MCP_Price;
var commodityType = styleNode.UR_Style_CommodityType;//商品层
var commodityName = locale.getEnumName(commodityType);//商品层名称
var commodityTypeKey = getEnumValue(commodityType);
var category = styleNode.UR_Style_ProductLargeType; //品类
var categoryName = locale.getEnumName(category);//品类名称
var midCategory = styleAttNode.UR_StyleAttributes_MiddleCategoryType;//UR_StyleAttributes_CategoryInPlan; //中品类
var midCategoryName = locale.getEnumName(midCategory);//中品类名称
var subCategory = styleAttNode.UR_StyleAttributes_Silhouette;//子品类、
var subCategoryName = locale.getEnumName(subCategory);//子品类名称
var productStyle = styleNode.UR_Style_ProductStyleCount;//风格
//var productStyleName = locale.getEnumName(productStyle);//风格名称
//productStyle = getEnumValue(productStyle);//风格key
var styleDeepCoefficient = styleNode.UR_Style_DepthCoefficient;//单款深度系数 double
var styleDeepIndex = styleNode.UR_Style_DepthIndex;//单款深度指数 enum
var styleDeepIndexValue = getEnumValue(styleDeepIndex);
var monthAvgDeep = styleNode.UR_Style_MonthAvgDepth;//月平均深度,参考值
//从SKC上获取字段信息
var skcDeepIndex = getEnumValue(skcObj.UR_CW_BestBadIndex);//单SKC畅滞指数
var skcDeepCoefficient = skcObj.UR_CW_BestBadCoefficient;//单SKC畅滞系数
var look1 = skcObj.UR_Colorway_Look1;//Look1 boolean
var look2 = skcObj.UR_Colorway_Look2;//Look2 boolean
var look3 = skcObj.UR_Colorway_Look3;//Look3 boolean
var look4 = skcObj.UR_Colorway_Look4;//Look4 boolean
var look5 = skcObj.UR_Colorway_Look5;//Look5 boolean
var look6 = skcObj.UR_Colorway_Look6;//Look6 boolean
var initQty = skcObj.C8_CW_InitialSKCDepth; //初始深度,改值已经经过款式深度指数*skc畅滞指数*款式平均深度
//var calInitQty = parseInt(styleDeepCoefficient*skcDeepCoefficient*monthAvgDeep);
var changeInitQty = false;
//if(calInitQty != initQty){
// changeInitQty = true;//此处为防呆处理,如果skc上的初始深度没有经过计算,此处记录,后续组货完成后更新skc的初始组货深度。
// initQty = calInitQty;
//}
var fixQty = false;
var finalDeep = nodeObj.C8_MCP_AdjustingDepth;//获取用户填写的调整深度
var finalDStyleAmout = nodeObj.C8_MCP_DExcessAmount;
var finalAmount = finalDeep*price;
var userFix = nodeObj.C8_MCP_SKCLock;
if(userFix){
fixQty = true;
initQty = finalDeep;
}
//初始组货金额
var initAmount = initQty*price;
//陈列、橱窗、渠道款,任意有值,则为特殊款
var look = skcObj.C8_CW_MainPromotion;// styleNode.UR_Style_Look;//主推款
var isLook = false;
var lookName = locale.getEnumName(look);
var display = skcObj.C8_CW_DisplayType;//陈列类型
var displayName = locale.getEnumName(display);
var specialType = skcObj.C8_CW_Special;//特殊款类型 D款,大片款,英雄款
var specialTypeName = locale.getEnumName(specialType);
var channelType = skcObj.C8_CW_NSStyle;//指定渠道类型
var channelTypeName = locale.getEnumName(channelType);
var isChannelStyle = getEnumValue(channelType)==""?false:true;
var isDisplayStyle = getEnumValue(display)==""?false:true;
var isDStyle = getEnumValue(specialType)=="trailer_dedicated"||getEnumValue(specialType)=="SD";
var isSpecialStyle = false;
//主题款记录特殊款类型,后续分别计算最低深度
if(commodityTypeKey){
//是否特殊款,用于后续金额归靠时,优先锁定特殊款金额
if(look1 || look2 || look3 || look4 || look5 || look6){
isLook = true;
}
//非D款和大片款的特殊款
if( isLook|| (specialTypeName != "" && !isDStyle) || isChannelStyle || isDisplayStyle){
isSpecialStyle = true; //非D款和大片款,同时是特殊款
}
//渠道款
if(isChannelStyle){
resultJSON[commodityTypeKey].channelSKC.push(skcId);
}
//D款和大片款 - 按照表3计算最低深度
//将D款,大片款,特殊款放到一个组中,用于按照规则表3计算最低深度
if(isSpecialStyle || isDStyle){
resultJSON.minDeepRule3.push(skcId);//其中包含了常销款和基本款的D款和大片款的情况
}
}
//中品类映射转换
var midCatKey = getEnumValue(midCategory);
if(midCatMapping.has(midCatKey)){
midCatKey = midCatMapping.get(midCatKey);
}
//Agnes: 品类管控变更 拼接skc的管控key 品类_中品类_子品类_级别,并对比弱管控key
var skcControlKey = getEnumValue(category)+midCatKey+getEnumValue(subCategory) + getEnumValue(nodeObj.C8_MCP_SuggestedLevel);
var skcWeakControlKey = "";//skc弱管控品类key
var skcWeakControlKeyName = "";
var skcCategoryKey = "";
var skcCategoryKeyName ="";
if(controlRuleKeys.has(skcControlKey) || controlRuleKeys.has(skcControlKey.substring(0, 4))){//弱管控品类,skcCategoryKey只需要到品类,并生成弱管控品类key
skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category);
skcCategoryKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】";
//if (cat1Node.$Name == "UR_ACC"){//区分是否acc决定是否拼接子品类,防止与目标设置不匹配
//skcWeakControlKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey+getEnumValue(subCategory);
skcWeakControlKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】【"+locale.getEnumName(subCategory)+"】";
//}else{
skcWeakControlKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey
skcWeakControlKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】";
//}
}else {//原来的逻辑
//存储categoryKey,用于后续组货计算 // miles 0119 区分是否acc决定是否拼接子品类,防止与目标设置不匹配
//if (cat1Node.$Name == "UR_ACC"){
// skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey+getEnumValue(subCategory);
// skcCategoryKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】【"+locale.getEnumName(subCategory)+"】";
//}else{
skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey
skcCategoryKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】";
//}
}
if(!resultJSON.categoryKey[skcCategoryKey]){
resultJSON.categoryKey[skcCategoryKey]={skcs:0,styles:0,list:[],hylist:[],finalQty:0,finalAmount:0,AvgPrice:0,finalDStyleAmout:0};
}
//记录每个品类的skc数量,用于后续宽度计算(常销款,基本款)
resultJSON.categoryKey[skcCategoryKey].skcs=resultJSON.categoryKey[skcCategoryKey].skcs+1;//skc数加1
//新增记录每个大品类的SKC数量汇总 用于后续宽度计算
var prodCatKey = getEnumValue(commodityType)+getEnumValue(category);
if(!resultJSON.prodCatSkcs[prodCatKey]){
resultJSON.prodCatSkcs[prodCatKey]={skcs:0,styles:0,list:[],hylist:[],finalQty:0,finalAmount:0,AvgPrice:0,finalDStyleAmout:0};
}
resultJSON.prodCatSkcs[prodCatKey].skcs=resultJSON.prodCatSkcs[prodCatKey].skcs+1;//skc数加1
//记录每个品类的styles数量,用于后续宽度计算(常销款,基本款)
if(!stylesList.includes(styleId)){
resultJSON.categoryKey[skcCategoryKey].styles=resultJSON.categoryKey[skcCategoryKey].styles+1;//分类的款式数量加1
stylesList.push(styleId);
}
//计算对应key的汇总深度,汇总金额,平均价,作为后续检核时直接进行校验
var currentFinalQty = resultJSON.categoryKey[skcCategoryKey].finalQty;
currentFinalQty += finalDeep;
var currentFinalAmount = resultJSON.categoryKey[skcCategoryKey].finalAmount;
currentFinalAmount += finalAmount;
//D款大片款组货金额-超出金额
var currentFinalDStyleAmout = resultJSON.categoryKey[skcCategoryKey].finalDStyleAmout;
currentFinalDStyleAmout += finalDStyleAmout;
resultJSON.categoryKey[skcCategoryKey].finalDStyleAmout = currentFinalDStyleAmout;
//组货金额,组货深度
resultJSON.categoryKey[skcCategoryKey].finalQty = currentFinalQty;
resultJSON.categoryKey[skcCategoryKey].finalAmount = currentFinalAmount;
if(currentFinalQty!=0){
resultJSON.categoryKey[skcCategoryKey].AvgPrice = currentFinalAmount/currentFinalQty;
}
if(skcWeakControlKey != ""){//弱管控品类时保存弱管控品类数据
if(!resultJSON.weakCategoryKey[skcWeakControlKey]){
resultJSON.weakCategoryKey[skcWeakControlKey]={skcs:0,styles:0,list:[],hylist:[],finalQty:0,finalAmount:0,AvgPrice:0,finalDStyleAmout:0};
}
//记录每个品类的skc数量,用于后续宽度计算(常销款,基本款)
resultJSON.weakCategoryKey[skcWeakControlKey].skcs=resultJSON.weakCategoryKey[skcWeakControlKey].skcs+1;//skc数加1
//记录每个品类的styles数量,用于后续宽度计算(常销款,基本款)
if(!stylesList.includes(styleId)){
resultJSON.weakCategoryKey[skcWeakControlKey].styles=resultJSON.weakCategoryKey[skcWeakControlKey].styles+1;//分类的款式数量加1
stylesList.push(styleId);
}
//计算对应key的汇总深度,汇总金额,平均价,作为后续检核时直接进行校验
var currentFinalQty = resultJSON.weakCategoryKey[skcWeakControlKey].finalQty;
currentFinalQty += finalDeep;
var currentFinalAmount = resultJSON.weakCategoryKey[skcWeakControlKey].finalAmount;
currentFinalAmount += finalAmount;
//D款大片款组货金额-超出金额
var currentFinalDStyleAmout = resultJSON.weakCategoryKey[skcWeakControlKey].finalDStyleAmout;
currentFinalDStyleAmout += finalDStyleAmout;
resultJSON.weakCategoryKey[skcWeakControlKey].finalDStyleAmout = currentFinalDStyleAmout;
//组货金额,组货深度
resultJSON.weakCategoryKey[skcWeakControlKey].finalQty = currentFinalQty;
resultJSON.weakCategoryKey[skcWeakControlKey].finalAmount = currentFinalAmount;
if(currentFinalQty!=0){
resultJSON.weakCategoryKey[skcWeakControlKey].AvgPrice = currentFinalAmount/currentFinalQty;
}
}
//记录每个分类下的skcId
resultJSON.categoryKey[skcCategoryKey].list.push(skcId);//skc添加到对应的categoryKey中
if(controlRuleKeys.has(skcControlKey) || controlRuleKeys.has(skcControlKey.substring(0, 4))){
resultJSON.weakCategoryKey[skcWeakControlKey].list.push(skcId);//skc添加到对应的categoryKey中
}
//单独记录,用于一起组货计算
if(!resultJSON["skcs"][skcCategoryKey]){
resultJSON["skcs"][skcCategoryKey]=[];
}
resultJSON["skcs"][skcCategoryKey].push(skcId);//按照key存储id到各自分类下
//if(!controlRuleKeys.has(skcControlKey) && !controlRuleKeys.has(skcControlKey.substring(0, 4))){//强管控品类才记录进来
//在按照商品层分类下分别记录各自的categoryKey
if(!resultJSON[commodityTypeKey]["categoryKey"].includes(skcCategoryKey)){
resultJSON[commodityTypeKey]["categoryKey"].push(skcCategoryKey);
}
//单独记录D款和大片款
if(isDStyle){
if(!resultJSON[commodityTypeKey]["dSkcs"][skcCategoryKey]){
resultJSON[commodityTypeKey]["dSkcs"][skcCategoryKey]=[];
}
resultJSON[commodityTypeKey]["dSkcs"][skcCategoryKey].push(skcId);//按照key存储id到各自分类下
//在按照商品层分类下分别记录各自的categoryKey
if(!resultJSON[commodityTypeKey]["dCategoryKey"].includes(skcCategoryKey)){
resultJSON[commodityTypeKey]["dCategoryKey"].push(skcCategoryKey);
}
}
//}
//检查style和skc上的指数和系数是否填写
var errorMsg = "";
if(price==0){
errorMsg +="【组货单价等于0】";
}
if(styleDeepCoefficient<=0){
errorMsg +="【单款深度系数必填,且不能小于或等于0】";
}
if(styleDeepIndexValue==""){
errorMsg +="【单款深度指数必填】";
}
if(skcDeepCoefficient<=0){
errorMsg +="【单SKC畅滞系数必填,且不能小于或等于0】";
}
if(skcDeepIndex==""){
errorMsg +="【单SKC畅滞指数必填】";
}
//主题款模块号必填
if(commodityTypeKey=="S" && modNumber==""){
errorMsg +="【主题款的模块号必填】";
}
if(errorMsg!=""){
var msg = skcCategoryKeyName+"skc名称【"+skcName+"】唯一码【"+skcCode+"】数据校验错误:"+errorMsg;
console.log(msg);
resultJSON.errors.push(msg);
}
//组货确认时,需要检查组货单价和调整深度必填
if(finalDeep<=0 || price<=0){
var msg = skcCategoryKeyName+"skc名称【"+skcName+"】唯一码【"+skcCode+"】数据校验错误:调整深度和组货单价必填!";
resultJSON.finalConfirmError.push(msg);
}
//计算look的skc数量,并记录到结果的json中
//主题款,并且存在模块号 look检查需要跨品类汇总,记录look下的skc,以及计算skc数量,look数量
if(commodityTypeKey && commodityTypeKey=="S" && modNumber && modNumber!=""){
var modJSON = resultJSON[commodityTypeKey].mods[modNumber];
if(!modJSON){
//lookCount:look数量,skcCount:模块内skc数量, lookSKCCount:有look标记的skc数量
resultJSON[commodityTypeKey].mods[modNumber] = {skcCount:0,lookCount:0,lookSKCCount:0,looks:{list:[]}};
modJSON = resultJSON[commodityTypeKey].mods[modNumber];
}
//记录模块的skc数量
modJSON.skcCount = modJSON.skcCount+1;
if(look1 || look2 || look3 || look4 || look5 || look6){
modJSON.lookSKCCount = modJSON.lookSKCCount+1;
}
var lookName = "";
var lookArray = [look1,look2,look3,look4,look5,look6];
var lookNameArray = ["look1","look2","look3","look4","look5","look6"];
for(var i=0;i<6;i++){
var lookA = lookArray[i];
var lookAName = lookNameArray[i];
if(lookA){
if(!modJSON.looks.list.includes(lookAName)){
modJSON.looks.list.push(lookAName);
modJSON.lookCount = modJSON.lookCount+1;
}
if(!modJSON.looks[lookAName]){
modJSON.looks[lookAName]=[];
modJSON.looks[lookAName].push(skcId)
}else{
modJSON.looks[lookAName].push(skcId);
}
}
}
}
//如果是常销款或基本款, 同一个款内 SKC 要求: 按照款号汇总,
if(commodityTypeKey && commodityTypeKey=="R" || commodityTypeKey=="B"){
//按照款式汇总skc数量
var stylesJson = resultJSON[commodityTypeKey].styles;
if(stylesJson.list.includes(styleId)){
stylesJson.skcCount[styleId]=stylesJson.skcCount[styleId]+1;
stylesJson.skcs[styleId].push(skcId);//记录一个款式下的skc
}else{
stylesJson.skcCount[styleId]=1;
stylesJson.skcs[styleId] = [skcId];
stylesJson.list.push(styleId);
}
}
//记录skc对象,用于后续组货取值和计算,其中calQty,calAmount为最后建议的深度和金额
////styDeepIdx:styleDeepIndex,styDeepCoefficient:styleDeepCoefficient,skcDeepIndex:skcDeepIndex,skcDeepCoefficient:skcDeepCoefficient,
//字段含义说明: minQty=最低深度,minQtyD=D款大片款最低深度 initQty=初始深度 lookCalQty=计算look最低深度时的中间扣减值
//calQty=建议深度 calAmount=建议金额
var zhSCKObj = {"skcId": skcId,skcName:skcName,"skcCode":skcCode,"styleId":styleId,mcpId:url,categoryKey:skcCategoryKey,categoryKeyName:skcCategoryKeyName,commodityType:commodityType,commodityName:commodityName,
commodityTypeKey:commodityTypeKey,catId:category,catName:categoryName, midCatId:midCategory,midCatName:midCategoryName,productStyle:productStyle,
modNumber:modNumber,look1:look1,look2:look2,look3:look3,look4:look4,look5:look5,look6:look6,isLook:isLook, display:display,specialType:specialType,channelType:channelType,subCategory:subCategory,subCategoryName:subCategoryName,
lookName:lookName,displayName:displayName,specialTypeName:specialTypeName,channelTypeName:channelTypeName,isDStyle:isDStyle,isSpecialStyle:isSpecialStyle,
"price": price, mcpPrice:mcpPrice, "minQty": 0, "minQtyD":0, "initQty": initQty, lookCalQty:initQty,"initAmount":initAmount, "initAmountPct":0, "calQty": 0, "calAmount":0,"calAmountPct":0,
standardDeep:0,shopCoverCount:0, isMinQty:false, fixQty:fixQty,userFix:userFix, fixAmout:false,finalQty:finalDeep,finalAmount:finalAmount,finalDStyleAmout:finalDStyleAmout
};
resultJSON.list[skcId]=zhSCKObj; //url-node
resultJSON.skcIds.push(skcId);//url index
var depth = (nodeObj.C8_MCP_AdjustingDepth == 0 ? nodeObj.C8_MCP_SuggestedDepth : nodeObj.C8_MCP_AdjustingDepth);
amount = amount + depth*price;
}
});
resultJSON.amount = amount;
}
return resultJSON;
};
//获取组货结果SKC对象,并将需要计算的属性字段重新存储,
//并按照商品层+品类+中品类进行分组存储
//DStyle=D款和大片款 ChannelSKC:==指定渠道款,SpecialSKC:特殊款
function getAndGroupSKCDataHW(ac, resultURLs, controlRuleKeys) {
//Agnes 返回值新增弱管控品类信息 weakCategoryKey:{}
var resultJSON = {skcIds:[],list:{},skcs:{store:{}},minDeepRule3:[],prodCatSkcs:{},categoryKey:{},weakCategoryKey:{},errors:[],finalConfirmError:[],
"S":{categoryKey:[],mods:{},dSkcs:{},dCategoryKey:[],channelSKC:[],specialSKC:[]},
"R":{categoryKey:[],mods:{},dSkcs:{},dCategoryKey:[],channelSKC:[],specialSKC:[],styles:{list:[],skcs:{},skcCount:{}}},
"B":{categoryKey:[],mods:{},dSkcs:{},dCategoryKey:[],channelSKC:[],specialSKC:[],styles:{list:[],skcs:{},skcCount:{}}}
};
var stylesList = [];
if(resultURLs && resultURLs.length>0){
resultURLs.forEach(function(url,index){
var nodeObj = getNode(ac,url);
if(nodeObj && nodeObj.$Type == "MCProduct"){
if(nodeObj.C8_MCP_SKC == "centric:"){
return;
}
var skcObj = getNode(ac,nodeObj.C8_MCP_SKC);
var skcName = skcObj.$Name;
var skcCode = skcObj.UR_Colorway_PLMUniqueValue;
var skcId = skcObj.$URL;
var styleNode = getNode(ac,skcObj.__Parent__);
var styleId = styleNode.$Name;
var styleAttNode = getNode(ac,styleNode.Attributes);
// miles 0119 获取系列用于后续判断是否是acc
var cat1Node = getNode(ac,styleNode.Category1);
//从Style和Attributes上获取字段信息
var modNumber = styleNode.UR_Style_ModuleNumber;//模块号
var priceStr = getEnumValue(styleAttNode.UR_StyleAttributes_GroupCarPrice); //组货单价
var originalSeries = styleAttNode.UR_StyleAttributes_OriginalSeries; //子系列
var price = 0;
if(priceStr && priceStr!=""){
priceStr = priceStr.trim();
price = parseInt(priceStr);
}
var mcpPrice = nodeObj.C8_MCP_Price;
var store = nodeObj.C8_MCP_StoreLevel;
var commodityType = styleNode.UR_Style_CommodityType;//商品层
var commodityName = locale.getEnumName(commodityType);//商品层名称
var commodityTypeKey = getEnumValue(commodityType);
var category = styleNode.UR_Style_ProductLargeType; //品类
var categoryName = locale.getEnumName(category);//品类名称
var midCategory = styleAttNode.UR_StyleAttributes_MiddleCategoryType;//UR_StyleAttributes_CategoryInPlan; //中品类
var midCategoryName = locale.getEnumName(midCategory);//中品类名称
var subCategory = styleAttNode.UR_StyleAttributes_Silhouette;//子品类、
var subCategoryName = locale.getEnumName(subCategory);//子品类名称
var productStyle = styleNode.UR_Style_ProductStyleCount;//风格
//var productStyleName = locale.getEnumName(productStyle);//风格名称
//productStyle = getEnumValue(productStyle);//风格key
var styleDeepCoefficient = styleNode.UR_Style_DepthCoefficient;//单款深度系数 double
var styleDeepIndex = styleNode.UR_Style_DepthIndex;//单款深度指数 enum
var styleDeepIndexValue = getEnumValue(styleDeepIndex);
var monthAvgDeep = styleNode.UR_Style_MonthAvgDepth;//月平均深度,参考值
//从SKC上获取字段信息
var skcDeepIndex = getEnumValue(skcObj.UR_CW_BestBadIndex);//单SKC畅滞指数
var skcDeepCoefficient = skcObj.UR_CW_BestBadCoefficient;//单SKC畅滞系数
var look1 = skcObj.UR_Colorway_Look1;//Look1 boolean
var look2 = skcObj.UR_Colorway_Look2;//Look2 boolean
var look3 = skcObj.UR_Colorway_Look3;//Look3 boolean
var look4 = skcObj.UR_Colorway_Look4;//Look4 boolean
var look5 = skcObj.UR_Colorway_Look5;//Look5 boolean
var look6 = skcObj.UR_Colorway_Look6;//Look6 boolean
var initQty = skcObj.C8_CW_InitialSKCDepth; //初始深度,改值已经经过款式深度指数*skc畅滞指数*款式平均深度
//var calInitQty = parseInt(styleDeepCoefficient*skcDeepCoefficient*monthAvgDeep);
var changeInitQty = false;
//if(calInitQty != initQty){
// changeInitQty = true;//此处为防呆处理,如果skc上的初始深度没有经过计算,此处记录,后续组货完成后更新skc的初始组货深度。
// initQty = calInitQty;
//}
var fixQty = false;
var finalDeep = nodeObj.C8_MCP_AdjustingDepth;//获取用户填写的调整深度
var finalDStyleAmout = nodeObj.C8_MCP_DExcessAmount;
var finalAmount = finalDeep*price;
var userFix = nodeObj.C8_MCP_SKCLock;
if(userFix){
fixQty = true;
initQty = finalDeep;
}
//初始组货金额
var initAmount = initQty*price;
//陈列、橱窗、渠道款,任意有值,则为特殊款
var look = skcObj.C8_CW_MainPromotion;// styleNode.UR_Style_Look;//主推款
var isLook = false;
var lookName = locale.getEnumName(look);
var display = skcObj.C8_CW_DisplayType;//陈列类型
var displayName = locale.getEnumName(display);
var specialType = skcObj.C8_CW_Special;//特殊款类型 D款,大片款,英雄款
var specialTypeName = locale.getEnumName(specialType);
var channelType = skcObj.C8_CW_NSStyle;//指定渠道类型
var channelTypeName = locale.getEnumName(channelType);
var isChannelStyle = getEnumValue(channelType)==""?false:true;
var isDisplayStyle = getEnumValue(display)==""?false:true;
var isDStyle = getEnumValue(specialType)=="trailer_dedicated"||getEnumValue(specialType)=="SD";
var isSpecialStyle = false;
//主题款记录特殊款类型,后续分别计算最低深度
if(commodityTypeKey){
//是否特殊款,用于后续金额归靠时,优先锁定特殊款金额
if(look1 || look2 || look3 || look4 || look5 || look6){
isLook = true;
}
//非D款和大片款的特殊款
if( isLook|| (specialTypeName != "" && !isDStyle) || isChannelStyle || isDisplayStyle){
isSpecialStyle = true; //非D款和大片款,同时是特殊款
}
//渠道款
if(isChannelStyle){
resultJSON[commodityTypeKey].channelSKC.push(skcId);
}
//D款和大片款 - 按照表3计算最低深度
//将D款,大片款,特殊款放到一个组中,用于按照规则表3计算最低深度
if(isSpecialStyle || isDStyle){
resultJSON.minDeepRule3.push(skcId);//其中包含了常销款和基本款的D款和大片款的情况
}
}
//中品类映射转换
var midCatKey = getEnumValue(midCategory);
if(midCatMapping.has(midCatKey)){
midCatKey = midCatMapping.get(midCatKey);
}
//Agnes: 品类管控变更 拼接skc的管控key 品类_中品类_子品类_级别,并对比弱管控key
var skcControlKey = getEnumValue(category)+midCatKey+getEnumValue(subCategory) + getEnumValue(nodeObj.C8_MCP_SuggestedLevel);
var skcWeakControlKey = "";//skc弱管控品类key
var skcWeakControlKeyName = "";
var skcCategoryKey = "";
var skcCategoryKeyName ="";
if(controlRuleKeys.has(skcControlKey) || controlRuleKeys.has(skcControlKey.substring(0, 4))){//弱管控品类,skcCategoryKey只需要到品类,并生成弱管控品类key
skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category);
skcCategoryKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】";
//if (cat1Node.$Name == "UR_ACC"){//区分是否acc决定是否拼接子品类,防止与目标设置不匹配
//skcWeakControlKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey+getEnumValue(subCategory);
skcWeakControlKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】【"+locale.getEnumName(subCategory)+"】";
//}else{
skcWeakControlKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey
skcWeakControlKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】";
//}
}else {//原来的逻辑
//存储categoryKey,用于后续组货计算 // miles 0119 区分是否acc决定是否拼接子品类,防止与目标设置不匹配
//if (cat1Node.$Name == "UR_ACC"){
// skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey+getEnumValue(subCategory);
// skcCategoryKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】【"+locale.getEnumName(subCategory)+"】";
//}else{
skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey
skcCategoryKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】";
//}
}
if(!resultJSON.categoryKey[skcCategoryKey]){
resultJSON.categoryKey[skcCategoryKey]={skcs:0,styles:0,list:[],hylist:[],finalQty:0,finalAmount:0,AvgPrice:0,finalDStyleAmout:0};
}
//记录每个品类的skc数量,用于后续宽度计算(常销款,基本款)
resultJSON.categoryKey[skcCategoryKey].skcs=resultJSON.categoryKey[skcCategoryKey].skcs+1;//skc数加1
//新增记录每个大品类的SKC数量汇总 用于后续宽度计算
var prodCatKey = getEnumValue(commodityType)+getEnumValue(category);
if(!resultJSON.prodCatSkcs[prodCatKey]){
resultJSON.prodCatSkcs[prodCatKey]={skcs:0,styles:0,list:[],hylist:[],finalQty:0,finalAmount:0,AvgPrice:0,finalDStyleAmout:0};
}
resultJSON.prodCatSkcs[prodCatKey].skcs=resultJSON.prodCatSkcs[prodCatKey].skcs+1;//skc数加1
//记录每个品类的styles数量,用于后续宽度计算(常销款,基本款)
if(!stylesList.includes(styleId)){
resultJSON.categoryKey[skcCategoryKey].styles=resultJSON.categoryKey[skcCategoryKey].styles+1;//分类的款式数量加1
stylesList.push(styleId);
}
//计算对应key的汇总深度,汇总金额,平均价,作为后续检核时直接进行校验
var currentFinalQty = resultJSON.categoryKey[skcCategoryKey].finalQty;
currentFinalQty += finalDeep;
var currentFinalAmount = resultJSON.categoryKey[skcCategoryKey].finalAmount;
currentFinalAmount += finalAmount;
//D款大片款组货金额-超出金额
var currentFinalDStyleAmout = resultJSON.categoryKey[skcCategoryKey].finalDStyleAmout;
currentFinalDStyleAmout += finalDStyleAmout;
resultJSON.categoryKey[skcCategoryKey].finalDStyleAmout = currentFinalDStyleAmout;
//组货金额,组货深度
resultJSON.categoryKey[skcCategoryKey].finalQty = currentFinalQty;
resultJSON.categoryKey[skcCategoryKey].finalAmount = currentFinalAmount;
if(currentFinalQty!=0){
resultJSON.categoryKey[skcCategoryKey].AvgPrice = currentFinalAmount/currentFinalQty;
}
if(skcWeakControlKey != ""){//弱管控品类时保存弱管控品类数据
if(!resultJSON.weakCategoryKey[skcWeakControlKey]){
resultJSON.weakCategoryKey[skcWeakControlKey]={skcs:0,styles:0,list:[],hylist:[],finalQty:0,finalAmount:0,AvgPrice:0,finalDStyleAmout:0};
}
//记录每个品类的skc数量,用于后续宽度计算(常销款,基本款)
resultJSON.weakCategoryKey[skcWeakControlKey].skcs=resultJSON.weakCategoryKey[skcWeakControlKey].skcs+1;//skc数加1
//记录每个品类的styles数量,用于后续宽度计算(常销款,基本款)
if(!stylesList.includes(styleId)){
resultJSON.weakCategoryKey[skcWeakControlKey].styles=resultJSON.weakCategoryKey[skcWeakControlKey].styles+1;//分类的款式数量加1
stylesList.push(styleId);
}
//计算对应key的汇总深度,汇总金额,平均价,作为后续检核时直接进行校验
var currentFinalQty = resultJSON.weakCategoryKey[skcWeakControlKey].finalQty;
currentFinalQty += finalDeep;
var currentFinalAmount = resultJSON.weakCategoryKey[skcWeakControlKey].finalAmount;
currentFinalAmount += finalAmount;
//D款大片款组货金额-超出金额
var currentFinalDStyleAmout = resultJSON.weakCategoryKey[skcWeakControlKey].finalDStyleAmout;
currentFinalDStyleAmout += finalDStyleAmout;
resultJSON.weakCategoryKey[skcWeakControlKey].finalDStyleAmout = currentFinalDStyleAmout;
//组货金额,组货深度
resultJSON.weakCategoryKey[skcWeakControlKey].finalQty = currentFinalQty;
resultJSON.weakCategoryKey[skcWeakControlKey].finalAmount = currentFinalAmount;
if(currentFinalQty!=0){
resultJSON.weakCategoryKey[skcWeakControlKey].AvgPrice = currentFinalAmount/currentFinalQty;
}
}
//获取海外的数据值
//1.深度
var storeVolumnMap = new Map(Object.entries(nodeObj.C8_MCP_AdjustingDepthHy));//C8_MCP_StoreLevel
var storeKey = "";
var storeWeakControlKey = "";
if(controlRuleKeys.has(skcControlKey) || controlRuleKeys.has(skcControlKey.substring(0, 4))){//汇总到品类生成storeKey
storeKey = getEnumValue(commodityType)+getEnumValue(category);
storeWeakControlKey = getEnumValue(commodityType)+getEnumValue(category)+getEnumValue(midCategory);
}else{
storeKey = getEnumValue(commodityType)+getEnumValue(category)+getEnumValue(midCategory);
}
var hylist = [];
var weakHyList = [];
var weakVolumnMap = new Map();
var volumnMap = new Map();
var resValue = 0;
var catKey = "";
var weakCatKey = "";
for (const [key, value] of storeVolumnMap) {
catKey = storeKey + key;
if(volumnMap.hasOwnProperty(catKey+"volumn")){
resValue = volumnMap.get(catKey+"volumn") + value;
}else{
resValue = value;
skcValue = value;
}
volumnMap.set(catKey+"volumn",resValue);
if(!resultJSON.categoryKey[catKey]){
resultJSON.categoryKey[catKey]={skcs:0};
}
if(resValue != 0){
resultJSON.categoryKey[catKey].skcs=resultJSON.categoryKey[catKey].skcs+1;//skc数加1
}
}
hylist.push(volumnMap);
if(storeWeakControlKey != "") { //存储海外弱管控数据
for (const [key, value] of storeVolumnMap) {
weakCatKey = storeWeakControlKey + key;
if(weakVolumnMap.hasOwnProperty(weakCatKey+"volumn")){
resValue = weakVolumnMap.get(weakCatKey+"volumn") + value;
}else{
resValue = value;
skcValue = value;
}
weakVolumnMap.set(weakCatKey+"volumn",resValue);
if(!resultJSON.weakCategoryKey[weakCatKey]){
resultJSON.weakCategoryKey[weakCatKey]={skcs:0};
}
if(resValue != 0){
resultJSON.weakCategoryKey[weakCatKey].skcs=resultJSON.weakCategoryKey[weakCatKey].skcs+1;//skc数加1
}
}
weakHyList.push(weakVolumnMap);
}
//2.企划金额
if(null != nodeObj.C8_MCP_AdjustingAmountHy) {
var amountMap = new Map(Object.entries(nodeObj.C8_MCP_AdjustingAmountHy));
//var amountKey = getEnumValue(commodityType)+getEnumValue(category);//+getEnumValue(midCategory)
var priceMap = new Map();
var weakPriceMap = new Map();
var resValue = 0;
for (const [key, value] of amountMap) {
catKey = storeKey + key;
if (priceMap.hasOwnProperty(catKey + "price")) {
resValue = priceMap.get(catKey + "price") + value;
} else {
resValue = value;
}
priceMap.set(catKey + "price", resValue);
}
hylist.push(priceMap);
resultJSON.categoryKey[skcCategoryKey].hylist.push(hylist);
if (storeWeakControlKey != "") { //存储海外弱管控数据
for (const [key, value] of amountMap) {
weakCatKey = storeWeakControlKey + key;
if (weakPriceMap.hasOwnProperty(weakCatKey + "price")) {
resValue = weakPriceMap.get(weakCatKey + "price") + value;
} else {
resValue = value;
}
weakPriceMap.set(weakCatKey + "price", resValue);
}
}
weakHyList.push(weakPriceMap);
}
//记录每个分类下的skcId
resultJSON.categoryKey[skcCategoryKey].list.push(skcId);//skc添加到对应的categoryKey中
if(controlRuleKeys.has(skcControlKey) || controlRuleKeys.has(skcControlKey.substring(0, 4))){
resultJSON.weakCategoryKey[skcWeakControlKey].list.push(skcId);//skc添加到对应的categoryKey中
}
//单独记录,用于一起组货计算
if(!resultJSON["skcs"][skcCategoryKey]){
resultJSON["skcs"][skcCategoryKey]=[];
}
resultJSON["skcs"][skcCategoryKey].push(skcId);//按照key存储id到各自分类下
//if(!controlRuleKeys.has(skcControlKey) && !controlRuleKeys.has(skcControlKey.substring(0, 4))){//强管控品类才记录进来
//在按照商品层分类下分别记录各自的categoryKey
if(!resultJSON[commodityTypeKey]["categoryKey"].includes(skcCategoryKey)){
resultJSON[commodityTypeKey]["categoryKey"].push(skcCategoryKey);
}
//单独记录D款和大片款
if(isDStyle){
if(!resultJSON[commodityTypeKey]["dSkcs"][skcCategoryKey]){
resultJSON[commodityTypeKey]["dSkcs"][skcCategoryKey]=[];
}
resultJSON[commodityTypeKey]["dSkcs"][skcCategoryKey].push(skcId);//按照key存储id到各自分类下
//在按照商品层分类下分别记录各自的categoryKey
if(!resultJSON[commodityTypeKey]["dCategoryKey"].includes(skcCategoryKey)){
resultJSON[commodityTypeKey]["dCategoryKey"].push(skcCategoryKey);
}
}
//}
//检查style和skc上的指数和系数是否填写
var errorMsg = "";
if(price==0){
errorMsg +="【组货单价等于0】";
}
if(styleDeepCoefficient<=0){
errorMsg +="【单款深度系数必填,且不能小于或等于0】";
}
if(styleDeepIndexValue==""){
errorMsg +="【单款深度指数必填】";
}
if(skcDeepCoefficient<=0){
errorMsg +="【单SKC畅滞系数必填,且不能小于或等于0】";
}
if(skcDeepIndex==""){
errorMsg +="【单SKC畅滞指数必填】";
}
//主题款模块号必填
if(commodityTypeKey=="S" && modNumber==""){
errorMsg +="【主题款的模块号必填】";
}
if(errorMsg!=""){
var msg = skcCategoryKeyName+"skc名称【"+skcName+"】唯一码【"+skcCode+"】数据校验错误:"+errorMsg;
console.log(msg);
resultJSON.errors.push(msg);
}
//组货确认时,需要检查组货单价和调整深度必填
if(finalDeep<=0 || price<=0){
var msg = skcCategoryKeyName+"skc名称【"+skcName+"】唯一码【"+skcCode+"】数据校验错误:调整深度和组货单价必填!";
resultJSON.finalConfirmError.push(msg);
}
//计算look的skc数量,并记录到结果的json中
//主题款,并且存在模块号 look检查需要跨品类汇总,记录look下的skc,以及计算skc数量,look数量
if(commodityTypeKey && commodityTypeKey=="S" && modNumber && modNumber!=""){
var modJSON = resultJSON[commodityTypeKey].mods[modNumber];
if(!modJSON){
//lookCount:look数量,skcCount:模块内skc数量, lookSKCCount:有look标记的skc数量
resultJSON[commodityTypeKey].mods[modNumber] = {skcCount:0,lookCount:0,lookSKCCount:0,looks:{list:[]}};
modJSON = resultJSON[commodityTypeKey].mods[modNumber];
}
//记录模块的skc数量
modJSON.skcCount = modJSON.skcCount+1;
if(look1 || look2 || look3 || look4 || look5 || look6){
modJSON.lookSKCCount = modJSON.lookSKCCount+1;
}
var lookName = "";
var lookArray = [look1,look2,look3,look4,look5,look6];
var lookNameArray = ["look1","look2","look3","look4","look5","look6"];
for(var i=0;i<6;i++){
var lookA = lookArray[i];
var lookAName = lookNameArray[i];
if(lookA){
if(!modJSON.looks.list.includes(lookAName)){
modJSON.looks.list.push(lookAName);
modJSON.lookCount = modJSON.lookCount+1;
}
if(!modJSON.looks[lookAName]){
modJSON.looks[lookAName]=[];
modJSON.looks[lookAName].push(skcId)
}else{
modJSON.looks[lookAName].push(skcId);
}
}
}
}
//如果是常销款或基本款, 同一个款内 SKC 要求: 按照款号汇总,
if(commodityTypeKey && commodityTypeKey=="R" || commodityTypeKey=="B"){
//按照款式汇总skc数量
var stylesJson = resultJSON[commodityTypeKey].styles;
if(stylesJson.list.includes(styleId)){
stylesJson.skcCount[styleId]=stylesJson.skcCount[styleId]+1;
stylesJson.skcs[styleId].push(skcId);//记录一个款式下的skc
}else{
stylesJson.skcCount[styleId]=1;
stylesJson.skcs[styleId] = [skcId];
stylesJson.list.push(styleId);
}
}
//记录skc对象,用于后续组货取值和计算,其中calQty,calAmount为最后建议的深度和金额
////styDeepIdx:styleDeepIndex,styDeepCoefficient:styleDeepCoefficient,skcDeepIndex:skcDeepIndex,skcDeepCoefficient:skcDeepCoefficient,
//字段含义说明: minQty=最低深度,minQtyD=D款大片款最低深度 initQty=初始深度 lookCalQty=计算look最低深度时的中间扣减值
//calQty=建议深度 calAmount=建议金额
var zhSCKObj = {"skcId": skcId,skcName:skcName,"skcCode":skcCode,"styleId":styleId,"originalSeries":originalSeries,mcpId:url,categoryKey:skcCategoryKey,categoryKeyName:skcCategoryKeyName,commodityType:commodityType,commodityName:commodityName,
commodityTypeKey:commodityTypeKey,catId:category,catName:categoryName, midCatId:midCategory,midCatName:midCategoryName,productStyle:productStyle,
modNumber:modNumber,look1:look1,look2:look2,look3:look3,look4:look4,look5:look5,look6:look6,isLook:isLook, display:display,specialType:specialType,channelType:channelType,subCategory:subCategory,subCategoryName:subCategoryName,
lookName:lookName,displayName:displayName,specialTypeName:specialTypeName,channelTypeName:channelTypeName,isDStyle:isDStyle,isSpecialStyle:isSpecialStyle,
"price": price, mcpPrice:mcpPrice, store:store,"minQty": 0, "minQtyD":0, "initQty": initQty, lookCalQty:initQty,"initAmount":initAmount, "initAmountPct":0, "calQty": 0, "calAmount":0,"calAmountPct":0,
standardDeep:0,shopCoverCount:0, isMinQty:false, fixQty:fixQty,userFix:userFix, fixAmout:false,finalQty:finalDeep,finalAmount:finalAmount,finalDStyleAmout:finalDStyleAmout
};
resultJSON.list[skcId]=zhSCKObj; //url-node
resultJSON.skcIds.push(skcId);//url index
}
});
}
return resultJSON;
};
//获取电商组货SKC信息,提前根据目标的key和skc的key进行分组
function getDianShangGroupSKCData(ac, resultURLs, controlRuleKeys, isCheck) {
//Agnes 品类强弱管控 返回值新增weakCategoryKey:{}
//Agnes 新增品类汇总catCrossLevelKey记录品类跨等级汇总非Nskc数量以及总skc数量
var resultJSON = {catCrossLevelKey:{},skcIds:[],list:{},categoryKey:{},weakCategoryKey:{},errors:[],finalConfirmError:[]};
var stylesList = [];
if(resultURLs && resultURLs.length>0){
//Agnes 20240409 新增单非N级别SKC数量统计
var nonNSkcs = 0;
var commodityType = "";
var amount = 0;
resultURLs.forEach(function(url,index){
var nodeObj = getNode(ac,url);
if(nodeObj){
var skcObj = getNode(ac,nodeObj.C8_MCP_SKC);
var skcName = skcObj.$Name;
var skcCode = skcObj.UR_Colorway_PLMUniqueValue;
var skcId = skcObj.$URL;
var styleNode = getNode(ac,skcObj.__Parent__);
var styleId = styleNode.$Name;
var styleAttNode = getNode(ac,styleNode.Attributes);
var dStyleSpecial = skcObj.C8_CW_DSSpecial;//D款
var userFix = nodeObj.C8_MCP_SKCLock;
var isDStyle = getEnumValue(dStyleSpecial)=="SD";
// miles 0119 获取系列用于后续判断是否是acc
var cat1Node = getNode(ac,styleNode.Category1);
//从Style和Attributes上获取字段信息
var priceStr = getEnumValue(styleAttNode.UR_StyleAttributes_GroupCarPrice); //组货单价
var price = 0;
if(priceStr && priceStr!=""){
priceStr = priceStr.trim();
price = parseInt(priceStr);
}
var mcpPrice = nodeObj.C8_MCP_Price;
commodityType = styleNode.UR_Style_CommodityType;//商品层
var commodityName = locale.getEnumName(commodityType);//商品层名称
var commodityTypeKey = getEnumValue(commodityType);
var category = styleNode.UR_Style_ProductLargeType; //品类
var categoryName = locale.getEnumName(category);//品类名称
var midCategory = styleAttNode.UR_StyleAttributes_MiddleCategoryType; //中品类
var midCategoryName = locale.getEnumName(midCategory);//中品类名称
var subCategory = styleAttNode.UR_StyleAttributes_Silhouette;//子品类、
var subCategoryName = locale.getEnumName(subCategory);//子品类名称
var productStyle = styleNode.UR_Style_ProductStyleCount;//风格
var suggestClass = nodeObj.C8_MCP_SuggestedLevel;//建议级别
var styleClassKey = getEnumValue(suggestClass);
var adjustClassKey = getEnumValue(nodeObj.C8_MCP_AdjustingLevel);//调整等级,检核时检验非Nskc比例用
if(adjustClassKey != ""){
styleClassKey = adjustClassKey; //调整级别不为空时使用调整级别
}
if(styleClassKey != "N"){
nonNSkcs = nonNSkcs + 1;
}
//检查建议级别是否填写
var errorMsg = "";
if(price==0){
errorMsg +="【组货单价等于0】";
}
if(styleClassKey==""){
errorMsg +="【组货建议等级不能为空】";
}
if(errorMsg!=""){
var msg = "skc名称【"+skcName+"】唯一码【"+skcCode+"】数据校验错误:"+errorMsg;
console.log(msg);
resultJSON.errors.push(msg);
}
var initQty = 0; //初始深度,周目标组货金额除以skc数量,得到平均每个skc的组货金额,组货金额除以单价,即为单款初始深度
// if(isDStyle){
// initQty = 10;//如果为D款,深度默认为10
// }
var initAmount = initQty*price;
var finalDeep = nodeObj.C8_MCP_AdjustingDepth;//获取用户填写的调整深度
var finalAmount = finalDeep*price;
//组货确认时,需要检查组货单价和调整深度必填
if(finalDeep<=0 || price<=0){
var msg = skcCategoryKeyName+"skc名称【"+skcName+"】唯一码【"+skcCode+"】数据校验错误:调整深度和组货单价必填!";
resultJSON.finalConfirmError.push(msg);
}
//中品类映射转换
var midCatKey = getEnumValue(midCategory);
if(midCatMapping.has(midCatKey)){
midCatKey = midCatMapping.get(midCatKey);
}
//Agnes 拼接管控key 品类+中品类+子品类+级别
var skcControlKey = getEnumValue(category) + midCatKey + getEnumValue(subCategory) + styleClassKey;
var skcCategoryKey = "";
var skcCategoryKeyName = "";
var weakSkcCatetoryKey = "";
//新增跨电商等级品类key,不带子品类
var catCrossLevelKey = commodityTypeKey + getEnumValue(category) + midCatKey;
//如果品类管控,则key到品类
if(controlRuleKeys && (controlRuleKeys.has(skcControlKey) || controlRuleKeys.has(skcControlKey.substring(0, 4)))){
if(isCheck){
skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category);
}else{
skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category)+styleClassKey;
}
//弱管控时
catCrossLevelKey = commodityTypeKey + getEnumValue(category);
skcCategoryKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】";
if (cat1Node.$Name == "UR_ACC"){//区分是否acc决定是否拼接子品类,防止与目标设置不匹配
weakSkcCatetoryKey = getEnumValue(commodityType)+getEnumValue(category)+getEnumValue(subCategory)+styleClassKey;
}else{
weakSkcCatetoryKey = getEnumValue(commodityType)+getEnumValue(category)+styleClassKey;
}
}else {//key不带子品类 Agnes 20240428
//存储categoryKey,用于后续组货计算 // miles 0119 区分是否acc决定是否拼接子品类,防止与目标设置不匹配
if (cat1Node.$Name == "UR_ACC"){
if(isCheck){
skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey;
}else{
skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey+styleClassKey;
}
skcCategoryKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】";
weakSkcCatetoryKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey +styleClassKey;
}else{
if(isCheck){
skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey;
}else{
skcCategoryKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey+styleClassKey;
}
skcCategoryKeyName = "【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(category)+"】【"+locale.getEnumName(midCategory)+"】";
weakSkcCatetoryKey = getEnumValue(commodityType)+getEnumValue(category)+midCatKey+styleClassKey;
}
}
if(!resultJSON.categoryKey[skcCategoryKey]){
resultJSON.categoryKey[skcCategoryKey]={skcs:0,styles:0,list:[],finalQty:0,finalAmount:0,AvgPrice:0};
}
if(!resultJSON.catCrossLevelKey[catCrossLevelKey]){
//20240409 新增catNonNSkcs记录组货单上非N skc数量
resultJSON.catCrossLevelKey[catCrossLevelKey]={catNonNSkcs:0,catSkcs:0};
}
//20240409 新增catNonNSkcs记录组货单上非N skc数量
if(styleClassKey != "N"){
resultJSON.catCrossLevelKey[catCrossLevelKey].catNonNSkcs=resultJSON.catCrossLevelKey[catCrossLevelKey].catNonNSkcs+1;//catNonNSkcs数加1
}
//品类跨层级skc数量加1
resultJSON.catCrossLevelKey[catCrossLevelKey].catSkcs = resultJSON.catCrossLevelKey[catCrossLevelKey].catSkcs + 1;
//记录每个品类的skc数量
resultJSON.categoryKey[skcCategoryKey].skcs=resultJSON.categoryKey[skcCategoryKey].skcs+1;//skc数加1
//记录每个品类的styles数量,用于后续宽度计算(常销款,基本款)
if(!stylesList.includes(styleId)){
resultJSON.categoryKey[skcCategoryKey].styles=resultJSON.categoryKey[skcCategoryKey].styles+1;//分类的款式数量加1
stylesList.push(styleId);
}
resultJSON.categoryKey[skcCategoryKey].list.push(skcId);//skc添加到对应的categoryKey中
//计算对应key的汇总深度,汇总金额,平均价,作为后续检核时直接进行校验
var currentFinalQty = resultJSON.categoryKey[skcCategoryKey].finalQty;
currentFinalQty += finalDeep;
var currentFinalAmount = resultJSON.categoryKey[skcCategoryKey].finalAmount;
currentFinalAmount += finalAmount;
resultJSON.categoryKey[skcCategoryKey].finalQty = currentFinalQty;
resultJSON.categoryKey[skcCategoryKey].finalAmount = currentFinalAmount;
if(currentFinalQty!=0){
resultJSON.categoryKey[skcCategoryKey].AvgPrice = currentFinalAmount/currentFinalQty;
}
//记录弱管控数据 Agnes
if(weakSkcCatetoryKey != ""){
if(!resultJSON.weakCategoryKey[weakSkcCatetoryKey]){
resultJSON.weakCategoryKey[weakSkcCatetoryKey]={skcs:0,styles:0,list:[],finalQty:0,finalAmount:0,AvgPrice:0};
}
//记录每个品类的skc数量
resultJSON.weakCategoryKey[weakSkcCatetoryKey].skcs=resultJSON.weakCategoryKey[weakSkcCatetoryKey].skcs+1;//skc数加1
//记录每个品类的styles数量,用于后续宽度计算(常销款,基本款)
if(!stylesList.includes(styleId)){
resultJSON.weakCategoryKey[weakSkcCatetoryKey].styles=resultJSON.weakCategoryKey[weakSkcCatetoryKey].styles+1;//分类的款式数量加1
stylesList.push(styleId);
}
resultJSON.weakCategoryKey[weakSkcCatetoryKey].list.push(skcId);//skc添加到对应的categoryKey中
//计算对应key的汇总深度,汇总金额,平均价,作为后续检核时直接进行校验
var currentFinalQty = resultJSON.weakCategoryKey[weakSkcCatetoryKey].finalQty;
currentFinalQty += finalDeep;
var currentFinalAmount = resultJSON.weakCategoryKey[weakSkcCatetoryKey].finalAmount;
currentFinalAmount += finalAmount;
resultJSON.weakCategoryKey[weakSkcCatetoryKey].finalQty = currentFinalQty;
resultJSON.weakCategoryKey[weakSkcCatetoryKey].finalAmount = currentFinalAmount;
if(currentFinalQty!=0){
resultJSON.weakCategoryKey[weakSkcCatetoryKey].AvgPrice = currentFinalAmount/currentFinalQty;
}
}
//记录skc对象
var zhSCKObj = {"skcId": skcId,skcName:skcName,"skcCode":skcCode,"styleId":styleId,mcpId:url,categoryKey:skcCategoryKey,categoryKeyName:skcCategoryKeyName,commodityType:commodityType,commodityName:commodityName,subCategory:subCategory,subCategoryName:subCategoryName,
commodityTypeKey:commodityTypeKey,catId:category,catName:categoryName, midCatId:midCategory,midCatName:midCategoryName,productStyle:productStyle,
"price": price,mcpPrice:mcpPrice, "minQty": 0, "initQty": initQty, "initAmount":initAmount, "suggestClass":suggestClass,styleClassKey:styleClassKey,isDStyle:isDStyle,
isMinQty:false, fixQty:false, userFix:userFix,fixAmout:false,finalQty:finalDeep,finalAmount:finalAmount
};
resultJSON.list[skcId]=zhSCKObj; //url-node
resultJSON.skcIds.push(skcId);//url index
//记录累计金额
amount = amount + finalAmount;
}
});
resultJSON.nonNSkcs = nonNSkcs;
resultJSON.commodityType = commodityType;
resultJSON.amount = amount;
}
return resultJSON;
};
//根据rule规则,判断值是否符合规则要求
//lookCount(int),rule(string),skcCount(string)
//允许规则:rule("gte","gt","eq","lte","lt","range")
//当Rule=range时,skcCount: 1,2,3 或 1-9,或 2,3,5-8,11
function checkModSKCCount(lookCount,rule,skcCount){
var check = false;
var rules = ["gte","gt","eq","lte","lt"];
if(skcCount){
skcCount = skcCount.trim();
}else{
skcCount = "-1";
}
if(rules.includes(rule)){
var skcCountInt = parseInt(skcCount);
if(rule=="gte"){
check = lookCount>=skcCountInt;
}else if(rule=="gt"){
check =lookCount>skcCountInt;
}else if(rule=="eq"){
check =lookCount==skcCountInt;
}else if(rule=="lte"){
check =lookCount<=skcCountInt;
}else if(rule=="lt"){
check =lookCount<skcCountInt;
}
}else if(rule=="range"){//满足任意条件即可
var skcCountInt = 0;
skcCount = skcCount.replaceAll("、",",").replaceAll(",",",").replaceAll("|",",");
if(skcCount.indexOf(",")>=0){
var countArr = skcCount.split(",");
countArr.forEach(function(countStr){
countStr = countStr.trim();
if(countStr.indexOf("-")>0){
var rangeArr = countStr.split("-");
if(rangeArr[0]!="" && rangeArr[1]!=""){
var lowerInt = parseInt(rangeArr[0].trim());
var upperInt = parseInt(rangeArr[1].trim());
if(lookCount>=lowerInt && lookCount<=upperInt){
check = true;
}
}
}else{
var countInt = parseInt(countStr);
if(lookCount == countInt){
check = true;
}
}
});
}
}
return check;
}
//根据特殊值过滤取最大
function getRuleTableMax(ruleNodes/*nodes[]*/,field/*string*/,filterField/*string*/,filterGroup/*string[]*/){
var max = -9999999;
ruleNodes.forEach(function(ruleNode){
var filterValue = getEnumValue(ruleNode[filterField]);
if(filterGroup.includes(filterValue)){
if(max<ruleNode[field]){
max = ruleNode[field];
}
}
});
return max;
}
//计算每个skc金额,汇总金额,计算平均占比
//如果skc已经被用户锁定,则把金额扣除,并且从skc数组中去掉
function sumInitAmount(skcsList,qtyAtt,amountAtt,pctAtt,skcsData){
var total = 0;//总金额
var newSKCsList = [];//非锁定的skc列表,用于后续计算
var fixedTotal = 0; //用户锁定的金额
skcsList.forEach(function(skcId){
var node = skcsData.list[skcId];
var userFix = node.userFix;
if(!userFix){
node[amountAtt]=node.price*node[qtyAtt];
total += node[amountAtt];
newSKCsList.push(node.skcId);
}else{
node[amountAtt]=node.price*node[qtyAtt];
fixedTotal += node[amountAtt];
total += node[amountAtt];
}
});
//计算占比
if(pctAtt && total>0){
newSKCsList.forEach(function(skcId){
var node = skcsData.list[skcId];
node[pctAtt]=node[amountAtt]/total;
});
}
return {total:total,newSKCsList:newSKCsList,fixedTotal:fixedTotal};
}
//缩小金额到目标金额
//scalePct=初始缩放比例,,skcsList,targetAmount=目标金额,totalScaleAmount=初始目标减掉金额
function scaleSKCs(scalePct,skcsList,sumAmount,targetAmount,skcsData,adjustQty){
//考虑防呆,最多只计算200次以内 每单组货按品类划分后应该小于100
var maxRunTime = 200;
var runTime = 0;
var scaleSumAmount = sumAmount;
var currentScalePct = scalePct;
var success = true;
var errorMsg = "";
while(scaleSumAmount>targetAmount){
runTime++;
printLog("\t 缩放金额第【"+runTime+"】次 scaleSumAmount="+scaleSumAmount+" targetAmount="+targetAmount);
//检查特殊款缩放后如果有超出,则优先扣减金额到最低深度,然后锁定
var hasOverMinQty = getSpecialExceedMinQtySkcs(currentScalePct,skcsList,skcsData,adjustQty);
//如果没有特殊款缩放后低于最低深度,则全部skc按照比例缩放,需要按照非锁定的skc进行缩放
var sumResult = sumSKCAmount(skcsList,skcsData);
var nonFixedAmount = sumResult.nonFixedAmount;
var fixedAmount = sumResult.fixedAmount;
scaleSumAmount = sumResult.totalSumAmount;
var targetDeduceAmount = scaleSumAmount - targetAmount;
printLog("\t 缩放金额第【"+runTime+"】次 锁定特殊款最低深度 hasOverMinQty="+hasOverMinQty+" nonFixedAmount="+nonFixedAmount);
if(nonFixedAmount<=0){
errorMsg = "非锁定的SKC金额不足以扣减金额,数据存在错误,请检查!";
printLog("\t "+errorMsg);
success = false;
break;
}
//重新计算缩放比例
currentScalePct = 1-(targetDeduceAmount/nonFixedAmount);
printLog("\t 缩放金额第【"+runTime+"】次 scaleSumAmount="+scaleSumAmount);
printLog("\t 缩放金额第【"+runTime+"】次 nonFixedAmount="+nonFixedAmount);
printLog("\t 缩放金额第【"+runTime+"】次 fixedAmount="+fixedAmount);
printLog("\t 缩放金额第【"+runTime+"】次 currentScalePct="+currentScalePct);
if(!hasOverMinQty){
printLog("\t 缩放金额第【"+runTime+"】次 特殊款均已锁定="+currentScalePct);
if(nonFixedAmount>0 && nonFixedAmount>targetDeduceAmount){
scaleSumAmount = scaleAmount(currentScalePct,skcsList,skcsData,false,adjustQty);
printLog("\t 缩放金额第【"+runTime+"】次 缩放完成="+scaleSumAmount);
break;
}else if(nonFixedAmount>0 && nonFixedAmount<targetDeduceAmount){
printLog("\t 非锁定的SKC金额不足以扣减金额,采用全部扣减的方式,无论是否特殊款,是否锁定");
currentScalePct = 1-(targetDeduceAmount/scaleSumAmount);
printLog("\t 非锁定的SKC金额不足以扣减金额,采用全部扣减的方式,无论是否特殊款,是否锁定");
scaleSumAmount = scaleAmount(currentScalePct,skcsList,skcsData,true,adjustQty);
break;
}else{
printLog("\t 非锁定的SKC金额不足以扣减金额,数据存在错误,请检查!");
success = false;
break;
}
}
//防呆退出
if(runTime>maxRunTime){
break;
}
}
return {scaleAmount:scaleSumAmount,success:success,errMsg:errorMsg};
}
//计算将initQty缩小后 不考虑最低深度的缩放 includeFixed=是否包含锁定项
function scaleAmount(scalePct,skcsList,skcsData,includeFixed,adjustQty){
var totalSumAmount = 0;//扣减后总金额
var totalMaxScaleAmount = 0;
var hasOverMinQty = false;
//var adjustQty = 0;
skcsList.forEach(function(skcId){
var skcNode = skcsData.list[skcId];
var initQty = skcNode.initQty;
var price = skcNode.price;
var isFixed = skcNode.fixQty;
var userFix = skcNode.userFix;
//scalePct = scalePct.toFixed(4);
//精度处理
// if(0.9 < scalePct && scalePct < 1.1){
// scalePct = scalePct;
// }else{
// if(scalePct > 1.1){
// scalePct = scalePct - 0.01;
// }else{
// scalePct = scalePct + 0.01;
// }
// }
// if(scalePct>1){
// adjustQty = 2;
// }else if(scalePct==1){
// adjustQty = 0;
// }else{
// adjustQty = -2;
// }
if(includeFixed && !userFix){
initQty = parseInt(initQty*scalePct)+adjustQty;
var scaleAmount = initQty * price;
skcNode.initQty = initQty;
skcNode.initAmount = scaleAmount;
totalSumAmount += scaleAmount;
}else{
if(!isFixed){
initQty = parseInt(initQty*scalePct)+adjustQty;
var scaleAmount = initQty * price;
skcNode.initQty = initQty;
skcNode.initAmount = scaleAmount;
totalSumAmount += scaleAmount;
}else{
var scaleAmount = initQty * price;
totalSumAmount += scaleAmount;
}
}
});
return parseInt(totalSumAmount);
}
//计算将initQty缩小后,是否低于最小深度
function getSpecialExceedMinQtySkcs(scalePct,skcsList,skcsData,adjustQty){
var totalSumAmount = 0;//扣减后总金额
var totalMaxScaleAmount = 0;
var retNode = {hasOverMinQty:false,sumAmount:0};
var hasOverMinQty = false;
for(var i=0;i<skcsList.length;i++){
var skcNode = skcsData.list[skcsList[i]];
var skcName = skcNode.skcName;
var minQty = skcNode.minQty;
var initQty = skcNode.initQty;
var price = skcNode.price;
var fixed = skcNode.fixQty;
var isSpecialStyle = skcNode.isSpecialStyle; //非D款和大片款, 特殊值有值
if(isSpecialStyle && !fixed){
if(initQty>minQty){
var scaleQty = parseInt(initQty*scalePct)+adjustQty;
if(scaleQty<minQty){
var msg = "\tskc【"+skcName+"】的初始深度为【"+initQty+"】,如果缩放【"+scalePct*100+"%】后,sacleQty="
+ scaleQty+" 小于最低深度【"+minQty+"】,锁定该SKC的深度为最小深度"
printLog(msg);
skcNode.initQty = minQty;
skcNode.initAmount = minQty*price;
skcNode.fixQty = true;
hasOverMinQty = true;
break;//一次只锁定一个特殊款
}
}else{
skcNode.initQty = minQty;
skcNode.initAmount = minQty*price;
skcNode.fixQty = true;
hasOverMinQty = true;//继续循环
break;//一次只锁定一款
}
}
}
//记录结果
return hasOverMinQty;
}
//汇总总金额
// return {totalSumAmount:总金额,fixedAmount:已锁定总金额,nonFixedAmount:未锁定总金额,avgPrice:平均价,totalQty:总深度};
function sumSKCAmount(skcsList,skcsData){
var totalSumAmount = 0;//扣减后总金额
var fixedAmount = 0;
var nonFixedAmount = 0;
var avgPrice = 0;
var totalQty = 0;
skcsList.forEach(function(skcId){
var skcNode = skcsData.list[skcId];
var initQty = skcNode.initQty;
var price = skcNode.price;
var isFixed = skcNode.fixQty;
totalQty += initQty;
if(!isFixed){
nonFixedAmount += initQty*price;
totalSumAmount += initQty*price;
}else{
fixedAmount += initQty*price;
totalSumAmount += initQty*price;
}
});
if(totalQty>0){
avgPrice = totalSumAmount/totalQty;
}
return {totalSumAmount:totalSumAmount,fixedAmount:fixedAmount,nonFixedAmount:nonFixedAmount,avgPrice:avgPrice,totalQty:totalQty};
}
//获取用于平均价挂靠的,非用户冻结的skc清单
function getNonUserFixedList(sortSkcsPriceList,skcsData){
var nonFixedList = [];
sortSkcsPriceList.forEach(function(skcId){
var skcNode = skcsData.list[skcId];
var isFixed = skcNode.userFix;
if(!isFixed){
nonFixedList.push(skcNode.skcId);
}
});
return nonFixedList;
}
//提高平均价到目标平均价
////平均价比较低,所以需要增加大于平均价的的skc的深度,同时减少低于平均价的skc的深度,此时总金额可能呈现上升趋势
function scaleUpAvgPrice(sortSkcsPriceList,calSkcList,skcsData,avgPrice,avgPriceDown,sumAmount,minAmount,maxAmount,currentRunTime,adjustQty){
if(currentRunTime>500){
return avgPrice;
}
printLog("提高平均价计算:currentRunTime="+currentRunTime+" currentAvgPrice="+avgPrice+" target="+avgPriceDown+" sumAmount="+sumAmount+" minAmount="+minAmount+" maxAmount="+maxAmount);
var size = calSkcList.length;
var avgPriceIndex = getAvgPriceIndex(calSkcList,avgPriceDown,skcsData);//获取平均价对应的数组索引号,用于判断成对的用于扣减和增加深度的组合数
var isOK = false;
var fixQtyList = [];
var currentAvgPrice = avgPrice;
var currentSumAmount = sumAmount;
var currentAdjustQty = adjustQty;//当汇总金额小于最低时,adjustQty设置为1,每次增加高价格SKC时,低价格SKC少扣减一个,使得金额总体上升
printLog("计算的平均价索引位置avgPriceIndex="+avgPriceIndex);
for(var i=0;i<avgPriceIndex;i++){
var firstSKC = skcsData.list[calSkcList[i]];
var lastSKC = skcsData.list[calSkcList[size-i-1]];
var firstPrice = firstSKC.price;
var lastPrice = lastSKC.price;
var rate = 0;//计算扣减比率
if(lastPrice!=0)
rate = parseInt(firstPrice/lastPrice);
//如果数量不够扣减,则不扣减,直接锁定skc
printLog("\t计算"+i+"次:"+" rate="+rate+" firstSKC="+firstSKC.skcId+" firstPrice="+firstPrice+" lastSKC="+lastSKC.skcId+" lastPrice="+lastPrice +" currentAdjustQty="+currentAdjustQty);
var targetQty = lastSKC.initQty-rate+currentAdjustQty;
printLog("\t计算"+i+"次 firstSKC.initQty="+firstSKC.initQty+" lastSKC.initQty="+lastSKC.initQty+" lastSKC.minQty="+lastSKC.minQty+" lastSKC不够扣减,直接锁定");
if(lastSKC.minQty>targetQty){
lastSKC.fixQty = true;
fixQtyList.push(lastSKC.skcId);
printLog("\t\t计算"+i+"次 lastSKC.minQty="+lastSKC.minQty+"targetQty="+targetQty+" lastSKC不够扣减,直接锁定");
}else{
firstSKC.initQty = firstSKC.initQty+1;//高的加一个
lastSKC.initQty = targetQty;//低的减rate个
printLog("\t\t计算"+i+"次:"+ +" 扣减完成");
}
printLog("\t计算"+i+"次 firstSKC.initQty="+firstSKC.initQty+" lastSKC.initQty="+lastSKC.initQty+" lastSKC.minQty="+lastSKC.minQty+"==计算完成后");
//获取汇总后的平均价
var sumAmountObj = sumSKCAmount(sortSkcsPriceList,skcsData);
currentSumAmount = sumAmountObj.totalSumAmount;
currentAvgPrice = sumAmountObj.avgPrice;
printLog("\t计算"+i+"次:"+" avgPrice="+currentAvgPrice+" target="+avgPriceDown+" sumAmount="+currentSumAmount+" minAmount="+minAmount+" maxAmount="+maxAmount);
if(currentSumAmount>=minAmount && currentSumAmount<=maxAmount){
if(currentAvgPrice>=avgPriceDown){
isOK = true;
break;
}
}else{
//扣减后,总金额少于最低或高于最高,则退回
firstSKC.initQty = firstSKC.initQty-1;//高的减一个
lastSKC.initQty = lastSKC.initQty+rate-currentAdjustQty;//低的加rate个
if(currentSumAmount<minAmount){
currentAdjustQty = 1;//当汇总金额小于最低时,adjustQty设置为1,每次减少低价格SKC时,少扣减一个,使得金额总体上升
}else if(currentSumAmount>maxAmount){
currentAdjustQty = -1;//当汇总金额大于最高时,adjustQty设置为-1,每次减少低价格SKC时,多扣减一个,使得金额总体下降
}
sumAmountObj = sumSKCAmount(sortSkcsPriceList,skcsData);//退回后,重新计算
currentSumAmount = sumAmountObj.totalSumAmount;
currentAvgPrice = sumAmountObj.avgPrice;
printLog("\t计算"+i+"次:"+" rate="+rate+" firstSKC="+firstSKC.skcId+" firstPrice="+firstPrice+" lastSKC="+lastSKC.skcId+" lastPrice="+lastPrice+" 扣减完成后金额超出,回滚");
}
}
if(isOK){
printLog("\t提高平均价计算完成并找到合适平均价,avgPrice="+currentAvgPrice+" target="+avgPriceDown+" sumAmount="+currentSumAmount+" minAmount="+minAmount+" maxAmount="+maxAmount);
}else{
printLog("\t计提供平均价算完成并没有找到合适平均价,继续计算");
for(var i=0; i<fixQtyList.length;i++){
calSkcList.dele(fixQtyList[i]);
}
//继续执行下一次
currentRunTime++;
scaleUpAvgPrice(sortSkcsPriceList,calSkcList,skcsData,currentAvgPrice,avgPriceDown,currentSumAmount,minAmount,maxAmount,currentRunTime,currentAdjustQty);
}
}
//减低平均价到目标平均价
////平均价比较高,所以需要减少大于平均价的的skc的深度,同时增加低于平均价的skc的深度,此时总金额可能呈现下降趋势
function scaleDownAvgPrice(sortSkcsPriceList,calList,skcsData,avgPrice,avgPriceUp,sumAmount,minAmount,maxAmount,currentRunTime,adjustQty){
if(currentRunTime>500){
return avgPrice;
}
printLog("降低平均价计算:currentRunTime="+currentRunTime+" currentAvgPrice="+avgPrice+" target="+avgPriceUp+" sumAmount="+sumAmount+" minAmount="+minAmount+" maxAmount="+maxAmount +" currentAdjustQty="+adjustQty);
var size = calList.length;
var avgPriceIndex = getAvgPriceIndex(calList,avgPriceUp,skcsData);//获取平均价对应的数组索引号,用于判断成对的用于扣减和增加深度的组合数
printLog("计算的平均价索引位置avgPriceIndex="+avgPriceIndex);
var isOK = false;
var fixQtyList = [];
var currentAvgPrice = avgPrice;
var currentSumAmount = sumAmount;
var currentAdjustQty = adjustQty;//当汇总金额小于最低时,adjustQty设置为1,每次增加低价格SKC时,多加一个,使得金额总体上升
for(var i=0;i<avgPriceIndex;i++){
var firstSKC = skcsData.list[calList[i]];
var lastSKC = skcsData.list[calList[size-i-1]];
var firstPrice = firstSKC.price;
var lastPrice = lastSKC.price;
var rate = 0;//计算扣减比率
if(lastPrice!=0)
rate = parseInt(firstPrice/lastPrice);
//如果数量不够扣减,则不扣减,直接锁定skc
printLog("\t计算"+i+"次:"+" rate="+rate+" firstSKC="+firstSKC.skcId+" lastSKC="+lastSKC.skcId +" currentAdjustQty="+currentAdjustQty);
if(firstSKC.minQty>firstSKC.initQty-1){
firstSKC.fixQty = true;
fixQtyList.push(firstSKC.skcId);
printLog("\t计算"+i+"次:"+" rate="+rate+" firstSKC="+firstSKC.skcId+" lastSKC="+lastSKC.skcId +" currentAdjustQty="+currentAdjustQty+" firstSKC不够扣减,直接锁定");
}else{
firstSKC.initQty = firstSKC.initQty-1;//高的减一个
lastSKC.initQty = lastSKC.initQty+rate+currentAdjustQty;//低的加rate个
printLog("\t计算"+i+"次:"+" rate="+rate+" firstSKC="+firstSKC.skcId+" lastSKC="+lastSKC.skcId +" currentAdjustQty="+currentAdjustQty+" 扣减完成");
}
//获取汇总后的平均价
var sumAmountObj = sumSKCAmount(sortSkcsPriceList,skcsData);
currentSumAmount = sumAmountObj.totalSumAmount;
currentAvgPrice = sumAmountObj.avgPrice;
if(currentSumAmount>=minAmount && currentSumAmount<=maxAmount){
if(currentAvgPrice<=avgPriceUp){
isOK = true;
break;
}
}else{
//扣减后,总金额少于最低或高于最高,则退回
firstSKC.initQty = firstSKC.initQty+1;//高的加一个
lastSKC.initQty = lastSKC.initQty-rate-currentAdjustQty;//低的减rate个
if(currentSumAmount<minAmount){
currentAdjustQty = 1;//当汇总金额小于最低时,adjustQty设置为1,每次增加低价格SKC时,多加一个,使得金额总体上升
}else if(currentSumAmount>maxAmount){
currentAdjustQty = -1;//当汇总金额小于最低时,adjustQty设置为-1,每次增加低价格SKC时,少加一个,使得金额总体下降
}
sumAmountObj = sumSKCAmount(sortSkcsPriceList,skcsData);//退回后,重新计算
currentSumAmount = sumAmountObj.totalSumAmount;
currentAvgPrice = sumAmountObj.avgPrice;
}
printLog("\t计算"+i+"次:"+" avgPrice="+currentAvgPrice+" target="+avgPriceUp+" sumAmount="+currentSumAmount+" minAmount="+minAmount+" maxAmount="+maxAmount +" currentAdjustQty="+currentAdjustQty);
}
if(isOK){
printLog("\t降低平均价计算完成并找到合适平均价,avgPrice="+currentAvgPrice+" target="+avgPriceUp+" sumAmount="+currentSumAmount+" minAmount="+minAmount+" maxAmount="+maxAmount +" currentAdjustQty="+currentAdjustQty);
}else{
printLog("\t降低平均价计算完成并没有找到合适平均价,继续计算");
//将无法扣减的skc从计算队列中清除!
for(var i=0; i<fixQtyList.length;i++){
calList.dele(fixQtyList[i]);
}
//继续执行下一次
currentRunTime++;
scaleDownAvgPrice(sortSkcsPriceList,calList,skcsData,currentAvgPrice,avgPriceUp,currentSumAmount,minAmount,maxAmount,currentRunTime,currentAdjustQty);
}
}
//获取平均价格索引号,也就是skc单价高于平均价的最后一个skc的索引号
function getAvgPriceIndex(sortSkcsPriceList,avgPrice,skcsData){
var index1 = 0;
//高于平均价的索引位置
for(var i=0; i<sortSkcsPriceList.length;i++){
var skcNode = skcsData.list[sortSkcsPriceList[i]];
var price = skcNode.price;
if(price<=avgPrice){
index1 = i;
break;
}
}
//对于平均价的索引位置
var index2 = 0;
for(var i=sortSkcsPriceList.length-1; i>=0;i--){
var skcNode = skcsData.list[sortSkcsPriceList[i]];
var price = skcNode.price;
if(price>=avgPrice){
break;
}else{
index2++;
}
}
//取最小的返回,作为扣减的组数
return index1>index2?index2:index1;
}
//校验组货SKC数量规则,校验价格带是否符合目标
function checkSKCCountAndPriceList(errMsg,checkTypes,skcsData,ruleTableNode,weekNode,monthNode){
checkTypes.forEach(function(checkType){
//表1#=SKC标准及LOOK套数的标准值
var tableRuleT1 = filterRuleTable(ruleTableNode,"1",true,{UR_SDS_CommodityType:"UR_enum_CommodityType:"+checkType});
var skcRule = tableRuleT1.UR_SDS_Rule;
var skcRuleName = locale.getEnumName(skcRule);
var skcCountRule = getEnumValue(skcRule);
var skcCountValue = tableRuleT1.UR_SDS_SKCQuantity;
if(tableRuleT1){
Object.keys(skcsData[checkType].styles.skcCount).forEach(function(styleId){
var styleSkcCount = skcsData[checkType].styles.skcCount[styleId];
var isSKCCountOk = checkModSKCCount(styleSkcCount,skcCountRule,skcCountValue);
if(!isSKCCountOk){
errMsg.push("设计号【"+styleId+"】的skc个数【"+styleSkcCount+"】,不符合同款内SKC【"+skcRuleName+"】【"+skcCountValue+"】个数要求");
}
});
}
//处理每个skc按照品类+中品类的组货单价-价格带范围
skcsData[checkType].categoryKey.forEach(function(key){
var skcsList = skcsData.skcs[key];
if(skcsList.length>0){
var skcNode = skcsData.list[skcsList[0]];
var commodityType = skcNode.commodityType;
var catId = skcNode.catId;
var midCatId = skcNode.midCatId;
var keyName = skcNode.categoryKeyName;
//返回多个价格带
var tableRuleT9 = filterRuleTable(ruleTableNode,"9",false,{UR_SDS_CommodityType:"UR_enum_CommodityType:"+checkType,UR_SDS_Month:monthNode.C8_MC_Month,UR_SDS_ProductLargeType:catId,UR_SDS_MiddleCategoryType:midCatId});
if(tableRuleT9 && tableRuleT9.length>0){
var priceRange = getPriceRange(tableRuleT9);
skcsList.forEach(function(skcId){
var skcNode = skcsData.list[skcId];
var price = skcNode.price;
if(price < priceRange.get("low") || price > priceRange.get("high")){
errMsg.push(keyName+" SKC=【"+skcId+"】的价格为【"+price+"】,不在规则表配置的价格带范围内【"+priceRange.get("low") + " - " + priceRange.get("high") + "】");
}
});
}
}
});
});
}
//校验主题款SKC的LOOK数量
//checkOnly=true,不进行最低深度计算,适用于组货确认时的检核,如果是组货计算,传递false
function checkSKCLookCount(errMsg,checkOnly,modList,modsObj,skcsData,ruleTableNode,weekNode,monthNode){
printLog("==========按规则表检查Look数量【开始】checkOnly="+checkOnly+"==============");
var isSpecialWeek = false;
var isLastWeek = weekNode.UR_ML_IsLastOrder;
var specialWeekOverSKCCount = 0; //规则表中对应的skc数
var specialWeekOverSKCModNum = 0;//规则表中定义的允许几个模块超出skc数
var specialWeekSKCCountRule = "";
var specialWeekSKCCountRuleName = "";
//表2#=特殊款最低深度设置表
var tableRule2 = filterRuleTable(ruleTableNode,"2",true,{UR_SDS_Month:monthNode.C8_MC_Month,UR_SDS_BillNo:weekNode.C8_ML_Week});
if(tableRule2 && tableRule2.$URL && tableRule2.$URL!=""){
specialWeekOverSKCCount = tableRule2.UR_SDS_SKCQuantity;
specialWeekOverSKCModNum = tableRule2.UR_SDS_ModuleQuantity;//规则表中定义的允许几个模块超出skc数
specialWeekSKCCountRule = getEnumValue(tableRule2.UR_SDS_Rule);
specialWeekSKCCountRuleName = locale.getEnumName(tableRule2.UR_SDS_Rule);
isSpecialWeek = true;
}else{
printLog("warning:没有找到表2#特殊款最低深度设置表");
}
printLog("isSpecialWeek:"+isSpecialWeek);
var tableRuleS1 = filterRuleTable(ruleTableNode,"1",true,{UR_SDS_CommodityType:"UR_enum_CommodityType:S"});
var overSKCCountModNumber = 0;//超出skc数量的模块数量
var overSKCCountModErrMsg = "";
if(tableRuleS1 && tableRuleS1.$URL && tableRuleS1.$URL!=""){
//获取1#表的规则信息
var skcRule = tableRuleS1.UR_SDS_Rule;
var skcRuleName = locale.getEnumName(skcRule);
var skcCountRule = getEnumValue(skcRule);
var skcCountValue = tableRuleS1.UR_SDS_SKCQuantity;
var lookCountUpper = tableRuleS1.UR_SDS_LOOKUpper;
var lookCountLower = tableRuleS1.UR_SDS_LOOKLower;
//look最低深度与全国月最低深度校验
//获取表4中按照月+风格的单月全国最低覆盖
var countryMinQty = 0;
//表J#=月度&风格金额/全国覆盖最低深度
var tableRuleS4 = filterRuleTable(ruleTableNode,"J",true,{UR_SDS_ProductStyle:monthNode.C8_MC_Style,UR_SDS_Month:monthNode.C8_MC_Month});
if(tableRuleS4 && tableRuleS4.$URL && tableRuleS4.$URL!=""){
countryMinQty = tableRuleS4.UR_SDS_MonthDepth;
printLog("单月全国最低覆盖:"+countryMinQty);
}
modList.forEach(function(modNum,index){
var oneModObj = modsObj[modNum];
var lookCount = oneModObj.lookCount;
var lookSKCCount = oneModObj.skcCount;
if(lookCount<lookCountLower || lookCount>lookCountUpper){
errMsg.push("模块号【"+modNum+"】的look套数为【"+lookCount+"】,不符合【"+lookCountLower+"-"+lookCountUpper+"】套数区间要求");
}
var isSKCCountOk = checkModSKCCount(lookSKCCount,skcCountRule,skcCountValue);
if(!isSKCCountOk){
if(!isSpecialWeek){
errMsg.push("模块号【"+modNum+"】的skc个数【"+lookSKCCount+"】,不符合同模块号内SKC【"+skcRuleName+"】【"+skcCountValue+"】个数要求");
}else{
isSKCCountOk = checkModSKCCount(lookSKCCount,specialWeekSKCCountRule,specialWeekOverSKCCount);
if(isSKCCountOk){
overSKCCountModNumber++;//记录有多少个超出了模块数量
overSKCCountModErrMsg += "模块号【"+modNum+"】的skc个数【"+lookSKCCount+"】,不符合同模块号内SKC【"+skcRuleName+"】【"+skcCountValue+"】个数要求</BR>";
}else{
if(isLastWeek){
isSKCCountOk = checkModSKCCount(lookSKCCount,"range","8,9,10,11,12,13");
if(!isSKCCountOk){
errMsg.push("模块号【"+modNum+"】的skc个数【"+lookSKCCount+"】,【最后一单】的SKC数不在范围【8,9,10,11,12,13】个数要求");
}
}else{
errMsg.push("模块号【"+modNum+"】的skc个数【"+lookSKCCount+"】,不符合同模块号内SKC【"+skcRuleName+"】【"+skcCountValue+"】个数要求");
errMsg.push("模块号【"+modNum+"】的skc个数【"+lookSKCCount+"】,也不符合规则表设定的【"+specialWeekSKCCountRule+"】【"+specialWeekOverSKCCount+"】个数要求");
}
}
}
}
//汇总look所有最低深度,与全国月最低覆盖对比
var lookTotalMinQty = 0;
//计算此模块下的look量
var lookList = oneModObj.looks.list;
var minQtySKCs = [];
printLog("计算模块:"+modNum+"下look的最低深度值");
lookList.forEach(function(look){
var lookSKCs = oneModObj.looks[look];
//取skc最低值
var currentMinQty = 999999999;
var minQtySKCId = "";
var minQtySKCName = "";
lookSKCs.forEach(function(skcurl){
var skcNode = skcsData.list[skcurl];
var initQty = skcNode.lookCalQty;
printLog("\tlook="+look+" skc="+skcNode.skcName+" 最低值="+initQty);
if(initQty<currentMinQty && initQty > 0){
currentMinQty = initQty;
minQtySKCId = skcurl;
minQtySKCName = skcNode.skcName;
}
});
printLog("\tlook="+look+" 最低值="+currentMinQty);
//如果一个look下的所有skc剩余深度都是0,则计算有问题
if(currentMinQty == 999999999){
errMsg.push("模块号【"+modNum+"】的所有skc在【" + look + "】下的组货深度都是0,计算出现问题,请调整初始组货深度!");
currentMinQty = 0;
}
//汇总最低值
lookTotalMinQty += currentMinQty;
/*
//如果一个skc在多个look都是最低值,那么在第一个最低值的look扣减后,可用组货深度为0,所以计算有问题
if(minQtySKCs.includes(minQtySKCId)){
errMsg.push("模块号【"+modNum+"】的skc【"+minQtySKCName+"】,在多个look下的组货深度都是最低值,计算出现问题,请调整初始组货深度!");
}else{
minQtySKCs.push(minQtySKCId);
}
*/
//扣减
lookSKCs.forEach(function(skcurl){
skcsData.list[skcurl].lookCalQty=skcsData.list[skcurl].lookCalQty-currentMinQty;
});
});
printLog("计算模块:"+modNum+"下look的最低深度值完成 最低深度="+lookTotalMinQty);
/*改为look最低深度大于0且不是检核时就计算深度
if(lookTotalMinQty<countryMinQty){
errMsg.push("模块号【"+modNum+"】的所有look最低深度汇总值【"+lookTotalMinQty+"】【小于】单月全国覆盖最低深度【"+countryMinQty+"】!");
}else */
if(lookTotalMinQty>0 && !checkOnly){
printLog("计算模块:"+modNum+"下look的最低深度值完成 最低深度="+lookTotalMinQty+" 满足全国最低深度要求,计算SKC的最低深度值");
var scalePct = countryMinQty/lookTotalMinQty;
printLog("\t满足全国最低深度要求,计算SKC的最低深度值, 按照初始深度缩放【"+scalePct+"】后作为skc最小值");
//look款skc深度满足全国最低深度时,
lookList.forEach(function(look){
var lookSKCs = oneModObj.looks[look];
//将每个skc的初始深度乘以scalePct后作为最低深度
lookSKCs.forEach(function(skcurl){
var skcNode = skcsData.list[skcurl];
var lookCalQty = skcNode.lookCalQty;
var initQty = skcNode.initQty;
if(lookCalQty>0)
initQty = initQty - lookCalQty;//减掉扣减剩余部分,才是改skc在look下的最低深度,同时也是多个look下最低深度汇总之和
var minQty = skcNode.minQty;
var scaleQty = parseInt(initQty*scalePct)+1;//加1,表示要比最小值要高一些
printLog("\tlook="+look+" skc="+skcNode.skcName+"look款最低深度计算前 minQty="+minQty+" initQty="+initQty+" scaleQty="+scaleQty);
if(minQty<scaleQty){
minQty = scaleQty;
skcNode.minQty = scaleQty;
//初始深度小于单skc最低深度,则取单skc最低深度为初始深度
if(initQty < scaleQty){
skcNode.initQty = scaleQty;
}
}
printLog("\tlook="+look+" skc="+skcNode.skcName+"look款最低深度计算后 minQty="+minQty);
});
});
}
});
//如果模块skc数校验失败
if(overSKCCountModErrMsg !="" && overSKCCountModNumber>specialWeekOverSKCModNum && specialWeekOverSKCModNum>0){
errMsg.push(overSKCCountModErrMsg);
}
}else{
printLog("warning:没有找到表1#SKC标准及LOOK套数的标准值&组货系数");
}
printLog("==========按规则表检查Look数量 ErrMsg="+errMsg.join("\n")+"==============");
printLog("==========按规则表检查Look数量【结束】checkOnly="+checkOnly+"==============");
}
//获取两个时间的时间差
function timeDiff(date1,date2){
var retStr = "";
var diff = date2.getTime()-date1.getTime();
if(diff<1000){
retStr = diff+"毫秒";
}else{
var secondValue = diff/1000;//转换为秒数
if(secondValue>60){
//转换为分钟
var minValue = parseInt(secondValue/60);
var secValue = parseInt(secondValue%60);
retStr = minValue+"分钟"+secValue+"秒";
}else{
retStr = secondValue.toFixed(2)+"秒";
}
}
return retStr;
}
//复制款式 Jarvis 20231127
function copyStyleFormOldStyle(ac,node){
var newurl = comm.createUrl("Style");
var dataMap = new Map();
dataMap["ProductSalesRegions"] = false;
dataMap["Shape"] = false;
dataMap["RealizedProducts"] = false;
dataMap["Wbs"] = false;
dataMap["Suppliers"] = false;
dataMap["Crew"] = false;
dataMap["Images"] = true;
dataMap["Comments"] = false;
dataMap["Documents"] = false;
dataMap["Theme"] = false;
dataMap["CompetitiveStyles"] = false;
dataMap["ProductColors"] = true;
var sheetMap = new Map();
sheetMap["ApparelBOM"] = false;
var stateMap = new Map();
stateMap["APPROVED"] = true;
stateMap["CLOSED"] = true;
stateMap["DRAFT"] = true;
stateMap["PENDING"] = true;
stateMap["ABANDONED"] = true;
var sampleMap = new Map();
ac.m_writer.callMethod("Apparel", "CollectionCopyStyle")
.addParameter("VOPT.Shape", "ref", "centric:")
.addParameter("VOPT.Theme", "ref", "centric:")
//.addParameter("VOPT.Node Name", "string", node.$Name) 名称不复制
.addParameter("CVOPT.RevisionBehavior", "enum", "RevisionCopyOptions:CopyAllRevisions")
.addParameter("VOPT.PreventDuplicateCarryover", "boolean", "false")
.addParameter("OPT.GeneralData", "booleanmap", dataMap)
.addParameter("OPT.DataSheets", "booleanmap", sheetMap)
.addParameter("OPT.CopiedStyleQuoteStates", "booleanmap", stateMap)
.addParameter("OPT.CopiedStyleSampleTypes", "booleanmap", sampleMap)
.addParameter("URL", "ref", newurl)
.addParameter("ParentURL", "ref", node.__Parent__)
.addParameter("VOPT.SelectedURLs", "reflist", node.ProductColors)
.addParameter("FromURL", "ref", node.$URL);
ac.m_writer.execute({sync: true});
ac.m_writer.callMethod("SiteAdmin", "ValidateAndDeleteIfFailed")
.addParameter("URL", "ref", newurl);
ac.m_writer.execute({sync: true});
return newurl;
}
//打印日志,后续可以控制关闭
function printLog(msg){
if(currentUserMidName && currentUserMidName==="log"){
console.log(new Date()+"\t"+msg);
}
}
//获取cookie
function getCookie() {
getCookie = (name) => document.cookie.match(`[;\s+]?${name}=([^;]*)`)?.pop();
let c8_cookie = "SecurityTokenURL=" + getCookie("SecurityTokenURL") + ";";
c8_cookie = c8_cookie + "CSRFToken=" + getCookie("CSRFToken");
return c8_cookie;
}
//以当前用户身份调用系统内部后台接口统一方法(同步)
function invokeJavaActionCurrentUser(loadingMessage, method, jsonData) {
if (loadingMessage == null || loadingMessage == "")
loadingMessage = "系统处理中,请稍等.....";
var loading = jp.loading(loadingMessage);
$.ajax({
type: 'post',
url: pluginsURL + method,
beforeSend: function(request) {
request.setRequestHeader("C8_Cookie",getCookie());
},
data: JSON.stringify(jsonData),
async: false,
contentType: 'application/json;charset=utf-8',
dataType: 'json',
error: function (data) {
jp.close(loading);
jp.alert("调用系统后台失败,请联系管理员!");
},
success: function (data) {
var dataObj = eval(data);
jp.close(loading);
if (dataObj.code == 0) {
result = 'success';
jp.success("处理完成:" + dataObj.msg );
} else {
result = dataObj.msg;
jp.alert("处理完成:" + dataObj.data);
}
}
});
}
//隐藏动作按钮Action
api.hideAction("SpecificationDataSheet","","PurgeRevisions");
api.hideAction("SpecificationDataSheet","","PurgeResetRevisions");
api.hideAction("SpecificationDataSheet","","Abandon");
api.hideAction("SpecificationDataSheet","", "ReviseAndAbandon");
//设置单号上可编辑门店数据
api.setRelationshipAccess("MarketingLook", "LookProducts", true);
//设置组货界面可以编辑款式和SKC上数据
api.setRelationshipAccess("MCProduct", "C8_MCP_SKC", true);
api.setRelationshipAccess("MCProduct", "ProductStyle", true)
api.setRelationshipAccess("Colorway", "Style", true);
api.setRelationshipAccess("Style", "Attributes", true);
api.excludeActionFromEllipses("C8_CopyStyle");
api.excludeActionFromEllipses("C8_ZhuanBan");
api.defineModule("Site/StoreMap",[
"dojo/_base/declare",
"csi/_base/underscore",
"csi/store/Nodes",
"csi/table/matrix/ColumnMap",
"csi/xml/Query"
], function(declare,_,Nodes,ColumnMap,Query) {
return declare(ColumnMap, {
/** @property {Nodes} _CustomerStore - Data store of the site-level Holiday nodes */
_CustomerStore: null,
/**
* Query for all customers
*/
addDeferred: function(ctx, h, dfds) {
this._CustomerStore = new Nodes({
cachingStore: ctx.cache,
sortQuery: new Query().SortByAttr("SortOrder"),
typeNode: "Customer"
});
dfds.push(this._CustomerStore.query());
},
/**
* If only one Heading in matrix, then do not render sub-header
*/
shouldRenderLoneSubheader: function(subSpec) {
return false;
},
/**
* If view has active customers, then only return subset of all customers
*/
_getColumnNodes: function(ctx, h) {
var customers = this._CustomerStore.query();
return customers;
}
});
});
api.defineModule("Site/StoreMapAll",[
"dojo/_base/declare",
"csi/_base/underscore",
"csi/store/Nodes",
"csi/table/matrix/ColumnMap",
"csi/xml/Query"
], function(declare,_,Nodes,ColumnMap,Query) {
return declare(ColumnMap, {
/** @property {Nodes} _CustomerStore - Data store of the site-level Holiday nodes */
_CustomerStore: null,
mapKeyColumnId: "$URL",
/**
* Query for all languages
*/
addDeferred: function(ctx, h, dfds) {
this._CustomerStore = new Nodes({
cachingStore: ctx.cache,
sortQuery: new Query().SortByAttr("SortOrder"),
typeNode: "Customer"
});
dfds.push(this._CustomerStore.query());
},
/**
* If only one Heading in matrix, then do not render sub-header
*/
shouldRenderLoneSubheader: function(subSpec) {
return true;
},
/**
* If view has active customer, then only return subset of all customer
*/
_getColumnNodes: function(ctx, h) {
var customers = this._CustomerStore.query();
return customers;
}
});
});
api.defineModule("Site/MonthWeekMap",[
"dojo/_base/declare",
"csi/_base/underscore",
"csi/store/Nodes",
"csi/table/matrix/ColumnMap",
"csi/xml/Query"
], function(declare,_,Nodes,ColumnMap,Query) {
return declare(ColumnMap, {
/** @property {Nodes} _WeekStore - Data store of the site-level Holiday nodes */
_WeekStore: null,
mapKeyColumnId: "$URL",
/**
* Query for all languages
*/
addDeferred: function(ctx, h, dfds) {
this._WeekStore = new Nodes({
cachingStore: ctx.cache,
sortQuery: new Query().RefAttr("__Parent__", xml.OP_EQUALS, routerStore.locationNode.$URL).SortByAttr("C8_ML_Week"),
typeNode: "MarketingLook"
});
dfds.push(this._WeekStore.query());
},
/**
* If only one Heading in matrix, then do not render sub-header
*/
shouldRenderLoneSubheader: function(subSpec) {
return true;
},
/**
* If view has active customer, then only return subset of all customer
*/
_getColumnNodes: function(ctx, h) {
var customers = this._WeekStore.query();
return customers;
}
});
});
api.defineModule("Site/StoreMapAllByRows",[
"dojo/_base/declare",
"csi/_base/underscore",
"csi/store/Nodes",
"csi/table/matrix/RowRootMap",
"csi/xml/Query"
], function(declare,_,Nodes,RowRootMap,Query) {
return declare(RowRootMap, {
/** @property {Nodes} _HolidayStore - Data store of the site-level Holiday nodes */
mapKeyRowId: "$URL",
});
});
//在Crumb Search最后侧增加状态显示
//系统标准cssName: csi-state-draft csi-state-pending csi-state-approved
//系统标准cssName: commentColorBlue commentColorGreen commentColorViolet commentColorPlum commentColorYellow
//系统标准cssName: stateWrapper csi-state-other (此为一组css)
//系统标准cssName: stateWrapper csi-state-draft
function displayCrumbSearchStatus(divId,displayValue,cssName){
if(!cssName){
cssName = "csi-state-draft";
}
if($("#"+divId) && $("#"+divId).length==1){
$("#"+divId).text(displayValue);
}else{
var domNode = $("div[class*='crumb crumbSearch']").last();
if(domNode){
domNode.append('<div id="'+divId+'" class="csi-name-value-pair csi-state '+cssName+'">'+displayValue+'</div>');
}
}
}
topic.subscribe("/csi/view/start", function(view) {
var key = view.defView.getKey();
var m_id = view.defView.m_id;
var m_idType = view.defView.m_idType;
var m_typeView = view.defView.m_typeView;
var ViewNode = view.getViewNode();
var currentNode = routerStore.locationNode;
//Agnes 20240321 统一移除表单上的保存&继续和保存&新建按钮
if(view.defView.m_defActions ){
if(view.defView.m_defActions.getAction("Save_Go")){
view.defView.m_defActions.removeAction("Save_Go");
}
if(view.defView.m_defActions.getAction("Save_New")){
view.defView.m_defActions.removeAction("Save_New");
}
if(view.defView.m_defActions.getAction("Save_Copy")){
view.defView.m_defActions.removeAction("Save_Copy");
}
}
try {
if (key == "__HeaderToolbar__|User") {
rules = getLocalStorage();
proto = Object.create(view.defView.m_defs[0].m_rules[0].__proto__);
} else {
checkFieldRight(view);
}
} catch (err) {
console.error("字段权限控制异常:", err);
}
//设置水印
if (currentUserNode) {
var currentTime = new Date();
var year = currentTime.getFullYear();
var month = currentTime.getMonth() + 1; // 月份从0开始,所以要加1
var day = currentTime.getDate();
var dateStr = year + "-" + month + "-" + day ;
watermark.load({ watermark_txt:currentUserNode.$Name + "\n( "+currentUserNode.UserID + " )\n" + dateStr })
}
//进入到单号下,显示对应的状态信息
if(key=="C8_DSZuHuo|MarketingLook" || key=="C8_HWZuHuo|MarketingLook" || key=="C8_GNZuHuo|MarketingLook" || key=="C8_HWZuHuoOM|MarketingLook"){
var pairValueSpan = null;
var pairNameValueDiv = null;
var mlStatus = currentNode.C8_ML_Status;
var monthNode = view.cacheView.getNode(currentNode.PrimaryCollection)
var orderType = locale.getEnumName(monthNode.C8_MC_MonthOrderAattribute);
var displayValue = locale.getEnumName(mlStatus);
var mlStatusKey = getEnumValue(mlStatus);
var divId = "C8StatusDiv";
var cssName = "csi-state-draft";
if(mlStatusKey=='Complete'){
cssName = "csi-state-approved";
}
displayCrumbSearchStatus("C8OrderType",orderType,cssName);
displayCrumbSearchStatus(divId,displayValue,cssName);
}
//如果组货页面的
var zhPages = ["MCProducts|MarketingLook","C8_MCProductsDS|MarketingLook","C8_GroupGoodsGallery|MarketingLook","C8_GroupGoodsGalleryOM|MarketingLook"];
if(zhPages.includes(key)){
if(ViewNode.$Type=="MarketingLook"){
var weekStatus = ViewNode.C8_ML_Status;
var weekStatusValue = getEnumValue(weekStatus);
var statusDisplay = locale.getEnumName(weekStatus);
var cssName = "csi-state-draft";
if(weekStatusValue=='Complete'){
cssName = "csi-state-approved";
}
$(view.domNode.parentElement.firstChild).text(ViewNode.$Name);
$(view.domNode.parentElement.firstChild).append('<span>&nbsp;&nbsp;</span><span class="csi-name-value-pair csi-state '+cssName+'" style="font-size:14px;">'+statusDisplay+'</span>');
var editableAttributes = ["C8_MCP_SuggestedLevel","C8_MCP_AdjustingDepth","C8_MCP_SKCLock"];
if(weekStatusValue=="Complete"){
view.defView.bReadOnly=true;
}else if(weekStatusValue=="Lock"){
view.defView.m_headings.forEach(function(h,i){
if(!editableAttributes.includes(h.m_id)){
h.setRight("View");
}
});
}
}
}
switch (key) {
case "__Form__|SpecificationDataSheet": {
if (view.defView && view.defView.m_formData && view.defView.m_formData.m_source) {
var acNode = view.defView.m_formData.m_source.m_action;
if (acNode.m_id == "NewSpecificationDataSheetFromTemplate" || acNode.m_id == "Copy") {
var node = view.defView.m_formData.m_source.m_aSources[0];
//view.addFixedValue("C8_SD_Channel",node.C8_SD_Channel);
//类型为组货管控规则时隐藏年份季节字段 Agnes 20240221
var subtype = view.getField("Subtype");
subtype.m_onChange = onChangeSDSubtype(view);
}
if(acNode.m_id == "NewDataSheetTemplates" || acNode.m_id == "Copy"){
//类型为组货管控规则时隐藏年份季节字段 Agnes 20240221
var subtype = view.getField("Subtype");
subtype.m_onChange = onChangeSDSubtype(view);
}
}
break;
}
case "C8_ZhuanBanForm|Style":{
if(ViewNode.$Type == "Style"){
var catNode = resolver.m_cache.getNode(ViewNode.Category1,true);
if(catNode.UR_Brand_Brand == "UR_enum_Brand:01" && catNode.UR_Brand_ProductSeriation == "UR_enum_ProductSeriation:I"){
view.addFixedValue("C8_Style_Translation","UR_enum_Translation:02");
}else{
view.addFixedValue("C8_Style_Translation","UR_enum_Translation:01");
}
}
break;
}
}
});
function onChangeSDSubtype(view){
view.addHideExpression("C8_SD_YearSeaon", "attr(attr('Subtype'),'Node Name')=='组货管控规则' ");
}
topic.subscribe("/csi/action/start", function (ac) {
var actionId = ac.m_action.m_id;
var actionName = ac.m_action.m_name;
//组货点击后,需要刷新
if(actionId == "C8_StoreGroupGoods" && actionName == "组货"){
ac.widget.refreshData();
}
});
topic.subscribe("/csi/action/end", function (ac) {
var actionId = ac.m_action.m_id;
var actionName = ac.m_action.m_name;
//移除组货skc后删除mcproduct并更新colorway上对应渠道组或信息
if(actionId == "Remove" && ac.m_idAttrParent && ac.m_idAttrParent=="LookProducts" ){
var mcp = ac.m_urlNode;
var mcpNode = getNode(ac,mcp);
var viewId = ac.widget.defView.m_id;
var attName = "";
if(viewId=="MCProducts"){
attName = "C8_CW_GNPick";
}else if(viewId=="C8_MCProductsDS"){
attName = "C8_CW_DSPick";
}else if(viewId=="C8_GroupGoodsGallery"){
attName = "C8_CW_HWPick";
}
if(attName !="" && mcpNode && mcpNode.C8_MCP_SKC && mcpNode.C8_MCP_SKC!="centric:"){
ac.m_writer.changeNode(mcpNode.C8_MCP_SKC).changeAttribute(attName,"boolean",false);
}
//20240422 C8_CW_GNDepth、C8_CW_HWDepth、C8_CW_DSDepth均为0时
// 清空 组货单号 UR_CW_GroupBillNo、确认唯一码 UR_Colorway_OKCode 两个字段
var skc = ac.m_cache.addNode(mcpNode.C8_MCP_SKC);
if(skc.C8_CW_GNDepth == 0 && skc.C8_CW_HWDepth == 0 && skc.C8_CW_DSDepth == 0){
ac.m_writer.changeNode(mcpNode.C8_MCP_SKC).changeAttribute("UR_CW_GroupBillNo","ref","centric:")
.changeAttribute("UR_Colorway_OKCode","string","");
//清空款式属性组货单号:UR_StyleAttributes_GroupBillNo
var style = ac.m_cache.addNode(skc.__Parent__);
ac.m_writer.changeNode(style.Attributes).changeAttribute("UR_StyleAttributes_GroupBillNo","enum","UR_enum_billno:");
}
ac.m_writer.deleteNode(mcp,true);
ac.m_writer.execute({sync:true});
}
})
//api 调用
api.hideAction("MarketingLook", "MCProducts", "Edit");
//监控colorway上产品等级变更,初始化海外组货时各门店的产品等级 Agnes 20240303
api.watchAttribute("Colorway", "C8_CW_StoreLevel", function (ac, cn, node, id) {
var search = new Search();
var map = new Map();
var q = search.getQuery();
//查询Customer 海外店群
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "Customer");
var res = search.execute({sync: true});
var results = res.getResultNodes();
if(results){
results.forEach(function(customer){
var customerUrl = customer.$URL;
map[customerUrl]= ac.newValue;
});
}
//查询组货SKC
var search2 = new Search();
var q2 = search2.getQuery();
q2.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCProduct")
.RefAttr("C8_MCP_SKC", xml.OP_EQUALS, node.$URL);
var orSearch = q2.Or();
orSearch.Attr("C8_MC_Channel", xml.OP_EQUALS, "UR_enum_Channel:OVEC", "Child:__Parent__");
orSearch.Attr("C8_MC_Channel", xml.OP_EQUALS, "UR_enum_Channel:EA", "Child:__Parent__");
res = search2.execute({sync: true});
results = res.getResultNodes();
if(results){
ac.m_writer.changeNode(results[0].$URL).changeAttribute("C8_MCP_StoreLevel","enummap", map);
//{"C3208": "UR_ProductLevel:B", "C942329": "UR_ProductLevel:A"});
}
return true;
});
//wanglong 20240107 款式发送至SCP pluginsURL
api.watchAttribute("StyleAttributes", "UR_StyleAttributes_SendToSCP", function (ac, cn, node, id) {
debugger
if (ac.newValue) {
var styleNode = getNode(ac,node.__Parent__);
var msg = "请先填写";
var flag = false;
//校验设计师跟基本单位必填
if (node.UR_StyleAttributes_BasicUnit == "UR_enum_Unit:") {
msg = msg + "基本单位,";
flag = true;
}
if (node.UR_StyleAttributes_MiddleCategoryType == "UR_enum_ProductMiddleType:") {
msg = msg + "中品类,";
flag = true;
}
//图片必填
if(Object.entries(styleNode.Images).length == 0){
msg = msg + "款式图片,";
flag = true;
}
if (node.UR_StyleAttributes_Designer == "centric:") {
msg = msg + "设计师,";
flag = true;
}
//20220809 检查“设计助理必填” deliang.wei
if (node.UR_StyleAttributes_DesignAssistant == "centric:" || !node.UR_StyleAttributes_DesignAssistant) {
msg = msg + "设计助理,";
flag = true;
}
if(flag){
jp.alert(msg+"以上信息后,在发送!");
cn.changeAttribute("UR_StyleAttributes_SendToSCP", "boolean", false);
return true;
}
var loading = jp.loading("接口请求中");
var data = {"styleUrl":styleNode.$URL,"lookUrl":""};
requestPlM2ServiceApi('/ur/plm2_scp_004', data , false)
.then(function(result) {
jp.close(loading);
if(result){
// result是错误信息,有值则错误
jp.alert(result);
cn.changeAttribute("UR_StyleAttributes_SengToSCPMsg", "string", result);
cn.changeAttributeExp("UR_StyleAttributes_SendToSCPTime", "nowTime()", true);
cn.changeAttribute("UR_StyleAttributes_SendToSCP", "boolean", false);
}else{
jp.alert('发送成功!');
cn.changeAttribute("UR_StyleAttributes_SengToSCPMsg", "string", "数据接收成功");
cn.changeAttributeExp("UR_StyleAttributes_SendToSCPTime", "nowTime()", true);
}
ac.widget.refreshData();
})
.catch(function(error) {
jp.alert(error);
jp.close(loading);
cn.changeAttribute("UR_StyleAttributes_SengToSCPMsg", "string", error);
cn.changeAttributeExp("UR_StyleAttributes_SendToSCPTime", "nowTime()", true);
ac.widget.refreshData();
});
}
return true;
});
//选择基础色带出成衣色 Thomas 2017/12/11
api.watchAttribute("Colorway", "UR_Colorway_BaseColor", function (ac, cn, node, id) {
if (ac.newValue == "centric:") {
cn.changeAttribute("Code", "string", "");
cn.changeAttribute("Node Name", "string", "");
cn.changeAttributeExp("ColorSpecification", "ref(null)", true);
cn.changeAttributeExp("Images", "map(ref_type)", true);
return;
} else {
var objColor = ac.m_cache.getNode(ac.newValue, true);
var vMiddleType = objColor.UR_ColorSpec_MiddleType;
var objStyle = ac.m_cache.getNode(node.__Parent__, true);
var vProductColors = ac.m_cache.getNodes(objStyle.ProductColors, true);
var codeIndex = vMiddleType.indexOf(":");
var vCode = vMiddleType.substring(codeIndex + 1, vMiddleType.length);
if (vProductColors != null) {
for (var j = 0; j < vProductColors.length; j++) {
if (vProductColors[j].$URL != node.$URL) {
if (vProductColors[j].Code == vCode) {
alertMessage("配色号" + vCode + "已存在,请重新选择!");
cn.changeAttribute("UR_Colorway_BaseColor", "ref", ac.oldValue);
return;
}
}
}
}
cn.changeAttributeExp("ColorSpecification", "UR_Colorway_BaseColor", true);
cn.changeAttributeExp("Code", "enumValue(UR_Colorway_BaseColor.UR_ColorSpec_MiddleType)", true);
cn.changeAttributeExp("CodeN", "UR_Colorway_BaseColor.UR_ColorSpec_ClothCode2", true); //新配色号 赋值逻辑 王龙 20220913
cn.changeAttributeExp("Node Name", "UR_Colorway_BaseColor.UR_ColorSpec_ColorName", true);
//cn.changeAttributeExp("UR_Colorway_StyleColor", "ref(null)", true);
cn.changeAttributeExp("Images", "ColorSpecification.Images", true);
}
return true;
});
//电商组货,调整建议深度值后,重新计算建议的组货等级
api.watchAttribute("MCProduct","C8_MCP_AdjustingDepth", function (ac, cn, node, id){
var locationNode = routerStore.locationNode;
var monthNode = null;
if(locationNode.$Type=="MarketingLook" && locationNode.PrimaryCollection){
monthNode = getNode(ac,locationNode.PrimaryCollection);
}else if(locationNode.$Type=="MarketingCollection"){
monthNode = locationNode;
}
var weekURL = ac.widget.urlRoot;
var weekNode = null;
if(weekURL && weekURL !="" && weekURL != "centric:"){
weekNode = getNode(ac,weekURL);
}
if(monthNode && monthNode.C8_MC_Channel=="UR_enum_Channel:B" && weekNode && weekNode.$Type=="MarketingLook"){
var controlRuleKeys = searchControlRules(monthNode);
var skcsData = getDianShangGroupSKCData(ac,[node.$URL], controlRuleKeys, false);//传递MCP的URL
if(skcsData && skcsData.list && skcsData.list[node.C8_MCP_SKC]){
var skcNode = skcsData.list[node.C8_MCP_SKC];
var skcCategoryKey = skcNode.categoryKey;
skcCategoryKey = skcCategoryKey.substring(0, skcCategoryKey.length-1);
var minQty = node.C8_MCP_SpecialLowDepth;
if(ac.newValue>=minQty){
var suggestClass = getClassLevel(ac.newValue,skcCategoryKey,searchTargetTableDianShang(weekNode));
if(suggestClass){
cn.changeAttribute("C8_MCP_AdjustingLevel","enum","UR_enum_DSLevel:"+suggestClass);
}
}else{
ac.newValue = ac.oldValue;
cn.changeAttribute("C8_MCP_AdjustingDepth","integer",ac.oldValue);
jp.warning("调整深度不能低于最低深度!");
}
}
}
//校验国内组货时,D款和大片款超出金额
if(monthNode && monthNode.C8_MC_Channel=="UR_enum_Channel:DO"){
var newQty = ac.newValue;
var skcMinQty = node.C8_MCP_SpecialLowDepth;//skc最低深度
var dMinQty = node.C8_MCP_DLowDepth;
if(skcMinQty>=dMinQty){
if(ac.newValue<skcMinQty){
ac.newValue = ac.oldValue;
cn.changeAttribute("C8_MCP_AdjustingDepth","integer",ac.oldValue);
jp.warning("调整深度不能低于SKC最低深度【"+skcMinQty+"】!");
}
}else{
if(ac.newValue<dMinQty){
ac.newValue = ac.oldValue;
cn.changeAttribute("C8_MCP_AdjustingDepth","integer",ac.oldValue);
jp.warning("调整深度不能低于D款大片款最低深度【"+dMinQty+"】!");
}
}
}
//修改调整深度后,直接锁定skc && monthNode && monthNode.C8_MC_Channel=="UR_enum_Channel:DO"
if(ac.newValue){
cn.changeAttribute("C8_MCP_SKCLock","boolean",true);
}
//设置js不缓存
ac.m_writer.setCannotCache();
ac.bRefreshNode = true;
return true;
});
api.watchAttribute("MCProduct","C8_MCP_AdjustingDepthHy", function (ac, cn, node, id){
if(ac.newValue){
var map = new Map();
var lockMap = new Map();
map[ac.refNodeId] = ac.newValue*node.C8_MCP_Price;
lockMap[ac.refNodeId] = true;
ac.m_writer.changeNode(node.$URL).changeAttribute("C8_MCP_AdjustingAmountHy", "doublemap", map, true, false);
ac.m_writer.changeNode(node.$URL).changeAttribute("C8_MCP_SKCLockhy", "booleanmap", lockMap, true, false);
}
return true;
});
//在更改单款深度指数时,获取对应的指数数值,只有在单号下维护才可以
api.watchAttribute("Style","UR_Style_DepthIndex", function (ac, cn, node, id){
var locationNode = routerStore.locationNode;
var monthNode = null;
if(locationNode.$Type=="MarketingLook" && locationNode.PrimaryCollection){
monthNode = getNode(ac,locationNode.PrimaryCollection);
}else if(locationNode.$Type=="MarketingCollection"){
monthNode = locationNode;
}
if(monthNode){
//1.获取规则表-组货系数表
var ruleTableNode = searchRuleTable(monthNode);
//0621 判断该设计号在几个选款池中
var colors = node.ActiveColorways;
var search = new Search();
var q = search.getQuery();
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCProduct")
.RefAttr("__Parent__", xml.OP_EQUALS, monthNode.$URL);
let orSearch = q.Or();
for(let i=0; i<colors.length;i++){
orSearch.RefAttr("C8_MCP_SKC", xml.OP_EQUALS, colors[i])
}
var res = search.execute({sync: true});
var results = res.getResultNodes();
var skc = results.length;
//filterRuleTable(ruleTableNode,"I",true,{UR_SDS_CommodityType:node.UR_Style_CommodityType,UR_SDS_Month:monthNode.C8_MC_Month,UR_SID_GroupOrderAattribute:locationNode.C8_ML_WeekOrderAattribute,UR_SDS_StyleIndex:ac.newValue});
var tableRuleS1 = filterRuleTable(ruleTableNode,"I",true,{UR_SDS_CommodityType:node.UR_Style_CommodityType,UR_SDS_StyleIndex:ac.newValue});
if(tableRuleS1 && tableRuleS1.$URL && tableRuleS1.$URL!=""){
var changeValue = tableRuleS1.UR_SDS_StyleCoefficient;
var avgDepth = node.UR_Style_MonthAvgDepth;
cn.changeAttribute("UR_Style_DepthCoefficient","double",changeValue);
node.ProductColors.forEach(function(color){
//ac.m_writer.changeNode(color).changeAttributeExp("C8_CW_InitialSKCDepth","integer("+avgDepth+"*UR_CW_BestBadCoefficient*"+changeValue+")",true);
if(skc == 1){
ac.m_writer.changeNode(color).changeAttributeExp("C8_CW_InitialSKCDepth","ifNaN(integer("+avgDepth+"*"+changeValue+"),0)",true);
}else if(skc > 1){
ac.m_writer.changeNode(color).changeAttributeExp("C8_CW_InitialSKCDepth","ifNaN(integer("+avgDepth+"*UR_CW_BestBadCoefficient*"+changeValue+"),0)",true);
}
});
}
}
ac.bRefreshNode = true;
return true;
});
//修改标签时,自动刷新数据
api.watchAttribute("Colorway","C8_CW_DisplayType", function (ac, cn, node, id){
ac.bRefreshNode = true;
return true;
});
//款指定渠道更新时,自动带到Colorway上的渠道款中 Jarvis 20240531
api.watchAttribute("Style","UR_Style_KNSStyle", function (ac, cn, node, id){
var colorways = node.ActiveColorways;
for(var i=0;i<colorways.length;i++){
ac.m_writer.changeNode(colorways[i]).changeAttribute("C8_CW_NSStyle", "enum", ac.newValue);
}
return true;
});
//修改标签时,自动刷新数据
api.watchAttribute("Colorway","C8_CW_Special", function (ac, cn, node, id){
var styleNode = getNode(ac, node.__Parent__);
if (node.C8_CW_CompleteTime != 0) {
ac.m_writer.changeNode(node.$URL).changeAttribute("C8_CW_DSChangeTag", "boolean", true);
ac.m_writer.changeNode(node.$URL).changeAttribute("C8_CW_HWChangeTag", "boolean", true);
var mentions = getGroup(ac, "海外买手");
var mentions1 = getGroup(ac, "电商买手");
mentions.concat(mentions1);
var subject = "特殊款标签确认消息";//主题
var comments = styleNode.$Name + "特殊款标签已修改";//消息文本
var docContainer = styleNode.DocumentsAndComments;
createConversation(ac, docContainer, subject, mentions, comments);
//发送邮件
SendMailToRole(ac,"海外买手","测试:" + subject,comments,"");
SendMailToRole(ac,"电商买手","测试:" + subject,comments,"");
}
ac.bRefreshNode = true;
return true;
});
//修改标签时,自动刷新数据
api.watchAttribute("Colorway","C8_CW_DSChangeTag", function (ac, cn, node, id){
ac.bRefreshNode = true;
return true;
});
//修改标签时,自动刷新数据
api.watchAttribute("Colorway","C8_CW_HWChangeTag", function (ac, cn, node, id){
ac.bRefreshNode = true;
return true;
});
//修改标签时,自动刷新数据
api.watchAttribute("Colorway","UR_Colorway_Look1", function (ac, cn, node, id){
ac.bRefreshNode = true;
return true;
});
//修改标签时,自动刷新数据
api.watchAttribute("Colorway","UR_Colorway_Look2", function (ac, cn, node, id){
ac.bRefreshNode = true;
return true;
});
//修改标签时,自动刷新数据
api.watchAttribute("Colorway","UR_Colorway_Look3", function (ac, cn, node, id){
ac.bRefreshNode = true;
return true;
});
//修改标签时,自动刷新数据
api.watchAttribute("Colorway","UR_Colorway_Look4", function (ac, cn, node, id){
ac.bRefreshNode = true;
return true;
});
//修改标签时,自动刷新数据
api.watchAttribute("Colorway","UR_Colorway_Look5", function (ac, cn, node, id){
ac.bRefreshNode = true;
return true;
});
//修改标签时,自动刷新数据
api.watchAttribute("Colorway","UR_Colorway_Look6", function (ac, cn, node, id){
ac.bRefreshNode = true;
return true;
});
//修改标签时,自动刷新数据
api.watchAttribute("StyleAttributes","UR_StyleAttributes_MiddleCategoryTypeCount", function (ac, cn, node, id){
ac.bRefreshNode = true;
return true;
});
//修改标签时,自动刷新数据
api.watchAttribute("StyleAttributes","UR_StyleAttributes_Silhouette", function (ac, cn, node, id){
ac.bRefreshNode = true;
return true;
});
//中品类修改时,发送邮件通知 Jarvis 0620
api.watchAttribute("StyleAttributes","UR_StyleAttributes_MiddleCategoryType", function (ac, cn, node, id){
var styleNode = getNode(ac,node.__Parent__);
var subject = "测试:中品类修改消息";//主题
var comments = styleNode.$Name + "中品类已修改";//消息文本
//发送邮件
SendMailToRole(ac,"海外买手",subject,comments,"");
SendMailToRole(ac,"电商买手",subject,comments,"");
return true;
});
//渠道款修改时,发送邮件通知 Jarvis 0620
api.watchAttribute("Colorway","C8_CW_NSStyle", function (ac, cn, node, id){
var styleNode = getNode(ac,node.__Parent__);
var subject = "测试:渠道款修改消息";//主题
var comments = styleNode.$Name + "指定渠道款已修改";//消息文本
//发送邮件
SendMailToRole(ac,"海外买手",subject,comments,"");
SendMailToRole(ac,"电商买手",subject,comments,"");
ac.bRefreshNode = true;
return true;
});
//颜色修改时,发送邮件通知 Jarvis 0620
api.watchAttribute("Colorway","ColorSpecification", function (ac, cn, node, id){
var styleNode = getNode(ac,node.__Parent__);
var subject = "测试:颜色修改消息";//主题
var comments = styleNode.$Name + "颜色已修改";//消息文本
//发送邮件
SendMailToRole(ac,"海外买手",subject,comments,"");
SendMailToRole(ac,"电商买手",subject,comments,"");
ac.bRefreshNode = true;
return true;
});
//在更改单SKC深度指数时,获取对应的指数数值,只有在单号下维护才可以
api.watchAttribute("Colorway","UR_CW_BestBadIndex", function (ac, cn, node, id){
var locationNode = routerStore.locationNode;
var monthNode = null;
if(locationNode.$Type=="MarketingLook" && locationNode.PrimaryCollection){
monthNode = getNode(ac,locationNode.PrimaryCollection);
}else if(locationNode.$Type=="MarketingCollection"){
monthNode = locationNode;
}
if(monthNode){
//1.获取规则表
var ruleTableNode = searchRuleTable(monthNode);
var styleNode = ac.m_cache.addNode(node.Style);
//0621 判断该设计号在几个选款池中
var colors = styleNode.ActiveColorways;
var search = new Search();
var q = search.getQuery();
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCProduct")
.RefAttr("__Parent__", xml.OP_EQUALS, monthNode.$URL);
let orSearch = q.Or();
for(let i=0; i<colors.length;i++){
orSearch.RefAttr("C8_MCP_SKC", xml.OP_EQUALS, colors[i])
}
var res = search.execute({sync: true});
var results = res.getResultNodes();
var skc = results.length;
var avgDepth = styleNode.UR_Style_MonthAvgDepth;
var depthIndex = styleNode.UR_Style_DepthCoefficient;
//filterRuleTable(ruleTableNode,"I",true,{UR_SDS_CommodityType:styleNode.UR_Style_CommodityType,UR_SDS_Month:monthNode.C8_MC_Month,UR_SID_GroupOrderAattribute:locationNode.C8_ML_WeekOrderAattribute,UR_SDS_StyleIndex:ac.newValue});
var tableRuleS1 = filterRuleTable(ruleTableNode,"I",true,{UR_SDS_CommodityType:styleNode.UR_Style_CommodityType,UR_SDS_SKCIndex:ac.newValue});
if(tableRuleS1 && tableRuleS1.$URL && tableRuleS1.$URL!=""){
var changeValue = tableRuleS1.UR_SDS_SKCCoefficient;
cn.changeAttribute("UR_CW_BestBadCoefficient","double",changeValue);
if(skc == 1){
cn.changeAttributeExp("C8_CW_InitialSKCDepth","ifNaN(integer("+avgDepth+"*"+depthIndex+"),0)",true);
}else if(skc > 1){
cn.changeAttributeExp("C8_CW_InitialSKCDepth","ifNaN(integer("+avgDepth+"*"+depthIndex+"*"+changeValue+"),0)",true);
}
}
}
ac.bRefreshNode = true;
});
//电商组货,更改D款时,获取对应的最低深度
api.watchAttribute("Colorway","C8_CW_DSSpecial", function (ac, cn, node, id){
var locationNode = routerStore.locationNode;
var monthNode = null;
if(locationNode.$Type=="MarketingLook" && locationNode.PrimaryCollection){
monthNode = getNode(ac,locationNode.PrimaryCollection);
}else if(locationNode.$Type=="MarketingCollection"){
monthNode = locationNode;
}
if(monthNode && monthNode.C8_MC_Channel=="UR_enum_Channel:B"){
var mcpURL = ac.refNodeId;
if(mcpURL && mcpURL!="centric:"){
var mcpNode = getNode(ac,mcpURL);
if(mcpNode && mcpNode.$Type=="MCProduct"){
//1.获取规则表
var ruleTableNode = searchRuleTable(monthNode);
var minQty = 0;
var styleNode = getNode(ac,node.__Parent__);
var styleAttNode = getNode(ac,styleNode.Attributes);
var category = styleNode.UR_Style_ProductLargeType; //品类
var midCategory = getEnumValue(styleAttNode.UR_StyleAttributes_MiddleCategoryTypeCount); //中品类
if(midCatMapping.has(midCategory)){//中品类转换
midCategory = midCatMapping.get(midCategory);
}
midCategory = "UR_enum_ProductMiddleType:" + midCategory;
var commodityType = styleNode.UR_Style_CommodityType;
if(ac.newValue=="UR_enum_Special:SD"){
//改为D款,读取K表,获取最低深度 20240409 新增商品层、品类、中品类过滤
var tableRuleK = filterRuleTable(ruleTableNode,"K",true,{UR_SDS_Month:monthNode.C8_MC_Month,UR_SDS_CommodityType:commodityType,UR_SDS_ProductLargeType:category,UR_SDS_MiddleCategoryType:midCategory});
if(tableRuleK && tableRuleK.$URL && tableRuleK.$URL!=""){
minQty = tableRuleK.UR_SDS_DLowDepth;
}
}else{
//改为普通款,读取X表,获取最低深度 20240409 新增订单属性、商品层、风格、电商级别过滤
var tableRuleX = filterRuleTable(ruleTableNode,"X",true,{UR_SDS_GroupOrderAattribute:monthNode.C8_MC_MonthOrderAattribute,UR_SDS_CommodityType:commodityType,UR_SDS_ProductStyle:monthNode.C8_MC_Style,UR_SDS_DSLevel:mcpNode.C8_MCP_SuggestedLevel,UR_SDS_ProductLargeType:category,UR_SDS_MiddleCategoryType:midCategory});
if(tableRuleX && tableRuleX.$URL && tableRuleX.$URL!=""){
minQty = tableRuleX.UR_SDS_LowDepth;
}
}
ac.m_writer.changeNode(mcpURL).changeAttribute("C8_MCP_SpecialLowDepth","integer",minQty);
var mcpAdjustDeep = mcpNode.C8_MCP_AdjustingDepth;
if(mcpAdjustDeep<minQty){
ac.m_writer.changeNode(mcpURL).changeAttributeFlag("C8_MCP_AdjustingDepth", xml.ATTR_FLAG_DISABLE_EXPRESSION, true, false)
.changeAttribute("C8_MCP_AdjustingDepth","integer",minQty);
}
}
}
}
ac.bRefreshNode = true;
});
//应急单唯一码选择
api.watchAttribute("Colorway","UR_Colorway_GroUnCode2", function (ac, cn, node, id){
if(ac.newValue != "centric:"){
var competiveStyleNew = ac.m_cache.getNode(ac.newValue, true);
ac.m_writer.changeNode(competiveStyleNew.$URL).changeAttribute("C8_CStyle_Selected", "boolean", true);
ac.bRefreshNode = true;
return true;
}
if(ac.oldValue != "centric:"){
var competiveStyleOld = ac.m_cache.getNode(ac.oldValue, true);
ac.m_writer.changeNode(competiveStyleOld.$URL).changeAttribute("C8_CStyle_Selected", "boolean", false);
ac.bRefreshNode = true;
return true;
}
ac.bRefreshNode = true;
return true;
});
//选款确认
api.watchAttribute("Colorway","Active", function (ac, cn, node, id){
var styleNode = getNode(ac,node.__Parent__);
var styleAttNode = getNode(ac,styleNode.Attributes);
debugger
if(ac.newValue){
//勾选
if (!node.UR_Colorway_BaseColor || node.UR_Colorway_BaseColor == 'centric:') {
cn.changeAttribute("Active", "boolean", false);
jp.warning("基础颜色不能为空");
return;
}
if (!node.UR_Colorway_IsEnable) {
cn.changeAttribute("Active", "boolean", false);
jp.warning("是否启用应该为true");
return;
}
var IPSection = styleAttNode.UR_StyleAttributes_IPSection.replace("UR_enum_IPSection:","")
if (!IPSection) {
cn.changeAttribute("Active", "boolean", false);
jp.warning("IP款不能为空");
return;
}
var IPElement = styleAttNode.UR_StyleAttributes_IPElement.replace("UR_enum_IPElement:","")
if (IPSection!="00" && !IPElement) {
cn.changeAttribute("Active", "boolean", false);
jp.warning("当IP款为非“非IP款”时,IP元素不能为空");
return;
}
var MiddleCategoryType = styleAttNode.UR_StyleAttributes_MiddleCategoryType.replace("UR_enum_ProductMiddleType:","")
if (!MiddleCategoryType) {
cn.changeAttribute("Active", "boolean", false);
jp.warning("中品类不能为空");
return;
}
var BasicUnit = styleAttNode.UR_StyleAttributes_BasicUnit.replace("UR_enum_Unit:","")
if (!BasicUnit) {
cn.changeAttribute("Active", "boolean", false);
jp.warning("基本单位不能为空");
return;
}
// var FabricProperties = styleAttNode.UR_StyleAttributes_FabricProperties.replace("UR_enum_ProductMiddleType:","") // 缺少字段
// if (!MiddleCategoryType) {
// cn.changeAttribute("Active", "boolean", false);
// jp.warning("面料特性不能为空");
// return;
// }
// var Silhouette = styleAttNode.UR_StyleAttributes_Silhouette.replace("UR_enum_ProfileType:","")
// if (!Silhouette) {
// cn.changeAttribute("Active", "boolean", false);
// jp.warning("子品类不能为空");
// return;
// }
//暂时关闭感审判断
// var GSJG = styleAttNode.UR_StyleAttributes_GSJG.replace("UR_enum_GSJG:","")
// if (!GSJG || GSJG == "not_pass") {
// cn.changeAttribute("Active", "boolean", false);
// jp.warning("感审结果不能为空且不能为“不通过”");
// return;
// }
}else{
//取消勾选
if (node.C8_CW_DSDepth && node.C8_CW_DSDepth > 0) {
cn.changeAttribute("Active", "boolean", true);
jp.warning("电商组货深度>0,不能取消");
return;
}
if (node.C8_CW_GNDepth && node.C8_CW_GNDepth > 0) {
cn.changeAttribute("Active", "boolean", true);
//查询skc被组货在哪个月份
var search = new Search();
var q = search.getQuery();
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MarketingCollection")
.RefAttr("C8_MCP_SKC", xml.OP_EQUALS, node.$URL, "Child:Products");
var res = search.execute({sync: true});
var results = res.getResultNodes();
if(results.length > 0){
var monthName ="";
for(var i=0; i<results.length; i++){
monthName = monthName + results[i].$Name + "、";
}
if(monthName.length > 0){
monthName = monthName.substring(0, monthName.length-2);
}
jp.alert("国内组货深度>0,不能取消! 查询到该SKC被组货到:‘" + monthName + "’中,请取消对应月份中的该SKC组货");
}else{
jp.alert("国内组货深度>0,不能取消! 未查询到对应组货SKC,请联系管理员处理数据将国内组货深度置0");
}
return;
}
if (node.C8_CW_HWDepth && node.C8_CW_HWDepth > 0) {
cn.changeAttribute("Active", "boolean", true);
jp.warning("海外组货深度>0,不能取消");
return;
}
if (styleAttNode.UR_StyleAttributes_hasOrder) {
cn.changeAttribute("Active", "boolean", true);
jp.warning("该款的是否下单为true,不能取消");
return;
}
}
//字段是否可编辑变更
ac.m_writer.changeNode(node.$URL).changeAttributeFlag("UR_Colorway_BaseColor", xml.ATTR_FLAG_NOEDIT, ac.newValue, true);//基础颜色
ac.m_writer.changeNode(node.$URL).changeAttributeFlag("UR_Colorway_IsEnable", xml.ATTR_FLAG_NOEDIT, ac.newValue, true);//是否启用
ac.m_writer.changeNode(styleNode.Attributes).changeAttributeFlag("UR_StyleAttributes_MiddleCategoryType", xml.ATTR_FLAG_NOEDIT, ac.newValue, true);//中品类
// ac.m_writer.changeNode(styleNode.Attributes).changeAttributeFlag("UR_StyleAttributes_FabricProperties", xml.ATTR_FLAG_NOEDIT, ac.newValue, true);//面料特性 缺
ac.m_writer.changeNode(styleNode.Attributes).changeAttributeFlag("UR_StyleAttributes_Silhouette", xml.ATTR_FLAG_NOEDIT, ac.newValue, true);//子品类
ac.bRefreshNode = true;
return true;
});
//修改组货单价时,自动带入price到MCP上
api.watchAttribute("StyleAttributes","UR_StyleAttributes_GroupCarPrice", function (ac, cn, node, id){
var mcpURL = ac.refNodeId;
if(mcpURL && mcpURL!="centric:") {
var mcpNode = getNode(ac, mcpURL);
if (mcpNode && mcpNode.$Type == "MCProduct") {
var newPrice = getEnumValue(ac.newValue);
if (!newPrice || newPrice === "") {
newPrice = "0";
}
var intPrice = parseInt(newPrice);
ac.m_writer.changeNode(mcpURL).changeAttribute("C8_MCP_Price", "double", intPrice);
var styleNode = getNode(ac, node.__Parent__);
var colorways = styleNode.ActiveColorways;
for (var i = 0; i < colorways.length; i++) {
var colorwayNode = getNode(ac, colorways[i]);
if (colorwayNode.C8_CW_CompleteTime != 0) {
ac.m_writer.changeNode(colorwayNode.$URL).changeAttribute("C8_CW_DSChangeTag", "boolean", true);
ac.m_writer.changeNode(colorwayNode.$URL).changeAttribute("C8_CW_HWChangeTag", "boolean", true);
var mentions = getGroup(ac, "海外买手");
var mentions1 = getGroup(ac, "电商买手");
mentions.concat(mentions1);
var subject = "测试:组货单价修改消息";//主题
var comments = styleNode.$Name + "组货单价已修改";//消息文本
var docContainer = styleNode.DocumentsAndComments;
createConversation(ac, docContainer, subject, mentions, comments);
//发送邮件
SendMailToRole(ac,"海外买手",subject,comments,"");
SendMailToRole(ac,"电商买手",subject,comments,"");
}
}
}
}
ac.bRefreshNode = true;
});
//国内组货确认
//force=强制确认, checkOnly=检核
function ConfirmGuoNeiZH(ac,force,checkOnly,flag){
var weekURL = ac.m_urlParent;
printLog("========开始执行时间========");
var weekNode = getNode(ac,weekURL);
var isLastWeek = weekNode.UR_ML_IsLastOrder;
var monthNode = getNode(ac,weekNode.PrimaryCollection);
var orderType = getEnumValue(monthNode.C8_MC_MonthOrderAattribute);
if(orderType && (orderType==="E" || orderType==="F" || orderType==="T") && !checkOnly){
//如果是应急单,则组货确认时,不做检查,等同于强制确认
force = true;
}
//1.获取规则表
var ruleTableNode = searchRuleTable(monthNode);
//1+.获取品类管控规则表 Agnes 20240223 品类管控变更
var controlRuleKeys = searchControlRules(monthNode);
//2.获取目标表
var targetTableNode = searchTargetTable(weekNode);
printLog("获取规则表,目标表完成");
//3.获取计算skc数据表所需要的数据信息
var resultURLs = weekNode.LookProducts;//ac.widget.getQueryResult().store._allResultUrls;
var skcsData = getAndGroupSKCData(ac,resultURLs, controlRuleKeys);
//错误信息声明
var errMsg = [];
var checkErrors = skcsData.errors;
if(checkErrors && checkErrors.length>0){
errMsg.push(checkErrors.join("</BR>"));
}
var checkPriceAndDeepErrors = skcsData.finalConfirmError;
if(!force && checkPriceAndDeepErrors && checkPriceAndDeepErrors.length>0){
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string",checkPriceAndDeepErrors.join("</BR>"));
jp.alert("发现如下错误信息:</BR>"+checkPriceAndDeepErrors.join("</BR>"));
return true;
}
var orderType = getEnumValue(monthNode.C8_MC_MonthOrderAattribute);
if(orderType && (orderType==="E" || orderType==="F" || orderType==="T")){
//如果是应急单,则组货确认时,不做检查,等同于强制确认
force = true;
}
//4常销款、基本款SKC个数校验,价格带校验 规则表1#和9#
var checkTypes = ["R","B"];
//(errMsg,checkTypes,skcsData,ruleTableNode,weekNode,monthNode)
checkSKCCountAndPriceList(errMsg,checkTypes,skcsData,ruleTableNode,weekNode,monthNode);
//5按照周目标获取组货宽度、组货金额等目标值, 确认是否需要按照款式宽度校验
//5.1.检查主题款look数量和skc数量
var modsObj = skcsData.S.mods;
var modList = Object.keys(modsObj);
//表1#=SKC标准及LOOK套数的标准值&组货系数
checkSKCLookCount(errMsg,true,modList,modsObj,skcsData,ruleTableNode,weekNode,monthNode);
//5.2按照周目标检核所有品类的组货情况
Object.keys(skcsData.categoryKey).forEach(function(key){
var weekTargetNode = targetTableNode.weekTarget[key];
if(!weekTargetNode){
errMsg.push("找不到" + key + "对应目标!");
}else{
var monthTargetNode = weekTargetNode.monthTarget;
var monthTargetDisplay = getMonthTargetKey(monthTargetNode,true,false);//非电商
if(isLastWeek){
monthTargetDisplay = "最后一单:"+monthTargetDisplay;
}
//校验总宽度
var totalSkcCount = skcsData.skcIds.length;
var mcNode = targetTableNode.mcTarget[key];
var mcSKCUpper = mcNode.C8_MC_ExcessSKC;
var mcSKCBottom = mcNode.C8_MC_ReduceSKC;
//校验宽度:大于月总SKC上限
if(totalSkcCount>mcSKCUpper){
errMsg.push("本单的实际组货宽度为【"+totalSkcCount+"】,【大于】月目标的剩余组货宽度上限:【"+mcSKCUpper+"】");
}
//组货宽度
var weekSKCTarget = weekTargetNode.C8_MCMC_GroupGoodsSKC;//周 组货宽度目标
var weekSKCUpperTarget = weekTargetNode.C8_MCMC_ExcessSKCRemaining;//周 可超宽度剩余C8_MCMC_ExcessSKCRemaining
var weekSKCDepthTarget = weekSKCTarget+weekSKCUpperTarget;
var monthSKCDepthUpper = monthTargetNode.C8_MCM_ExcessSKC;
var monthSKCDepthButtom = monthTargetNode.C8_MCM_ReduceSKC;
var catSkcCount = skcsData.prodCatSkcs[key.substring(0,3)].skcs; //组货内skc数量
//校验宽度:大于月品类组货SKC上限
if(catSkcCount>monthSKCDepthUpper){
errMsg.push(monthTargetDisplay+"的实际组货宽度为【"+catSkcCount+"】,【大于】月品类目标的剩余组货宽度上限:【"+monthSKCDepthUpper+"】");
}
if(skcsData.categoryKey[key]){//&& weekSKCDepthTarget>0 取消判断目标深度
var catKeyNode = skcsData.categoryKey[key];
var skcCount = catKeyNode.skcs; //组货内skc数量
var styleCount = catKeyNode.styles; //组货内款式数量
var finalQty = catKeyNode.finalQty; //组货深度
var finalDStyleAmout = catKeyNode.finalDStyleAmout;
var finalAmount = catKeyNode.finalAmount; //组货金额
var skcAvgPrice = catKeyNode.AvgPrice; //组货平均价
var categorySKCList = catKeyNode.list;
// 周 组货金额
var weekGroupGoodsAmount = weekTargetNode.C8_MCMC_GroupGoodsAmount //周企划金额
var isLastOrder = weekTargetNode.UR_MCMC_IsLastOrder //是否月末单号
var monthFinishAmount = monthTargetNode.C8_MCM_MonthGroupGoodsAmount;//月已组货金额
var monthPlanAmount = monthTargetNode.C8_MCM_PlannedAmount;//月企划金额
var weekGroupGoodsAmountFinish = weekTargetNode.C8_MCMC_GroupGoodsAmountFinish;//周已组货金额
//组货金额 (月)
var monthCanOverseedAmout = monthTargetNode.C8_MCM_ExcessAmountRemaining; //月可超金额剩余
var monthExcessAmount = monthTargetNode.C8_MCM_ExcessAmount; //月可超总金额
var monthUseGroupGoodsAmount = 0; //月已使用企划金额
var weekAmount = weekTargetNode.C8_MCMC_GroupGoodsAmount; //周目标组货金额
var monthCanDeduceAmount = monthTargetNode.C8_MCM_ReduceAmountRemaining; //月可减金额剩余
var monthReduceAmount = monthTargetNode.C8_MCM_ReduceAmount; //月可减总金额
//组货金额上限= 月企划总金额+月可超金额-月已组货金额
var weekFinalCheckAmountUpper = monthPlanAmount+monthCanOverseedAmout-monthFinishAmount;
//组货金额下限=月企划总金额-月可减金额-月已组货金额
var weekFinalCheckAmountLower = monthPlanAmount-monthCanDeduceAmount-monthFinishAmount;
var nowWeekNode = getNode(ac,weekTargetNode.C8_MCMC_Week);
var nowWeek = getEnumValue(nowWeekNode.C8_ML_Week);
var colors = monthTargetNode.Colors;
//前面单号的企划总金额
var preOrder = 0;
//前面单号的已用总金额
var preUseOrder = 0;
for(var i=0;i<colors.length;i++){
if(colors[i] == weekTargetNode.$URL){//循环为周自己本身则要跳出循环
continue;
}
var mcMaterialColorNode = getNode(ac,colors[i]);
var marketingLookNode = getNode(ac,mcMaterialColorNode.C8_MCMC_Week);
//如果是月末 则要判断前面单号是否都检核
if(isLastWeek){
if(marketingLookNode.C8_ML_Status != "UR_ZHStatus:Lock" && marketingLookNode.C8_ML_Status != "UR_ZHStatus:Complete"){
jp.alert(monthTargetDisplay+"检核月末单号时,必须前面单号都已经检核完成!");
return true;
}
}
if((marketingLookNode.C8_ML_Status == "UR_ZHStatus:Lock") || (marketingLookNode.C8_ML_Status == "UR_ZHStatus:Complete")){
preOrder = preOrder + mcMaterialColorNode.C8_MCMC_GroupGoodsAmount;
preUseOrder = preUseOrder + mcMaterialColorNode.C8_MCMC_GroupGoodsAmountFinish;
}
}
//上限
var upAmout = weekGroupGoodsAmount + preOrder - preUseOrder + monthExcessAmount + weekTargetNode.C8_MCMC_DAmountFinish; //上限 当前周企划金额+已使用的周企划金额 - 已实际组货金额+上限
//非最后一单下限
var reduceAmout = weekGroupGoodsAmount + preOrder - preUseOrder - monthReduceAmount; //下限 当前周企划金额+已使用的周企划金额 - 已实际组货金额-下限
//最后一单下限
var lastOrderAmountLower = weekGroupGoodsAmount + preOrder - preUseOrder;//当前单企划的+已组货的企划的-已组的实际金额
//月可超剩余
monthCanOverseedAmout = weekTargetNode.C8_MCMC_GroupGoodsAmount - weekTargetNode.C8_MCMC_GroupGoodsAmountFinish + monthTargetNode.C8_MCM_ReduceAmount;
//月可减剩余
monthReduceAmount = monthTargetNode.C8_MCM_ReduceAmount - (weekTargetNode.C8_MCMC_GroupGoodsAmount - weekTargetNode.C8_MCMC_GroupGoodsAmountFinish);
if(weekGroupGoodsAmountFinish != 0) {
if (isLastWeek) {//月末单
if (lastOrderAmountLower <= weekGroupGoodsAmountFinish && weekGroupGoodsAmountFinish <= upAmout) {
printLog(monthTargetDisplay + "的月末单号条件满足!");
ac.m_writer.changeNode(monthTargetNode.$URL).changeAttribute("C8_MCM_MonthGroupGoodsAmount", "double", monthFinishAmount);//月已组货金额
ac.m_writer.changeNode(monthTargetNode.$URL).changeAttribute("C8_MCM_ExcessAmountRemaining", "double", monthCanOverseedAmout);//月可超剩余
ac.m_writer.changeNode(monthTargetNode.$URL).changeAttribute("C8_MCM_ReduceAmountRemaining", "double", monthReduceAmount);//月可减剩余
} else {
errMsg.push(monthTargetDisplay + "的单号组货金额【" + weekGroupGoodsAmountFinish + "】,【不符合】周目标滚动的组货金额上下限:【" + lastOrderAmountLower + "-" + upAmout + "】");
}
////校验宽度:小于月品类组货SKC下限
if(catSkcCount<monthSKCDepthButtom){
errMsg.push(monthTargetDisplay+"的实际组货宽度为【"+catSkcCount+"】,【小于】月品类目标的剩余组货宽度下限:【"+monthSKCDepthButtom+"】");
}
//校验宽度:小于月总SKC下限
if(totalSkcCount<mcSKCBottom){
errMsg.push("本单的实际组货宽度为【"+totalSkcCount+"】,【小于】月目标的剩余组货宽度下限:【"+mcSKCBottom+"】");
}
} else {
if (reduceAmout <= weekGroupGoodsAmountFinish && weekGroupGoodsAmountFinish <= upAmout) {
printLog(monthTargetDisplay + "的月末单号条件满足!");
ac.m_writer.changeNode(monthTargetNode.$URL).changeAttribute("C8_MCM_MonthGroupGoodsAmount", "double", monthFinishAmount);//月已组货金额
ac.m_writer.changeNode(monthTargetNode.$URL).changeAttribute("C8_MCM_ExcessAmountRemaining", "double", monthCanOverseedAmout);//月可超剩余
ac.m_writer.changeNode(monthTargetNode.$URL).changeAttribute("C8_MCM_ReduceAmountRemaining", "double", monthReduceAmount);//月可减剩余
} else {
errMsg.push(monthTargetDisplay + "的单号组货金额【" + weekGroupGoodsAmountFinish + "】,【不符合】周目标滚动的组货金额上下限:【" + reduceAmout + "-" + upAmout + "】");
}
}
}
//组货平均价
var weekAvgPriceTargetLower = monthTargetNode.C8_MCM_AvgPriceLow;
var weekAvgPriceTargetUpper = monthTargetNode.C8_MCM_AvgPriceHigh;
//只检查常销款和基本款, 主题款的校验在上一步执行
if(!key.startsWith("S")){
//平均价校验
if(skcAvgPrice<weekAvgPriceTargetLower || skcAvgPrice>weekAvgPriceTargetUpper){
errMsg.push(monthTargetDisplay+"的组货平均价【"+skcAvgPrice+"】,【不符合】月目标的组货平均价上下限:【"+weekAvgPriceTargetLower+"-"+weekAvgPriceTargetUpper+"】");
}
}
// if(isLastWeek){
////校验金额
// if(finalAmount>upAmout || finalAmount<reduceAmout){
////errMsg.push("月最后一单:"+monthTargetDisplay+"的实际组货金额为【"+finalAmount+"】,【不符合】月组货金额目标的可减后总金额【"+weekFinalCheckAmountLower+"】和月可超总金额:【"+weekFinalCheckAmountUpper+"】的区间要求");
// errMsg.push("月最后一单:"+monthTargetDisplay+"的实际组货金额为【"+finalAmount+"】,【不符合】月组货金额目标的可减后总金额【"+reduceAmout+"】和月可超总金额:【"+upAmout+"】的区间要求");
// }
// }else{
////校验金额
// if(finalAmount>weekFinalCheckAmountUpper){
// errMsg.push("非最后一单:"+monthTargetDisplay+"的实际组货金额为【"+finalAmount+"】,【超出】月组货金额目标加可超金额总和:【"+weekFinalCheckAmountUpper+"】的要求");
// }
// }
/* 改到确认通过时写入 20240321
//将结果写入SKC上,国内组货深度,组货单号
categorySKCList.forEach(function(skcId){
var skcNode = skcsData.list[skcId];
ac.m_writer.changeNode(skcId).changeAttribute("C8_CW_GNDepth","integer",skcNode.finalQty)
.changeAttribute("C8_CW_GNSelected","boolean",true)
.changeAttribute("UR_CW_GroupBillNo","ref",weekURL);
//更新SKC上的确认唯一码UR_Colorway_OKCode:如果是计划单用UR_Colorway_PLMUniqueValue,否则用UR_Colorway_OriginalUniqueCode
if(orderType == "N"){//计划单
ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_PLMUniqueValue",true);
}else{
ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_OriginalUniqueCode",true);
}
}); */
//写入实际组货金额、宽度、平均价等信息
var weekTargetURL = weekTargetNode.$URL;
//将结果写入到周目标上 -- 临时,后续需要改为从调整深度上汇总并写入到目标上,
ac.m_writer.changeNode(weekTargetURL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish","double",finalAmount)//组货金额
.changeAttribute("C8_MCMC_DAmountFinish","double",finalDStyleAmout)//D款大片款超出金额
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish","double",skcAvgPrice)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish","integer",styleCount)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish","integer",finalQty);//组货深度
}else{
if(weekSKCDepthTarget>0){
errMsg.push(monthTargetDisplay+"的组货目标存在,但是没有找到任何对应的实际组货SKC!周组货宽度目标【"+weekSKCDepthTarget+"】");
}
}
}
});
//Agnes 更新弱管控品类目标
Object.keys(targetTableNode.weakWeekKey).forEach(function(key){
var weekTargetNode = targetTableNode.weakWeekTarget[key];
var monthTargetNode = weekTargetNode.monthTarget;
var weekSKCTarget = weekTargetNode.C8_MCMC_GroupGoodsSKC;//周 组货宽度目标
var weekSKCUpperTarget = weekTargetNode.C8_MCMC_ExcessSKCRemaining;//周 可超宽度剩余C8_MCMC_ExcessSKCRemaining
var weekSKCDepthTarget = weekSKCTarget+weekSKCUpperTarget;
if(skcsData.weakCategoryKey[key]&& weekSKCDepthTarget>0) {
var catKeyNode = skcsData.weakCategoryKey[key];
var skcCount = catKeyNode.skcs; //组货内skc数量
var styleCount = catKeyNode.styles; //组货内款式数量
var finalQty = catKeyNode.finalQty; //组货深度
var finalDStyleAmout = catKeyNode.finalDStyleAmout;
var finalAmount = catKeyNode.finalAmount; //组货金额
var skcAvgPrice = catKeyNode.AvgPrice; //组货平均价
//写入实际组货金额、宽度、平均价等信息
var weekTargetURL = weekTargetNode.$URL;
ac.m_writer.changeNode(weekTargetURL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish", "double", finalAmount)//组货金额
.changeAttribute("C8_MCMC_DAmountFinish", "double", finalDStyleAmout)//D款大片款超出金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish", "integer", skcCount)//组货宽度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish", "double", skcAvgPrice)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish", "integer", styleCount)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish", "integer", finalQty);//组货深度
}
});
//更新单号组货完成状态
if(errMsg.length==0 || force){
if(!checkOnly){
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Complete");//组货结果状态
//确认时校验通过后更新周组货skc (检核时不写入,以便能重复校验) 20230315
Object.keys(targetTableNode.weekTarget).forEach(function(key){
var weekTargetNode = targetTableNode.weekTarget[key];
var weekTargetURL = weekTargetNode.$URL;
var catKeyNode = skcsData.categoryKey[key];
if(catKeyNode && catKeyNode.skcs > 0){
var skcCount = catKeyNode.skcs;
ac.m_writer.changeNode(weekTargetURL)
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish","integer",skcCount);//组货宽度
}
});
//将结果写入SKC上,国内组货深度,组货单号
Object.keys(skcsData.categoryKey).forEach(function(key){
var catKeyNode = skcsData.categoryKey[key];
var categorySKCList = catKeyNode.list;
var categorySKCList = catKeyNode.list;
if(categorySKCList != undefined) {
categorySKCList.forEach(function (skcId) {
var skcNode = skcsData.list[skcId];
ac.m_writer.changeNode(skcId).changeAttribute("C8_CW_GNDepth", "integer", skcNode.finalQty)
.changeAttribute("C8_CW_GNSelected", "boolean", true)
.changeAttribute("UR_CW_GroupBillNo", "ref", weekURL);
//更新SKC上的确认唯一码UR_Colorway_OKCode:如果是计划单用UR_Colorway_PLMUniqueValue,否则用UR_Colorway_OriginalUniqueCode
// if(orderType == "N"){//计划单
// ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_PLMUniqueValue",true);
// }else{
// ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_OriginalUniqueCode",true);
// }
//0521 不分渠道 都取UR_Colorway_PLMUniqueValue
var urSkcNode = getNode(ac, skcId);
if (urSkcNode.UR_Colorway_OKCode == "") {
ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode", "UR_Colorway_PLMUniqueValue", true);
}
});
}
});
}
//ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string","");
if(errMsg.length>0){
var errorMessage = errMsg.join("</BR>");
//如果长度超过1000,则截取1000个字符,避免过长保存出错
if(errorMessage.length > 1000){
errorMessage = errorMessage.substring(0,1000);
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string",errorMessage);
}else{
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string","");
}
var successMsg = "";
if(checkOnly){
successMsg = "数据检核通过!请点击【组货确认】以完成组货!";
}else{
successMsg = "组货确认完成!"
flag = true;
}
jp.alert(successMsg);
}else{
if(errMsg.length>0){
var errorMessage = errMsg.join("</BR>");
//如果长度超过1000,则截取1000个字符,避免过长保存出错
if(errorMessage.length > 1000){
errorMessage = errorMessage.substring(0,1000);
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string",errorMessage);
}else{
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string","");
}
jp.alert("执行校验出现错误,请检查:</BR>"+errMsg.join("</BR>"));
}
return flag;
}
//国内组货确认
//force=强制确认, checkOnly=检核
function ConfirmGuoNeiZHV2(ac,force,checkOnly,flag,isDesignerStyle){
var currentNode = routerStore.locationNode;
var weekURL = ac.m_urlParent;
printLog("========开始执行时间========");
var weekNode = getNode(ac,weekURL);
var isLastWeek = weekNode.UR_ML_IsLastOrder;
var monthNode = getNode(ac,weekNode.PrimaryCollection);
var orderType = getEnumValue(monthNode.C8_MC_MonthOrderAattribute);
if(orderType && (orderType==="E" || orderType==="F" || orderType==="T") && !checkOnly){
//如果是应急单,则组货确认时,不做检查,等同于强制确认
force = true;
}
//1.获取规则表
var ruleTableNode = searchRuleTable(monthNode);
//1+.获取品类管控规则表 Agnes 20240223 品类管控变更
var controlRuleKeys = searchControlRules(monthNode);
//2.获取目标表
var targetTableNode = searchTargetTable(weekNode);
printLog("获取规则表,目标表完成");
//3.获取计算skc数据表所需要的数据信息
var resultURLs = weekNode.LookProducts;//ac.widget.getQueryResult().store._allResultUrls;
var skcsData = getAndGroupSKCDataV2(ac,resultURLs, controlRuleKeys);
//错误信息声明
var errMsg = [];
var checkErrors = skcsData.errors;
if(checkErrors && checkErrors.length>0){
errMsg.push(checkErrors.join("</BR>"));
}
var checkPriceAndDeepErrors = skcsData.finalConfirmError;
if(!force && checkPriceAndDeepErrors && checkPriceAndDeepErrors.length>0){
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string",checkPriceAndDeepErrors.join("</BR>"));
jp.alert("发现如下错误信息:</BR>"+checkPriceAndDeepErrors.join("</BR>"));
return true;
}
//20240418 新增重置周组货结果
Object.keys(targetTableNode.weekKey).forEach(function(key){
var weekTargetNode = targetTableNode.weekTarget[key];
//写入实际组货金额、宽度、平均价等信息
var weekTargetURL = weekTargetNode.$URL;
//将结果写入到周目标上 -- 临时,后续需要改为从调整深度上汇总并写入到目标上,
ac.m_writer.changeNode(weekTargetURL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish","double",0)//组货金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish","integer",0)//组货宽度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish","double",0)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish","integer",0)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish","integer",0);//组货深度
});
Object.keys(targetTableNode.weakWeekKey).forEach(function(key){
var weekTargetNode = targetTableNode.weakWeekTarget[key];
//写入实际组货金额、宽度、平均价等信息
var weekTargetURL = weekTargetNode.$URL;
//将结果写入到周目标上 -- 临时,后续需要改为从调整深度上汇总并写入到目标上,
ac.m_writer.changeNode(weekTargetURL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish","double",0)//组货金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish","integer",0)//组货宽度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish","double",0)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish","integer",0)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish","integer",0);//组货深度
});
var targetSkcs = targetTableNode.weekSkcs; //周目标总skc
var targetAmount = targetTableNode.weekAmount; //周目标总金额
var zhSkcs = skcsData.skcIds.length; //实际周组货skc宽度
var zhAmount = skcsData.amount; //周实际组货金额
var weekSkcsFloatUpper = 1;
var weekSkcsFloatLower = 1;
var monthSkcsFloatUpper = 1;
var monthSkcsFloatLower = 1;
var weekAmountFloatUpper = 1;
var weekAmountFloatLower = 1;
var monthAmountFloatUpper = 1;
var monthAmountFloatLower = 1;
var monthAvgPriceFloatUpper = 1;
var monthAvgPriceFloatLower = 1;
//获取规则表7:组货金额、宽度、平均单价上下限检核条件
var ruleTable7 = filterRuleTable(ruleTableNode, "7", false, null);
ruleTable7.forEach(function(ruleNode){
if(ruleNode.UR_SDS_Dimension == "UR_enum_Dimension:组货金额"){
weekAmountFloatUpper = ruleNode.UR_SDS_BillUpperRate;
weekAmountFloatLower = ruleNode.UR_SDS_BillLowerRate;
monthAmountFloatUpper = ruleNode.UR_SDS_MonthUpperRate;
monthAmountFloatLower = ruleNode.UR_SDS_MonthLowerRate;
}else if(ruleNode.UR_SDS_Dimension == "UR_enum_Dimension:组货宽度"){
weekSkcsFloatUpper = ruleNode.UR_SDS_BillUpperRate;
weekSkcsFloatLower = ruleNode.UR_SDS_BillLowerRate;
monthSkcsFloatUpper = ruleNode.UR_SDS_MonthUpperRate;
monthSkcsFloatLower = ruleNode.UR_SDS_MonthLowerRate;
}else if(ruleNode.UR_SDS_Dimension == "UR_enum_Dimension:平均单价"){
monthAvgPriceFloatUpper = ruleNode.UR_SDS_MonthUpperRate;
monthAvgPriceFloatLower = ruleNode.UR_SDS_MonthLowerRate;
}
});
//设计师系列前三单不管控,最后一单卡控月度总金额
if(isDesignerStyle){
var monthGroupedAmount = targetTableNode.monthGroupedAmount; //月度已组金额(汇总非最后一单的所有单已组金额)
var monthPlannedAmount = targetTableNode.monthPlanAmount; //月企划总金额
Object.keys(skcsData.categoryKey).forEach(function(key){
var weekTargetNode = targetTableNode.weekTarget[key];
if(!weekTargetNode){
var commodityName = locale.getEnumName("UR_enum_CommodityType:"+key.substring(0,1))
var catEnum = (key.length>=3 ? key.substring(1,3) : "");
var catName = locale.getEnumName("UR_enum_ProductLargeType:"+catEnum);
var midCatEnum = (key.length>=5 ? key.substring(3,5) : "");
var midCatName = locale.getEnumName("UR_enum_ProductMiddleType:"+midCatEnum);
var subCatEnum = (key.length>=7 ? key.substring(5,7) : "");
var subCatName = locale.getEnumName("UR_enum_ProfileType:"+subCatEnum);
var keyDisplay = "【"+commodityName+"】【"+catName+"】【"+midCatName+"】【"+subCatName+"】";
errMsg.push("找不到" + keyDisplay + "对应目标!");
}else{
var monthTargetNode = weekTargetNode.monthTarget;
var monthTargetDisplay = getMonthTargetKey(monthTargetNode,true,false);//非电商
if(isLastWeek){
monthTargetDisplay = "最后一单:"+monthTargetDisplay;
}
if(skcsData.categoryKey[key]){
var catKeyNode = skcsData.categoryKey[key];
var catSkcCount = catKeyNode.skcs; //组货内skc数量
var styleCount = catKeyNode.styles; //组货内款式数量
var finalQty = catKeyNode.finalQty; //组货深度
var finalDStyleAmout = catKeyNode.finalDStyleAmout;
var finalAmount = catKeyNode.finalAmount; //组货金额
var skcAvgPrice = catKeyNode.AvgPrice; //组货平均价
//写入实际组货金额、宽度、平均价等信息
var weekTargetURL = weekTargetNode.$URL;
//将结果写入到周目标上 -- 临时,后续需要改为从调整深度上汇总并写入到目标上,
ac.m_writer.changeNode(weekTargetURL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish","double",finalAmount)//组货金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish","integer",catSkcCount)//组货宽度
.changeAttribute("C8_MCMC_DAmountFinish","double",finalDStyleAmout)//D款大片款超出金额
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish","double",skcAvgPrice)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish","integer",styleCount)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish","integer",finalQty);//组货深度
}else{
if(weekSKCDepthTarget>0){
errMsg.push(monthTargetDisplay+"的组货目标存在,但是没有找到任何对应的实际组货SKC!周组货宽度目标【"+weekSKCDepthTarget+"】");
}
}
}
});
if(isLastWeek){//20240408 设计单最后一单校验月总金额 Agnes
var monthTargetAmountUpper = Math.round(monthPlannedAmount*monthAmountFloatUpper);
var monthTargetAmountLower = Math.round(monthPlannedAmount*monthAmountFloatLower);
//组货金额=本单金额+月品类目标已组金额
var monthZhAmount = zhAmount + monthGroupedAmount;
if(monthZhAmount < monthTargetAmountLower || monthZhAmount > monthTargetAmountUpper ){
errMsg.push("设计师系列月度组货金额" + monthZhAmount + "不在月目标金额范围【" + monthTargetAmountLower + "-" + monthTargetAmountUpper + "】内!");
}else{
printLog("设计师系列的月末单号组货金额条件满足!");
//ac.m_writer.changeNode(monthTargetNode.$URL).changeAttribute("C8_MCM_MonthGroupGoodsAmount", "double", monthZhAmount);//月已组货金额 实时表达式计算,无需写入
}
}
}else{
//4常销款、基本款SKC个数校验,价格带校验 规则表1#和9#
var checkTypes = ["R","B"];
//(errMsg,checkTypes,skcsData,ruleTableNode,weekNode,monthNode)
checkSKCCountAndPriceList(errMsg,checkTypes,skcsData,ruleTableNode,weekNode,monthNode);
//5按照周目标获取组货宽度、组货金额等目标值, 确认是否需要按照款式宽度校验
//5.1.检查主题款look数量和skc数量
var modsObj = skcsData.S.mods;
var modList = Object.keys(modsObj);
//表1#=SKC标准及LOOK套数的标准值&组货系数
checkSKCLookCount(errMsg,true,modList,modsObj,skcsData,ruleTableNode,weekNode,monthNode);
//非最后一单校验单的总金额的95%-105%,单的总宽度的95%-105%
if(!isLastWeek){
var targetSkcsUpper = Math.round(targetSkcs*weekSkcsFloatUpper);
var targetSkcsLower = Math.round(targetSkcs*weekSkcsFloatLower);
var tagetAmountUpper = Math.round(targetAmount*weekAmountFloatUpper);
var targetAmountLower = Math.round(targetAmount*weekAmountFloatLower);
if(zhSkcs < targetSkcsLower || zhSkcs > targetSkcsUpper ){
errMsg.push("周组货SKC宽度" + zhSkcs + "不在周目标SKC宽度范围【" + targetSkcsLower + "-" + targetSkcsUpper + "】内!");
}
if(zhAmount < targetAmountLower || zhAmount > tagetAmountUpper){
errMsg.push("周组货金额" + zhAmount + "不在周目标金额范围【" + targetAmountLower + "-" + tagetAmountUpper + "】内!");
}
}else{//循环目标来校验各个品类目标金额、skc宽度、平均单价是否达成
Object.keys(targetTableNode.weekTarget).forEach(function(key){
var weekTargetNode = targetTableNode.weekTarget[key];
var monthTargetNode = weekTargetNode.monthTarget;
var monthTargetDisplay = getMonthTargetKey(monthTargetNode,true,false);//非电商
monthTargetDisplay = "最后一单:"+ monthTargetDisplay;
//20240407 月企划/已组金额、企划/已组skc宽度、企划平均单价
var monthGroupedSkcs = monthTargetNode.C8_MCM_MonthGroupGoodsSKCNotLast;//月前三单已组,包含未完成单
var monthGroupedAmount = monthTargetNode.C8_MCM_MonthGroupGoodsAmountNotLast;//月前三单已组,包含未完成单
var monthPlannedSkcs = monthTargetNode.C8_MCM_PlannedSKC;
var monthPlannedAmount = monthTargetNode.C8_MCM_PlannedAmount;
var monthTargetSkcsUpper = Math.round(monthPlannedSkcs*monthSkcsFloatUpper);
var monthTargetSkcsLower = Math.round(monthPlannedSkcs*monthSkcsFloatLower);
var monthTargetAmountUpper = Math.round(monthPlannedAmount*monthAmountFloatUpper);
var monthTargetAmountLower = Math.round(monthPlannedAmount*monthAmountFloatLower);
var monthTargetPriceUpper = Math.round(monthTargetNode.C8_MCM_PlannedAvgPrice*monthAvgPriceFloatUpper);
var monthTargetPriceLower = Math.round(monthTargetNode.C8_MCM_PlannedAvgPrice*monthAvgPriceFloatLower);
//20240407 最后一单校验品类/中品类月组货skc宽度、金额、平均单价 Agnes
var catSkcCount = 0;
var finalAmount = 0;
var finalQty = 0;
if(skcsData.categoryKey[key]) {//&& weekSKCDepthTarget>0 取消判断目标深度
var catKeyNode = skcsData.categoryKey[key];
catSkcCount = catKeyNode.skcs; //组货内skc数量
finalAmount = catKeyNode.finalAmount; //组货金额
finalQty = catKeyNode.finalQty; //组货深度
}
//月品类/中品类组货skc宽度=本单品类skc宽度+月品类目标已组skc
var monthZhSkcs = catSkcCount + monthGroupedSkcs;
if(monthZhSkcs < monthTargetSkcsLower || monthZhSkcs > monthTargetSkcsUpper ){
errMsg.push(monthTargetDisplay + "组货SKC宽度" + monthZhSkcs + "不在月目标SKC宽度范围【" + monthTargetSkcsLower + "-" + monthTargetSkcsUpper + "】内!");
}else{
printLog(monthTargetDisplay + "的月末单号组货宽度条件满足!");
//ac.m_writer.changeNode(monthTargetNode.$URL).changeAttribute("C8_MCM_MonthGroupGoodsAmount", "double", monthFinishAmount);//月已组货金额 实时表达式计算,无需写入
}
//组货金额=本单金额+月品类目标已组金额
var monthZhAmount = finalAmount + monthGroupedAmount;
if(monthZhAmount < monthTargetAmountLower || monthZhAmount > monthTargetAmountUpper ){
errMsg.push(monthTargetDisplay + "组货金额" + monthZhAmount + "不在月目标金额范围【" + monthTargetAmountLower + "-" + monthTargetAmountUpper + "】内!");
}else{
printLog(monthTargetDisplay + "的月末单号组货金额条件满足!");
//ac.m_writer.changeNode(monthTargetNode.$URL).changeAttribute("C8_MCM_MonthGroupGoodsAmount", "double", monthZhAmount);//月已组货金额 实时表达式计算,无需写入
}
// 组货平均单价=(本单金额+月品类已组金额)/(本单深度+月品类已组深度)
if(!key.startsWith("S")){
var monthZhPrice = Math.round(monthZhAmount/(finalQty+monthTargetNode.C8_MCM_MonthGroupGoodsDepthNotLast));
if(monthZhPrice < monthTargetPriceLower || monthZhPrice > monthTargetPriceUpper ){
errMsg.push(monthTargetDisplay + "组货平均单价" + monthZhPrice + "不在月目标平均单价范围【" + monthTargetPriceLower + "-" + monthTargetPriceUpper + "】内!");
}
}
});
}
//5.2按照周目标检核所有品类的组货情况
Object.keys(skcsData.categoryKey).forEach(function(key){
var weekTargetNode = targetTableNode.weekTarget[key];
if(!weekTargetNode){
errMsg.push("找不到" + key + "对应目标!");
}else{
var monthTargetNode = weekTargetNode.monthTarget;
var monthTargetDisplay = getMonthTargetKey(monthTargetNode,true,false);//非电商
if(isLastWeek){
monthTargetDisplay = "最后一单:"+monthTargetDisplay;
}
if(skcsData.categoryKey[key]){//&& weekSKCDepthTarget>0 取消判断目标深度
var catKeyNode = skcsData.categoryKey[key];
var catSkcCount = catKeyNode.skcs; //组货内skc数量
var styleCount = catKeyNode.styles; //组货内款式数量
var finalQty = catKeyNode.finalQty; //组货深度
var finalDStyleAmout = catKeyNode.finalDStyleAmout;
var finalAmount = catKeyNode.finalAmount; //组货金额
var skcAvgPrice = catKeyNode.AvgPrice; //组货平均价
var categorySKCList = catKeyNode.list;
/*
//组货平均价
var weekAvgPriceTargetLower = monthTargetNode.C8_MCM_AvgPriceLow;
var weekAvgPriceTargetUpper = monthTargetNode.C8_MCM_AvgPriceHigh;
//只检查常销款和基本款, 主题款的校验在上一步执行
if(!key.startsWith("S")){
//平均价校验
if(skcAvgPrice<weekAvgPriceTargetLower || skcAvgPrice>weekAvgPriceTargetUpper){
errMsg.push(monthTargetDisplay+"的组货平均价【"+skcAvgPrice+"】,【不符合】月目标的组货平均价上下限:【"+weekAvgPriceTargetLower+"-"+weekAvgPriceTargetUpper+"】");
}
}*/
//写入实际组货金额、宽度、平均价等信息
var weekTargetURL = weekTargetNode.$URL;
//将结果写入到周目标上 -- 临时,后续需要改为从调整深度上汇总并写入到目标上,
ac.m_writer.changeNode(weekTargetURL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish","double",finalAmount)//组货金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish","integer",catSkcCount)//组货宽度
.changeAttribute("C8_MCMC_DAmountFinish","double",finalDStyleAmout)//D款大片款超出金额
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish","double",skcAvgPrice)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish","integer",styleCount)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish","integer",finalQty);//组货深度
}else{
if(weekSKCDepthTarget>0){
errMsg.push(monthTargetDisplay+"的组货目标存在,但是没有找到任何对应的实际组货SKC!周组货宽度目标【"+weekSKCDepthTarget+"】");
}
}
}
});
}
//Agnes 更新弱管控品类目标
Object.keys(targetTableNode.weakWeekKey).forEach(function(key){
var weekTargetNode = targetTableNode.weakWeekTarget[key];
var monthTargetNode = weekTargetNode.monthTarget;
var weekSKCTarget = weekTargetNode.C8_MCMC_GroupGoodsSKC;//周 组货宽度目标
var weekSKCUpperTarget = weekTargetNode.C8_MCMC_ExcessSKCRemaining;//周 可超宽度剩余C8_MCMC_ExcessSKCRemaining
var weekSKCDepthTarget = weekSKCTarget+weekSKCUpperTarget;
if(skcsData.weakCategoryKey[key]&& weekSKCDepthTarget>0) {
var catKeyNode = skcsData.weakCategoryKey[key];
var skcCount = catKeyNode.skcs; //组货内skc数量
var styleCount = catKeyNode.styles; //组货内款式数量
var finalQty = catKeyNode.finalQty; //组货深度
var finalDStyleAmout = catKeyNode.finalDStyleAmout;
var finalAmount = catKeyNode.finalAmount; //组货金额
var skcAvgPrice = catKeyNode.AvgPrice; //组货平均价
//写入实际组货金额、宽度、平均价等信息
var weekTargetURL = weekTargetNode.$URL;
ac.m_writer.changeNode(weekTargetURL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish", "double", finalAmount)//组货金额
.changeAttribute("C8_MCMC_DAmountFinish", "double", finalDStyleAmout)//D款大片款超出金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish", "integer", skcCount)//组货宽度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish", "double", skcAvgPrice)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish", "integer", styleCount)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish", "integer", finalQty);//组货深度
}
});
//更新单号组货完成状态
if(errMsg.length==0 || force){
if(!checkOnly){
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Complete");//组货结果状态
//将结果写入SKC上,国内组货深度,组货单号
Object.keys(skcsData.categoryKey).forEach(function(key){
var catKeyNode = skcsData.categoryKey[key];
var categorySKCList = catKeyNode.list;
var categorySKCList = catKeyNode.list;
categorySKCList.forEach(function(skcId){
var skcNode = skcsData.list[skcId];
ac.m_writer.changeNode(skcId).changeAttribute("C8_CW_GNDepth","integer",skcNode.finalQty)
.changeAttribute("C8_CW_GNSelected","boolean",true)
.changeAttribute("UR_CW_GroupBillNo","ref",weekURL);
//更新SKC上的确认唯一码UR_Colorway_OKCode:如果是计划单用UR_Colorway_PLMUniqueValue,否则用UR_Colorway_OriginalUniqueCode
// if(orderType == "N"){//计划单
// ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_PLMUniqueValue",true);
// }else{
// ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_OriginalUniqueCode",true);
// }
var urSkcNode = getNode(ac,skcId);
if (urSkcNode.UR_Colorway_OKCode == "") {
ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode", "UR_Colorway_PLMUniqueValue", true);
}
//0530 Jarvis 渠道款设置编辑
var styleNode = getNode(ac,urSkcNode.__Parent__);
ac.m_writer.changeNode(styleNode.$URL).changeAttributeFlag("UR_Style_KNSStyle", xml.ATTR_FLAG_NOEDIT, true);
ac.m_writer.changeNode(styleNode.Attributes).changeAttributeFlag("UR_StyleAttributes_GroupCarPrice", xml.ATTR_FLAG_NOEDIT, true);
});
});
var mentions = getGroup(ac, "海外买手");
var mentions1 = getGroup(ac, "电商买手");
mentions.concat(mentions1);
var subject = "组货确认消息";//主题
var comments = currentNode.$Name + "的" + weekNode.$Name + "组货已确认";//消息文本
var monthNode = getNode(ac,weekNode.PrimaryCollection);
var docContainer = monthNode.DocumentsAndComments;
createConversation(ac, docContainer, subject, mentions, comments);
//发送邮件
SendMailToRole(ac,"海外买手","测试:" + subject,comments,"");
SendMailToRole(ac,"电商买手","测试:" + subject,comments,"");
}
//ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string","");
if(errMsg.length>0){
var errorMessage = errMsg.join("</BR>");
//如果长度超过1000,则截取1000个字符,避免过长保存出错
if(errorMessage.length > 1000){
errorMessage = errorMessage.substring(0,1000);
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string",errorMessage);
}else{
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string","");
}
var successMsg = "";
if(checkOnly){
successMsg = "数据检核通过!请点击【组货确认】以完成组货!";
}else{
successMsg = "组货确认完成!"
flag = true;
}
jp.alert(successMsg);
}else{
if(errMsg.length>0){
var errorMessage = errMsg.join("</BR>");
//如果长度超过1000,则截取1000个字符,避免过长保存出错
if(errorMessage.length > 1000){
errorMessage = errorMessage.substring(0,1000);
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string",errorMessage);
}else{
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string","");
}
jp.alert("执行校验出现错误,请检查:</BR>"+errMsg.join("</BR>"));
}
return flag;
}
// //PLM2 mip001 + mip002接口
// function requestMip001And002(data001,data002,flag){
// var loading = jp.loading("接口请求中");
// requestPlM2ServiceApi('/ur/plm2_mip_001', data001 , false)
// .then(function(result) {
// jp.close(loading);
// if(result){
// jp.alert(result);
// }else{
// jp.alert('获取组货结果接口调用成功(plm2_mip_001 )')
// requestPlM2ServiceApi('/ur/plm2_mip_002', data002 , false)
// .then(function(result) {
// jp.close(loading);
// if(result){
// jp.alert(result);
// }else{
// jp.alert('管控表锁定接口调用成功(plm2_mip_002)');
// }
// })
// .catch(function(error) {
// jp.alert(error);
// jp.close(loading);
// });
// }
// })
// .catch(function(error) {
// jp.alert(error);
// jp.close(loading);
// });
// }
//调用 PLM 后台接口方法
function requestPlM2ServiceApi(url,date,asyncBol){
var requestdate = JSON.stringify(date)
// var loading = jp.loading(loadingMessage);
return new Promise(function(resolve, reject) {
$.ajax({
type: 'post',
url: pluginsURL + url,
beforeSend: function(request) {
request.setRequestHeader("C8_Cookie",getCookie());
},
data:requestdate,
async: asyncBol,
contentType: 'application/json;charset=utf-8',
dataType: 'json',
error: function (data) {
// jp.close(loading);
reject('调用系统后台失败,请联系管理员!');
},
success: function (data) {
var dataObj = eval(data);
// jp.close(loading);
if (dataObj.resultStatus == 0) {
resolve('');
//jp.success("处理完成:" + dataObj.msg );
} else {
resolve(dataObj.errorMsg);
}
}
});
});
}
//电商组货确认
//force=强制确认,checkOnly=是否仅仅检核
function DianShangConfirmZH(ac, force, checkOnly, isDesignerStyle) {
var flag = true;
var weekURL = ac.m_urlParent;
printLog("========电商组货开始执行确认==========");
var weekNode = getNode(ac,weekURL);
var isLastWeek = weekNode.UR_ML_IsLastOrder;
var monthNode = getNode(ac,weekNode.PrimaryCollection);
var orderType = getEnumValue(monthNode.C8_MC_MonthOrderAattribute);
if(orderType && (orderType==="E" || orderType==="F" || orderType==="T") && !checkOnly){
//如果是应急单,则组货确认时,不做检查,等同于强制确认
force = true;
}
//定义错误信息
var errMsg = [];
//1.获取目标表、规则表
var ruleTableNode = searchRuleTable(monthNode);
var targetTableNode = searchTargetTableDianShang(weekNode);
//1+.获取品类管控规则表 Agnes 20240223 品类管控变更
var controlRuleKeys = searchControlRules(monthNode);
printLog("获取规则表,目标表完成");
//2.获取计算skc数据表所需要的数据信息
var resultURLs = weekNode.LookProducts;//ac.widget.getQueryResult().getChildResultUrls();
//3. 获取计算所需要的数据,封装到JSON中,便于后续校验和计算
var skcsData = getDianShangGroupSKCData(ac,resultURLs,controlRuleKeys,true);
var checkPriceAndDeepErrors = skcsData.finalConfirmError;
if(!force && checkPriceAndDeepErrors && checkPriceAndDeepErrors.length>0){
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string",checkPriceAndDeepErrors.join("</BR>"));
jp.alert("发现如下错误信息:</BR>"+checkPriceAndDeepErrors.join("</BR>"));
return true;
}
//20240418 新增重置周组货结果
Object.keys(targetTableNode.weekKey).forEach(function(key){
var weekTargetNode = targetTableNode.weekTarget[key];
//写入实际组货金额、宽度、平均价等信息
var weekTargetURL = weekTargetNode.$URL;
//将结果写入到周目标上 -- 临时,后续需要改为从调整深度上汇总并写入到目标上,
ac.m_writer.changeNode(weekTargetURL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish","double",0)//组货金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish","integer",0)//组货宽度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish","double",0)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish","integer",0)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish","integer",0);//组货深度
});
Object.keys(targetTableNode.weakWeekKey).forEach(function(key){
var weekTargetNode = targetTableNode.weakWeekTarget[key];
//写入实际组货金额、宽度、平均价等信息
var weekTargetURL = weekTargetNode.$URL;
//将结果写入到周目标上 -- 临时,后续需要改为从调整深度上汇总并写入到目标上,
ac.m_writer.changeNode(weekTargetURL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish","double",0)//组货金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish","integer",0)//组货宽度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish","double",0)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish","integer",0)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish","integer",0);//组货深度
});
//4. 校验
//4.1校验开始
//Agnes 20240410 设计师系列前三单不卡控,月末单控制总金额
if(isDesignerStyle){
if(isLastWeek){
var targetAmountLower = targetTableNode.targetAmountLower;
var targetAmountUpper = targetTableNode.targetAmountUpper;
var preZhAmount = targetTableNode.zhAmount;
var totalZhAmount = skcsData.amount + preZhAmount;
if(totalZhAmount < targetAmountLower || totalZhAmount > targetAmountUpper){
errMsg.push("设计师系列月组货金额不在月组货金额范围【" + targetAmountLower + "-" + targetAmountUpper +"】内" );
}else{
printLog("设计师系列月末单符合金额校验");
}
}
//更新目标
Object.keys(skcsData.categoryKey).forEach(function(key){
var weekTargetNode = targetTableNode.weekTarget[key];
var midCatName = "";
if(key.length>3){
midCatName = locale.getEnumName("UR_enum_ProductMiddleType:"+key.substring(3,5));
}
var level = "";
if(key.length>5){
level = key.substring(key.length-1, key.length);
}
if(!weekTargetNode){
errMsg.push("【"+locale.getEnumName("UR_enum_CommodityType:"+key.substring(0,1))+"】【"+locale.getEnumName("UR_enum_ProductLargeType:"+key.substring(1,3))+"】【"+midCatName+"】【"+level+"】的目标找不到!");
return;
}
if(skcsData.categoryKey[key] ){//&& weekSKCDepthTarget>0 目标为0时也写入电商组货到colorway
var catKeyNode = skcsData.categoryKey[key];
var skcCount = catKeyNode.skcs; //组货内skc数量
var styleCount = catKeyNode.styles; //组货内款式数量
var finalQty = catKeyNode.finalQty; //组货深度
var finalAmount = catKeyNode.finalAmount; //组货金额
var skcAvgPrice = catKeyNode.AvgPrice; //组货平均价
//写入实际组货金额、宽度、平均价等信息
var weekTargetURL = weekTargetNode.$URL;
//将结果写入到周目标上 -- 临时,后续需要改为从调整深度上汇总并写入到目标上,
ac.m_writer.changeNode(weekTargetURL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish","double",finalAmount)//组货金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish","integer",skcCount)//组货宽度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish","double",skcAvgPrice)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish","integer",styleCount)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish","integer",finalQty);//组货深度
//.changeAttribute("C8_MCMC_DAmountFinish","double",totalExceedAmountDStyle)//D款大片款超出金额 ??如何计算?
}
});
}else{
//Agnes 20240409 新增1. 单非N级别的SKC数量/单SKC总数>=规则表(单号组货SKC数合理范围配置表)单号SKC数合理范围下限
//本单组货SKC数量
var zhSkcs = skcsData.skcIds.length;
//本单组货非N级别SKC数量
var nonNSkcs = skcsData.nonNSkcs;
var nonNRatio = zhSkcs==0 ? 0 : nonNSkcs/zhSkcs; //非N级别SKC占比
var commodityType = skcsData.commodityType;//一个组货月只有一种商品层
//获取单号组货SKC数合理范围配置表中品类中品类为空的,通过月份、商品层、订单属性、风格过滤的配置项
var ruleTableA = filterRuleTable(ruleTableNode,"A",true,{UR_SDS_GroupOrderAattribute:monthNode.C8_MC_MonthOrderAattribute,UR_SDS_Month:monthNode.C8_MC_Month,UR_SDS_ProductStyle:monthNode.C8_MC_Style,UR_SDS_CommodityType:commodityType,UR_SDS_ProductLargeType:"UR_enum_ProductLargeType:",UR_SDS_MiddleCategoryType:"UR_enum_ProductMiddleType:"});
if(ruleTableA && ruleTableA.$URL && ruleTableA.$URL != ""){
var weekFloorLimit = ruleTableA.UR_SDS_OrderSKCPercentLow;
if(nonNRatio < weekFloorLimit){
errMsg.push("单号组货SKC数小于合理范围" + weekFloorLimit);
}
}else{
errMsg.push("找不到单组货SKC总数合理范围配置信息,请补充配置项【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(monthNode.C8_MC_Month)+"】【" +locale.getEnumName(monthNode.C8_MC_MonthOrderAattribute)+"】【" + locale.getEnumName(monthNode.C8_MC_Style)+"】的单号SKC数合理范围下限!" );
}
//20240409 Agnes 新增2.月末单品类/中品类级别的月非N级别SKC数量/月SKC数量>=规则表中月末单品类级别下限
if(isLastWeek){
Object.keys(skcsData.catCrossLevelKey).forEach(function(key){
var lastWeekCatNonNSkcs = skcsData.catCrossLevelKey[key].catNonNSkcs; //末单组货品类跨等级非N级别SKC数
var lastWeekCatSkcs = skcsData.catCrossLevelKey[key].catSkcs;//月末单组货品类跨等级总skc数
if(targetTableNode.monthSum[key]){
var monthZhSkcs = targetTableNode.monthSum[key].monthZHSkcs;//月品类中品类子品类已组SKC
var monthCatNSkcs = targetTableNode.monthSum[key].monthCatNSkcs;//月品类N级已组SKC
var monthCatNonNSkcs = monthZhSkcs - monthCatNSkcs;//非N为月品类已组减去月品类N级已组
var tableA = filterRuleTable(ruleTableNode,"A",true,{UR_SDS_GroupOrderAattribute:monthNode.C8_MC_MonthOrderAattribute,UR_SDS_Month:monthNode.C8_MC_Month,UR_SDS_ProductStyle:monthNode.C8_MC_Style,UR_SDS_CommodityType:commodityType,UR_SDS_ProductLargeType:"UR_enum_ProductLargeType:",UR_SDS_MiddleCategoryType:"UR_enum_ProductMiddleType:"});
var midCatName = "";
if(key.length>3){
midCatName = locale.getEnumName("UR_enum_ProductMiddleType:"+key.substring(3,5));
}
if(tableA && tableA.$URL && tableA.$URL != ""){
var monthFloorLimit = tableA.UR_SDS_SKCPercentLow;
var monthCatNonNRatio = (lastWeekCatSkcs+monthZhSkcs)== 0 ? 0 : (lastWeekCatNonNSkcs+monthCatNonNSkcs)/(lastWeekCatSkcs+monthZhSkcs);
if(monthCatNonNRatio < monthFloorLimit){
errMsg.push("【"+locale.getEnumName(commodityType)+"】【" + locale.getEnumName("UR_enum_ProductLargeType:"+key.substring(1,3))+"】【" + midCatName +"】月组货SKC数小于合理范围" + monthFloorLimit);
}
}else{
errMsg.push("找不到月份SKC数合理范围下限配置信息,请补充配置项【"+locale.getEnumName(commodityType)+"】【"+locale.getEnumName(monthNode.C8_MC_Month)+"】【" +locale.getEnumName(monthNode.C8_MC_MonthOrderAattribute)+"】【" + locale.getEnumName(monthNode.C8_MC_Style)+"】【" + locale.getEnumName("UR_enum_ProductLargeType:"+key.substring(1,3))+"】【" + midCatName+"】的月份SKC数合理范围下限!" );
}
}else{
errMsg.push("找不到【"+locale.getEnumName(commodityType)+"】【" + locale.getEnumName("UR_enum_ProductLargeType:"+key.substring(1,3))+"】【" + midCatName+"】的目标!" );
}
});
}
Object.keys(skcsData.categoryKey).forEach(function(key){
var weekTargetNode = targetTableNode.weekTarget[key];
var midCatName = "";
if(key.length>3){
midCatName = locale.getEnumName("UR_enum_ProductMiddleType:"+key.substring(3,5));
}
var level = "";
if(key.length>5){
level = key.substring(key.length-1, key.length);
}
if(!weekTargetNode){
errMsg.push("【"+locale.getEnumName("UR_enum_CommodityType:"+key.substring(0,1))+"】【"+locale.getEnumName("UR_enum_ProductLargeType:"+key.substring(1,3))+"】【"+midCatName+"】【"+level+"】的目标找不到!");
return;
}
var monthTargetNode = weekTargetNode.monthTarget;
var monthTargetDisplay = getMonthTargetKey(monthTargetNode,true,true);//电商key
//组货宽度
var weekSKCTarget = weekTargetNode.C8_MCMC_GroupGoodsSKC;//周 组货宽度目标
var weekSKCUpperTarget = weekTargetNode.C8_MCMC_ExcessSKCRemaining;//周 可超宽度剩余
var weekSKCDepthTarget = weekSKCTarget+weekSKCUpperTarget;
if(skcsData.categoryKey[key] ){//&& weekSKCDepthTarget>0 目标为0时也写入电商组货到colorway
var catKeyNode = skcsData.categoryKey[key];
var skcCount = catKeyNode.skcs; //组货内skc数量
var styleCount = catKeyNode.styles; //组货内款式数量
var finalQty = catKeyNode.finalQty; //组货深度
var finalAmount = catKeyNode.finalAmount; //组货金额
var skcAvgPrice = catKeyNode.AvgPrice; //组货平均价
//组货金额
var monthCanOverseedAmout = monthTargetNode.C8_MCM_ExcessAmount; //月可超金额
var weekAmount = weekTargetNode.C8_MCMC_GroupGoodsAmount; //周目标组货金额
var monthPlanAmount = monthTargetNode.C8_MCM_PlannedAmount;//月企划金额
var monthPlanSkc = monthTargetNode.C8_MCM_PlannedSKC;//月企划SKC
//var monthCanOverSkc = monthTargetNode.C8_MCM_PlannedSKC //月可超SKC
var monthCanDeduceAmount = monthTargetNode.C8_MCM_ReduceAmount; //月可减金额
var monthFinishAmount = monthTargetNode.C8_MCM_MonthGroupGoodsAmount;//月已组货金额
//组货金额上限= 月企划总金额+月可超金额-月已组货金额
var weekFinalCheckAmountUpper = monthPlanAmount+monthCanOverseedAmout-monthFinishAmount;
//组货金额下限=月企划总金额-月可减金额-月已组货金额
var weekFinalCheckAmountLower = monthPlanAmount-monthCanDeduceAmount-monthFinishAmount;
//组货平均价
// var weekAvgPriceTargetLower = monthTargetNode.C8_MCM_AvgPriceLow;
// var weekAvgPriceTargetUpper = monthTargetNode.C8_MCM_AvgPriceHigh;
//校验宽度
if(skcCount>monthPlanSkc*1.05){
errMsg.push(monthTargetDisplay+"的实际组货深度为【"+skcCount+"】,【大于】月目标的组货宽度加可超宽度剩余总和:【"+weekSKCDepthTarget+"】");
}
//最后一单
if(isLastWeek){
//校验金额
if(finalAmount>weekFinalCheckAmountUpper || finalAmount<weekFinalCheckAmountLower){
errMsg.push("月最后一单:"+monthTargetDisplay+"的实际组货金额为【"+finalAmount+"】,【不符合】月组货金额目标的可减后总金额【"+weekFinalCheckAmountLower+"】和月可超总金额:【"+weekFinalCheckAmountUpper+"】的区间要求");
}
}/* 取消前三单的金额滚动校验
else{
//校验金额
if(finalAmount>weekFinalCheckAmountUpper){
errMsg.push("非最后一单:"+monthTargetDisplay+"的实际组货金额为【"+finalAmount+"】,【超出】月组货金额目标加可超金额总和:【"+weekFinalCheckAmountUpper+"】的要求");
}
}*/
/* 改到确认通过时写入
//将结果写入SKC上,电商组货深度
catKeyNode.list.forEach(function(skcId){
var skcNode = skcsData.list[skcId];
ac.m_writer.changeNode(skcId).changeAttribute("C8_CW_DSDepth","integer",skcNode.finalQty);
});
*/
//写入实际组货金额、宽度、平均价等信息
var weekTargetURL = weekTargetNode.$URL;
//将结果写入到周目标上 -- 临时,后续需要改为从调整深度上汇总并写入到目标上,
ac.m_writer.changeNode(weekTargetURL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish","double",finalAmount)//组货金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish","integer",skcCount)//组货宽度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish","double",skcAvgPrice)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish","integer",styleCount)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish","integer",finalQty);//组货深度
//.changeAttribute("C8_MCMC_DAmountFinish","double",totalExceedAmountDStyle)//D款大片款超出金额 ??如何计算?
}else{
if(weekSKCDepthTarget>0){
errMsg.push(monthTargetDisplay+"的组货目标存在,但是没有找到任何对应的实际组货SKC!周组货宽度目标【"+weekSKCDepthTarget+"】");
}
}
});
}
//Agnes 更新弱管控品类目标
Object.keys(skcsData.weakCategoryKey).forEach(function(key){
var weekTargetNode = targetTableNode.weakWeekTarget[key];
//var weekSKCTarget = weekTargetNode.C8_MCMC_GroupGoodsSKC;//周 组货宽度目标
//var weekSKCUpperTarget = weekTargetNode.C8_MCMC_ExcessSKCRemaining;//周 可超宽度剩余C8_MCMC_ExcessSKCRemaining
//var weekSKCDepthTarget = weekSKCTarget+weekSKCUpperTarget;
if(weekTargetNode) {
var catKeyNode = skcsData.weakCategoryKey[key];
var skcCount = catKeyNode.skcs; //组货内skc数量
var styleCount = catKeyNode.styles; //组货内款式数量
var finalQty = catKeyNode.finalQty; //组货深度
var finalDStyleAmout = catKeyNode.finalDStyleAmout;
var finalAmount = catKeyNode.finalAmount; //组货金额
var skcAvgPrice = catKeyNode.AvgPrice; //组货平均价
//写入实际组货金额、宽度、平均价等信息
var weekTargetURL = weekTargetNode.$URL;
ac.m_writer.changeNode(weekTargetURL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish", "double", finalAmount)//组货金额
.changeAttribute("C8_MCMC_DAmountFinish", "double", finalDStyleAmout)//D款大片款超出金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish", "integer", skcCount)//组货宽度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish", "double", skcAvgPrice)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish", "integer", styleCount)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish", "integer", finalQty);//组货深度
}
});
printLog("=========检核计算结果完成====");
//更新单号组货完成状态
if(errMsg.length==0 || force){
if(!checkOnly){
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Complete");//组货结果状态
//将结果写入SKC上,电商组货深度
Object.keys(skcsData.categoryKey).forEach(function(key){
var catKeyNode = skcsData.categoryKey[key];
var categorySKCList = catKeyNode.list;
categorySKCList.forEach(function(skcId){
var skcNode = skcsData.list[skcId];
ac.m_writer.changeNode(skcId).changeAttribute("C8_CW_DSDepth", "integer", skcNode.finalQty);
});
});
//将结果写入SKC上,电商组货深度,组货单号 0520新增
Object.keys(skcsData.categoryKey).forEach(function(key){
var catKeyNode = skcsData.categoryKey[key];
var categorySKCList = catKeyNode.list;
var categorySKCList = catKeyNode.list;
categorySKCList.forEach(function(skcId){
var skcNode = skcsData.list[skcId];
ac.m_writer.changeNode(skcId)
//.changeAttribute("C8_CW_DSDepth","integer",skcNode.finalQty)
.changeAttribute("C8_CW_DSPick","boolean",true)
.changeAttribute("UR_CW_GroupBillNo","ref",weekURL);
//更新SKC上的确认唯一码UR_Colorway_OKCode:如果是计划单用UR_Colorway_PLMUniqueValue,否则用UR_Colorway_OriginalUniqueCode
// if(orderType == "N"){//计划单
// ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_PLMUniqueValue",true);
// }else{
// ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode","UR_Colorway_OriginalUniqueCode",true);
// }
//0521 不分渠道 都取UR_Colorway_PLMUniqueValue
var urSkcNode = getNode(ac,skcId);
if (urSkcNode.UR_Colorway_OKCode == "") {
ac.m_writer.changeNode(skcId).changeAttributeExp("UR_Colorway_OKCode", "UR_Colorway_PLMUniqueValue", true);
}
//0530 Jarvis 渠道款设置编辑
var styleNode = getNode(ac,urSkcNode.__Parent__);
ac.m_writer.changeNode(styleNode.$URL).changeAttributeFlag("UR_Style_KNSStyle", xml.ATTR_FLAG_NOEDIT, true);
ac.m_writer.changeNode(styleNode.Attributes).changeAttributeFlag("UR_StyleAttributes_GroupCarPrice", xml.ATTR_FLAG_NOEDIT, true);
});
});
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string","");
if(errMsg.length>0){
var errorMessage = errMsg.join("</BR>");
//如果长度超过1000,则截取1000个字符,避免过长保存出错
if(errorMessage.length > 1000){
errorMessage = errorMessage.substring(0,1000);
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string",errorMessage);
flag = false;
}else{
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string","");
}
jp.success("操作完成!");
}else{
if(errMsg.length>0){
var errorMessage = errMsg.join("</BR>");
//如果长度超过1000,则截取1000个字符,避免过长保存出错
if(errorMessage.length > 1000){
errorMessage = errorMessage.substring(0,1000);
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string",errorMessage);
jp.alert("执行校验出现错误,请检查:</BR>"+errMsg.join("</BR>"));
flag = false;
}else{
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string","");
}
}
return flag;
}
/**
* 查找 年份季节+品牌+系列+风格+组货单号+【组】订单属性 形同的单号 是否正在发送组货数据给其他系统
* @param ac
* @param weekURL 单号url
* @returns {string} 报错信息,如果无报错,返回“”
*/
function checkSameMLIsZHing(ac,weekURL){
debugger
//查询当前组货单号的所有渠道的MarketingLook,如果有渠道正在发送中,则提示稍后操作
const weekNode = getNode(ac, weekURL);
var mcNode = getNode(ac,weekNode.__Parent__);
var searchDoing = new Search();
var mcLockIngQuery = searchDoing.getQuery();
mcLockIngQuery.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MarketingLook")
.Attr("C8_MC_Series", xml.OP_EQUALS, mcNode.C8_MC_Series, "Child:__Parent__")
.Attr("C8_MC_Style", xml.OP_EQUALS, mcNode.C8_MC_Style, "Child:__Parent__")
.Attr("C8_MC_Brand", xml.OP_EQUALS, mcNode.C8_MC_Brand, "Child:__Parent__")
.Attr("C8_MC_Month", xml.OP_EQUALS, mcNode.C8_MC_Month, "Child:__Parent__")
.Attr("C8_MC_MonthOrderAattribute", xml.OP_EQUALS, mcNode.C8_MC_MonthOrderAattribute, "Child:__Parent__")
.Attr("C8_ML_Week", xml.OP_EQUALS,weekNode.C8_ML_Week);
var res = searchDoing.execute({sync: true});
var results = res.getResultNodes();
if(results){
for (item of results) {
//如果有渠道正在发送中,则提示稍后操作
if (item.UR_ML_Send_Ready_Flag) {
const sendMmcNode = getNode(ac, item.__Parent__);
return sendMmcNode['Node Name'] + ' 正在发送组货数据,请等待2分钟后再次操作';
}
}
}
return '';
}
/**
* 电商/海外/国内 【组货确认】/【强制确认】 校验必填信息
*
* @param ac
* @param type 1 国内组货 2 电商组后 3 海外组货
* @returns 报错信息
*/
function checkRequiredToConfirm(ac, type) {
const weekURL = ac.m_urlParent;
const weekNode = getNode(ac, weekURL);
const resultURLs = weekNode.LookProducts;//ac.widget.getQueryResult().store._allResultUrls;
let sameMeg = checkSameMLIsZHing(ac, weekURL);//查找是否有其他渠道正在组货中
if (sameMeg) {
return sameMeg;
}
const resultErrorMsg = [];
if (resultURLs && resultURLs.length > 0) {
const amount = 0;
resultURLs.forEach(function (url) {
const nodeObj = getNode(ac, url);
if (nodeObj && nodeObj.$Type == "MCProduct") {
var errorMsg = "";
if (!nodeObj.C8_MCP_SKC || nodeObj.C8_MCP_SKC == "centric:") {
errorMsg = "导入唯一键:" + nodeObj.C8_MCP_ID + " 缺少【配色】" + "</BR>";
} else {
const skcObj = getNode(ac, nodeObj.C8_MCP_SKC);
const plmUniqueValue = skcObj.UR_Colorway_PLMUniqueValue;
var errorMsgItem='';
if (!skcObj.UR_Colorway_BaseColor || skcObj.UR_Colorway_BaseColor == "centric:") {
errorMsgItem = errorMsgItem + "【基础颜色】";
}
if (!skcObj.CodeN || skcObj.CodeN == "") {
errorMsgItem = errorMsgItem + "【新配色号】";
}
if (!skcObj['Node Name'] || skcObj['Node Name'] == "") {
errorMsgItem = errorMsgItem + "【配色名】";
}
if (!skcObj.C8_CW_Special || skcObj.C8_CW_Special == "UR_enum_Special:") {
errorMsgItem = errorMsgItem + "【[组]】特殊款】";
}
const styleNode = getNode(ac, skcObj.__Parent__);
if (!styleNode.UR_Style_ModuleNumber || styleNode.UR_Style_ModuleNumber == "centric:") {
errorMsgItem = errorMsgItem + "【模块号】";
}
var styleAttr = getNode(ac,styleNode.Attributes);
if (!styleAttr.UR_StyleAttributes_BasicUnit || styleAttr.UR_StyleAttributes_BasicUnit == "UR_enum_Unit:") {
errorMsgItem = errorMsgItem + "【基本单位】";
}
if (errorMsgItem) {
errorMsg = errorMsg + 'PLM唯一值 ' + plmUniqueValue + ' ' + errorMsgItem + "为空,请检查" + "</BR>";
}
const dsAdjustingDepth = nodeObj.C8_MCP_AdjustingDepth;
const hwAdjustingDepth = nodeObj.C8_MCP_AdjustingDepthHy;
const gnAdjustingDepth = nodeObj.C8_MCP_AdjustingDepth;
const dsDepth = skcObj.C8_CW_DSDepth;
const hwDepth = skcObj.C8_CW_HWDepth;
const gnDepth = skcObj.C8_CW_GNDepth;
if (type === 1) { // 国内组货
if (dsDepth === 0 && hwDepth === 0 && (!gnAdjustingDepth || gnAdjustingDepth === 0)) {
errorMsg = errorMsg + plmUniqueValue + " 国内/电商/海外三个渠道的组货深度均为0,请检查" + "</BR>";
}
} else if (type === 2) { // 电商组货
if (gnDepth === 0 && hwDepth === 0 && (!dsAdjustingDepth || dsAdjustingDepth === 0)) {
errorMsg = errorMsg + plmUniqueValue + " 国内/电商/海外三个渠道的组货深度均为0,请检查" + "</BR>";
}
} else if (type === 3) { // 海外组货
debugger
if (dsDepth === 0 && gnDepth === 0 && (!hwAdjustingDepth || Object.keys(hwAdjustingDepth).length > 0)) {
var isAll0 = true;
var storeVolumnMap = new Map(Object.entries(hwAdjustingDepth));
for (const [key, value] of storeVolumnMap) {
if (value !== 0) {
isAll0 = false;
}
}
if (isAll0) {
errorMsg = errorMsg + plmUniqueValue + " 国内/电商/海外三个渠道的组货深度均为0,请检查" + "</BR>";
}
}
//海外款校验特殊款必填 Jarvis 20240601
if(skcObj.C8_CW_Special == "UR_enum_Special:"){
errorMsg = errorMsg + "设计号为:" + styleNode.Code + "的[组]特殊款必填,请检查" + "</BR>";
}
}
}
if (errorMsg) {
resultErrorMsg.push(errorMsg + "</BR>");
}
}
});
}
return resultErrorMsg.join("</BR>").substring(0, 1000);
}
return {
// 2) Functions referenced from Site.xml
OnCreateGuoNeiRule:function(ac){
var newURL = ac.m_urlNode;
var fromURL = ac.m_nodeSource.$URL;
ac.m_writer.reset();
ac.m_writer.copyNode(newURL,fromURL);
ac.m_writer.changeNode(newURL).changeAttribute("__Parent__","ref","centric://REFLECTION/INSTANCE/_CS_Data/null");
setRuleTemple(ac,newURL);
},
OnCreateHaiWaiRule:function(ac){
var newURL = ac.m_urlNode;
var fromURL = ac.m_nodeSource.$URL;
ac.m_writer.reset();
ac.m_writer.copyNode(newURL,fromURL);
ac.m_writer.changeNode(newURL).changeAttribute("__Parent__","ref","centric://REFLECTION/INSTANCE/_CS_Data/null");
setRuleTemple(ac,newURL);
},
OnCreateDianShangRule:function(ac){
var newURL = ac.m_urlNode;
var fromURL = ac.m_nodeSource.$URL;
ac.m_writer.reset();
ac.m_writer.copyNode(newURL,fromURL);
ac.m_writer.changeNode(newURL).changeAttribute("__Parent__","ref","centric://REFLECTION/INSTANCE/_CS_Data/null");
setRuleTemple(ac,newURL);
},
OnCopyRule:function(ac){
var newURL = ac.m_urlNode;
ac.m_writer.changeNode(newURL).changeAttribute("__Parent__","ref","centric://REFLECTION/INSTANCE/_CS_Data/null");
},
//电商、海外组货从Colorway中选款
C8_NewMCPFromColorway:function(ac) {
ac.m_writer.reset();
var selectedSkcs = ac.m_formData.getSelectedNodes();
var mlUrl = ac.m_urlParent;
var mlNode = ac.m_cache.getNode(mlUrl);
var existingSKCs = [];
//获取现有MCProduct下的skc
var existingMCPs = mlNode.LookProducts;
if(existingMCPs && existingMCPs.length>0){
existingMCPs.forEach(function(mcpurl){
var mcProduct = getNode(ac,mcpurl);
var skcURL = mcProduct.C8_MCP_SKC;
if(skcURL && skcURL!="centric:" && skcURL !=""){
existingSKCs.push(skcURL);
}
});
}
var viewId = ac.widget.defView.m_id;
var attName = "";
if(viewId=="MCProducts"){
attName = "C8_CW_GNPick";
}else if(viewId=="C8_MCProductsDS"){
attName = "C8_CW_DSPick";
}else if(viewId=="C8_GroupGoodsGallery" || viewId=="C8_GroupGoodsGalleryOM"){
attName = "C8_CW_HWPick";
}
for(var i=0; i<selectedSkcs.length; i++){
//重复的SKC不添加
if(!existingSKCs.includes(selectedSkcs[i].$URL)){
var newUrl = comm.createUrl("MCProduct");
ac.m_writer.createNode(newUrl, "MCProduct")
.changeAttribute("C8_MCP_SKC", "ref", selectedSkcs[i].$URL)
.changeAttribute("C8_MCP_WeekNum", "ref", mlUrl)
.changeAttribute("ProductStyle","ref",selectedSkcs[i].__Parent__)
.attach(mlUrl, "LookProducts")
.attach(mlNode.PrimaryCollection, "Products");
if(attName !=""){
ac.m_writer.changeNode(selectedSkcs[i].$URL).changeAttribute(attName,"boolean",true);
//选入选款池后改成打标签过程中
ac.m_writer.changeNode(mlUrl).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Start");
}
}
//选中的SKU设置 WESTV平均深度 通过商品层,周C8_MCMC_Week 以及品类 中品类 找到唯一的MCMaterial
var styleNode = getNode(ac,selectedSkcs[i].__Parent__);
var styleAttrNode = getNode(ac,styleNode.Attributes);
var midCat = getEnumValue(styleAttrNode.UR_StyleAttributes_MiddleCategoryTypeCount);
if(midCatMapping.has(midCat)){
midCat = midCatMapping.get(midCat);
}
var mcUrl = mlNode.__Parent__;
var search = new Search();
var q = search.getQuery();
//查询当前MC下的第一个商品层、大类、中类与款式相同的月目标
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterial")
.RefAttr("__Parent__", xml.OP_EQUALS, mcUrl)
.Attr("C8_MCM_CommodityType", xml.OP_EQUALS, styleNode.UR_Style_CommodityType)
.Attr("C8_MCM_ProductLargeType", xml.OP_EQUALS, styleNode.UR_Style_ProductLargeType)
.Attr("C8_MCM_CategoryInPlan", xml.OP_EQUALS, styleAttrNode.UR_StyleAttributes_MiddleCategoryType)
var res = search.execute({sync: true});
var results = res.getResultNodes();
if (results.length > 0) {
var mcMaterialNode = results[0];
ac.m_writer.changeNode(styleNode.$URL).changeAttribute("UR_Style_MonthAvgDepth","integer",Math.round(mcMaterialNode.C8_MCM_MonthAvgDepth));
}else{
var search2 = new Search();
var q2 = search2.getQuery();
//查询当前MC下的第一个商品层、大类与款式相同的月目标
q2.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterial")
.RefAttr("__Parent__", xml.OP_EQUALS, mcUrl)
.Attr("C8_MCM_CommodityType", xml.OP_EQUALS, styleNode.UR_Style_CommodityType)
.Attr("C8_MCM_ProductLargeType", xml.OP_EQUALS, styleNode.UR_Style_ProductLargeType);
res = search2.execute({sync: true});
results = res.getResultNodes();
if(results.length > 0){
var mcMaterialNode = results[0];
ac.m_writer.changeNode(styleNode.$URL).changeAttribute("UR_Style_MonthAvgDepth","integer",Math.round(mcMaterialNode.C8_MCM_MonthAvgDepth));
}else{
ac.m_writer.changeNode(styleNode.$URL).changeAttribute("UR_Style_MonthAvgDepth","integer",0);
}
}
}
return true;
},
CreateSpecItemOnAction:function(ac) {
var specItemUrl = ac.m_urlNode;
var viewId = ac.widget.defView.m_id;
var viewIndex = "";
if(viewId && viewId.length>0){
viewIndex = viewId.substring(viewId.length-1);
}
if(viewIndex && viewIndex !=""){
ac.m_writer.changeNode(specItemUrl).changeAttribute("UR_SDS_TableRule","enum","UR_Rule:"+viewIndex);
}
return true;
},
//创建单号时,设置单号的parent为MarketingCollection,以建立层级关系
CreateMarketingLookOnAction:function(ac) {
var looURL = ac.m_urlNode;
if(looURL && looURL !="centric:"){
ac.m_writer.changeNode(looURL).changeAttributeExp("__Parent__","PrimaryCollection",true);
}
return true;
},
//国内选款
C8_SelectSKC:function(ac) {
var urls = wrapCnls(ac);
invokeJavaActionCurrentUser("", "c8function/selectSKC", {urls: urls});
return true;
},
//款式复制 Jarvis 20231127
C8_CopyStyle:function(ac){
var node = getNode(ac,ac.m_urlNode);
var newurl = copyStyleFormOldStyle(ac,node);
jp.alert("产品复制成功");
return true;
},
//款式复制 Jarvis 20231127
C8_GJCopyStyle:function(ac){
var node = getNode(ac,ac.m_urlNode);
//移动层级
var colNode = getNode(ac,node.Collection);
var cate2Node = getNode(ac,node.Category2);
var cate1Node = getNode(ac,node.Category1);
var lookItemNode = "";
//根据风格配置表转换风格 Jarvis 20240520
if(cate1Node.UR_Brand_ProductSeriation != "UR_enum_ProductSeriation:I") {
var searchl = new Search();
var queryl = searchl.getQuery();
queryl.Node(xml.PROP_TYPE, xml.OP_EQUALS, "LookupItem")
.Attr("C8_LI_YSeries", xml.OP_EQUALS, cate1Node.UR_Brand_ProductSeriation)
.Attr("C8_LI_CStyle", xml.OP_EQUALS, node.UR_Style_ProductStyle)
.Attr("Node Name", xml.OP_EQUALS, "风格转换配置表", "Child:Subtype");
var resl = searchl.execute({
sync: true
});
var resultsl = resl.getResultNodes();
if(resultsl.length > 0){
lookItemNode = resultsl[0];
}else{
jp.alert("风格转换配置表还未维护,请先维护风格转换配置表!");
return true;
}
}
var newurl = copyStyleFormOldStyle(ac,node);
ac.m_writer.changeNode(newurl).changeAttribute("C8_Style_OldCode","ref",node.$URL);
ac.m_writer.changeNode(newurl).changeAttribute("UR_Style_StyleSource","string","转版");
ac.m_writer.changeNode(node.$URL).changeAttribute("UR_Style_StyleSource","string","转版");
if(cate1Node.UR_Brand_ProductSeriation == "UR_enum_ProductSeriation:I"){
ac.m_writer.changeNode(newurl).changeAttribute("C8_Style_Translation","enum","UR_enum_Translation:02");
}else{
ac.m_writer.changeNode(newurl).changeAttribute("C8_Style_Translation","enum","UR_enum_Translation:01");
}
var search = new Search();
var query = search.getQuery();
query.Node(xml.PROP_TYPE, xml.OP_EQUALS, "Collection")
.Attr("UR_Collection_ProductLargeType",xml.OP_EQUALS,colNode.UR_Collection_ProductLargeType)
.Attr("UR_Department_Month",xml.OP_EQUALS,cate2Node.UR_Department_Month,"Child:__Parent__")
.Attr("UR_Brand_Brand",xml.OP_EQUALS,"UR_enum_Brand:01","Child:__Parent__/Child:__Parent__")
.Attr("UR_Brand_ProductSeriation",xml.OP_EQUALS,"UR_enum_ProductSeriation:I","Child:__Parent__/Child:__Parent__")
.RefAttr("ParentSeason", xml.OP_EQUALS, node.ParentSeason);
var res = search.execute({
sync: true
});
var results = res.getResultNodes();
if (results.length > 0) {
ac.m_writer.callMethod("Apparel", "MoveTo")
.addParameter("AddURL", xml.ATTR_REF, results[0].$URL)
.addParameter("URL", xml.ATTR_REF, newurl)
.addParameter("ParentURL", xml.ATTR_REF, colNode.$URL)
.addParameter("Toggle", "boolean", true);
if(lookItemNode != ""){
ac.m_writer.changeNode(newurl).changeAttribute("UR_Style_ProductStyle","enum",lookItemNode.C8_LI_IStyle);
}
//固定,无论I转C还是C转I 都是I系列
ac.m_writer.changeNode(newurl+ "?Path=Child:Attributes").changeAttribute("UR_StyleAttributes_ProductSeriation","enum","UR_enum_ProductSeriation:I");
ac.m_writer.changeNode(newurl).changeAttributeExp("Code","block(\n" +
" if((enumValue(ParentSeason.UR_Season_Year)==\"2021\"&&enumValue(ParentSeason.UR_Season_Season)==\"F\")||enumValue(ParentSeason.UR_Season_Year)> \"2021\",( \n" +
"seqName=rightstr(enumValue(ParentSeason.UR_Season_Year),2) \n" +
"+enumValue(ParentSeason.UR_Season_Season) \n" +
"+enumValue(UR_Style_ProductStyle)\n" +
"+enumValue(UR_Style_ProductLargeType)),\n" +
"(seqName=rightstr(enumValue(ParentSeason.UR_Season_Year),2) \n" +
"+enumValue(ParentSeason.UR_Season_Season)\n" +
"+enumValue (__Parent__.__Parent__.__Parent__.UR_Brand_ProductSeriation)\n" +
"+ enumValue(UR_Style_ProductLargeType))) ,\n" +
" seq=format(\"{0,number,0000}\",uniqueKey(seqName)),\n" +
" if((enumValue(ParentSeason.UR_Season_Year)==\"2024\"&&enumValue(ParentSeason.UR_Season_Season)==\"F\") && integer(seq) < 500, seq = integer(seq) +500,seq),\n" +
" string(seq),\n" +
" seq = if(seq.length() < 4 ,\"0\"+string(seq),if(seq.length() < 3 ,\"00\"+string(seq),seq)),\n" +
" seqName+seq\n" +
")",true);
ac.m_writer.changeNode(newurl).changeAttributeExp("Node Name","Code",true);
//取消选款确认 20240531 Jarvis
var newStyleNode = getNode(ac,newurl);
var colorways = newStyleNode.ActiveColorways;
for(var i =0;i<colorways.length;i++){
ac.m_writer.changeNode(colorways[i]).changeAttribute("Active","boolean","false");
}
}
jp.alert("国际转版成功!");
return true;
},
//国内组货计算
C8_GuoNeiCalculate:function(ac) {
var startTime = new Date();
var currentNode = routerStore.locationNode;
var loadingMessage = "正在执行组货计算,请耐心等待................";
var delim = "</BR>";
var loading = jp.loading(loadingMessage);
var processingTime = "总执行时间:";
var stepInfo = "";
var weekURL = ac.m_urlParent;
printLog("========开始执行时间:"+startTime);
var weekNode = getNode(ac,weekURL);
var isLastWeek = weekNode.UR_ML_IsLastOrder;
var monthNode = getNode(ac,weekNode.PrimaryCollection);
//1.获取组货规则表
var ruleTableNode = searchRuleTable(monthNode);
//1+.获取品类管控规则表 Agnes 20240223 品类管控变更
var controlRuleKeys = searchControlRules(monthNode);
//2.获取目标表
var targetTableNode = searchTargetTable(weekNode);
printLog("获取规则表,目标表完成");
//3.获取计算skc数据表所需要的数据信息
var resultURLs = weekNode.LookProducts;//ac.widget.getQueryResult().store._allResultUrls;
//4. 获取计算所需要的数据,封装到JSON中,便于后续校验和计算
var beginTime = new Date();
//loading = jp.loading(loadingMessage+delim+"获取计算skc数据表所需要的数据信息[开始]");
var skcsData = getAndGroupSKCDataV2(ac,resultURLs, controlRuleKeys);
var allData = {month:monthNode,week:weekNode,target:targetTableNode,rules:ruleTableNode,data:skcsData};
//loading = jp.loading(loadingMessage+delim+"获取计算skc数据表所需要的数据信息[结束] 耗时:"+timeDiff(beginTime,new Date()));
printLog("获取SKC和计算数据完成");
//错误信息声明
var errMsg = [];
var checkErrors = skcsData.errors;
if(checkErrors && checkErrors.length>0){
errMsg.push(checkErrors.join("</BR>"));
}
//20240408 Agnes 获取规则表7的周组货金额上下限
var weekAmountFloatUpper = 1;
var weekAmountFloatLower = 1;
//获取规则表7:组货金额、宽度、平均单价上下限检核条件
var ruleTable7 = filterRuleTable(ruleTableNode, "7", false, null);
ruleTable7.forEach(function(ruleNode){
if(ruleNode.UR_SDS_Dimension == "UR_enum_Dimension:组货金额"){
weekAmountFloatUpper = ruleNode.UR_SDS_BillUpperRate;
weekAmountFloatLower = ruleNode.UR_SDS_BillLowerRate;
return;
}
});
//===================现获取对应的最低深度,然后再进行校验===================
//5. 计算最低深度 - 后续look的校验需要根据最低深度校验,所以需要先获取最低深度,用于初始深度计算
//5.1 主题款最低深度计算
//5.1.1 渠道款最低深度计算
var channelSKCs = skcsData.S.channelSKC;
channelSKCs.forEach(function(skcId){
var skcNode = skcsData.list[skcId];
var skcInitQty = skcNode.initQty;
var skcMinQty = skcNode.minQty;
var price = skcNode.price;
//表5#=SKC标准及LOOK套数的标准值&组货系数
//表6#=南北款店铺数
var tableRuleT5 = filterRuleTable(ruleTableNode,"5",true,{UR_SDS_Month:monthNode.C8_MC_Month,UR_SDS_ProductStyle:monthNode.C8_MC_Style,UR_SDS_ProductLargeType:skcNode.catId});
var tableRuleT6 = filterRuleTable(ruleTableNode,"6",true,{UR_SDS_Month:monthNode.C8_MC_Month,UR_SDS_DesignatedChannels:skcNode.channelType});
if((tableRuleT5 && tableRuleT5.$URL && tableRuleT5.$URL!="") && (tableRuleT6 && tableRuleT6.$URL && tableRuleT6.$URL!="")){
var deep = tableRuleT5.UR_SDS_LowDepth;
var shopCount = tableRuleT6.UR_SDS_StoresNumber;
var ruleQty = deep*shopCount;
printLog("\t渠道款获取最低深度:【"+skcId+"】ruleQty="+ruleQty+" skcMinQty="+skcMinQty);
if(skcMinQty<ruleQty){
skcMinQty = ruleQty;
}
if(skcInitQty<skcMinQty){
skcInitQty = skcMinQty;
}
}else{
printLog("skc="+skcId+"没有找到对应规则表5和表6的组货系数与南北宽店铺数信息!");
}
//记录最低深度和初始深度
skcsData.list[skcId].minQty = skcMinQty;//取最小值存入当前skc数据中
skcsData.list[skcId].initQty = skcInitQty;//计入初始值中
skcsData.list[skcId].initAmount = price*skcInitQty; //计算初始金额
});
//5.1.2 特殊款最低深度计算 - 特殊款、D款、大片款,包含了常销款基本款的D款和大片款计算
var minDeppRul3SKCs = skcsData.minDeepRule3;
//按月按风格
//表3#=月份&风格特殊款最低深度
var tableRuleT3 = filterRuleTable(ruleTableNode,"3",false,{UR_SDS_Month:monthNode.C8_MC_Month,UR_SDS_ProductStyle:monthNode.C8_MC_Style});
minDeppRul3SKCs.forEach(function(skcId){
//lookName:lookName,displayName:displayName,specialTypeName:specialTypeName,channelTypeName:channelTypeName,
var skcNode = skcsData.list[skcId];
var skcInitQty = skcNode.initQty;
var skcMinQty = skcNode.minQty;
var isDStyle = skcNode.isDStyle;
var specialType = skcNode.specialType;
var isSpecialStyle = skcNode.isSpecialStyle;
var isLook = skcNode.isLook;
var price = skcNode.price;
//根据skc属性值,过去对应获取最大值的条件范围
var filterGroup = [];
//获取特殊款最低深度值,用于组货计算
if(isSpecialStyle && !isDStyle){
//非D款和大片款,按照每个特殊值类型的最小深度取最大
filterGroup = [];
if(isLook){
filterGroup.push("LOOK款");
}
if(skcNode.displayName!=""){
filterGroup.push("主橱窗");
}
if(skcNode.specialTypeName!=""){//此处只有可能是英雄款,D款和大片款已经排除
filterGroup.push("英雄款");
}
if(filterGroup.length>0){
var ruleQty = getRuleTableMax(tableRuleT3,"UR_SDS_LowDepth","UR_SDS_SubSpecialType",filterGroup);//根据特殊值过滤取最大
printLog("\t特殊款获取最低深度:isSpecialStyle="+isSpecialStyle+"【"+skcId+"】ruleQty="+ruleQty+" skcMinQty="+skcMinQty);
if(skcMinQty<ruleQty){
skcMinQty = ruleQty;
}
if(skcInitQty<skcMinQty){
skcInitQty = skcMinQty;
}
//记录最低深度和初始深度
skcNode.minQty = skcMinQty;//取最小值存入当前skc数据中
skcNode.initQty = skcInitQty;//计入初始值中
skcNode.initAmount = price*skcInitQty; //计算初始金额
}
}
//D款和大片款,单独记录最低值,用于组货完成后,判断D款和大片款的组货深度不能低于最低深度,如果低于则使用最低深度作为组货建议值,并记录超出金额。
if(isDStyle){
filterGroup = [];
if(getEnumValue(specialType)=="trailer_dedicated"){
filterGroup.push("大片款");
}else if(getEnumValue(specialType)=="SD"){
filterGroup.push("D款");
}
if(filterGroup.length>0){
var ruleQty = getRuleTableMax(tableRuleT3,"UR_SDS_LowDepth","UR_SDS_SubSpecialType",filterGroup);//根据特殊值过滤取最大
printLog("\t特殊款获取最低深度:isDStyle="+isDStyle+"【"+skcId+"】ruleQty="+ruleQty+" skcMinQty="+skcMinQty);
if(ruleQty && ruleQty>0){
//记录最低深度和初始深度
skcNode.minQtyD = ruleQty;//记录D款最小深度值存入当前skc数据中,用于最后组货时判断用
}
}
}
});
//===================以上内容为获取最低深度================================
//===================如下执行校验 开始=====================================
//6. 初步校验
//6.1判断单号是否为表2中特殊款设定的规则
//6.2skc宽度校验、skc数量校验
//6.2.1检查主题款look数量和skc数量
var modsObj = skcsData.S.mods;
var modList = Object.keys(modsObj);
//checkSKCLookCount(errMsg,checkOnly,modList,skcsData,ruleTableNode,weekNode,monthNode)
checkSKCLookCount(errMsg,false,modList,modsObj,skcsData,ruleTableNode,weekNode,monthNode);
//6.2.2常销款、基本款SKC个数校验,价格带校验 规则表1#和9#
var checkTypes = ["R","B"];
//(errMsg,checkTypes,skcsData,ruleTableNode,weekNode,monthNode)
checkSKCCountAndPriceList(errMsg,checkTypes,skcsData,ruleTableNode,weekNode,monthNode);
//6.3按照周目标获取组货宽度、组货金额等目标值, 确认是否需要按照款式宽度校验
//6.3.1只校验常销款和基本款 - 宽度校验
/* 取消常销款、基本款周宽度校验
Object.keys(targetTableNode.weekKey).forEach(function(key){
if(!key.startsWith("S") ){
var weekTargetNode = targetTableNode.weekTarget[key];
var monthTargetNode = weekTargetNode.monthTarget;
if(skcsData.categoryKey[key]){
var skcCount = skcsData.categoryKey[key].skcs; //组货内skc数量
var styleCount = skcsData.categoryKey[key].styles; //组货内款式数量
var weekSKCTarget = weekTargetNode.C8_MCMC_GroupGoodsSKC;//周 组货宽度目标
var weekSCKUpperTarget = weekTargetNode.C8_MCMC_ExcessSKCRemaining;//可超宽度
//组货宽度
var weekSKCDepthTarget = weekSKCTarget+weekSCKUpperTarget;
var monthTargetDisplay = getMonthTargetKey(monthTargetNode,true,false);//非电商
//主题款不进行校验
if(skcCount>weekSKCDepthTarget){
errMsg.push(monthTargetDisplay+"的实际组货深度为【"+skcCount+"】【大于】周目标的组货宽度目标要求--组货宽度加可超宽度之和:【"+weekSKCDepthTarget+"】");
}
}
}
}); */
printLog("=========初步校验完成====");
//校验完成
if(errMsg.length>0){
printLog("errMsg:\n"+errMsg.join("\n"));
var errorMessage = errMsg.join("</BR>");
//如果长度超过1000,则截取1000个字符,避免过长保存出错
if(errorMessage.length > 1000){
errorMessage = errorMessage.substring(0,1000);
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string",errorMessage);
jp.close(loading);
jp.alert(errMsg.join("</BR>"));
return true;
}
//7. 金额回归计算
var subjetStylesKeys = skcsData.S.categoryKey;
var RStylesKeys = skcsData.R.categoryKey;
var BStylesKeys = skcsData.B.categoryKey;
//记录常销款和基础款的品类Key
var RAndBStyleKeys = [];
RAndBStyleKeys = RAndBStyleKeys.concat(RStylesKeys).concat(BStylesKeys);
//S、R、B全部的key
var allStyleKeys = [];
allStyleKeys = allStyleKeys.concat(subjetStylesKeys).concat(RStylesKeys).concat(BStylesKeys);
//R、B款的全部key
var RBCalculationStyles = ["R","B"];
//7.1 常销款、基本款的深度计算
// 判断skc所在款,是否是3个色还是4-6
// 7.1.1 如果是3个色,取三个中skc初始深度值C8_CW_InitialSKCDepth中最大的两个,
// 取表5#中的,标准深度(这里有问题,配置表中只能取到一个,应该可以取到2个值,属性名:单点深度取值)
// 用初始深度除以标准深度,得到的是覆盖门店数(需要增加属性字段数,向上取整),
// 再取其中较小的覆盖门店数,临时保存, 将这个数乘以第三个skc的单点深度取值得到一个组或建议值,这个值跟skc本身的初始组货建议取最大者为这个skc的组货深度建议值,
// 其他两个skc的做活深度初始建议值,即为skc本身的初始组货深度值
// 7.1.2 4-6色
// 获取单点深度取值(标准深度,5#表)
// 取两个最大的初始组货深度,,然后计算覆盖门店数,也是取最小
// 用覆盖门店数*最小的单点深度取值(标准深度)=最低深度中间值1,然后判断较小的2-4个skc的组货深度总和,是否大于前最低深度中间值1
// 如果大于,则使用各自的初始组货金额最为建议的
// 如果小于,则放大比例到最低深度中间值1,
RBCalculationStyles.forEach(function(calType){
skcsData[calType].styles.list.forEach(function(styleId){
var skcsUrlList = skcsData[calType].styles.skcs[styleId];
var skcCount = skcsUrlList.length;
//规则上需要判断SKC数量为3个或大于3个,但是计算上是一样的
if(skcCount>=3){
//先做排序,按照组货初始深度从高到底排序C8_CW_InitialSKCDepth
var sortSkcsUrlList = skcsUrlList.sort((a,b)=>{return skcsData.list[b].initQty-skcsData.list[a].initQty});
var minShopeCount = 0;//覆盖门店数最低
var minInitDeep = 0; //单点深度取值最低
var lowerSKCSumDeep = 0;//除初始深度最高两个skc以外的所有skc的深度汇总之和,用于后续比较
var fixedSumDeep = 0; //锁定的两个最高深度的skc以外的skc深度之和
for(var k=0;k<skcCount;k++){
var oneSKCurl = sortSkcsUrlList[k];
//只有深度最高的两个才需要获取覆盖门店数
var skcNode = skcsData.list[oneSKCurl];
var userFix = skcNode.userFix;
var initQty = skcNode.initQty;
var commodityType = skcNode.commodityType;
var catId = skcNode.catId;
var midCatId = skcNode.midCatId;
var keyName = skcNode.categoryKeyName;
var shopCoverCount = 0;
//获取表5中的标准深度,每个都需要
var standardDeep = 0;
var tableRuleT5 = filterRuleTable(ruleTableNode,"5",true,{UR_SDS_Month:monthNode.C8_MC_Month,UR_SDS_ProductStyle:monthNode.C8_MC_Style,UR_SDS_ProductLargeType:skcNode.catId,UR_SDS_MiddleCategoryType:midCatId});
if(tableRuleT5 && tableRuleT5.UR_SDS_StanderdDepth>0){
standardDeep = tableRuleT5.UR_SDS_StanderdDepth;
skcNode.standardDeep = standardDeep;//将标准深度值记录下来,后续可能需要写入到属性中保存
//前两个取覆盖门店数
if(k<2){
shopCoverCount = parseInt(initQty/standardDeep)+1;
skcNode.shopCoverCount = shopCoverCount;
if(minShopeCount<shopCoverCount){
minShopeCount = shopCoverCount;
}
}else{
//计算其他skc的深度汇总,以及判断最低的标准深度
//如果用户锁定skc,那么不做汇总
if(!userFix){
lowerSKCSumDeep += initQty;
}else{
fixedSumDeep += initQty;
}
if(minInitDeep<standardDeep){
minInitDeep = standardDeep;
}
}
}else{
printLog("warning:没有找到表5#标准深度表或者表格中设置的标准深度为0");
}
printLog("\t常销款与基本款 "+keyName+" skcId=【"+skcNode.skcId+"】的initQty="+initQty+" standardDeep="+standardDeep+" shopCoverCount="+shopCoverCount);
}
//再次计算深度
var calTotalDeep = minShopeCount*minInitDeep - fixedSumDeep; //扣减已经锁定的深度和以后,是可以等比放大的量
if(lowerSKCSumDeep<calTotalDeep && lowerSKCSumDeep>0 && calTotalDeep>0){
var scaleUpPct = calTotalDeep/lowerSKCSumDeep;
//从第三个开始放大
for(var k=2;k<skcCount;k++){
var oneSKCurl = sortSkcsUrlList[k];
//只有深度最高的两个才需要获取覆盖门店数
var skcNode = skcsData.list[oneSKCurl];
var userFix = skcNode.userFix;
if(!userFix){
var initQty = skcNode.initQty;
var scaleUpDeep = parseInt(initQty*scaleUpPct)+1;
skcNode.initQty = scaleUpDeep;//计算对应的组货深度
printLog("\t常销款与基本款 skcId=【"+skcNode.skcId+"】的initQty="+initQty+" scaleUpPct="+scaleUpPct+" scaleUpDeep="+scaleUpDeep);
}
}
}
}
});
});
//7.2特殊款-非D款的金额回归计算
//主题款、常销款、基本款,计算金额挂靠
printLog("=========金额回归计算开始====");
allStyleKeys.forEach(function(key){
var skcsList = skcsData.skcs[key];
if(skcsList && skcsList.length>0){
//获取组货目标
var widthQty = skcsList.length;//组货宽度
var wTarget = targetTableNode.weekTarget[key];//周目标
var mTarget = targetTableNode.monthTarget[key];//月目标
if(wTarget && mTarget){
var monthTargetAmount = wTarget.C8_MCMC_GroupGoodsAmount;//企划金额
var colors = mTarget.Colors;
//前面单号的企划总金额
var preOrder = 0;
//前面单号的已用总金额
var preUseOrder = 0;
for(var i=0;i<colors.length;i++){
if(colors[i] == wTarget.$URL){//循环为周自己本身则要跳出循环
continue;
}
var mcMaterialColorNode = getNode(ac,colors[i]);
var marketingLookNode = getNode(ac,mcMaterialColorNode.C8_MCMC_Week);
if((marketingLookNode.C8_ML_Status == "UR_ZHStatus:Lock") || (marketingLookNode.C8_ML_Status == "UR_ZHStatus:Complete")){
preOrder = preOrder + mcMaterialColorNode.C8_MCMC_GroupGoodsAmount
preUseOrder = preUseOrder + mcMaterialColorNode.C8_MCMC_GroupGoodsAmountFinish-mcMaterialColorNode.C8_MCMC_DAmountFinish; //已经组货金额减掉D款
}
}
var targetAmount = wTarget.C8_MCMC_GroupGoodsAmount;//组货金额目标
//var targetAmount = monthTargetAmount + preOrder - preUseOrder;//组货金额目标
//var canOverAmount = mTarget.C8_MCM_ExcessAmountRemaining;//可超金额剩余--
//var canOverAmount = mTarget.C8_MCM_ExcessAmount;//可超总金额
//var canDeduceAmount = mTarget.C8_MCM_ReduceAmountRemaining;//可减金额剩余--
//var canDeduceAmount = mTarget.C8_MCM_ReduceAmount;//可减总金额
//周组货目标宽度
var weekTargetSKCWidth = wTarget.C8_MCMC_GroupGoodsSKC;//resultJSON.categoryKey[skcCategoryKey].skcs
//实际组货宽度
var actualSKCWidth = skcsData.categoryKey[key].skcs;
//当前初始组货金额汇总
//{total:total,newSKCsList:newSKCsList,fixedTotal:fixedTotal};
var sumObj = sumInitAmount(skcsList,"initQty","initAmount","initAmountPct",skcsData);
var sumAmount = sumObj.total;//总金额
var sumFixedTotal = sumObj.fixedTotal; //用户锁定的金额
var newSKCsList = sumObj.newSKCsList;
//commodityType:commodityType,commodityName:commodityName,
//catId:category,catName:categoryName, midCatId:midCategory,midCatName:midCategoryName,productStyle:productStyle,
var skcNode = skcsData.list[skcsList[0]];
var keyName = skcNode.categoryKeyName;
printLog("分组"+keyName+"组货计算开始==初始组货金额汇总="+sumAmount+" 用户锁定金额="+sumFixedTotal+" 目标组货金额="+targetAmount);
var dimention = "UR_enum_Dimension:组货金额";
//目标金额最大和最小 20240408 最大最小分别为周企划金额*上下限,四单逻辑一样
var minAmount = Math.round(targetAmount*weekAmountFloatLower);
var maxAmount = Math.round(targetAmount*weekAmountFloatUpper);
/*四单逻辑一样
var minAmount = targetAmount-canDeduceAmount;
if(isLastWeek){
minAmount = targetAmount; //如果是最后一单,不扣减可扣金额,与检核逻辑保持一致
}
//var maxAmount = targetAmount+canOverAmount;*/
var finalTotalAmount = 0;//最终组货金额,周
var finalWeekQty = 0;//最终组货深度,周
var scleDownAmount = 0;//缩小或放大后的金额;
printLog("分组"+keyName+"组货计算开始==初始组货金额汇总="+sumAmount+" 用户锁定金额="+sumFixedTotal+" 目标组货金额="+targetAmount+" 可调整金额="+(sumAmount-sumFixedTotal));
printLog("\t目标组货金额最小值="+minAmount+" 目标组货金额最大值="+maxAmount+" 企划宽度="+weekTargetSKCWidth+" 实际宽度="+actualSKCWidth);
//组货宽度低于企划宽度时,向最小金额挂靠
if(actualSKCWidth<weekTargetSKCWidth){
if(sumAmount>minAmount && minAmount>sumFixedTotal && sumAmount>sumFixedTotal){
//大于最大目标额区间,进行金额缩小计算,需考虑最小深度要求
var scalePct = (minAmount-sumFixedTotal)/(sumAmount-sumFixedTotal);
printLog("\t分组"+keyName+"金额大于目标金额最大值,深度缩小处理 倍率="+scalePct);
//计算将initQty缩小后,是否低于最小深度
//return {scaleAmount:scaleSumAmount,success:success,errMsg:errorMsg}
var scaleDownResult = scaleSKCs(scalePct,newSKCsList,sumAmount-sumFixedTotal,minAmount-sumFixedTotal,skcsData,1); // 最后一个参数1,表示最后计算完成金额要大于目标值
if(scaleDownResult && scaleDownResult.success){
scleDownAmount = scaleDownResult.scaleAmount;
printLog("\t分组"+keyName+"金额大于目标金额最大值,缩放完成 组货总金额="+scleDownAmount);
}
finalTotalAmount = scleDownAmount;
}else if(sumAmount<minAmount){
//小于最小目标额区间,进行金额放大计算,无需考虑最小深度要求
var scalePct = (minAmount - sumFixedTotal)/(sumAmount-sumFixedTotal);
printLog("\t分组"+keyName+"金额小于目标金额最小值,深度放大处理 倍率="+scalePct);
scleDownAmount = scaleAmount(scalePct,newSKCsList,skcsData,true,1);//// 最后一个参数1,表示最后计算完成金额要大于目标值
printLog("\t分组"+keyName+"金额小于目标金额最小值,深度放大处理 组货总金额="+scleDownAmount);
finalTotalAmount = scleDownAmount;
}
}else{
if(sumAmount>=minAmount && sumAmount<=maxAmount){
printLog("\t分组"+keyName+"金额符合目标区间要求 组货总金额="+sumAmount);
finalTotalAmount = sumAmount;
}else if(sumAmount<minAmount){
//小于最小目标额区间,进行金额放大计算,无需考虑最小深度要求
var scalePct = (minAmount + wTarget.C8_MCMC_GroupGoodsAvgPriceFinish -sumFixedTotal)/(sumAmount-sumFixedTotal);
printLog("\t分组"+keyName+"金额小于目标金额最小值,深度放大处理 倍率="+scalePct);
scleDownAmount = scaleAmount(scalePct,newSKCsList,skcsData,true,1);// 最后一个参数1,表示最后计算完成金额要大于目标值
printLog("\t分组"+keyName+"金额小于目标金额最小值,深度放大处理 组货总金额="+scleDownAmount);
finalTotalAmount = scleDownAmount;
}else if(sumAmount>maxAmount && maxAmount>sumFixedTotal){
//大于最大目标额区间,进行金额缩小计算,需考虑最小深度要求
var scalePct = (maxAmount-sumFixedTotal)/(sumAmount-sumFixedTotal);
var totalScaleAmount = sumAmount-maxAmount;//全部需要扣减的金额
printLog("\t分组"+keyName+"金额大于目标金额最大值,深度缩小处理 倍率="+scalePct);
//计算将initQty缩小后,是否低于最小深度
//return {scaleAmount:scaleSumAmount,success:success,errMsg:errorMsg}
var scaleDownResult = scaleSKCs(scalePct,newSKCsList,sumAmount-sumFixedTotal,maxAmount-sumFixedTotal,skcsData,-1);// 最后一个参数-1,表示最后计算完成金额要小于目标值
if(scaleDownResult && scaleDownResult.success){
scleDownAmount = scaleDownResult.scaleAmount;
printLog("\t分组"+keyName+"金额大于目标金额最大值,缩放完成 组货总金额="+scleDownAmount);
}
// 不符合时,不提示错误,依然保存结果else{
//else{
// var err = "\t分组"+keyName+"金额大于目标金额最大值,缩放出现错误:"+scaleDownResult.errMsg;
// printLog(err);
// errMsg.push(err);
// }
finalTotalAmount = scleDownAmount;
}
}
}else{
var skcNode = skcsData.list[skcsList[0]];
var keyName = skcNode.categoryKeyName;
var err = "没有找到品类"+keyName+"的周目标,不能组货!";
printLog(err);
errMsg.push(err);
}
}
});
printLog("=========金额回归计算完成====");
printLog("=========常销款、基本款平均价回归计算开始====");
RAndBStyleKeys.forEach(function(key){
var skcsList = skcsData.skcs[key];
if(skcsList && skcsList.length>0){
//获取组货目标,按照单价由高到底排序
var sortSkcsPriceList = skcsList.sort((a,b)=>{return skcsData.list[b].price-skcsData.list[a].price});
var widthQty = skcsList.length;//组货宽度
var wTarget = targetTableNode.weekTarget[key];//周目标
var mTarget = targetTableNode.monthTarget[key];//月目标
if(wTarget && mTarget){
var monthTargetAmount = mTarget.C8_MCM_PlannedAmount;//企划金额
var targetAmount = wTarget.C8_MCMC_GroupGoodsAmount;//组货金额目标
var canOverAmount = mTarget.C8_MCM_ExcessAmountRemaining;//可超金额剩余--
var canDeduceAmount = mTarget.C8_MCM_ReduceAmountRemaining;//可减金额剩余--
var avgPriceUp = mTarget.C8_MCM_AvgPriceHigh;
var avgPriceDown = mTarget.C8_MCM_AvgPriceLow;
//目标金额最大和最小
var minAmount = targetAmount-canDeduceAmount;
var maxAmount = targetAmount+canOverAmount;
//获取skc品类信息,用于日志输出
var skcNode = skcsData.list[skcsList[0]];
var keyName = skcNode.categoryKeyName;
//当前初始组货金额汇总
//{totalSumAmount:总金额,fixedAmount:已锁定总金额,nonFixedAmount:未锁定总金额,avgPrice:平均价,totalQty:总深度};
var sumAmountObj = sumSKCAmount(sortSkcsPriceList,skcsData);
var sumAmount = sumAmountObj.totalSumAmount;
var avgPrice = sumAmountObj.avgPrice;
var initSortSkcsPriceList = getNonUserFixedList(sortSkcsPriceList,skcsData);//非锁定的skc列表,用于成对的增加深度和扣减深度
printLog("分组"+keyName+"平均价回归计算==初始平均价="+avgPrice+" 平均价上限="+avgPriceUp+" 平均价下限="+avgPriceDown);
var finalTotalAmount = 0;//最终组货金额,周
var finalWeekQty = 0;//最终组货深度,周
var scleDownAmount = 0;//缩小或放大后的金额;
if(avgPrice>=avgPriceDown && avgPrice<=avgPriceUp){
printLog("分组"+keyName+"平均价回归计算==平均价在上下限范围内,无需计算==完成");
}else if(avgPrice<avgPriceDown){
//平均价比较低,所以需要增加大于平均价的的skc的深度,同时减少低于平均价的skc的深度,此时总金额可能呈现上升趋势
printLog("分组"+keyName+"平均价回归计算==平均价在下限范围以下,需调高平均价");
avgPrice = scaleUpAvgPrice(sortSkcsPriceList,initSortSkcsPriceList,skcsData,avgPrice,avgPriceDown,sumAmount,minAmount,maxAmount,1,0);
printLog("分组"+keyName+"平均价回归计算==平均价在下限范围以下,需调高平均价==完成==avgPrice="+avgPrice);
}else if(avgPrice>avgPriceUp){
//平均价比较高,所以需要减少大于平均价的的skc的深度,同时增加低于平均价的skc的深度,此时总金额可能呈现下降趋势
printLog("分组"+keyName+"平均价回归计算==平均价在上限范围以上,需调低平均价");
avgPrice = scaleDownAvgPrice(sortSkcsPriceList,initSortSkcsPriceList,skcsData,avgPrice,avgPriceUp,sumAmount,minAmount,maxAmount,1,0);
printLog("分组"+keyName+"平均价回归计算==平均价在上限范围以上,需调低平均价==完成==avgPrice="+avgPrice);
}
}else{
var skcNode = skcsData.list[skcsList[0]];
var keyName = skcNode.categoryKeyName;
var err = "没有找到品类"+keyName+"的周目标,不能组货!";
printLog(err);
errMsg.push(err);
}
}
});
printLog("=========常销款、基本款平均价回归计算完成====");
printLog("=========计算完成、开始保存数据====");
//计算完成
if(errMsg.length>0){
printLog("errMsg:\n"+errMsg.join("\n"));
var errorMessage = errMsg.join("</BR>");
//如果长度超过1000,则截取1000个字符,避免过长保存出错
if(errorMessage.length > 1000){
errorMessage = errorMessage.substring(0,1000);
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string",errorMessage);
jp.close(loading);
jp.alert(errMsg.join("</BR>"));
return true;
}else{
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Errors","string","");
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Lock");//组货结果状态,锁定SKC可编辑
}
printLog("=========没有错误,保存计算结果====");
//8. 保存数据,返回结果
//8.1 检查数据是否有结果,将结果写入skc,先处理主题款结果写入
//主题款、常销款、基本款的计算结果保存
allStyleKeys.forEach(function(key){
var skcsList = skcsData.skcs[key];
var totalExceedAmountDStyle = 0;//D款和大片款超出金额计算
if(skcsList && skcsList.length>0){
//获取组货目标
var widthQty = skcsList.length;//组货宽度
var wTarget = targetTableNode.weekTarget[key];//周目标
var mTarget = targetTableNode.monthTarget[key];//月目标
var finalTotalAmount = 0;
var finalWeekQty = 0;
if(wTarget && mTarget){
skcsList.forEach(function(skcId){
var skcNode = skcsData.list[skcId];
var isDStyle = skcNode.isDStyle;
var initQty = skcNode.initQty;
var minQty = skcNode.minQty;
var minQtyD = skcNode.minQtyD;
var price = skcNode.price;
var userFix = skcNode.userFix;
var dAmount = 0;//D款和大片款超出金额
if(isDStyle){
if(initQty<minQtyD){
dAmount = (minQtyD-initQty)*price;
printLog("\tskc【"+skcNode.skcName+"】为D款大片款,initQty"+initQty+" minQtyD="+minQtyD+" 超出金额=="+dAmount);
totalExceedAmountDStyle += dAmount;//D款大片款超出金额
initQty = minQtyD;
}
//如果是D款,非特殊款等情况,没有最低深度限制,则获取D款大片款的最低深度
if(minQty==0 && minQtyD>0){
minQty = minQtyD;
}
}
var amount = price*initQty;
finalTotalAmount += amount;//周组货总金额
finalWeekQty += initQty; //组货深度
var mcpPrice = skcNode.mcpPrice;
if(initQty!=0){
ac.m_writer.changeNode(skcNode.mcpId)
.changeAttribute("C8_MCP_SuggestedDepth","integer",initQty)
.changeAttribute("C8_MCP_SuggestedAmount","double",amount)
.changeAttribute("C8_MCP_DLowDepth","integer",minQtyD)
.changeAttribute("C8_MCP_DExcessAmount","double",dAmount);
if(!(skcNode.look1 || skcNode.look2 || skcNode.look3|| skcNode.look4|| skcNode.look5|| skcNode.look6)){
ac.m_writer.changeNode(skcNode.mcpId).changeAttribute("C8_MCP_SpecialLowDepth","integer",minQty);
}else{
ac.m_writer.changeNode(skcNode.mcpId).changeAttribute("C8_MCP_SpecialLowDepth","integer",0);
}
//南北款,D款,大片款,英雄款, 主橱窗款
if(skcNode.channelType == "UR_enum_NSStyle:01" ||skcNode.channelType == "UR_enum_NSStyle:02" || skcNode.specialType == "UR_enum_Special:SD" || skcNode.specialType == "UR_enum_Special:trailer_dedicated" || skcNode.specialType == "UR_enum_Special:hero_dedicated" || skcNode.display == "UR_enum_DisplayType:DZ" || skcNode.display == "UR_enum_DisplayType:DW"){
ac.m_writer.changeNode(skcNode.mcpId).changeAttribute("C8_MCP_SpecialLowDepth","integer",minQty);
}
}
if(!userFix){
ac.m_writer.changeNode(skcNode.mcpId).changeAttribute("C8_MCP_AdjustingDepth","integer",initQty);
}
if(price!=mcpPrice){
ac.m_writer.changeNode(skcNode.mcpId).changeAttribute("C8_MCP_Price","double",price);
}
});
printLog("\t组货key=【"+key+"】完成,组货金额="+finalTotalAmount+" 组货宽度="+widthQty+" 组货深度=="+finalWeekQty +" D款大片款超出金额="+totalExceedAmountDStyle);
}
}
});
printLog("=========保存计算结果完成====");
//9. 结束返回
jp.close(loading);
if(currentNode && currentNode.$Type=="MarketingLook"){
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.widget.refreshData();
}
//重新加载页面
window.location.reload();
return true;
},
//国内组货确认
C8_GuoNeiConfirm:function(ac){
var currentNode = routerStore.locationNode;
//是否设计师系列
var isDesignerStyle = false;
if(currentNode.$Type == "MarketingCollection"){
isDesignerStyle = (currentNode.C8_MC_Style == "UR_enum_ProductStyle:WA" ? true : false);
}
var loadingMessage = "正在执行组货确认,请耐心等待................";
var delim = "</BR>";
var loading = jp.loading(loadingMessage);
debugger
var weekURL = ac.m_urlParent;
var weekNode = getNode(ac,weekURL);
ac.m_writer.execute({sync: true});
var errorMsg = checkRequiredToConfirm(ac, 1);
if (errorMsg) {
jp.alert(errorMsg);
return
}
var flag = false;
flag = ConfirmGuoNeiZHV2(ac, false, false, flag, isDesignerStyle);
//结束返回
jp.close(loading);
var groupOrderAattribute = null;
if(currentNode && currentNode.$Type=="MarketingLook"){
if(flag){
weekURL = currentNode.$URL;
weekNode = getNode(ac, currentNode.$URL);
c.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.__Parent__).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.__Parent__);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
}
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
if(flag){
ac.m_writer.changeNode(weekURL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.$URL);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
}
ac.widget.refreshData();
}
if(flag){
var LookProducts = weekNode.LookProducts;
for (var i = 0; i < LookProducts.length; i++) {
var lookProductNode = getNode(ac, LookProducts[i]);
updateURStyleAttributesGroupBillNo(ac, lookProductNode, groupOrderAattribute, currentNode, weekNode.C8_ML_Week, true, 0);
}
//记录第一次买手确认的时间
if(weekNode.C8_ML_CompleteTime == 0){
ac.m_writer.changeNode(weekURL).changeAttributeExp("C8_ML_CompleteTime", "nowTime()", true);
}
//设置SKC下买手确认的时间
var LookProducts = weekNode.LookProducts;
for(var i =0;i<LookProducts.length;i++){
var lookProductNode = getNode(ac,LookProducts[i]);
var skcNode = getNode(ac,lookProductNode.C8_MCP_SKC);
if(skcNode.C8_CW_CompleteTime == 0){
ac.m_writer.changeNode(skcNode.$URL).changeAttributeExp("C8_CW_CompleteTime", "nowTime()", true);
}
}
// ac.m_writer.execute({sync: true});
if(currentNode && currentNode.$Type=="MarketingLook"){
if(flag){
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.__Parent__).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
}
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
if(flag){
ac.m_writer.changeNode(weekURL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
}
ac.widget.refreshData();
}
var mentions = getGroup(ac, "海外买手");
var mentions1 = getGroup(ac, "电商买手");
mentions.concat(mentions1);
var subject = "组货确认消息";//主题
var comments = currentNode.$Name + "的" + weekNode.$Name + "组货已确认";//消息文本
var monthNode = getNode(ac,weekNode.PrimaryCollection);
var docContainer = monthNode.DocumentsAndComments;
createConversation(ac, docContainer, subject, mentions, comments);
//发送邮件
SendMailToRole(ac,"海外买手","测试:" + subject,comments,"");
SendMailToRole(ac,"电商买手","测试:" + subject,comments,"");
}
return true;
},
//国内组货强制确认
C8_GuoNeiConfirmForce:function(ac){
var currentNode = routerStore.locationNode;
//是否设计师系列
var isDesignerStyle = false;
if(currentNode.$Type == "MarketingCollection"){
isDesignerStyle = (currentNode.C8_MC_Style == "UR_enum_ProductStyle:WA" ? true : false);
}
var loadingMessage = "正在执行组货强制确认,请耐心等待................";
var loading = jp.loading(loadingMessage);
var errorMsg = checkRequiredToConfirm(ac, 1);
if (errorMsg) {
jp.alert(errorMsg);
return
}
var flag = true;
//错误信息声明
ConfirmGuoNeiZHV2(ac,true,false,flag,isDesignerStyle);
//结束返回
jp.close(loading);
var weekURL = ac.m_urlParent;
var weekNode = getNode(ac,weekURL);
var groupOrderAattribute = null;
if(currentNode && currentNode.$Type=="MarketingLook"){
if(flag){
weekURL = currentNode.$URL;
weekNode = getNode(ac, currentNode.$URL);
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.__Parent__).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.__Parent__);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
}
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
if(flag){
ac.m_writer.changeNode(weekURL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.$URL);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
}
ac.widget.refreshData();
}
if (flag){
var LookProducts = weekNode.LookProducts;
for(var i =0;i<LookProducts.length;i++){
var lookProductNode = getNode(ac,LookProducts[i]);
updateURStyleAttributesGroupBillNo(ac, lookProductNode, groupOrderAattribute, currentNode, weekNode.C8_ML_Week, true, 0);
}
}
var mentions = getGroup(ac, "海外买手");
var mentions1 = getGroup(ac, "电商买手");
mentions.concat(mentions1);
var subject = "组货确认消息";//主题
var comments = currentNode.$Name + "的" + weekNode.$Name + "组货已确认";//消息文本
var monthNode = getNode(ac,weekNode.PrimaryCollection);
var docContainer = monthNode.DocumentsAndComments;
createConversation(ac, docContainer, subject, mentions, comments);
//发送邮件
SendMailToRole(ac,"海外买手","测试:" + subject,comments,"");
SendMailToRole(ac,"电商买手","测试:" + subject,comments,"");
return true;
},
//组货确认校验通过后-邏輯
C8_ConfirmLogic:function(ac, lookProductNode, currentNode){
var styleUrl = lookProductNode.ProductStyle;
var style = getNode(ac,styleUrl);
var styleAttr = getNode(ac,style.Attributes);
if(!styleAttr.UR_StyleAttributes_GroupBillNo){
ac.m_writer.changeNode(styleAttr.$URL).changeAttribute("UR_StyleAttributes_GroupBillNo","enum",currentNode.C8_ML_Week);
}
var colorwayUrl = lookProductNode.C8_MCP_SKC;
var colorway = getNode(ac,colorwayUrl);
if (!colorway.UR_Colorway_OKCode) {
var monthNodeUrl = lookProductNode.__Parent__;
var monthNode = getNode(ac,monthNodeUrl);
var orderType = getEnumValue(monthNode.C8_MC_MonthOrderAattribute);
if(orderType && (orderType==="E" || orderType==="F" || orderType==="T")){
// 如果是应急单,则填坑式组货
ac.m_writer.changeNode(colorwayUrl).changeAttribute("UR_Colorway_OKCode","string",colorway.UR_Colorway_GroUnCode);
}else{
// 模块最大化组货
ac.m_writer.changeNode(colorwayUrl).changeAttribute("UR_Colorway_OKCode","string",colorway.UR_Colorway_PLMUniqueValue);
}
}
},
//国内组货检核
C8_GuoNeiCheck:function(ac){
var currentNode = routerStore.locationNode;
//是否设计师系列
var isDesignerStyle = false;
if(currentNode.$Type == "MarketingCollection"){
isDesignerStyle = (currentNode.C8_MC_Style == "UR_enum_ProductStyle:WA" ? true : false);
}
var loadingMessage = "正在执行组货检核,请耐心等待................";
var loading = jp.loading(loadingMessage);
var flag = true;
//错误信息声明
ConfirmGuoNeiZHV2(ac,false,true,flag,isDesignerStyle);
//结束返回
jp.close(loading);
if(currentNode && currentNode.$Type=="MarketingLook"){
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.widget.refreshData();
}
if (ac.widget.viewParent.getChildView("MCMaterials") != undefined) {
ac.widget.viewParent.getChildView("MCMaterials").refreshData();
}
return true;
},
//电商组货计算
C8_DianShangCalculate:function(ac) {
var currentNode = routerStore.locationNode;
var loadingMessage = "正在执行组货计算,请耐心等待................";
var delim = "</BR>";
var loading = jp.loading(loadingMessage);
var processingTime = "总执行时间:";
var stepInfo = "";
var weekURL = ac.m_urlParent;
printLog("========电商组货开始执行==========");
var weekNode = getNode(ac,weekURL);
var monthNode = getNode(ac,weekNode.PrimaryCollection);
//1.获取规则表
var ruleTableNode = searchRuleTable(monthNode);
//1+.获取品类管控规则表 Agnes 20240223 品类管控变更
var controlRuleKeys = searchControlRules(monthNode);
//2.获取目标表
var targetTableNode = searchTargetTableDianShang(weekNode);
printLog("获取规则表,目标表完成");
//3.获取计算skc数据表所需要的数据信息
var resultURLs = weekNode.LookProducts;//ac.widget.getQueryResult().getChildResultUrls();
//4. 获取计算所需要的数据,封装到JSON中,便于后续校验和计算
var skcsData = getDianShangGroupSKCData(ac,resultURLs,controlRuleKeys,false);
//6. 开始计算
Object.keys(skcsData.categoryKey).forEach(function(key){
var categoryObj = skcsData.categoryKey[key];
var wTarget = targetTableNode.weekTarget[key];//周目标
var mTarget = targetTableNode.monthTarget[key];//月目标
if(mTarget && wTarget){
//5. 获取规则表中D款的最低深度 20240409 新增商品层、品类、中品类过滤
var tableRuleK = filterRuleTable(ruleTableNode,"K",true,{UR_SDS_Month:monthNode.C8_MC_Month,UR_SDS_CommodityType:mTarget.C8_MCM_CommodityType,UR_SDS_ProductLargeType:mTarget.C8_MCM_ProductLargeType,UR_SDS_MiddleCategoryType:mTarget.C8_MCM_CategoryInPlan});
var minQtyDStyle = 0;
if(tableRuleK && tableRuleK.UR_SDS_DLowDepth){
minQtyDStyle = tableRuleK.UR_SDS_DLowDepth;
}
//var wTargetAmount = wTarget.C8_MCMC_GroupGoodsAmount;//企划金额
//var wTargetSKCs = wTarget.C8_MCMC_GroupGoodsSKC;//企划宽度
var planStyleDeep = mTarget.C8_MCM_PlannedStyleDepth;
var averageAmount = 0;
var skcMinQty = 0;
var widthQty = categoryObj.list.length;//组货宽度
var finalTotalAmount = 0;
var finalWeekQty = 0;
categoryObj.list.forEach(function(skcId){
var skcNode = skcsData.list[skcId];
var mcpId = skcNode.mcpId;
var isDStyle = skcNode.isDStyle;
var initQty = planStyleDeep;
var price = skcNode.price;
var isDStyle = skcNode.isDStyle;
var userFix = skcNode.userFix;
var minQty = 0;
//20240409 Agnes 普通款最低深度获取新增订单属性、商品层、风格、电商级别过滤
var tableRuleX = filterRuleTable(ruleTableNode,"X",true,{UR_SDS_GroupOrderAattribute:monthNode.C8_MC_MonthOrderAattribute,UR_SDS_CommodityType:skcNode.commodityType,UR_SDS_ProductStyle:monthNode.C8_MC_Style,UR_SDS_DSLevel:skcNode.suggestClass,UR_SDS_ProductLargeType:mTarget.C8_MCM_ProductLargeType,UR_SDS_MiddleCategoryType:mTarget.C8_MCM_CategoryInPlan});
if(tableRuleX && tableRuleX.UR_SDS_LowDepth){
skcMinQty = tableRuleX.UR_SDS_LowDepth;
}
if(isDStyle){
minQty = minQtyDStyle;
}else{
minQty = skcMinQty;
}
var initAmount = initQty*price;
var classLevel = skcNode.suggestClass;
finalTotalAmount +=initAmount;//记录组货完成金额
finalWeekQty += initQty;//记录组货深度
var mcpPrice = skcNode.mcpPrice;
//if(initQty!=0){去掉目标组货深度条件
//var suggestClass = getClassLevel(initQty,classLevelKey,targetTableNode);
ac.m_writer.changeNode(mcpId)
.changeAttribute("C8_MCP_SuggestedDepth","integer",initQty)
.changeAttribute("C8_MCP_SuggestedAmount","double",initAmount)
.changeAttribute("C8_MCP_AdjustingLevel","enum",classLevel)//组货等级
.changeAttribute("C8_MCP_SpecialLowDepth","integer",minQty);//只有D款有最低深度
if(price!=mcpPrice){
ac.m_writer.changeNode(mcpId).changeAttribute("C8_MCP_Price","double",price);
}
if(!userFix){
ac.m_writer.changeNode(mcpId).changeAttribute("C8_MCP_AdjustingDepth","integer",initQty);
}
//}
});
printLog("\t组货key=【"+key+"】完成,组货金额="+finalTotalAmount+" 组货宽度="+widthQty+" 组货深度=="+finalWeekQty);
//将结果写入到周目标上 - 临时,后续改到组货确认时计算
ac.m_writer.changeNode(wTarget.$URL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish","double",finalTotalAmount);//组货金额
ac.m_writer.changeNode(wTarget.$URL).changeAttribute("C8_MCMC_GroupGoodsSKCFinish","integer",widthQty);//组货宽度
ac.m_writer.changeNode(wTarget.$URL).changeAttribute("C8_MCMC_GroupGoodsDepthFinish","integer",finalWeekQty);//组货深度
if(finalWeekQty!=0){
ac.m_writer.changeNode(wTarget.$URL).changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish","double",finalTotalAmount/finalWeekQty);//组货深度平均价
}
}
});
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Lock");//组货结果状态,锁定SKC可编辑
printLog("=========保存计算结果完成====");
//9. 结束返回
jp.close(loading);
if(currentNode && currentNode.$Type=="MarketingLook"){
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.widget.refreshData();
}
//重新加载页面
window.location.reload();
return true;
},
//电商组货确认
C8_DianShangConfirm:function(ac) {
var currentNode = routerStore.locationNode;
var loadingMessage = "正在执行组货确认,请耐心等待................";
var loading = jp.loading(loadingMessage);
//是否设计师系列
var isDesignerStyle = false;
if(currentNode.$Type == "MarketingCollection"){
isDesignerStyle = (currentNode.C8_MC_Style == "UR_enum_ProductStyle:WA" ? true : false);
}
var errorMsg = checkRequiredToConfirm(ac, 2);
if (errorMsg) {
jp.alert(errorMsg);
return
}
var flag = DianShangConfirmZH(ac, false, false, isDesignerStyle);
//9. 结束返回
jp.close(loading);
if(flag){
var weekURL = ac.m_urlParent;
var weekNode = getNode(ac,weekURL);
//设置C8_CW_DSChangeTag 为false
var LookProducts = weekNode.LookProducts;
for(var i =0;i<LookProducts.length;i++){
var lookProductNode = getNode(ac,LookProducts[i]);
var skcNode = getNode(ac,lookProductNode.C8_MCP_SKC);
if(skcNode.C8_CW_CompleteTime){
ac.m_writer.changeNode(skcNode.$URL).changeAttribute("C8_CW_DSChangeTag", "boolean", false);
}
}
// var LookProducts = weekNode.LookProducts;
// for(var i =0;i<LookProducts.length;i++){
// var lookProductNode = getNode(ac,LookProducts[i]);
// this.C8_ConfirmLogic(ac, lookProductNode, currentNode);
// var colorwayUrl = lookProductNode.C8_MCP_SKC;
// var storeVolumnSum = 0;
// var storeVolumnObj = lookProductNode.C8_MCP_StoreVolumn;
// if (storeVolumnObj && JSON.stringify(storeVolumnObj) != '{}') {
// for(let key in storeVolumnObj) {
// if (storeVolumnObj.hasOwnProperty(key)) {
// storeVolumnSum += storeVolumnObj[key]; // 将每个属性值加到求和变量上
// }
// }
// }
// ac.m_writer.changeNode(colorwayUrl).changeAttribute("C8_CW_DSDepth","integer",storeVolumnSum);
// }
// ac.m_writer.execute({sync: true});
var groupOrderAattribute = null;
if (currentNode && currentNode.$Type == "MarketingLook") {
if (flag) {
weekURL = currentNode.$URL;
weekNode = getNode(ac, currentNode.$URL);
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.__Parent__).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.__Parent__);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
}
ac.widget.viewParent.refreshData();
} else if (currentNode && currentNode.$Type == "MarketingCollection") {
if (flag) {
ac.m_writer.changeNode(weekURL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.$URL);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
}
ac.widget.refreshData();
}
if (flag) {
var LookProducts = weekNode.LookProducts;
for (var i = 0; i < LookProducts.length; i++) {
var lookProductNode = getNode(ac, LookProducts[i]);
updateURStyleAttributesGroupBillNo(ac, lookProductNode, groupOrderAattribute, currentNode, weekNode.C8_ML_Week, true, 1);
}
}
//0605 电商组货取消发送通知
/*var mentions = getGroup(ac, "电商买手");
var subject = "组货确认消息";//主题
var comments = currentNode.$Name + "的" + weekNode.$Name + "组货已确认";//消息文本
var monthNode = getNode(ac,weekNode.PrimaryCollection);
var docContainer = monthNode.DocumentsAndComments;
createConversation(ac, docContainer, subject, mentions, comments);*/
}
//刷新数据
if(currentNode && currentNode.$Type=="MarketingLook"){
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.widget.viewParent.refreshData();
}
return true;
},
//电商强制确认
C8_DianShangConfirmForce:function(ac) {
var currentNode = routerStore.locationNode;
var loadingMessage = "正在执行组货确认,请耐心等待................";
var loading = jp.loading(loadingMessage);
var flag = true;
//是否设计师系列
var isDesignerStyle = false;
if(currentNode.$Type == "MarketingCollection"){
isDesignerStyle = (currentNode.C8_MC_Style == "UR_enum_ProductStyle:WA" ? true : false);
}
var errorMsg = checkRequiredToConfirm(ac, 2);
if (errorMsg) {
jp.alert(errorMsg);
return
}
DianShangConfirmZH(ac, true, false, isDesignerStyle);
//9. 结束返回
jp.close(loading);
var weekURL = ac.m_urlParent;
var weekNode = getNode(ac,weekURL);
// ac.m_writer.execute({sync: true});
var groupOrderAattribute = null;
if(currentNode && currentNode.$Type=="MarketingLook"){
if (flag) {
weekURL = currentNode.$URL;
weekNode = getNode(ac, currentNode.$URL);
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.__Parent__).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.__Parent__);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
}
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
if (flag) {
ac.m_writer.changeNode(weekURL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.$URL);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
}
ac.widget.refreshData();
}
if (flag) {
var LookProducts = weekNode.LookProducts;
for (var i = 0; i < LookProducts.length; i++) {
var lookProductNode = getNode(ac, LookProducts[i]);
updateURStyleAttributesGroupBillNo(ac, lookProductNode, groupOrderAattribute, currentNode, weekNode.C8_ML_Week, true, 1);
}
}
//0605 电商确认时取消发送通知
// var mentions = getGroup(ac, "电商买手");
// var subject = "组货确认消息";//主题
// var comments = currentNode.$Name + "的" + weekNode.$Name + "组货已确认";//消息文本
// var monthNode = getNode(ac,weekNode.PrimaryCollection);
// var docContainer = monthNode.DocumentsAndComments;
// createConversation(ac, docContainer, subject, mentions, comments);
//重新加载页面
window.location.reload();
return true;
},
//电商检核
C8_DianShangCheck:function(ac) {
var currentNode = routerStore.locationNode;
var loadingMessage = "正在执行组货检核,请耐心等待................";
var loading = jp.loading(loadingMessage);
//是否设计师系列
var isDesignerStyle = false;
if(currentNode.$Type == "MarketingCollection"){
isDesignerStyle = (currentNode.C8_MC_Style == "UR_enum_ProductStyle:WA" ? true : false);
}
DianShangConfirmZH(ac, false, true, isDesignerStyle)
//9. 结束返回
jp.close(loading);
if(currentNode && currentNode.$Type=="MarketingLook"){
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.widget.viewParent.refreshData();
}
return true;
},
//展示错误信息
C8_ShowError:function(ac) {
var mlNode = getNode(ac,ac.m_urlParent);
var errorMsg = mlNode.C8_ML_Errors;
if(errorMsg){
jp.alert("当前错误信息如下:</BR>"+errorMsg);
}else{
jp.success("当前没有错误信息!");
}
return true;
},
//有错误时,才显示按钮
C8_ShowErrorAccessAction: function(/*Context*/ctx, /*Action*/action) {
var contextURL = ctx.view.urlRoot;
var contextNode = ctx.cache.getNode(contextURL);
var hasAccess = false;
if(contextNode && contextNode.$Type=="MarketingLook"){
var errors = contextNode.C8_ML_Errors;
if(errors!=""){
hasAccess = true;
}
}
return hasAccess;
},
//海外组货确认
C8_HaiWaiConfirm:function(ac) {
HaiWaiCalculate(ac,true,false);
return true;
},
//海外组货强制确认 第三个参数控制强制
C8_HaiWaiQZConfirm:function(ac){
HaiWaiCalculate(ac,true,true);
return true;
},
//海外组货计算 Jarivis
C8_HaiWaiCalculate:function (ac) {
HaiWaiCalculate(ac,false,false);
return true;
},
//欧美组货确认
C8_HaiWaiConfirmOM:function(ac) {
HaiWaiCalculateOM(ac,true,false);
return true;
},
//欧美组货强制确认 第三个参数控制强制
C8_HaiWaiQZConfirmOM:function(ac){
HaiWaiCalculateOM(ac,true,true);
return true;
},
//欧美组货计算 Jarivis
C8_HaiWaiCalculateOM:function (ac) {
HaiWaiCalculateOM(ac,false,false);
return true;
},
//点击组货按钮带出产品等级
C8_setStoreLevel:function(ac){
var MCProductNode = getNode(ac,ac.m_urlNode);
var colorNode = getNode(ac,MCProductNode.C8_MCP_SKC);
var level = colorNode.C8_CW_StoreLevel;
var levelList = Object.entries(MCProductNode.C8_MCP_StoreLevel);
var lockhy = MCProductNode.C8_MCP_SKCLockhy;
var map = new Map();
for (var t = 0; t < levelList.length; t++) {
if(lockhy[levelList[t][0]] == undefined || !lockhy[levelList[t][0]]) {
map[levelList[t][0]] = level;
}
}
var search = new Search();
var q = search.getQuery();
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "Customer");
var res = search.execute({sync: true});
var results = res.getResultNodes();
if(results){
results.forEach(function(customer){
var customerUrl = customer.$URL;
map.set(customerUrl, level)
});
}
ac.m_writer.changeNode(MCProductNode.$URL).changeAttribute("C8_MCP_StoreLevel","enummap",map,true,false);
ac.m_writer.execute({sync:true});
return true;
},
//从单号中移除组货SKC后删除对应MCProdwuct
C8_PostDeleteMCP:function(ac){
var mcp = ac.m_urlNode;
var mcpNode = getNode(ac,mcp);
var viewId = ac.widget.defView.m_id;
var attName = "";
if(viewId=="MCProducts"){
attName = "C8_CW_GNPick";
}else if(viewId=="C8_MCProductsDS"){
attName = "C8_CW_DSPick";
}else if(viewId=="C8_GroupGoodsGallery"){
attName = "C8_CW_HWPick";
}
if(attName !="" && mcpNode && mcpNode.C8_MCP_SKC && mcpNode.C8_MCP_SKC!="centric:"){
ac.m_writer.changeNode(mcpNode.C8_MCP_SKC).changeAttribute(attName,"boolean",false);
}
ac.m_writer.deleteNode(mcp,true);
ac.m_writer.execute({sync:true});
return true;
},
//锁定组货页面
C8_LockWeek:function(ac){
var currentNode = routerStore.locationNode;
var weekURL = ac.m_urlParent;
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Lock");
if(currentNode && currentNode.$Type=="MarketingLook"){
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.widget.refreshData();
}
return true;
},
//解锁组货页面
C8_UnLockWeek:function(ac){
var currentNode = routerStore.locationNode;
var weekURL = ac.m_urlParent;
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Start");
if(currentNode && currentNode.$Type=="MarketingLook"){
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.widget.refreshData();
}
var weekURL = ac.m_urlParent;
var weekNode = getNode(ac,weekURL);
var mentions = getGroup(ac, "海外买手");
var mentions1 = getGroup(ac, "电商买手");
mentions.concat(mentions1);
var subject = "组货取消消息";//主题
var comments = currentNode.$Name + "的" + weekNode.$Name + "标签已解锁";//消息文本
var monthNode = getNode(ac,weekNode.PrimaryCollection);
var docContainer = monthNode.DocumentsAndComments;
createConversation(ac, docContainer, subject, mentions, comments);
//发送邮件
SendMailToRole(ac,"海外买手","测试:" + subject,comments,"");
SendMailToRole(ac,"电商买手","测试:" + subject,comments,"");
//重新加载页面
window.location.reload();
return true;
},
//欧美组货取消
C8_HaiWaiCancellConfirmOM:function(ac){
var weekURL = ac.m_urlParent;
var currentNode = routerStore.locationNode;
var weekNode = getNode(ac,weekURL);
let sameMeg = checkSameMLIsZHing(ac,weekURL);
if (sameMeg) {
jp.alert(sameMeg);
return sameMeg;
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Start");
//取消时更新数据 20240408
HaiWaiCalculateClean(ac);
if(currentNode && currentNode.$Type=="MarketingLook"){
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.widget.refreshData();
}
var mentions = getGroup(ac, "海外买手");
var mentions1 = getGroup(ac, "电商买手");
mentions.concat(mentions1);
var subject = "组货取消消息";//主题
var comments = currentNode.$Name + "的" + weekNode.$Name + "组货已取消";//消息文本
var monthNode = getNode(ac,weekNode.PrimaryCollection);
var docContainer = monthNode.DocumentsAndComments;
createConversation(ac, docContainer, subject, mentions, comments);
//发送邮件
SendMailToRole(ac,"海外买手","测试:" + subject,comments,"");
SendMailToRole(ac,"电商买手","测试:" + subject,comments,"");
var LookProducts = weekNode.LookProducts;
for(var i =0;i<LookProducts.length;i++){
var lookProductNode = getNode(ac,LookProducts[i]);
var skcNode = getNode(ac,lookProductNode.C8_MCP_SKC);
ac.m_writer.changeNode(skcNode.$URL).changeAttribute("C8_CW_HWDepth","integer","0");
// this.C8_CancellConfirmCleanData(ac, lookProductNode);
//0530 Jarvis 渠道款设置编辑
var styleNode = getNode(ac,skcNode.__Parent__);
ac.m_writer.changeNode(styleNode.$URL).changeAttributeFlag("UR_Style_KNSStyle", xml.ATTR_FLAG_NOEDIT, false,true);
ac.m_writer.changeNode(styleNode.Attributes).changeAttributeFlag("UR_StyleAttributes_GroupCarPrice", xml.ATTR_FLAG_NOEDIT, false,true);
}
var groupOrderAattribute = null;
if(currentNode && currentNode.$Type=="MarketingLook"){
weekURL = currentNode.$URL;
weekNode = getNode(ac, currentNode.$URL);
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.__Parent__).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.__Parent__);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.m_writer.changeNode(weekURL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.$URL);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
ac.widget.refreshData();
}
var LookProducts = weekNode.LookProducts;
for (var i = 0; i < LookProducts.length; i++) {
var lookProductNode = getNode(ac, LookProducts[i]);
updateURStyleAttributesGroupBillNo(ac, lookProductNode, groupOrderAattribute, currentNode, weekNode.C8_ML_Week, false, 2);
}
if (ac.widget.viewParent.getChildView("C8_MCMaterialsHW") != undefined) {
ac.widget.viewParent.getChildView("C8_MCMaterialsHW").refreshData();
}
return true;
},
//海外组货取消
C8_HaiWaiCancellConfirm:function(ac){
var weekURL = ac.m_urlParent;
var currentNode = routerStore.locationNode;
var weekNode = getNode(ac,weekURL);
let sameMeg = checkSameMLIsZHing(ac,weekURL);
if (sameMeg) {
jp.alert(sameMeg);
return sameMeg;
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Start");
//取消时更新数据 20240408
HaiWaiCalculateClean(ac);
if(currentNode && currentNode.$Type=="MarketingLook"){
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.widget.refreshData();
}
var mentions = getGroup(ac, "海外买手");
var mentions1 = getGroup(ac, "电商买手");
mentions.concat(mentions1);
var subject = "组货取消消息";//主题
var comments = currentNode.$Name + "的" + weekNode.$Name + "组货已取消";//消息文本
var monthNode = getNode(ac,weekNode.PrimaryCollection);
var docContainer = monthNode.DocumentsAndComments;
createConversation(ac, docContainer, subject, mentions, comments);
//发送邮件
SendMailToRole(ac,"海外买手","测试:" + subject,comments,"");
SendMailToRole(ac,"电商买手","测试:" + subject,comments,"");
var LookProducts = weekNode.LookProducts;
for(var i =0;i<LookProducts.length;i++){
var lookProductNode = getNode(ac,LookProducts[i]);
var skcNode = getNode(ac,lookProductNode.C8_MCP_SKC);
ac.m_writer.changeNode(skcNode.$URL).changeAttribute("C8_CW_HWDepth","integer","0");
// this.C8_CancellConfirmCleanData(ac, lookProductNode);
//0530 Jarvis 渠道款设置编辑
var styleNode = getNode(ac,skcNode.__Parent__);
ac.m_writer.changeNode(styleNode.$URL).changeAttributeFlag("UR_Style_KNSStyle", xml.ATTR_FLAG_NOEDIT, false,true);
ac.m_writer.changeNode(styleNode.Attributes).changeAttributeFlag("UR_StyleAttributes_GroupCarPrice", xml.ATTR_FLAG_NOEDIT, false,true);
}
var groupOrderAattribute = null;
if(currentNode && currentNode.$Type=="MarketingLook"){
weekURL = currentNode.$URL;
weekNode = getNode(ac, currentNode.$URL);
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.__Parent__).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.__Parent__);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.m_writer.changeNode(weekURL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.$URL);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
ac.widget.refreshData();
}
var LookProducts = weekNode.LookProducts;
for (var i = 0; i < LookProducts.length; i++) {
var lookProductNode = getNode(ac, LookProducts[i]);
updateURStyleAttributesGroupBillNo(ac, lookProductNode, groupOrderAattribute, currentNode, weekNode.C8_ML_Week, false, 2);
}
if (ac.widget.viewParent.getChildView("C8_MCMaterialsHW") != undefined) {
ac.widget.viewParent.getChildView("C8_MCMaterialsHW").refreshData();
}
return true;
},
//电商组货取消
C8_DianShangCancellConfirm:function(ac){
var weekURL = ac.m_urlParent;
var currentNode = routerStore.locationNode;
var weekNode = getNode(ac,weekURL);
let sameMeg = checkSameMLIsZHing(ac,weekURL);
if (sameMeg) {
jp.alert(sameMeg);
return sameMeg;
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Start");
if(currentNode && currentNode.$Type=="MarketingLook"){
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.widget.refreshData();
}
//0605 电商取消 不发送通知
// var mentions = getGroup(ac, "海外买手");
// var mentions1 = getGroup(ac, "电商买手");
// mentions.concat(mentions1);
// var subject = "组货取消消息";//主题
// var comments = currentNode.$Name + "的" + weekNode.$Name + "组货已取消";//消息文本
// var monthNode = getNode(ac,weekNode.PrimaryCollection);
// var docContainer = monthNode.DocumentsAndComments;
// createConversation(ac, docContainer, subject, mentions, comments);
var LookProducts = weekNode.LookProducts;
for(var i =0;i<LookProducts.length;i++){
var lookProductNode = getNode(ac,LookProducts[i]);
var skcNode = getNode(ac,lookProductNode.C8_MCP_SKC);
ac.m_writer.changeNode(skcNode.$URL).changeAttribute("C8_CW_DSDepth","integer","0");
// this.C8_CancellConfirmCleanData(ac, lookProductNode);
//0530 Jarvis 渠道款设置编辑
var styleNode = getNode(ac,skcNode.__Parent__);
ac.m_writer.changeNode(styleNode.$URL).changeAttributeFlag("UR_Style_KNSStyle", xml.ATTR_FLAG_NOEDIT, false,true);
ac.m_writer.changeNode(styleNode.Attributes).changeAttributeFlag("UR_StyleAttributes_GroupCarPrice", xml.ATTR_FLAG_NOEDIT, false,true);
}
var groupOrderAattribute = null;
if(currentNode && currentNode.$Type=="MarketingLook"){
weekURL = currentNode.$URL;
weekNode = getNode(ac, currentNode.$URL);
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.__Parent__).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.__Parent__);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.m_writer.changeNode(weekURL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.$URL);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
ac.widget.refreshData();
}
//设置周目标上的组货结果重置为0
var search = new Search();
var q = search.getQuery();
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterialColor")
.RefAttr("C8_MCMC_Week", xml.OP_EQUALS, weekNode.$URL);
//.Attr("UR_MCMC_Control", xml.OP_EQUALS, true);不止更新强管控目标
var res = search.execute({sync: true});
var results = res.getResultNodes();
for(var i=0; i<results.length; i++){
var mcmc = results[i];
ac.m_writer.changeNode(mcmc.$URL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish", "double", 0)//组货金额
.changeAttribute("C8_MCMC_DAmountFinish", "double", 0)//D款大片款超出金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish", "integer", 0)//组货宽度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish", "double", 0)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish", "integer", 0)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish", "integer", 0);//组货深度;
}
var LookProducts = weekNode.LookProducts;
for (var i = 0; i < LookProducts.length; i++) {
var lookProductNode = getNode(ac, LookProducts[i]);
updateURStyleAttributesGroupBillNo(ac, lookProductNode, groupOrderAattribute, currentNode, weekNode.C8_ML_Week, false, 1);
}
//重新加载页面
window.location.reload();
return true;
},
//国内组货取消
C8_GuoNeiCancellConfirm:function(ac){
var weekURL = ac.m_urlParent;
var currentNode = routerStore.locationNode;
var weekNode = getNode(ac,weekURL);
let sameMeg = checkSameMLIsZHing(ac,weekURL);
if (sameMeg) {
jp.alert(sameMeg);
return sameMeg;
}
ac.m_writer.changeNode(weekURL).changeAttribute("C8_ML_Status","enum","UR_ZHStatus:Start");
if(currentNode && currentNode.$Type=="MarketingLook"){
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.widget.refreshData();
}
var mentions = getGroup(ac, "海外买手");
var mentions1 = getGroup(ac, "电商买手");
mentions.concat(mentions1);
var subject = "组货取消消息";//主题
var comments = currentNode.$Name + "的" + weekNode.$Name + "组货已取消";//消息文本
var monthNode = getNode(ac,weekNode.PrimaryCollection);
var docContainer = monthNode.DocumentsAndComments;
createConversation(ac, docContainer, subject, mentions, comments);
//发送邮件
SendMailToRole(ac,"海外买手","测试:" + subject,comments,"");
SendMailToRole(ac,"电商买手","测试:" + subject,comments,"");
var LookProducts = weekNode.LookProducts;
for(var i =0;i<LookProducts.length;i++){
var lookProductNode = getNode(ac,LookProducts[i]);
var skcNode = getNode(ac,lookProductNode.C8_MCP_SKC);
ac.m_writer.changeNode(skcNode.$URL).changeAttribute("C8_CW_GNDepth","integer","0");
ac.m_writer.changeNode(skcNode.$URL).changeAttribute("C8_CW_GNSelected","boolean",false);
//清空确认唯一码以及组货单号字段
// ac.m_writer.changeNode(skcNode.$URL).changeAttribute("UR_Colorway_OKCode","string","");
// ac.m_writer.changeNode(skcNode.$URL).changeAttribute("UR_CW_GroupBillNo","ref","centric:");
// this.C8_CancellConfirmCleanData(ac, lookProductNode);
//0530 Jarvis 渠道款设置编辑
var styleNode = getNode(ac,skcNode.__Parent__);
ac.m_writer.changeNode(styleNode.$URL).changeAttributeFlag("UR_Style_KNSStyle", xml.ATTR_FLAG_NOEDIT, false,true);
ac.m_writer.changeNode(styleNode.Attributes).changeAttributeFlag("UR_StyleAttributes_GroupCarPrice", xml.ATTR_FLAG_NOEDIT, false,true);
}
// ac.m_writer.execute({sync: true});
//设置周目标上的组货结果重置为0
var search = new Search();
var q = search.getQuery();
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterialColor")
.RefAttr("C8_MCMC_Week", xml.OP_EQUALS, weekNode.$URL);
//.Attr("UR_MCMC_Control", xml.OP_EQUALS, true);不止更新强管控目标
var res = search.execute({sync: true});
var results = res.getResultNodes();
for(var i=0; i<results.length; i++){
var mcmc = results[i];
ac.m_writer.changeNode(mcmc.$URL).changeAttribute("C8_MCMC_GroupGoodsAmountFinish", "double", 0)//组货金额
.changeAttribute("C8_MCMC_DAmountFinish", "double", 0)//D款大片款超出金额
.changeAttribute("C8_MCMC_GroupGoodsSKCFinish", "integer", 0)//组货宽度
.changeAttribute("C8_MCMC_GroupGoodsAvgPriceFinish", "double", 0)//组货深度平均价
.changeAttribute("C8_MCMC_GroupGoodsStyleDepthFinish", "integer", 0)//款组货宽度
.changeAttribute("C8_MCMC_GroupGoodsDepthFinish", "integer", 0);//组货深度;
}
var groupOrderAattribute = null;
if(currentNode && currentNode.$Type=="MarketingLook"){
weekURL = currentNode.$URL;
weekNode = getNode(ac, currentNode.$URL);
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.__Parent__).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.__Parent__);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
ac.widget.viewParent.refreshData();
}else if(currentNode && currentNode.$Type=="MarketingCollection"){
ac.m_writer.changeNode(weekURL).changeAttribute("UR_ML_Send_Ready_Flag","boolean","true");
ac.m_writer.changeNode(currentNode.$URL).changeAttribute("UR_MC_Send_Ready_Flag","boolean","true");
var mcNode = getNode(ac,currentNode.$URL);
groupOrderAattribute = mcNode.C8_MC_MonthOrderAattribute;
ac.widget.refreshData();
}
var LookProducts = weekNode.LookProducts;
for (var i = 0; i < LookProducts.length; i++) {
var lookProductNode = getNode(ac, LookProducts[i]);
updateURStyleAttributesGroupBillNo(ac, lookProductNode, groupOrderAattribute, currentNode, weekNode.C8_ML_Week, false, 0);
}
//重新加载页面
window.location.reload();
return true;
},
//控制是否可以锁定组货
C8_LockWeekAccessAction: function(/*Context*/ctx, /*Action*/action) {
var contextURL = ctx.view.urlRoot;
var contextNode = ctx.cache.getNode(contextURL);
var hasAccess = false;
if(contextNode && contextNode.$Type=="MarketingLook"){
var weekStatus = contextNode.C8_ML_Status;
var weekStatusValue = getEnumValue(weekStatus);
if(weekStatusValue!="Lock" && weekStatusValue!="Complete"){
hasAccess = true;
}
}
return hasAccess;
},
//组货计算按钮的权限控制,只要未完成都能访问
C8_GuoNeiCalculateAccessAction: function(/*Context*/ctx, /*Action*/action) {
var contextURL = ctx.view.urlRoot;
var contextNode = ctx.cache.getNode(contextURL);
var hasAccess = false;
//新增判断只允许在月下组货
var locationNode = routerStore.locationNode;
if(locationNode && locationNode.$Type=="MarketingCollection" && contextNode && contextNode.$Type=="MarketingLook"){
var weekStatus = contextNode.C8_ML_Status;
var weekStatusValue = getEnumValue(weekStatus);
//非计划单不控制按单号顺序组货确认
if(weekStatusValue!="Complete"){
hasAccess = true;
}
}
return hasAccess;
},
//组货计算,完成后不需要计算
C8_GuoNeiConfirmAccessAction: function(/*Context*/ctx, /*Action*/action) {
var contextURL = ctx.view.urlRoot;
var contextNode = ctx.cache.getNode(contextURL);
var hasAccess = false;
if(contextNode && contextNode.$Type=="MarketingLook"){
var mcNode = ctx.cache.getNode(contextNode.__Parent__);
//非计划单不控制按单号顺序组货确认
if(mcNode && mcNode.C8_MC_MonthOrderAattribute != "UR_enum_OrderAattribute:N"){
hasAccess=true;
}
var weekStatus = contextNode.C8_ML_Status;
var weekStatusValue = getEnumValue(weekStatus);
//如果当前是第1单,未完成状态才能点击
if(mcNode && mcNode.C8_MC_MonthOrderAattribute == "UR_enum_OrderAattribute:N" && contextURL == mcNode.C8_MC_Week1){
if(weekStatusValue!="Complete"){
hasAccess = true;
}
}
//如果当前是第2单,需要第1单已经完成
if(mcNode && mcNode.C8_MC_MonthOrderAattribute == "UR_enum_OrderAattribute:N" && contextURL == mcNode.C8_MC_Week2){
var weekPre = ctx.cache.getNode(mcNode.C8_MC_Week1);
if(weekPre){
var weekPreStatus = getEnumValue(weekPre.C8_ML_Status);
if(weekPreStatus == "Complete" && weekStatusValue!="Complete"){
hasAccess = true;
}
}
}
//第3单
if(mcNode && mcNode.C8_MC_MonthOrderAattribute == "UR_enum_OrderAattribute:N" && contextURL == mcNode.C8_MC_Week3){
var weekPre = ctx.cache.getNode(mcNode.C8_MC_Week2);
if(weekPre){
var weekPreStatus = getEnumValue(weekPre.C8_ML_Status);
if(weekPreStatus == "Complete" && weekStatusValue!="Complete"){
hasAccess = true;
}
}
}
//第4单,需要第3单已完成
if(mcNode && mcNode.C8_MC_MonthOrderAattribute == "UR_enum_OrderAattribute:N" && contextURL == mcNode.C8_MC_Week4){
var weekPre = ctx.cache.getNode(mcNode.C8_MC_Week3);
if(weekPre){
var weekPreStatus = getEnumValue(weekPre.C8_ML_Status);
if(weekPreStatus == "Complete" && weekStatusValue!="Complete" ){
hasAccess = true;
}
}
}
//第5单,需要第4单已完成
if(mcNode && mcNode.C8_MC_MonthOrderAattribute == "UR_enum_OrderAattribute:N" && contextURL == mcNode.C8_MC_Week5){
var weekPre = ctx.cache.getNode(mcNode.C8_MC_Week4);
if(weekPre){
var weekPreStatus = getEnumValue(weekPre.C8_ML_Status);
if(weekPreStatus == "Complete" && weekStatusValue!="Complete"){
hasAccess = true;
}
}
}
//第6单
if(mcNode && mcNode.C8_MC_MonthOrderAattribute == "UR_enum_OrderAattribute:N" && contextURL == mcNode.C8_MC_Week6){
var weekPre = ctx.cache.getNode(mcNode.C8_MC_Week5);
if(weekPre){
var weekPreStatus = getEnumValue(weekPre.C8_ML_Status);
if(weekPreStatus == "Complete" && weekStatusValue!="Complete"){
hasAccess = true;
}
}
}
}
return hasAccess;
},
//组货计算,非计划单不控制顺序,计划单非末单不控制顺序,末单需要前面的单都完成
C8_GuoNeiConfirmAccessActionV2: function(/*Context*/ctx, /*Action*/action) {
var contextURL = ctx.view.urlRoot;
var contextNode = ctx.cache.getNode(contextURL);
var hasAccess = false;
//新增判断只允许在月下组货
var locationNode = routerStore.locationNode;
if(locationNode && locationNode.$Type=="MarketingCollection" && contextNode && contextNode.$Type=="MarketingLook"){
var mcNode = ctx.cache.getNode(contextNode.__Parent__);
var weekStatus = contextNode.C8_ML_Status;
var weekStatusValue = getEnumValue(weekStatus);
//非计划单不控制按单号顺序组货确认
if(mcNode && mcNode.C8_MC_MonthOrderAattribute != "UR_enum_OrderAattribute:N"){
if(weekStatusValue!="Complete"){
hasAccess = true;
}
}
var isLast = contextNode.UR_ML_IsLastOrder;
//计划单如果非末单不控制顺序
if(mcNode && mcNode.C8_MC_MonthOrderAattribute == "UR_enum_OrderAattribute:N" && !isLast){
if(weekStatusValue!="Complete"){
hasAccess = true;
}
}
//计划单最后一单
if(mcNode && mcNode.C8_MC_MonthOrderAattribute == "UR_enum_OrderAattribute:N" && isLast){
var allWeeks = mcNode.C8_MC_Week;
var currentKey = getEnumValue(contextNode.C8_ML_Week);
hasAccess = true;
Object.keys(allWeeks).forEach(function(key){
if(currentKey != key){
var weekPre = ctx.cache.getNode(allWeeks[key]);
var weekPreStatus = getEnumValue(weekPre.C8_ML_Status);
if(weekPreStatus != "Complete" || weekStatusValue == "Complete"){
hasAccess = false;
return;
}
}
} );
}
}
return hasAccess;
},
//取消组货确认按钮控制
C8_HWConfirmAccessAction: function(/*Context*/ctx, /*Action*/action) {
var contextURL = ctx.view.urlRoot;
var contextNode = ctx.cache.getNode(contextURL);
var hasAccess = false;
if(contextNode && contextNode.$Type=="MarketingLook"){
var weekStatus = contextNode.C8_ML_Status;
var weekStatusValue = getEnumValue(weekStatus);
if(weekStatusValue!="Complete"){
hasAccess = true;
}
}
return hasAccess;
},
//取消组货确认按钮控制
C8_CancellConfirmAccessAction: function(/*Context*/ctx, /*Action*/action) {
var contextURL = ctx.view.urlRoot;
var contextNode = ctx.cache.getNode(contextURL);
var hasAccess = false;
if(contextNode && contextNode.$Type=="MarketingLook"){
var weekStatus = contextNode.C8_ML_Status;
var weekStatusValue = getEnumValue(weekStatus);
if(weekStatusValue=="Complete"){
hasAccess = true;
}
}
return hasAccess;
},
//控制是否可以解锁组货
C8_UnLockWeekAccessAction: function(/*Context*/ctx, /*Action*/action) {
var contextURL = ctx.view.urlRoot;
var contextNode = ctx.cache.getNode(contextURL);
var hasAccess = false;
if(contextNode && contextNode.$Type=="MarketingLook"){
var weekStatus = contextNode.C8_ML_Status;
var weekStatusValue = getEnumValue(weekStatus);
if(weekStatusValue=="Lock"){
hasAccess = true;
}
}
return hasAccess;
},
//海外组货新建SKC控制权限
C8_NewMCPFromColorwayAccessAction: function(/*Context*/ctx, /*Action*/action) {
var currentNode = routerStore.locationNode;
var hasAccess = false;
if(currentNode && currentNode.$Type=="MarketingLook"){
hasAccess = true;
}
return hasAccess;
},
//海外组货新建SKC控制权限
C8_NewMCPFromColorwayMonthAccessAction: function(/*Context*/ctx, /*Action*/action) {
var currentNode = routerStore.locationNode;
var hasAccess = false;
if(currentNode && currentNode.$Type=="MarketingCollection"){
hasAccess = true;
}
return hasAccess;
},
//国际版型导入
C8_ImportStyle:function(ac){
var otherParam = {"url":ac.m_urlParent};
var title = "海外定深导入"
var url = "Site/html/hwImportZB.html?";
url = url + "downlink=" + encodeURI("/国际转版导入模板.xlsx");//下载的文件名
url = url + "&importName=MCProductImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
return true;
},
//国内定深导入 Jarvis
C8_ImportMcProduct:function(ac){
var otherParam = {};
var title = "定深导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/国内定深导入模板.xlsx");//下载的文件名
url = url + "&importName=MCProductImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//电商定深导入
C8_ImportMcProductDS:function(ac){
var otherParam = {};
var title = "电商定深导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/电商定深导入模板.xlsx");//下载的文件名
url = url + "&importName=DSProductImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//导入SKC标准及LOOK套数的标准值&组货系数 Jarvis
C8_ImportSpecItems1:function(ac){
//var nodeUrl = ac.m_cache.addNode(ac.m_urlParent).__Parent__;
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:1"};
var title = "SKC标准及LOOK套数的标准值导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/SKC标准及LOOK套数的标准值模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//主题款模块SKC数限制配置表导入 Jarvis
C8_ImportSpecItems2:function(ac){
//var nodeUrl = ac.m_cache.addNode(ac.m_urlParent).__Parent__;
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:2"};
var title = "主题款模块SKC数限制配置表导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/主题款模块SKC数限制配置表模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//特殊款最低深度设置表导入 Jarvis
C8_ImportSpecItems3:function(ac){
//var nodeUrl = ac.m_cache.addNode(ac.m_urlParent).__Parent__;
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:3"};
var title = "特殊款最低深度设置表导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/特殊款最低深度设置表模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//D大片款可超金额导入 Jarvis
C8_ImportSpecItems4:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:4"};
var title = "D大片款可超金额上限导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/D大片款可超金额上限模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//单店深度标准(MIP)导入 Jarvis
C8_ImportSpecItems5:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:5"};
var title = "单店深度标准(MIP)导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/单店深度标准(MIP)模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//南北款店铺数(MIP)导入 Jarvis
C8_ImportSpecItems6:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:6"};
var title = "南北款店铺数(MIP)导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/南北款店铺数(MIP)模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//组货金额、宽度、平均单价检核参数导入 Jarvis
C8_ImportSpecItems7:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:7"};
var title = "组货金额、宽度、平均单价检核参数导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/组货金额、宽度、平均单价检核参数模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//可增减SKC数规则导入 Jarvis
C8_ImportSpecItems8:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:8"};
var title = "可增减SKC数规则导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/可增减SKC数规则模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//价格段定义导入 Jarvis
C8_ImportSpecItems9:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:9"};
var title = "价格段定义导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/价格段定义模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//非特殊款最低深度导入 Jarvis
C8_ImportSpecItemsL:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:L"};
var title = "非特殊款最低深度导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/非特殊款最低深度模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//单月全国覆盖最低深度(MIP)导入 Jarvis
C8_ImportSpecItemsJ:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:J"};
var title = "单月全国覆盖最低深度(MIP)导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/单月全国覆盖最低深度(MIP)模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//组货系数导入 Jarvis
C8_ImportSpecItemsI:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:I"};
var title = "组货系数导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/组货系数模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//月度企划结构表导入 Jarvis
C8_ImportSpecItemsC:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:C"};
var title = "月度企划结构表导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/月度企划结构表导入模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//组货金额、宽度、平均单价检核参数导入 Jarvis
C8_ImportSpecItemsB:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:B"};
var title = "组货金额、宽度、平均单价检核参数导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/组货金额、宽度、平均单价检核参数导入模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//D款深度配置表导入 Jarvis
C8_ImportSpecItemsK:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:K"};
var title = "D款深度配置表导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/D款深度配置表导入模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//单号组货SKC数合理范围配置表导入 Jarvis
C8_ImportSpecItemsA:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:A"};
var title = "单号组货SKC数合理范围配置表导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/单号组货SKC数合理范围配置表导入模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//普通款深度导入 Jarvis
C8_ImportSpecItemsX:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:X"};
var title = "普通款深度导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/普通款深度导入模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//D款深度配置表导入 Jarvis
C8_ImportSpecItemsK:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:K"};
var title = "D款深度配置表导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/D款深度配置表导入模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//等级系数导入 Jarvis
C8_ImportSpecItemsE:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:E"};
var title = "等级系数导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/等级系数导入模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//月度单号占比导入 Jarvis
C8_ImportSpecItemsF:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:F"};
var title = "月度单号占比导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/月度单号占比导入模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//组货金额、宽度、平均单价、平均深度检核参数导入 Jarvis
C8_ImportSpecItemsG:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:G"};
var title = "组货金额、宽度、平均单价、平均深度检核参数导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/组货金额、宽度、平均单价、平均深度检核参数导入模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//最低深度导入 Jarvis
C8_ImportSpecItemsD:function(ac){
var otherParam = {"UR_SDS_Parent":ac.m_urlParent,"UR_SDS_TableRule":"UR_Rule:D"};
var title = "最低深度导入"
var url = "Site/html/import.html?";
url = url + "downlink=" + encodeURI("/最低深度导入模板.xlsx");//下载的文件名
url = url + "&importName=SpecDataSheetItemImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//临时创建月目标的按钮,用于测试时手工创建数据用
C8_CreateMonthTarget:function(ac){
var monthUrl = ac.m_urlParent;
var newMT = comm.createUrl();
ac.m_writer.createNode(newMT, "MCMaterial").changeAttribute("__Parent__","ref",monthUrl).attach(monthUrl, "Materials");
var monthNode = getNode(ac,monthUrl);
if(monthNode && monthNode.$Type=="MarketingCollection"){
var search = new Search();
var q = search.getQuery();
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MarketingLook")
.RefAttr("PrimaryCollection", xml.OP_EQUALS, monthUrl);
var res = search.execute({sync: true});
var results = res.getResultNodes();
if(results){
results.forEach(function(mlNode){
var newWT = comm.createUrl();
var mlURL = mlNode.$URL;
ac.m_writer.createNode(newWT, "MCMaterialColor").changeAttribute("__Parent__","ref",newMT).changeAttribute("C8_MCMC_Week","ref",mlURL).attach(newMT, "Colors");
});
}
}
return true;
},
//临时创建周目标的按钮,用于测试时手工创建数据用
C8_CreateWeekTarget:function(ac){
var weekURL = ac.m_urlParent;
var newWT = comm.createUrl();
ac.m_writer.createNode(newWT, "MCMaterialColor").changeAttribute("__Parent__","ref",weekURL).attach(weekURL, "Colors");
return true;
},
//海外深度导入
C8_hwExport:function(ac){
var otherParam = {"importUrl":ac.m_urlParent};
var title = "海外定深导入"
var url = "Site/html/hwImport.html?";
url = url + "downlink=" + encodeURI("/海外定深导入模板.xlsx");//下载的文件名
url = url + "&importName=MCProductImport&otherParam=" + encodeURIComponent(JSON.stringify(otherParam)) + "";//访问的requestMap
jp.openImport(title, url, ac.widget);
return true;
},
//海外店群计算逻辑
C8_storeDate:function (ac){
var weekNode = routerStore.locationNode;
if(weekNode.$Type == "MarketingCollection"){
//通过mcproduct查询出当前单号
var productUrl = ac.m_urlParent;
var search = new Search();
var q = search.getQuery();
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MarketingLook")
.RefAttr("LookProducts", xml.OP_EQUALS, productUrl);
var res = search.execute({sync: true});
var results = res.getResultNodes();
if(results.length > 0){
weekNode = getNode(ac,results[0].$URL);
}else{
jp.alert("通过MCProduct查询不到单号!");
return true;
}
}
if(weekNode.C8_ML_Status == "UR_ZHStatus:Complete"){
jp.alert("组货已完成,不能再次计算数据!");
return true;
}
var loadingMessage = "数据处理中,请稍等.....";
var loading = jp.loading(loadingMessage);
var node = getNode(ac,ac.m_urlParent);
var styleAttrNode = ac.m_cache.getPathNode(node, "Child:C8_MCP_SKC/Child:__Parent__/Child:Attributes", true);
var styleNode = ac.m_cache.getPathNode(node, "Child:C8_MCP_SKC/Child:__Parent__", true);
var skcNode = ac.m_cache.getPathNode(node, "Child:C8_MCP_SKC", true);
if(styleNode == undefined){
jp.alert("请先选择SKC后再操作!");
return true;
}
var midCatType = styleAttrNode.UR_StyleAttributes_MiddleCategoryTypeCount;
var largeType = "";
//if(midCatType == "UR_enum_ProductMiddleType:"){
largeType = getNode(ac,styleNode.Collection).UR_Collection_ProductLargeType;//中品为空就取产品品类
//}
var series = styleAttrNode.UR_StyleAttributes_OriginalSeries;
var locationNode = routerStore.locationNode;
var monthNode = "";
if(locationNode.PrimaryCollection) {
monthNode = getNode(ac, locationNode.PrimaryCollection);
}
if(locationNode.$Type == "MarketingCollection"){
monthNode = locationNode;
}
//1.获取规则表
var ruleTableNode = searchRuleTable(monthNode);
var tableRuleS = filterRuleTable(ruleTableNode,"E",false,{UR_SDS_SubProductSeriation:series});
var tableRuleD = filterRuleTable(ruleTableNode,"D",false,{UR_SDS_SubProductSeriation:series});
if(tableRuleS.length == 0){
jp.alert("数据在等级系数表中没找到相应规则!请先查看等级系数中子系列对应的产品等级!");
return true;
}
if(tableRuleD.length > 0){//设置最低深度
var levelList = Object.entries(node.C8_MCP_StoreLevel);
for (var t = 0; t < levelList.length; t++) {
var depthmap = new Map();
for (var q = 0; q < tableRuleD.length; q++) {
var tableRuleD1 = tableRuleD[q];
depthmap[levelList[t][0]] = tableRuleD1.UR_SDS_LowDepth;
//var customer = tableRuleD1.UR_SDS_Customer;
//depthmap[customer] = tableRuleD1.UR_SDS_LowDepth;
if(monthNode.C8_MCM_ProductLargeType == tableRuleD1.UR_SDS_ProductLargeType)
ac.m_writer.changeNode(node.$URL).changeAttribute("C8_MCP_SpecialLowDepthHy", "integermap", depthmap, true, false);
}
}
}
//查询MCMaterialColor 企划金额
var weekNode = getNode(ac,weekNode.$URL);
var search = new Search();
var q = search.getQuery();
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterialColor")
.RefAttr("C8_MCMC_Week", xml.OP_EQUALS, weekNode.$URL);
if(midCatType == "UR_enum_ProductMiddleType:"){
q.Attr("C8_MCM_ProductLargeType",xml.OP_EQUALS,largeType,"Child:__Parent__");
}else{
q.Attr("C8_MCM_CategoryInPlan",xml.OP_EQUALS,midCatType,"Child:__Parent__");
}
var dependcyPath = ["Child:__Parent__"];
search = search.addDependencyPaths(dependcyPath);
var res = search.execute({ sync: true });
var result = res.getResultNodes();
//20240314新增逻辑,如果查询不到结果,则通过品类查询,品类在目标上一定有 吉吉确认 Jarvis
if(result.length == 0){
var search1 = new Search();
var q1 = search1.getQuery();
q1.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterialColor")
.RefAttr("C8_MCMC_Week", xml.OP_EQUALS, weekNode.$URL)
.Attr("C8_MCM_ProductLargeType",xml.OP_EQUALS,largeType,"Child:__Parent__");
var res1 = search1.execute({ sync: true });
var result1 = res1.getResultNodes();
result = result1;
}
if(result.length > 0) {
for (var j = 0; j < result.length; j++) {
for (var w = 0; w < tableRuleS.length; w++) {
var tableRuleS1 = tableRuleS[w];
var levelList = Object.entries(node.C8_MCP_StoreLevel);
var priceStr = getEnumValue(styleAttrNode.UR_StyleAttributes_GroupCarPrice); //组货单价
var price = 0;
if (priceStr && priceStr != "") {
priceStr = priceStr.trim();
price = parseInt(priceStr);
}
if (price == 0) {
jp.alert("组货单价不能为0,请检查数据!");
return true;
}
var map = new Map();
var tzMap = new Map();
for (var t = 0; t < levelList.length; t++) {
var mcmaterialNode = getNode(ac,result[j].__Parent__);
if(levelList[t][0] != mcmaterialNode.C8_MCM_Store){
continue;
}
var sdmap = new Map();
var skcLockhy = node.C8_MCP_SKCLockhy;
if (tableRuleS1.UR_SDS_ProductLevel == levelList[t][1]) {
sdmap[levelList[t][0]] = tableRuleS1.UR_SDS_ProductLevelRate;
ac.m_writer.changeNode(node.$URL).changeAttribute("C8_MCP_StoreLevelCoefficient", "doublemap", sdmap, true, false);
var rate = tableRuleS1.UR_SDS_ProductLevelRate;
var amount = 0;
if ((mcmaterialNode.C8_MCM_PlannedSKC * rate) > 0) {
amount = mcmaterialNode.C8_MCM_PlannedAmount / mcmaterialNode.C8_MCM_PlannedSKC * rate;
}
var volumn = amount / price;
volumn = parseInt(volumn);
node = ac.m_cache.addNode(node.$URL);
var tableRuleDV = filterRuleTable(ruleTableNode,"D",true,{UR_SDS_SubProductSeriation:series,UR_SDS_ProductLargeType:styleAttrNode.UR_StyleAttributes_ProductLargeType});
var admap = new Map();
if(volumn < tableRuleDV.UR_SDS_LowDepth && levelList[t][1] != "UR_ProductLevel:N"){// N代表不组货不修改默认为最低深度
volumn = tableRuleDV.UR_SDS_LowDepth;
}
var advolumn = volumn * price;//调整金额
map[levelList[t][0]] = volumn;
if(skcLockhy[levelList[t][0]] != undefined){
if(!skcLockhy[levelList[t][0]]){
tzMap[levelList[t][0]] = volumn;
}
}else{
tzMap[levelList[t][0]] = volumn;
}
ac.m_writer.changeNode(node.$URL).changeAttribute("C8_MCP_StoreVolumn", "integermap", map, true, false);
ac.m_writer.changeNode(node.$URL).changeAttribute("C8_MCP_AdjustingDepthHy", "integermap", tzMap, true, false);
var sumap = new Map();
var suvolumn = volumn * price;//建议金额
sumap[levelList[t][0]] = suvolumn;
if(skcLockhy[levelList[t][0]] != undefined){
if(!skcLockhy[levelList[t][0]]){
admap[levelList[t][0]] = suvolumn;
}
}else{
admap[levelList[t][0]] = suvolumn;
}
ac.m_writer.changeNode(node.$URL).changeAttribute("C8_MCP_SuggestedAmountHy", "doublemap", sumap, true, false);
ac.m_writer.changeNode(node.$URL).changeAttribute("C8_MCP_AdjustingAmountHy", "doublemap", admap, true, false);
}
}
}
}
}else{
jp.alert("在规则表中没获取到数据,请检查数据!");
return true;
}
ac.m_writer.execute({sync: true});
ac.bRefreshNode = true;
ac.widget.refreshData();
jp.close(loading);
jp.alert("数据计算完成!");
return true;
},
ShowTargetView:function(ac){
var actionName = ac.m_action.m_name;
var newActionName = "";
var divStyle = "";
if(actionName=="隐藏周目标"){
newActionName = "显示周目标";
divStyle = "display:none";
}else{
newActionName = "隐藏周目标";
divStyle = "";
}
ac.m_action.m_name = newActionName;
$("div[class*='csi-view-MarketingLook-C8GNZuHuo']").find("div[data-csi-template-rule='Rule1']").each(function(){$(this).attr("style",divStyle);});
$("span:contains('"+actionName+"')[data-dojo-attach-point='containerNode']").each(function(){$(this).html(newActionName)});
ac.widget._resizeView();
},
//移除海外选款 Jarvis 20240428
C8_HWDelete:function (ac){
var mcpUrl = ac.m_urlNode;
var mcpNode = getNode(ac,mcpUrl);
ac.m_writer.changeNode(mcpNode.C8_MCP_SKC).changeAttribute("C8_CW_HWPick","boolean",false);
return true;
},
//移除国内选款 Jarvis 20240618
C8_GNDelete:function (ac){
var mcpUrl = ac.m_urlNode;
var mcpNode = getNode(ac,mcpUrl);
ac.m_writer.changeNode(mcpNode.C8_MCP_SKC).changeAttribute("C8_CW_GNPick","boolean",false);
return true;
},
//移除电商选款 Jarvis 20240618
C8_DSDelete:function (ac){
var mcpUrl = ac.m_urlNode;
var mcpNode = getNode(ac,mcpUrl);
ac.m_writer.changeNode(mcpNode.C8_MCP_SKC).changeAttribute("C8_CW_DSPick","boolean",false);
return true;
},
//刷新WESTV深度
C8_FlushAvgD:function (ac){
var mcURL = ac.m_urlParent;
var mcNode = getNode(ac,mcURL);
if(mcNode.Products.length >0 && mcNode.Materials.length >0){
mcNode.Products.forEach(function(url,index){
var nodeObj = getNode(ac,url);
if(nodeObj && nodeObj.$Type == "MCProduct"){
if(nodeObj.C8_MCP_SKC == "centric:"){
return;
}
var skcObj = getNode(ac,nodeObj.C8_MCP_SKC);
var styleNode = getNode(ac,skcObj.__Parent__);
var styleAttrNode = getNode(ac,styleNode.Attributes);
var search = new Search();
var q = search.getQuery();
//查询当前MC下的第一个商品层、大类、中类与款式相同的月目标
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterial")
.RefAttr("__Parent__", xml.OP_EQUALS, mcURL)
.Attr("C8_MCM_CommodityType", xml.OP_EQUALS, styleNode.UR_Style_CommodityType)
.Attr("C8_MCM_ProductLargeType", xml.OP_EQUALS, styleNode.UR_Style_ProductLargeType)
.Attr("C8_MCM_CategoryInPlan", xml.OP_EQUALS, styleAttrNode.UR_StyleAttributes_MiddleCategoryType)
var res = search.execute({sync: true});
var results = res.getResultNodes();
if (results.length > 0) {
var mcMaterialNode = results[0];
ac.m_writer.changeNode(styleNode.$URL).changeAttribute("UR_Style_MonthAvgDepth","integer",Math.round(mcMaterialNode.C8_MCM_MonthAvgDepth));
}else{
var search2 = new Search();
var q2 = search2.getQuery();
//查询当前MC下的第一个商品层、大类与款式相同的月目标
q2.Node(xml.PROP_TYPE, xml.OP_EQUALS, "MCMaterial")
.RefAttr("__Parent__", xml.OP_EQUALS, mcURL)
.Attr("C8_MCM_CommodityType", xml.OP_EQUALS, styleNode.UR_Style_CommodityType)
.Attr("C8_MCM_ProductLargeType", xml.OP_EQUALS, styleNode.UR_Style_ProductLargeType);
res = search2.execute({sync: true});
results = res.getResultNodes();
if(results.length > 0){
var mcMaterialNode = results[0];
ac.m_writer.changeNode(styleNode.$URL).changeAttribute("UR_Style_MonthAvgDepth","integer",Math.round(mcMaterialNode.C8_MCM_MonthAvgDepth));
}else{
ac.m_writer.changeNode(styleNode.$URL).changeAttribute("UR_Style_MonthAvgDepth","integer",0);
}
}
}
});
}
ac.widget.refreshData();
return true;
},
//创建规则表后自动创建Section
/*
PostCreateSDCreateSection:function(ac){
var sdUrl = ac.m_urlNode;
var sdNode = ac.m_cache._data[ac.m_urlNode];
var subType = sdNode.Subtype;
var search = new Search();
var q = search.getQuery();
q.Node(xml.PROP_TYPE, xml.OP_EQUALS, "SpecificationSectionDefinition")
.RefAttr("Subtype", xml.OP_EQUALS,subType)
.Attr("Special",xml.OP_EQUALS,"false")
.Attr("Active",xml.OP_EQUALS,"true");
var res = search.execute({ sync: true });
var result = res.getResultNodes();
if(result.length > 0){
var sectionDefUrl = result[0].$URL;
var newUrl = comm.createUrl();
ac.m_writer.callMethod("SpecificationDataSheet", "CreateSpecificationSection")
.addParameter("Special", "boolean", true)
.addParameter("URL", "ref", newUrl)
.addParameter("ParentURL", "ref", docContainer)
.addParameter("ParentAttr", "string", "AllSections")
.addParameter("Add", "boolean", true)
.addParameter("FromURL", "ref", sectionDefUrl);
ac.m_writer.execute({sync:true});
}
},*/
};
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment