Subversion Repositories SmartDukaan

Rev

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