define(function (require, exports, module) { //引入业务类基类 let BaseBiz = require('apps/rht/base/rhtBiz'); let rhtComm = require('apps/rht/comm/rhtComm'); //引入业务服务 let Service = require('./wsl160101service'); /** * 全局变量 */ //取部门核算级别 let accLength = rhtComm.getOptionOrgAccLevel(); /** * 定义业务类对象 * @param vm 界面相关ViewModule */ function Biz(vm) { //继承第一步,构造继承 BaseBiz.call(this, vm); } //继承第二步,方法继承 inherits(Biz, BaseBiz); let Wsl_IsUsePfJgZc = rhtComm.getRhtOptionValue('*', 'WSL', 'Wsl_IsUsePfJgZc', '0'); let Wsl_IsPfPrcNotMin = rhtComm.getRhtOptionValue('*', 'WSL', 'Wsl_IsPfPrcNotMin', '0'); let IsMdKwMng = rhtComm.getRhtOptionValue(Store.logOn.orgCode, 'STK', 'IsMdKwMng', '1'); //保存前校验 计算主表合计数量等字段 Biz.prototype.beforeSave = function () { let curRow = this.dsMaster.currentRow; if (curRow) { let PfCount = 0.0; let PfTotal = 0.0; let YhTotal = 0.0; let SsTotal = 0.0; let XTaxTotal = 0.0; let vi_MainZeroTotal = 0.0; let vi_MainSsTotal = 0.0; let vi_ListSsTotal = 0.0; let vi_UpTotal = 0.0; let vEndSsTotal = 0.0; let vEndXTaxTotal = 0.0; let ZeroTotal = TypeUtil.toFloat(curRow['ZeroTotal']); vi_MainZeroTotal = ZeroTotal; let FhMode = TypeUtil.toString(curRow['FhMode']); let DhDate = TypeUtil.toString(curRow['DhDate']); let EtpTel = TypeUtil.toString(curRow['EtpTel']); let Address = TypeUtil.toString(curRow['Address']); let AreaCode = TypeUtil.toString(curRow['AreaCode']); let ZdDate = TypeUtil.toString(curRow['ZdDate']); let YxDate = TypeUtil.toString(curRow['YxDate']); let JsCode = TypeUtil.toString(curRow['JsCode']); let YqDate = TypeUtil.toString(curRow['YqDate']); if (FhMode == "1") { if (DhDate == "") { curRow.setColumnError("DhDate", "发货方式为1-送货,必须指定到货日期!"); return false; } else if ((this._state == "add") && (DhDate < rhtComm.GetServerDate(0))) { curRow.setColumnError("DhDate", "发货方式为1-送货,到货日期必须大于等于今天!"); return false; } if (EtpTel == "") { curRow.setColumnError("EtpTel", "发货方式为1-送货,必须指定联系电话!"); return false; } if (Address == "") { curRow.setColumnError("Address", "发货方式为1-送货,必须指定送货地址!"); return false; } if (AreaCode == "") { curRow.setColumnError("AreaCode", "发货方式为1-送货,必须指定送货区域!"); return false; } } else if (FhMode == "0") { if (ZdDate == "") { curRow.setColumnError("ZdDate", "发货方式为0-自提,必须指定提货日期!"); return false; } else if ((this._state == "add") && (ZdDate < rhtComm.GetServerDate(0))) { curRow.setColumnError("ZdDate", "发货方式为0-自提,提货日期必须大于等于今天!"); return false; } if (YxDate == "") { curRow.setColumnError("YxDate", "发货方式为0-自提,必须指定提货有效日期!"); return false; } else if ((this._state == "add") && (YxDate < rhtComm.GetServerDate(0))) { curRow.setColumnError("YxDate", "发货方式为0-自提,提货有效日期必须大于等于今天!"); return false; } } if ((JsCode == "02") && (YqDate == "")) { curRow.setColumnError("YqDate", "延期付款,必须指定付款日期!"); return false; } for (let i = 0; i < this.dsDetail.rows.length; i++) { let row = this.dsDetail.rows[i]; let Tag = TypeUtil.toString(row['Tag']); if (Tag != "Z") { vi_MainSsTotal = vi_MainSsTotal + TypeUtil.toFloat(row['YsTotal']) - TypeUtil.toFloat(row['YhTotal']); } } if (vi_MainSsTotal != 0) { for (let i = 0; i < this.dsDetail.rows.length; i++) { let row = this.dsDetail.rows[i]; let Tag = TypeUtil.toString(row['Tag']); let YsTotal = TypeUtil.toFloat(row['YsTotal']); YhTotal = TypeUtil.toFloat(row['YhTotal']); let XTaxRate = TypeUtil.toFloat(row['XTaxRate']); let rowSsTotal = 0.0; let rowXTaxTotal = 0.0; if (Tag != "Z") { vi_ListSsTotal = YsTotal - YhTotal; if (vi_ListSsTotal != 0) { vi_UpTotal = (vi_MainZeroTotal * (vi_ListSsTotal / vi_MainSsTotal)).round(2); let vi_TxRate = XTaxRate; rowSsTotal = YsTotal - YhTotal - vi_UpTotal; rowXTaxTotal = (rowSsTotal * (vi_TxRate / 100 / (1 + vi_TxRate / 100)).round(2)); row.setColumnValue('ZeroTotal', vi_UpTotal); row.setColumnValue('SsTotal', rowSsTotal); row.setColumnValue('XTaxTotal', rowXTaxTotal); } } vEndSsTotal = vEndSsTotal + rowSsTotal; vEndXTaxTotal = vEndXTaxTotal + rowXTaxTotal; } curRow.setColumnValue('SsTotal', vEndSsTotal); curRow.setColumnValue('XTaxTotal', vEndXTaxTotal); } for (let i = 0; i < this.dsDetail.rows.length; i++) { let row = this.dsDetail.rows[i]; let Tag = TypeUtil.toString(row['Tag']); let YsTotal = TypeUtil.toFloat(row['YsTotal']); let rowSsTotal = TypeUtil.toFloat(row['SsTotal']); let rowHCost = TypeUtil.toFloat(row['HCost']); if (Tag != "Z") { vi_MainSsTotal = vi_MainSsTotal + YsTotal - TypeUtil.toFloat(row['YhTotal']); } PfCount = PfCount + TypeUtil.toFloat(row['PfCount']); PfTotal = PfTotal + TypeUtil.toFloat(row['YsTotal']); YhTotal = YhTotal + TypeUtil.toFloat(row['YhTotal']); SsTotal = SsTotal + rowSsTotal; XTaxTotal = XTaxTotal + TypeUtil.toFloat(row['XTaxTotal']); row.setColumnValue('HMTotal', rowSsTotal - rowHCost); if (TypeUtil.toFloat(row['SsTotal']) == 0) { row.setColumnValue('PfMlRate', "0"); } else { row.setColumnValue('PfMlRate', ((rowSsTotal - rowHCost) / rowSsTotal).round(2)); } } curRow.setColumnValue('PfCount', PfCount); curRow.setColumnValue('PfTotal', PfTotal); curRow.setColumnValue('YhTotal', YhTotal); curRow.setColumnValue('SsTotal', SsTotal); curRow.setColumnValue('XTaxTotal', XTaxTotal); } return this.super('beforeSave'); } //明细行单行提交触发的校验 Biz.prototype.dataRowValidate = function (dataSrc, dr) { if (dataSrc.uiObjCode === this.dsDetail.uiObjCode) { let HJPrice = TypeUtil.toFloat(dr['HJPrice']); let PfCount = TypeUtil.toFloat(dr['PfCount']); let SsTotal = TypeUtil.toFloat(dr['SsTotal']); let PackUnit = TypeUtil.toString(dr['PackUnit']); let PfPrice = TypeUtil.toFloat(dr['PfPrice']); let PfZdPrice = TypeUtil.toFloat(dr['PfZdPrice']); if (PfCount <= 0) { return "批发数量应该大于0!"; } if (PackUnit == "") { dr.setColumnValue('PackCount', "0"); } if ((Wsl_IsUsePfJgZc == "0") && (Wsl_IsPfPrcNotMin == "1")) { if (PfPrice < PfZdPrice) { return "批发价不能小于批发指导价,请检查!"; } } dr.setColumnValue('HCost', (HJPrice * PfCount).round(2)); dr.setColumnValue('HMTotal', SsTotal - (HJPrice * PfCount).round(2)); if (SsTotal == 0) { dr.setColumnValue('PfMlRate', "0"); } else { dr.setColumnValue('PfMlRate', ((SsTotal - (HJPrice * PfCount).round(2)) / SsTotal).round(2)); } } return true; }; /** * 列校验,列赋值时调用,发生异常表示校验失败 * @param {DataSource} dataSrc [description] * @param {DataRow} dr [description] * @param {DataColumn} dc [description] * @param {Object} value [description] * @return {Boolean} [description] */ Biz.prototype.dataColumnValidate = function (dataSrc, dr, dc, value) { let self = this; if (dataSrc.uiObjCode === this.dsDetail.uiObjCode) { let currentRow = self.dsMaster.currentRow; let DepCodeHead = TypeUtil.toString(currentRow['DepCode']); if ((accLength > 0) && (DepCodeHead.length == 0)) { return "核算到部门,必须录入主表部门!"; } } return this.super('dataColumnValidate'); }; /** * @description 数据发生变化时调用 * @param dataSrc 数据集 * @param dr 数据行 * @param dc 数据列 */ Biz.prototype.fieldChanged = function (dataSrc, dr, dc) { let self = this; let currentRow = self.dsMaster.currentRow; if (currentRow === null) return false; if (dataSrc.uiObjCode === this.dsMaster.uiObjCode) { switch (dc.fieldName) { case 'EtpCode': this.fieldChangedEtpCode(dataSrc, dr, dc); break; case 'FhMode': this.fieldChangedFhMode(dataSrc, dr, dc); break; } } if (dataSrc.uiObjCode === this.dsDetail.uiObjCode) { switch (dc.fieldName) { case 'PluCode': this.fieldChangedPluCode(dataSrc, dr, dc); break; case 'PfPrice': this.fieldChangedPfPrice(dataSrc, dr, dc); break; case 'SsTotal': this.fieldChangedSsTotal(dataSrc, dr, dc); break; case 'SglCount': this.fieldChangedSglCount(dataSrc, dr, dc); break; case 'PackCount': this.fieldChangedPackCount(dataSrc, dr, dc); break; case 'YhTotal': this.fieldChangedYhTotal(dataSrc, dr, dc); break; case 'XTaxRate': this.fieldChangedXTaxRate(dataSrc, dr, dc); break; } } this.super('fieldChanged'); }; //EtpCode 字段变化执行事件 Biz.prototype.fieldChangedEtpCode = function (dataSrc, dr, dc) { let self = this; let currentRow = self.dsMaster.currentRow; let EtpCode = currentRow['EtpCode']; let ret = Service.getSlideMenuData("DoOnMasterRule", "EtpCode", EtpCode, "", "", "", ""); if (ret.result === 1) { if (ret.data != null) { dr.setColumnValue('Address', ret.data.Address); dr.setColumnValue('EtpTel', ret.data.Telephone); } } else { dr.setColumnError(dc.fieldName, ret.message); return false; } return true; }; //FhMode 字段变化执行事件 Biz.prototype.fieldChangedFhMode = function (dataSrc, dr, dc) { let self = this; let currentRow = self.dsMaster.currentRow; if (currentRow['FhMode'] === '0') { let ZdDate = currentRow ? TypeUtil.toString(currentRow['ZdDate']) : ''; let YxDate = currentRow ? TypeUtil.toString(currentRow['YxDate']) : ''; dr.setColumnText('Address', ""); if (ZdDate == "") { dr.setColumnText('ZdDate', rhtComm.GetServerDate(0)); } if (YxDate == "") { dr.setColumnText('YxDate', rhtComm.GetServerDate(1)); } } if (currentRow['FhMode'] === '1') { dr.setColumnText('ThAddress', ""); } return true; }; //PluCode 字段变化执行事件 Biz.prototype.fieldChangedPluCode = function (dataSrc, dr, dc) { let self = this; let currentRow = self.dsMaster.currentRow; let PluId = dr['PluId']; let PluCode = dr['PluCode']; let DepCode = currentRow['DepCode']; let EtpCode = currentRow['EtpCode']; let CkCode = currentRow['CkCode']; let PriceType = currentRow['PriceType']; let ZkRate = TypeUtil.toFloat(currentRow['ZkRate']); if (PluCode.length > 0) { let pfPrice = 0.0; let pfZdPrice = 0.0; let json = { OrgCode: Store.logOn.orgCode, EtpCode: EtpCode, PluID: PluId }; let retPluPfPrice = Service.getSlideMenuData("pubsysBaseBL", "UWslGetPluPfPrice", json, "", "", "", ""); if (retPluPfPrice.result === 1) { if (retPluPfPrice.data != null) { dr.setColumnValue('HJPrice', retPluPfPrice.data[0].hjprice); dr.setColumnValue('Price', retPluPfPrice.data[0].price); dr.setColumnValue('PfZdPrice', retPluPfPrice.data[0].pfprice); pfZdPrice = TypeUtil.toFloat(retPluPfPrice.data[0].pfprice); pfPrice = TypeUtil.toFloat(retPluPfPrice.data[0].price); } } else { dr.setColumnError(dc.fieldName, "查询商品价格信息出错:" + retPluPfPrice.message); return false; } if ((Wsl_IsUsePfJgZc == "1") || (Wsl_IsPfPrcNotMin == "1")) { let ret = Service.getSlideMenuData("DoOnDetailCalcRule", "PluCode", PluCode, EtpCode, Store.logOn.orgCode, "", ""); if (ret.result !== 1) { dr.setColumnError(dc.fieldName, ret.message); return false; } if (ret.data != null) { pfPrice = TypeUtil.toFloat(ret.data.Price); } } if (Wsl_IsUsePfJgZc == "1") { dr.setColumnValue('PfPrice', pfPrice); } else { if (PriceType == "3") { dr.setColumnValue('PfPrice', ((pfPrice * ZkRate) / 100).round(4)); } else { dr.setColumnValue('PfPrice', pfZdPrice); } } if ((Wsl_IsUsePfJgZc == "0") && (Wsl_IsPfPrcNotMin == "1")) { dr.setColumnValue('PfZdPrice', pfPrice); dr.setColumnValue('PfPrice', pfPrice); } json = { psPluCode: PluCode, psYwType: "1603" }; let retPacket = Service.getSlideMenuData("pubsysBaseBL", "GetDefaultPluPackUnitByYwType", json, PluCode, "", "", ""); if (retPacket.result === 1) { if (retPacket.data != null) { dr.setColumnValue('PackUnit', retPacket.data.Unit); dr.setColumnValue('PackQty', retPacket.data.Qty); } } dr.setColumnValue("PackCount", "0"); dr.setColumnText("SglCount", "0"); let InOrgCode = rhtComm.GetInOrgCode(Store.logOn.orgCode).message; json = { OrgCode: InOrgCode, PluCode: PluCode, DepCode: DepCode }; let retdep = Service.getSlideMenuData("pubsysBaseBL", "UQryPluDepInfo", json, "", "", "", ""); if (retdep.result === 1) { if (retdep.data != null) { dr.setColumnValue('DepId', retdep.data.DepID); dr.setColumnValue('DepCode', retdep.data.DepCode); dr.setColumnValue('DepName', retdep.data.DepName); } } else { dr.setColumnError(dc.fieldName, retdep.message); return false; } if (IsMdKwMng == "1") { json = { CurInOrgCode: InOrgCode, CkCode: CkCode, PluID: PluId }; let retKwCode = Service.getSlideMenuData("pubsysBaseBL", "GetPluKw", json, "", "", "", ""); if (retKwCode.result === 1) { if (retKwCode.data != null) { dr.setColumnValue('KwCode', retKwCode.data.KwCode); } } else { dr.setColumnError(dc.fieldName, retKwCode.message); return false; } } let retPfPrice = Service.getSlideMenuData("DoOnDetailCalcRule", "GetLastPfPrice", PluCode, EtpCode, "", "", ""); if (retPfPrice.result === 1) { if (retPfPrice.data != null) { dr.setColumnValue('LPfPrice', retPfPrice.data.PfPrice); } } else { dr.setColumnError(dc.fieldName, retPfPrice.message); return false; } } return true; }; //PfPrice 字段变化执行事件 Biz.prototype.fieldChangedPfPrice = function (dataSrc, dr, dc) { let PfPrice = TypeUtil.toString(dr['PfPrice']); let PfZdPrice = TypeUtil.toFloat(dr['PfZdPrice']); let YhTotal = TypeUtil.toFloat(dr['YhTotal']); let XTaxRate = TypeUtil.toFloat(dr['XTaxRate']); let PfCount = TypeUtil.toFloat(dr['PfCount']); let SsTotal = 0.0; SsTotal = (PfCount * PfPrice).round(2) - YhTotal; if ((Wsl_IsUsePfJgZc == "0") && (Wsl_IsPfPrcNotMin == "1")) { if (PfPrice < PfZdPrice) { dr.setColumnError(dc.fieldName, "批发价不能小于批发指导价,请检查!"); return false; } } dr.setColumnValue("YsTotal", (PfCount * PfPrice).round(2)); dr.setColumnValue("SsTotal", SsTotal); dr.setColumnValue("XTaxTotal", (SsTotal * (XTaxRate / 100 / (1 + XTaxRate / 100))).round(2)); return true; }; //SsTotal 字段变化执行事件 Biz.prototype.fieldChangedSsTotal = function (dataSrc, dr, dc) { let SsTotal = TypeUtil.toFloat(dr['SsTotal']); let PfCount = TypeUtil.toFloat(dr['PfCount']); let PfZdPrice = TypeUtil.toFloat(dr['PfZdPrice']); if (PfCount == 0) { dr.setColumnError(dc.fieldName, "批发数量不能为0!"); return false; } if ((SsTotal / PfCount).round(4) < PfZdPrice) { dr.setColumnError(dc.fieldName, "批发价不能小于批发指导价,请检查!"); return false; } let XTaxRate = TypeUtil.toFloat(dr['XTaxRate']); let PfPrice = 0.0; PfPrice = (SsTotal / PfCount + 0.00004).round(4); dr.setColumnValue("PfPrice", PfPrice); dr.setColumnValue("YsTotal", (PfPrice * PfCount).round(2)); dr.setColumnValue("YhTotal", (PfPrice * PfCount).round(2) - SsTotal); dr.setColumnValue("XTaxTotal", (SsTotal * (XTaxRate / 100 / (1 + XTaxRate / 100))).round(2)); return true; }; //SglCount 字段变化执行事件 Biz.prototype.fieldChangedSglCount = function (dataSrc, dr, dc) { let PackQty = TypeUtil.toFloat(dr['PackQty']); let PackCount = TypeUtil.toFloat(dr['PackCount']); let SglCount = TypeUtil.toFloat(dr['SglCount']); let PfPrice = TypeUtil.toFloat(dr['PfPrice']); let YhTotal = TypeUtil.toFloat(dr['YhTotal']); let XTaxRate = TypeUtil.toFloat(dr['XTaxRate']); let PfCount = 0.0; let SsTotal = 0.0; PfCount = (PackCount * PackQty) + SglCount; SsTotal = (PfCount * PfPrice).round(2) - YhTotal; dr.setColumnValue("PfCount", PfCount); dr.setColumnValue("YsTotal", (PfCount * PfPrice).round(2)); dr.setColumnValue("SsTotal", SsTotal); dr.setColumnValue("XTaxTotal", (SsTotal * (XTaxRate / 100 / (1 + XTaxRate / 100))).round(2)); return true; }; //PackCount 字段变化执行事件 Biz.prototype.fieldChangedPackCount = function (dataSrc, dr, dc) { let PackQty = TypeUtil.toFloat(dr['PackQty']); let PackCount = TypeUtil.toFloat(dr['PackCount']); let SglCount = TypeUtil.toFloat(dr['SglCount']); let PfPrice = TypeUtil.toFloat(dr['PfPrice']); let YhTotal = TypeUtil.toFloat(dr['YhTotal']); let XTaxRate = TypeUtil.toFloat(dr['XTaxRate']); let PfCount = 0.0; let SsTotal = 0.0; PfCount = (PackCount * PackQty) + SglCount; SsTotal = (PfCount * PfPrice).round(2) - YhTotal; dr.setColumnValue("PfCount", PfCount); dr.setColumnValue("YsTotal", (PfCount * PfPrice).round(2)); dr.setColumnValue("SsTotal", SsTotal); dr.setColumnValue("XTaxTotal", (SsTotal * (XTaxRate / 100 / (1 + XTaxRate / 100))).round(2)); return true; }; //YhTotal 字段变化执行事件 Biz.prototype.fieldChangedYhTotal = function (dataSrc, dr, dc) { let YsTotal = TypeUtil.toString(dr['YsTotal']); let YhTotal = TypeUtil.toFloat(dr['YhTotal']); let XTaxRate = TypeUtil.toFloat(dr['XTaxRate']); let SsTotal = 0.0; SsTotal = YsTotal - YhTotal; dr.setColumnValue("SsTotal", YsTotal - YhTotal); dr.setColumnValue("XTaxTotal", (SsTotal * (XTaxRate / 100 / (1 + XTaxRate / 100))).round(2)); return true; }; //XTaxRate 字段变化执行事件 Biz.prototype.fieldChangedXTaxRate = function (dataSrc, dr, dc) { let XTaxRate = TypeUtil.toFloat(dr['XTaxRate']); let SsTotal = TypeUtil.toFloat(dr['SsTotal']); dr.setColumnValue("XTaxTotal", (SsTotal * (XTaxRate / 100 / (1 + XTaxRate / 100))).round(2)); return true; }; //按钮事件控制 Biz.prototype.doOp = function (opCode) { let self = this; if (opCode == 'change') { let ds = self.dsMaster; this.onchange(self, ds); } }; //按钮事件 Biz.prototype.onchange = function (biz, ds) { let dsrow = ds.currentRow; let BillNo = dsrow ? TypeUtil.toString(dsrow['BillNo']) : ''; let ret = Service.getSlideMenuData("actExecute", "onchange", BillNo, "1603", Store.logOn.userId, Store.logOn.userCode, Store.logOn.userName); if (ret.result !== 1) { dsrow.setColumnError('BillNo', '转化失败:' + ret.message); return false; } else { Store.messager.tip('转化成功!'); //刷新当前页面 this.opRouter('refresh'); } return true; }; //控制主界面按钮状态 Biz.prototype.getOpEnabled = function (opCode) { let isOk = this.super('getOpEnabled', opCode); if (!isOk) return false; let curRow = this.dsMaster.currentRow; if (opCode == 'change') { let JzDate = curRow ? TypeUtil.toString(curRow['JzDate']) : ''; if (!curRow) return false; if (JzDate == '') return false; } return true; }; return Biz; });