Subversion Repositories SmartDukaan

Rev

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