You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

566 lines
21 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

define(function (require, exports, module) {
let BaseBiz = require('apps/rht/base/rhtBiz');
let Service = require('./fsh140301service');
let rhtComm = require('../../comm/rhtComm');
let multiWindow = require("system/views/pages/multiwindow/multiwindow");
let IngredientWin = require('./ingredient-win')
/**
* 控制按钮的可用
* @param opCode 按钮编码
* @return [description]
*/
function Biz(vm) {
//继承第一步,构造继承
BaseBiz.call(this, vm);
vm.remark =''
}
//继承第二步,方法继承
inherits(Biz, BaseBiz);
//根据登录组织等拼装查询条件
Biz.prototype.beforeDataSrcSearch = function (dataSrc, params) {
let self = this;
self.setServerBiz('cn.qdhezheng.rht.app.fsh.fsh140301.SavePlugin');
};
//保存前校验
Biz.prototype.beforeSave = function () {
let masterRow = this.dsMaster.currentRow;
if(masterRow){
let sGyCode = masterRow ? TypeUtil.toString(masterRow['GyCode']) : '';
let fFlCost = TypeUtil.toFloat(masterRow['FlCost']);
let sDepCode = masterRow ? TypeUtil.toString(masterRow['DepCode']) : '';
if (sDepCode.length <= 0){
return '主表部门不能为空!';
}
if (fFlCost < 0){
masterRow.setColumnError('GyCode', '辅料成本不能小于零!');
return false;
}
if (this.dsYl.rows == 0){
masterRow.setColumnError('GyCode', '工艺原料没有记录请输入!');
return false;
}
if (this.dsCp.rows == 0){
masterRow.setColumnError('GyCode', '工艺成品没有记录请输入!');
return false;
}
if (this.dsOrg.rows == 0){
masterRow.setColumnError('GyCode', '工艺使用组织没有记录请输入!');
return false;
}
let iPercent = 0.0;
for (let i = 0; i< this.dsCp.rows.length; i++) {
let row = this.dsCp.rows[i];
let fFpPercent = TypeUtil.toFloat(row['FpPercent']);
iPercent = iPercent + fFpPercent;
}
if (iPercent != 100) {
masterRow.setColumnError('GyCode', '成品占比之和应该为100%');
return false;
}
let isAllOrg = '0';
for (let i = 0; i< this.dsOrg.rows.length; i++) {
let row = this.dsOrg.rows[i];
let sOrgCode = TypeUtil.toString(row['OrgCode']);
if (sOrgCode == '*'){
isAllOrg = '1';
break;
}
}
if (isAllOrg == '1'){
if (this.dsOrg.rows.length > 1){
if (!Store.confirm('录入“*”代表全部适用,将自动删除“*”以外的使用组织!确认要继续保存吗?')) {
return false;
}
for (let i = this.dsOrg.rows.length - 1; i >= 0 ; i--) {
let row = this.dsOrg.rows[i];
let sOrgCode = TypeUtil.toString(row['OrgCode']);
if (sOrgCode != '*'){
row.delete();
}
}
}
}
let ret= Service.getSlideMenuData("actExecute","DelYlForReplace",sGyCode,"","","","");
if (ret.result !== 1) {
masterRow.setColumnError('GyCode', ret.message);
return false;
}
masterRow.setColumnValue('ModifyID', Store.logOn.userId);
masterRow.setColumnValue('ModifyCode', Store.logOn.userCode);
masterRow.setColumnValue('ModifyName', Store.logOn.userName);
masterRow.setColumnValue('ModifyDate', rhtComm.GetServerDateTime(0));
}
return this.super('beforeSave');
};
//单据删除前处理
Biz.prototype.beforeDelete = function () {
let masterRow = this.dsMaster.currentRow;
let sGyCode = masterRow ? TypeUtil.toString(masterRow['GyCode']) : '';
let ret= Service.getSlideMenuData("actExecute","FrsGyIsUsed",sGyCode,"","","","");
if (ret.result !== 1) {
masterRow.setColumnError('GyCode', ret.message);
return false;
}
return this.super('beforeDelete');
};
//明细行单行提交触发的校验
Biz.prototype.dataRowValidate = function (dataSrc, dr) {
let curRow = this.dsMaster.currentRow;
let sDepCode = curRow ? TypeUtil.toString(curRow['DepCode']) : '';
if (sDepCode.length <= 0){
return '主表部门不能为空!';
}
if (dataSrc.uiObjCode === this.dsYl.uiObjCode) {
let sPluCode = TypeUtil.toString(dr['PluCode']);
let fYlCount = TypeUtil.toFloat(dr['YlCount']);
if (sPluCode.length > 0) {
if (fYlCount <= 0 ) {
return "原料数量不能小于或等于零!";
}
for (let i = 0; i< this.dsCp.rows.length; i++) {
let row = this.dsCp.rows[i];
let sCpPluCode = TypeUtil.toString(row['PluCode']);
if (sPluCode == sCpPluCode){
return "此商品已经在成品表中出现,不能作为原料商品!";
}
}
}
else{
return "原料商品编码不能为空!";
}
}
if (dataSrc.uiObjCode === this.dsCp.uiObjCode) {
let sPluCode = TypeUtil.toString(dr['PluCode']);
let fCpCount = TypeUtil.toFloat(dr['CpCount']);
if (sPluCode.length > 0) {
if (fCpCount <= 0 ) {
return "成品数量不能小于或等于零!";
}
for (let i = 0; i< this.dsYl.rows.length; i++) {
let row = this.dsYl.rows[i];
let sYlPluCode = TypeUtil.toString(row['PluCode']);
if (sPluCode == sYlPluCode){
return "此商品已经在原料表中出现,不能作为成品商品!";
}
}
}
else{
return "成品商品编码不能为空!";
}
}
if (dataSrc.uiObjCode === this.dsOrg.uiObjCode) {
let sOrgCode = dr ? TypeUtil.toString(dr['OrgCode']) : '';
if (sOrgCode.length <= 0) {
return "组织编码不能为空!";
}
}
if (dataSrc.uiObjCode === this.dsYlRep.uiObjCode) {
let sPluCode = TypeUtil.toString(dr['PluCode']);
let fYlCount = TypeUtil.toFloat(dr['YlCount']);
if (sPluCode.length > 0) {
if (fYlCount <= 0 ) {
return "原料替换数量不能小于或等于零!";
}
for (let i = 0; i< this.dsYl.rows.length; i++) {
let row = this.dsYl.rows[i];
let sYlPluCode = TypeUtil.toString(row['PluCode']);
if (sPluCode == sYlPluCode){
return sPluCode+"此商品已经在原料表中出现,不能作为原料替换商品!";
}
}
for (let i = 0; i< this.dsCp.rows.length; i++) {
let row = this.dsCp.rows[i];
let sCpPluCode = TypeUtil.toString(row['PluCode']);
if (sPluCode == sCpPluCode){
return sPluCode+"此商品已经在成品表中出现,不能作为原料替换商品!";
}
}
}
else{
return "成品商品编码不能为空!";
}
}
return true;
};
//校验小数精度
Biz.prototype.getPrecision = function (dataSrc, dr, dc, defaultPrecision) {
if (dataSrc.uiObjCode == this.dsYl.uiObjCode) {
//把这里改成需要控制的字段
if (dc.fieldName == 'YlCount') {
return TypeUtil.toInt(dr['R_DotDecimal']);
}
}
if (dataSrc.uiObjCode == this.dsCp.uiObjCode) {
//把这里改成需要控制的字段
if (dc.fieldName == 'CpCount') {
return TypeUtil.toInt(dr['R_DotDecimal']);
}
}
return this.super('getPrecision', dataSrc, dr, dc, defaultPrecision);
};
//字段变化触发事件
Biz.prototype.fieldChanged = function (dataSrc, dr, dc) {
if (dataSrc.uiObjCode === this.dsYl.uiObjCode) {
switch (dc.fieldName) {
case 'PluCode':
this.fieldChangedYlPluCode(dataSrc, dr, dc);
break;
case 'YlCount':
this.fieldChangedYlCount(dataSrc, dr, dc);
break;
}
}
if (dataSrc.uiObjCode === this.dsCp.uiObjCode) {
switch (dc.fieldName) {
case 'PluCode':
this.fieldChangedCpPluCode(dataSrc, dr, dc);
break;
}
}
this.super('fieldChanged');
};
//YlPluCode 字段变化执行事件
Biz.prototype.fieldChangedYlPluCode = function (dataSrc, dr, dc) {
let sPluCode = TypeUtil.toString(dr['PluCode']);
let sPluID = TypeUtil.toString(dr['PluID']);
if (sPluCode === '') return false;
let curRow = this.dsMaster.currentRow;
let sDepCode = curRow ? TypeUtil.toString(curRow['DepCode']) : '';
if (sDepCode.length <= 0){
dr.setColumnError(dc.fieldName, '主表部门不能为空!');
return false;
}
let ret= Service.getSlideMenuData("DoOnDetailCalcRule","YlPluCode", sPluID,"","","","");
if (ret.result === 1) {
if (ret.data !== null) {
dr.setColumnValue('CKJPrice', ret.data.hjprice);
}
}
return true;
};
//YlCount 字段变化执行事件
Biz.prototype.fieldChangedYlCount = function (dataSrc, dr, dc) {
let sPluCode = TypeUtil.toString(dr['PluCode']);
let fYlCount = TypeUtil.toFloat(dr['YlCount']);
let fCKJPrice = TypeUtil.toFloat(dr['CKJPrice']);
if (sPluCode === '') return false;
dr.setColumnValue('CKHCost', (fYlCount*fCKJPrice).round(2));
return true;
};
//CpPluCode 字段变化执行事件
Biz.prototype.fieldChangedCpPluCode = function (dataSrc, dr, dc) {
let curRow = this.dsMaster.currentRow;
let sDepCode = curRow ? TypeUtil.toString(curRow['DepCode']) : '';
if (sDepCode.length <= 0){
dr.setColumnError(dc.fieldName, '主表部门不能为空!');
return false;
}
let sPluCode = TypeUtil.toString(dr['PluCode']);
if (sPluCode === '') return false;
let ret= Service.getSlideMenuData("DoOnDetailCalcRule","CpPluCode", sPluCode,"","","","");
if (ret.result !== 1) {
dr.setColumnError(dc.fieldName, ret.message);
return false;
}
if (ret.data != null) {
dr.setColumnValue('Price', ret.data.price);
}
return true;
};
//按钮事件控制
Biz.prototype.doOp = function (opCode) {
let self = this;
switch(opCode) {
case 'start':
self.onpubgydeal('0')
break
case 'modidy':
self.onpubgydeal('1')
break
case 'lose':
self.onpubgydeal('2')
break
case 'share':
self.onshare()
break
case 'pladduseorg':
self.onpladduseorg();
break
case 'ingredient-replace':
self.showIngredientWindow()
}
};
Biz.prototype.beforeDataSrcAddFirstRow = function(ds) {
if (ds === this.dsYl || ds === this.dsCp || ds === this.dsOrg) {
let isOk = this.dsMaster.currentRow && this.dsMaster.currentRow['GyCode']
if (!isOk) {
Store.messager.warn('请先填写加工工艺编码')
}
return !!isOk
}
return true
}
Biz.prototype.afterNewRow = function (dataSrc, newRow) {
if (dataSrc === this.dsYlRep) {
newRow.setColumnText('GyCode', this.dsYl.currentRow['GyCode'])
// newRow.setColumnText('OriPluId', this.dsYl.currentRow['PluId'])
newRow.setColumnText('OriPluCode', this.dsYl.currentRow['PluCode'])
}
}
Biz.prototype.showIngredientWindow = function() {
if (!this.dsYl.currentRow) {
Store.messager.err('请选择一条加工原料')
}
let headerData = []
let ds = this.dsYl
this.dsYl.columns.forEach(col => {
if (col.dispPosition !== Store.Enums.DispPosition.ALL && col.dispPosition !== Store.Enums.DispPosition.BROWSER) {
return
}
headerData.push({
label: col.dispName,
value: ds.currentRow.getColumnText(col)
})
})
this.dsYlRep.fixQuery = {
gyCode: ds.currentRow['GyCode'],
oriPluId: ds.currentRow['PluID']
}
let win = new IngredientWin({
headerData: headerData,
dataSource: this.dsYlRep
})
win.open()
}
//控制主界面按钮状态
Biz.prototype.getOpEnabled = function (opCode) {
let isOk = this.super('getOpEnabled', opCode);
if (!isOk) {
return false;
}
let curRow = this.dsMaster.currentRow;
let sUseStatus = curRow ? TypeUtil.toString(curRow['UseStatus']) : '';
let sOrgCode = curRow ? TypeUtil.toString(curRow['OrgCode']) : '';
if (opCode == 'share'){
if (!curRow)
return false;
if (!this.isEdit())
return false;
}
if ((opCode == 'edit') || (opCode == 'start')){
if (!curRow)
return false;
if (!this.isBrowser())
return false;
if ((sUseStatus != "0") && (sUseStatus != "1"))
return false;
if ((this._state =="edit") || (this._state =="add") )
return false;
if (sOrgCode != Store.logOn.orgCode)
return false;
}
if (opCode == 'delete'){
if (!curRow){
return false;
}
if ((sUseStatus != "0") ){
return false;
}
if ((this._state =="edit") || (this._state =="add") ){
return false;
}
if (sOrgCode != Store.logOn.orgCode){
return false;
}
}
if (opCode == 'lose'){
if (!curRow){
return false;
}
if (!this.isBrowser()){
return false;
}
if ((sUseStatus != "2") && (sUseStatus != "1")){
return false;
}
if ((this._state =="edit") || (this._state =="add") ){
return false;
}
if (sOrgCode != Store.logOn.orgCode){
return false;
}
}
if (opCode == 'modidy'){
if (!curRow){
return false;
}
if (!this.isBrowser()){
return false;
}
if (sUseStatus != "2"){
return false;
}
if ((this._state =="edit") || (this._state =="add") ){
return false;
}
if (sOrgCode != Store.logOn.orgCode){
return false;
}
}
return true;
};
//增加右键菜单按钮并控制按钮状态
Biz.prototype.getContextMenus = function (ds, source) {
let menus = this.super("getContextMenus", ds, source)
if (ds.uiObjCode=="14020"){
menus.push({
text: '批量添加使用组织',
opCode: 'pladduseorg',
disabled: !ds.getEditable()
});
}
if (ds.uiObjCode === '14002') {
let curRow = this.dsMaster.currentRow;
let sUseStatus = curRow ? TypeUtil.toString(curRow['UseStatus']) : '';
let sOrgCode = curRow ? TypeUtil.toString(curRow['OrgCode']) : '';
menus.push({
text: '替换配料',
opCode: 'ingredient-replace',
disabled: ds.getEditable() || ((sUseStatus != "0") && (sUseStatus != "1")) || (sOrgCode != Store.logOn.orgCode)
})
}
return menus;
};
//批量多选组织事件处理
Biz.prototype.onpladduseorg = function () {
let self = this;
//定义多选窗口界面
let exists = new Array();
for (let j = 0; j < self.dsOrg.rows.length; j++) {
exists.push({
'OrgCode': self.dsOrg.rows[j].OrgCode
});
}
let param={
exists: exists,
uiObjCode: 'vFrsOrg',
biz: self,
pk: "OrgCode",
showCheckColumn: true,
funcCode: self.FuncCode,
ds: self.dsOrg,
itreator: function (row) {
let isOK = self.addrows(row);
if (isOK != true) {
Store.messager.err("批量导入组织失败,校验失败!");
return false;
}
return true;
}
};
//new多选窗体 并打开
let myWindow = new multiWindow(param);
myWindow.open();
};
//批量增加每行后触发操作
Biz.prototype.addrows = function (row) {
let ds = this.dsOrg;
if (row != null) {
let dr = ds.addRow();
if (!dr.setColumnText('OrgCode', row.OrgCode)){
return false;
}
}
return true;
};
//分配按钮触发操作
Biz.prototype.onshare = function () {
if (this.dsCp.rows !== null){
let fSumCurr = 0.0;
for (let j = 0; j < this.dsCp.rows.length; j++) {
let row = this.dsCp.rows[j];
let fCpCount = TypeUtil.toFloat(row['CpCount']);
let fPrice = TypeUtil.toFloat(row['Price']);
fSumCurr = fSumCurr + (fCpCount*fPrice);
}
if (fSumCurr == 0){
Store.messager.err("售价金额合计值为零,不能进行自动分配!");
return false;
}
let fPercent = 0.0;
for (let j = 0; j < this.dsCp.rows.length; j++) {
let row = this.dsCp.rows[j];
if ((j+1) == this.dsCp.rows.length){
row.setColumnValue('FpPercent', (100-fPercent));
}
else{
let fCpCount = TypeUtil.toFloat(row['CpCount']);
let fPrice = TypeUtil.toFloat(row['Price']);
let fFpPercent = TypeUtil.toFloat(((fCpCount*fPrice*100)/fSumCurr).round(2));
row.setColumnValue('FpPercent', fFpPercent);
fPercent = fPercent + fFpPercent;
}
}
}
return true;
};
//启用、调整、作废公用按钮触发操作
Biz.prototype.onpubgydeal = function (sDealType) {
let sMsg = '确认要启用该工艺吗?';
if (sDealType == '1'){
sMsg = '调整期间工艺不可用于加工,确认要调整该工艺吗?';
}
if (sDealType == '2'){
sMsg = '作废后该工艺不可用于加工,确认要作废该工艺吗?';
}
if (!Store.confirm(sMsg)) {
return false;
}
let masterRow = this.dsMaster.currentRow;
let sGyCode = masterRow ? TypeUtil.toString(masterRow['GyCode']) : '';
let ret= Service.getSlideMenuData("actExecute","onpubgydeal", sGyCode,sDealType,"","","");
if (ret.result !== 1) {
Store.messager.err("处理失败:"+ret.message);
return false;
}
this.dsMaster.updateRow();
Store.messager.tip("处理成功!");
return true;
};
return Biz;
});