Subversion Repositories SmartDukaan

Rev

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