Subversion Repositories SmartDukaan

Rev

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

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