Subversion Repositories SmartDukaan

Rev

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

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