@b2y/ecommerce-common 1.0.4 → 1.0.6
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/README.md +4 -4
- package/constants/AppConstants.js +3 -3
- package/constants/ReportConstants.js +14 -14
- package/constants/StatusMessageConstants.js +17 -17
- package/dbconnection/Connect.js +379 -379
- package/enum/AddressTypeEnum.js +6 -6
- package/enum/BooleanEnum.js +4 -4
- package/enum/EntityTypeEnum.js +11 -11
- package/enum/GenderEnum.js +7 -7
- package/enum/NotificationStatusEnum.js +5 -5
- package/enum/NotificationTypeEnum.js +9 -9
- package/enum/OrderStatusEnum.js +7 -7
- package/enum/PaymentMethodEnum.js +6 -6
- package/enum/PaymentStatusEnum.js +6 -6
- package/enum/PaymentTypeEnum.js +6 -6
- package/enum/PlatformEnum.js +4 -4
- package/enum/RegistrationStatusEnum.js +5 -5
- package/enum/SortByEnum.js +7 -7
- package/index.js +22 -22
- package/model/Address.js +95 -95
- package/model/AttributeType.js +50 -50
- package/model/AttributeValue.js +64 -64
- package/model/Banner.js +78 -78
- package/model/Brand.js +76 -76
- package/model/Cart.js +76 -76
- package/model/Category.js +72 -72
- package/model/CategoryAttributeType.js +62 -62
- package/model/Colour.js +52 -52
- package/model/Customer.js +94 -94
- package/model/DeviceToken.js +51 -51
- package/model/Document.js +70 -70
- package/model/DynamicUIComponent.js +52 -52
- package/model/Feedback.js +79 -79
- package/model/Inventory.js +83 -83
- package/model/NotificationHistory.js +67 -67
- package/model/Order.js +94 -94
- package/model/OrderItem.js +98 -98
- package/model/OrderItemHistory.js +69 -69
- package/model/OrderStatus.js +48 -48
- package/model/Payment.js +101 -101
- package/model/PaymentMethod.js +36 -36
- package/model/PaymentStatus.js +36 -36
- package/model/PaymentType.js +36 -36
- package/model/Permission.js +55 -55
- package/model/Product.js +82 -82
- package/model/ProductGroup.js +48 -48
- package/model/ProductSpecification.js +65 -65
- package/model/ProductVariant.js +75 -75
- package/model/ProductVariantAttribute.js +58 -58
- package/model/Role.js +61 -61
- package/model/RolePermissionMapping.js +63 -63
- package/model/SpecificationType.js +41 -41
- package/model/Store.js +99 -99
- package/model/StoreUserMapping.js +44 -44
- package/model/Tenant.js +91 -91
- package/model/TenantSettings.js +47 -47
- package/model/User.js +132 -132
- package/model/WishList.js +62 -62
- package/package.json +28 -28
- package/utility/AppUtil.js +65 -57
- package/utility/DateUtil.js +55 -55
- package/utility/ExcelUtil.js +125 -125
- package/utility/LocationUtility.js +130 -130
- package/utility/OrderTimeFilterUtil.js +87 -87
- package/utility/QueryUtil.js +261 -261
- package/utility/Razorpay.js +65 -65
- package/utility/VariantPriceUtil.js +54 -54
package/utility/QueryUtil.js
CHANGED
|
@@ -1,262 +1,262 @@
|
|
|
1
|
-
|
|
2
|
-
const AppUtil = require('../utility/AppUtil');
|
|
3
|
-
const StatusMessage = require('../constants/StatusMessageConstants');
|
|
4
|
-
const DateUtil = require('../utility/DateUtil');
|
|
5
|
-
const {Sequelize} = require('sequelize');
|
|
6
|
-
class QueryUtil {
|
|
7
|
-
static parseId(idParam) {
|
|
8
|
-
if (!idParam) return null;
|
|
9
|
-
if (Array.isArray(idParam))
|
|
10
|
-
return idParam.map((id) => id.toString().trim()).filter((id) => id);
|
|
11
|
-
return idParam
|
|
12
|
-
.toString()
|
|
13
|
-
.split(",")
|
|
14
|
-
.map((id) => id.trim())
|
|
15
|
-
.filter((id) => id);
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
static storeWhereClause(filters, tenantID, logger) {
|
|
19
|
-
const { startDate, endDate, IsActive, searchText } = filters;
|
|
20
|
-
let storeWhereClause = {};
|
|
21
|
-
// Date range filter
|
|
22
|
-
if (startDate && !DateUtil.isValidDate(startDate)) {
|
|
23
|
-
logger.warn("invalid start date");
|
|
24
|
-
throw new Error(StatusMessage.INVALID_START_DATE);
|
|
25
|
-
}
|
|
26
|
-
if (endDate && !DateUtil.isValidDate(endDate)) {
|
|
27
|
-
logger.warn("invalid end date");
|
|
28
|
-
throw new Error(StatusMessage.INVALID_END_DATE);
|
|
29
|
-
}
|
|
30
|
-
if (startDate && endDate) {
|
|
31
|
-
storeWhereClause.CreatedAt = {
|
|
32
|
-
[Sequelize.Op.between]: [new Date(startDate), new Date(endDate)],
|
|
33
|
-
};
|
|
34
|
-
} else if (startDate) {
|
|
35
|
-
storeWhereClause.CreatedAt = { [Sequelize.Op.gte]: new Date(startDate) };
|
|
36
|
-
} else if (endDate) {
|
|
37
|
-
storeWhereClause.CreatedAt = { [Sequelize.Op.lte]: new Date(endDate) };
|
|
38
|
-
}
|
|
39
|
-
if (IsActive) {
|
|
40
|
-
const isActiveValue = AppUtil.parseIsActive(IsActive);
|
|
41
|
-
if (isActiveValue === undefined) {
|
|
42
|
-
logger.warn("invalid IsActive status");
|
|
43
|
-
throw new Error(StatusMessage.INVALID_ISACTIVE_STATUS);
|
|
44
|
-
}
|
|
45
|
-
storeWhereClause.IsActive = isActiveValue;
|
|
46
|
-
}
|
|
47
|
-
// Tenant ID
|
|
48
|
-
if (tenantID) storeWhereClause.TenantID = tenantID;
|
|
49
|
-
if (searchText) {
|
|
50
|
-
storeWhereClause[Sequelize.Op.or] = [
|
|
51
|
-
{ StoreName: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
52
|
-
{ AddressLine1: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
53
|
-
{ AddressLine2: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
54
|
-
{ "$City.CityName$": { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
55
|
-
];
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return storeWhereClause;
|
|
59
|
-
}
|
|
60
|
-
static orderWhereClause(filters, tenantID, logger) {
|
|
61
|
-
const { startDate, endDate, searchText, paymentStatusId, storeId } = filters;
|
|
62
|
-
let orderWhereClause = {};
|
|
63
|
-
let paymentStatusWhere = {};
|
|
64
|
-
let storeWhereClause = {};
|
|
65
|
-
if (tenantID) orderWhereClause.TenantID = tenantID;
|
|
66
|
-
if (startDate && !DateUtil.isValidDate(startDate)) {
|
|
67
|
-
logger.warn("invalid start date");
|
|
68
|
-
throw new Error(StatusMessage.INVALID_START_DATE);
|
|
69
|
-
}
|
|
70
|
-
if (endDate && !DateUtil.isValidDate(endDate)) {
|
|
71
|
-
logger.warn("invalid end date");
|
|
72
|
-
throw new Error(StatusMessage.INVALID_END_DATE);
|
|
73
|
-
}
|
|
74
|
-
if (searchText) {
|
|
75
|
-
orderWhereClause[Sequelize.Op.or] = [
|
|
76
|
-
{ OrderRefID: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
77
|
-
{ "$Customer.FirstName$": { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
78
|
-
];
|
|
79
|
-
}
|
|
80
|
-
if (paymentStatusId) {
|
|
81
|
-
const paymentStatusIDs = this.parseId(paymentStatusId);
|
|
82
|
-
paymentStatusWhere.PaymentStatusID = {[Sequelize.Op.in] : paymentStatusIDs};
|
|
83
|
-
}
|
|
84
|
-
if(storeId) {
|
|
85
|
-
const storeIDs = this.parseId(storeId);
|
|
86
|
-
storeWhereClause.StoreID = {[Sequelize.Op.in] : storeIDs}
|
|
87
|
-
}
|
|
88
|
-
if (startDate && endDate) {
|
|
89
|
-
orderWhereClause.OrderDate = {
|
|
90
|
-
[Sequelize.Op.between]: [new Date(startDate), new Date(endDate)],
|
|
91
|
-
};
|
|
92
|
-
} else if (startDate) {
|
|
93
|
-
orderWhereClause.OrderDate = { [Sequelize.Op.gte]: new Date(startDate) };
|
|
94
|
-
} else if (endDate) {
|
|
95
|
-
orderWhereClause.OrderDate = { [Sequelize.Op.lte]: new Date(endDate) };
|
|
96
|
-
}
|
|
97
|
-
return { orderWhereClause, includeWhere: { paymentStatusWhere, storeWhereClause } };
|
|
98
|
-
}
|
|
99
|
-
static paymentWhereClause(filters, tenantID, logger) {
|
|
100
|
-
const {
|
|
101
|
-
paymentStatusId,
|
|
102
|
-
searchText,
|
|
103
|
-
paymentTypeId,
|
|
104
|
-
paymentMethodId,
|
|
105
|
-
storeId,
|
|
106
|
-
startDate,
|
|
107
|
-
endDate,
|
|
108
|
-
} = filters;
|
|
109
|
-
let paymentWhereClause = {};
|
|
110
|
-
let paymentStatusWhere = {};
|
|
111
|
-
let paymentTypeWhere = {};
|
|
112
|
-
let paymentMethodWhere = {};
|
|
113
|
-
let storeWhereClause = {};
|
|
114
|
-
if (tenantID) paymentWhereClause.TenantID = tenantID;
|
|
115
|
-
if (startDate && !DateUtil.isValidDate(startDate)) {
|
|
116
|
-
logger.warn("invalid start date");
|
|
117
|
-
throw new Error(StatusMessage.INVALID_START_DATE);
|
|
118
|
-
}
|
|
119
|
-
if (endDate && !DateUtil.isValidDate(endDate)) {
|
|
120
|
-
logger.warn("invalid end date");
|
|
121
|
-
throw new Error(StatusMessage.INVALID_END_DATE);
|
|
122
|
-
}
|
|
123
|
-
if (searchText) {
|
|
124
|
-
paymentWhereClause[Sequelize.Op.or] = [
|
|
125
|
-
{ "$Order.OrderRefID$": { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
126
|
-
{ PaymentRefID: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
127
|
-
];
|
|
128
|
-
}
|
|
129
|
-
if (paymentStatusId) {
|
|
130
|
-
const paymentStatusIDs = this.parseId(paymentStatusId)
|
|
131
|
-
paymentStatusWhere.PaymentStatusID = {[Sequelize.Op.in] : paymentStatusIDs};
|
|
132
|
-
}
|
|
133
|
-
if (paymentTypeId) {
|
|
134
|
-
const paymentTypeIDs = this.parseId(paymentTypeId)
|
|
135
|
-
paymentTypeWhere.PaymentTypeID = {[Sequelize.Op.in] : paymentTypeIDs};
|
|
136
|
-
}
|
|
137
|
-
if (paymentMethodId) {
|
|
138
|
-
const paymentMethodIDs = this.parseId(paymentMethodId);
|
|
139
|
-
paymentMethodWhere.PaymentMethodID = {[Sequelize.Op.in] : paymentMethodIDs};
|
|
140
|
-
}
|
|
141
|
-
if(storeId) {
|
|
142
|
-
const storeIDs = this.parseId(storeId);
|
|
143
|
-
storeWhereClause.StoreID = {[Sequelize.Op.in]: storeIDs}
|
|
144
|
-
}
|
|
145
|
-
if (startDate && endDate) {
|
|
146
|
-
paymentWhereClause.PaymentDate = {
|
|
147
|
-
[Sequelize.Op.between]: [new Date(startDate), new Date(endDate)],
|
|
148
|
-
};
|
|
149
|
-
} else if (startDate) {
|
|
150
|
-
paymentWhereClause.PaymentDate = { [Sequelize.Op.gte]: new Date(startDate) };
|
|
151
|
-
} else if (endDate) {
|
|
152
|
-
paymentWhereClause.PaymentDate = { [Sequelize.Op.lte]: new Date(endDate) };
|
|
153
|
-
}
|
|
154
|
-
return {
|
|
155
|
-
paymentWhereClause,
|
|
156
|
-
includeWhere: {
|
|
157
|
-
paymentStatusWhere,
|
|
158
|
-
paymentMethodWhere,
|
|
159
|
-
paymentTypeWhere,
|
|
160
|
-
storeWhereClause
|
|
161
|
-
},
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
static customerWhereClause(filters, tenantID, logger) {
|
|
165
|
-
const { searchText, startDate, endDate } = filters;
|
|
166
|
-
let customerWhereClause = {};
|
|
167
|
-
if (startDate && !DateUtil.isValidDate(startDate)) {
|
|
168
|
-
logger.warn("invalid start date")
|
|
169
|
-
throw new Error(StatusMessage.INVALID_START_DATE);
|
|
170
|
-
}
|
|
171
|
-
if (endDate && !DateUtil.isValidDate(endDate)) {
|
|
172
|
-
logger.warn("invalid end date");
|
|
173
|
-
throw new Error(StatusMessage.INVALID_END_DATE);
|
|
174
|
-
}
|
|
175
|
-
if (startDate && endDate) {
|
|
176
|
-
customerWhereClause.CreatedAt = {
|
|
177
|
-
[Sequelize.Op.between]: [new Date(startDate), new Date(endDate)],
|
|
178
|
-
};
|
|
179
|
-
} else if (startDate) {
|
|
180
|
-
customerWhereClause.CreatedAt = { [Sequelize.Op.gte]: new Date(startDate) };
|
|
181
|
-
} else if (endDate) {
|
|
182
|
-
customerWhereClause.CreatedAt = { [Sequelize.Op.lte]: new Date(endDate) };
|
|
183
|
-
}
|
|
184
|
-
if (tenantID) customerWhereClause.TenantID = tenantID;
|
|
185
|
-
if (searchText) {
|
|
186
|
-
customerWhereClause[Sequelize.Op.or] = [
|
|
187
|
-
{ FirstName: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
188
|
-
{ LastName: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
189
|
-
];
|
|
190
|
-
}
|
|
191
|
-
return customerWhereClause;
|
|
192
|
-
}
|
|
193
|
-
static productWhereClause(filters, tenantID, logger) {
|
|
194
|
-
const { brandId, categoryId, storeId, IsActive, searchText, startDate, endDate } =
|
|
195
|
-
filters;
|
|
196
|
-
const brandWhere = {};
|
|
197
|
-
const categoryWhere = {};
|
|
198
|
-
const storeWhere = {};
|
|
199
|
-
const productWhereClause = {};
|
|
200
|
-
if (tenantID) {
|
|
201
|
-
productWhereClause.TenantID = tenantID;
|
|
202
|
-
brandWhere.TenantID = tenantID;
|
|
203
|
-
categoryWhere.TenantID = tenantID;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
if (startDate && !DateUtil.isValidDate(startDate)) {
|
|
207
|
-
logger.warn("invalid start date");
|
|
208
|
-
throw new Error(StatusMessage.INVALID_START_DATE);
|
|
209
|
-
}
|
|
210
|
-
if (endDate && !DateUtil.isValidDate(endDate)) {
|
|
211
|
-
logger.warn("invalid end date");
|
|
212
|
-
throw new Error(StatusMessage.INVALID_END_DATE);
|
|
213
|
-
}
|
|
214
|
-
if (startDate && endDate) {
|
|
215
|
-
productWhereClause.CreatedAt = {
|
|
216
|
-
[Sequelize.Op.between]: [new Date(startDate), new Date(endDate)],
|
|
217
|
-
};
|
|
218
|
-
} else if (startDate) {
|
|
219
|
-
productWhereClause.CreatedAt = { [Sequelize.Op.gte]: new Date(startDate) };
|
|
220
|
-
} else if (endDate) {
|
|
221
|
-
productWhereClause.CreatedAt = { [Sequelize.Op.lte]: new Date(endDate) };
|
|
222
|
-
}
|
|
223
|
-
if (searchText) {
|
|
224
|
-
productWhereClause[Sequelize.Op.or] = [
|
|
225
|
-
{ ProductName: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
226
|
-
];
|
|
227
|
-
}
|
|
228
|
-
if (IsActive) {
|
|
229
|
-
const isActiveValue = AppUtil.parseIsActive(IsActive);
|
|
230
|
-
if (isActiveValue === undefined) {
|
|
231
|
-
logger.warn("invalid IsActive status");
|
|
232
|
-
throw new Error(StatusMessage.INVALID_ISACTIVE_STATUS);
|
|
233
|
-
}
|
|
234
|
-
productWhereClause.IsActive = isActiveValue;
|
|
235
|
-
}
|
|
236
|
-
if (brandId) {
|
|
237
|
-
const brandIds = this.parseId(brandId);
|
|
238
|
-
brandWhere.BrandID = { [Sequelize.Op.in]: brandIds };
|
|
239
|
-
}
|
|
240
|
-
if (categoryId) {
|
|
241
|
-
const categoryIds = this.parseId(categoryId);
|
|
242
|
-
categoryWhere.CategoryID = { [Sequelize.Op.in]: categoryIds };
|
|
243
|
-
}
|
|
244
|
-
if(storeId) {
|
|
245
|
-
const storeIds = this.parseId(storeId);
|
|
246
|
-
storeWhere.StoreID = { [Sequelize.Op.in]: storeIds };
|
|
247
|
-
}
|
|
248
|
-
return {
|
|
249
|
-
productWhereClause,
|
|
250
|
-
includeWhere: { brandWhere, categoryWhere, storeWhere },
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
static getDefaultOptions(whereClause, order = [['CreatedAt', 'DESC']]) {
|
|
255
|
-
return {
|
|
256
|
-
where: whereClause,
|
|
257
|
-
order: order
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
|
|
1
|
+
|
|
2
|
+
const AppUtil = require('../utility/AppUtil');
|
|
3
|
+
const StatusMessage = require('../constants/StatusMessageConstants');
|
|
4
|
+
const DateUtil = require('../utility/DateUtil');
|
|
5
|
+
const {Sequelize} = require('sequelize');
|
|
6
|
+
class QueryUtil {
|
|
7
|
+
static parseId(idParam) {
|
|
8
|
+
if (!idParam) return null;
|
|
9
|
+
if (Array.isArray(idParam))
|
|
10
|
+
return idParam.map((id) => id.toString().trim()).filter((id) => id);
|
|
11
|
+
return idParam
|
|
12
|
+
.toString()
|
|
13
|
+
.split(",")
|
|
14
|
+
.map((id) => id.trim())
|
|
15
|
+
.filter((id) => id);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
static storeWhereClause(filters, tenantID, logger) {
|
|
19
|
+
const { startDate, endDate, IsActive, searchText } = filters;
|
|
20
|
+
let storeWhereClause = {};
|
|
21
|
+
// Date range filter
|
|
22
|
+
if (startDate && !DateUtil.isValidDate(startDate)) {
|
|
23
|
+
logger.warn("invalid start date");
|
|
24
|
+
throw new Error(StatusMessage.INVALID_START_DATE);
|
|
25
|
+
}
|
|
26
|
+
if (endDate && !DateUtil.isValidDate(endDate)) {
|
|
27
|
+
logger.warn("invalid end date");
|
|
28
|
+
throw new Error(StatusMessage.INVALID_END_DATE);
|
|
29
|
+
}
|
|
30
|
+
if (startDate && endDate) {
|
|
31
|
+
storeWhereClause.CreatedAt = {
|
|
32
|
+
[Sequelize.Op.between]: [new Date(startDate), new Date(endDate)],
|
|
33
|
+
};
|
|
34
|
+
} else if (startDate) {
|
|
35
|
+
storeWhereClause.CreatedAt = { [Sequelize.Op.gte]: new Date(startDate) };
|
|
36
|
+
} else if (endDate) {
|
|
37
|
+
storeWhereClause.CreatedAt = { [Sequelize.Op.lte]: new Date(endDate) };
|
|
38
|
+
}
|
|
39
|
+
if (IsActive) {
|
|
40
|
+
const isActiveValue = AppUtil.parseIsActive(IsActive);
|
|
41
|
+
if (isActiveValue === undefined) {
|
|
42
|
+
logger.warn("invalid IsActive status");
|
|
43
|
+
throw new Error(StatusMessage.INVALID_ISACTIVE_STATUS);
|
|
44
|
+
}
|
|
45
|
+
storeWhereClause.IsActive = isActiveValue;
|
|
46
|
+
}
|
|
47
|
+
// Tenant ID
|
|
48
|
+
if (tenantID) storeWhereClause.TenantID = tenantID;
|
|
49
|
+
if (searchText) {
|
|
50
|
+
storeWhereClause[Sequelize.Op.or] = [
|
|
51
|
+
{ StoreName: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
52
|
+
{ AddressLine1: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
53
|
+
{ AddressLine2: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
54
|
+
{ "$City.CityName$": { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return storeWhereClause;
|
|
59
|
+
}
|
|
60
|
+
static orderWhereClause(filters, tenantID, logger) {
|
|
61
|
+
const { startDate, endDate, searchText, paymentStatusId, storeId } = filters;
|
|
62
|
+
let orderWhereClause = {};
|
|
63
|
+
let paymentStatusWhere = {};
|
|
64
|
+
let storeWhereClause = {};
|
|
65
|
+
if (tenantID) orderWhereClause.TenantID = tenantID;
|
|
66
|
+
if (startDate && !DateUtil.isValidDate(startDate)) {
|
|
67
|
+
logger.warn("invalid start date");
|
|
68
|
+
throw new Error(StatusMessage.INVALID_START_DATE);
|
|
69
|
+
}
|
|
70
|
+
if (endDate && !DateUtil.isValidDate(endDate)) {
|
|
71
|
+
logger.warn("invalid end date");
|
|
72
|
+
throw new Error(StatusMessage.INVALID_END_DATE);
|
|
73
|
+
}
|
|
74
|
+
if (searchText) {
|
|
75
|
+
orderWhereClause[Sequelize.Op.or] = [
|
|
76
|
+
{ OrderRefID: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
77
|
+
{ "$Customer.FirstName$": { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
78
|
+
];
|
|
79
|
+
}
|
|
80
|
+
if (paymentStatusId) {
|
|
81
|
+
const paymentStatusIDs = this.parseId(paymentStatusId);
|
|
82
|
+
paymentStatusWhere.PaymentStatusID = {[Sequelize.Op.in] : paymentStatusIDs};
|
|
83
|
+
}
|
|
84
|
+
if(storeId) {
|
|
85
|
+
const storeIDs = this.parseId(storeId);
|
|
86
|
+
storeWhereClause.StoreID = {[Sequelize.Op.in] : storeIDs}
|
|
87
|
+
}
|
|
88
|
+
if (startDate && endDate) {
|
|
89
|
+
orderWhereClause.OrderDate = {
|
|
90
|
+
[Sequelize.Op.between]: [new Date(startDate), new Date(endDate)],
|
|
91
|
+
};
|
|
92
|
+
} else if (startDate) {
|
|
93
|
+
orderWhereClause.OrderDate = { [Sequelize.Op.gte]: new Date(startDate) };
|
|
94
|
+
} else if (endDate) {
|
|
95
|
+
orderWhereClause.OrderDate = { [Sequelize.Op.lte]: new Date(endDate) };
|
|
96
|
+
}
|
|
97
|
+
return { orderWhereClause, includeWhere: { paymentStatusWhere, storeWhereClause } };
|
|
98
|
+
}
|
|
99
|
+
static paymentWhereClause(filters, tenantID, logger) {
|
|
100
|
+
const {
|
|
101
|
+
paymentStatusId,
|
|
102
|
+
searchText,
|
|
103
|
+
paymentTypeId,
|
|
104
|
+
paymentMethodId,
|
|
105
|
+
storeId,
|
|
106
|
+
startDate,
|
|
107
|
+
endDate,
|
|
108
|
+
} = filters;
|
|
109
|
+
let paymentWhereClause = {};
|
|
110
|
+
let paymentStatusWhere = {};
|
|
111
|
+
let paymentTypeWhere = {};
|
|
112
|
+
let paymentMethodWhere = {};
|
|
113
|
+
let storeWhereClause = {};
|
|
114
|
+
if (tenantID) paymentWhereClause.TenantID = tenantID;
|
|
115
|
+
if (startDate && !DateUtil.isValidDate(startDate)) {
|
|
116
|
+
logger.warn("invalid start date");
|
|
117
|
+
throw new Error(StatusMessage.INVALID_START_DATE);
|
|
118
|
+
}
|
|
119
|
+
if (endDate && !DateUtil.isValidDate(endDate)) {
|
|
120
|
+
logger.warn("invalid end date");
|
|
121
|
+
throw new Error(StatusMessage.INVALID_END_DATE);
|
|
122
|
+
}
|
|
123
|
+
if (searchText) {
|
|
124
|
+
paymentWhereClause[Sequelize.Op.or] = [
|
|
125
|
+
{ "$Order.OrderRefID$": { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
126
|
+
{ PaymentRefID: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
127
|
+
];
|
|
128
|
+
}
|
|
129
|
+
if (paymentStatusId) {
|
|
130
|
+
const paymentStatusIDs = this.parseId(paymentStatusId)
|
|
131
|
+
paymentStatusWhere.PaymentStatusID = {[Sequelize.Op.in] : paymentStatusIDs};
|
|
132
|
+
}
|
|
133
|
+
if (paymentTypeId) {
|
|
134
|
+
const paymentTypeIDs = this.parseId(paymentTypeId)
|
|
135
|
+
paymentTypeWhere.PaymentTypeID = {[Sequelize.Op.in] : paymentTypeIDs};
|
|
136
|
+
}
|
|
137
|
+
if (paymentMethodId) {
|
|
138
|
+
const paymentMethodIDs = this.parseId(paymentMethodId);
|
|
139
|
+
paymentMethodWhere.PaymentMethodID = {[Sequelize.Op.in] : paymentMethodIDs};
|
|
140
|
+
}
|
|
141
|
+
if(storeId) {
|
|
142
|
+
const storeIDs = this.parseId(storeId);
|
|
143
|
+
storeWhereClause.StoreID = {[Sequelize.Op.in]: storeIDs}
|
|
144
|
+
}
|
|
145
|
+
if (startDate && endDate) {
|
|
146
|
+
paymentWhereClause.PaymentDate = {
|
|
147
|
+
[Sequelize.Op.between]: [new Date(startDate), new Date(endDate)],
|
|
148
|
+
};
|
|
149
|
+
} else if (startDate) {
|
|
150
|
+
paymentWhereClause.PaymentDate = { [Sequelize.Op.gte]: new Date(startDate) };
|
|
151
|
+
} else if (endDate) {
|
|
152
|
+
paymentWhereClause.PaymentDate = { [Sequelize.Op.lte]: new Date(endDate) };
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
paymentWhereClause,
|
|
156
|
+
includeWhere: {
|
|
157
|
+
paymentStatusWhere,
|
|
158
|
+
paymentMethodWhere,
|
|
159
|
+
paymentTypeWhere,
|
|
160
|
+
storeWhereClause
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
static customerWhereClause(filters, tenantID, logger) {
|
|
165
|
+
const { searchText, startDate, endDate } = filters;
|
|
166
|
+
let customerWhereClause = {};
|
|
167
|
+
if (startDate && !DateUtil.isValidDate(startDate)) {
|
|
168
|
+
logger.warn("invalid start date")
|
|
169
|
+
throw new Error(StatusMessage.INVALID_START_DATE);
|
|
170
|
+
}
|
|
171
|
+
if (endDate && !DateUtil.isValidDate(endDate)) {
|
|
172
|
+
logger.warn("invalid end date");
|
|
173
|
+
throw new Error(StatusMessage.INVALID_END_DATE);
|
|
174
|
+
}
|
|
175
|
+
if (startDate && endDate) {
|
|
176
|
+
customerWhereClause.CreatedAt = {
|
|
177
|
+
[Sequelize.Op.between]: [new Date(startDate), new Date(endDate)],
|
|
178
|
+
};
|
|
179
|
+
} else if (startDate) {
|
|
180
|
+
customerWhereClause.CreatedAt = { [Sequelize.Op.gte]: new Date(startDate) };
|
|
181
|
+
} else if (endDate) {
|
|
182
|
+
customerWhereClause.CreatedAt = { [Sequelize.Op.lte]: new Date(endDate) };
|
|
183
|
+
}
|
|
184
|
+
if (tenantID) customerWhereClause.TenantID = tenantID;
|
|
185
|
+
if (searchText) {
|
|
186
|
+
customerWhereClause[Sequelize.Op.or] = [
|
|
187
|
+
{ FirstName: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
188
|
+
{ LastName: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
189
|
+
];
|
|
190
|
+
}
|
|
191
|
+
return customerWhereClause;
|
|
192
|
+
}
|
|
193
|
+
static productWhereClause(filters, tenantID, logger) {
|
|
194
|
+
const { brandId, categoryId, storeId, IsActive, searchText, startDate, endDate } =
|
|
195
|
+
filters;
|
|
196
|
+
const brandWhere = {};
|
|
197
|
+
const categoryWhere = {};
|
|
198
|
+
const storeWhere = {};
|
|
199
|
+
const productWhereClause = {};
|
|
200
|
+
if (tenantID) {
|
|
201
|
+
productWhereClause.TenantID = tenantID;
|
|
202
|
+
brandWhere.TenantID = tenantID;
|
|
203
|
+
categoryWhere.TenantID = tenantID;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
if (startDate && !DateUtil.isValidDate(startDate)) {
|
|
207
|
+
logger.warn("invalid start date");
|
|
208
|
+
throw new Error(StatusMessage.INVALID_START_DATE);
|
|
209
|
+
}
|
|
210
|
+
if (endDate && !DateUtil.isValidDate(endDate)) {
|
|
211
|
+
logger.warn("invalid end date");
|
|
212
|
+
throw new Error(StatusMessage.INVALID_END_DATE);
|
|
213
|
+
}
|
|
214
|
+
if (startDate && endDate) {
|
|
215
|
+
productWhereClause.CreatedAt = {
|
|
216
|
+
[Sequelize.Op.between]: [new Date(startDate), new Date(endDate)],
|
|
217
|
+
};
|
|
218
|
+
} else if (startDate) {
|
|
219
|
+
productWhereClause.CreatedAt = { [Sequelize.Op.gte]: new Date(startDate) };
|
|
220
|
+
} else if (endDate) {
|
|
221
|
+
productWhereClause.CreatedAt = { [Sequelize.Op.lte]: new Date(endDate) };
|
|
222
|
+
}
|
|
223
|
+
if (searchText) {
|
|
224
|
+
productWhereClause[Sequelize.Op.or] = [
|
|
225
|
+
{ ProductName: { [Sequelize.Op.iLike]: `%${searchText}%` } },
|
|
226
|
+
];
|
|
227
|
+
}
|
|
228
|
+
if (IsActive) {
|
|
229
|
+
const isActiveValue = AppUtil.parseIsActive(IsActive);
|
|
230
|
+
if (isActiveValue === undefined) {
|
|
231
|
+
logger.warn("invalid IsActive status");
|
|
232
|
+
throw new Error(StatusMessage.INVALID_ISACTIVE_STATUS);
|
|
233
|
+
}
|
|
234
|
+
productWhereClause.IsActive = isActiveValue;
|
|
235
|
+
}
|
|
236
|
+
if (brandId) {
|
|
237
|
+
const brandIds = this.parseId(brandId);
|
|
238
|
+
brandWhere.BrandID = { [Sequelize.Op.in]: brandIds };
|
|
239
|
+
}
|
|
240
|
+
if (categoryId) {
|
|
241
|
+
const categoryIds = this.parseId(categoryId);
|
|
242
|
+
categoryWhere.CategoryID = { [Sequelize.Op.in]: categoryIds };
|
|
243
|
+
}
|
|
244
|
+
if(storeId) {
|
|
245
|
+
const storeIds = this.parseId(storeId);
|
|
246
|
+
storeWhere.StoreID = { [Sequelize.Op.in]: storeIds };
|
|
247
|
+
}
|
|
248
|
+
return {
|
|
249
|
+
productWhereClause,
|
|
250
|
+
includeWhere: { brandWhere, categoryWhere, storeWhere },
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
static getDefaultOptions(whereClause, order = [['CreatedAt', 'DESC']]) {
|
|
255
|
+
return {
|
|
256
|
+
where: whereClause,
|
|
257
|
+
order: order
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
262
|
module.exports = QueryUtil;
|
package/utility/Razorpay.js
CHANGED
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
const crypto = require('crypto');
|
|
2
|
-
const StatusMessage = require('../constants/StatusMessageConstants');
|
|
3
|
-
class RazorpayUtil {
|
|
4
|
-
constructor(razorpayKeys, logger, Razorpay) {
|
|
5
|
-
this.logger = logger;
|
|
6
|
-
this.instance = new Razorpay({
|
|
7
|
-
key_id: razorpayKeys.keyId,
|
|
8
|
-
key_secret: razorpayKeys.keySecret
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
async createOrder(amount, currency, receipt = null) {
|
|
13
|
-
try {
|
|
14
|
-
const options = {
|
|
15
|
-
amount: amount * 100,
|
|
16
|
-
currency,
|
|
17
|
-
receipt: receipt
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
const order = await this.instance.orders.create(options);
|
|
21
|
-
return {
|
|
22
|
-
razorpayOrderId: order.id,
|
|
23
|
-
amount: order.amount,
|
|
24
|
-
currency: order.currency,
|
|
25
|
-
created_at:order.created_at,
|
|
26
|
-
status: order.status
|
|
27
|
-
};
|
|
28
|
-
} catch (error) {
|
|
29
|
-
this.logger.error('Razorpay order creation error:', error);
|
|
30
|
-
throw new Error(StatusMessage.ORDER_CREATION_FAILED);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
async verifyPayment(paymentId, orderId, signature, razorpaySecret) {
|
|
35
|
-
try {
|
|
36
|
-
const payment = await this.instance.payments.fetch(paymentId);
|
|
37
|
-
|
|
38
|
-
const expectedSignature = crypto
|
|
39
|
-
.createHmac('sha256', razorpaySecret)
|
|
40
|
-
.update(`${orderId}|${paymentId}`)
|
|
41
|
-
.digest('hex');
|
|
42
|
-
if (expectedSignature.trim() !== signature.trim()) {
|
|
43
|
-
throw new Error(StatusMessage.PAYMENT_SIGNATURE_VERIFICATION_FAILED);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
return {
|
|
47
|
-
paymentId: payment.id,
|
|
48
|
-
orderId: payment.order_id,
|
|
49
|
-
amount: payment.amount,
|
|
50
|
-
currency: payment.currency,
|
|
51
|
-
status: payment.status,
|
|
52
|
-
method: payment.method,
|
|
53
|
-
cardId: payment.card_id,
|
|
54
|
-
card_last4: payment.card ? payment.card.last4 : null,
|
|
55
|
-
bank: payment.bank,
|
|
56
|
-
email: payment.email,
|
|
57
|
-
created_at: payment.created_at
|
|
58
|
-
};
|
|
59
|
-
} catch (error) {
|
|
60
|
-
console.log('Razorpay payment verification error:', error);
|
|
61
|
-
throw new Error(StatusMessage.PAYMENT_VERIFICATION_FAILED);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
1
|
+
const crypto = require('crypto');
|
|
2
|
+
const StatusMessage = require('../constants/StatusMessageConstants');
|
|
3
|
+
class RazorpayUtil {
|
|
4
|
+
constructor(razorpayKeys, logger, Razorpay) {
|
|
5
|
+
this.logger = logger;
|
|
6
|
+
this.instance = new Razorpay({
|
|
7
|
+
key_id: razorpayKeys.keyId,
|
|
8
|
+
key_secret: razorpayKeys.keySecret
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async createOrder(amount, currency, receipt = null) {
|
|
13
|
+
try {
|
|
14
|
+
const options = {
|
|
15
|
+
amount: amount * 100,
|
|
16
|
+
currency,
|
|
17
|
+
receipt: receipt
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const order = await this.instance.orders.create(options);
|
|
21
|
+
return {
|
|
22
|
+
razorpayOrderId: order.id,
|
|
23
|
+
amount: order.amount,
|
|
24
|
+
currency: order.currency,
|
|
25
|
+
created_at:order.created_at,
|
|
26
|
+
status: order.status
|
|
27
|
+
};
|
|
28
|
+
} catch (error) {
|
|
29
|
+
this.logger.error('Razorpay order creation error:', error);
|
|
30
|
+
throw new Error(StatusMessage.ORDER_CREATION_FAILED);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async verifyPayment(paymentId, orderId, signature, razorpaySecret) {
|
|
35
|
+
try {
|
|
36
|
+
const payment = await this.instance.payments.fetch(paymentId);
|
|
37
|
+
|
|
38
|
+
const expectedSignature = crypto
|
|
39
|
+
.createHmac('sha256', razorpaySecret)
|
|
40
|
+
.update(`${orderId}|${paymentId}`)
|
|
41
|
+
.digest('hex');
|
|
42
|
+
if (expectedSignature.trim() !== signature.trim()) {
|
|
43
|
+
throw new Error(StatusMessage.PAYMENT_SIGNATURE_VERIFICATION_FAILED);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
paymentId: payment.id,
|
|
48
|
+
orderId: payment.order_id,
|
|
49
|
+
amount: payment.amount,
|
|
50
|
+
currency: payment.currency,
|
|
51
|
+
status: payment.status,
|
|
52
|
+
method: payment.method,
|
|
53
|
+
cardId: payment.card_id,
|
|
54
|
+
card_last4: payment.card ? payment.card.last4 : null,
|
|
55
|
+
bank: payment.bank,
|
|
56
|
+
email: payment.email,
|
|
57
|
+
created_at: payment.created_at
|
|
58
|
+
};
|
|
59
|
+
} catch (error) {
|
|
60
|
+
console.log('Razorpay payment verification error:', error);
|
|
61
|
+
throw new Error(StatusMessage.PAYMENT_VERIFICATION_FAILED);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
66
|
module.exports = RazorpayUtil;
|