Subversion Repositories SmartDukaan

Rev

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