Subversion Repositories SmartDukaan

Rev

Rev 25341 | Rev 25344 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
23724 amit.gupta 1
package com.smartdukaan.cron.scheduled;
23723 amit.gupta 2
 
24121 govind 3
import java.io.IOException;
24807 amit.gupta 4
import java.io.Serializable;
23739 amit.gupta 5
import java.sql.Timestamp;
23724 amit.gupta 6
import java.time.LocalDate;
7
import java.time.LocalDateTime;
24256 amit.gupta 8
import java.time.LocalTime;
24653 govind 9
import java.time.ZoneOffset;
10
import java.time.format.DateTimeFormatter;
23724 amit.gupta 11
import java.time.temporal.ChronoUnit;
12
import java.util.ArrayList;
13
import java.util.Arrays;
24627 amit.gupta 14
import java.util.Collections;
23723 amit.gupta 15
import java.util.HashMap;
24241 amit.gupta 16
import java.util.HashSet;
23724 amit.gupta 17
import java.util.List;
23723 amit.gupta 18
import java.util.Map;
24242 amit.gupta 19
import java.util.Optional;
24542 amit.gupta 20
import java.util.Set;
23724 amit.gupta 21
import java.util.stream.Collectors;
23723 amit.gupta 22
 
24121 govind 23
import javax.mail.MessagingException;
24
import javax.mail.internet.InternetAddress;
25
import javax.mail.internet.MimeMessage;
26
 
23929 amit.gupta 27
import org.apache.commons.io.output.ByteArrayOutputStream;
25300 tejbeer 28
import org.apache.http.client.methods.CloseableHttpResponse;
29
import org.apache.http.client.methods.HttpPost;
30
import org.apache.http.entity.StringEntity;
31
import org.apache.http.impl.client.CloseableHttpClient;
32
import org.apache.http.impl.client.HttpClients;
23755 amit.gupta 33
import org.apache.logging.log4j.LogManager;
34
import org.apache.logging.log4j.Logger;
25300 tejbeer 35
import org.json.JSONObject;
23723 amit.gupta 36
import org.springframework.beans.factory.annotation.Autowired;
23933 amit.gupta 37
import org.springframework.beans.factory.annotation.Qualifier;
23724 amit.gupta 38
import org.springframework.beans.factory.annotation.Value;
23929 amit.gupta 39
import org.springframework.core.io.ByteArrayResource;
24692 amit.gupta 40
import org.springframework.core.io.InputStreamSource;
23929 amit.gupta 41
import org.springframework.mail.javamail.JavaMailSender;
24121 govind 42
import org.springframework.mail.javamail.MimeMessageHelper;
23723 amit.gupta 43
import org.springframework.stereotype.Component;
23724 amit.gupta 44
import org.springframework.transaction.annotation.Transactional;
23723 amit.gupta 45
 
24542 amit.gupta 46
import com.google.common.collect.Lists;
25300 tejbeer 47
import com.google.gson.Gson;
48
import com.google.gson.GsonBuilder;
23724 amit.gupta 49
import com.spice.profitmandi.common.enumuration.RechargeStatus;
24681 amit.gupta 50
import com.spice.profitmandi.common.enumuration.ReporticoProject;
24121 govind 51
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
23929 amit.gupta 52
import com.spice.profitmandi.common.model.CustomRetailer;
24542 amit.gupta 53
import com.spice.profitmandi.common.model.GstRate;
23724 amit.gupta 54
import com.spice.profitmandi.common.model.RechargeCredential;
24681 amit.gupta 55
import com.spice.profitmandi.common.services.ReporticoService;
24002 amit.gupta 56
import com.spice.profitmandi.common.util.FileUtil;
23929 amit.gupta 57
import com.spice.profitmandi.common.util.FormattingUtils;
58
import com.spice.profitmandi.common.util.Utils;
24592 amit.gupta 59
import com.spice.profitmandi.common.util.Utils.Attachment;
25300 tejbeer 60
import com.spice.profitmandi.dao.Interface.Campaign;
61
import com.spice.profitmandi.dao.convertor.LocalDateTimeJsonConverter;
24590 amit.gupta 62
import com.spice.profitmandi.dao.entity.catalog.Scheme;
23724 amit.gupta 63
import com.spice.profitmandi.dao.entity.dtr.DailyRecharge;
25300 tejbeer 64
import com.spice.profitmandi.dao.entity.dtr.NotificationCampaign;
24653 govind 65
import com.spice.profitmandi.dao.entity.dtr.NotificationCampaigns;
25300 tejbeer 66
import com.spice.profitmandi.dao.entity.dtr.PushNotifications;
23724 amit.gupta 67
import com.spice.profitmandi.dao.entity.dtr.RechargeProvider;
68
import com.spice.profitmandi.dao.entity.dtr.RechargeProviderCreditWalletHistory;
69
import com.spice.profitmandi.dao.entity.dtr.RechargeTransaction;
24542 amit.gupta 70
import com.spice.profitmandi.dao.entity.fofo.CustomerAddress;
24590 amit.gupta 71
import com.spice.profitmandi.dao.entity.fofo.FofoLineItem;
23724 amit.gupta 72
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
24542 amit.gupta 73
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
23929 amit.gupta 74
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
24249 amit.gupta 75
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
24277 amit.gupta 76
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
24174 govind 77
import com.spice.profitmandi.dao.entity.fofo.PartnerTargetDetails;
23724 amit.gupta 78
import com.spice.profitmandi.dao.entity.fofo.Purchase;
24242 amit.gupta 79
import com.spice.profitmandi.dao.entity.fofo.ScanRecord;
24241 amit.gupta 80
import com.spice.profitmandi.dao.entity.fofo.SchemeInOut;
24431 amit.gupta 81
import com.spice.profitmandi.dao.entity.transaction.PriceDrop;
24587 amit.gupta 82
import com.spice.profitmandi.dao.entity.transaction.UserWallet;
24580 amit.gupta 83
import com.spice.profitmandi.dao.entity.transaction.UserWalletHistory;
24542 amit.gupta 84
import com.spice.profitmandi.dao.entity.user.Address;
25300 tejbeer 85
import com.spice.profitmandi.dao.entity.user.Device;
24250 amit.gupta 86
import com.spice.profitmandi.dao.enumuration.catalog.SchemeType;
24242 amit.gupta 87
import com.spice.profitmandi.dao.enumuration.fofo.ScanType;
25300 tejbeer 88
import com.spice.profitmandi.dao.model.SimpleCampaign;
89
import com.spice.profitmandi.dao.model.SimpleCampaignParams;
90
import com.spice.profitmandi.dao.repository.catalog.DeviceRepository;
24249 amit.gupta 91
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
24241 amit.gupta 92
import com.spice.profitmandi.dao.repository.catalog.SchemeRepository;
23724 amit.gupta 93
import com.spice.profitmandi.dao.repository.dtr.DailyRechargeRepository;
23929 amit.gupta 94
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
24653 govind 95
import com.spice.profitmandi.dao.repository.dtr.Mongo;
25300 tejbeer 96
import com.spice.profitmandi.dao.repository.dtr.NotificationCampaignRepository;
97
import com.spice.profitmandi.dao.repository.dtr.PushNotificationRepository;
23724 amit.gupta 98
import com.spice.profitmandi.dao.repository.dtr.RechargeProviderCreditWalletHistoryRepository;
99
import com.spice.profitmandi.dao.repository.dtr.RechargeProviderRepository;
100
import com.spice.profitmandi.dao.repository.dtr.RechargeTransactionRepository;
24542 amit.gupta 101
import com.spice.profitmandi.dao.repository.dtr.RetailerRegisteredAddressRepository;
24669 govind 102
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
24542 amit.gupta 103
import com.spice.profitmandi.dao.repository.fofo.CustomerAddressRepository;
24590 amit.gupta 104
import com.spice.profitmandi.dao.repository.fofo.FofoLineItemRepository;
24542 amit.gupta 105
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
23724 amit.gupta 106
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
24249 amit.gupta 107
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
24277 amit.gupta 108
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
24174 govind 109
import com.spice.profitmandi.dao.repository.fofo.PartnerTargetRepository;
23724 amit.gupta 110
import com.spice.profitmandi.dao.repository.fofo.PurchaseRepository;
24242 amit.gupta 111
import com.spice.profitmandi.dao.repository.fofo.ScanRecordRepository;
24241 amit.gupta 112
import com.spice.profitmandi.dao.repository.fofo.SchemeInOutRepository;
23929 amit.gupta 113
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
24431 amit.gupta 114
import com.spice.profitmandi.dao.repository.transaction.PriceDropRepository;
24580 amit.gupta 115
import com.spice.profitmandi.dao.repository.transaction.UserWalletHistoryRepository;
24587 amit.gupta 116
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
24542 amit.gupta 117
import com.spice.profitmandi.dao.repository.user.AddressRepository;
24337 amit.gupta 118
import com.spice.profitmandi.service.PartnerInvestmentService;
23929 amit.gupta 119
import com.spice.profitmandi.service.inventory.InventoryService;
25335 amit.gupta 120
import com.spice.profitmandi.service.order.OrderService;
24431 amit.gupta 121
import com.spice.profitmandi.service.pricing.PriceDropService;
23724 amit.gupta 122
import com.spice.profitmandi.service.recharge.provider.OxigenRechargeProviderService;
123
import com.spice.profitmandi.service.recharge.provider.ThinkWalnutDigitalRechargeProviderService;
124
import com.spice.profitmandi.service.scheme.SchemeService;
24121 govind 125
import com.spice.profitmandi.service.slab.TargetSlabService;
23929 amit.gupta 126
import com.spice.profitmandi.service.transaction.TransactionService;
127
import com.spice.profitmandi.service.user.RetailerService;
23739 amit.gupta 128
import com.spice.profitmandi.service.wallet.WalletService;
23723 amit.gupta 129
 
24197 amit.gupta 130
import in.shop2020.model.v1.order.WalletReferenceType;;
23739 amit.gupta 131
 
23723 amit.gupta 132
@Component
23724 amit.gupta 133
@Transactional(rollbackFor = Throwable.class)
23723 amit.gupta 134
public class ScheduledTasks {
135
 
23724 amit.gupta 136
	@Value("${oxigen.recharge.transaction.url}")
137
	private String oxigenRechargeTransactionUrl;
23723 amit.gupta 138
 
23724 amit.gupta 139
	@Value("${oxigen.recharge.enquiry.url}")
140
	private String oxigenRechargeEnquiryUrl;
24533 govind 141
 
24431 amit.gupta 142
	@Autowired
143
	private PriceDropService priceDropService;
23723 amit.gupta 144
 
23724 amit.gupta 145
	@Value("${oxigen.recharge.auth.key}")
146
	private String oxigenRechargeAuthKey;
147
 
148
	@Value("${oxigen.recharge.validation.url}")
149
	private String oxigenRechargeValidationUrl;
150
 
151
	@Value("${oxigen.recharge.validation.auth.key}")
152
	private String oxigenRechargeValidationAuthKey;
153
 
154
	@Value("${think.walnut.digital.recharge.transaction.mobile.url}")
155
	private String thinkWalnutDigitalRechargeTransactionMobileUrl;
156
 
157
	@Value("${think.walnut.digital.recharge.transaction.dth.url}")
158
	private String thinkWalnutDigitalRechargeTransactionDthUrl;
159
 
160
	@Value("${think.walnut.digital.recharge.enquiry.url}")
161
	private String thinkWalnutDigitalRechargeEnquiryUrl;
162
 
163
	@Value("${think.walnut.digital.recharge.balance.url}")
164
	private String thinkWalnutDigitalRechargeBalanceUrl;
165
 
166
	@Value("${think.walnut.digital.recharge.username}")
167
	private String thinkWalnutDigitalRechargeUserName;
168
 
169
	@Value("${think.walnut.digital.recharge.password}")
170
	private String thinkWalnutDigitalRechargePassword;
171
 
172
	@Value("${think.walnut.digital.recharge.auth.key}")
173
	private String thinkWalnutDigitalRechargeAuthKey;
174
 
23723 amit.gupta 175
	@Autowired
23724 amit.gupta 176
	private PurchaseRepository purchaseRepository;
177
 
178
	@Autowired
179
	private SchemeService schemeService;
24683 amit.gupta 180
 
24681 amit.gupta 181
	@Autowired
182
	private ReporticoService reporticoService;
23724 amit.gupta 183
 
184
	@Autowired
24337 amit.gupta 185
	private PartnerInvestmentService partnerInvestmentService;
186
 
187
	@Autowired
24542 amit.gupta 188
	private FofoOrderItemRepository fofoOrderItemRepository;
189
 
190
	@Autowired
24277 amit.gupta 191
	private PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
192
 
193
	@Autowired
24241 amit.gupta 194
	private SchemeInOutRepository schemeInOutRepository;
195
 
196
	@Autowired
23724 amit.gupta 197
	private RechargeTransactionRepository rechargeTransactionRepository;
198
 
199
	@Autowired
24542 amit.gupta 200
	private CustomerAddressRepository customerAddressRepository;
201
 
202
	@Autowired
23724 amit.gupta 203
	private RechargeProviderCreditWalletHistoryRepository rechargeProviderCreditWalletHistoryRepository;
204
 
205
	@Autowired
24590 amit.gupta 206
	private FofoLineItemRepository fofoLineItemRepository;
207
 
208
	@Autowired
23724 amit.gupta 209
	private FofoOrderRepository fofoOrderRepository;
24587 amit.gupta 210
 
24580 amit.gupta 211
	@Autowired
212
	private UserWalletHistoryRepository userWalletHistoryRepository;
24250 amit.gupta 213
 
24249 amit.gupta 214
	@Autowired
24587 amit.gupta 215
	private UserWalletRepository userWalletRepository;
216
 
217
	@Autowired
24249 amit.gupta 218
	private InventoryItemRepository inventoryItemRepository;
23929 amit.gupta 219
 
23739 amit.gupta 220
	@Autowired
221
	private WalletService walletService;
23724 amit.gupta 222
 
223
	@Autowired
224
	private ThinkWalnutDigitalRechargeProviderService thinkWalnutDigitalRechargeProviderService;
225
 
226
	@Autowired
227
	private OxigenRechargeProviderService oxigenRechargeProviderService;
228
 
229
	@Autowired
230
	private RechargeProviderRepository rechargeProviderRepository;
231
 
232
	@Autowired
24242 amit.gupta 233
	private ScanRecordRepository scanRecordRepository;
234
 
235
	@Autowired
23724 amit.gupta 236
	private DailyRechargeRepository dailyRechargeRepository;
237
 
23929 amit.gupta 238
	@Autowired
239
	private FofoStoreRepository fofoStoreRepository;
24177 govind 240
 
24121 govind 241
	@Autowired
242
	private TargetSlabService targetService;
23929 amit.gupta 243
 
23724 amit.gupta 244
	@Value("${prod}")
245
	private boolean prod;
246
 
23929 amit.gupta 247
	@Autowired
248
	private RetailerService retailerService;
249
 
250
	@Autowired
251
	private TransactionService transactionService;
24250 amit.gupta 252
 
24249 amit.gupta 253
	@Autowired
254
	private ItemRepository itemRepository;
23929 amit.gupta 255
 
256
	@Autowired
257
	private OrderRepository orderRepository;
25335 amit.gupta 258
 
259
	@Autowired
260
	private OrderService orderService;
23929 amit.gupta 261
 
262
	@Autowired
24241 amit.gupta 263
	private SchemeRepository schemeRepository;
264
 
265
	@Autowired
23929 amit.gupta 266
	private JavaMailSender mailSender;
24177 govind 267
 
24174 govind 268
	@Autowired
24431 amit.gupta 269
	private PriceDropRepository priceDropRepository;
270
 
271
	@Autowired
24174 govind 272
	private PartnerTargetRepository partnerTargetRepository;
24002 amit.gupta 273
 
274
	@Autowired
275
	@Qualifier(value = "googleMailSender")
23932 amit.gupta 276
	private JavaMailSender googleMailSender;
23929 amit.gupta 277
 
278
	@Autowired
279
	private InventoryService inventoryService;
280
 
24533 govind 281
	@Autowired
24542 amit.gupta 282
	private AddressRepository addressRepository;
283
 
284
	@Autowired
285
	private RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
286
 
24653 govind 287
	@Autowired
288
	private Mongo mongoClient;
24683 amit.gupta 289
 
24669 govind 290
	@Autowired
25300 tejbeer 291
	private DeviceRepository deviceRepository;
292
 
293
	@Autowired
294
	private PushNotificationRepository pushNotificationRepository;
295
 
296
	@Autowired
297
	private NotificationCampaignRepository notificationCampaignRepository;
298
 
299
	@Autowired
24669 govind 300
	private UserAccountRepository userAccountRepository;
24653 govind 301
 
23755 amit.gupta 302
	private static final Logger LOGGER = LogManager.getLogger(ScheduledTasks.class);
23724 amit.gupta 303
 
25300 tejbeer 304
	private String FCM_URL = "https://fcm.googleapis.com/fcm/send";
305
	private String FCM_API_KEY = "AAAASAjNcn4:APA91bG6fWRIgYJI0L9gCjP5ynaXz2hJHYKtD9dfH7Depdv31Nd9APJwhx-OPkAJ1WSz4BGNYG8lHThLFSjDGFxIwUZv241YcAJEGDLgt86mxq9FXJe-yBRu-S0_ZwHqmX-QaVKl5F_A";
306
 
23724 amit.gupta 307
	public void generateDailyRecharge() {
308
		List<RechargeProviderCreditWalletHistory> allCreditHistory = rechargeProviderCreditWalletHistoryRepository
309
				.selectAll(0, 2000);
310
		List<RechargeProvider> rechargeProviders = rechargeProviderRepository.selectAll();
311
		rechargeProviders.stream().forEach(x -> x.setAmount(0));
312
 
313
		rechargeProviders.stream().forEach(x -> {
314
			Map<LocalDate, List<RechargeProviderCreditWalletHistory>> dateWiseProviderCreditsMap = allCreditHistory
315
					.stream().filter(z -> z.getProviderId() == x.getId())
316
					.collect(Collectors.groupingBy(x1 -> x1.getReceiveTimestamp().toLocalDate()));
317
 
318
			LOGGER.info("dateWiseProviderCreditsMap -- {}", dateWiseProviderCreditsMap);
319
			LocalDate endDate = LocalDate.now().plusDays(1);
320
			float previousDayClosing = 0;
321
			LocalDate date = LocalDate.of(2018, 4, 6);
322
			while (date.isBefore(endDate)) {
323
				List<RechargeTransaction> dateWiseRechargeTransactions = rechargeTransactionRepository
324
						.selectAllBetweenTimestamp(Arrays.asList(RechargeStatus.values()), date.atStartOfDay(),
325
								date.plusDays(1).atStartOfDay());
326
 
327
				List<RechargeTransaction> successfulTransactions = dateWiseRechargeTransactions.stream()
328
						.filter(y -> y.getStatus().equals(RechargeStatus.SUCCESS)).collect(Collectors.toList());
329
 
330
				float dailyAmount = 0;
331
				float totalCommission = 0;
332
				for (RechargeTransaction rechargeTransaction : successfulTransactions) {
333
					if (rechargeTransaction.getProviderId() == x.getId()) {
334
						dailyAmount += rechargeTransaction.getAmount();
335
						totalCommission += rechargeTransaction.getCommission();
336
					}
337
				}
338
 
339
				List<RechargeProviderCreditWalletHistory> rechargeHistoryList = dateWiseProviderCreditsMap.get(date);
340
				float dailyWalletRecharge = 0;
341
				if (rechargeHistoryList != null) {
342
					for (RechargeProviderCreditWalletHistory rechargeProviderCreditWalletHistory : rechargeHistoryList) {
343
						if (rechargeProviderCreditWalletHistory.getProviderId() == x.getId()) {
344
							dailyWalletRecharge += rechargeProviderCreditWalletHistory.getAmount();
345
						}
346
					}
347
				}
348
				if (dailyAmount > 0 || dailyWalletRecharge > 0) {
349
					DailyRecharge dailyRecharge = null;
350
					try {
351
						dailyRecharge = dailyRechargeRepository.selectByProviderIdAndCreateDate(x.getId(), date);
352
					} catch (Exception e) {
353
						LOGGER.info("Could not find Recharge entry");
354
					}
355
					if (dailyRecharge == null) {
356
						dailyRecharge = new DailyRecharge();
357
						dailyRecharge.setCreateDate(date);
358
					}
359
					dailyRecharge.setOpeningBalance(previousDayClosing);
360
					dailyRecharge.setProviderId(x.getId());
361
					dailyRecharge.setWalletRechargeAmount(dailyWalletRecharge);
362
					dailyRecharge.setTotalAmount(dailyAmount);
363
					dailyRecharge.setTotalCommission(totalCommission);
364
					float closingBalance = dailyRecharge.getOpeningBalance() + dailyWalletRecharge - dailyAmount;
365
					dailyRecharge.setClosingBalance(closingBalance);
366
					dailyRechargeRepository.persist(dailyRecharge);
367
					x.setAmount(x.getAmount() + dailyRecharge.getClosingBalance() - dailyRecharge.getOpeningBalance());
368
					previousDayClosing = dailyRecharge.getClosingBalance();
369
				}
370
				date = date.plusDays(1);
371
			}
372
			rechargeProviderRepository.persist(x);
373
		});
23761 amit.gupta 374
		LOGGER.info("finished generating daily recharge");
23724 amit.gupta 375
	}
376
 
23738 amit.gupta 377
	public void reconcileRecharge() throws Exception {
23724 amit.gupta 378
		LocalDateTime fromDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).minusDays(30);
379
		LocalDateTime toDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
380
		List<RechargeStatus> nonSuccessRechargeStatuses = new ArrayList<>(Arrays.asList(RechargeStatus.values()));
381
		LOGGER.info("nonSuccessRechargeStatuses {} ", nonSuccessRechargeStatuses);
382
		nonSuccessRechargeStatuses.remove(RechargeStatus.SUCCESS);
383
		nonSuccessRechargeStatuses.remove(RechargeStatus.FAILED);
384
		RechargeCredential thinkWalnutDigitalRechargeEnquiryCredential = new RechargeCredential();
385
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeUrl(thinkWalnutDigitalRechargeEnquiryUrl);
386
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeUserName(thinkWalnutDigitalRechargeUserName);
387
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargePassword(thinkWalnutDigitalRechargePassword);
388
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);
389
		Map<String, RechargeStatus> requestRechargeStatusChanged = new HashMap<>();
390
		List<RechargeTransaction> rechargeTransactions = rechargeTransactionRepository
391
				.selectAllBetweenTimestamp(nonSuccessRechargeStatuses, fromDate, toDate);
392
		for (RechargeTransaction rechargeTransaction : rechargeTransactions) {
393
			try {
394
				int providerId = rechargeTransaction.getProviderId();
395
				if (providerId == 1) {
396
					oxigenRechargeProviderService.doCheckStatusRequest(oxigenRechargeEnquiryUrl, oxigenRechargeAuthKey,
397
							rechargeTransaction);
398
				} else if (providerId == 2) {
399
					thinkWalnutDigitalRechargeProviderService
400
							.doCheckStatusRequest(thinkWalnutDigitalRechargeEnquiryCredential, rechargeTransaction);
401
				}
402
				if (rechargeTransaction.getStatus().equals(RechargeStatus.SUCCESS)
403
						|| rechargeTransaction.getStatus().equals(RechargeStatus.FAILED)) {
404
					requestRechargeStatusChanged.put(rechargeTransaction.getRequestId(),
405
							rechargeTransaction.getStatus());
406
				}
407
			} catch (Exception e) {
408
				LOGGER.info("Could not check status for Request {}", rechargeTransaction.getRequestId());
409
			}
410
		}
23738 amit.gupta 411
		LOGGER.info("Reconcile recharge ran successfully");
23724 amit.gupta 412
	}
24240 amit.gupta 413
 
414
	// TemporaryMethod
24237 amit.gupta 415
	public void migrateInvoice() {
416
		List<FofoOrder> fofoOrders = fofoOrderRepository.selectFromSaleDate(LocalDateTime.now().minusDays(3));
417
		Map<Integer, List<FofoOrder>> partnerOrdersMap = new HashMap<>();
24241 amit.gupta 418
		partnerOrdersMap = fofoOrders.stream()
419
				.collect(Collectors.groupingBy(FofoOrder::getFofoId, Collectors.toList()));
24237 amit.gupta 420
		for (List<FofoOrder> orderList : partnerOrdersMap.values()) {
24240 amit.gupta 421
			int sequence = 0;
422
			String prefix = "";
24241 amit.gupta 423
			List<FofoOrder> sortedList = orderList.stream().sorted((x1, x2) -> x1.getId() - x2.getId())
424
					.collect(Collectors.toList());
425
			for (FofoOrder order : sortedList) {
426
 
24240 amit.gupta 427
				LOGGER.info("Order Id is {}, partner Id is {}", order.getId(), order.getFofoId());
24241 amit.gupta 428
				if (!order.getInvoiceNumber().contains("SEC")) {
24240 amit.gupta 429
					sequence = Integer.parseInt(order.getInvoiceNumber().split("/")[1]);
430
					prefix = order.getInvoiceNumber().split("/")[0];
431
				} else {
432
					sequence += 1;
24241 amit.gupta 433
					String invoiceNumber = prefix + "/" + sequence;
24240 amit.gupta 434
					order.setInvoiceNumber(invoiceNumber);
435
					fofoOrderRepository.persist(order);
436
				}
437
			}
24241 amit.gupta 438
 
24237 amit.gupta 439
		}
440
	}
23724 amit.gupta 441
 
24241 amit.gupta 442
	// Temporary Method
24252 amit.gupta 443
	public void evaluateExcessSchemeOut() throws Exception {
24244 amit.gupta 444
		Map<Integer, String> userNameMap = retailerService.getAllFofoRetailerIdNameMap();
445
		Map<Integer, Float> userAmountMap = new HashMap<>();
24252 amit.gupta 446
 
24807 amit.gupta 447
		List<List<? extends Serializable>> rows = new ArrayList<>();
24271 amit.gupta 448
		List<String> headers = Arrays.asList("Scheme", "Item", "Partner", "Amount", "Credited On", "Invoice Number",
449
				"Sale On", "Scheme Start", "Scheme End", "Active On", "Expired On");
24241 amit.gupta 450
		schemeRepository.selectAll().stream().forEach(x -> {
24250 amit.gupta 451
			if (x.getType().equals(SchemeType.OUT)) {
452
				List<SchemeInOut> sioList = schemeInOutRepository
453
						.selectBySchemeIds(new HashSet<>(Arrays.asList(x.getId())));
454
				if (x.getActiveTimestamp() != null) {
455
					LocalDateTime endDateTime = x.getEndDateTime();
456
					if (x.getExpireTimestamp() != null && x.getExpireTimestamp().isBefore(x.getEndDateTime())) {
457
						endDateTime = x.getExpireTimestamp();
24249 amit.gupta 458
					}
24250 amit.gupta 459
					for (SchemeInOut sio : sioList) {
460
						InventoryItem inventoryItem = null;
24266 amit.gupta 461
						inventoryItem = inventoryItemRepository.selectById(sio.getInventoryItemId());
24271 amit.gupta 462
						FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndSerialNumber(
463
								inventoryItem.getFofoId(), inventoryItem.getSerialNumber(), null, null, 0, 1).get(0);
24250 amit.gupta 464
						Optional<ScanRecord> record = scanRecordRepository
465
								.selectByInventoryItemId(sio.getInventoryItemId()).stream()
466
								.filter(y -> y.getType().equals(ScanType.SALE)).findFirst();
467
						if (record.isPresent()) {
468
							int fofoId = record.get().getFofoId();
469
							if (record.get().getCreateTimestamp().isAfter(endDateTime)
470
									|| record.get().getCreateTimestamp().isBefore(x.getStartDateTime())) {
471
								if (!userAmountMap.containsKey(fofoId)) {
472
									userAmountMap.put(fofoId, 0f);
473
								}
474
								userAmountMap.put(fofoId, sio.getAmount() + userAmountMap.get(fofoId));
475
								try {
24252 amit.gupta 476
									rows.add(Arrays.asList(x.getDescription(),
24250 amit.gupta 477
											itemRepository.selectById(inventoryItem.getItemId()).getItemDescription(),
24252 amit.gupta 478
											userNameMap.get(fofoId), sio.getAmount(),
24253 amit.gupta 479
											FormattingUtils.formatDate(sio.getCreateTimestamp()),
480
											fofoOrder.getInvoiceNumber(),
481
											FormattingUtils.formatDate(record.get().getCreateTimestamp()),
482
											FormattingUtils.formatDate(x.getStartDateTime()),
483
											FormattingUtils.formatDate(x.getEndDateTime()),
484
											FormattingUtils.formatDate(x.getActiveTimestamp()),
485
											FormattingUtils.formatDate(x.getExpireTimestamp())));
24250 amit.gupta 486
								} catch (Exception e) {
487
									e.printStackTrace();
488
								}
24242 amit.gupta 489
							}
24241 amit.gupta 490
						}
491
					}
492
				}
493
			}
494
		});
24246 amit.gupta 495
		userAmountMap.entrySet().stream()
496
				.forEach(x -> LOGGER.info("{} to be deducted from {}({}) for wrongly disbursed due to technical error.",
497
						x.getValue(), userNameMap.get(x.getKey())));
24241 amit.gupta 498
 
24252 amit.gupta 499
		ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, rows);
24271 amit.gupta 500
		Utils.sendMailWithAttachment(googleMailSender,
501
				new String[] { "amit.gupta@shop2020.in", "adeel.yazdani@smartdukaan.com" }, null,
502
				"Partner Excess Amount", "PFA", "ListofSchemes.csv", new ByteArrayResource(baos.toByteArray()));
24252 amit.gupta 503
 
24241 amit.gupta 504
	}
24271 amit.gupta 505
 
24256 amit.gupta 506
	public void processScheme(int offset) throws Exception {
24462 amit.gupta 507
		LocalDateTime startDate = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT).minusDays(offset);
24259 amit.gupta 508
		LocalDateTime endDate = startDate.plusDays(30);
24258 amit.gupta 509
		processScheme(startDate, endDate);
24256 amit.gupta 510
	}
24533 govind 511
 
24461 amit.gupta 512
	public void processScheme(int offset, int durationDays) throws Exception {
24462 amit.gupta 513
		LocalDateTime startDate = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT).minusDays(offset);
24461 amit.gupta 514
		LocalDateTime endDate = startDate.plusDays(durationDays);
515
		processScheme(startDate, endDate);
516
	}
24271 amit.gupta 517
 
23738 amit.gupta 518
	public void processScheme() throws Exception {
24256 amit.gupta 519
		LocalDateTime fromDate = LocalDateTime.now().minusDays(30);
520
		processScheme(fromDate, LocalDateTime.now());
521
	}
24271 amit.gupta 522
 
24256 amit.gupta 523
	public void processScheme(LocalDateTime startDate, LocalDateTime endDate) throws Exception {
23724 amit.gupta 524
		LOGGER.info("Started execution at {}", LocalDateTime.now());
25312 amit.gupta 525
		System.out.println(
526
				"InventoryId\tSerialNumber\tItem Id\tScheme Id\tScheme Name\tScheme Type\tAmount Type\tDP\tTaxable\tScheme Amount\tAmount Paid");
24561 amit.gupta 527
		try {
24587 amit.gupta 528
			List<Purchase> purchases = purchaseRepository.selectAllBetweenPurchaseDate(startDate, endDate);
529
			for (Purchase purchase : purchases) {
530
				schemeService.processSchemeIn(purchase.getId(), purchase.getFofoId());
531
			}
24271 amit.gupta 532
 
24587 amit.gupta 533
			List<FofoOrder> fofoOrders = fofoOrderRepository.selectBetweenSaleDate(startDate, endDate);
534
			for (FofoOrder fofoOrder : fofoOrders) {
535
				schemeService.processSchemeOut(fofoOrder.getId(), fofoOrder.getFofoId());
536
			}
537
		} catch (Exception e) {
24561 amit.gupta 538
			e.printStackTrace();
24565 amit.gupta 539
			throw e;
24561 amit.gupta 540
		}
25312 amit.gupta 541
		List<UserWalletHistory> uwhs = userWalletHistoryRepository.selectAllByDateType(startDate, endDate,
542
				Arrays.asList(WalletReferenceType.SCHEME_IN, WalletReferenceType.SCHEME_OUT));
25043 amit.gupta 543
		System.out.println("Amount\tReference\tReferenceType\tTimestamp\tDescription");
25312 amit.gupta 544
		for (UserWalletHistory uwh : uwhs) {
545
			System.out.println(String.format("%d\t%d\t%s\t%s\t%s", uwh.getAmount(), uwh.getReference(),
546
					uwh.getReferenceType(), uwh.getTimestamp().toString(), uwh.getDescription()));
25043 amit.gupta 547
		}
23724 amit.gupta 548
		LOGGER.info("Schemes process successfully.");
25312 amit.gupta 549
		// throw new Exception();
23724 amit.gupta 550
	}
23929 amit.gupta 551
 
23739 amit.gupta 552
	public void processRechargeCashback() throws Throwable {
23761 amit.gupta 553
		LocalDateTime cashbackTime = LocalDateTime.now();
23929 amit.gupta 554
		int referenceId = (int) Timestamp.valueOf(cashbackTime).getTime() / 1000;
555
		List<RechargeTransaction> pendingTransactions = rechargeTransactionRepository
556
				.getPendingCashBackRehargeTransactions();
557
		Map<Object, Double> totalRetailerCashbacks = pendingTransactions.stream().collect(
558
				Collectors.groupingBy(x -> x.getRetailerId(), Collectors.summingDouble(x -> x.getCommission())));
559
		for (Map.Entry<Object, Double> totalRetailerCashback : totalRetailerCashbacks.entrySet()) {
560
			int retailerId = (Integer) totalRetailerCashback.getKey();
23739 amit.gupta 561
			float amount = totalRetailerCashback.getValue().floatValue();
23929 amit.gupta 562
			if (Math.round(amount) > 0) {
563
				walletService.addAmountToWallet(retailerId, referenceId, WalletReferenceType.CASHBACK,
564
						"Recharge Cashback", Math.round(amount));
23762 amit.gupta 565
			}
23739 amit.gupta 566
		}
23929 amit.gupta 567
		for (RechargeTransaction rt : pendingTransactions) {
23761 amit.gupta 568
			rt.setCashbackTimestamp(cashbackTime);
569
			rt.setCashbackReference(referenceId);
570
			rechargeTransactionRepository.persist(rt);
571
		}
23739 amit.gupta 572
		LOGGER.info("Cashbacks for Recharge processed Successfully");
573
	}
23724 amit.gupta 574
 
24271 amit.gupta 575
	public void sendPartnerInvestmentDetails(List<String> sendTo) throws Exception {
25312 amit.gupta 576
		if (sendTo == null) {
25341 amit.gupta 577
			sendTo = Arrays.asList("tarun.verma@smartdukaan.com", "kamini.sharma@smartdukaan.com",
25312 amit.gupta 578
					"amit.gupta@shop2020.in");
579
		}
24277 amit.gupta 580
		LocalDate yesterDay = LocalDate.now().minusDays(1);
25267 amit.gupta 581
		List<FofoStore> fofoStores = fofoStoreRepository.selectActiveStores();
23929 amit.gupta 582
		Map<Integer, CustomRetailer> customRetailerMap = retailerService
583
				.getFofoRetailers(fofoStores.stream().map(x -> x.getId()).collect(Collectors.toList()));
25335 amit.gupta 584
 
25312 amit.gupta 585
		List<String> headers = Arrays.asList("Code", "Store Name", "Firm Name", "State Manager", "Teritory Manager",
586
				"Team Leader", "Wallet Amount", "In Stock Amount", "Return In Transit Stock", "Unbilled Amount",
25342 amit.gupta 587
				"Grn Pending Amount", "Min Investment", "Investment Amount", "Investment Short", "Unbilled Qty");
24807 amit.gupta 588
		List<List<? extends Serializable>> rows = new ArrayList<>();
25312 amit.gupta 589
		Map<String, List<? extends Serializable>> partnerRow = new HashMap<>();
24002 amit.gupta 590
		for (FofoStore fofoStore : fofoStores) {
25314 amit.gupta 591
			if (!fofoStore.isActive())
592
				continue;
24002 amit.gupta 593
			CustomRetailer retailer = customRetailerMap.get(fofoStore.getId());
25314 amit.gupta 594
			if (retailer == null || storeManagerMap.get(retailer.getEmail()) == null) {
24002 amit.gupta 595
				LOGGER.info("Could not find retailer with retailer Id {}", fofoStore.getId());
596
				continue;
597
			}
24533 govind 598
			PartnerDailyInvestment partnerDailyInvestment = partnerInvestmentService.getInvestment(fofoStore.getId(),
599
					1);
24337 amit.gupta 600
			partnerDailyInvestment.setDate(yesterDay);
601
			partnerDailyInvestmentRepository.persist(partnerDailyInvestment);
24533 govind 602
 
25312 amit.gupta 603
			List<? extends Serializable> row = Arrays.asList(fofoStore.getCode(),
25333 amit.gupta 604
					"SmartDukaan-" + fofoStore.getCode().replace("\\[a-zA-Z]+", ""), retailer.getBusinessName(),
25312 amit.gupta 605
					storeManagerMap.get(retailer.getEmail()).get(2), storeManagerMap.get(retailer.getEmail()).get(1),
25329 amit.gupta 606
					storeManagerMap.get(retailer.getEmail()).get(0), partnerDailyInvestment.getWalletAmount(), 
607
					partnerDailyInvestment.getInStockAmount(), 0,
24415 amit.gupta 608
					partnerDailyInvestment.getUnbilledAmount(), partnerDailyInvestment.getGrnPendingAmount(),
24533 govind 609
					partnerDailyInvestment.getMinInvestment(), partnerDailyInvestment.getTotalInvestment(),
25335 amit.gupta 610
					partnerDailyInvestment.getShortInvestment(),
611
					partnerDailyInvestment.getUnbilledQty());
25312 amit.gupta 612
			partnerRow.put(retailer.getEmail(), row);
24002 amit.gupta 613
			rows.add(row);
614
 
23929 amit.gupta 615
		}
25312 amit.gupta 616
		Map<String, Set<String>> storeGuyMap = new HashMap<>();
617
		for (Map.Entry<String, List<String>> entry : storeManagerMap.entrySet()) {
618
			String storeEmail = entry.getKey();
619
			List<String> storeGuys = entry.getValue();
620
			for (String storeGuy : storeGuys) {
621
				if (!storeGuyMap.containsKey(storeGuy)) {
622
					storeGuyMap.put(storeGuy, new HashSet<>());
623
				}
624
				storeGuyMap.get(storeGuy).add(storeEmail);
625
			}
626
		}
25322 amit.gupta 627
		storeGuyMap.remove("");
25312 amit.gupta 628
 
24271 amit.gupta 629
		String fileName = "InvestmentSummary-" + FormattingUtils.formatDate(LocalDateTime.now()) + ".csv";
25341 amit.gupta 630
		for (Map.Entry<String, Set<String>> storeGuyEntry : storeGuyMap.entrySet()) {
25312 amit.gupta 631
			List<List<? extends Serializable>> filteredRows = storeGuyEntry.getValue().stream()
632
					.map(x -> partnerRow.get(x)).collect(Collectors.toList());
633
			ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, filteredRows);
25321 amit.gupta 634
			String[] sendToArray = new String[] { nameEmail.get(storeGuyEntry.getKey()) };
25312 amit.gupta 635
			Utils.sendMailWithAttachment(googleMailSender, sendToArray, null, "Partner Investment Summary", "PFA",
636
					fileName, new ByteArrayResource(baos.toByteArray()));
25341 amit.gupta 637
		}
25312 amit.gupta 638
 
24002 amit.gupta 639
		ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, rows);
24271 amit.gupta 640
		String[] sendToArray = sendTo.toArray(new String[sendTo.size()]);
641
		Utils.sendMailWithAttachment(googleMailSender, sendToArray, null, "Partner Investment Summary", "PFA", fileName,
642
				new ByteArrayResource(baos.toByteArray()));
643
 
23929 amit.gupta 644
	}
24177 govind 645
 
24271 amit.gupta 646
	public void sendPartnerInvestmentDetails() throws Exception {
25312 amit.gupta 647
		this.sendPartnerInvestmentDetails(null);
24271 amit.gupta 648
 
649
	}
650
 
25312 amit.gupta 651
	public void sendTargetVsSalesReport(List<String> sendTo) throws Exception {
24177 govind 652
 
25312 amit.gupta 653
		if (sendTo == null) {
25341 amit.gupta 654
			sendTo = Arrays.asList("tarun.verma@smartdukaan.com", "kamini.sharma@smartdukaan.com",
25312 amit.gupta 655
					"amit.gupta@shop2020.in");
656
		}
24177 govind 657
		List<PartnerTargetDetails> partnerTargetDetails = partnerTargetRepository
658
				.selectAllGeEqAndLeEqStartDateAndEndDate(LocalDateTime.now());
25312 amit.gupta 659
		Map<String, List<? extends Serializable>> partnerSalesTargetRowsMap = new HashMap<>();
24177 govind 660
		for (PartnerTargetDetails partnerTargetDetail : partnerTargetDetails) {
25312 amit.gupta 661
			partnerSalesTargetRowsMap.putAll(targetService.getDailySaleReportVsTarget(partnerTargetDetail));
24174 govind 662
		}
25315 amit.gupta 663
		Map<Integer, FofoStore> fofoStoresMap = fofoStoreRepository.selectActiveStores().stream()
664
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
665
 
25312 amit.gupta 666
		Map<Integer, CustomRetailer> customRetailerMap = retailerService
25315 amit.gupta 667
				.getFofoRetailers(new ArrayList<>(fofoStoresMap.keySet()));
24177 govind 668
 
25315 amit.gupta 669
		Map<String, CustomRetailer> customRetailerEmailMap = customRetailerMap.values().stream()
670
				.collect(Collectors.toMap(x -> x.getEmail(), x -> x));
671
 
25312 amit.gupta 672
		List<String> headers = Arrays.asList("Code", "Store Name", "Firm Name", "State Manager", "Teritory Manager",
25327 amit.gupta 673
				"Team Leader", "Target Name", "Target Value", "Target Achieved", "Achived Percentage",
674
				"Remaining Target", "Today's Target", "Today's achievement");
24177 govind 675
 
25312 amit.gupta 676
		List<List<? extends Serializable>> rows = new ArrayList<>();
677
		Map<String, List<Serializable>> partnerRowMap = new HashMap<>();
25315 amit.gupta 678
		for (Map.Entry<String, List<? extends Serializable>> partnerSalesTargetRowEntry : partnerSalesTargetRowsMap
679
				.entrySet()) {
680
			CustomRetailer retailer = customRetailerEmailMap.get(partnerSalesTargetRowEntry.getKey());
681
			FofoStore fofoStore = fofoStoresMap.get(retailer.getPartnerId());
25312 amit.gupta 682
			Serializable code = fofoStore.getCode();
25334 amit.gupta 683
			Serializable storeName = "SmartDukaan-" + fofoStore.getCode().replace("\\[a-zA-Z]+", "");
25314 amit.gupta 684
			Serializable businessName = retailer.getBusinessName();
25317 amit.gupta 685
			try {
686
				Serializable stateManager = storeManagerMap.get(retailer.getEmail()).get(2);
687
				Serializable territoryManager = storeManagerMap.get(retailer.getEmail()).get(1);
688
				Serializable teamLeader = storeManagerMap.get(retailer.getEmail()).get(0);
689
				List<Serializable> row = new ArrayList<>(
690
						Arrays.asList(code, storeName, businessName, stateManager, territoryManager, teamLeader));
691
				if (partnerSalesTargetRowsMap.get(retailer.getEmail()) != null) {
25323 amit.gupta 692
					row.addAll(partnerSalesTargetRowsMap.get(retailer.getEmail()));
25317 amit.gupta 693
					partnerRowMap.put(retailer.getEmail(), row);
694
					rows.add(row);
695
				}
696
			} catch(Exception e) {
697
				LOGGER.warn("Could not find partner with email - {}", retailer.getEmail());
25315 amit.gupta 698
			}
25312 amit.gupta 699
 
24177 govind 700
		}
701
 
25312 amit.gupta 702
		Map<String, Set<String>> storeGuyMap = new HashMap<>();
703
		for (Map.Entry<String, List<String>> entry : storeManagerMap.entrySet()) {
704
			String storeEmail = entry.getKey();
705
			List<String> storeGuys = entry.getValue();
706
			for (String storeGuy : storeGuys) {
707
				if (!storeGuyMap.containsKey(storeGuy)) {
708
					storeGuyMap.put(storeGuy, new HashSet<>());
709
				}
710
				storeGuyMap.get(storeGuy).add(storeEmail);
24192 govind 711
			}
25312 amit.gupta 712
		}
25322 amit.gupta 713
		storeGuyMap.remove("");
24240 amit.gupta 714
 
25318 amit.gupta 715
		String fileName = "TargetVsSales-" + FormattingUtils.formatDate(LocalDateTime.now()) + ".csv";
25341 amit.gupta 716
		for (Map.Entry<String, Set<String>> storeGuyEntry : storeGuyMap.entrySet()) {
25312 amit.gupta 717
			List<List<? extends Serializable>> filteredRows = storeGuyEntry.getValue().stream()
25319 amit.gupta 718
					.map(x -> partnerRowMap.get(x)).filter(x->x!=null).collect(Collectors.toList());
25312 amit.gupta 719
			ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, filteredRows);
25320 amit.gupta 720
			String[] sendToArray = new String[] { nameEmail.get(storeGuyEntry.getKey()) };
25312 amit.gupta 721
			Utils.sendMailWithAttachment(googleMailSender, sendToArray, null, "Target vs Sales Summary", "PFA",
722
					fileName, new ByteArrayResource(baos.toByteArray()));
25341 amit.gupta 723
		}
24240 amit.gupta 724
 
25312 amit.gupta 725
		ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, rows);
726
		String[] sendToArray = sendTo.toArray(new String[sendTo.size()]);
727
		Utils.sendMailWithAttachment(googleMailSender, sendToArray, null, "Target vs Sales Summary", "PFA", fileName,
728
				new ByteArrayResource(baos.toByteArray()));
24174 govind 729
	}
24683 amit.gupta 730
 
24697 amit.gupta 731
	public void sendAgeingReport(String... sendTo) throws Exception {
24692 amit.gupta 732
 
733
		InputStreamSource isr = reporticoService.getReportInputStreamSource(ReporticoProject.WAREHOUSENEW,
734
				"itemstockageing.xml");
24708 amit.gupta 735
		InputStreamSource isr1 = reporticoService.getReportInputStreamSource(ReporticoProject.FOCO,
24754 amit.gupta 736
				"ItemwiseOverallPendingIndent.xml");
24683 amit.gupta 737
		Attachment attachment = new Attachment(
24692 amit.gupta 738
				"aeging-report-" + FormattingUtils.formatDate(LocalDateTime.now().minusDays(1)) + ".csv", isr);
24707 amit.gupta 739
		Attachment attachment1 = new Attachment(
740
				"aeging-report-" + FormattingUtils.formatDate(LocalDateTime.now().minusDays(1)) + ".csv", isr1);
24841 govind 741
		Utils.sendMailWithAttachments(googleMailSender, sendTo, null, "Stock Aeging Report", "PFA", attachment,
742
				attachment1);
24681 amit.gupta 743
	}
24533 govind 744
 
24697 amit.gupta 745
	public void sendAgeingReport() throws Exception {
746
		sendAgeingReport("amod.sen@smartdukaan.com", "adeel.yazdani@smartdukaan.com", "kamini.sharma@smartdukaan.com",
747
				"tarun.verma@smartdukaan.com", "chaitnaya.vats@smartdukaan.com", "mohinder.mutreja@smartdukaan.com");
748
	}
749
 
24533 govind 750
	public void moveImeisToPriceDropImeis() throws Exception {
24431 amit.gupta 751
		List<PriceDrop> priceDrops = priceDropRepository.selectAll();
24533 govind 752
		for (PriceDrop priceDrop : priceDrops) {
24431 amit.gupta 753
			priceDropService.priceDropStatus(priceDrop.getId());
754
		}
755
	}
23929 amit.gupta 756
 
24542 amit.gupta 757
	public void walletmismatch() throws Exception {
758
		LocalDate curDate = LocalDate.now();
24553 amit.gupta 759
		List<PartnerDailyInvestment> pdis = partnerDailyInvestmentRepository.selectAll(curDate.minusDays(2));
24552 amit.gupta 760
		System.out.println(pdis.size());
24542 amit.gupta 761
		for (PartnerDailyInvestment pdi : pdis) {
24549 amit.gupta 762
			int fofoId = pdi.getFofoId();
24542 amit.gupta 763
			for (PartnerDailyInvestment investment : Lists
764
					.reverse(partnerDailyInvestmentRepository.selectAll(fofoId, null, null))) {
24552 amit.gupta 765
				float statementAmount = walletService.getOpeningTill(fofoId,
24555 amit.gupta 766
						investment.getDate().plusDays(1).atTime(LocalTime.of(4, 0)));
24552 amit.gupta 767
				CustomRetailer retailer = retailerService.getFofoRetailer(fofoId);
24841 govind 768
				LOGGER.info("{}\t{}\t{}\t{}\t{}", fofoId, retailer.getBusinessName(), retailer.getMobileNumber(),
769
						investment.getDate().toString(), investment.getWalletAmount(), statementAmount);
24551 amit.gupta 770
 
24542 amit.gupta 771
			}
24549 amit.gupta 772
		}
24542 amit.gupta 773
 
774
	}
775
 
776
	public void gst() throws Exception {
24548 amit.gupta 777
		List<FofoOrder> fofoOrders = fofoOrderRepository.selectBetweenSaleDate(LocalDate.of(2019, 1, 26).atStartOfDay(),
778
				LocalDate.of(2019, 1, 27).atTime(LocalTime.MAX));
779
		for (FofoOrder fofoOrder : fofoOrders) {
780
			int retailerAddressId = retailerRegisteredAddressRepository
781
					.selectAddressIdByRetailerId(fofoOrder.getFofoId());
24542 amit.gupta 782
 
783
			Address retailerAddress = addressRepository.selectById(retailerAddressId);
784
			CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
785
			Integer stateId = null;
786
			if (customerAddress.getState().equals(retailerAddress.getState())) {
787
				try {
788
					stateId = Long.valueOf(Utils.getStateInfo(customerAddress.getState()).getId()).intValue();
789
				} catch (Exception e) {
790
					LOGGER.error("Unable to get state rates");
791
				}
792
			}
793
			Map<Integer, GstRate> itemIdStateTaxRateMap = null;
794
			Map<Integer, Float> itemIdIgstTaxRateMap = null;
24548 amit.gupta 795
 
796
			List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
797
			Set<Integer> itemIds = fofoOrderItems.stream().map(x -> x.getItemId()).collect(Collectors.toSet());
24542 amit.gupta 798
			if (stateId != null) {
799
				itemIdStateTaxRateMap = Utils.getStateTaxRate(new ArrayList<>(itemIds), stateId);
800
			} else {
801
				itemIdIgstTaxRateMap = Utils.getIgstTaxRate(new ArrayList<>(itemIds));
802
			}
803
 
24548 amit.gupta 804
			for (FofoOrderItem foi : fofoOrderItems) {
24542 amit.gupta 805
				if (stateId == null) {
806
					foi.setIgstRate(itemIdIgstTaxRateMap.get(foi.getItemId()));
807
				} else {
808
					foi.setCgstRate(itemIdStateTaxRateMap.get(foi.getItemId()).getCgstRate());
809
					foi.setSgstRate(itemIdStateTaxRateMap.get(foi.getItemId()).getSgstRate());
810
				}
811
				fofoOrderItemRepository.persist(foi);
812
			}
813
		}
24548 amit.gupta 814
 
24542 amit.gupta 815
	}
816
 
24580 amit.gupta 817
	public void schemewalletmismatch() {
818
		LocalDate dateToReconcile = LocalDate.of(2018, 4, 1);
24587 amit.gupta 819
		while (dateToReconcile.isBefore(LocalDate.now())) {
24580 amit.gupta 820
			reconcileSchemes(dateToReconcile);
24587 amit.gupta 821
			// reconcileOrders(dateTime);
822
			// reconcileRecharges(dateTime);
24580 amit.gupta 823
			dateToReconcile = dateToReconcile.plusDays(1);
824
		}
825
	}
826
 
827
	private void reconcileSchemes(LocalDate date) {
828
		LocalDateTime startDate = date.atStartOfDay();
829
		LocalDateTime endDate = startDate.plusDays(1);
830
		List<SchemeInOut> siosCreated = schemeInOutRepository.selectAllByCreateDate(startDate, endDate);
831
		List<SchemeInOut> siosRefunded = schemeInOutRepository.selectAllByRefundDate(startDate, endDate);
24587 amit.gupta 832
		double totalSchemeDisbursed = siosCreated.stream().mapToDouble(x -> x.getAmount()).sum();
833
		double totalSchemeRolledback = siosRefunded.stream().mapToDouble(x -> x.getAmount()).sum();
24580 amit.gupta 834
		double netSchemeDisbursed = totalSchemeDisbursed - totalSchemeRolledback;
24587 amit.gupta 835
		List<WalletReferenceType> walletReferenceTypes = Arrays.asList(WalletReferenceType.SCHEME_IN,
836
				WalletReferenceType.SCHEME_OUT);
837
		List<UserWalletHistory> history = userWalletHistoryRepository.selectAllByDateType(startDate, endDate,
838
				walletReferenceTypes);
839
		double schemeAmountWalletTotal = history.stream().mapToDouble(x -> x.getAmount()).sum();
840
		if (Math.abs(netSchemeDisbursed - schemeAmountWalletTotal) > 10d) {
24580 amit.gupta 841
			LOGGER.info("Scheme Amount mismatched for Date {}", date);
24587 amit.gupta 842
 
843
			Map<Integer, Double> inventoryItemSchemeIO = siosCreated.stream().collect(Collectors
844
					.groupingBy(x -> x.getInventoryItemId(), Collectors.summingDouble(SchemeInOut::getAmount)));
845
 
846
			Map<Integer, Double> userSchemeMap = inventoryItemRepository.selectByIds(inventoryItemSchemeIO.keySet())
847
					.stream().collect(Collectors.groupingBy(x -> x.getFofoId(),
848
							Collectors.summingDouble(x -> inventoryItemSchemeIO.get(x.getId()))));
849
 
850
			Map<Integer, Double> inventoryItemSchemeIORefunded = siosRefunded.stream().collect(Collectors
851
					.groupingBy(x -> x.getInventoryItemId(), Collectors.summingDouble(SchemeInOut::getAmount)));
852
 
853
			Map<Integer, Double> userSchemeRefundedMap = inventoryItemRepository
854
					.selectByIds(inventoryItemSchemeIORefunded.keySet()).stream()
855
					.collect(Collectors.groupingBy(x -> x.getFofoId(),
856
							Collectors.summingDouble(x -> inventoryItemSchemeIORefunded.get(x.getId()))));
857
 
858
			Map<Integer, Double> finalUserSchemeAmountMap = new HashMap<>();
859
			for (Map.Entry<Integer, Double> schemeAmount : userSchemeMap.entrySet()) {
860
			}
861
			for (Map.Entry<Integer, Double> schemeAmount : userSchemeRefundedMap.entrySet()) {
862
				if (!finalUserSchemeAmountMap.containsKey(schemeAmount.getKey())) {
863
					finalUserSchemeAmountMap.put(schemeAmount.getKey(), schemeAmount.getValue());
864
				} else {
865
					finalUserSchemeAmountMap.put(schemeAmount.getKey(),
866
							finalUserSchemeAmountMap.get(schemeAmount.getKey()) + schemeAmount.getValue());
867
				}
868
			}
24590 amit.gupta 869
			Map<Integer, Integer> userWalletMap = userWalletRepository
870
					.selectByRetailerIds(finalUserSchemeAmountMap.keySet()).stream()
871
					.collect(Collectors.toMap(UserWallet::getUserId, UserWallet::getId));
872
 
24587 amit.gupta 873
			Map<Integer, Double> walletAmountMap = history.stream().collect(Collectors.groupingBy(
874
					UserWalletHistory::getWalletId, Collectors.summingDouble((UserWalletHistory::getAmount))));
875
			for (Map.Entry<Integer, Double> userAmount : walletAmountMap.entrySet()) {
876
				double diff = Math.abs(finalUserSchemeAmountMap.get(userAmount.getKey()) - userAmount.getValue());
877
				if (diff > 5) {
878
					LOGGER.info("Partner scheme mismatched for Userid {}", userWalletMap.get(userAmount.getKey()));
879
				}
880
			}
24580 amit.gupta 881
		}
24587 amit.gupta 882
 
24580 amit.gupta 883
	}
24590 amit.gupta 884
 
24592 amit.gupta 885
	public void dryRunSchemeReco() throws Exception {
24635 amit.gupta 886
		Map<Integer, Integer> userWalletMap = userWalletRepository.selectAll().stream()
887
				.collect(Collectors.toMap(UserWallet::getUserId, UserWallet::getId));
888
 
24592 amit.gupta 889
		List<UserWalletHistory> userWalletHistory = new ArrayList<>();
890
		List<SchemeInOut> rolledbackSios = new ArrayList<>();
24635 amit.gupta 891
		Map<Integer, SchemeType> schemeTypeMap = schemeRepository.selectAll().stream()
892
				.collect(Collectors.toMap(Scheme::getId, Scheme::getType));
893
		Set<String> serialNumbersConsidered = new HashSet<>();
894
 
25096 amit.gupta 895
		LocalDateTime startDate = LocalDate.of(2018, 3, 1).atStartOfDay();
24635 amit.gupta 896
		LocalDateTime endDate = LocalDate.now().atStartOfDay();
897
		List<Purchase> purchases = purchaseRepository.selectAllBetweenPurchaseDate(startDate, endDate);
898
 
24683 amit.gupta 899
		Map<Integer, String> storeNameMap = fofoStoreRepository.getStoresMap();
24635 amit.gupta 900
		purchases.stream().forEach(purchase -> {
901
			float amountToRollback = 0;
902
			String description = "Adjustment of Duplicate Scheme for Purchase Invoice "
903
					+ purchase.getPurchaseReference();
904
			Map<Integer, String> inventorySerialNumberMap = inventoryItemRepository.selectByPurchaseId(purchase.getId())
905
					.stream().filter(ii -> ii.getSerialNumber() != null)
906
					.collect(Collectors.toMap(InventoryItem::getId, InventoryItem::getSerialNumber));
907
			if (inventorySerialNumberMap.size() > 0) {
908
				for (Map.Entry<Integer, String> inventorySerialNumberEntry : inventorySerialNumberMap.entrySet()) {
909
					String serialNumber = inventorySerialNumberEntry.getValue();
910
					int inventoryItemId = inventorySerialNumberEntry.getKey();
911
					if (serialNumbersConsidered.contains(serialNumber)) {
912
						// This will rollback scheme for differenct orders for same serial
913
						List<SchemeInOut> sios = schemeInOutRepository
914
								.selectByInventoryItemIds(new HashSet<>(Arrays.asList(inventoryItemId))).stream()
915
								.filter(x -> x.getRolledBackTimestamp() == null
916
										&& schemeTypeMap.get(x.getSchemeId()).equals(SchemeType.IN))
917
								.collect(Collectors.toList());
918
						Collections.reverse(sios);
919
						for (SchemeInOut sio : sios) {
920
							sio.setRolledBackTimestamp(LocalDateTime.now());
921
							amountToRollback += sio.getAmount();
922
							// sio.setSchemeType(SchemeType.OUT);
923
							sio.setSerialNumber(serialNumber);
924
							rolledbackSios.add(sio);
925
						}
926
						description = description.concat(" " + serialNumber + " ");
927
					} else {
928
						serialNumbersConsidered.add(serialNumber);
929
						List<Integer> schemesConsidered = new ArrayList<>();
930
						List<SchemeInOut> sios = schemeInOutRepository
931
								.selectByInventoryItemIds(new HashSet<>(Arrays.asList(inventoryItemId))).stream()
932
								.filter(x -> x.getRolledBackTimestamp() == null
933
										&& schemeTypeMap.get(x.getSchemeId()).equals(SchemeType.IN))
934
								.collect(Collectors.toList());
935
						Collections.reverse(sios);
936
						for (SchemeInOut sio : sios) {
937
							if (!schemesConsidered.contains(sio.getSchemeId())) {
938
								schemesConsidered.add(sio.getSchemeId());
939
								continue;
940
							}
941
							sio.setRolledBackTimestamp(LocalDateTime.now());
942
							amountToRollback += sio.getAmount();
943
							// sio.setSchemeType(SchemeType.OUT);
944
							sio.setSerialNumber(serialNumber);
24681 amit.gupta 945
							sio.setStoreCode(storeNameMap.get(purchase.getFofoId()));
946
							sio.setReference(purchase.getId());
24635 amit.gupta 947
							rolledbackSios.add(sio);
948
						}
949
					}
950
 
951
				}
952
			}
953
			if (amountToRollback > 0) {
24683 amit.gupta 954
				// Address address =
955
				// addressRepository.selectAllByRetailerId(purchase.getFofoId(), 0, 10).get(0);
24635 amit.gupta 956
				UserWalletHistory uwh = new UserWalletHistory();
957
				uwh.setAmount(Math.round(amountToRollback));
958
				uwh.setDescription(description);
959
				uwh.setTimestamp(LocalDateTime.now());
24681 amit.gupta 960
				uwh.setReferenceType(WalletReferenceType.SCHEME_IN);
24635 amit.gupta 961
				uwh.setReference(purchase.getId());
962
				uwh.setWalletId(userWalletMap.get(purchase.getFofoId()));
963
				uwh.setFofoId(purchase.getFofoId());
24681 amit.gupta 964
				uwh.setStoreCode(storeNameMap.get(purchase.getFofoId()));
24635 amit.gupta 965
				userWalletHistory.add(uwh);
966
			}
967
		});
968
		ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
969
				Arrays.asList("User Id", "Store Code", "Reference Type", "Reference", "Amount", "Description",
970
						"Timestamp"),
971
				userWalletHistory.stream()
972
						.map(x -> Arrays.asList(x.getWalletId(), x.getStoreCode(), x.getReferenceType(),
973
								x.getReference(), x.getAmount(), x.getDescription(), x.getTimestamp()))
974
						.collect(Collectors.toList()));
975
 
976
		ByteArrayOutputStream baosOuts = FileUtil.getCSVByteStream(
24683 amit.gupta 977
				Arrays.asList("Scheme ID", "SchemeType", "Reference", "Store Code", "Serial Number", "Amount",
978
						"Created", "Rolledback"),
24635 amit.gupta 979
				rolledbackSios.stream()
24681 amit.gupta 980
						.map(x -> Arrays.asList(x.getSchemeId(), x.getSchemeType(), x.getReference(), x.getStoreCode(),
24635 amit.gupta 981
								x.getSerialNumber(), x.getAmount(), x.getCreateTimestamp(), x.getRolledBackTimestamp()))
982
						.collect(Collectors.toList()));
983
 
25043 amit.gupta 984
		Utils.sendMailWithAttachments(googleMailSender, new String[] { "amit.gupta@shop2020.in" }, null,
24636 amit.gupta 985
				"Partner Excess Amount Scheme In", "PFA",
24635 amit.gupta 986
				new Attachment[] { new Attachment("WalletSummary.csv", new ByteArrayResource(baos.toByteArray())),
24636 amit.gupta 987
						new Attachment("SchemeInRolledback.csv", new ByteArrayResource(baosOuts.toByteArray())) });
24635 amit.gupta 988
 
25096 amit.gupta 989
		throw new Exception();
24635 amit.gupta 990
 
991
	}
992
 
993
	public void dryRunOutSchemeReco() throws Exception {
994
		List<UserWalletHistory> userWalletHistory = new ArrayList<>();
995
		List<SchemeInOut> rolledbackSios = new ArrayList<>();
24606 amit.gupta 996
		Map<Integer, Integer> userWalletMap = userWalletRepository.selectAll().stream()
997
				.collect(Collectors.toMap(UserWallet::getUserId, UserWallet::getId));
24590 amit.gupta 998
		Map<Integer, SchemeType> schemeTypeMap = schemeRepository.selectAll().stream()
999
				.collect(Collectors.toMap(Scheme::getId, Scheme::getType));
25028 amit.gupta 1000
		LocalDateTime startDate = LocalDate.of(2019, 5, 1).atStartOfDay();
24632 amit.gupta 1001
		LocalDateTime endDate = LocalDate.now().atStartOfDay();
24631 amit.gupta 1002
		List<FofoOrder> allOrders = fofoOrderRepository.selectBetweenSaleDate(startDate, endDate);
1003
		// Collections.reverse(allOrders);
1004
		// List<FofoOrder> allOrders =
24653 govind 1005
		// List<FofoOrder> allOrders =
24631 amit.gupta 1006
		// Arrays.asList(fofoOrderRepository.selectByInvoiceNumber("UPGZ019/25"));
24625 amit.gupta 1007
		Set<String> serialNumbersConsidered = new HashSet<>();
24590 amit.gupta 1008
		allOrders.stream().forEach(fofoOrder -> {
24592 amit.gupta 1009
			String description = "Adjustment of Duplicate Scheme for Sale Invoice " + fofoOrder.getInvoiceNumber();
24598 amit.gupta 1010
			Map<Integer, String> inventorySerialNumberMap = new HashMap<>();
24592 amit.gupta 1011
			float amountToRollback = 0;
24590 amit.gupta 1012
			List<FofoOrderItem> orderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
1013
			orderItems.forEach(x -> {
24606 amit.gupta 1014
				inventorySerialNumberMap.putAll(x.getFofoLineItems().stream().filter(li -> li.getSerialNumber() != null)
24598 amit.gupta 1015
						.collect(Collectors.toMap(FofoLineItem::getInventoryItemId, FofoLineItem::getSerialNumber)));
24590 amit.gupta 1016
			});
24606 amit.gupta 1017
			if (inventorySerialNumberMap.size() > 0) {
24631 amit.gupta 1018
				for (Map.Entry<Integer, String> inventorySerialNumberEntry : inventorySerialNumberMap.entrySet()) {
1019
					String serialNumber = inventorySerialNumberEntry.getValue();
1020
					int inventoryItemId = inventorySerialNumberEntry.getKey();
1021
					if (serialNumbersConsidered.contains(serialNumber)) {
1022
						// This will rollback scheme for differenct orders for same serial
1023
						List<SchemeInOut> sios = schemeInOutRepository
24633 amit.gupta 1024
								.selectByInventoryItemIds(new HashSet<>(Arrays.asList(inventoryItemId))).stream()
24635 amit.gupta 1025
								.filter(x -> x.getRolledBackTimestamp() == null
1026
										&& schemeTypeMap.get(x.getSchemeId()).equals(SchemeType.OUT))
24631 amit.gupta 1027
								.collect(Collectors.toList());
1028
						Collections.reverse(sios);
1029
						for (SchemeInOut sio : sios) {
1030
							sio.setRolledBackTimestamp(LocalDateTime.now());
1031
							amountToRollback += sio.getAmount();
1032
							// sio.setSchemeType(SchemeType.OUT);
1033
							sio.setSerialNumber(serialNumber);
1034
							sio.setStoreCode(fofoOrder.getInvoiceNumber().split("/")[0]);
24681 amit.gupta 1035
							sio.setReference(fofoOrder.getId());
24631 amit.gupta 1036
							rolledbackSios.add(sio);
24623 amit.gupta 1037
						}
24635 amit.gupta 1038
						description = description.concat(" " + serialNumber + " ");
24631 amit.gupta 1039
					} else {
1040
						serialNumbersConsidered.add(serialNumber);
1041
						List<Integer> schemesConsidered = new ArrayList<>();
1042
						List<SchemeInOut> sios = schemeInOutRepository
24633 amit.gupta 1043
								.selectByInventoryItemIds(new HashSet<>(Arrays.asList(inventoryItemId))).stream()
24635 amit.gupta 1044
								.filter(x -> x.getRolledBackTimestamp() == null
1045
										&& schemeTypeMap.get(x.getSchemeId()).equals(SchemeType.OUT))
24631 amit.gupta 1046
								.collect(Collectors.toList());
1047
						Collections.reverse(sios);
1048
						for (SchemeInOut sio : sios) {
1049
							if (!schemesConsidered.contains(sio.getSchemeId())) {
1050
								schemesConsidered.add(sio.getSchemeId());
1051
								continue;
1052
							}
1053
							sio.setRolledBackTimestamp(LocalDateTime.now());
1054
							amountToRollback += sio.getAmount();
1055
							// sio.setSchemeType(SchemeType.OUT);
24681 amit.gupta 1056
							sio.setReference(fofoOrder.getId());
24631 amit.gupta 1057
							sio.setSerialNumber(serialNumber);
1058
							sio.setStoreCode(fofoOrder.getInvoiceNumber().split("/")[0]);
1059
							rolledbackSios.add(sio);
1060
						}
24615 amit.gupta 1061
					}
24631 amit.gupta 1062
 
24604 amit.gupta 1063
				}
24590 amit.gupta 1064
			}
24631 amit.gupta 1065
			if (amountToRollback > 0) {
1066
				UserWalletHistory uwh = new UserWalletHistory();
1067
				uwh.setAmount(Math.round(amountToRollback));
1068
				uwh.setDescription(description);
1069
				uwh.setTimestamp(LocalDateTime.now());
1070
				uwh.setReferenceType(WalletReferenceType.SCHEME_OUT);
1071
				uwh.setReference(fofoOrder.getId());
1072
				uwh.setWalletId(userWalletMap.get(fofoOrder.getFofoId()));
1073
				uwh.setFofoId(fofoOrder.getFofoId());
1074
				uwh.setStoreCode(fofoOrder.getInvoiceNumber().split("/")[0]);
1075
				userWalletHistory.add(uwh);
1076
			}
24590 amit.gupta 1077
		});
24598 amit.gupta 1078
 
24592 amit.gupta 1079
		ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
24681 amit.gupta 1080
				Arrays.asList("Wallet Id", "Store Code", "Reference Type", "Reference", "Amount", "Description",
24615 amit.gupta 1081
						"Timestamp"),
1082
				userWalletHistory.stream()
1083
						.map(x -> Arrays.asList(x.getWalletId(), x.getStoreCode(), x.getReferenceType(),
1084
								x.getReference(), x.getAmount(), x.getDescription(), x.getTimestamp()))
24592 amit.gupta 1085
						.collect(Collectors.toList()));
1086
 
1087
		ByteArrayOutputStream baosOuts = FileUtil.getCSVByteStream(
1088
				Arrays.asList("Scheme ID", "SchemeType", "Store Code", "Serial Number", "Amount", "Created",
1089
						"Rolledback"),
1090
				rolledbackSios.stream()
1091
						.map(x -> Arrays.asList(x.getSchemeId(), x.getSchemeType(), x.getStoreCode(),
1092
								x.getSerialNumber(), x.getAmount(), x.getCreateTimestamp(), x.getRolledBackTimestamp()))
1093
						.collect(Collectors.toList()));
1094
 
25043 amit.gupta 1095
		Utils.sendMailWithAttachments(googleMailSender, new String[] { "amit.gupta@shop2020.in" }, null,
24681 amit.gupta 1096
				"Partner Excess Amount Scheme Out", "PFA",
24598 amit.gupta 1097
				new Attachment[] { new Attachment("WalletSummary.csv", new ByteArrayResource(baos.toByteArray())),
1098
						new Attachment("SchemeOutRolledback.csv", new ByteArrayResource(baosOuts.toByteArray())) });
24631 amit.gupta 1099
 
25267 amit.gupta 1100
		throw new Exception();
24590 amit.gupta 1101
	}
24615 amit.gupta 1102
 
24611 amit.gupta 1103
	public void dryRunSchemeOutReco1() throws Exception {
24615 amit.gupta 1104
		List<Integer> references = Arrays.asList(6744, 7347, 8320, 8891, 9124, 9217, 9263, 9379);
24611 amit.gupta 1105
		List<UserWalletHistory> userWalletHistory = new ArrayList<>();
1106
		List<SchemeInOut> rolledbackSios = new ArrayList<>();
1107
		Map<Integer, Integer> userWalletMap = userWalletRepository.selectAll().stream()
1108
				.collect(Collectors.toMap(UserWallet::getUserId, UserWallet::getId));
1109
		Map<Integer, SchemeType> schemeTypeMap = schemeRepository.selectAll().stream()
1110
				.collect(Collectors.toMap(Scheme::getId, Scheme::getType));
1111
		references.stream().forEach(reference -> {
1112
			FofoOrder fofoOrder = null;
1113
			try {
1114
				fofoOrder = fofoOrderRepository.selectByOrderId(reference);
24615 amit.gupta 1115
			} catch (Exception e) {
1116
 
24611 amit.gupta 1117
			}
1118
			String description = "Adjustment of Duplicate Scheme for Sale Invoice " + fofoOrder.getInvoiceNumber();
1119
			Map<Integer, String> inventorySerialNumberMap = new HashMap<>();
1120
			float amountToRollback = 0;
1121
			List<FofoOrderItem> orderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
1122
			orderItems.forEach(x -> {
1123
				inventorySerialNumberMap.putAll(x.getFofoLineItems().stream().filter(li -> li.getSerialNumber() != null)
1124
						.collect(Collectors.toMap(FofoLineItem::getInventoryItemId, FofoLineItem::getSerialNumber)));
1125
			});
1126
			if (inventorySerialNumberMap.size() > 0) {
24615 amit.gupta 1127
				List<SchemeInOut> sios = schemeInOutRepository
1128
						.selectByInventoryItemIds(inventorySerialNumberMap.keySet()).stream()
1129
						.filter(x -> schemeTypeMap.get(x.getSchemeId()).equals(SchemeType.OUT))
24611 amit.gupta 1130
						.collect(Collectors.toList());
1131
				LOGGER.info("Found {} duplicate schemeouts for Orderid {}", sios.size(), fofoOrder.getId());
1132
				UserWalletHistory uwh = new UserWalletHistory();
24615 amit.gupta 1133
				Map<Integer, List<SchemeInOut>> inventoryIdSouts = sios.stream()
1134
						.collect(Collectors.groupingBy(SchemeInOut::getInventoryItemId, Collectors.toList()));
24611 amit.gupta 1135
				for (Map.Entry<Integer, List<SchemeInOut>> inventorySioEntry : inventoryIdSouts.entrySet()) {
1136
					List<SchemeInOut> outList = inventorySioEntry.getValue();
24615 amit.gupta 1137
					if (outList.size() > 1) {
1138
 
24611 amit.gupta 1139
					}
1140
				}
1141
				uwh.setAmount(Math.round(amountToRollback));
1142
				uwh.setDescription(description);
1143
				uwh.setTimestamp(LocalDateTime.now());
1144
				uwh.setReferenceType(WalletReferenceType.SCHEME_OUT);
1145
				uwh.setReference(fofoOrder.getId());
1146
				uwh.setWalletId(userWalletMap.get(fofoOrder.getFofoId()));
1147
				uwh.setFofoId(fofoOrder.getFofoId());
1148
				uwh.setStoreCode(fofoOrder.getInvoiceNumber().split("/")[0]);
1149
				userWalletHistory.add(uwh);
1150
			}
1151
		});
24615 amit.gupta 1152
 
24611 amit.gupta 1153
		ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1154
				Arrays.asList("User Id", "Reference Type", "Reference", "Amount", "Description", "Timestamp"),
1155
				userWalletHistory.stream().map(x -> Arrays.asList(x.getWalletId(), x.getReferenceType(),
1156
						x.getReference(), x.getAmount(), x.getDescription(), x.getTimestamp()))
24615 amit.gupta 1157
						.collect(Collectors.toList()));
1158
 
24611 amit.gupta 1159
		ByteArrayOutputStream baosOuts = FileUtil.getCSVByteStream(
1160
				Arrays.asList("Scheme ID", "SchemeType", "Store Code", "Serial Number", "Amount", "Created",
1161
						"Rolledback"),
1162
				rolledbackSios.stream()
24615 amit.gupta 1163
						.map(x -> Arrays.asList(x.getSchemeId(), x.getSchemeType(), x.getStoreCode(),
1164
								x.getSerialNumber(), x.getAmount(), x.getCreateTimestamp(), x.getRolledBackTimestamp()))
1165
						.collect(Collectors.toList()));
1166
 
24623 amit.gupta 1167
		Utils.sendMailWithAttachments(googleMailSender,
1168
				new String[] { "amit.gupta@shop2020.in", "neeraj.gupta@smartdukaan.com" }, null,
24611 amit.gupta 1169
				"Partner Excess Amount", "PFA",
1170
				new Attachment[] { new Attachment("WalletSummary.csv", new ByteArrayResource(baos.toByteArray())),
1171
						new Attachment("SchemeOutRolledback.csv", new ByteArrayResource(baosOuts.toByteArray())) });
24631 amit.gupta 1172
 
24628 amit.gupta 1173
		throw new Exception();
24615 amit.gupta 1174
 
24611 amit.gupta 1175
	}
24615 amit.gupta 1176
 
24855 amit.gupta 1177
	public void sendDailySalesReportNotificationToPartner(Integer fofoIdInt)
24653 govind 1178
			throws ProfitMandiBusinessException, MessagingException, IOException {
1179
		LocalDateTime now = LocalDateTime.now();
1180
		LocalDateTime from = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), 00, 00);
1181
		Map<Integer, Double> salesByFofoIdMap = new HashMap<>();
24855 amit.gupta 1182
		List<Integer> fofoIds = null;
25043 amit.gupta 1183
		if (fofoIdInt == null) {
1184
			fofoIds = fofoStoreRepository.selectAll().stream().filter(x -> x.isActive()).map(x -> x.getId())
1185
					.collect(Collectors.toList());
24856 amit.gupta 1186
		} else {
24855 amit.gupta 1187
			fofoIds = Arrays.asList(fofoIdInt);
1188
		}
24653 govind 1189
		List<PartnerTargetDetails> partnerTargetDetails = partnerTargetRepository
1190
				.selectAllGeEqAndLeEqStartDateAndEndDate(now);
24683 amit.gupta 1191
		DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("h a");
1192
 
1193
		Map<Integer, Float> dailyTarget = new HashMap<>();
24653 govind 1194
		for (Integer fofoId : fofoIds) {
24683 amit.gupta 1195
			Map<Integer, Float> dailyAverageSale = null;
24653 govind 1196
			double sale = fofoOrderRepository.selectTotalSaleSumByFofoIdBrtweenDate(fofoId, from, now);
1197
			for (PartnerTargetDetails partnerTargetDetail : partnerTargetDetails) {
1198
				Map<Integer, Float> targetValues = targetService.getTargetValueByFofoIdAndTargetId(fofoId,
1199
						partnerTargetDetail.getId());
1200
				if (targetValues.size() == 0) {
1201
					continue;
1202
				} else {
1203
					List<Integer> partnerIds = new ArrayList<>();
1204
					partnerIds.add(fofoId);
1205
					dailyAverageSale = targetService.getDailyAverageSaleForCurrentForSingleFofoIdAndBrand(partnerIds,
1206
							targetValues, partnerTargetDetail.getStartDate(), partnerTargetDetail.getEndDate(),
1207
							partnerTargetDetail.getBrandName());
1208
					dailyTarget.put(fofoId, dailyAverageSale.get(fofoId));
1209
					break;
1210
				}
1211
			}
1212
			NotificationCampaigns notification = new NotificationCampaigns();
24847 amit.gupta 1213
			notification.setName("Daily Sales");
1214
			notification.setTitle("Daily Sale Update");
24683 amit.gupta 1215
			if (dailyAverageSale != null && dailyAverageSale.get(fofoId) != null) {
24864 amit.gupta 1216
				notification.setMessage(String.format("Rs.%.0f till %s. Today's Target is Rs.%.0f", sale,
24847 amit.gupta 1217
						now.format(timeFormatter), dailyAverageSale.get(fofoId)));
24683 amit.gupta 1218
			} else {
25043 amit.gupta 1219
				notification.setMessage(String.format("Rs.%.0f till %s", sale, now.format(timeFormatter)));
24653 govind 1220
			}
24683 amit.gupta 1221
			// notification.setMessage("Your sale is "+salesbyfofoId.get(fofoId));
24989 tejbeer 1222
			notification.setType("url");
24863 govind 1223
			notification.setUrl("http://app.profitmandi.com/pages/home/notifications");
24683 amit.gupta 1224
			LOGGER.info("UserID" + userAccountRepository.selectUserIdByRetailerId(fofoId));
1225
			notification.setSql("SELECT distinct d1.user_id from devices d1 left join devices d2 on"
1226
					+ "(d1.imeinumber = d2.imeinumber and d1.created < d2.created) "
1227
					+ " where d2.id is null and d1.user_id = "
1228
					+ userAccountRepository.selectUserIdByRetailerId(fofoId));
24676 govind 1229
			LOGGER.info("SELECT distinct d1.user_id from devices d1 left join devices d2 on"
24683 amit.gupta 1230
					+ "(d1.imeinumber = d2.imeinumber and d1.created < d2.created) "
1231
					+ " where d2.id is null and d1.user_id = "
1232
					+ userAccountRepository.selectUserIdByRetailerId(fofoId));
24667 govind 1233
			notification.setExpiresat(LocalDateTime.now().plusDays(1).toEpochSecond(ZoneOffset.UTC) * 1000);
24653 govind 1234
			notification.setStatus("active");
1235
			notification.setSmsprocessed(0);
1236
			notification.setNotification_processed(0);
1237
			notification.setNotification_type("GENERAL_NOTIFICATION");
24657 govind 1238
			mongoClient.persistNotificationCmpInfo(notification);
24653 govind 1239
			salesByFofoIdMap.put(fofoId, sale);
1240
			LOGGER.info(sale);
1241
		}
24683 amit.gupta 1242
		String saleReport = this.getDailySalesReportByPartnerId(salesByFofoIdMap, dailyTarget);
24653 govind 1243
		LOGGER.info(saleReport);
1244
		String cc[] = { "Tarun.verma@smartdukaan.com", "Kamini.sharma@smartdukaan.com",
24697 amit.gupta 1245
				"chaitnaya.vats@smartdukaan.com", "adeel.yazdani@smartdukaan.com", "mohinder.mutreja@smartdukaan.com" };
24653 govind 1246
		String subject = "sale report till" + " " + now.format(timeFormatter);
24677 govind 1247
		this.sendMailOfHtmlFomat("amod.sen@smartdukaan.com", saleReport, cc, subject);
24653 govind 1248
	}
1249
 
24683 amit.gupta 1250
	public String getDailySalesReportByPartnerId(Map<Integer, Double> salesByFofoIdMap, Map<Integer, Float> dailyTarget)
24653 govind 1251
			throws ProfitMandiBusinessException {
1252
		StringBuilder sb = new StringBuilder();
1253
		sb.append("<html><body><p>Sale Report:</p><br/><table style='border:1px solid black ;padding: 5px';>");
1254
		sb.append("<tbody>\n" + "	    				<tr>\n"
1255
				+ "	    					<th style='border:1px solid black;padding: 5px'>Partner</th>\n"
1256
				+ "	    					<th style='border:1px solid black;padding: 5px'>Daily Target</th>\n"
1257
				+ "	    					<th style='border:1px solid black;padding: 5px'>Sale</th>\n"
1258
				+ "	    				</tr>");
1259
		for (Integer fofoId : salesByFofoIdMap.keySet()) {
25043 amit.gupta 1260
			try {
1261
				String PartnerName = retailerService.getFofoRetailer(fofoId).getBusinessName();
1262
				sb.append("<tr>");
1263
				sb.append("<td style='border:1px solid black;padding: 5px'>" + PartnerName + "</td>");
1264
				if (dailyTarget != null && dailyTarget.get(fofoId) != null) {
1265
					sb.append("<td style='border:1px solid black;padding: 5px'>" + dailyTarget.get(fofoId) + "</td>");
1266
				} else {
1267
					sb.append("<td style='border:1px solid black;padding: 5px'>" + 0.0 + "</td>");
1268
				}
1269
				sb.append("<td style='border:1px solid black;padding: 5px'>" + salesByFofoIdMap.get(fofoId) + "</td>");
24653 govind 1270
 
25043 amit.gupta 1271
				sb.append("</tr>");
1272
			} catch (Exception e) {
24842 govind 1273
				e.printStackTrace();
1274
			}
25043 amit.gupta 1275
 
24653 govind 1276
		}
24683 amit.gupta 1277
 
24653 govind 1278
		sb.append("</tbody></table></body></html>");
1279
		return sb.toString();
1280
	}
24841 govind 1281
 
1282
	private void sendMailOfHtmlFomat(String email, String body, String cc[], String subject)
1283
			throws MessagingException, ProfitMandiBusinessException, IOException {
1284
		MimeMessage message = mailSender.createMimeMessage();
1285
		MimeMessageHelper helper = new MimeMessageHelper(message);
1286
		helper.setSubject(subject);
1287
		helper.setText(body, true);
1288
		helper.setTo(email);
1289
		if (cc != null) {
1290
			helper.setCc(cc);
1291
		}
1292
		InternetAddress senderAddress = new InternetAddress("noreply@smartdukaan.com", "Smart Dukaan");
1293
		helper.setFrom(senderAddress);
1294
		mailSender.send(message);
1295
	}
25300 tejbeer 1296
 
1297
	public void sendNotification() throws IOException {
1298
		List<PushNotifications> pushNotifications = pushNotificationRepository.selectAllByTimestamp();
1299
		if (!pushNotifications.isEmpty()) {
1300
			for (PushNotifications pushNotification : pushNotifications) {
1301
				Device devices = deviceRepository.selectById(pushNotification.getDeviceId());
1302
				NotificationCampaign notificationCampaign = notificationCampaignRepository
1303
						.selectById(pushNotification.getNotificationCampaignid());
1304
				Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls()
1305
						.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeJsonConverter()).create();
1306
 
1307
				SimpleCampaignParams scp = gson.fromJson(notificationCampaign.getImplementationParams(),
1308
						SimpleCampaignParams.class);
1309
				Campaign campaign = new SimpleCampaign(scp);
1310
				String result_url = campaign.getUrl() + "&user_id=" + devices.getUser_id();
1311
				JSONObject json = new JSONObject();
1312
				json.put("to", devices.getFcmId());
1313
				JSONObject jsonObj = new JSONObject();
1314
				jsonObj.put("message", campaign.getMessage());
1315
				jsonObj.put("title", campaign.getTitle());
1316
				jsonObj.put("type", campaign.getType());
1317
				jsonObj.put("url", result_url);
1318
				jsonObj.put("time_to_live", campaign.getExpireTimestamp());
1319
				jsonObj.put("image", campaign.getImageUrl());
1320
				jsonObj.put("largeIcon", "large_icon");
1321
				jsonObj.put("smallIcon", "small_icon");
1322
				jsonObj.put("vibrate", 1);
1323
				jsonObj.put("pid", pushNotification.getId());
1324
				jsonObj.put("sound", 1);
1325
				jsonObj.put("priority", "high");
1326
				json.put("data", jsonObj);
1327
 
1328
				CloseableHttpClient client = HttpClients.createDefault();
1329
				HttpPost httpPost = new HttpPost(FCM_URL);
1330
 
1331
				httpPost.setHeader("Content-Type", "application/json; utf-8");
1332
				httpPost.setHeader("authorization", "key=" + FCM_API_KEY);
1333
				StringEntity entity = new StringEntity(json.toString());
1334
				httpPost.setEntity(entity);
1335
				CloseableHttpResponse response = client.execute(httpPost);
1336
				LOGGER.info("response" + response);
1337
 
1338
				if (response.getStatusLine().getStatusCode() == 200) {
1339
 
1340
					pushNotification.setSentTimestamp(LocalDateTime.now());
1341
				}
1342
 
1343
				else {
1344
 
1345
					LOGGER.info("message" + "not sent");
1346
				}
1347
 
1348
			}
1349
		}
1350
	}
1351
 
25312 amit.gupta 1352
	public static final Map<String, String> nameEmail = new HashMap<>();
1353
 
1354
	public static final Map<String, List<String>> storeManagerMap = new HashMap<>();
1355
 
1356
	static {
1357
		nameEmail.put("Amod", "amod.sen@smartdukaan.com");
1358
		nameEmail.put("Pramod", "pk957415@gmail.com");
1359
		nameEmail.put("Anis", "md.anis@smartdukaan.com");
1360
		nameEmail.put("Manoj", "mspatwal545@gmail.com");
1361
		nameEmail.put("Adeel", "adeel.yazdani@smartdukaan.com");
1362
		nameEmail.put("Mohinder", "mohinder.mutreja@smartdukaan.coms");
1363
		nameEmail.put("Dharmendar", "dharmender.verma@smartdukaan.com");
1364
		nameEmail.put("Rajat", "rajat.gupta@smartdukaan.com");
1365
		nameEmail.put("Ankit", "ankit.bhatia@smartdukaan.com");
1366
		nameEmail.put("Rajit", "rajit.alag@smartdukaan.com");
1367
		nameEmail.put("Gulshan", "gul9711251125@gmail.com");
1368
		nameEmail.put("PramodSharma", "prmdretail@gmail.com");
1369
		// nameEmail.put("Gulshan","");
1370
		storeManagerMap.put("themobileplanet03@gmail.com", Arrays.asList("Amod", "", "Adeel"));
1371
		storeManagerMap.put("mobileplanet7599@gmail.com", Arrays.asList("Pramod", "Dharmendar", "Mohinder"));
1372
		storeManagerMap.put("robintelecom.snp@gmail.com", Arrays.asList("Pramod", "Dharmendar", "Mohinder"));
1373
		storeManagerMap.put("smartconnect4141@gmail.com", Arrays.asList("Amod", "", "Adeel"));
1374
		storeManagerMap.put("bhimsain919@gmail.com", Arrays.asList("Pramod", "Dharmendar", "Mohinder"));
1375
		storeManagerMap.put("babitaranirk@gmail.com", Arrays.asList("Pramod", "", "Mohinder"));
1376
		storeManagerMap.put("dharmendery079@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1377
		storeManagerMap.put("kkv.enterprises1@gmail.com", Arrays.asList("Pramod", "", "Mohinder"));
1378
		storeManagerMap.put("gulshersaifi74226@gmail.com", Arrays.asList("Amod", "", "Adeel"));
1379
		storeManagerMap.put("deepak.lalwani1985@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1380
		storeManagerMap.put("gupta.smartdukaan@gmail.com", Arrays.asList("Amod", "", "Adeel"));
1381
		storeManagerMap.put("sachinindri2006@gmail.com", Arrays.asList("Pramod", "Dharmendar", "Mohinder"));
1382
		storeManagerMap.put("kambojanil83@gmail.com", Arrays.asList("Pramod", "", "Mohinder"));
1383
		storeManagerMap.put("uppal.neeraj82@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1384
		storeManagerMap.put("thefonehousekarnal@gmail.com", Arrays.asList("Pramod", "Dharmendar", "Mohinder"));
1385
		storeManagerMap.put("richa9910763006@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1386
		storeManagerMap.put("smartdukangzb@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1387
		storeManagerMap.put("lovelymobile183@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1388
		storeManagerMap.put("smartdukaan.sonepat@gmail.com", Arrays.asList("Pramod", "Dharmendar", "Mohinder"));
1389
		storeManagerMap.put("arunmittal299@gmail.com", Arrays.asList("Pramod", "Dharmendar", "Mohinder"));
1390
		storeManagerMap.put("gtc01100@gmail.com", Arrays.asList("Pramod", "Dharmendar", "Mohinder"));
1391
		storeManagerMap.put("sumittyagi1975@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1392
		storeManagerMap.put("metrofurniture342@gmail.com", Arrays.asList("Pramod", "Dharmendar", "Mohinder"));
1393
		storeManagerMap.put("suryaelectronicskaithal@gmail.com", Arrays.asList("Pramod", "", "Mohinder"));
1394
		storeManagerMap.put("mmtelecomsec16@gmail.com", Arrays.asList("Amod", "", "Adeel"));
1395
		storeManagerMap.put("omsonsindia08@gmail.com", Arrays.asList("Pramod", "Dharmendar", "Mohinder"));
1396
		storeManagerMap.put("smartenterprisespv@gmail.com", Arrays.asList("Amod", "", "Adeel"));
1397
		storeManagerMap.put("cachaitnya@gmail.com", Arrays.asList("Amod", "", "Adeel"));
1398
		storeManagerMap.put("ajaykumarkansal03@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1399
		storeManagerMap.put("spurwar73@gmail.com", Arrays.asList("Anis", "Rajat", "Adeel"));
1400
		storeManagerMap.put("Shreemobile.ind@gmail.com", Arrays.asList("Anis", "Rajat", "Adeel"));
1401
		storeManagerMap.put("felixenterprises2017@rediffmail.com", Arrays.asList("", "Dharmendar", "Mohinder"));
1402
		storeManagerMap.put("nareandergupta@gmail.com", Arrays.asList("", "Dharmendar", "Mohinder"));
1403
		storeManagerMap.put("shreebalajielectronic2019@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1404
		storeManagerMap.put("saranshary@gmail.com", Arrays.asList("", "Dharmendar", "Mohinder"));
1405
		storeManagerMap.put("gambhirsmartphone@gmail.com", Arrays.asList("", "Gulshan", "Adeel"));
1406
		storeManagerMap.put("Priyankaenterprises9910@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1407
		storeManagerMap.put("pawan.dhimaan@gmail.com", Arrays.asList("", "Dharmendar", "Mohinder"));
1408
		storeManagerMap.put("lakshaydhulla62@gmail.com", Arrays.asList("Pramod", "Dharmendar", "Mohinder"));
1409
		storeManagerMap.put("parastelecom.stp@gmail.com", Arrays.asList("Anis", "Rajat", "Adeel"));
1410
		storeManagerMap.put("talwarmukesh298@gmail.com", Arrays.asList("Pramod", "Dharmendar", "Mohinder"));
1411
		storeManagerMap.put("sahilnarang0009@gmail.com", Arrays.asList("Pramod", "", "Mohinder"));
1412
		storeManagerMap.put("supertelecomjind@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1413
		storeManagerMap.put("saketnagpal@gmail.com", Arrays.asList("", "Rajit", "Mohinder"));
1414
		storeManagerMap.put("DEEPAKGOYAL702.DG@GMAIL.COM", Arrays.asList("", "Ankit", "Mohinder"));
1415
		storeManagerMap.put("sambhav350@gmail.com", Arrays.asList("Pramod", "Dharmendar", "Mohinder"));
1416
		storeManagerMap.put("mayankarora98133@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1417
		storeManagerMap.put("vijaymobilityandmoew@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1418
		storeManagerMap.put("amitv70003@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1419
		storeManagerMap.put("newagelucknow.123@gmail.com", Arrays.asList("Anis", "Rajat", "Adeel"));
1420
		storeManagerMap.put("Newagetechnologygomtinagar@gmail.com", Arrays.asList("Anis", "Rajat", "Adeel"));
1421
		storeManagerMap.put("rohitbatra106@gmail.com", Arrays.asList("Pramod", "Dharmendar", "Mohinder"));
1422
		storeManagerMap.put("sonisunil9050873061@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1423
		storeManagerMap.put("moderncohsr@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1424
		storeManagerMap.put("raghubir.ngh@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1425
		storeManagerMap.put("aman007singla@gmail.com", Arrays.asList("", "Rajit", "Mohinder"));
1426
	}
24587 amit.gupta 1427
}