Subversion Repositories SmartDukaan

Rev

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