Subversion Repositories SmartDukaan

Rev

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