UNPKG

tplus-pos

Version:

pos module

372 lines (324 loc) 14.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.SingleDiscountProcessBlock = undefined; var _getIterator2 = require('babel-runtime/core-js/get-iterator'); var _getIterator3 = _interopRequireDefault(_getIterator2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _REAlgorithmAdapter2 = require('../../../../commom/REAlgorithmAdapter'); var _REAlgorithmAdapter3 = _interopRequireDefault(_REAlgorithmAdapter2); var _Enum = require('../../../../commom/Enum'); var _UpdateRetailDetailProcessor = require('../UpdateRetailDetailProcessor'); var _MergeDetailsProcessorBlock = require('../../MergeDetailsProcessorBlock'); var _DetailCodeProcessor = require('../../DetailCodeProcessor'); var _QuantityChangeProcessorBlock = require('../../quantity/QuantityChangeProcessorBlock'); var _cloneDeep2 = require('lodash/cloneDeep'); var _cloneDeep3 = _interopRequireDefault(_cloneDeep2); var _mobx = require('mobx'); var _tplusPoslogin = require('tplus-poslogin'); var _mutantsUtil = require('mutants-util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /**处理明细的编码 */ /** *单品打折相关处理 * * @export * @class SingleDiscountProcessBlock */ //价格改变事件 var SingleDiscountProcessBlock = exports.SingleDiscountProcessBlock = function () { function SingleDiscountProcessBlock() { (0, _classCallCheck3.default)(this, SingleDiscountProcessBlock); } (0, _createClass3.default)(SingleDiscountProcessBlock, null, [{ key: 'execute', value: function execute(retailDto, detailList, promotionDto) { var promotiondetail = promotionDto.Details[0]; var usedQuantity = 0; var newdetailDto = {}; var promotiondetailList = []; var accwhenScan = (0, _tplusPoslogin.PosInitData)("AccwhenScan"); if (_mutantsUtil.platform.isVerticalTouch) //自助收银,都会自动累加 { accwhenScan = _Enum.AccwhenScan.accwhenScan_02; } var isMergePre = false; //考虑分类和品牌的限制总数的情况 if (promotiondetail.RestrictionQuantity && (promotionDto.PromotionObject == _Enum.PromotionObject.DR_PromotionObject_01 || promotionDto.PromotionObject == _Enum.PromotionObject.DR_PromotionObject_02)) { //查找此促销的已经使用的折扣信息的数量 usedQuantity = this.CalcUsedQuantity(retailDto, promotionDto, detailList); } if (accwhenScan == _Enum.AccwhenScan.accwhenScan_01) { isMergePre = true; } var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = (0, _getIterator3.default)(detailList), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var detailDto = _step.value; if (promotiondetail.RestrictionQuantity && promotiondetail.RestrictionQuantity <= usedQuantity) { continue; } //考虑退货的情况 var detailQuantity = detailDto.Quantity; var isMinus = false; if (retailDto.IdbusiType == 35 && detailQuantity < 0) { detailQuantity = detailDto.Quantity * -1; isMinus = true; } //判断数量是否超出了,需要考虑分类和品牌的总限售数量情况 var usedLimitQuantity = Math.Minus(promotiondetail.RestrictionQuantity, usedQuantity); if (promotiondetail.RestrictionQuantity && usedLimitQuantity < detailQuantity) { var quantity = Math.Minus(detailQuantity, usedLimitQuantity); detailQuantity = usedLimitQuantity; detailDto.Quantity = detailQuantity; //剩下的数量要拆行 newdetailDto = (0, _cloneDeep3.default)((0, _mobx.toJS)(detailDto)); JSON.setCellValue(newdetailDto, "isCurrentOperate", false); newdetailDto.Code = '9999'; newdetailDto.Quantity = quantity; if (isMinus) { newdetailDto.Quantity = newdetailDto.Quantity * -1; detailDto.Quantity = detailDto.Quantity * -1; } _QuantityChangeProcessorBlock.QuantityChangeProcessorBlock.execute(retailDto, detailDto, detailDto.Quantity, { isNotExecRunSingleDiscountProcessBlock: true, isNotExecAlgorithm: true }); //剩余的需要恢复原价 newdetailDto.DiscountRate = 1; newdetailDto.PromotionType = null; newdetailDto.IsUseIntegralAndCash = false; newdetailDto.IsUseStorage = false; newdetailDto.IsMemberIntegralUsedPromotion = true; newdetailDto.PromotionID = null; newdetailDto.PromotionCode = null; newdetailDto.PromotionDetails = []; newdetailDto.PromotionTypeStr = ''; newdetailDto.PromotionIdStr = ''; newdetailDto.PromotionCode = ''; // await runInAction(() => { //tuzha 考虑会员折扣的情况 // if (retailDto.IDMemberType && retailDto.IDMemberType > 0) { // //需要取会员折扣值 // await SetMemberDiscountProcessor.execute(retailDto, newdetailDto) // } //newdetailDto.MemberDiscountRate = 0.9; //数量改变事件 // await runInAction(() => { // if (newdetailDto.Quantity != detailDto.Quantity) { _QuantityChangeProcessorBlock.QuantityChangeProcessorBlock.execute(retailDto, newdetailDto, newdetailDto.Quantity, { isNotExecRunSingleDiscountProcessBlock: true, isNotExecAlgorithm: true }); // } // tuzha 考虑会员折扣的情况 if (retailDto.IDMemberType && retailDto.IDMemberType > 0) { //需要取会员折扣值 // const memberdetailDto = retailDto.RetailDetails.find(c => c.Code == newdetailDto.Code); // await SetMemberDiscountProcessor.execute(retailDto, memberdetailDto); var memberPrice = JSON.getCellValue(detailDto, "OrigMemberPrice"); var memberDiscountRate = JSON.getCellValue(detailDto, "OrigMemberDiscountRate"); if (memberPrice) { newdetailDto.MemberPrice = memberPrice; } newdetailDto.MemberDiscountRate = memberDiscountRate; } var _REAlgorithmAdapter = new _REAlgorithmAdapter3.default(retailDto); _REAlgorithmAdapter.DiscountRateChange(newdetailDto); // retailDto.RetailDetails.push(newdetailDto); // if (AccwhenScan.accwhenScan_01 == accwhenScan) {//与上行相同才累加 if (isMergePre) { this.MergePreRow(retailDto, newdetailDto); } else { retailDto.RetailDetails.push(newdetailDto); } } promotiondetailList.push(detailDto); usedQuantity = Math.Add(usedQuantity, detailQuantity); } // detailList.forEach(detailDto => { // }); // runInAction(() => { } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } switch (promotionDto.DiscountWay) { //单价折扣率 case _Enum.DiscountWay.DR_DiscountWay_00: this.ExecDiscountRate(promotionDto, promotiondetailList, retailDto, promotiondetail); break; //单价折扣额 case _Enum.DiscountWay.DR_DiscountWay_01: this.ExecDiscountAmount(promotionDto, promotiondetailList, retailDto, promotiondetail); break; //折后价 case _Enum.DiscountWay.DR_DiscountWay_02: this.ExecDiscountPrice(promotionDto, promotiondetailList, retailDto, promotiondetail); break; } //合并明细行 if (!isMergePre) { _MergeDetailsProcessorBlock.MergeDetailsProcessorBlock.execute(retailDto); } //处理编码 _DetailCodeProcessor.DetailCodeProcessor.execute(retailDto); // }); } //执行折扣率 }, { key: 'ExecDiscountRate', value: function ExecDiscountRate(promotionDto, promotiondetailList, retailDto, promotiondetail) { promotiondetailList.forEach(function (detailDto) { detailDto.DiscountRate = promotiondetail.DiscountRate; //是否会员折上折 if (!promotionDto.IsMemberDiscount) { detailDto.MemberDiscountRate = 1; detailDto.MemberPrice = detailDto.RetailPrice; } var _REAlgorithmAdapter = new _REAlgorithmAdapter3.default(retailDto); _REAlgorithmAdapter.DiscountRateChange(detailDto); //更新明细行促销信息 if (detailDto) { _UpdateRetailDetailProcessor.UpdateRetailDetailProcessor.execute(detailDto, promotionDto, true, retailDto.Code); } }); } //执行折扣额 }, { key: 'ExecDiscountAmount', value: function ExecDiscountAmount(promotionDto, promotiondetailList, retailDto, promotiondetail) { promotiondetailList.forEach(function (detailDto) { detailDto.TaxPrice = Math.Minus(detailDto.RetailPrice, promotiondetail.DiscountAmount); //是否会员折上折 if (!promotionDto.IsMemberDiscount) { detailDto.MemberDiscountRate = 1; detailDto.MemberPrice = detailDto.RetailPrice; } var _REAlgorithmAdapter = new _REAlgorithmAdapter3.default(retailDto); _REAlgorithmAdapter.DiscountTaxPriceChange(detailDto); //更新明细行促销信息 if (detailDto) { _UpdateRetailDetailProcessor.UpdateRetailDetailProcessor.execute(detailDto, promotionDto, true, retailDto.Code); } }); } //折后价 }, { key: 'ExecDiscountPrice', value: function ExecDiscountPrice(promotionDto, promotiondetailList, retailDto, promotiondetail) { promotiondetailList.forEach(function (detailDto) { //是否会员折上折 if (!promotionDto.IsMemberDiscount) { detailDto.MemberDiscountRate = 1; detailDto.MemberPrice = detailDto.RetailPrice; } detailDto.TaxPrice = promotiondetail.DiscountPrice; var _REAlgorithmAdapter = new _REAlgorithmAdapter3.default(retailDto); _REAlgorithmAdapter.DiscountTaxPriceChange(detailDto); //更新明细行促销信息 if (detailDto) { _UpdateRetailDetailProcessor.UpdateRetailDetailProcessor.execute(detailDto, promotionDto, true, retailDto.Code); } }); } }, { key: 'CalcUsedQuantity', value: function CalcUsedQuantity(retailDto, promotionDto, detailList) { var usedQuantity = 0; switch (promotionDto.PromotionObject) { case _Enum.PromotionObject.DR_PromotionObject_01: //分类 retailDto.RetailDetails.filter(function (detailDto) { return detailDto.PromotionCode && detailDto.PromotionCode.indexOf(promotionDto.PromotionCode) >= 0 && detailDto.Inventory.InventoryClass.InId.indexOf(promotionDto.Details[0].Inid) == 0; }).forEach(function (item) { var index = detailList.findIndex(function (it) { return it.Code == item.Code && it; }); if (index < 0) { usedQuantity = Math.Add(usedQuantity, item.Quantity); } }); break; case _Enum.PromotionObject.DR_PromotionObject_02: //品牌 retailDto.RetailDetails.filter(function (detailDto) { return detailDto.PromotionCode && detailDto.PromotionCode.indexOf(promotionDto.PromotionCode) >= 0 && detailDto.Inventory.ProductInfo && detailDto.Inventory.ProductInfo.Id == promotionDto.Details[0].CorpBrand.Id; }).forEach(function (item) { var index = detailList.findIndex(function (it) { return it.Code == item.Code; }); if (index < 0) { usedQuantity = Math.Add(usedQuantity, item.Quantity); } }); break; } return usedQuantity; } //与上行相同进行累积 }, { key: 'MergePreRow', value: function MergePreRow(retailDto, newdetailDto) { var length = retailDto.RetailDetails.length; if (length <= 1) { retailDto.RetailDetails.push(newdetailDto); return; } var preDetailDto = retailDto.RetailDetails[length - 1]; var newDetailKey = this.getDetailKey(newdetailDto); var preDetailKey = this.getDetailKey(preDetailDto); if (newDetailKey == preDetailKey) { this.addDetailValue(preDetailDto, newdetailDto); } else { retailDto.RetailDetails.push(newdetailDto); } } }, { key: 'getDetailKey', value: function getDetailKey(detail) { var returnKey = ""; var keyFields = "FreeItem0,FreeItem1,FreeItem2,FreeItem3,FreeItem4,FreeItem5,FreeItem6,FreeItem7,FreeItem8,FreeItem9,Idinventory,Idunit,Idunit2,Batch,ProductionDate,ExpiryDate,ReturnSourceDetailId,SerialNumber"; var keyArrays = keyFields.split(","); for (var index = 0; index < keyArrays.length; index++) { var value = ""; if (JSON.getCellValue(detail, keyArrays[index])) { value = JSON.getCellValue(detail, keyArrays[index]); } if (value && (keyArrays[index] == 'ProductionDate' || keyArrays[index] == 'ExpiryDate')) { var date = value; if (typeof value == "string") { date = new Date(value); } value = date.toLocaleDateString(); } returnKey = returnKey + "|" + keyArrays[index] + "=" + value; } return returnKey; } }, { key: 'addDetailValue', value: function addDetailValue(currentDetail, oldDetail) { var fields = 'Quantity,Quantity2,Amount,TaxAmount,Tax,DetailDiscountAmount'; var keyArrays = fields.split(","); for (var index = 0; index < keyArrays.length; index++) { var currentValue = JSON.getCellValue(currentDetail, keyArrays[index]); var OldValue = JSON.getCellValue(oldDetail, keyArrays[index]); JSON.setCellValue(currentDetail, keyArrays[index], Math.Add(currentValue, OldValue)); } } }]); return SingleDiscountProcessBlock; }(); //枚举 //# sourceMappingURL=SingleDiscountProcessBlock.js.map