Subversion Repositories SmartDukaan

Rev

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