Subversion Repositories SmartDukaan

Rev

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