tplus-pos
Version:
pos module
372 lines (324 loc) • 14.9 kB
JavaScript
;
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