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

4 years ago
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;
});