@freedom_sky/feige-lib 5.13.0 → 5.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +2 -2
- package/.eslintrc.js +15 -15
- package/.prettierrc.js +6 -6
- package/CHANGE.md +24 -24
- package/dist/announcement/enum/announcement.enum.d.ts +11 -11
- package/dist/announcement/enum/announcement.enum.js +15 -15
- package/dist/buffet/index.d.ts +46 -46
- package/dist/buffet/index.js +95 -95
- package/dist/const/const.d.ts +363 -363
- package/dist/const/const.js +2416 -2416
- package/dist/enum/ai-token.enum.d.ts +10 -10
- package/dist/enum/ai-token.enum.js +14 -14
- package/dist/enum/checkout.enum.d.ts +13 -13
- package/dist/enum/checkout.enum.js +17 -17
- package/dist/enum/common.enum.d.ts +14 -14
- package/dist/enum/common.enum.js +18 -18
- package/dist/enum/continent.enum.d.ts +8 -8
- package/dist/enum/continent.enum.js +11 -11
- package/dist/enum/dish.enum.d.ts +4 -4
- package/dist/enum/dish.enum.js +7 -7
- package/dist/enum/from.enum.d.ts +14 -14
- package/dist/enum/from.enum.js +17 -17
- package/dist/enum/member.enum.d.ts +16 -16
- package/dist/enum/member.enum.js +21 -21
- package/dist/enum/menu-io.enum.d.ts +4 -4
- package/dist/enum/menu-io.enum.js +7 -7
- package/dist/enum/order.enum.d.ts +7 -7
- package/dist/enum/order.enum.js +10 -10
- package/dist/enum/pay-company.enum.d.ts +4 -4
- package/dist/enum/pay-company.enum.js +7 -7
- package/dist/enum/printer.enum.d.ts +37 -37
- package/dist/enum/printer.enum.js +46 -46
- package/dist/enum/receptionist.enum.d.ts +8 -8
- package/dist/enum/receptionist.enum.js +11 -11
- package/dist/enum/role.enum.d.ts +7 -7
- package/dist/enum/role.enum.js +10 -10
- package/dist/enum/sms.enum.d.ts +14 -14
- package/dist/enum/sms.enum.js +18 -18
- package/dist/enum/tax.enum.d.ts +4 -4
- package/dist/enum/tax.enum.js +7 -7
- package/dist/enum/time-menu.enum.d.ts +4 -4
- package/dist/enum/time-menu.enum.js +7 -7
- package/dist/enum/timezone.emum.d.ts +33 -33
- package/dist/enum/timezone.emum.js +36 -36
- package/dist/enum/user-status.enum.d.ts +9 -9
- package/dist/enum/user-status.enum.js +12 -12
- package/dist/enum/visit-task.enum.d.ts +13 -13
- package/dist/enum/visit-task.enum.js +17 -17
- package/dist/enum/yeepay.enum.d.ts +22 -22
- package/dist/enum/yeepay.enum.js +30 -30
- package/dist/index.d.ts +200 -200
- package/dist/index.js +561 -561
- package/dist/interfaces/common/language.interface.d.ts +15 -15
- package/dist/interfaces/common/language.interface.js +2 -2
- package/dist/interfaces/member/member-transaction.interface.d.ts +27 -27
- package/dist/interfaces/member/member-transaction.interface.js +2 -2
- package/dist/interfaces/member/member.interface.d.ts +16 -16
- package/dist/interfaces/member/member.interface.js +2 -2
- package/dist/interfaces/order/baseOrder.interface.d.ts +84 -83
- package/dist/interfaces/order/baseOrder.interface.js +2 -2
- package/dist/interfaces/order/buffetOrder.interface.d.ts +13 -13
- package/dist/interfaces/order/buffetOrder.interface.js +2 -2
- package/dist/interfaces/order/deliveryOrder.interface.d.ts +9 -9
- package/dist/interfaces/order/deliveryOrder.interface.js +2 -2
- package/dist/interfaces/order/index.d.ts +7 -7
- package/dist/interfaces/order/index.js +6 -6
- package/dist/interfaces/order/order.interface.d.ts +75 -75
- package/dist/interfaces/order/order.interface.js +17 -17
- package/dist/interfaces/order/pickupOrder.interface.d.ts +8 -8
- package/dist/interfaces/order/pickupOrder.interface.js +2 -2
- package/dist/interfaces/order/serialOrder.interface.d.ts +4 -4
- package/dist/interfaces/order/serialOrder.interface.js +2 -2
- package/dist/interfaces/order/tableOrder.interface.d.ts +7 -7
- package/dist/interfaces/order/tableOrder.interface.js +2 -2
- package/dist/interfaces/store/classification.interface.d.ts +7 -7
- package/dist/interfaces/store/classification.interface.js +2 -2
- package/dist/interfaces/store/dish.interface.d.ts +18 -18
- package/dist/interfaces/store/dish.interface.js +2 -2
- package/dist/interfaces/store/dishSnapshot.interface.d.ts +11 -11
- package/dist/interfaces/store/dishSnapshot.interface.js +2 -2
- package/dist/interfaces/store/member.interface.d.ts +8 -8
- package/dist/interfaces/store/member.interface.js +2 -2
- package/dist/interfaces/store/menu-export.interface.d.ts +12 -12
- package/dist/interfaces/store/menu-export.interface.js +2 -2
- package/dist/interfaces/store/specification.interface.d.ts +17 -17
- package/dist/interfaces/store/specification.interface.js +2 -2
- package/dist/interfaces/store/store.interface.d.ts +287 -287
- package/dist/interfaces/store/store.interface.js +2 -2
- package/dist/interfaces/store/subscription.interface.d.ts +43 -43
- package/dist/interfaces/store/subscription.interface.js +2 -2
- package/dist/interfaces/user/user.interface.d.ts +139 -139
- package/dist/interfaces/user/user.interface.js +2 -2
- package/dist/interfaces/visit-task/visit-task.interface.d.ts +17 -17
- package/dist/interfaces/visit-task/visit-task.interface.js +2 -2
- package/dist/order/index.d.ts +21 -21
- package/dist/order/index.js +57 -57
- package/jest.config.js +189 -189
- package/josn-hub/orders/tax-have-price-bind-order.ts +381 -381
- package/josn-hub/orders/tax-order.ts +371 -371
- package/josn-hub/orders//346/225/264/345/215/225/344/273/267/346/240/274/351/203/275/346/230/257/350/264/237/346/225/260/347/232/204/346/203/205/345/206/265.ts +321 -321
- package/josn-hub/orders//346/234/211/344/270/200/344/270/252/350/217/234/347/232/204/344/273/267/346/240/274/346/230/257/350/264/237/346/225/260/347/232/204/346/203/205/345/206/265.ts +348 -348
- package/josn-hub/orders//347/202/271/344/272/206/344/270/215/345/212/240/344/273/267/345/222/214/345/233/272/345/256/232/345/212/240/345/207/217/344/273/267/350/247/204/346/240/274/347/232/204/350/256/242/345/215/225.ts +350 -350
- package/josn-hub/orders//347/202/271/344/272/206/345/233/272/345/256/232/345/212/240/344/273/267-/347/231/276/345/210/206/346/257/224/345/212/240/344/273/267/350/247/204/346/240/274/347/232/204/350/256/242/345/215/225.ts +301 -301
- package/josn-hub/orders//347/202/271/344/272/206/346/234/252/345/212/240/344/273/267/350/247/204/346/240/274/347/232/204/350/256/242/345/215/225.ts +321 -321
- package/josn-hub/orders//347/202/271/344/272/206/346/234/252/345/212/240/344/273/267/350/247/204/346/240/274/347/232/204/350/256/242/345/215/225/345/271/266/346/234/211/351/205/215/351/200/201/350/264/271.ts +159 -159
- package/josn-hub/orders//350/207/252/345/212/251/351/244/220/347/232/204/346/203/205/345/206/265.ts +665 -665
- package/josn-hub/orders//351/203/250/345/210/206/351/200/200/350/217/234/347/232/204/346/203/205/345/206/265.ts +73 -73
- package/package.json +55 -55
- package/src/announcement/enum/announcement.enum.ts +12 -12
- package/src/buffet/index.ts +123 -123
- package/src/const/const.ts +2433 -2433
- package/src/enum/ai-token.enum.ts +10 -10
- package/src/enum/checkout.enum.ts +14 -14
- package/src/enum/common.enum.ts +15 -15
- package/src/enum/continent.enum.ts +8 -8
- package/src/enum/dish.enum.ts +4 -4
- package/src/enum/from.enum.ts +14 -14
- package/src/enum/member.enum.ts +16 -16
- package/src/enum/menu-io.enum.ts +4 -4
- package/src/enum/order.enum.ts +7 -7
- package/src/enum/pay-company.enum.ts +4 -4
- package/src/enum/printer.enum.ts +41 -41
- package/src/enum/receptionist.enum.ts +8 -8
- package/src/enum/role.enum.ts +7 -7
- package/src/enum/sms.enum.ts +14 -14
- package/src/enum/tax.enum.ts +4 -4
- package/src/enum/time-menu.enum.ts +4 -4
- package/src/enum/timezone.emum.ts +33 -33
- package/src/enum/user-status.enum.ts +9 -9
- package/src/enum/visit-task.enum.ts +14 -14
- package/src/enum/yeepay.enum.ts +27 -27
- package/src/index.spec.ts +1082 -1082
- package/src/index.ts +612 -612
- package/src/interfaces/common/language.interface.ts +15 -15
- package/src/interfaces/member/member-transaction.interface.ts +32 -32
- package/src/interfaces/member/member.interface.ts +16 -16
- package/src/interfaces/order/baseOrder.interface.ts +89 -88
- package/src/interfaces/order/buffetOrder.interface.ts +14 -14
- package/src/interfaces/order/deliveryOrder.interface.ts +10 -10
- package/src/interfaces/order/index.ts +7 -7
- package/src/interfaces/order/order.interface.ts +84 -84
- package/src/interfaces/order/pickupOrder.interface.ts +9 -9
- package/src/interfaces/order/serialOrder.interface.ts +5 -5
- package/src/interfaces/order/tableOrder.interface.ts +8 -8
- package/src/interfaces/store/classification.interface.ts +7 -7
- package/src/interfaces/store/dish.interface.ts +18 -18
- package/src/interfaces/store/dishSnapshot.interface.ts +12 -12
- package/src/interfaces/store/member.interface.ts +9 -9
- package/src/interfaces/store/menu-export.interface.ts +13 -13
- package/src/interfaces/store/specification.interface.ts +17 -17
- package/src/interfaces/store/store.interface.ts +303 -303
- package/src/interfaces/store/subscription.interface.ts +43 -43
- package/src/interfaces/user/user.interface.ts +139 -139
- package/src/interfaces/visit-task/visit-task.interface.ts +17 -17
- package/src/order/index.ts +89 -89
- package/tsconfig.json +12 -12
- package/dist/enum/checkout.emum.d.ts +0 -11
- package/dist/enum/checkout.emum.js +0 -15
- package/dist/enum/language.enum.d.ts +0 -21
- package/dist/enum/language.enum.js +0 -29
- package/dist/interfaces/member-transaction/member-transaction.interface.d.ts +0 -16
- package/dist/interfaces/member-transaction/member-transaction.interface.js +0 -2
- package/dist/interfaces/member-transaction/member.interface.d.ts +0 -16
- package/dist/interfaces/member-transaction/member.interface.js +0 -2
- package/dist/interfaces/order/pickupOrder.interface copy.d.ts +0 -8
- package/dist/interfaces/order/pickupOrder.interface copy.js +0 -2
- package/dist/interfaces/order/seriesOrder.interface.d.ts +0 -4
- package/dist/interfaces/order/seriesOrder.interface.js +0 -2
- package/dist/interfaces/order/tableOrder.interface copy.d.ts +0 -6
- package/dist/interfaces/order/tableOrder.interface copy.js +0 -2
- package/dist/interfaces/store/subscription.interface copy.d.ts +0 -27
- package/dist/interfaces/store/subscription.interface copy.js +0 -2
package/dist/index.js
CHANGED
|
@@ -1,561 +1,561 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
function __export(m) {
|
|
3
|
-
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
|
|
4
|
-
}
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
var const_1 = require("./const/const");
|
|
7
|
-
exports.CONST = const_1.CONST;
|
|
8
|
-
var printer_enum_1 = require("./enum/printer.enum");
|
|
9
|
-
exports.PrintStatusEnum = printer_enum_1.PrintStatusEnum;
|
|
10
|
-
exports.PrinterDeviceTypeEnum = printer_enum_1.PrinterDeviceTypeEnum;
|
|
11
|
-
exports.PrinterWidthEnum = printer_enum_1.PrinterWidthEnum;
|
|
12
|
-
var dish_enum_1 = require("./enum/dish.enum");
|
|
13
|
-
__export(require("./enum/common.enum"));
|
|
14
|
-
__export(require("./enum/time-menu.enum"));
|
|
15
|
-
__export(require("./enum/printer.enum"));
|
|
16
|
-
__export(require("./enum/member.enum"));
|
|
17
|
-
__export(require("./enum/sms.enum"));
|
|
18
|
-
__export(require("./enum/ai-token.enum"));
|
|
19
|
-
__export(require("./enum/checkout.enum"));
|
|
20
|
-
__export(require("./enum/yeepay.enum"));
|
|
21
|
-
__export(require("./enum/timezone.emum"));
|
|
22
|
-
__export(require("./enum/order.enum"));
|
|
23
|
-
__export(require("./enum/tax.enum"));
|
|
24
|
-
__export(require("./enum/dish.enum"));
|
|
25
|
-
__export(require("./enum/user-status.enum"));
|
|
26
|
-
__export(require("./enum/visit-task.enum"));
|
|
27
|
-
__export(require("./enum/receptionist.enum"));
|
|
28
|
-
__export(require("./enum/from.enum"));
|
|
29
|
-
__export(require("./enum/role.enum"));
|
|
30
|
-
__export(require("./enum/continent.enum"));
|
|
31
|
-
__export(require("./announcement/enum/announcement.enum"));
|
|
32
|
-
var menu_io_enum_1 = require("./enum/menu-io.enum");
|
|
33
|
-
exports.MenuImportModeEnum = menu_io_enum_1.MenuImportModeEnum;
|
|
34
|
-
__export(require("./interfaces/order"));
|
|
35
|
-
var pay_company_enum_1 = require("./enum/pay-company.enum");
|
|
36
|
-
exports.PayCompanyEnum = pay_company_enum_1.PayCompanyEnum;
|
|
37
|
-
var moment = require("moment");
|
|
38
|
-
exports.moment = moment;
|
|
39
|
-
var big_js_1 = require("big.js");
|
|
40
|
-
exports.Big = big_js_1.default;
|
|
41
|
-
var tax_enum_1 = require("./enum/tax.enum");
|
|
42
|
-
var order_enum_1 = require("./enum/order.enum");
|
|
43
|
-
var index_1 = require("./buffet/index");
|
|
44
|
-
__export(require("./buffet/index"));
|
|
45
|
-
__export(require("./order/index"));
|
|
46
|
-
/**
|
|
47
|
-
* 小数转化为金额,去除分位之后的尾数
|
|
48
|
-
*
|
|
49
|
-
* @param {number} num 需要转换的数字
|
|
50
|
-
* @returns {number} 返回只保留两位小数的money
|
|
51
|
-
*/
|
|
52
|
-
function parseMoney(num) {
|
|
53
|
-
return Math.round(num * 100) / 100;
|
|
54
|
-
}
|
|
55
|
-
exports.parseMoney = parseMoney;
|
|
56
|
-
/**
|
|
57
|
-
* 计算加了规格后的菜品单价
|
|
58
|
-
*
|
|
59
|
-
* @param {Content} conent 单个菜品内容
|
|
60
|
-
* @returns {number} 返回订单总金额
|
|
61
|
-
*
|
|
62
|
-
*/
|
|
63
|
-
function calcDishFinalPrice(conent) {
|
|
64
|
-
var addPrice = 0;
|
|
65
|
-
var originPrice = conent.dishSnapshot.type === dish_enum_1.DishType.Weigh
|
|
66
|
-
? conent.weight * conent.dishSnapshot.price
|
|
67
|
-
: conent.dishSnapshot.price;
|
|
68
|
-
var selectedSpecifications = conent.dishSnapshot.selectedSpecifications || [];
|
|
69
|
-
selectedSpecifications.forEach(function (specification) {
|
|
70
|
-
if (!specification) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
specification.content.forEach(function (item) {
|
|
74
|
-
if (item.fareType == const_1.CONST.FARE_TYPE.FIXED) {
|
|
75
|
-
addPrice += item.fare;
|
|
76
|
-
}
|
|
77
|
-
else if (item.fareType == const_1.CONST.FARE_TYPE.PERCENTAGE) {
|
|
78
|
-
addPrice += (originPrice * item.fare) / 100;
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
var dishPrice = originPrice + addPrice;
|
|
83
|
-
if (dishPrice < 0) {
|
|
84
|
-
dishPrice = 0;
|
|
85
|
-
}
|
|
86
|
-
return parseMoney(dishPrice);
|
|
87
|
-
}
|
|
88
|
-
exports.calcDishFinalPrice = calcDishFinalPrice;
|
|
89
|
-
/**
|
|
90
|
-
* 利用订单计算总价
|
|
91
|
-
*
|
|
92
|
-
* @param {object} order 订单
|
|
93
|
-
* @returns {number} 返回订单总金额
|
|
94
|
-
*
|
|
95
|
-
*/
|
|
96
|
-
function calcTotalPrice(order) {
|
|
97
|
-
var totalPrice = 0;
|
|
98
|
-
order.content.forEach(function (orderContentItem) {
|
|
99
|
-
var _a;
|
|
100
|
-
totalPrice += calcContentPrice({
|
|
101
|
-
orderContentItem: orderContentItem,
|
|
102
|
-
buffetItem: (_a = order.buffet) === null || _a === void 0 ? void 0 : _a.snapshot,
|
|
103
|
-
orderType: order.type,
|
|
104
|
-
adultNum: order.adultNum,
|
|
105
|
-
childNum: order.childNum,
|
|
106
|
-
contents: order.content,
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
if (order.deliveryFee && !order.selfPickUp) {
|
|
110
|
-
totalPrice += order.deliveryFee;
|
|
111
|
-
}
|
|
112
|
-
if (order.type === order_enum_1.OrderTypeEnum.Buffet) {
|
|
113
|
-
totalPrice += index_1.calcBuffetTotalPrice(order.buffet.snapshot, order.adultNum, order.childNum);
|
|
114
|
-
}
|
|
115
|
-
return parseMoney(totalPrice);
|
|
116
|
-
}
|
|
117
|
-
exports.calcTotalPrice = calcTotalPrice;
|
|
118
|
-
/**
|
|
119
|
-
*
|
|
120
|
-
*/
|
|
121
|
-
function calcContentPrice(_a) {
|
|
122
|
-
var orderContentItem = _a.orderContentItem, buffetItem = _a.buffetItem, orderType = _a.orderType, adultNum = _a.adultNum, childNum = _a.childNum, contents = _a.contents;
|
|
123
|
-
if (orderType === order_enum_1.OrderTypeEnum.Buffet) {
|
|
124
|
-
var buffetDishItem = index_1.getDishItemInBuffet({ dishId: orderContentItem.dishSnapshot._id, buffet: buffetItem });
|
|
125
|
-
if (buffetDishItem) {
|
|
126
|
-
var maxUpperLimit = index_1.getMaxBuffetDishUpperLimit({
|
|
127
|
-
buffetDishItem: buffetDishItem,
|
|
128
|
-
adultNum: adultNum,
|
|
129
|
-
childNum: childNum,
|
|
130
|
-
});
|
|
131
|
-
var beforeCount = getOrderedCountByDishId(orderContentItem.dishSnapshot._id, contents, orderContentItem._id);
|
|
132
|
-
var maxUpperLimitForThisItem = Math.max(maxUpperLimit - beforeCount, 0);
|
|
133
|
-
if (maxUpperLimitForThisItem >= orderContentItem.count) {
|
|
134
|
-
return 0;
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
return (orderContentItem.count - maxUpperLimitForThisItem) * calcDishFinalPrice(orderContentItem);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
return orderContentItem.count * calcDishFinalPrice(orderContentItem);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
return orderContentItem.count * calcDishFinalPrice(orderContentItem);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
exports.calcContentPrice = calcContentPrice;
|
|
149
|
-
/**
|
|
150
|
-
* @param dishId
|
|
151
|
-
* @param contents
|
|
152
|
-
* @param beforeKey
|
|
153
|
-
*/
|
|
154
|
-
function getOrderedCountByDishId(dishId, contents, beforeKey) {
|
|
155
|
-
var count = 0;
|
|
156
|
-
for (var _i = 0, _a = contents.filter(function (content) { return String(content.dishSnapshot._id) === String(dishId); }); _i < _a.length; _i++) {
|
|
157
|
-
var content = _a[_i];
|
|
158
|
-
if (beforeKey && String(content._id) === String(beforeKey))
|
|
159
|
-
break;
|
|
160
|
-
count += content.count;
|
|
161
|
-
}
|
|
162
|
-
return count;
|
|
163
|
-
}
|
|
164
|
-
exports.getOrderedCountByDishId = getOrderedCountByDishId;
|
|
165
|
-
/**
|
|
166
|
-
* 计算处理后的应收金额
|
|
167
|
-
*
|
|
168
|
-
* @param {object} order 订单
|
|
169
|
-
* @param {Array} processArr 结账处理过程
|
|
170
|
-
* @param noTax
|
|
171
|
-
* @param taxEnable
|
|
172
|
-
* @returns {object} 返回应收订单总金额,以及处理计算过程
|
|
173
|
-
*/
|
|
174
|
-
function calcReceivablePrice(order, processArr, noTax) {
|
|
175
|
-
if (noTax === void 0) { noTax = false; }
|
|
176
|
-
var _a, _b;
|
|
177
|
-
var totalDiscountPrice = 0;
|
|
178
|
-
var resultProcessArr = [];
|
|
179
|
-
var totalPrice = calcTotalPrice(order);
|
|
180
|
-
var receivablePrice = totalPrice;
|
|
181
|
-
var sortedProcessArr = processArr.sort(function (a, b) {
|
|
182
|
-
return (const_1.CONST.RECEIVABLE_PROCESSING_TYPE[b.type.toUpperCase()].SORT -
|
|
183
|
-
const_1.CONST.RECEIVABLE_PROCESSING_TYPE[a.type.toUpperCase()].SORT);
|
|
184
|
-
});
|
|
185
|
-
var totalMarkDown = 0;
|
|
186
|
-
var receivablePriceAfterDiscount = receivablePrice;
|
|
187
|
-
sortedProcessArr.forEach(function (process) {
|
|
188
|
-
if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE) {
|
|
189
|
-
var rate_1 = -(10 - process.value) / 10;
|
|
190
|
-
var volume_1 = 0;
|
|
191
|
-
order.content.forEach(function (orderContentItem) {
|
|
192
|
-
var _a;
|
|
193
|
-
if (orderContentItem.dishSnapshot.noFullOrderDiscount) {
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
var dishTotalPrice = calcContentPrice({
|
|
197
|
-
orderContentItem: orderContentItem,
|
|
198
|
-
buffetItem: (_a = order.buffet) === null || _a === void 0 ? void 0 : _a.snapshot,
|
|
199
|
-
orderType: order.type,
|
|
200
|
-
adultNum: order.adultNum,
|
|
201
|
-
childNum: order.childNum,
|
|
202
|
-
contents: order.content,
|
|
203
|
-
});
|
|
204
|
-
totalDiscountPrice += dishTotalPrice;
|
|
205
|
-
volume_1 += dishTotalPrice * rate_1;
|
|
206
|
-
});
|
|
207
|
-
if (order.type === order_enum_1.OrderTypeEnum.Buffet) {
|
|
208
|
-
var buffetTotalPrice = index_1.calcBuffetTotalPrice(order.buffet.snapshot, order.adultNum, order.childNum);
|
|
209
|
-
totalDiscountPrice += buffetTotalPrice;
|
|
210
|
-
volume_1 += buffetTotalPrice * rate_1;
|
|
211
|
-
}
|
|
212
|
-
resultProcessArr.push({
|
|
213
|
-
type: process.type,
|
|
214
|
-
value: process.value,
|
|
215
|
-
volume: volume_1,
|
|
216
|
-
});
|
|
217
|
-
receivablePrice += volume_1;
|
|
218
|
-
receivablePriceAfterDiscount = receivablePrice;
|
|
219
|
-
}
|
|
220
|
-
else if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.MARKDOWN.TYPE) {
|
|
221
|
-
var volume = -process.value;
|
|
222
|
-
resultProcessArr.push({
|
|
223
|
-
type: process.type,
|
|
224
|
-
value: process.value,
|
|
225
|
-
volume: volume,
|
|
226
|
-
});
|
|
227
|
-
receivablePrice += volume;
|
|
228
|
-
totalMarkDown += -volume;
|
|
229
|
-
}
|
|
230
|
-
else if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.REMOVE_TAILS.TYPE) {
|
|
231
|
-
var pow = Math.pow(10, process.value - 2);
|
|
232
|
-
var result = Math.floor(receivablePrice / pow) * pow;
|
|
233
|
-
var volume = -(receivablePrice - result);
|
|
234
|
-
resultProcessArr.push({
|
|
235
|
-
type: process.type,
|
|
236
|
-
value: process.value,
|
|
237
|
-
volume: volume,
|
|
238
|
-
});
|
|
239
|
-
receivablePrice += volume;
|
|
240
|
-
totalMarkDown += -volume;
|
|
241
|
-
}
|
|
242
|
-
});
|
|
243
|
-
var taxObj = {};
|
|
244
|
-
if (order.taxType === tax_enum_1.TaxTypeEnum.PriceNoTaxBindDish && !noTax) {
|
|
245
|
-
order.content.forEach(function (orderContentItem) {
|
|
246
|
-
var _a, _b;
|
|
247
|
-
if (!orderContentItem.dishSnapshot.taxes || orderContentItem.dishSnapshot.taxes.length === 0) {
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
var discountValue = (_a = sortedProcessArr.find(function (process) { return process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE; })) === null || _a === void 0 ? void 0 : _a.value;
|
|
251
|
-
var dishTotalPrice = calcContentPrice({
|
|
252
|
-
orderContentItem: orderContentItem,
|
|
253
|
-
buffetItem: (_b = order.buffet) === null || _b === void 0 ? void 0 : _b.snapshot,
|
|
254
|
-
orderType: order.type,
|
|
255
|
-
adultNum: order.adultNum,
|
|
256
|
-
childNum: order.childNum,
|
|
257
|
-
contents: order.content,
|
|
258
|
-
});
|
|
259
|
-
if (discountValue && !orderContentItem.dishSnapshot.noFullOrderDiscount) {
|
|
260
|
-
var rate = -(10 - discountValue) / 10;
|
|
261
|
-
dishTotalPrice += dishTotalPrice * rate;
|
|
262
|
-
}
|
|
263
|
-
var sharedMarkDown = (totalMarkDown * dishTotalPrice) / receivablePriceAfterDiscount;
|
|
264
|
-
orderContentItem.dishSnapshot.taxes.forEach(function (tax) {
|
|
265
|
-
var taxFare = (dishTotalPrice - sharedMarkDown) * tax.rate;
|
|
266
|
-
var taxKey = tax.name + "(" + big_js_1.default(tax.rate).times(100) + "%)";
|
|
267
|
-
taxObj[taxKey] = (taxObj[taxKey] || 0) + parseMoney(taxFare);
|
|
268
|
-
});
|
|
269
|
-
});
|
|
270
|
-
// buffet price
|
|
271
|
-
if (order.type === order_enum_1.OrderTypeEnum.Buffet) {
|
|
272
|
-
var discountValue = (_a = sortedProcessArr.find(function (process) { return process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE; })) === null || _a === void 0 ? void 0 : _a.value;
|
|
273
|
-
var buffetTotalPrice_1 = index_1.calcBuffetTotalPrice((_b = order.buffet) === null || _b === void 0 ? void 0 : _b.snapshot, order.adultNum, order.childNum);
|
|
274
|
-
if (discountValue) {
|
|
275
|
-
var rate = -(10 - discountValue) / 10;
|
|
276
|
-
buffetTotalPrice_1 += buffetTotalPrice_1 * rate;
|
|
277
|
-
}
|
|
278
|
-
var sharedMarkDown_1 = (totalMarkDown * buffetTotalPrice_1) / receivablePriceAfterDiscount;
|
|
279
|
-
order.buffet.taxes.forEach(function (tax) {
|
|
280
|
-
var taxFare = (buffetTotalPrice_1 - sharedMarkDown_1) * tax.rate;
|
|
281
|
-
var taxKey = tax.name + "(" + big_js_1.default(tax.rate).times(100) + "%)";
|
|
282
|
-
taxObj[taxKey] = (taxObj[taxKey] || 0) + parseMoney(taxFare);
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
else if (order.taxType === tax_enum_1.TaxTypeEnum.PriceHaveTaxBindOrder && !noTax) {
|
|
287
|
-
var totalTaxRate_1 = 0;
|
|
288
|
-
order.priceHaveTaxBindOrderTaxes.forEach(function (item) {
|
|
289
|
-
totalTaxRate_1 += item.rate;
|
|
290
|
-
});
|
|
291
|
-
var totalTaxFare_1 = receivablePrice - receivablePrice / (totalTaxRate_1 + 1);
|
|
292
|
-
order.priceHaveTaxBindOrderTaxes.forEach(function (item) {
|
|
293
|
-
var taxFare = (item.rate / totalTaxRate_1) * totalTaxFare_1;
|
|
294
|
-
var taxKey = item.name + "(" + big_js_1.default(item.rate).times(100) + "%)";
|
|
295
|
-
taxObj[taxKey] = (taxObj[taxKey] || 0) + parseMoney(taxFare);
|
|
296
|
-
});
|
|
297
|
-
}
|
|
298
|
-
var taxArr = [];
|
|
299
|
-
for (var name_1 in taxObj) {
|
|
300
|
-
taxArr.push({
|
|
301
|
-
name: name_1,
|
|
302
|
-
volume: taxObj[name_1],
|
|
303
|
-
});
|
|
304
|
-
if (order.taxType === tax_enum_1.TaxTypeEnum.PriceNoTaxBindDish) {
|
|
305
|
-
receivablePrice += taxObj[name_1];
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
taxArr.sort(function (item1, item2) { return item1.name - item2.name; });
|
|
309
|
-
return {
|
|
310
|
-
resultProcessArr: resultProcessArr,
|
|
311
|
-
receivablePrice: parseMoney(receivablePrice),
|
|
312
|
-
taxArr: taxArr,
|
|
313
|
-
totalPrice: totalPrice,
|
|
314
|
-
totalDiscountPrice: totalDiscountPrice,
|
|
315
|
-
};
|
|
316
|
-
}
|
|
317
|
-
exports.calcReceivablePrice = calcReceivablePrice;
|
|
318
|
-
/**
|
|
319
|
-
* 计算已收金额
|
|
320
|
-
*
|
|
321
|
-
* @param {Array} checkoutArr 结账记录
|
|
322
|
-
* @returns {number} 返回已收总金额
|
|
323
|
-
*/
|
|
324
|
-
function calcReceived(checkoutArr) {
|
|
325
|
-
if (!checkoutArr) {
|
|
326
|
-
checkoutArr = [];
|
|
327
|
-
}
|
|
328
|
-
var totalPaid = 0;
|
|
329
|
-
checkoutArr.forEach(function (checkout) {
|
|
330
|
-
if (!checkout.retreated) {
|
|
331
|
-
totalPaid += checkout.amount;
|
|
332
|
-
}
|
|
333
|
-
});
|
|
334
|
-
return parseMoney(totalPaid);
|
|
335
|
-
}
|
|
336
|
-
exports.calcReceived = calcReceived;
|
|
337
|
-
/**
|
|
338
|
-
* 计算剩余金额,去除尾数
|
|
339
|
-
*
|
|
340
|
-
* @param {number} receivablePrice 应收
|
|
341
|
-
* @param {number} received 已收
|
|
342
|
-
* @returns {number} 返回已收总金额
|
|
343
|
-
*/
|
|
344
|
-
function calcLeft(receivablePrice, received) {
|
|
345
|
-
var left = receivablePrice - received;
|
|
346
|
-
return parseMoney(left);
|
|
347
|
-
}
|
|
348
|
-
exports.calcLeft = calcLeft;
|
|
349
|
-
/**
|
|
350
|
-
* 获得可读的订单处理过程
|
|
351
|
-
*
|
|
352
|
-
* @param {Process} process 订单处理过程
|
|
353
|
-
* @returns {string} 返回可读字符串
|
|
354
|
-
*/
|
|
355
|
-
function getReadbleProcess(process) {
|
|
356
|
-
var result = '';
|
|
357
|
-
if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE) {
|
|
358
|
-
result = '打' + process.value + '折';
|
|
359
|
-
}
|
|
360
|
-
else {
|
|
361
|
-
result = const_1.CONST.RECEIVABLE_PROCESSING_TYPE[process.type.toUpperCase()].TEXT;
|
|
362
|
-
}
|
|
363
|
-
return result;
|
|
364
|
-
}
|
|
365
|
-
exports.getReadbleProcess = getReadbleProcess;
|
|
366
|
-
var CHECK_STORE_SUBSCRIPTION_REASON;
|
|
367
|
-
(function (CHECK_STORE_SUBSCRIPTION_REASON) {
|
|
368
|
-
CHECK_STORE_SUBSCRIPTION_REASON[CHECK_STORE_SUBSCRIPTION_REASON["NeedBuy"] = 1] = "NeedBuy";
|
|
369
|
-
CHECK_STORE_SUBSCRIPTION_REASON[CHECK_STORE_SUBSCRIPTION_REASON["Expires"] = 2] = "Expires";
|
|
370
|
-
})(CHECK_STORE_SUBSCRIPTION_REASON = exports.CHECK_STORE_SUBSCRIPTION_REASON || (exports.CHECK_STORE_SUBSCRIPTION_REASON = {}));
|
|
371
|
-
/**
|
|
372
|
-
* 检查店铺是否开通了特定的功能
|
|
373
|
-
*
|
|
374
|
-
* @param {Store} store 店铺
|
|
375
|
-
* @param {string} moduleId 功能id
|
|
376
|
-
* @param {string | Date | number} now 对比时间
|
|
377
|
-
* @returns {string} 返回可读字符串
|
|
378
|
-
*/
|
|
379
|
-
function checkStoreSubscription(store, moduleId, now) {
|
|
380
|
-
var result;
|
|
381
|
-
var reason;
|
|
382
|
-
// 检查永久开通
|
|
383
|
-
if (store.subscription && store.subscription[moduleId] && store.subscription[moduleId].permanent) {
|
|
384
|
-
return {
|
|
385
|
-
result: true,
|
|
386
|
-
reason: reason,
|
|
387
|
-
};
|
|
388
|
-
}
|
|
389
|
-
// 非永久开通,检查过期时间
|
|
390
|
-
if (!(store.subscription && store.subscription[moduleId] && store.subscription[moduleId].expires)) {
|
|
391
|
-
result = false;
|
|
392
|
-
reason = CHECK_STORE_SUBSCRIPTION_REASON.NeedBuy;
|
|
393
|
-
}
|
|
394
|
-
else if (moment(store.subscription[moduleId].expires).isBefore(now ? moment(now) : moment())) {
|
|
395
|
-
result = false;
|
|
396
|
-
reason = CHECK_STORE_SUBSCRIPTION_REASON.Expires;
|
|
397
|
-
}
|
|
398
|
-
else {
|
|
399
|
-
result = true;
|
|
400
|
-
}
|
|
401
|
-
return {
|
|
402
|
-
result: result,
|
|
403
|
-
reason: reason,
|
|
404
|
-
};
|
|
405
|
-
}
|
|
406
|
-
exports.checkStoreSubscription = checkStoreSubscription;
|
|
407
|
-
/**
|
|
408
|
-
* 根据店铺获取当前应该用的语言
|
|
409
|
-
*
|
|
410
|
-
* @param {Store} store 店铺
|
|
411
|
-
* @param {string} wantLang 想要的语言
|
|
412
|
-
* @param {string | Date | number} now 对比时间
|
|
413
|
-
* @returns {object} 返回当前语言和可用语言
|
|
414
|
-
*/
|
|
415
|
-
function getCurrentLangAndRange(store, wantLang, now) {
|
|
416
|
-
var result = store.defaultLang;
|
|
417
|
-
var langs = [store.defaultLang]; //可用语言范围
|
|
418
|
-
if (checkStoreSubscription(store, const_1.CONST.BUSINESS.SUPER_MULTI_LANGUAGE.ID, now).result) {
|
|
419
|
-
langs = const_1.CONST.LANGUAGE.map(function (lang) { return lang.code; });
|
|
420
|
-
}
|
|
421
|
-
else if (checkStoreSubscription(store, const_1.CONST.BUSINESS.MULTI_LANGUAGE.ID, now).result) {
|
|
422
|
-
langs = store.subscription.multiLanguage.allow;
|
|
423
|
-
}
|
|
424
|
-
if (wantLang && langs.filter(function (item) { return wantLang.includes(item); }).length > 0) {
|
|
425
|
-
result = wantLang;
|
|
426
|
-
}
|
|
427
|
-
return {
|
|
428
|
-
currentLang: result,
|
|
429
|
-
availableLangs: langs,
|
|
430
|
-
};
|
|
431
|
-
}
|
|
432
|
-
exports.getCurrentLangAndRange = getCurrentLangAndRange;
|
|
433
|
-
/**
|
|
434
|
-
* 在语言对象中找到当前语言最匹配的值,
|
|
435
|
-
* 1. 精确匹配
|
|
436
|
-
* 2. 如果没有精确匹配,寻找默认语言
|
|
437
|
-
* 3. 如果默认语言也没有匹配,则返回第一个不为空的语言
|
|
438
|
-
* 4. 如果都为空,那么返回undefinded
|
|
439
|
-
*
|
|
440
|
-
* @param {object} names 语言
|
|
441
|
-
* @param {string} currentLang 目标语言
|
|
442
|
-
* @param {string} defaultLang 默认语言
|
|
443
|
-
* @returns {string} 返回当前语言的值
|
|
444
|
-
*/
|
|
445
|
-
function getNameFromNames(names, currentLang, defaultLang) {
|
|
446
|
-
return (names &&
|
|
447
|
-
(names[currentLang] || names[defaultLang] || names[Object.keys(names).filter(function (name) { return names[name]; })[0]]));
|
|
448
|
-
}
|
|
449
|
-
exports.getNameFromNames = getNameFromNames;
|
|
450
|
-
/**
|
|
451
|
-
* 根据语言返回处理过的店铺数据
|
|
452
|
-
*
|
|
453
|
-
* @param {Store} store 店铺
|
|
454
|
-
* @param {string} currentLang 目标语言
|
|
455
|
-
* @param {string} defaultLang 默认语言
|
|
456
|
-
* @returns {object} 返回当前语言和可用语言
|
|
457
|
-
*/
|
|
458
|
-
function getStoreByLanguage(store, currentLang, defaultLang) {
|
|
459
|
-
store.name = getNameFromNames(store.names, currentLang, defaultLang) || store.name;
|
|
460
|
-
store.description = getNameFromNames(store.descriptions, currentLang, defaultLang) || store.description;
|
|
461
|
-
store.classifications.forEach(function (classification) {
|
|
462
|
-
classification.name = getNameFromNames(classification.names, currentLang, defaultLang) || classification.name;
|
|
463
|
-
});
|
|
464
|
-
store.dishes.forEach(function (dish) {
|
|
465
|
-
dish.name = getNameFromNames(dish.names, currentLang, defaultLang) || dish.name;
|
|
466
|
-
dish.description = getNameFromNames(dish.descriptions, currentLang, defaultLang) || dish.description;
|
|
467
|
-
});
|
|
468
|
-
store.specifications.forEach(function (specifications) {
|
|
469
|
-
specifications.name = getNameFromNames(specifications.names, currentLang, defaultLang) || specifications.name;
|
|
470
|
-
specifications.content.forEach(function (content) {
|
|
471
|
-
content.name = getNameFromNames(content.names, currentLang, defaultLang) || content.name;
|
|
472
|
-
});
|
|
473
|
-
});
|
|
474
|
-
return store;
|
|
475
|
-
}
|
|
476
|
-
exports.getStoreByLanguage = getStoreByLanguage;
|
|
477
|
-
/**
|
|
478
|
-
* 根据语言返回处理过的店铺数据
|
|
479
|
-
*
|
|
480
|
-
* @param {Content} content 订单内容
|
|
481
|
-
* @param {string} currentLang 目标语言
|
|
482
|
-
* @param {string} defaultLang 默认语言
|
|
483
|
-
* @returns {Content} 返回当前语言的订单
|
|
484
|
-
*/
|
|
485
|
-
function getContentByLanguage(content, currentLang, defaultLang) {
|
|
486
|
-
var dish = content.dishSnapshot;
|
|
487
|
-
dish.name = getNameFromNames(dish.names, currentLang, defaultLang) || dish.name;
|
|
488
|
-
if (dish.selectedSpecifications) {
|
|
489
|
-
dish.selectedSpecifications &&
|
|
490
|
-
dish.selectedSpecifications.forEach(function (specification) {
|
|
491
|
-
specification.name =
|
|
492
|
-
getNameFromNames(specification.names, currentLang, defaultLang) || specification.name;
|
|
493
|
-
specification.content.forEach(function (tag) {
|
|
494
|
-
tag.name = getNameFromNames(tag.names, currentLang, defaultLang) || tag.name;
|
|
495
|
-
});
|
|
496
|
-
});
|
|
497
|
-
}
|
|
498
|
-
return content;
|
|
499
|
-
}
|
|
500
|
-
/**
|
|
501
|
-
* 根据语言返回处理过的订单数据
|
|
502
|
-
*
|
|
503
|
-
* @param {Order} order 店铺
|
|
504
|
-
* @param {string} currentLang 目标语言
|
|
505
|
-
* @param {string} defaultLang 默认语言
|
|
506
|
-
* @returns {Order} 返回当前语言的订单
|
|
507
|
-
*/
|
|
508
|
-
function getOrderByLanguage(order, currentLang, defaultLang) {
|
|
509
|
-
if (order.content) {
|
|
510
|
-
order.content.map(function (dishGroup) {
|
|
511
|
-
return getContentByLanguage(dishGroup, currentLang, defaultLang);
|
|
512
|
-
});
|
|
513
|
-
}
|
|
514
|
-
if (order.tasks) {
|
|
515
|
-
order.tasks.forEach(function (task) {
|
|
516
|
-
if (task.content) {
|
|
517
|
-
task.content.map(function (dishGroup) {
|
|
518
|
-
return getContentByLanguage(dishGroup, currentLang, defaultLang);
|
|
519
|
-
});
|
|
520
|
-
}
|
|
521
|
-
});
|
|
522
|
-
}
|
|
523
|
-
return order;
|
|
524
|
-
}
|
|
525
|
-
exports.getOrderByLanguage = getOrderByLanguage;
|
|
526
|
-
/**
|
|
527
|
-
* 根据电话区号返回语言码,如果没找到,返回英文
|
|
528
|
-
*
|
|
529
|
-
* @param {string} countryCode 区号
|
|
530
|
-
* @returns {string} 语言代码的小写格式
|
|
531
|
-
*/
|
|
532
|
-
function getLanguageFromCountryCode(countryCode) {
|
|
533
|
-
var data = {
|
|
534
|
-
'86': 'zh',
|
|
535
|
-
};
|
|
536
|
-
var languageCode = data[String(countryCode)] || 'en';
|
|
537
|
-
return languageCode;
|
|
538
|
-
}
|
|
539
|
-
exports.getLanguageFromCountryCode = getLanguageFromCountryCode;
|
|
540
|
-
/**
|
|
541
|
-
* 根据dishID返回已经下单的数量
|
|
542
|
-
*
|
|
543
|
-
* @param {Order} order 店铺
|
|
544
|
-
* @param dishId
|
|
545
|
-
* @returns {number} 返回当前数量
|
|
546
|
-
*/
|
|
547
|
-
function getDishCountByIdInAllUncanceledTasks(order, dishId) {
|
|
548
|
-
var count = 0;
|
|
549
|
-
if (order.tasks) {
|
|
550
|
-
count = order.tasks
|
|
551
|
-
.filter(function (task) { return task.status !== const_1.CONST.STATUS.CANCELLED; })
|
|
552
|
-
.reduce(function (count, task) {
|
|
553
|
-
return (count +
|
|
554
|
-
task.content
|
|
555
|
-
.filter(function (item) { return String(item.dishSnapshot._id) === String(dishId); })
|
|
556
|
-
.reduce(function (value, item) { return value + item.count; }, 0));
|
|
557
|
-
}, 0);
|
|
558
|
-
}
|
|
559
|
-
return count;
|
|
560
|
-
}
|
|
561
|
-
exports.getDishCountByIdInAllUncanceledTasks = getDishCountByIdInAllUncanceledTasks;
|
|
1
|
+
"use strict";
|
|
2
|
+
function __export(m) {
|
|
3
|
+
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
|
|
4
|
+
}
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var const_1 = require("./const/const");
|
|
7
|
+
exports.CONST = const_1.CONST;
|
|
8
|
+
var printer_enum_1 = require("./enum/printer.enum");
|
|
9
|
+
exports.PrintStatusEnum = printer_enum_1.PrintStatusEnum;
|
|
10
|
+
exports.PrinterDeviceTypeEnum = printer_enum_1.PrinterDeviceTypeEnum;
|
|
11
|
+
exports.PrinterWidthEnum = printer_enum_1.PrinterWidthEnum;
|
|
12
|
+
var dish_enum_1 = require("./enum/dish.enum");
|
|
13
|
+
__export(require("./enum/common.enum"));
|
|
14
|
+
__export(require("./enum/time-menu.enum"));
|
|
15
|
+
__export(require("./enum/printer.enum"));
|
|
16
|
+
__export(require("./enum/member.enum"));
|
|
17
|
+
__export(require("./enum/sms.enum"));
|
|
18
|
+
__export(require("./enum/ai-token.enum"));
|
|
19
|
+
__export(require("./enum/checkout.enum"));
|
|
20
|
+
__export(require("./enum/yeepay.enum"));
|
|
21
|
+
__export(require("./enum/timezone.emum"));
|
|
22
|
+
__export(require("./enum/order.enum"));
|
|
23
|
+
__export(require("./enum/tax.enum"));
|
|
24
|
+
__export(require("./enum/dish.enum"));
|
|
25
|
+
__export(require("./enum/user-status.enum"));
|
|
26
|
+
__export(require("./enum/visit-task.enum"));
|
|
27
|
+
__export(require("./enum/receptionist.enum"));
|
|
28
|
+
__export(require("./enum/from.enum"));
|
|
29
|
+
__export(require("./enum/role.enum"));
|
|
30
|
+
__export(require("./enum/continent.enum"));
|
|
31
|
+
__export(require("./announcement/enum/announcement.enum"));
|
|
32
|
+
var menu_io_enum_1 = require("./enum/menu-io.enum");
|
|
33
|
+
exports.MenuImportModeEnum = menu_io_enum_1.MenuImportModeEnum;
|
|
34
|
+
__export(require("./interfaces/order"));
|
|
35
|
+
var pay_company_enum_1 = require("./enum/pay-company.enum");
|
|
36
|
+
exports.PayCompanyEnum = pay_company_enum_1.PayCompanyEnum;
|
|
37
|
+
var moment = require("moment");
|
|
38
|
+
exports.moment = moment;
|
|
39
|
+
var big_js_1 = require("big.js");
|
|
40
|
+
exports.Big = big_js_1.default;
|
|
41
|
+
var tax_enum_1 = require("./enum/tax.enum");
|
|
42
|
+
var order_enum_1 = require("./enum/order.enum");
|
|
43
|
+
var index_1 = require("./buffet/index");
|
|
44
|
+
__export(require("./buffet/index"));
|
|
45
|
+
__export(require("./order/index"));
|
|
46
|
+
/**
|
|
47
|
+
* 小数转化为金额,去除分位之后的尾数
|
|
48
|
+
*
|
|
49
|
+
* @param {number} num 需要转换的数字
|
|
50
|
+
* @returns {number} 返回只保留两位小数的money
|
|
51
|
+
*/
|
|
52
|
+
function parseMoney(num) {
|
|
53
|
+
return Math.round(num * 100) / 100;
|
|
54
|
+
}
|
|
55
|
+
exports.parseMoney = parseMoney;
|
|
56
|
+
/**
|
|
57
|
+
* 计算加了规格后的菜品单价
|
|
58
|
+
*
|
|
59
|
+
* @param {Content} conent 单个菜品内容
|
|
60
|
+
* @returns {number} 返回订单总金额
|
|
61
|
+
*
|
|
62
|
+
*/
|
|
63
|
+
function calcDishFinalPrice(conent) {
|
|
64
|
+
var addPrice = 0;
|
|
65
|
+
var originPrice = conent.dishSnapshot.type === dish_enum_1.DishType.Weigh
|
|
66
|
+
? conent.weight * conent.dishSnapshot.price
|
|
67
|
+
: conent.dishSnapshot.price;
|
|
68
|
+
var selectedSpecifications = conent.dishSnapshot.selectedSpecifications || [];
|
|
69
|
+
selectedSpecifications.forEach(function (specification) {
|
|
70
|
+
if (!specification) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
specification.content.forEach(function (item) {
|
|
74
|
+
if (item.fareType == const_1.CONST.FARE_TYPE.FIXED) {
|
|
75
|
+
addPrice += item.fare;
|
|
76
|
+
}
|
|
77
|
+
else if (item.fareType == const_1.CONST.FARE_TYPE.PERCENTAGE) {
|
|
78
|
+
addPrice += (originPrice * item.fare) / 100;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
var dishPrice = originPrice + addPrice;
|
|
83
|
+
if (dishPrice < 0) {
|
|
84
|
+
dishPrice = 0;
|
|
85
|
+
}
|
|
86
|
+
return parseMoney(dishPrice);
|
|
87
|
+
}
|
|
88
|
+
exports.calcDishFinalPrice = calcDishFinalPrice;
|
|
89
|
+
/**
|
|
90
|
+
* 利用订单计算总价
|
|
91
|
+
*
|
|
92
|
+
* @param {object} order 订单
|
|
93
|
+
* @returns {number} 返回订单总金额
|
|
94
|
+
*
|
|
95
|
+
*/
|
|
96
|
+
function calcTotalPrice(order) {
|
|
97
|
+
var totalPrice = 0;
|
|
98
|
+
order.content.forEach(function (orderContentItem) {
|
|
99
|
+
var _a;
|
|
100
|
+
totalPrice += calcContentPrice({
|
|
101
|
+
orderContentItem: orderContentItem,
|
|
102
|
+
buffetItem: (_a = order.buffet) === null || _a === void 0 ? void 0 : _a.snapshot,
|
|
103
|
+
orderType: order.type,
|
|
104
|
+
adultNum: order.adultNum,
|
|
105
|
+
childNum: order.childNum,
|
|
106
|
+
contents: order.content,
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
if (order.deliveryFee && !order.selfPickUp) {
|
|
110
|
+
totalPrice += order.deliveryFee;
|
|
111
|
+
}
|
|
112
|
+
if (order.type === order_enum_1.OrderTypeEnum.Buffet) {
|
|
113
|
+
totalPrice += index_1.calcBuffetTotalPrice(order.buffet.snapshot, order.adultNum, order.childNum);
|
|
114
|
+
}
|
|
115
|
+
return parseMoney(totalPrice);
|
|
116
|
+
}
|
|
117
|
+
exports.calcTotalPrice = calcTotalPrice;
|
|
118
|
+
/**
|
|
119
|
+
*
|
|
120
|
+
*/
|
|
121
|
+
function calcContentPrice(_a) {
|
|
122
|
+
var orderContentItem = _a.orderContentItem, buffetItem = _a.buffetItem, orderType = _a.orderType, adultNum = _a.adultNum, childNum = _a.childNum, contents = _a.contents;
|
|
123
|
+
if (orderType === order_enum_1.OrderTypeEnum.Buffet) {
|
|
124
|
+
var buffetDishItem = index_1.getDishItemInBuffet({ dishId: orderContentItem.dishSnapshot._id, buffet: buffetItem });
|
|
125
|
+
if (buffetDishItem) {
|
|
126
|
+
var maxUpperLimit = index_1.getMaxBuffetDishUpperLimit({
|
|
127
|
+
buffetDishItem: buffetDishItem,
|
|
128
|
+
adultNum: adultNum,
|
|
129
|
+
childNum: childNum,
|
|
130
|
+
});
|
|
131
|
+
var beforeCount = getOrderedCountByDishId(orderContentItem.dishSnapshot._id, contents, orderContentItem._id);
|
|
132
|
+
var maxUpperLimitForThisItem = Math.max(maxUpperLimit - beforeCount, 0);
|
|
133
|
+
if (maxUpperLimitForThisItem >= orderContentItem.count) {
|
|
134
|
+
return 0;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
return (orderContentItem.count - maxUpperLimitForThisItem) * calcDishFinalPrice(orderContentItem);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
return orderContentItem.count * calcDishFinalPrice(orderContentItem);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
return orderContentItem.count * calcDishFinalPrice(orderContentItem);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.calcContentPrice = calcContentPrice;
|
|
149
|
+
/**
|
|
150
|
+
* @param dishId
|
|
151
|
+
* @param contents
|
|
152
|
+
* @param beforeKey
|
|
153
|
+
*/
|
|
154
|
+
function getOrderedCountByDishId(dishId, contents, beforeKey) {
|
|
155
|
+
var count = 0;
|
|
156
|
+
for (var _i = 0, _a = contents.filter(function (content) { return String(content.dishSnapshot._id) === String(dishId); }); _i < _a.length; _i++) {
|
|
157
|
+
var content = _a[_i];
|
|
158
|
+
if (beforeKey && String(content._id) === String(beforeKey))
|
|
159
|
+
break;
|
|
160
|
+
count += content.count;
|
|
161
|
+
}
|
|
162
|
+
return count;
|
|
163
|
+
}
|
|
164
|
+
exports.getOrderedCountByDishId = getOrderedCountByDishId;
|
|
165
|
+
/**
|
|
166
|
+
* 计算处理后的应收金额
|
|
167
|
+
*
|
|
168
|
+
* @param {object} order 订单
|
|
169
|
+
* @param {Array} processArr 结账处理过程
|
|
170
|
+
* @param noTax
|
|
171
|
+
* @param taxEnable
|
|
172
|
+
* @returns {object} 返回应收订单总金额,以及处理计算过程
|
|
173
|
+
*/
|
|
174
|
+
function calcReceivablePrice(order, processArr, noTax) {
|
|
175
|
+
if (noTax === void 0) { noTax = false; }
|
|
176
|
+
var _a, _b;
|
|
177
|
+
var totalDiscountPrice = 0;
|
|
178
|
+
var resultProcessArr = [];
|
|
179
|
+
var totalPrice = calcTotalPrice(order);
|
|
180
|
+
var receivablePrice = totalPrice;
|
|
181
|
+
var sortedProcessArr = processArr.sort(function (a, b) {
|
|
182
|
+
return (const_1.CONST.RECEIVABLE_PROCESSING_TYPE[b.type.toUpperCase()].SORT -
|
|
183
|
+
const_1.CONST.RECEIVABLE_PROCESSING_TYPE[a.type.toUpperCase()].SORT);
|
|
184
|
+
});
|
|
185
|
+
var totalMarkDown = 0;
|
|
186
|
+
var receivablePriceAfterDiscount = receivablePrice;
|
|
187
|
+
sortedProcessArr.forEach(function (process) {
|
|
188
|
+
if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE) {
|
|
189
|
+
var rate_1 = -(10 - process.value) / 10;
|
|
190
|
+
var volume_1 = 0;
|
|
191
|
+
order.content.forEach(function (orderContentItem) {
|
|
192
|
+
var _a;
|
|
193
|
+
if (orderContentItem.dishSnapshot.noFullOrderDiscount) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
var dishTotalPrice = calcContentPrice({
|
|
197
|
+
orderContentItem: orderContentItem,
|
|
198
|
+
buffetItem: (_a = order.buffet) === null || _a === void 0 ? void 0 : _a.snapshot,
|
|
199
|
+
orderType: order.type,
|
|
200
|
+
adultNum: order.adultNum,
|
|
201
|
+
childNum: order.childNum,
|
|
202
|
+
contents: order.content,
|
|
203
|
+
});
|
|
204
|
+
totalDiscountPrice += dishTotalPrice;
|
|
205
|
+
volume_1 += dishTotalPrice * rate_1;
|
|
206
|
+
});
|
|
207
|
+
if (order.type === order_enum_1.OrderTypeEnum.Buffet) {
|
|
208
|
+
var buffetTotalPrice = index_1.calcBuffetTotalPrice(order.buffet.snapshot, order.adultNum, order.childNum);
|
|
209
|
+
totalDiscountPrice += buffetTotalPrice;
|
|
210
|
+
volume_1 += buffetTotalPrice * rate_1;
|
|
211
|
+
}
|
|
212
|
+
resultProcessArr.push({
|
|
213
|
+
type: process.type,
|
|
214
|
+
value: process.value,
|
|
215
|
+
volume: volume_1,
|
|
216
|
+
});
|
|
217
|
+
receivablePrice += volume_1;
|
|
218
|
+
receivablePriceAfterDiscount = receivablePrice;
|
|
219
|
+
}
|
|
220
|
+
else if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.MARKDOWN.TYPE) {
|
|
221
|
+
var volume = -process.value;
|
|
222
|
+
resultProcessArr.push({
|
|
223
|
+
type: process.type,
|
|
224
|
+
value: process.value,
|
|
225
|
+
volume: volume,
|
|
226
|
+
});
|
|
227
|
+
receivablePrice += volume;
|
|
228
|
+
totalMarkDown += -volume;
|
|
229
|
+
}
|
|
230
|
+
else if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.REMOVE_TAILS.TYPE) {
|
|
231
|
+
var pow = Math.pow(10, process.value - 2);
|
|
232
|
+
var result = Math.floor(receivablePrice / pow) * pow;
|
|
233
|
+
var volume = -(receivablePrice - result);
|
|
234
|
+
resultProcessArr.push({
|
|
235
|
+
type: process.type,
|
|
236
|
+
value: process.value,
|
|
237
|
+
volume: volume,
|
|
238
|
+
});
|
|
239
|
+
receivablePrice += volume;
|
|
240
|
+
totalMarkDown += -volume;
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
var taxObj = {};
|
|
244
|
+
if (order.taxType === tax_enum_1.TaxTypeEnum.PriceNoTaxBindDish && !noTax) {
|
|
245
|
+
order.content.forEach(function (orderContentItem) {
|
|
246
|
+
var _a, _b;
|
|
247
|
+
if (!orderContentItem.dishSnapshot.taxes || orderContentItem.dishSnapshot.taxes.length === 0) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
var discountValue = (_a = sortedProcessArr.find(function (process) { return process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE; })) === null || _a === void 0 ? void 0 : _a.value;
|
|
251
|
+
var dishTotalPrice = calcContentPrice({
|
|
252
|
+
orderContentItem: orderContentItem,
|
|
253
|
+
buffetItem: (_b = order.buffet) === null || _b === void 0 ? void 0 : _b.snapshot,
|
|
254
|
+
orderType: order.type,
|
|
255
|
+
adultNum: order.adultNum,
|
|
256
|
+
childNum: order.childNum,
|
|
257
|
+
contents: order.content,
|
|
258
|
+
});
|
|
259
|
+
if (discountValue && !orderContentItem.dishSnapshot.noFullOrderDiscount) {
|
|
260
|
+
var rate = -(10 - discountValue) / 10;
|
|
261
|
+
dishTotalPrice += dishTotalPrice * rate;
|
|
262
|
+
}
|
|
263
|
+
var sharedMarkDown = (totalMarkDown * dishTotalPrice) / receivablePriceAfterDiscount;
|
|
264
|
+
orderContentItem.dishSnapshot.taxes.forEach(function (tax) {
|
|
265
|
+
var taxFare = (dishTotalPrice - sharedMarkDown) * tax.rate;
|
|
266
|
+
var taxKey = tax.name + "(" + big_js_1.default(tax.rate).times(100) + "%)";
|
|
267
|
+
taxObj[taxKey] = (taxObj[taxKey] || 0) + parseMoney(taxFare);
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
// buffet price
|
|
271
|
+
if (order.type === order_enum_1.OrderTypeEnum.Buffet) {
|
|
272
|
+
var discountValue = (_a = sortedProcessArr.find(function (process) { return process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE; })) === null || _a === void 0 ? void 0 : _a.value;
|
|
273
|
+
var buffetTotalPrice_1 = index_1.calcBuffetTotalPrice((_b = order.buffet) === null || _b === void 0 ? void 0 : _b.snapshot, order.adultNum, order.childNum);
|
|
274
|
+
if (discountValue) {
|
|
275
|
+
var rate = -(10 - discountValue) / 10;
|
|
276
|
+
buffetTotalPrice_1 += buffetTotalPrice_1 * rate;
|
|
277
|
+
}
|
|
278
|
+
var sharedMarkDown_1 = (totalMarkDown * buffetTotalPrice_1) / receivablePriceAfterDiscount;
|
|
279
|
+
order.buffet.taxes.forEach(function (tax) {
|
|
280
|
+
var taxFare = (buffetTotalPrice_1 - sharedMarkDown_1) * tax.rate;
|
|
281
|
+
var taxKey = tax.name + "(" + big_js_1.default(tax.rate).times(100) + "%)";
|
|
282
|
+
taxObj[taxKey] = (taxObj[taxKey] || 0) + parseMoney(taxFare);
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
else if (order.taxType === tax_enum_1.TaxTypeEnum.PriceHaveTaxBindOrder && !noTax) {
|
|
287
|
+
var totalTaxRate_1 = 0;
|
|
288
|
+
order.priceHaveTaxBindOrderTaxes.forEach(function (item) {
|
|
289
|
+
totalTaxRate_1 += item.rate;
|
|
290
|
+
});
|
|
291
|
+
var totalTaxFare_1 = receivablePrice - receivablePrice / (totalTaxRate_1 + 1);
|
|
292
|
+
order.priceHaveTaxBindOrderTaxes.forEach(function (item) {
|
|
293
|
+
var taxFare = (item.rate / totalTaxRate_1) * totalTaxFare_1;
|
|
294
|
+
var taxKey = item.name + "(" + big_js_1.default(item.rate).times(100) + "%)";
|
|
295
|
+
taxObj[taxKey] = (taxObj[taxKey] || 0) + parseMoney(taxFare);
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
var taxArr = [];
|
|
299
|
+
for (var name_1 in taxObj) {
|
|
300
|
+
taxArr.push({
|
|
301
|
+
name: name_1,
|
|
302
|
+
volume: taxObj[name_1],
|
|
303
|
+
});
|
|
304
|
+
if (order.taxType === tax_enum_1.TaxTypeEnum.PriceNoTaxBindDish) {
|
|
305
|
+
receivablePrice += taxObj[name_1];
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
taxArr.sort(function (item1, item2) { return item1.name - item2.name; });
|
|
309
|
+
return {
|
|
310
|
+
resultProcessArr: resultProcessArr,
|
|
311
|
+
receivablePrice: parseMoney(receivablePrice),
|
|
312
|
+
taxArr: taxArr,
|
|
313
|
+
totalPrice: totalPrice,
|
|
314
|
+
totalDiscountPrice: totalDiscountPrice,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
exports.calcReceivablePrice = calcReceivablePrice;
|
|
318
|
+
/**
|
|
319
|
+
* 计算已收金额
|
|
320
|
+
*
|
|
321
|
+
* @param {Array} checkoutArr 结账记录
|
|
322
|
+
* @returns {number} 返回已收总金额
|
|
323
|
+
*/
|
|
324
|
+
function calcReceived(checkoutArr) {
|
|
325
|
+
if (!checkoutArr) {
|
|
326
|
+
checkoutArr = [];
|
|
327
|
+
}
|
|
328
|
+
var totalPaid = 0;
|
|
329
|
+
checkoutArr.forEach(function (checkout) {
|
|
330
|
+
if (!checkout.retreated) {
|
|
331
|
+
totalPaid += checkout.amount;
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
return parseMoney(totalPaid);
|
|
335
|
+
}
|
|
336
|
+
exports.calcReceived = calcReceived;
|
|
337
|
+
/**
|
|
338
|
+
* 计算剩余金额,去除尾数
|
|
339
|
+
*
|
|
340
|
+
* @param {number} receivablePrice 应收
|
|
341
|
+
* @param {number} received 已收
|
|
342
|
+
* @returns {number} 返回已收总金额
|
|
343
|
+
*/
|
|
344
|
+
function calcLeft(receivablePrice, received) {
|
|
345
|
+
var left = receivablePrice - received;
|
|
346
|
+
return parseMoney(left);
|
|
347
|
+
}
|
|
348
|
+
exports.calcLeft = calcLeft;
|
|
349
|
+
/**
|
|
350
|
+
* 获得可读的订单处理过程
|
|
351
|
+
*
|
|
352
|
+
* @param {Process} process 订单处理过程
|
|
353
|
+
* @returns {string} 返回可读字符串
|
|
354
|
+
*/
|
|
355
|
+
function getReadbleProcess(process) {
|
|
356
|
+
var result = '';
|
|
357
|
+
if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE) {
|
|
358
|
+
result = '打' + process.value + '折';
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
result = const_1.CONST.RECEIVABLE_PROCESSING_TYPE[process.type.toUpperCase()].TEXT;
|
|
362
|
+
}
|
|
363
|
+
return result;
|
|
364
|
+
}
|
|
365
|
+
exports.getReadbleProcess = getReadbleProcess;
|
|
366
|
+
var CHECK_STORE_SUBSCRIPTION_REASON;
|
|
367
|
+
(function (CHECK_STORE_SUBSCRIPTION_REASON) {
|
|
368
|
+
CHECK_STORE_SUBSCRIPTION_REASON[CHECK_STORE_SUBSCRIPTION_REASON["NeedBuy"] = 1] = "NeedBuy";
|
|
369
|
+
CHECK_STORE_SUBSCRIPTION_REASON[CHECK_STORE_SUBSCRIPTION_REASON["Expires"] = 2] = "Expires";
|
|
370
|
+
})(CHECK_STORE_SUBSCRIPTION_REASON = exports.CHECK_STORE_SUBSCRIPTION_REASON || (exports.CHECK_STORE_SUBSCRIPTION_REASON = {}));
|
|
371
|
+
/**
|
|
372
|
+
* 检查店铺是否开通了特定的功能
|
|
373
|
+
*
|
|
374
|
+
* @param {Store} store 店铺
|
|
375
|
+
* @param {string} moduleId 功能id
|
|
376
|
+
* @param {string | Date | number} now 对比时间
|
|
377
|
+
* @returns {string} 返回可读字符串
|
|
378
|
+
*/
|
|
379
|
+
function checkStoreSubscription(store, moduleId, now) {
|
|
380
|
+
var result;
|
|
381
|
+
var reason;
|
|
382
|
+
// 检查永久开通
|
|
383
|
+
if (store.subscription && store.subscription[moduleId] && store.subscription[moduleId].permanent) {
|
|
384
|
+
return {
|
|
385
|
+
result: true,
|
|
386
|
+
reason: reason,
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
// 非永久开通,检查过期时间
|
|
390
|
+
if (!(store.subscription && store.subscription[moduleId] && store.subscription[moduleId].expires)) {
|
|
391
|
+
result = false;
|
|
392
|
+
reason = CHECK_STORE_SUBSCRIPTION_REASON.NeedBuy;
|
|
393
|
+
}
|
|
394
|
+
else if (moment(store.subscription[moduleId].expires).isBefore(now ? moment(now) : moment())) {
|
|
395
|
+
result = false;
|
|
396
|
+
reason = CHECK_STORE_SUBSCRIPTION_REASON.Expires;
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
result = true;
|
|
400
|
+
}
|
|
401
|
+
return {
|
|
402
|
+
result: result,
|
|
403
|
+
reason: reason,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
exports.checkStoreSubscription = checkStoreSubscription;
|
|
407
|
+
/**
|
|
408
|
+
* 根据店铺获取当前应该用的语言
|
|
409
|
+
*
|
|
410
|
+
* @param {Store} store 店铺
|
|
411
|
+
* @param {string} wantLang 想要的语言
|
|
412
|
+
* @param {string | Date | number} now 对比时间
|
|
413
|
+
* @returns {object} 返回当前语言和可用语言
|
|
414
|
+
*/
|
|
415
|
+
function getCurrentLangAndRange(store, wantLang, now) {
|
|
416
|
+
var result = store.defaultLang;
|
|
417
|
+
var langs = [store.defaultLang]; //可用语言范围
|
|
418
|
+
if (checkStoreSubscription(store, const_1.CONST.BUSINESS.SUPER_MULTI_LANGUAGE.ID, now).result) {
|
|
419
|
+
langs = const_1.CONST.LANGUAGE.map(function (lang) { return lang.code; });
|
|
420
|
+
}
|
|
421
|
+
else if (checkStoreSubscription(store, const_1.CONST.BUSINESS.MULTI_LANGUAGE.ID, now).result) {
|
|
422
|
+
langs = store.subscription.multiLanguage.allow;
|
|
423
|
+
}
|
|
424
|
+
if (wantLang && langs.filter(function (item) { return wantLang.includes(item); }).length > 0) {
|
|
425
|
+
result = wantLang;
|
|
426
|
+
}
|
|
427
|
+
return {
|
|
428
|
+
currentLang: result,
|
|
429
|
+
availableLangs: langs,
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
exports.getCurrentLangAndRange = getCurrentLangAndRange;
|
|
433
|
+
/**
|
|
434
|
+
* 在语言对象中找到当前语言最匹配的值,
|
|
435
|
+
* 1. 精确匹配
|
|
436
|
+
* 2. 如果没有精确匹配,寻找默认语言
|
|
437
|
+
* 3. 如果默认语言也没有匹配,则返回第一个不为空的语言
|
|
438
|
+
* 4. 如果都为空,那么返回undefinded
|
|
439
|
+
*
|
|
440
|
+
* @param {object} names 语言
|
|
441
|
+
* @param {string} currentLang 目标语言
|
|
442
|
+
* @param {string} defaultLang 默认语言
|
|
443
|
+
* @returns {string} 返回当前语言的值
|
|
444
|
+
*/
|
|
445
|
+
function getNameFromNames(names, currentLang, defaultLang) {
|
|
446
|
+
return (names &&
|
|
447
|
+
(names[currentLang] || names[defaultLang] || names[Object.keys(names).filter(function (name) { return names[name]; })[0]]));
|
|
448
|
+
}
|
|
449
|
+
exports.getNameFromNames = getNameFromNames;
|
|
450
|
+
/**
|
|
451
|
+
* 根据语言返回处理过的店铺数据
|
|
452
|
+
*
|
|
453
|
+
* @param {Store} store 店铺
|
|
454
|
+
* @param {string} currentLang 目标语言
|
|
455
|
+
* @param {string} defaultLang 默认语言
|
|
456
|
+
* @returns {object} 返回当前语言和可用语言
|
|
457
|
+
*/
|
|
458
|
+
function getStoreByLanguage(store, currentLang, defaultLang) {
|
|
459
|
+
store.name = getNameFromNames(store.names, currentLang, defaultLang) || store.name;
|
|
460
|
+
store.description = getNameFromNames(store.descriptions, currentLang, defaultLang) || store.description;
|
|
461
|
+
store.classifications.forEach(function (classification) {
|
|
462
|
+
classification.name = getNameFromNames(classification.names, currentLang, defaultLang) || classification.name;
|
|
463
|
+
});
|
|
464
|
+
store.dishes.forEach(function (dish) {
|
|
465
|
+
dish.name = getNameFromNames(dish.names, currentLang, defaultLang) || dish.name;
|
|
466
|
+
dish.description = getNameFromNames(dish.descriptions, currentLang, defaultLang) || dish.description;
|
|
467
|
+
});
|
|
468
|
+
store.specifications.forEach(function (specifications) {
|
|
469
|
+
specifications.name = getNameFromNames(specifications.names, currentLang, defaultLang) || specifications.name;
|
|
470
|
+
specifications.content.forEach(function (content) {
|
|
471
|
+
content.name = getNameFromNames(content.names, currentLang, defaultLang) || content.name;
|
|
472
|
+
});
|
|
473
|
+
});
|
|
474
|
+
return store;
|
|
475
|
+
}
|
|
476
|
+
exports.getStoreByLanguage = getStoreByLanguage;
|
|
477
|
+
/**
|
|
478
|
+
* 根据语言返回处理过的店铺数据
|
|
479
|
+
*
|
|
480
|
+
* @param {Content} content 订单内容
|
|
481
|
+
* @param {string} currentLang 目标语言
|
|
482
|
+
* @param {string} defaultLang 默认语言
|
|
483
|
+
* @returns {Content} 返回当前语言的订单
|
|
484
|
+
*/
|
|
485
|
+
function getContentByLanguage(content, currentLang, defaultLang) {
|
|
486
|
+
var dish = content.dishSnapshot;
|
|
487
|
+
dish.name = getNameFromNames(dish.names, currentLang, defaultLang) || dish.name;
|
|
488
|
+
if (dish.selectedSpecifications) {
|
|
489
|
+
dish.selectedSpecifications &&
|
|
490
|
+
dish.selectedSpecifications.forEach(function (specification) {
|
|
491
|
+
specification.name =
|
|
492
|
+
getNameFromNames(specification.names, currentLang, defaultLang) || specification.name;
|
|
493
|
+
specification.content.forEach(function (tag) {
|
|
494
|
+
tag.name = getNameFromNames(tag.names, currentLang, defaultLang) || tag.name;
|
|
495
|
+
});
|
|
496
|
+
});
|
|
497
|
+
}
|
|
498
|
+
return content;
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* 根据语言返回处理过的订单数据
|
|
502
|
+
*
|
|
503
|
+
* @param {Order} order 店铺
|
|
504
|
+
* @param {string} currentLang 目标语言
|
|
505
|
+
* @param {string} defaultLang 默认语言
|
|
506
|
+
* @returns {Order} 返回当前语言的订单
|
|
507
|
+
*/
|
|
508
|
+
function getOrderByLanguage(order, currentLang, defaultLang) {
|
|
509
|
+
if (order.content) {
|
|
510
|
+
order.content.map(function (dishGroup) {
|
|
511
|
+
return getContentByLanguage(dishGroup, currentLang, defaultLang);
|
|
512
|
+
});
|
|
513
|
+
}
|
|
514
|
+
if (order.tasks) {
|
|
515
|
+
order.tasks.forEach(function (task) {
|
|
516
|
+
if (task.content) {
|
|
517
|
+
task.content.map(function (dishGroup) {
|
|
518
|
+
return getContentByLanguage(dishGroup, currentLang, defaultLang);
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
return order;
|
|
524
|
+
}
|
|
525
|
+
exports.getOrderByLanguage = getOrderByLanguage;
|
|
526
|
+
/**
|
|
527
|
+
* 根据电话区号返回语言码,如果没找到,返回英文
|
|
528
|
+
*
|
|
529
|
+
* @param {string} countryCode 区号
|
|
530
|
+
* @returns {string} 语言代码的小写格式
|
|
531
|
+
*/
|
|
532
|
+
function getLanguageFromCountryCode(countryCode) {
|
|
533
|
+
var data = {
|
|
534
|
+
'86': 'zh',
|
|
535
|
+
};
|
|
536
|
+
var languageCode = data[String(countryCode)] || 'en';
|
|
537
|
+
return languageCode;
|
|
538
|
+
}
|
|
539
|
+
exports.getLanguageFromCountryCode = getLanguageFromCountryCode;
|
|
540
|
+
/**
|
|
541
|
+
* 根据dishID返回已经下单的数量
|
|
542
|
+
*
|
|
543
|
+
* @param {Order} order 店铺
|
|
544
|
+
* @param dishId
|
|
545
|
+
* @returns {number} 返回当前数量
|
|
546
|
+
*/
|
|
547
|
+
function getDishCountByIdInAllUncanceledTasks(order, dishId) {
|
|
548
|
+
var count = 0;
|
|
549
|
+
if (order.tasks) {
|
|
550
|
+
count = order.tasks
|
|
551
|
+
.filter(function (task) { return task.status !== const_1.CONST.STATUS.CANCELLED; })
|
|
552
|
+
.reduce(function (count, task) {
|
|
553
|
+
return (count +
|
|
554
|
+
task.content
|
|
555
|
+
.filter(function (item) { return String(item.dishSnapshot._id) === String(dishId); })
|
|
556
|
+
.reduce(function (value, item) { return value + item.count; }, 0));
|
|
557
|
+
}, 0);
|
|
558
|
+
}
|
|
559
|
+
return count;
|
|
560
|
+
}
|
|
561
|
+
exports.getDishCountByIdInAllUncanceledTasks = getDishCountByIdInAllUncanceledTasks;
|