Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
23755 amit.gupta 1
package com.smartdukaan.cron.migrations;
2
 
24819 amit.gupta 3
import java.io.Serializable;
23824 amit.gupta 4
import java.time.LocalDate;
23755 amit.gupta 5
import java.time.LocalDateTime;
23824 amit.gupta 6
import java.time.LocalTime;
24819 amit.gupta 7
import java.util.ArrayList;
23755 amit.gupta 8
import java.util.Arrays;
23827 amit.gupta 9
import java.util.Collections;
24002 amit.gupta 10
import java.util.HashMap;
24005 amit.gupta 11
import java.util.HashSet;
23755 amit.gupta 12
import java.util.List;
24002 amit.gupta 13
import java.util.Map;
25749 amit.gupta 14
import java.util.Set;
15
import java.util.concurrent.TimeUnit;
24641 amit.gupta 16
import java.util.stream.Collectors;
23755 amit.gupta 17
 
24819 amit.gupta 18
import org.apache.commons.io.output.ByteArrayOutputStream;
23755 amit.gupta 19
import org.apache.commons.lang.StringUtils;
20
import org.apache.logging.log4j.LogManager;
21
import org.apache.logging.log4j.Logger;
25749 amit.gupta 22
import org.apache.solr.common.util.Hash;
23
import org.openqa.selenium.OutputType;
24
import org.openqa.selenium.TakesScreenshot;
25
import org.openqa.selenium.WebDriver;
26
import org.openqa.selenium.chrome.ChromeDriver;
23755 amit.gupta 27
import org.springframework.beans.factory.annotation.Autowired;
24819 amit.gupta 28
import org.springframework.core.io.ByteArrayResource;
24767 amit.gupta 29
import org.springframework.mail.javamail.JavaMailSender;
23755 amit.gupta 30
import org.springframework.stereotype.Component;
31
import org.springframework.transaction.annotation.Transactional;
32
 
25043 amit.gupta 33
import com.smartdukaan.cron.scheduled.ScheduledTasks;
24819 amit.gupta 34
import com.spice.profitmandi.common.util.FileUtil;
25749 amit.gupta 35
import com.spice.profitmandi.common.util.FormattingUtils;
24819 amit.gupta 36
import com.spice.profitmandi.common.util.Utils;
25021 amit.gupta 37
import com.spice.profitmandi.dao.entity.catalog.Scheme;
24716 amit.gupta 38
import com.spice.profitmandi.dao.entity.fofo.CurrentInventorySnapshot;
24806 amit.gupta 39
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
40
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
25530 amit.gupta 41
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
24005 amit.gupta 42
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
24883 amit.gupta 43
import com.spice.profitmandi.dao.entity.fofo.PartnerTargetDetails;
23898 amit.gupta 44
import com.spice.profitmandi.dao.entity.fofo.Purchase;
24716 amit.gupta 45
import com.spice.profitmandi.dao.entity.fofo.ScanRecord;
25034 amit.gupta 46
import com.spice.profitmandi.dao.entity.fofo.SchemeInOut;
25021 amit.gupta 47
import com.spice.profitmandi.dao.entity.fofo.SchemeItem;
24883 amit.gupta 48
import com.spice.profitmandi.dao.entity.fofo.TargetSlab;
24953 amit.gupta 49
import com.spice.profitmandi.dao.entity.inventory.SaholicInventorySnapshot;
23824 amit.gupta 50
import com.spice.profitmandi.dao.entity.transaction.LineItem;
23755 amit.gupta 51
import com.spice.profitmandi.dao.entity.transaction.LineItemImei;
52
import com.spice.profitmandi.dao.entity.transaction.Order;
24802 amit.gupta 53
import com.spice.profitmandi.dao.entity.transaction.SellerWarehouse;
25046 amit.gupta 54
import com.spice.profitmandi.dao.entity.transaction.UserWallet;
25034 amit.gupta 55
import com.spice.profitmandi.dao.entity.transaction.UserWalletHistory;
25530 amit.gupta 56
import com.spice.profitmandi.dao.entity.user.Address;
57
import com.spice.profitmandi.dao.entity.user.User;
25021 amit.gupta 58
import com.spice.profitmandi.dao.enumuration.catalog.AmountType;
25522 amit.gupta 59
import com.spice.profitmandi.dao.enumuration.catalog.SchemeType;
24716 amit.gupta 60
import com.spice.profitmandi.dao.repository.GenericRepository;
25034 amit.gupta 61
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
25021 amit.gupta 62
import com.spice.profitmandi.dao.repository.catalog.SchemeRepository;
25749 amit.gupta 63
import com.spice.profitmandi.dao.repository.cs.CsService;
23899 amit.gupta 64
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
24716 amit.gupta 65
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
24002 amit.gupta 66
import com.spice.profitmandi.dao.repository.fofo.DebitNoteRepository;
24806 amit.gupta 67
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
68
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
24002 amit.gupta 69
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
24806 amit.gupta 70
import com.spice.profitmandi.dao.repository.fofo.InvoiceNumberGenerationSequenceRepository;
24883 amit.gupta 71
import com.spice.profitmandi.dao.repository.fofo.PartnerTargetRepository;
23898 amit.gupta 72
import com.spice.profitmandi.dao.repository.fofo.PurchaseRepository;
24716 amit.gupta 73
import com.spice.profitmandi.dao.repository.fofo.ScanRecordRepository;
24002 amit.gupta 74
import com.spice.profitmandi.dao.repository.fofo.SchemeInOutRepository;
25021 amit.gupta 75
import com.spice.profitmandi.dao.repository.fofo.SchemeItemRepository;
24883 amit.gupta 76
import com.spice.profitmandi.dao.repository.fofo.TargetSlabRepository;
77
import com.spice.profitmandi.dao.repository.fofo.TargetSlabRepositoryImpl;
24953 amit.gupta 78
import com.spice.profitmandi.dao.repository.inventory.SaholicInventorySnapshotRepository;
79
import com.spice.profitmandi.dao.repository.inventory.SaholicReservationInventorySnapshotRepository;
23755 amit.gupta 80
import com.spice.profitmandi.dao.repository.transaction.LineItemImeisRepository;
23824 amit.gupta 81
import com.spice.profitmandi.dao.repository.transaction.LineItemRepository;
23755 amit.gupta 82
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
24772 amit.gupta 83
import com.spice.profitmandi.dao.repository.transaction.ReturnOrderRepository;
24802 amit.gupta 84
import com.spice.profitmandi.dao.repository.transaction.SellerWarehouseRepository;
24767 amit.gupta 85
import com.spice.profitmandi.dao.repository.transaction.UserWalletHistoryRepository;
86
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
25530 amit.gupta 87
import com.spice.profitmandi.dao.repository.user.AddressRepository;
24002 amit.gupta 88
import com.spice.profitmandi.dao.repository.user.UserRepository;
23899 amit.gupta 89
import com.spice.profitmandi.service.inventory.InventoryService;
24266 amit.gupta 90
import com.spice.profitmandi.service.order.OrderService;
24005 amit.gupta 91
import com.spice.profitmandi.service.pricing.PriceDropService;
92
import com.spice.profitmandi.service.scheme.SchemeService;
23899 amit.gupta 93
import com.spice.profitmandi.service.transaction.TransactionService;
94
import com.spice.profitmandi.service.user.RetailerService;
95
import com.spice.profitmandi.service.wallet.WalletService;
23755 amit.gupta 96
 
24953 amit.gupta 97
import in.shop2020.model.v1.order.OrderStatus;
24002 amit.gupta 98
import in.shop2020.model.v1.order.WalletReferenceType;
99
 
23755 amit.gupta 100
@Component
101
@Transactional(rollbackFor = Throwable.class)
102
public class RunOnceTasks {
103
 
104
	private static final Logger LOGGER = LogManager.getLogger(RunOnceTasks.class);
105
 
106
	@Autowired
23824 amit.gupta 107
	private LineItemRepository lineItemRepository;
24711 amit.gupta 108
 
23905 amit.gupta 109
	@Autowired
24953 amit.gupta 110
	private SaholicInventorySnapshotRepository saholicInventorySnapshotRepository;
25749 amit.gupta 111
 
112
	@Autowired
113
	private CsService csService;
24953 amit.gupta 114
 
25749 amit.gupta 115
 
24953 amit.gupta 116
	@Autowired
117
	private SaholicReservationInventorySnapshotRepository saholicReservationInventorySnapshotRepository;
118
 
119
	@Autowired
24883 amit.gupta 120
	private TargetSlabRepository targetSlabRepository;
121
 
122
	@Autowired
123
	private PartnerTargetRepository partnerTargetRepository;
124
 
125
	@Autowired
24802 amit.gupta 126
	private SellerWarehouseRepository sellerWarehouseRepository;
24814 amit.gupta 127
 
24802 amit.gupta 128
	@Autowired
24806 amit.gupta 129
	private FofoOrderItemRepository fofoOrderItemRepository;
24814 amit.gupta 130
 
24806 amit.gupta 131
	@Autowired
132
	private FofoOrderRepository fofoOrderRepository;
24814 amit.gupta 133
 
24806 amit.gupta 134
	@Autowired
24767 amit.gupta 135
	private UserWalletRepository userWalletRepository;
136
 
137
	@Autowired
138
	private UserWalletHistoryRepository userWalletHistoryRepository;
139
 
140
	@Autowired
24002 amit.gupta 141
	private UserRepository userRepository;
24711 amit.gupta 142
 
24002 amit.gupta 143
	@Autowired
23899 amit.gupta 144
	private WalletService walletService;
145
 
146
	@Autowired
25034 amit.gupta 147
	private ItemRepository itemRepository;
148
 
149
	@Autowired
23899 amit.gupta 150
	private InventoryService inventoryService;
151
 
152
	@Autowired
153
	private TransactionService transactionService;
154
 
24711 amit.gupta 155
	// Service for Tertiary/Partner Orders
24266 amit.gupta 156
	@Autowired
157
	private OrderService orderService;
23767 amit.gupta 158
 
23755 amit.gupta 159
	@Autowired
25021 amit.gupta 160
	private SchemeRepository schemeRepository;
25516 amit.gupta 161
 
25043 amit.gupta 162
	@Autowired
25530 amit.gupta 163
	private AddressRepository addressRepository;
25749 amit.gupta 164
 
25530 amit.gupta 165
	@Autowired
25043 amit.gupta 166
	private ScheduledTasks scheduledTasks;
25034 amit.gupta 167
 
25021 amit.gupta 168
	@Autowired
169
	private SchemeItemRepository schemeItemRepository;
170
 
171
	@Autowired
24772 amit.gupta 172
	private ReturnOrderRepository returnOrderRepository;
173
 
174
	@Autowired
23899 amit.gupta 175
	private FofoStoreRepository fofoStoreRepository;
176
 
177
	@Autowired
23755 amit.gupta 178
	private LineItemImeisRepository lineItemImeisRepository;
24711 amit.gupta 179
 
24002 amit.gupta 180
	@Autowired
181
	private InventoryItemRepository inventoryItemRepository;
24814 amit.gupta 182
 
24806 amit.gupta 183
	@Autowired
184
	private InvoiceNumberGenerationSequenceRepository invoiceNumberGenerationSequenceRepository;
23901 amit.gupta 185
 
23898 amit.gupta 186
	@Autowired
23899 amit.gupta 187
	private RetailerService retailerService;
24711 amit.gupta 188
 
24002 amit.gupta 189
	@Autowired
190
	private SchemeInOutRepository schemeInOutRepository;
24711 amit.gupta 191
 
24002 amit.gupta 192
	@Autowired
193
	private DebitNoteRepository debitNoteRepository;
23899 amit.gupta 194
 
195
	@Autowired
24716 amit.gupta 196
	private GenericRepository genericRepository;
197
 
198
	@Autowired
23898 amit.gupta 199
	private PurchaseRepository purchaseRepository;
24711 amit.gupta 200
 
24005 amit.gupta 201
	@Autowired
202
	private PriceDropService priceDropService;
24883 amit.gupta 203
 
24819 amit.gupta 204
	@Autowired
205
	private JavaMailSender googleMailSender;
24711 amit.gupta 206
 
24005 amit.gupta 207
	@Autowired
208
	private SchemeService schemeService;
24711 amit.gupta 209
 
24716 amit.gupta 210
	@Autowired
211
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
212
 
213
	@Autowired
24767 amit.gupta 214
	private OrderRepository orderRepository;
215
 
216
	@Autowired
24716 amit.gupta 217
	private ScanRecordRepository scanRecordRepository;
218
 
24767 amit.gupta 219
	@Autowired
220
	private JavaMailSender mailSender;
221
 
24005 amit.gupta 222
	public void dropCorrection() throws Exception {
223
 
24711 amit.gupta 224
		walletService.rollbackAmountFromWallet(175128034, 274, 4, WalletReferenceType.PRICE_DROP,
225
				"Scheme  differential for Price Drop of Rs.712 on Samsung J6 J600GG, on 01-08-2018 for missing 1pc");
226
		walletService.rollbackAmountFromWallet(175128034, -259, 4, WalletReferenceType.PRICE_DROP,
227
				"Scheme  differential for Price Drop of Rs.712 on Samsung J6 J600GG, on 01-08-2018 for missing 1pc");
228
		List<InventoryItem> iis = inventoryItemRepository.selectByIds(new HashSet<>(Arrays.asList(3518, 3516)));
229
		schemeService.reverseSchemes(iis, 8,
230
				"Scheme  differential for Price Drop of Rs.712 on Samsung J6 J600GG, on 01-08-2018. Total 2 item(s)");
231
		List<InventoryItem> iis1 = inventoryItemRepository.selectByIds(new HashSet<>(Arrays.asList(3502, 3334, 3503)));
232
		schemeService.reverseSchemes(iis1, 13,
233
				"Scheme  differential for Price Drop of Rs.485 on Samsung Galaxy J4 J400FD, on 18-07-2018. Total 3 item(s)");
234
 
235
		List<InventoryItem> iis2 = inventoryItemRepository.selectByIds(new HashSet<>(Arrays.asList(3319)));
236
		schemeService.reverseSchemes(iis2, 13,
237
				"Scheme  differential for Price Drop of Rs.485 on Samsung Galaxy J4 J400FD, on 18-07-2018. Total 1 item(s)");
24005 amit.gupta 238
	}
24711 amit.gupta 239
 
25268 amit.gupta 240
	public void schemeRollback() throws Exception {
24002 amit.gupta 241
		Map<Integer, Float> fofoIdAmount = new HashMap<>();
24003 amit.gupta 242
		fofoIdAmount.put(175135218, 1942f);
243
		String description = "Price drop/differential rolled out as, they were already returned, Total 2pcs.";
24711 amit.gupta 244
		for (Map.Entry<Integer, Float> fofoIdAmountEntry : fofoIdAmount.entrySet()) {
245
			Integer fofoId = fofoIdAmountEntry.getKey();
24002 amit.gupta 246
			Float amount = fofoIdAmountEntry.getValue();
24003 amit.gupta 247
			walletService.rollbackAmountFromWallet(fofoId, amount, 4, WalletReferenceType.PRICE_DROP, description);
24002 amit.gupta 248
		}
24004 amit.gupta 249
		fofoIdAmount.put(175135218, 438f);
24711 amit.gupta 250
		for (Map.Entry<Integer, Float> fofoIdAmountEntry : fofoIdAmount.entrySet()) {
251
			Integer fofoId = fofoIdAmountEntry.getKey();
24004 amit.gupta 252
			Float amount = fofoIdAmountEntry.getValue();
253
			walletService.rollbackAmountFromWallet(fofoId, amount, 4, WalletReferenceType.PRICE_DROP, description);
254
		}
24002 amit.gupta 255
	}
23755 amit.gupta 256
 
23898 amit.gupta 257
	public void populateGrnTimestamp() {
258
		List<Purchase> allPurchases = purchaseRepository.selectAll();
23899 amit.gupta 259
		for (Purchase p : allPurchases) {
23898 amit.gupta 260
			String invoiceNumber = p.getPurchaseReference();
23899 amit.gupta 261
			if (p.getCompleteTimestamp() == null) {
23898 amit.gupta 262
				LOGGER.info("GRN for invoice {} is delivered but partially Completed.", p.getPurchaseReference());
263
			} else {
264
				List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(invoiceNumber, p.getFofoId());
23899 amit.gupta 265
				for (Order order : orders) {
23902 amit.gupta 266
					if (order.getPartnerGrnTimestamp() == null) {
267
						order.setPartnerGrnTimestamp(p.getCompleteTimestamp());
23898 amit.gupta 268
						orderRepository.persist(order);
269
					}
270
				}
271
			}
272
		}
23899 amit.gupta 273
 
23898 amit.gupta 274
	}
23899 amit.gupta 275
 
24716 amit.gupta 276
	public void migarateLineItemsToNewTable() throws Exception {
23755 amit.gupta 277
		LOGGER.info("Before Migrated LineItems Successfully");
23824 amit.gupta 278
		int lineItemImeiId = 0;
279
		LocalDateTime startDate = null;
280
		try {
281
			lineItemImeiId = lineItemImeisRepository.selectMaxId();
23899 amit.gupta 282
			LineItem lineItem = lineItemRepository
283
					.selectById(lineItemImeisRepository.selectById(lineItemImeiId).getLineItemId());
23824 amit.gupta 284
			Order order = orderRepository.selectById(lineItem.getOrderId());
285
			startDate = order.getBillingTimestamp();
286
		} catch (Exception e) {
287
			LOGGER.info("Running before first time");
23826 amit.gupta 288
			startDate = LocalDateTime.of(LocalDate.of(2017, 7, 1), LocalTime.MIDNIGHT);
23824 amit.gupta 289
		}
290
		List<Order> orders = orderRepository.selectAllByBillingDatesBetween(startDate, LocalDateTime.now());
23827 amit.gupta 291
		Collections.reverse(orders);
23899 amit.gupta 292
 
23755 amit.gupta 293
		for (Order order : orders) {
23824 amit.gupta 294
			try {
23767 amit.gupta 295
				String serialNumbers = order.getLineItem().getSerialNumber();
296
				if (!StringUtils.isEmpty(serialNumbers)) {
297
					List<String> serialNumberList = Arrays.asList(serialNumbers.split(","));
298
					for (String serialNumber : serialNumberList) {
299
						int lineItemId = order.getLineItem().getId();
300
						LineItemImei lineItemImei = new LineItemImei();
301
						lineItemImei.setSerialNumber(serialNumber);
302
						lineItemImei.setLineItemId(lineItemId);
303
						lineItemImeisRepository.persist(lineItemImei);
304
					}
305
				} else {
306
					LOGGER.info("Serial Numbers dont exist for Order {}", order.getId());
23755 amit.gupta 307
				}
23824 amit.gupta 308
			} catch (Exception e) {
23899 amit.gupta 309
				LOGGER.info("Error occurred while creating lineitem imei {}, because of {}", order.getId(),
310
						e.getMessage());
23755 amit.gupta 311
			}
312
		}
313
		LOGGER.info("Migrated LineItems Successfully");
314
	}
24266 amit.gupta 315
 
316
	public void cancelOrder(List<String> invoiceNumbers) throws Exception {
317
		orderService.cancelOrder(invoiceNumbers);
318
	}
24711 amit.gupta 319
 
24722 amit.gupta 320
	public void migratePurchase() throws Exception {
24641 amit.gupta 321
		List<Purchase> purchases = purchaseRepository.selectPurchaseAllPurchasesLessThanZero();
24706 amit.gupta 322
		System.out.printf("Total Purchases count is %s", purchases.size());
24711 amit.gupta 323
		for (Purchase purchase : purchases) {
324
			List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchase.getId());
325
			Map<Integer, List<InventoryItem>> itemIdInventoryMap = inventoryItems.stream()
326
					.collect(Collectors.groupingBy(InventoryItem::getItemId));
327
			List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(purchase.getPurchaseReference(),
328
					purchase.getFofoId());
329
			Map<Integer, Integer> ourSaleItemQtyMap = orders.stream().collect(Collectors.groupingBy(
330
					x -> x.getLineItem().getItemId(), Collectors.summingInt(x -> x.getLineItem().getQuantity())));
331
			Map<Integer, Integer> theirPurchaseItemQtyMap = inventoryItems.stream().collect(Collectors
332
					.groupingBy(InventoryItem::getItemId, Collectors.summingInt(InventoryItem::getInitialQuantity)));
24709 amit.gupta 333
			for (Map.Entry<Integer, Integer> itemQtyEntry : theirPurchaseItemQtyMap.entrySet()) {
24711 amit.gupta 334
				if (!ourSaleItemQtyMap.containsKey(itemQtyEntry.getKey())) {
335
					LOGGER.info("Cannot find in Invoice {} item {}", purchase.getPurchaseReference(),
336
							itemQtyEntry.getKey());
24646 amit.gupta 337
					continue;
24645 amit.gupta 338
				}
24709 amit.gupta 339
				int ourSale = ourSaleItemQtyMap.get(itemQtyEntry.getKey());
24713 amit.gupta 340
				int quantityToReduce = itemQtyEntry.getValue() - ourSale;
24716 amit.gupta 341
				List<InventoryItem> itemIis = itemIdInventoryMap.get(itemQtyEntry.getKey());
342
				if (itemIdInventoryMap != null) {
343
					for (InventoryItem ii : itemIis) {
24915 amit.gupta 344
						if (ii.getSerialNumber() == null && ii.getGoodQuantity() == ii.getInitialQuantity()
345
								&& quantityToReduce >= ii.getInitialQuantity()) {
24734 amit.gupta 346
							LOGGER.info("Changed in inventoryItems {}, {}, {}, {}, {}, {}",
24716 amit.gupta 347
									purchase.getPurchaseReference(), ii.getId(), ii.getItemId(),
24734 amit.gupta 348
									ii.getInitialQuantity(), ii.getGoodQuantity(), quantityToReduce);
24912 amit.gupta 349
							List<ScanRecord> scanRecords = scanRecordRepository.selectByInventoryItemId(ii.getId());
350
							for (ScanRecord scanRecord : scanRecords) {
24915 amit.gupta 351
								CurrentInventorySnapshot cis = currentInventorySnapshotRepository
352
										.selectByItemIdAndFofoId(itemQtyEntry.getKey(), purchase.getFofoId());
353
								scanRecord.setQuantity(0);
354
								ii.setGoodQuantity(0);
355
								quantityToReduce = quantityToReduce - ii.getInitialQuantity();
356
								cis.setAvailability(cis.getAvailability() - ii.getInitialQuantity());
357
								purchase.setUnfullfilledNonSerializedQuantity(
358
										purchase.getUnfullfilledNonSerializedQuantity() + quantityToReduce);
359
								LOGGER.info("Rectified {}, {}, {}, {}, {}, {}", purchase.getPurchaseReference(),
360
										ii.getId(), ii.getItemId(), ii.getInitialQuantity(), ii.getGoodQuantity(),
361
										quantityToReduce);
24711 amit.gupta 362
							}
24641 amit.gupta 363
						}
364
					}
365
				}
366
			}
367
		}
24953 amit.gupta 368
		// throw new Exception();
24641 amit.gupta 369
	}
24767 amit.gupta 370
 
24802 amit.gupta 371
	public void migrateChallansToInvoices() throws Exception {
24814 amit.gupta 372
		Map<String, List<Order>> invoiceOrdersMap = orderRepository.selectAllChallans().stream()
373
				.filter(x -> !x.getLineItem().getHsnCode().equals("NOGST"))
24794 amit.gupta 374
				.collect(Collectors.groupingBy(Order::getInvoiceNumber, Collectors.toList()));
24814 amit.gupta 375
 
24819 amit.gupta 376
		List<List<? extends Serializable>> rows = new ArrayList<>();
24814 amit.gupta 377
		for (String invoice : invoiceOrdersMap.keySet()) {
24794 amit.gupta 378
			Order oneOrder = invoiceOrdersMap.get(invoice).get(0);
379
			int totalOrders = invoiceOrdersMap.get(invoice).size();
380
			LineItem lineItem = oneOrder.getLineItem();
24802 amit.gupta 381
			oneOrder.setBillingTimestamp(LocalDateTime.now());
382
			oneOrder.setInvoiceNumber(getInvoiceNumber(oneOrder));
24819 amit.gupta 383
			rows.add(Arrays.asList(oneOrder.getId(), invoice, oneOrder.getInvoiceNumber(), lineItem.getQuantity()));
24883 amit.gupta 384
			LOGGER.info(invoice + "\t" + oneOrder.getInvoiceNumber() + oneOrder.getId() + "\t",
385
					"\t" + totalOrders + "\t" + lineItem.getQuantity());
24814 amit.gupta 386
			Purchase p = null;
387
			try {
388
				p = purchaseRepository.selectByPurchaseReferenceAndFofoId(invoice, oneOrder.getRetailerId());
389
			} catch (Exception e) {
24815 amit.gupta 390
				LOGGER.info("Could not find purchase for invoice {}", invoice);
24812 amit.gupta 391
			}
24814 amit.gupta 392
			if (p != null) {
393
				List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(p.getId());
394
				for (InventoryItem inventoryItem : inventoryItems) {
24815 amit.gupta 395
					LOGGER.info(inventoryItem.getItemId() + " " + inventoryItem.getGoodQuantity() + " "
24883 amit.gupta 396
							+ inventoryItem.getHsnCode() + " " + inventoryItem.getSerialNumber() + " "
397
							+ p.getPurchaseReference());
24814 amit.gupta 398
				}
399
			}
400
 
24794 amit.gupta 401
		}
24818 amit.gupta 402
		changePartnerInvoices();
24883 amit.gupta 403
		ByteArrayOutputStream baos = FileUtil
404
				.getCSVByteStream(Arrays.asList("Order id", "Challan", "Invoice", "Quantity"), rows);
405
 
24819 amit.gupta 406
		Utils.sendMailWithAttachment(googleMailSender,
407
				new String[] { "amit.gupta@shop2020.in", "sunny.yadav@smartdukaan.com" }, null,
24883 amit.gupta 408
				"Challans Converted to Invoice", "PFA", "Challans-To-Invoice.csv",
409
				new ByteArrayResource(baos.toByteArray()));
24916 amit.gupta 410
		throw new Exception();
24794 amit.gupta 411
	}
24767 amit.gupta 412
 
24802 amit.gupta 413
	private String getInvoiceNumber(Order oneOrder) {
24805 amit.gupta 414
		String prefix = oneOrder.getInvoiceNumber().split("-")[1].replaceAll("\\d*", "");
24803 amit.gupta 415
		System.out.println("Prefix is " + prefix);
24802 amit.gupta 416
		SellerWarehouse sellerWarehouse = sellerWarehouseRepository.selectByPrefix(prefix);
417
		int newSequence = sellerWarehouse.getInvoiceSequence() + 1;
418
		sellerWarehouse.setInvoiceSequence(newSequence);
24814 amit.gupta 419
		return prefix + newSequence;
24802 amit.gupta 420
	}
24814 amit.gupta 421
 
24806 amit.gupta 422
	private void changePartnerInvoices() throws Exception {
24814 amit.gupta 423
		List<FofoOrder> fofoOrders = fofoOrderRepository.selectByInvoiceNumberLike("%SEC%");
424
		for (FofoOrder fofoOrder : fofoOrders) {
24806 amit.gupta 425
			FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId()).get(0);
24814 amit.gupta 426
			if (fofoOrderItem.getBrand().equals("Vivo")) {
24806 amit.gupta 427
				String challanString = fofoOrder.getInvoiceNumber();
24814 amit.gupta 428
				String storeCode = invoiceNumberGenerationSequenceRepository.selectByFofoId(fofoOrder.getFofoId())
429
						.getPrefix();
24806 amit.gupta 430
				String invoiceNumber = orderService.getInvoiceNumber(fofoOrder.getFofoId(), storeCode);
431
				fofoOrder.setInvoiceNumber(invoiceNumber);
432
				fofoOrder.setCreateTimestamp(LocalDateTime.now());
24818 amit.gupta 433
				LOGGER.info(challanString + "\t" + invoiceNumber + "\t" + fofoOrderItem.getQuantity());
24806 amit.gupta 434
			}
24814 amit.gupta 435
 
24806 amit.gupta 436
		}
437
	}
24802 amit.gupta 438
 
24883 amit.gupta 439
	public void createMonthlyTargets() throws Exception {
440
		Map<String, List<TargetSlab>> defaultSlabs = targetSlabRepository.getAllDefaultSlabs();
441
		for (String memberType : defaultSlabs.keySet()) {
442
			PartnerTargetDetails ptd = new PartnerTargetDetails();
443
			ptd.setBrandName(null);
444
 
445
			LocalDate startDate = LocalDate.now().withDayOfMonth(1);
446
			int totalDays = startDate.lengthOfMonth();
447
			String monthName = startDate.getMonth().toString();
448
			ptd.setStartDate(startDate.atStartOfDay());
449
			ptd.setEndDate(startDate.plusDays(totalDays - 1).atTime(LocalTime.MAX));
450
			ptd.setTargetName(String.format("%s Sales Target for %s Partners", monthName, memberType));
451
			partnerTargetRepository.persist(ptd);
452
			TargetSlabRepositoryImpl.TYPE_PARTNER_MAPPING.get(memberType).forEach(x -> {
453
				x.setTargetId(ptd.getId());
454
				partnerTargetRepository.persist(x);
455
			});
456
 
457
			List<TargetSlab> slabs = defaultSlabs.get(memberType);
458
			slabs.stream().forEach(x -> {
459
				x.setTargetId(ptd.getId());
460
				targetSlabRepository.persist(x);
461
			});
462
		}
463
	}
464
 
25023 amit.gupta 465
	public void populateSchemes() {
25021 amit.gupta 466
		List<Integer> list05 = Arrays.asList(29093, 29094, 29095, 29096, 29097, 29098, 29099, 29101, 29102);
467
		List<Integer> list10 = Arrays.asList(29187, 29188);
468
		List<Integer> list13 = Arrays.asList(28095, 28097, 28098, 28101, 28102, 28104, 28106, 28107, 28108, 28227,
469
				28228, 28229, 28231, 29055, 29056, 29066, 29079);
470
		List<Integer> list15 = Arrays.asList(20891, 27938, 27939, 27940, 27941, 27943, 27947, 27948, 27953, 27954,
471
				27955, 28220, 28467, 29020, 29033, 29034, 29035, 29592, 29886, 29890, 29891, 29941, 29942, 27445, 27958,
472
				27960, 27961);
473
		List<Integer> list18 = Arrays.asList(28137, 28138, 28140, 28157, 28158, 28161, 28162, 28163, 28164, 28176,
474
				28177, 28178, 28199, 28200, 28208, 28209, 28210, 28211, 28215, 28216, 28217, 28230, 28380, 28381, 28382,
475
				28383, 28384, 28385, 28386, 28387, 28388, 28389, 28390, 28391, 28392, 28395, 28461, 28462, 28463, 28464,
476
				28465, 28466, 28488, 28489, 28490, 28491, 28564, 28565, 28762, 28773, 28871, 28872, 28873, 28874, 28880,
477
				28881, 28914, 28915, 28916, 28917, 28918, 28919, 28920, 29046, 29047, 29048, 29068, 29069, 29110, 29111,
478
				29112, 29113, 29114, 29115, 29116, 29117, 29207, 29208, 29217, 29218, 29225, 29474, 29475, 29476, 29477,
479
				29478, 29479, 29483, 29485, 29486, 29487, 29488, 29739, 29740, 29741, 29742, 29743, 29744, 29745, 29746,
480
				29747, 29748, 29749, 29753, 29756, 29757, 29758, 29760, 29761, 29762, 29763, 29764, 29765, 29766, 29767,
481
				29779, 29780, 29781, 29792, 29793, 29828, 29829, 29830, 29879, 29880, 29881, 29882, 29951);
482
		List<Integer> list20 = Arrays.asList(27975, 27976, 28091, 28363, 29023, 29024, 29025);
483
		List<Integer> list25 = Arrays.asList(28763, 28764, 28765, 29152, 29154, 29157, 29209, 29210, 29601, 29602,
484
				29720, 29721, 29722, 29723, 29725, 29726, 29727);
485
		List<Integer> list30 = Arrays.asList(27962, 27963, 27964, 27965, 27966, 27968, 27969, 28328, 28362, 28566,
486
				28567, 28568, 28571, 28572, 29073, 29074, 29075, 29080, 29081, 29120, 29121, 29122, 29124, 29189, 29190,
487
				29191, 29192, 29193, 29194, 29196, 29197, 29198, 29199, 29515, 29516, 29517, 29675, 29676, 29677, 29678,
488
				29679, 29707, 29708, 29794, 29795, 29883, 29884, 29885, 29887, 29888, 29889, 29931, 29932, 29935, 29936,
489
				29937, 29938, 29939, 29940);
490
		List<Integer> list35 = Arrays.asList(27996, 27998, 29067, 29071, 29643, 29644, 29945, 29946, 29987, 29052,
491
				29053, 29078, 29085, 29086, 29567, 29568, 29569, 29570, 29797, 29914, 29915, 29930, 28877, 28878, 29604,
492
				29605, 29606, 29775, 29776, 29777, 29778, 28862, 28863, 28864, 29026, 29103, 29104, 29105, 28979, 28980,
493
				28981, 28982, 28983, 29002, 29003, 29004, 29834, 29835, 29836, 29837, 29943);
494
		List<Integer> list40 = Arrays.asList(29082, 29083, 28766, 28767, 28768, 28769, 28771);
495
		List<Integer> list45 = Arrays.asList(28026, 28027, 28028, 29528, 29529, 29530, 29534, 29535, 29536, 29538,
496
				29755);
497
		List<Integer> list55 = Arrays.asList(28010, 28011, 28015, 28016, 28019, 28240, 28469, 28470, 28471, 28569,
498
				28570, 28674, 28759, 28761, 28909, 28910, 28911, 28912, 28913, 29108, 29109, 29143, 29144, 29145, 29146,
499
				29211, 29212, 29213, 29214, 29482, 29511, 29512, 29521, 29525, 29526, 29527, 29574, 29575, 29576, 29611,
500
				29612, 29616, 29641, 29642, 29728, 29729, 29750, 29771, 29782, 29783, 29784, 29923, 29924, 29944, 29953,
501
				29992, 29994, 27977, 27978, 28092, 28325, 28326, 28327, 28486, 28487, 29148, 29149, 29150, 29151, 29384,
502
				29385, 29386, 29427, 29489, 29518, 29519, 29520, 29577, 29578, 29579, 29580, 29586, 29660, 29661, 29662,
503
				29663, 29769, 29770, 29790, 29791, 29796, 29928, 29929, 29947, 29948, 28093, 28094, 28556, 28557, 28673,
504
				28867, 28868, 28870, 29089, 29090, 29091, 29106, 29107);
505
		List<Integer> list65 = Arrays.asList(28058, 28223, 28224, 28225, 28226, 28329, 29201, 29202, 29203, 29204,
506
				29205, 29206, 29466, 29467, 29468, 29469, 29470, 29471, 29472, 29573);
507
		Map<Float, List<Integer>> m = new HashMap<>();
508
		m.put(0.5f, list05);
509
		m.put(1.0f, list10);
510
		m.put(1.3f, list13);
511
		m.put(1.5f, list15);
512
		m.put(1.8f, list18);
513
		m.put(2.0f, list20);
514
		m.put(2.5f, list25);
515
		m.put(3.0f, list30);
516
		m.put(3.5f, list35);
517
		m.put(4.0f, list40);
518
		m.put(4.5f, list45);
519
		m.put(5.5f, list55);
520
		m.put(6.5f, list65);
521
		for (Map.Entry<Float, List<Integer>> itemsListEntry : m.entrySet()) {
522
			Scheme s1 = getScheme();
523
			s1.setAmount(itemsListEntry.getKey());
524
			schemeRepository.persist(s1);
25034 amit.gupta 525
			for (Integer itemId : itemsListEntry.getValue()) {
25021 amit.gupta 526
				SchemeItem schemeItem = new SchemeItem();
527
				schemeItem.setItemId(itemId);
528
				schemeItem.setSchemeId(s1.getId());
529
				schemeItemRepository.persist(schemeItem);
530
			}
531
		}
25034 amit.gupta 532
 
25021 amit.gupta 533
	}
534
 
535
	private Scheme getScheme() {
536
		Scheme s = new Scheme();
537
		s.setName("List Price Margin");
538
		s.setDescription("List Price Margin");
539
		s.setActiveTimestamp(null);
540
		s.setStartDateTime(LocalDate.of(2019, 6, 1).atStartOfDay());
541
		s.setEndDateTime(LocalDate.of(2019, 7, 1).atStartOfDay());
542
		s.setAmountType(AmountType.PERCENTAGE);
543
		s.setCreateTimestamp(LocalDateTime.now());
544
		s.setExpireTimestamp(null);
545
		s.setCreatedBy(175120474);
546
		return s;
547
	}
548
 
24957 amit.gupta 549
	public void findMismatchesInIndent() throws Exception {
25021 amit.gupta 550
		/*
551
		 * List<SaholicInventorySnapshot> saholicInventorySnapshots =
552
		 * saholicInventorySnapshotRepository.selectAll(); Map<Integer, Integer>
553
		 * itemReservedMap = saholicInventorySnapshots.stream().filter(x ->
554
		 * x.getReserved() > 0)
555
		 * .collect(Collectors.groupingBy(SaholicInventorySnapshot::getItemId,
556
		 * Collectors.summingInt(SaholicInventorySnapshot::getReserved)));
557
		 */
24957 amit.gupta 558
		List<Order> allInProcessOrders = orderRepository.selectAllOrder(OrderStatus.SUBMITTED_FOR_PROCESSING);
24967 amit.gupta 559
 
25021 amit.gupta 560
		/*
561
		 * Map<Integer, Integer> lineItemQtyMap = allInProcessOrders
562
		 * .stream().collect(Collectors.groupingBy(y -> y.getLineItem().getItemId(),
563
		 * Collectors.summingInt(y -> y.getLineItem().getQuantity())));
564
		 */
565
 
566
		/*
567
		 * Map<Integer, Order> orderMap =
568
		 * allInProcessOrders.stream().collect(Collectors.toMap(Order::getId, x->x));
569
		 * Map<Integer, List<Order>> itemOrdersMap = allInProcessOrders.stream()
570
		 * .collect(Collectors.groupingBy(o->o.getLineItem().getItemId(),
571
		 * Collectors.toList()));
572
		 */
573
 
574
		Map<String, Integer> lineItemWhQtyMap = allInProcessOrders.stream()
25734 amit.gupta 575
				.collect(Collectors.groupingBy(y -> y.getLineItem().getItemId() + "-" + y.getFulfilmentWarehouseId(),
24967 amit.gupta 576
						Collectors.summingInt(y -> y.getLineItem().getQuantity())));
25021 amit.gupta 577
 
578
		/*
579
		 * itemReservedMap.forEach((itemId, reserved)->{
580
		 * if(lineItemQtyMap.containsKey(itemId)) { int orderedQty =
581
		 * lineItemQtyMap.get(itemId); System.out.printf("%d\t%d\t%d\n",itemId,
582
		 * orderedQty, reserved); } else {
583
		 * saholicInventorySnapshotRepository.removeAllReservations(itemId);
584
		 * System.out.printf("%d\t%d\t%d\n",itemId, 0, reserved); } });
585
		 */
586
 
587
		lineItemWhQtyMap.forEach((key, value) -> {
588
 
24967 amit.gupta 589
			int itemId = Integer.parseInt(key.split("-")[0]);
590
			int warehouseId = Integer.parseInt(key.split("-")[1]);
25021 amit.gupta 591
			System.out.printf("%d\t%d\t%d\n", itemId, warehouseId, value);
592
			SaholicInventorySnapshot cis = saholicInventorySnapshotRepository.selectByWarehouseIdandItemId(warehouseId,
593
					itemId);
594
			if (cis == null) {
24970 amit.gupta 595
				cis = new SaholicInventorySnapshot();
596
				cis.setItemId(itemId);
597
				cis.setWarehouseId(warehouseId);
598
				cis.setAvailability(0);
599
				saholicInventorySnapshotRepository.persist(cis);
600
			}
24967 amit.gupta 601
			cis.setReserved(value);
602
		});
24964 amit.gupta 603
		/*
25021 amit.gupta 604
		 * List<SaholicReservationInventorySnapshot> reservationInventorySnapshots =
605
		 * saholicReservationInventorySnapshotRepository.selectAll(); Map<Integer,
606
		 * SaholicReservationInventorySnapshot> reservationInventorySnapshotsMap
607
		 * =reservationInventorySnapshots.stream()
608
		 * .collect(Collectors.toMap(x->x.getOrderId(), x->x));
609
		 * 
610
		 * List<Integer> orderIds =
611
		 * reservationInventorySnapshots.stream().map(x->x.getOrderId()).collect(
612
		 * Collectors.toList()); List<Order> orders =
613
		 * orderRepository.selectByOrderIds(orderIds);
614
		 * orders.stream().filter(x->Arrays.asList(OrderStatus.PAYMENT_PENDING,
615
		 * OrderStatus.PAYMENT_FAILED). contains(x.getStatus())).forEach(x->{
616
		 * SaholicReservationInventorySnapshot snapshot =
617
		 * reservationInventorySnapshotsMap.get(x.getId()); try {
618
		 * saholicInventorySnapshotRepository.reduceReservationCount(snapshot.getItemId(
619
		 * ), snapshot.getWarehouseId(), snapshot.getReserved(), snapshot.getOrderId());
620
		 * System.out.printf("%d Reduced by %d for Order Id %d\n",snapshot.getItemId(),
621
		 * snapshot.getReserved(), snapshot.getOrderId()); }
622
		 * catch(ProfitMandiBusinessException e) {
623
		 * LOGGER.info("Problem whiile reducing count for Order Id - {}",
624
		 * snapshot.getOrderId()); } });
625
		 */
626
		// throw new Exception();
24953 amit.gupta 627
	}
628
 
25034 amit.gupta 629
	public void fixSchemePayouts() throws Exception {
25524 amit.gupta 630
		LOGGER.info("In fix scheme Payouts");
25522 amit.gupta 631
		LocalDateTime startDate = LocalDate.of(2019, 9, 1).atStartOfDay();
632
		List<SchemeInOut> sios = schemeInOutRepository.selectAllByCreateDate(startDate, LocalDateTime.now());
25530 amit.gupta 633
 
25034 amit.gupta 634
		for (SchemeInOut sio : sios) {
25530 amit.gupta 635
			if (sio.getSchemeId() != 347) {
25523 amit.gupta 636
				LOGGER.info("Skipping {}", sio.getSchemeId());
25522 amit.gupta 637
				continue;
638
			}
25043 amit.gupta 639
			genericRepository.delete(sio);
25522 amit.gupta 640
			InventoryItem ii = inventoryItemRepository.selectById(sio.getInventoryItemId());
641
			UserWallet userWallet = userWalletRepository.selectByRetailerId(ii.getFofoId());
642
			Scheme scheme = schemeRepository.selectById(sio.getSchemeId());
643
			if (scheme.getType().equals(SchemeType.IN)) {
644
				List<UserWalletHistory> historyList = userWalletHistoryRepository
645
						.selectAllByreferenceIdandreferenceType(ii.getPurchaseId(), WalletReferenceType.SCHEME_IN);
646
				for (UserWalletHistory uwh : historyList) {
25530 amit.gupta 647
					if (uwh.getTimestamp().isAfter(startDate)) {
25522 amit.gupta 648
						genericRepository.delete(uwh);
649
						userWallet.setAmount(userWallet.getAmount() - uwh.getAmount());
650
					}
651
				}
652
			} else {
653
				List<ScanRecord> scanRecords = scanRecordRepository.selectByInventoryItemId(ii.getId());
654
				int orderId = scanRecords.get(0).getOrderId();
655
				List<UserWalletHistory> historyList = userWalletHistoryRepository
656
						.selectAllByreferenceIdandreferenceType(orderId, WalletReferenceType.SCHEME_OUT);
657
				for (UserWalletHistory uwh : historyList) {
25530 amit.gupta 658
					if (uwh.getTimestamp().isAfter(startDate)) {
25522 amit.gupta 659
						userWallet.setAmount(userWallet.getAmount() - uwh.getAmount());
660
						genericRepository.delete(uwh);
661
					}
662
				}
663
				List<UserWalletHistory> historyListBroken = userWalletHistoryRepository
25530 amit.gupta 664
						.selectAllByreferenceIdandreferenceType(ii.getPurchaseId(), WalletReferenceType.SCHEME_OUT);
25522 amit.gupta 665
				for (UserWalletHistory uwh : historyListBroken) {
25530 amit.gupta 666
					if (uwh.getTimestamp().isAfter(startDate)) {
25522 amit.gupta 667
						genericRepository.delete(uwh);
668
						userWallet.setAmount(userWallet.getAmount() - uwh.getAmount());
669
					}
670
				}
671
			}
672
 
25530 amit.gupta 673
			// System.out.println("Total Amount Rolled Back is " + totalRollbackAmount);
25516 amit.gupta 674
		}
25589 amit.gupta 675
		scheduledTasks.processScheme(startDate, startDate.plusDays(10), true);
25030 amit.gupta 676
	}
25530 amit.gupta 677
 
678
	public void fixWallet() throws Exception {
679
		List<FofoStore> fofoStores = fofoStoreRepository.selectAll();
25536 amit.gupta 680
		System.out.println("id\tcode\tactive\tname\tcity\tstate\twallet amount\tsum\twallet amount-sum");
25530 amit.gupta 681
		for (FofoStore fofoStore : fofoStores) {
682
			UserWallet uw = userWalletRepository.selectByRetailerId(fofoStore.getId());
683
			User user = userRepository.selectById(fofoStore.getId());
25749 amit.gupta 684
			if (user == null) {
25533 amit.gupta 685
				LOGGER.info("store does not exist", fofoStore.getCode());
25535 amit.gupta 686
				continue;
25533 amit.gupta 687
			}
25536 amit.gupta 688
			Address address = null;
689
			try {
690
				address = addressRepository.selectById(user.getAddressId());
25749 amit.gupta 691
			} catch (Exception e) {
25536 amit.gupta 692
				LOGGER.info("Could not find address for Store", fofoStore.getCode());
693
				address = new Address();
694
			}
25539 amit.gupta 695
			double sum = userWalletHistoryRepository.selectSumByWallet(uw.getId());
25749 amit.gupta 696
			int calculated = (int) sum;
697
			System.out.printf("%d\t%s\t%b\t%s\t%s\t%s\t%d\t%d\t%d%n", fofoStore.getId(), fofoStore.getCode(),
698
					fofoStore.isActive(), address.getName(), address.getCity(), address.getState(), uw.getAmount(),
699
					calculated, uw.getAmount() - calculated);
25530 amit.gupta 700
		}
701
	}
25749 amit.gupta 702
 
25734 amit.gupta 703
	public void changeWarehouse() throws Exception {
704
		transactionService.moveWarehouses();
705
	}
25749 amit.gupta 706
 
707
	public void mailDashboardScreenshots() throws Exception {
708
		System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver");
709
 
710
		WebDriver driver = new ChromeDriver();
711
		driver.manage().window().maximize();
712
		//Deleting all the cookies
713
		driver.manage().deleteAllCookies();
714
		//Specifiying pageLoadTimeout and Implicit wait
715
		driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
716
		driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
717
		Map<String, Set<Integer>> authUserPartnerIdMapping = csService.getAuthUserPartnerIdMapping();
718
		Set<Integer> allPartners = new HashSet<>();
719
		Map<Integer, String> partnerSnapshotMap = new HashMap<>();
720
		authUserPartnerIdMapping.values().stream().forEach(x->allPartners.addAll(x));
721
		System.out.println(allPartners.size());
722
		for(int fofoId : allPartners) {
723
			driver.get("https://partners.smartdukaan.com/12dashboard34?fofoId=" + fofoId);
724
			String base64Image = ((TakesScreenshot)driver).getScreenshotAs(OutputType.BASE64);
725
			partnerSnapshotMap.put(fofoId, base64Image);
726
 
727
		}
728
		for(Map.Entry<String, Set<Integer>> entry : authUserPartnerIdMapping.entrySet()) {
729
			String email = entry.getKey();
730
			Set<Integer> partnerIds = entry.getValue();
731
			StringBuffer body = new StringBuffer();
732
			for(int fofoId: partnerIds) {
733
				body.append(String.format("<br><image src=\"%s\" />", partnerSnapshotMap.get(fofoId)));
734
			}
735
			Utils.sendHtmlMailWithAttachments(mailSender, new String[]{"amit.gupta@shop2020.in"}, new String[] {}, String.format("Franchise Screenshots - %s", FormattingUtils.formatDate(LocalDateTime.now())), body.toString());
736
		}
737
		driver.quit();
738
	}
25043 amit.gupta 739
}
740
 
741
//7015845171