Subversion Repositories SmartDukaan

Rev

Rev 31446 | Rev 31918 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 31446 Rev 31461
Line 95... Line 95...
95
import org.openqa.selenium.chrome.ChromeDriver;
95
import org.openqa.selenium.chrome.ChromeDriver;
96
import org.openqa.selenium.chrome.ChromeOptions;
96
import org.openqa.selenium.chrome.ChromeOptions;
97
import org.springframework.beans.factory.annotation.Autowired;
97
import org.springframework.beans.factory.annotation.Autowired;
98
import org.springframework.core.io.ByteArrayResource;
98
import org.springframework.core.io.ByteArrayResource;
99
import org.springframework.mail.javamail.JavaMailSender;
99
import org.springframework.mail.javamail.JavaMailSender;
-
 
100
import org.springframework.security.core.parameters.P;
100
import org.springframework.stereotype.Component;
101
import org.springframework.stereotype.Component;
101
import org.springframework.transaction.annotation.Transactional;
102
import org.springframework.transaction.annotation.Transactional;
102
 
103
 
103
import java.io.File;
104
import java.io.File;
104
import java.io.FileInputStream;
105
import java.io.FileInputStream;
105
import java.io.IOException;
106
import java.io.IOException;
106
import java.time.LocalDate;
-
 
107
import java.time.LocalDateTime;
-
 
108
import java.time.LocalTime;
-
 
109
import java.time.Month;
107
import java.time.*;
110
import java.time.temporal.ChronoUnit;
108
import java.time.temporal.ChronoUnit;
111
import java.util.*;
109
import java.util.*;
112
import java.util.concurrent.TimeUnit;
110
import java.util.concurrent.TimeUnit;
113
import java.util.stream.Collectors;
111
import java.util.stream.Collectors;
114
 
112
 
115
@Component
113
@Component
116
@Transactional(rollbackFor = Throwable.class)
114
@Transactional(rollbackFor = Throwable.class)
117
public class RunOnceTasks {
115
public class RunOnceTasks {
118
 
116
 
119
	private static final Logger LOGGER = LogManager.getLogger(RunOnceTasks.class);
117
    private static final Logger LOGGER = LogManager.getLogger(RunOnceTasks.class);
120
	@Autowired
118
    @Autowired
121
	private LineItemRepository lineItemRepository;
119
    private LineItemRepository lineItemRepository;
122
 
120
 
123
	@Autowired
121
    @Autowired
124
	private LeadRepository leadRepository;
122
    private LeadRepository leadRepository;
125
 
123
 
126
	@Autowired
124
    @Autowired
127
	InsuranceService insuranceService;
125
    InsuranceService insuranceService;
128
 
126
 
129
	@Autowired
127
    @Autowired
130
	private VendorItemPricingRepository vendorItemPricingRepository;
128
    private VendorItemPricingRepository vendorItemPricingRepository;
131
 
129
 
132
	@Autowired
130
    @Autowired
133
	private WarehouseRepository warehouseRepository;
131
    private WarehouseRepository warehouseRepository;
134
 
132
 
135
	@Autowired
133
    @Autowired
136
	private PurchaseReturnItemRepository purchaseReturnItemRepository;
134
    private PurchaseReturnItemRepository purchaseReturnItemRepository;
137
 
135
 
138
	@Autowired
136
    @Autowired
139
	private SaholicInventorySnapshotRepository saholicInventorySnapshotRepository;
137
    private SaholicInventorySnapshotRepository saholicInventorySnapshotRepository;
140
 
138
 
141
	@Autowired
139
    @Autowired
142
	private CsService csService;
140
    private CsService csService;
143
 
141
 
144
	@Autowired
142
    @Autowired
145
	private ManualPaymentRequestRepository manualPaymentRequestRepository;
143
    private ManualPaymentRequestRepository manualPaymentRequestRepository;
146
 
144
 
147
	@Autowired
145
    @Autowired
148
	private OfferRepository offerRepository;
146
    private OfferRepository offerRepository;
149
 
147
 
150
	@Autowired
148
    @Autowired
151
	private Mongo mongoClient;
149
    private Mongo mongoClient;
152
 
150
 
153
	@Autowired
151
    @Autowired
154
	private Gson gson;
152
    private Gson gson;
155
 
153
 
156
	@Autowired
154
    @Autowired
157
	private PaymentOptionTransactionRepository paymentOptionTransactionRepository;
155
    private PaymentOptionTransactionRepository paymentOptionTransactionRepository;
158
 
156
 
159
	@Autowired
157
    @Autowired
160
	private OppoImeiActivationService oppoImeiActivationService;
158
    private OppoImeiActivationService oppoImeiActivationService;
161
 
159
 
162
	@Autowired
160
    @Autowired
163
	private SamsungIMEIActivationService samsungIMEIActivationService;
161
    private SamsungIMEIActivationService samsungIMEIActivationService;
164
 
162
 
165
	@Autowired
163
    @Autowired
166
	private PrebookingOrderRepository prebookingOrderRepository;
164
    private PrebookingOrderRepository prebookingOrderRepository;
167
 
165
 
168
	@Autowired
166
    @Autowired
169
	private PartnerTargetRepository partnerTargetRepository;
167
    private PartnerTargetRepository partnerTargetRepository;
170
 
168
 
171
	@Autowired
169
    @Autowired
172
	private SellerWarehouseRepository sellerWarehouseRepository;
170
    private SellerWarehouseRepository sellerWarehouseRepository;
173
 
171
 
174
	@Autowired
172
    @Autowired
175
	private FofoOrderItemRepository fofoOrderItemRepository;
173
    private FofoOrderItemRepository fofoOrderItemRepository;
176
 
174
 
177
	@Autowired
175
    @Autowired
178
	private FofoLineItemRepository fofoLineItemRepository;
176
    private FofoLineItemRepository fofoLineItemRepository;
179
 
177
 
180
	@Autowired
178
    @Autowired
181
	private FofoOrderRepository fofoOrderRepository;
179
    private FofoOrderRepository fofoOrderRepository;
182
 
180
 
183
	@Autowired
181
    @Autowired
184
	private UserWalletRepository userWalletRepository;
182
    private UserWalletRepository userWalletRepository;
185
 
183
 
186
	@Autowired
184
    @Autowired
187
	private UserWalletHistoryRepository userWalletHistoryRepository;
185
    private UserWalletHistoryRepository userWalletHistoryRepository;
188
 
186
 
189
	@Autowired
187
    @Autowired
190
	private UserRepository userRepository;
188
    private UserRepository userRepository;
191
 
189
 
192
	@Autowired
190
    @Autowired
193
	private WalletService walletService;
191
    private WalletService walletService;
194
 
192
 
195
	@Autowired
193
    @Autowired
196
	private ItemRepository itemRepository;
194
    private ItemRepository itemRepository;
197
 
195
 
198
	@Autowired
196
    @Autowired
199
	private InventoryService inventoryService;
197
    private InventoryService inventoryService;
200
 
198
 
201
	@Autowired
199
    @Autowired
202
	private TransactionService transactionService;
200
    private TransactionService transactionService;
203
 
201
 
204
	@Autowired
202
    @Autowired
205
	private PurchaseService purchaseService;
203
    private PurchaseService purchaseService;
206
 
204
 
207
	// Service for Tertiary/Partner Orders
205
    // Service for Tertiary/Partner Orders
208
	@Autowired
206
    @Autowired
209
	private OrderService orderService;
207
    private OrderService orderService;
210
 
208
 
211
	@Autowired
209
    @Autowired
212
	private SchemeRepository schemeRepository;
210
    private SchemeRepository schemeRepository;
213
 
211
 
214
	@Autowired
212
    @Autowired
215
	private AddressRepository addressRepository;
213
    private AddressRepository addressRepository;
216
 
214
 
217
	@Autowired
215
    @Autowired
218
	private ScheduledTasks scheduledTasks;
216
    private ScheduledTasks scheduledTasks;
219
 
217
 
220
	@Autowired
218
    @Autowired
221
	private SchemeItemRepository schemeItemRepository;
219
    private SchemeItemRepository schemeItemRepository;
222
 
220
 
223
	@Autowired
221
    @Autowired
224
	private ReturnOrderRepository returnOrderRepository;
222
    private ReturnOrderRepository returnOrderRepository;
225
 
223
 
226
	@Autowired
224
    @Autowired
227
	private FofoStoreRepository fofoStoreRepository;
225
    private FofoStoreRepository fofoStoreRepository;
228
 
226
 
229
	@Autowired
227
    @Autowired
230
	private LineItemImeisRepository lineItemImeisRepository;
228
    private LineItemImeisRepository lineItemImeisRepository;
231
 
229
 
232
	@Autowired
230
    @Autowired
233
	private InventoryItemRepository inventoryItemRepository;
231
    private InventoryItemRepository inventoryItemRepository;
234
 
232
 
235
	@Autowired
233
    @Autowired
236
	private TagListingRepository tagListingRepository;
234
    private TagListingRepository tagListingRepository;
237
 
235
 
238
	@Autowired
236
    @Autowired
239
	private InvoiceNumberGenerationSequenceRepository invoiceNumberGenerationSequenceRepository;
237
    private InvoiceNumberGenerationSequenceRepository invoiceNumberGenerationSequenceRepository;
240
 
238
 
241
	@Autowired
239
    @Autowired
242
	private RetailerService retailerService;
240
    private RetailerService retailerService;
243
 
241
 
244
	@Autowired
242
    @Autowired
245
	private SchemeInOutRepository schemeInOutRepository;
243
    private SchemeInOutRepository schemeInOutRepository;
246
 
244
 
247
	@Autowired
245
    @Autowired
248
	private DebitNoteRepository debitNoteRepository;
246
    private DebitNoteRepository debitNoteRepository;
249
 
247
 
250
	@Autowired
248
    @Autowired
251
	private OfferService offerService;
249
    private OfferService offerService;
252
 
250
 
253
	@Autowired
251
    @Autowired
254
	private GenericRepository genericRepository;
252
    private GenericRepository genericRepository;
255
 
253
 
256
	@Autowired
254
    @Autowired
257
	private PurchaseRepository purchaseRepository;
255
    private PurchaseRepository purchaseRepository;
258
 
256
 
259
	@Autowired
257
    @Autowired
260
	private PriceDropService priceDropService;
258
    private PriceDropService priceDropService;
261
 
259
 
262
	@Autowired
260
    @Autowired
263
	private JavaMailSender googleMailSender;
261
    private JavaMailSender googleMailSender;
264
 
262
 
265
	@Autowired
263
    @Autowired
266
	private SchemeService schemeService;
264
    private SchemeService schemeService;
267
 
265
 
268
	@Autowired
266
    @Autowired
269
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
267
    private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
270
 
268
 
271
	@Autowired
269
    @Autowired
272
	private OrderRepository orderRepository;
270
    private OrderRepository orderRepository;
273
 
271
 
274
	@Autowired
272
    @Autowired
275
	private ScanRecordRepository scanRecordRepository;
273
    private ScanRecordRepository scanRecordRepository;
276
 
274
 
277
	@Autowired
275
    @Autowired
278
	private JavaMailSender mailSender;
276
    private JavaMailSender mailSender;
279
 
277
 
280
	private static final String ACCOUNT_ID = "aZ6flHhrgPIEl18buHdPBdueEN4";
278
    private static final String ACCOUNT_ID = "aZ6flHhrgPIEl18buHdPBdueEN4";
281
	private static final String SECRET_KEY = "a7rsX5B4UNNfTTx1-IJ19qdH48BT4YvBKlQJg3n3_KKNe7WWych55g";
279
    private static final String SECRET_KEY = "a7rsX5B4UNNfTTx1-IJ19qdH48BT4YvBKlQJg3n3_KKNe7WWych55g";
282
 
280
 
283
	@Autowired
281
    @Autowired
284
	private WarehouseInventoryItemRepository warehouseInventoryItemRepository;
282
    private WarehouseInventoryItemRepository warehouseInventoryItemRepository;
285
 
283
 
286
	public void populateGrnTimestamp() {
284
    public void populateGrnTimestamp() {
287
		List<Purchase> allPurchases = purchaseRepository.selectAll();
285
        List<Purchase> allPurchases = purchaseRepository.selectAll();
288
		for (Purchase p : allPurchases) {
286
        for (Purchase p : allPurchases) {
289
			String invoiceNumber = p.getPurchaseReference();
287
            String invoiceNumber = p.getPurchaseReference();
290
			if (p.getCompleteTimestamp() == null) {
288
            if (p.getCompleteTimestamp() == null) {
291
				LOGGER.info("GRN for invoice {} is delivered but partially Completed.", p.getPurchaseReference());
289
                LOGGER.info("GRN for invoice {} is delivered but partially Completed.", p.getPurchaseReference());
292
			} else {
290
            } else {
293
				List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(invoiceNumber, p.getFofoId());
291
                List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(invoiceNumber, p.getFofoId());
294
				for (Order order : orders) {
292
                for (Order order : orders) {
295
					if (order.getPartnerGrnTimestamp() == null) {
293
                    if (order.getPartnerGrnTimestamp() == null) {
296
						order.setPartnerGrnTimestamp(p.getCompleteTimestamp());
294
                        order.setPartnerGrnTimestamp(p.getCompleteTimestamp());
297
					}
295
                    }
298
				}
296
                }
299
			}
297
            }
300
		}
298
        }
301
 
299
 
302
	}
300
    }
303
 
301
 
304
	public void fetchImeiActivation(int ym) throws Exception {
302
    public void fetchImeiActivation(int ym) throws Exception {
305
		LocalDate startDate = null;
303
        LocalDate startDate = null;
306
		LocalDate endDate = null;
304
        LocalDate endDate = null;
307
		if (ym == 0) {
305
        if (ym == 0) {
308
			startDate = LocalDate.now().minusDays(30);
306
            startDate = LocalDate.now().minusDays(30);
309
			endDate = LocalDate.now();
307
            endDate = LocalDate.now();
310
		} else {
308
        } else {
311
			startDate = LocalDate.now().minusMonths(ym);
309
            startDate = LocalDate.now().minusMonths(ym);
312
			endDate = startDate.plusMonths(1);
310
            endDate = startDate.plusMonths(1);
313
		}
311
        }
314
		samsungIMEIActivationService.getActivationsBetweenNew(startDate, endDate);
312
        samsungIMEIActivationService.getActivationsBetweenNew(startDate, endDate);
315
	}
313
    }
316
 
314
 
317
	public void cancelOrder(List<String> invoiceNumbers) throws Exception {
315
    public void cancelOrder(List<String> invoiceNumbers) throws Exception {
318
		orderService.cancelOrder(invoiceNumbers);
316
        orderService.cancelOrder(invoiceNumbers);
319
	}
317
    }
320
 
318
 
321
	@Autowired
319
    @Autowired
322
	HdfcPaymentRepository hdfcPaymentRepository;
320
    HdfcPaymentRepository hdfcPaymentRepository;
323
 
321
 
324
	public void addPayment() throws Exception {
322
    public void addPayment() throws Exception {
325
		List<Integer> paymentIds = Arrays.asList(3777);
323
        List<Integer> paymentIds = Arrays.asList(3777);
326
		for (int hdfcPaymentId : paymentIds) {
324
        for (int hdfcPaymentId : paymentIds) {
327
			HdfcPayment hdfcPayment = hdfcPaymentRepository.selectById(hdfcPaymentId);
325
            HdfcPayment hdfcPayment = hdfcPaymentRepository.selectById(hdfcPaymentId);
328
			String virtualAccount = hdfcPayment.getVirtualAccount();
326
            String virtualAccount = hdfcPayment.getVirtualAccount();
329
			String retailerIdString = virtualAccount.substring(6);
327
            String retailerIdString = virtualAccount.substring(6);
330
			int retailerId = Integer.parseInt(retailerIdString);
328
            int retailerId = Integer.parseInt(retailerIdString);
331
			String description = String.format("Advance payment received through %s, Utr# %s",
329
            String description = String.format("Advance payment received through %s, Utr# %s",
332
					hdfcPayment.getTransferMode(), hdfcPayment.getUtr());
330
                    hdfcPayment.getTransferMode(), hdfcPayment.getUtr());
333
			walletService.addAmountToWallet(retailerId, hdfcPayment.getId(), WalletReferenceType.AUTOMATED_ADVANCE,
331
            walletService.addAmountToWallet(retailerId, hdfcPayment.getId(), WalletReferenceType.AUTOMATED_ADVANCE,
334
					description, (float) hdfcPayment.getAmount(), hdfcPayment.getCreditTimestamp());
332
                    description, (float) hdfcPayment.getAmount(), hdfcPayment.getCreditTimestamp());
335
		}
333
        }
336
	}
334
    }
337
 
335
 
338
	// Bug in original migrate purchase
336
    // Bug in original migrate purchase
339
	public void migratePurchase() throws Exception {
337
    public void migratePurchase() throws Exception {
340
		List<Purchase> purchases = purchaseRepository.selectPurchaseAllPurchasesLessThanZero();
338
        List<Purchase> purchases = purchaseRepository.selectPurchaseAllPurchasesLessThanZero();
341
		for (Purchase purchase : purchases) {
339
        for (Purchase purchase : purchases) {
342
			List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchase.getId());
340
            List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchase.getId());
343
			for (InventoryItem ii : inventoryItems) {
341
            for (InventoryItem ii : inventoryItems) {
344
				List<ScanRecord> scans = scanRecordRepository.selectByInventoryItemId(ii.getId());
342
                List<ScanRecord> scans = scanRecordRepository.selectByInventoryItemId(ii.getId());
345
				if (scans.size() == 1 && scans.get(0).getQuantity() == 0) {
343
                if (scans.size() == 1 && scans.get(0).getQuantity() == 0) {
346
					scanRecordRepository.delete(scans.get(0));
344
                    scanRecordRepository.delete(scans.get(0));
347
					purchase.setNonSerializedQuantity(purchase.getNonSerializedQuantity() - ii.getInitialQuantity());
345
                    purchase.setNonSerializedQuantity(purchase.getNonSerializedQuantity() - ii.getInitialQuantity());
348
					inventoryItemRepository.delete(ii);
346
                    inventoryItemRepository.delete(ii);
349
				}
347
                }
350
 
348
 
351
			}
349
            }
352
 
350
 
353
		}
351
        }
354
	}
352
    }
355
 
353
 
356
	public void migratePurchaseFix() throws Exception {
354
    public void migratePurchaseFix() throws Exception {
357
		List<Purchase> purchases = purchaseRepository.selectPurchaseAllPurchasesLessThanZero();
355
        List<Purchase> purchases = purchaseRepository.selectPurchaseAllPurchasesLessThanZero();
358
		System.out.printf("Total Purchases count is %s", purchases.size());
356
        System.out.printf("Total Purchases count is %s", purchases.size());
359
		for (Purchase purchase : purchases) {
357
        for (Purchase purchase : purchases) {
360
			List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchase.getId());
358
            List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchase.getId());
361
			Map<Integer, List<InventoryItem>> itemIdInventoryMap = inventoryItems.stream()
359
            Map<Integer, List<InventoryItem>> itemIdInventoryMap = inventoryItems.stream()
362
					.collect(Collectors.groupingBy(InventoryItem::getItemId));
360
                    .collect(Collectors.groupingBy(InventoryItem::getItemId));
363
			List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(purchase.getPurchaseReference(),
361
            List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(purchase.getPurchaseReference(),
364
					purchase.getFofoId());
362
                    purchase.getFofoId());
365
			Map<Integer, Integer> ourSaleItemQtyMap = orders.stream().collect(Collectors.groupingBy(
363
            Map<Integer, Integer> ourSaleItemQtyMap = orders.stream().collect(Collectors.groupingBy(
366
					x -> x.getLineItem().getItemId(), Collectors.summingInt(x -> x.getLineItem().getQuantity())));
364
                    x -> x.getLineItem().getItemId(), Collectors.summingInt(x -> x.getLineItem().getQuantity())));
367
			Map<Integer, Integer> theirPurchaseItemQtyMap = inventoryItems.stream().collect(Collectors
365
            Map<Integer, Integer> theirPurchaseItemQtyMap = inventoryItems.stream().collect(Collectors
368
					.groupingBy(InventoryItem::getItemId, Collectors.summingInt(InventoryItem::getInitialQuantity)));
366
                    .groupingBy(InventoryItem::getItemId, Collectors.summingInt(InventoryItem::getInitialQuantity)));
369
			for (Map.Entry<Integer, Integer> itemQtyEntry : theirPurchaseItemQtyMap.entrySet()) {
367
            for (Map.Entry<Integer, Integer> itemQtyEntry : theirPurchaseItemQtyMap.entrySet()) {
370
				if (!ourSaleItemQtyMap.containsKey(itemQtyEntry.getKey())) {
368
                if (!ourSaleItemQtyMap.containsKey(itemQtyEntry.getKey())) {
371
					LOGGER.info("Cannot find in Invoice {} item {}", purchase.getPurchaseReference(),
369
                    LOGGER.info("Cannot find in Invoice {} item {}", purchase.getPurchaseReference(),
372
							itemQtyEntry.getKey());
370
                            itemQtyEntry.getKey());
373
					continue;
371
                    continue;
374
				}
372
                }
375
				int ourSale = ourSaleItemQtyMap.get(itemQtyEntry.getKey());
373
                int ourSale = ourSaleItemQtyMap.get(itemQtyEntry.getKey());
376
				int quantityToReduce = itemQtyEntry.getValue() - ourSale;
374
                int quantityToReduce = itemQtyEntry.getValue() - ourSale;
377
				List<InventoryItem> itemIis = itemIdInventoryMap.get(itemQtyEntry.getKey());
375
                List<InventoryItem> itemIis = itemIdInventoryMap.get(itemQtyEntry.getKey());
378
				if (itemIdInventoryMap != null) {
376
                if (itemIdInventoryMap != null) {
379
					for (InventoryItem ii : itemIis) {
377
                    for (InventoryItem ii : itemIis) {
380
						if (ii.getSerialNumber() == null && ii.getGoodQuantity() == ii.getInitialQuantity()
378
                        if (ii.getSerialNumber() == null && ii.getGoodQuantity() == ii.getInitialQuantity()
381
								&& quantityToReduce >= ii.getInitialQuantity()) {
379
                                && quantityToReduce >= ii.getInitialQuantity()) {
382
							LOGGER.info("Changed in inventoryItems {}, {}, {}, {}, {}, {}",
380
                            LOGGER.info("Changed in inventoryItems {}, {}, {}, {}, {}, {}",
383
									purchase.getPurchaseReference(), ii.getId(), ii.getItemId(),
381
                                    purchase.getPurchaseReference(), ii.getId(), ii.getItemId(),
384
									ii.getInitialQuantity(), ii.getGoodQuantity(), quantityToReduce);
382
                                    ii.getInitialQuantity(), ii.getGoodQuantity(), quantityToReduce);
385
							List<ScanRecord> scanRecords = scanRecordRepository.selectByInventoryItemId(ii.getId());
383
                            List<ScanRecord> scanRecords = scanRecordRepository.selectByInventoryItemId(ii.getId());
386
							for (ScanRecord scanRecord : scanRecords) {
384
                            for (ScanRecord scanRecord : scanRecords) {
387
								CurrentInventorySnapshot cis = currentInventorySnapshotRepository
385
                                CurrentInventorySnapshot cis = currentInventorySnapshotRepository
388
										.selectByItemIdAndFofoId(itemQtyEntry.getKey(), purchase.getFofoId());
386
                                        .selectByItemIdAndFofoId(itemQtyEntry.getKey(), purchase.getFofoId());
389
								scanRecord.setQuantity(0);
387
                                scanRecord.setQuantity(0);
390
								ii.setGoodQuantity(0);
388
                                ii.setGoodQuantity(0);
391
								quantityToReduce = quantityToReduce - ii.getInitialQuantity();
389
                                quantityToReduce = quantityToReduce - ii.getInitialQuantity();
392
								cis.setAvailability(cis.getAvailability() - ii.getInitialQuantity());
390
                                cis.setAvailability(cis.getAvailability() - ii.getInitialQuantity());
393
								purchase.setUnfullfilledNonSerializedQuantity(
391
                                purchase.setUnfullfilledNonSerializedQuantity(
394
										purchase.getUnfullfilledNonSerializedQuantity() + quantityToReduce);
392
                                        purchase.getUnfullfilledNonSerializedQuantity() + quantityToReduce);
395
								LOGGER.info("Rectified {}, {}, {}, {}, {}, {}", purchase.getPurchaseReference(),
393
                                LOGGER.info("Rectified {}, {}, {}, {}, {}, {}", purchase.getPurchaseReference(),
396
										ii.getId(), ii.getItemId(), ii.getInitialQuantity(), ii.getGoodQuantity(),
394
                                        ii.getId(), ii.getItemId(), ii.getInitialQuantity(), ii.getGoodQuantity(),
397
										quantityToReduce);
395
                                        quantityToReduce);
398
							}
396
                            }
399
						}
397
                        }
400
					}
398
                    }
401
				}
399
                }
402
			}
400
            }
403
		}
401
        }
404
		// throw new Exception();
402
        // throw new Exception();
405
	}
403
    }
406
 
404
 
407
	public void migrateChallansToInvoices() throws Exception {
405
    public void migrateChallansToInvoices() throws Exception {
408
		Map<String, List<Order>> invoiceOrdersMap = orderRepository.selectAllChallans().stream()
406
        Map<String, List<Order>> invoiceOrdersMap = orderRepository.selectAllChallans().stream()
409
				.filter(x -> !x.getLineItem().getHsnCode().equals("NOGST"))
407
                .filter(x -> !x.getLineItem().getHsnCode().equals("NOGST"))
410
				.collect(Collectors.groupingBy(Order::getInvoiceNumber, Collectors.toList()));
408
                .collect(Collectors.groupingBy(Order::getInvoiceNumber, Collectors.toList()));
411
 
409
 
412
		List<List<?>> rows = new ArrayList<>();
410
        List<List<?>> rows = new ArrayList<>();
413
		for (String invoice : invoiceOrdersMap.keySet()) {
411
        for (String invoice : invoiceOrdersMap.keySet()) {
414
			Order oneOrder = invoiceOrdersMap.get(invoice).get(0);
412
            Order oneOrder = invoiceOrdersMap.get(invoice).get(0);
415
			int totalOrders = invoiceOrdersMap.get(invoice).size();
413
            int totalOrders = invoiceOrdersMap.get(invoice).size();
416
			LineItem lineItem = oneOrder.getLineItem();
414
            LineItem lineItem = oneOrder.getLineItem();
417
			oneOrder.setBillingTimestamp(LocalDateTime.now());
415
            oneOrder.setBillingTimestamp(LocalDateTime.now());
418
			oneOrder.setInvoiceNumber(getInvoiceNumber(oneOrder));
416
            oneOrder.setInvoiceNumber(getInvoiceNumber(oneOrder));
419
			rows.add(Arrays.asList(oneOrder.getId(), invoice, oneOrder.getInvoiceNumber(), lineItem.getQuantity()));
417
            rows.add(Arrays.asList(oneOrder.getId(), invoice, oneOrder.getInvoiceNumber(), lineItem.getQuantity()));
420
			LOGGER.info(invoice + "\t" + oneOrder.getInvoiceNumber() + oneOrder.getId() + "\t",
418
            LOGGER.info(invoice + "\t" + oneOrder.getInvoiceNumber() + oneOrder.getId() + "\t",
421
					"\t" + totalOrders + "\t" + lineItem.getQuantity());
419
                    "\t" + totalOrders + "\t" + lineItem.getQuantity());
422
			Purchase p = null;
420
            Purchase p = null;
423
			try {
421
            try {
424
				p = purchaseRepository.selectByPurchaseReferenceAndFofoId(invoice, oneOrder.getRetailerId());
422
                p = purchaseRepository.selectByPurchaseReferenceAndFofoId(invoice, oneOrder.getRetailerId());
425
			} catch (Exception e) {
423
            } catch (Exception e) {
426
				LOGGER.info("Could not find purchase for invoice {}", invoice);
424
                LOGGER.info("Could not find purchase for invoice {}", invoice);
427
			}
425
            }
428
			if (p != null) {
426
            if (p != null) {
429
				List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(p.getId());
427
                List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(p.getId());
430
				for (InventoryItem inventoryItem : inventoryItems) {
428
                for (InventoryItem inventoryItem : inventoryItems) {
431
					LOGGER.info(inventoryItem.getItemId() + " " + inventoryItem.getGoodQuantity() + " "
429
                    LOGGER.info(inventoryItem.getItemId() + " " + inventoryItem.getGoodQuantity() + " "
432
							+ inventoryItem.getHsnCode() + " " + inventoryItem.getSerialNumber() + " "
430
                            + inventoryItem.getHsnCode() + " " + inventoryItem.getSerialNumber() + " "
433
							+ p.getPurchaseReference());
431
                            + p.getPurchaseReference());
434
				}
432
                }
435
			}
433
            }
436
 
434
 
437
		}
435
        }
438
		changePartnerInvoices();
436
        changePartnerInvoices();
439
		ByteArrayOutputStream baos = FileUtil
437
        ByteArrayOutputStream baos = FileUtil
440
				.getCSVByteStream(Arrays.asList("Order id", "Challan", "Invoice", "Quantity"), rows);
438
                .getCSVByteStream(Arrays.asList("Order id", "Challan", "Invoice", "Quantity"), rows);
441
 
439
 
442
		Utils.sendMailWithAttachment(googleMailSender,
440
        Utils.sendMailWithAttachment(googleMailSender,
443
				new String[]{"amit.gupta@shop2020.in", "sunny.yadav@smartdukaan.com"}, null,
441
                new String[]{"amit.gupta@shop2020.in", "sunny.yadav@smartdukaan.com"}, null,
444
				"Challans Converted to Invoice", "PFA", "Challans-To-Invoice.csv",
442
                "Challans Converted to Invoice", "PFA", "Challans-To-Invoice.csv",
445
				new ByteArrayResource(baos.toByteArray()));
443
                new ByteArrayResource(baos.toByteArray()));
446
		throw new Exception();
444
        throw new Exception();
447
	}
445
    }
448
 
446
 
449
	private String getInvoiceNumber(Order oneOrder) {
447
    private String getInvoiceNumber(Order oneOrder) {
450
		String prefix = oneOrder.getInvoiceNumber().split("-")[1].replaceAll("\\d*", "");
448
        String prefix = oneOrder.getInvoiceNumber().split("-")[1].replaceAll("\\d*", "");
451
		System.out.println("Prefix is " + prefix);
449
        System.out.println("Prefix is " + prefix);
452
		SellerWarehouse sellerWarehouse = sellerWarehouseRepository.selectByPrefix(prefix);
450
        SellerWarehouse sellerWarehouse = sellerWarehouseRepository.selectByPrefix(prefix);
453
		int newSequence = sellerWarehouse.getInvoiceSequence() + 1;
451
        int newSequence = sellerWarehouse.getInvoiceSequence() + 1;
454
		sellerWarehouse.setInvoiceSequence(newSequence);
452
        sellerWarehouse.setInvoiceSequence(newSequence);
455
		return prefix + newSequence;
453
        return prefix + newSequence;
456
	}
454
    }
457
 
455
 
458
	private void changePartnerInvoices() throws Exception {
456
    private void changePartnerInvoices() throws Exception {
459
		List<FofoOrder> fofoOrders = fofoOrderRepository.selectByInvoiceNumberLike("%SEC%");
457
        List<FofoOrder> fofoOrders = fofoOrderRepository.selectByInvoiceNumberLike("%SEC%");
460
		for (FofoOrder fofoOrder : fofoOrders) {
458
        for (FofoOrder fofoOrder : fofoOrders) {
461
			FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId()).get(0);
459
            FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId()).get(0);
462
			if (fofoOrderItem.getBrand().equals("Vivo")) {
460
            if (fofoOrderItem.getBrand().equals("Vivo")) {
463
				String challanString = fofoOrder.getInvoiceNumber();
461
                String challanString = fofoOrder.getInvoiceNumber();
464
				String storeCode = invoiceNumberGenerationSequenceRepository.selectByFofoId(fofoOrder.getFofoId())
462
                String storeCode = invoiceNumberGenerationSequenceRepository.selectByFofoId(fofoOrder.getFofoId())
465
						.getPrefix();
463
                        .getPrefix();
466
				String invoiceNumber = orderService.getInvoiceNumber(fofoOrder.getFofoId(), storeCode);
464
                String invoiceNumber = orderService.getInvoiceNumber(fofoOrder.getFofoId(), storeCode);
467
				fofoOrder.setInvoiceNumber(invoiceNumber);
465
                fofoOrder.setInvoiceNumber(invoiceNumber);
468
				fofoOrder.setCreateTimestamp(LocalDateTime.now());
466
                fofoOrder.setCreateTimestamp(LocalDateTime.now());
469
				LOGGER.info(challanString + "\t" + invoiceNumber + "\t" + fofoOrderItem.getQuantity());
467
                LOGGER.info(challanString + "\t" + invoiceNumber + "\t" + fofoOrderItem.getQuantity());
470
			}
468
            }
471
 
469
 
472
		}
470
        }
473
	}
471
    }
474
 
472
 
475
	private Scheme getScheme() {
473
    private Scheme getScheme() {
476
		Scheme s = new Scheme();
474
        Scheme s = new Scheme();
477
		s.setName("List Price Margin");
475
        s.setName("List Price Margin");
478
		s.setDescription("List Price Margin");
476
        s.setDescription("List Price Margin");
479
		s.setActiveTimestamp(null);
477
        s.setActiveTimestamp(null);
480
		s.setStartDateTime(LocalDate.of(2019, 6, 1).atStartOfDay());
478
        s.setStartDateTime(LocalDate.of(2019, 6, 1).atStartOfDay());
481
		s.setEndDateTime(LocalDate.of(2019, 7, 1).atStartOfDay());
479
        s.setEndDateTime(LocalDate.of(2019, 7, 1).atStartOfDay());
482
		s.setAmountType(AmountType.PERCENTAGE);
480
        s.setAmountType(AmountType.PERCENTAGE);
483
		s.setCreateTimestamp(LocalDateTime.now());
481
        s.setCreateTimestamp(LocalDateTime.now());
484
		s.setExpireTimestamp(null);
482
        s.setExpireTimestamp(null);
485
		s.setCreatedBy(175120474);
483
        s.setCreatedBy(175120474);
486
		return s;
484
        return s;
487
	}
485
    }
488
 
486
 
489
	public void findMismatchesInIndent() throws Exception {
487
    public void findMismatchesInIndent() throws Exception {
490
		List<Order> allInProcessOrders = orderRepository.selectAllOrder(OrderStatus.SUBMITTED_FOR_PROCESSING);
488
        List<Order> allInProcessOrders = orderRepository.selectAllOrder(OrderStatus.SUBMITTED_FOR_PROCESSING);
491
 
489
 
492
		Map<String, Integer> lineItemWhQtyMap = allInProcessOrders.stream()
490
        Map<String, Integer> lineItemWhQtyMap = allInProcessOrders.stream()
493
				.collect(Collectors.groupingBy(y -> y.getLineItem().getItemId() + "-" + y.getFulfilmentWarehouseId(),
491
                .collect(Collectors.groupingBy(y -> y.getLineItem().getItemId() + "-" + y.getFulfilmentWarehouseId(),
494
						Collectors.summingInt(y -> y.getLineItem().getQuantity())));
492
                        Collectors.summingInt(y -> y.getLineItem().getQuantity())));
495
 
493
 
496
		lineItemWhQtyMap.forEach((key, value) -> {
494
        lineItemWhQtyMap.forEach((key, value) -> {
497
 
495
 
498
			int itemId = Integer.parseInt(key.split("-")[0]);
496
            int itemId = Integer.parseInt(key.split("-")[0]);
499
			int warehouseId = Integer.parseInt(key.split("-")[1]);
497
            int warehouseId = Integer.parseInt(key.split("-")[1]);
500
			System.out.printf("%d\t%d\t%d\n", itemId, warehouseId, value);
498
            System.out.printf("%d\t%d\t%d\n", itemId, warehouseId, value);
501
			SaholicInventorySnapshot cis = saholicInventorySnapshotRepository.selectByWarehouseIdandItemId(warehouseId,
499
            SaholicInventorySnapshot cis = saholicInventorySnapshotRepository.selectByWarehouseIdandItemId(warehouseId,
502
					itemId);
500
                    itemId);
503
			if (cis == null) {
501
            if (cis == null) {
504
				cis = new SaholicInventorySnapshot();
502
                cis = new SaholicInventorySnapshot();
505
				cis.setItemId(itemId);
503
                cis.setItemId(itemId);
506
				cis.setWarehouseId(warehouseId);
504
                cis.setWarehouseId(warehouseId);
507
				cis.setAvailability(0);
505
                cis.setAvailability(0);
508
				saholicInventorySnapshotRepository.persist(cis);
506
                saholicInventorySnapshotRepository.persist(cis);
509
			}
507
            }
510
			cis.setReserved(value);
508
            cis.setReserved(value);
511
		});
509
        });
512
	}
510
    }
513
 
511
 
514
	public void fixSchemePayouts() throws Exception {
512
    public void fixSchemePayouts() throws Exception {
515
		LOGGER.info("In fix scheme Payouts");
513
        LOGGER.info("In fix scheme Payouts");
516
		LocalDateTime startDate = LocalDate.of(2019, 9, 1).atStartOfDay();
514
        LocalDateTime startDate = LocalDate.of(2019, 9, 1).atStartOfDay();
517
		List<SchemeInOut> sios = schemeInOutRepository.selectAllByCreateDate(startDate, LocalDateTime.now());
515
        List<SchemeInOut> sios = schemeInOutRepository.selectAllByCreateDate(startDate, LocalDateTime.now());
518
 
516
 
519
		for (SchemeInOut sio : sios) {
517
        for (SchemeInOut sio : sios) {
520
			if (sio.getSchemeId() != 347) {
518
            if (sio.getSchemeId() != 347) {
521
				LOGGER.info("Skipping {}", sio.getSchemeId());
519
                LOGGER.info("Skipping {}", sio.getSchemeId());
522
				continue;
520
                continue;
523
			}
521
            }
524
			genericRepository.delete(sio);
522
            genericRepository.delete(sio);
525
			InventoryItem ii = inventoryItemRepository.selectById(sio.getInventoryItemId());
523
            InventoryItem ii = inventoryItemRepository.selectById(sio.getInventoryItemId());
526
			UserWallet userWallet = userWalletRepository.selectByRetailerId(ii.getFofoId());
524
            UserWallet userWallet = userWalletRepository.selectByRetailerId(ii.getFofoId());
527
			Scheme scheme = schemeRepository.selectById(sio.getSchemeId());
525
            Scheme scheme = schemeRepository.selectById(sio.getSchemeId());
528
			if (scheme.getType().equals(SchemeType.IN)) {
526
            if (scheme.getType().equals(SchemeType.IN)) {
529
				List<UserWalletHistory> historyList = userWalletHistoryRepository
527
                List<UserWalletHistory> historyList = userWalletHistoryRepository
530
						.selectAllByreferenceIdandreferenceType(ii.getPurchaseId(), WalletReferenceType.SCHEME_IN);
528
                        .selectAllByreferenceIdandreferenceType(ii.getPurchaseId(), WalletReferenceType.SCHEME_IN);
531
				for (UserWalletHistory uwh : historyList) {
529
                for (UserWalletHistory uwh : historyList) {
532
					if (uwh.getTimestamp().isAfter(startDate)) {
530
                    if (uwh.getTimestamp().isAfter(startDate)) {
533
						genericRepository.delete(uwh);
531
                        genericRepository.delete(uwh);
534
						userWallet.setAmount(userWallet.getAmount() - uwh.getAmount());
532
                        userWallet.setAmount(userWallet.getAmount() - uwh.getAmount());
535
					}
533
                    }
536
				}
534
                }
537
			} else {
535
            } else {
538
				List<ScanRecord> scanRecords = scanRecordRepository.selectByInventoryItemId(ii.getId());
536
                List<ScanRecord> scanRecords = scanRecordRepository.selectByInventoryItemId(ii.getId());
539
				int orderId = scanRecords.get(0).getOrderId();
537
                int orderId = scanRecords.get(0).getOrderId();
540
				List<UserWalletHistory> historyList = userWalletHistoryRepository
538
                List<UserWalletHistory> historyList = userWalletHistoryRepository
541
						.selectAllByreferenceIdandreferenceType(orderId, WalletReferenceType.SCHEME_OUT);
539
                        .selectAllByreferenceIdandreferenceType(orderId, WalletReferenceType.SCHEME_OUT);
542
				for (UserWalletHistory uwh : historyList) {
540
                for (UserWalletHistory uwh : historyList) {
543
					if (uwh.getTimestamp().isAfter(startDate)) {
541
                    if (uwh.getTimestamp().isAfter(startDate)) {
544
						userWallet.setAmount(userWallet.getAmount() - uwh.getAmount());
542
                        userWallet.setAmount(userWallet.getAmount() - uwh.getAmount());
545
						genericRepository.delete(uwh);
543
                        genericRepository.delete(uwh);
546
					}
544
                    }
547
				}
545
                }
548
				List<UserWalletHistory> historyListBroken = userWalletHistoryRepository
546
                List<UserWalletHistory> historyListBroken = userWalletHistoryRepository
549
						.selectAllByreferenceIdandreferenceType(ii.getPurchaseId(), WalletReferenceType.SCHEME_OUT);
547
                        .selectAllByreferenceIdandreferenceType(ii.getPurchaseId(), WalletReferenceType.SCHEME_OUT);
550
				for (UserWalletHistory uwh : historyListBroken) {
548
                for (UserWalletHistory uwh : historyListBroken) {
551
					if (uwh.getTimestamp().isAfter(startDate)) {
549
                    if (uwh.getTimestamp().isAfter(startDate)) {
552
						genericRepository.delete(uwh);
550
                        genericRepository.delete(uwh);
553
						userWallet.setAmount(userWallet.getAmount() - uwh.getAmount());
551
                        userWallet.setAmount(userWallet.getAmount() - uwh.getAmount());
554
					}
552
                    }
555
				}
553
                }
556
			}
554
            }
557
 
555
 
558
			// System.out.println("Total Amount Rolled Back is " + totalRollbackAmount);
556
            // System.out.println("Total Amount Rolled Back is " + totalRollbackAmount);
559
		}
557
        }
560
		scheduledTasks.processScheme(startDate, startDate.plusDays(10), true);
558
        scheduledTasks.processScheme(startDate, startDate.plusDays(10), true);
561
	}
559
    }
562
 
560
 
563
	public void fixWallet() throws Exception {
561
    public void fixWallet() throws Exception {
564
		List<FofoStore> fofoStores = fofoStoreRepository.selectAll();
562
        List<FofoStore> fofoStores = fofoStoreRepository.selectAll();
565
		System.out.println("id\tcode\tactive\tname\tcity\tstate\twallet amount\tsum\twallet amount-sum");
563
        System.out.println("id\tcode\tactive\tname\tcity\tstate\twallet amount\tsum\twallet amount-sum");
566
		for (FofoStore fofoStore : fofoStores) {
564
        for (FofoStore fofoStore : fofoStores) {
567
			UserWallet uw = userWalletRepository.selectByRetailerId(fofoStore.getId());
565
            UserWallet uw = userWalletRepository.selectByRetailerId(fofoStore.getId());
568
			User user = userRepository.selectById(fofoStore.getId());
566
            User user = userRepository.selectById(fofoStore.getId());
569
			if (user == null) {
567
            if (user == null) {
570
				LOGGER.info("store does not exist", fofoStore.getCode());
568
                LOGGER.info("store does not exist", fofoStore.getCode());
571
				continue;
569
                continue;
572
			}
570
            }
573
			Address address = null;
571
            Address address = null;
574
			try {
572
            try {
575
				address = addressRepository.selectById(user.getAddressId());
573
                address = addressRepository.selectById(user.getAddressId());
576
			} catch (Exception e) {
574
            } catch (Exception e) {
577
				LOGGER.info("Could not find address for Store", fofoStore.getCode());
575
                LOGGER.info("Could not find address for Store", fofoStore.getCode());
578
				address = new Address();
576
                address = new Address();
579
			}
577
            }
580
			double sum = userWalletHistoryRepository.selectSumByWallet(uw.getId());
578
            double sum = userWalletHistoryRepository.selectSumByWallet(uw.getId());
581
			int calculated = (int) sum;
579
            int calculated = (int) sum;
582
			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(),
580
            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(),
583
					fofoStore.isActive(), address.getName(), address.getCity(), address.getState(), uw.getAmount(),
581
                    fofoStore.isActive(), address.getName(), address.getCity(), address.getState(), uw.getAmount(),
584
					calculated, uw.getAmount() - calculated);
582
                    calculated, uw.getAmount() - calculated);
585
		}
583
        }
586
	}
584
    }
587
 
585
 
588
	public void changeWarehouse() throws Exception {
586
    public void changeWarehouse() throws Exception {
589
		transactionService.moveWarehouses();
587
        transactionService.moveWarehouses();
590
	}
588
    }
591
 
589
 
592
	public void mailDashboardScreenshots() throws Exception {
590
    public void mailDashboardScreenshots() throws Exception {
593
		System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver");
591
        System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver");
594
 
592
 
595
		ChromeOptions options = new ChromeOptions();
593
        ChromeOptions options = new ChromeOptions();
596
		options.addArguments("--headless");
594
        options.addArguments("--headless");
597
		options.addArguments("--no-sandbox");
595
        options.addArguments("--no-sandbox");
598
		options.addArguments("start-maximized");
596
        options.addArguments("start-maximized");
599
		options.addArguments("disable-infobars");
597
        options.addArguments("disable-infobars");
600
		options.addArguments("--disable-extensions");
598
        options.addArguments("--disable-extensions");
601
 
599
 
602
		WebDriver driver = new ChromeDriver(options);
600
        WebDriver driver = new ChromeDriver(options);
603
		driver.manage().window().setSize(new Dimension(1600, 900));
601
        driver.manage().window().setSize(new Dimension(1600, 900));
604
		driver.manage().window().maximize();
602
        driver.manage().window().maximize();
605
		// Deleting all the cookies
603
        // Deleting all the cookies
606
		driver.manage().deleteAllCookies();
604
        driver.manage().deleteAllCookies();
607
		// Specifiying pageLoadTimeout and Implicit wait
605
        // Specifiying pageLoadTimeout and Implicit wait
608
		driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
606
        driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
609
		driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
607
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
610
 
608
 
611
		Map<String, Set<Integer>> authUserPartnerIdMapping = csService.getAuthUserPartnerIdMapping();
609
        Map<String, Set<Integer>> authUserPartnerIdMapping = csService.getAuthUserPartnerIdMapping();
612
		Set<Integer> allPartners = new HashSet<>();
610
        Set<Integer> allPartners = new HashSet<>();
613
		Map<Integer, File> partnerSnapshotMap = new HashMap<>();
611
        Map<Integer, File> partnerSnapshotMap = new HashMap<>();
614
		authUserPartnerIdMapping.values().stream().forEach(x -> allPartners.addAll(x));
612
        authUserPartnerIdMapping.values().stream().forEach(x -> allPartners.addAll(x));
615
		for (int fofoId : allPartners) {
613
        for (int fofoId : allPartners) {
616
			driver.get("https://partners.smartdukaan.com/12dashboard34?fofoId=" + fofoId);
614
            driver.get("https://partners.smartdukaan.com/12dashboard34?fofoId=" + fofoId);
617
			File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
615
            File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
618
			partnerSnapshotMap.put(fofoId, file);
616
            partnerSnapshotMap.put(fofoId, file);
619
 
617
 
620
		}
618
        }
621
		for (Map.Entry<String, Set<Integer>> entry : authUserPartnerIdMapping.entrySet()) {
619
        for (Map.Entry<String, Set<Integer>> entry : authUserPartnerIdMapping.entrySet()) {
622
			String email = entry.getKey();
620
            String email = entry.getKey();
623
			LOGGER.info("Sending mail start to {}", email);
621
            LOGGER.info("Sending mail start to {}", email);
624
			Set<Integer> partnerIds = entry.getValue();
622
            Set<Integer> partnerIds = entry.getValue();
625
			StringBuffer body = new StringBuffer();
623
            StringBuffer body = new StringBuffer();
626
			Map<Integer, File> emailSnapshotMap = new HashMap<>();
624
            Map<Integer, File> emailSnapshotMap = new HashMap<>();
627
			for (int fofoId : partnerIds) {
625
            for (int fofoId : partnerIds) {
628
				body.append(String.format("<br/><img src=\"cid:%d\"/>", fofoId));
626
                body.append(String.format("<br/><img src=\"cid:%d\"/>", fofoId));
629
				emailSnapshotMap.put(fofoId, partnerSnapshotMap.get(fofoId));
627
                emailSnapshotMap.put(fofoId, partnerSnapshotMap.get(fofoId));
630
			}
628
            }
631
			Utils.sendEmbeddedHtmlMail(mailSender, new String[]{email}, new String[]{},
629
            Utils.sendEmbeddedHtmlMail(mailSender, new String[]{email}, new String[]{},
632
					String.format("Franchise Screenshots - %s", FormattingUtils.formatDate(LocalDateTime.now())),
630
                    String.format("Franchise Screenshots - %s", FormattingUtils.formatDate(LocalDateTime.now())),
633
					body.toString(), emailSnapshotMap);
631
                    body.toString(), emailSnapshotMap);
634
			LOGGER.info("Sent mail to {}", email);
632
            LOGGER.info("Sent mail to {}", email);
635
		}
633
        }
636
		driver.quit();
634
        driver.quit();
637
	}
635
    }
638
 
636
 
639
	// Rollout prebooking orders amount in case the order is grned.
637
    // Rollout prebooking orders amount in case the order is grned.
640
	public void pbfix() throws ProfitMandiBusinessException {
638
    public void pbfix() throws ProfitMandiBusinessException {
641
		List<PrebookingOrder> prebookingOrders = prebookingOrderRepository.selectAll();
639
        List<PrebookingOrder> prebookingOrders = prebookingOrderRepository.selectAll();
642
		Map<Integer, Boolean> prebookingCleared = new HashMap<>();
640
        Map<Integer, Boolean> prebookingCleared = new HashMap<>();
643
		prebookingOrders = prebookingOrders.stream().collect(Collectors.toList());
641
        prebookingOrders = prebookingOrders.stream().collect(Collectors.toList());
644
		Map<Integer, List<PrebookingOrder>> catalogPrebookingMap = new HashMap<>();
642
        Map<Integer, List<PrebookingOrder>> catalogPrebookingMap = new HashMap<>();
645
		for (PrebookingOrder prebookingOrder : prebookingOrders) {
643
        for (PrebookingOrder prebookingOrder : prebookingOrders) {
646
			if (!catalogPrebookingMap.containsKey(prebookingOrder.getCatalogId())) {
644
            if (!catalogPrebookingMap.containsKey(prebookingOrder.getCatalogId())) {
647
				catalogPrebookingMap.put(prebookingOrder.getCatalogId(), new ArrayList<>());
645
                catalogPrebookingMap.put(prebookingOrder.getCatalogId(), new ArrayList<>());
648
			}
646
            }
649
			catalogPrebookingMap.get(prebookingOrder.getCatalogId()).add(prebookingOrder);
647
            catalogPrebookingMap.get(prebookingOrder.getCatalogId()).add(prebookingOrder);
650
			int prebookingId = prebookingOrder.getId();
648
            int prebookingId = prebookingOrder.getId();
651
			List<UserWalletHistory> history = walletService.getAllByReference(prebookingOrder.getFofoId(), prebookingId,
649
            List<UserWalletHistory> history = walletService.getAllByReference(prebookingOrder.getFofoId(), prebookingId,
652
					WalletReferenceType.PREBOOKING_ORDER);
650
                    WalletReferenceType.PREBOOKING_ORDER);
653
			long totalAmount = history.stream().collect(Collectors.summingLong(x -> x.getAmount()));
651
            long totalAmount = history.stream().collect(Collectors.summingLong(x -> x.getAmount()));
654
			// Refund is pending
652
            // Refund is pending
655
			if (history.size() > 0) {
653
            if (history.size() > 0) {
656
				if (totalAmount < 0) {
654
                if (totalAmount < 0) {
657
					prebookingCleared.put(prebookingId, false);
655
                    prebookingCleared.put(prebookingId, false);
658
					LOGGER.info("Amount pending for prebooking id " + prebookingId + " amount is " + -totalAmount
656
                    LOGGER.info("Amount pending for prebooking id " + prebookingId + " amount is " + -totalAmount
659
							+ " catalog id - {}", prebookingOrder.getCatalogId());
657
                            + " catalog id - {}", prebookingOrder.getCatalogId());
660
				} else {
658
                } else {
661
					prebookingCleared.put(prebookingId, true);
659
                    prebookingCleared.put(prebookingId, true);
662
				}
660
                }
663
			} else {
661
            } else {
664
				prebookingCleared.put(prebookingId, true);
662
                prebookingCleared.put(prebookingId, true);
665
				LOGGER.info("No entry in wallet for prebooking Id " + prebookingId);
663
                LOGGER.info("No entry in wallet for prebooking Id " + prebookingId);
666
			}
664
            }
667
		}
665
        }
668
		for (Map.Entry<Integer, List<PrebookingOrder>> entrySet : catalogPrebookingMap.entrySet()) {
666
        for (Map.Entry<Integer, List<PrebookingOrder>> entrySet : catalogPrebookingMap.entrySet()) {
669
			LOGGER.info("Catalog id {}, Size {}", entrySet.getKey(), entrySet.getValue().size());
667
            LOGGER.info("Catalog id {}, Size {}", entrySet.getKey(), entrySet.getValue().size());
670
			Set<Integer> itemIds = itemRepository.selectAllByCatalogItemId(entrySet.getKey()).stream()
668
            Set<Integer> itemIds = itemRepository.selectAllByCatalogItemId(entrySet.getKey()).stream()
671
					.map(x -> x.getId()).collect(Collectors.toSet());
669
                    .map(x -> x.getId()).collect(Collectors.toSet());
672
			List<PrebookingOrder> prebookings = entrySet.getValue();
670
            List<PrebookingOrder> prebookings = entrySet.getValue();
673
			Map<Integer, List<PrebookingOrder>> fofoMap = prebookings.stream()
671
            Map<Integer, List<PrebookingOrder>> fofoMap = prebookings.stream()
674
					.collect(Collectors.groupingBy(x -> x.getFofoId(), Collectors.toList()));
672
                    .collect(Collectors.groupingBy(x -> x.getFofoId(), Collectors.toList()));
675
			for (Map.Entry<Integer, List<PrebookingOrder>> fofoMapEntry : fofoMap.entrySet()) {
673
            for (Map.Entry<Integer, List<PrebookingOrder>> fofoMapEntry : fofoMap.entrySet()) {
676
				int fofoId = fofoMapEntry.getKey();
674
                int fofoId = fofoMapEntry.getKey();
677
				int totalGrnCount = inventoryItemRepository.selectByFofoIdItemIds(fofoId, itemIds).size();
675
                int totalGrnCount = inventoryItemRepository.selectByFofoIdItemIds(fofoId, itemIds).size();
678
				List<PrebookingOrder> partnerBookings = fofoMapEntry.getValue();
676
                List<PrebookingOrder> partnerBookings = fofoMapEntry.getValue();
679
				for (PrebookingOrder partnerBooking : partnerBookings) {
677
                for (PrebookingOrder partnerBooking : partnerBookings) {
680
					if (prebookingCleared.get(partnerBooking.getId())) {
678
                    if (prebookingCleared.get(partnerBooking.getId())) {
681
						totalGrnCount--;
679
                        totalGrnCount--;
682
						if (totalGrnCount < 0) {
680
                        if (totalGrnCount < 0) {
683
							totalGrnCount = 0;
681
                            totalGrnCount = 0;
684
							LOGGER.info("FofoId {}, No Grn But Refunded prebooking id {}", fofoId,
682
                            LOGGER.info("FofoId {}, No Grn But Refunded prebooking id {}", fofoId,
685
									partnerBooking.getId());
683
                                    partnerBooking.getId());
686
							break;
684
                            break;
687
						}
685
                        }
688
					}
686
                    }
689
				}
687
                }
690
 
688
 
691
				long toBeRefunded = partnerBookings.stream().filter(x -> !prebookingCleared.get(x.getId()))
689
                long toBeRefunded = partnerBookings.stream().filter(x -> !prebookingCleared.get(x.getId()))
692
						.limit(totalGrnCount).count();
690
                        .limit(totalGrnCount).count();
693
				LOGGER.info("FofoId {}, Remaining Grn {}, toBeRefunded Prebooking {}", fofoId, totalGrnCount,
691
                LOGGER.info("FofoId {}, Remaining Grn {}, toBeRefunded Prebooking {}", fofoId, totalGrnCount,
694
						toBeRefunded);
692
                        toBeRefunded);
695
				partnerBookings.stream().filter(x -> !prebookingCleared.get(x.getId()))
693
                partnerBookings.stream().filter(x -> !prebookingCleared.get(x.getId()))
696
						.filter(x -> x.getCreateTimestamp().getYear() == 2022).limit(totalGrnCount).forEach(x -> {
694
                        .filter(x -> x.getCreateTimestamp().getYear() == 2022).limit(totalGrnCount).forEach(x -> {
697
							try {
695
                            try {
698
								purchaseService.sendPrebookingNotifyMessage(x);
696
                                purchaseService.sendPrebookingNotifyMessage(x);
699
							} catch (Exception e) {
697
                            } catch (Exception e) {
700
								LOGGER.info("could not notify");
698
                                LOGGER.info("could not notify");
701
							}
699
                            }
702
						});
700
                        });
703
 
701
 
704
			}
702
            }
705
		}
703
        }
706
	}
704
    }
707
 
705
 
708
	public void fixGrn() throws Exception {
706
    public void fixGrn() throws Exception {
709
		List<Purchase> incompletePurchases = purchaseRepository.selectIncompletePurchase();
707
        List<Purchase> incompletePurchases = purchaseRepository.selectIncompletePurchase();
710
		for (Purchase incompletePurchase : incompletePurchases) {
708
        for (Purchase incompletePurchase : incompletePurchases) {
711
			List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(
709
            List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(
712
					incompletePurchase.getPurchaseReference(), incompletePurchase.getFofoId());
710
                    incompletePurchase.getPurchaseReference(), incompletePurchase.getFofoId());
713
			List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(incompletePurchase.getId());
711
            List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(incompletePurchase.getId());
714
			Map<Integer, Integer> grnedItems = inventoryItems.stream().collect(
712
            Map<Integer, Integer> grnedItems = inventoryItems.stream().collect(
715
					Collectors.groupingBy(x -> x.getItemId(), Collectors.summingInt(x -> x.getInitialQuantity())));
713
                    Collectors.groupingBy(x -> x.getItemId(), Collectors.summingInt(x -> x.getInitialQuantity())));
716
			Map<Integer, Integer> billedItems = orders.stream().collect(Collectors.groupingBy(
714
            Map<Integer, Integer> billedItems = orders.stream().collect(Collectors.groupingBy(
717
					x -> x.getLineItem().getItemId(), Collectors.summingInt(x -> x.getLineItem().getQuantity())));
715
                    x -> x.getLineItem().getItemId(), Collectors.summingInt(x -> x.getLineItem().getQuantity())));
718
			for (Integer billedItemId : billedItems.keySet()) {
716
            for (Integer billedItemId : billedItems.keySet()) {
719
				if (grnedItems.containsKey(billedItemId)) {
717
                if (grnedItems.containsKey(billedItemId)) {
720
					if (grnedItems.get(billedItemId) > billedItems.get(billedItemId)) {
718
                    if (grnedItems.get(billedItemId) > billedItems.get(billedItemId)) {
721
						LOGGER.info("Billed Qty {} ---- Grned {}, ItemId {}, Invoice Number {}({}), Grn Date {}",
719
                        LOGGER.info("Billed Qty {} ---- Grned {}, ItemId {}, Invoice Number {}({}), Grn Date {}",
722
								billedItems.get(billedItemId), grnedItems.get(billedItemId), billedItemId,
720
                                billedItems.get(billedItemId), grnedItems.get(billedItemId), billedItemId,
723
								incompletePurchase.getPurchaseReference(), incompletePurchase.getId(),
721
                                incompletePurchase.getPurchaseReference(), incompletePurchase.getId(),
724
								incompletePurchase.getCreateTimestamp());
722
                                incompletePurchase.getCreateTimestamp());
725
						Item item = itemRepository.selectById(billedItemId);
723
                        Item item = itemRepository.selectById(billedItemId);
726
						if (item.getType().equals(ItemType.SERIALIZED)) {
724
                        if (item.getType().equals(ItemType.SERIALIZED)) {
727
 
725
 
728
						} else {
726
                        } else {
729
							for (InventoryItem inventoryItem : inventoryItems) {
727
                            for (InventoryItem inventoryItem : inventoryItems) {
730
								if (inventoryItem.getItemId() == billedItemId && inventoryItem.getGoodQuantity() == 0) {
728
                                if (inventoryItem.getItemId() == billedItemId && inventoryItem.getGoodQuantity() == 0) {
731
									List<ScanRecord> scanRecords = scanRecordRepository
729
                                    List<ScanRecord> scanRecords = scanRecordRepository
732
											.selectByInventoryItemId(inventoryItem.getId());
730
                                            .selectByInventoryItemId(inventoryItem.getId());
733
									if (scanRecords.size() == 1 && scanRecords.get(0).getQuantity() == 0) {
731
                                    if (scanRecords.size() == 1 && scanRecords.get(0).getQuantity() == 0) {
734
										LOGGER.info("Safe to remove InventoryItem Id {}", inventoryItem.getId());
732
                                        LOGGER.info("Safe to remove InventoryItem Id {}", inventoryItem.getId());
735
										scanRecordRepository.delete(scanRecords.get(0));
733
                                        scanRecordRepository.delete(scanRecords.get(0));
736
										inventoryItemRepository.delete(inventoryItem);
734
                                        inventoryItemRepository.delete(inventoryItem);
737
										incompletePurchase.setUnfullfilledNonSerializedQuantity(
735
                                        incompletePurchase.setUnfullfilledNonSerializedQuantity(
738
												incompletePurchase.getUnfullfilledNonSerializedQuantity()
736
                                                incompletePurchase.getUnfullfilledNonSerializedQuantity()
739
														+ inventoryItem.getInitialQuantity());
737
                                                        + inventoryItem.getInitialQuantity());
740
									}
738
                                    }
741
								}
739
                                }
742
							}
740
                            }
743
						}
741
                        }
744
					}
742
                    }
745
				}
743
                }
746
			}
744
            }
747
 
745
 
748
		}
746
        }
749
 
747
 
750
	}
748
    }
751
 
749
 
752
	public void fixDupGrns() throws Exception {
750
    public void fixDupGrns() throws Exception {
753
		List<Integer> duplicatePurchaseIds = Arrays.asList(14984);
751
        List<Integer> duplicatePurchaseIds = Arrays.asList(14984);
754
		for (int duplicatePurchaseId : duplicatePurchaseIds) {
752
        for (int duplicatePurchaseId : duplicatePurchaseIds) {
755
			Purchase purchase = purchaseRepository.selectById(duplicatePurchaseId);
753
            Purchase purchase = purchaseRepository.selectById(duplicatePurchaseId);
756
			List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(duplicatePurchaseId);
754
            List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(duplicatePurchaseId);
757
			if (inventoryItems.size() == 0) {
755
            if (inventoryItems.size() == 0) {
758
				LOGGER.info("Could not find InventoryItems for {}", duplicatePurchaseId);
756
                LOGGER.info("Could not find InventoryItems for {}", duplicatePurchaseId);
759
				continue;
757
                continue;
760
			}
758
            }
761
			schemeService.rollbackSchemes(inventoryItems.stream().map(x -> x.getId()).collect(Collectors.toList()),
759
            schemeService.rollbackSchemes(inventoryItems.stream().map(x -> x.getId()).collect(Collectors.toList()),
762
					duplicatePurchaseId,
760
                    duplicatePurchaseId,
763
					"Rolled back duplicate grn for Purchase Invoice " + purchase.getPurchaseReference());
761
                    "Rolled back duplicate grn for Purchase Invoice " + purchase.getPurchaseReference());
764
			for (InventoryItem inventoryItem : inventoryItems) {
762
            for (InventoryItem inventoryItem : inventoryItems) {
765
				inventoryItemRepository.delete(inventoryItem);
763
                inventoryItemRepository.delete(inventoryItem);
766
				List<ScanRecord> scanRecords = scanRecordRepository.selectByInventoryItemId(inventoryItem.getId());
764
                List<ScanRecord> scanRecords = scanRecordRepository.selectByInventoryItemId(inventoryItem.getId());
767
				for (ScanRecord scanRecord : scanRecords) {
765
                for (ScanRecord scanRecord : scanRecords) {
768
					scanRecordRepository.delete(scanRecord);
766
                    scanRecordRepository.delete(scanRecord);
769
				}
767
                }
770
				List<SchemeInOut> sios = schemeInOutRepository
768
                List<SchemeInOut> sios = schemeInOutRepository
771
						.selectByInventoryItemIds(new HashSet<>(Arrays.asList(inventoryItem.getId())));
769
                        .selectByInventoryItemIds(new HashSet<>(Arrays.asList(inventoryItem.getId())));
772
				for (SchemeInOut sio : sios) {
770
                for (SchemeInOut sio : sios) {
773
					LOGGER.info("SIO - {}", sio);
771
                    LOGGER.info("SIO - {}", sio);
774
					schemeInOutRepository.delete(sio);
772
                    schemeInOutRepository.delete(sio);
775
				}
773
                }
776
 
774
 
777
			}
775
            }
778
		}
776
        }
779
		// throw new Exception();
777
        // throw new Exception();
780
	}
778
    }
781
 
779
 
782
	public void mongom() {
780
    public void mongom() {
783
		List<TagListing> tls = tagListingRepository.selectAll(false);
781
        List<TagListing> tls = tagListingRepository.selectAll(false);
784
		Set<Integer> itemIds = tls.stream().map(x -> x.getItemId()).collect(Collectors.toSet());
782
        Set<Integer> itemIds = tls.stream().map(x -> x.getItemId()).collect(Collectors.toSet());
785
		Set<Integer> catalogIds = itemRepository.selectByIds(itemIds).stream().map(x -> x.getCatalogItemId())
783
        Set<Integer> catalogIds = itemRepository.selectByIds(itemIds).stream().map(x -> x.getCatalogItemId())
786
				.collect(Collectors.toSet());
784
                .collect(Collectors.toSet());
787
		for (int catalogId : catalogIds) {
785
        for (int catalogId : catalogIds) {
788
			try {
786
            try {
789
				ContentPojo cp = mongoClient.getEntityById(catalogId);
787
                ContentPojo cp = mongoClient.getEntityById(catalogId);
790
				try {
788
                try {
791
					cp.setIconImageUrl(cp.getIconImageUrl().replace("saholic", "smartdukaan"));
789
                    cp.setIconImageUrl(cp.getIconImageUrl().replace("saholic", "smartdukaan"));
792
				} catch (Exception e) {
790
                } catch (Exception e) {
793
 
791
 
794
				}
792
                }
795
 
793
 
796
				try {
794
                try {
797
					cp.setThumbnailImageUrl(cp.getThumbnailImageUrl().replace("saholic", "smartdukaan"));
795
                    cp.setThumbnailImageUrl(cp.getThumbnailImageUrl().replace("saholic", "smartdukaan"));
798
				} catch (Exception e) {
796
                } catch (Exception e) {
799
 
797
 
800
				}
798
                }
801
 
799
 
802
				cp.setDefaultImageUrl(cp.getDefaultImageUrl().replace("saholic", "smartdukaan"));
800
                cp.setDefaultImageUrl(cp.getDefaultImageUrl().replace("saholic", "smartdukaan"));
803
				List<MediaPojo> mPojos = cp.getImages();
801
                List<MediaPojo> mPojos = cp.getImages();
804
				if (mPojos != null) {
802
                if (mPojos != null) {
805
					mPojos.stream().forEach(mPojo -> {
803
                    mPojos.stream().forEach(mPojo -> {
806
						mPojo.setUrl(mPojo.getUrl().replace("saholic", "smartdukaan"));
804
                        mPojo.setUrl(mPojo.getUrl().replace("saholic", "smartdukaan"));
807
					});
805
                    });
808
				}
806
                }
809
				mongoClient.persistEntity(cp);
807
                mongoClient.persistEntity(cp);
810
			} catch (Exception e) {
808
            } catch (Exception e) {
811
				continue;
809
                continue;
812
			}
810
            }
813
		}
811
        }
814
	}
812
    }
815
 
813
 
816
	public void cancelDn(String debitNoteNumber) throws Exception {
814
    public void cancelDn(String debitNoteNumber) throws Exception {
817
		DebitNote debitNote = debitNoteRepository.selectDebitNoteByNumber(debitNoteNumber);
815
        DebitNote debitNote = debitNoteRepository.selectDebitNoteByNumber(debitNoteNumber);
818
 
816
 
819
		List<PurchaseReturnItem> purchaseReturnItems = purchaseReturnItemRepository
817
        List<PurchaseReturnItem> purchaseReturnItems = purchaseReturnItemRepository
820
				.selectAllByDebitNoteId(debitNote.getId());
818
                .selectAllByDebitNoteId(debitNote.getId());
821
		// Select all inventory Item
819
        // Select all inventory Item
822
		Set<Integer> inventoryItemIds = purchaseReturnItems.stream().map(x -> x.getInventoryItemId())
820
        Set<Integer> inventoryItemIds = purchaseReturnItems.stream().map(x -> x.getInventoryItemId())
823
				.collect(Collectors.toSet());
821
                .collect(Collectors.toSet());
824
		List<InventoryItem> inventoryItems = inventoryItemRepository.selectByIds(inventoryItemIds);
822
        List<InventoryItem> inventoryItems = inventoryItemRepository.selectByIds(inventoryItemIds);
825
		for (InventoryItem inventoryItem : inventoryItems) {
823
        for (InventoryItem inventoryItem : inventoryItems) {
826
			if (!StringUtils.isEmpty(inventoryItem.getSerialNumber())) {
824
            if (!StringUtils.isEmpty(inventoryItem.getSerialNumber())) {
827
				inventoryItem.setGoodQuantity(1);
825
                inventoryItem.setGoodQuantity(1);
828
				inventoryItem.setLastScanType(ScanType.PURCHASE);
826
                inventoryItem.setLastScanType(ScanType.PURCHASE);
829
				ScanRecord sr = scanRecordRepository.selectByInventoryItemId(inventoryItem.getId()).stream()
827
                ScanRecord sr = scanRecordRepository.selectByInventoryItemId(inventoryItem.getId()).stream()
830
						.filter(x -> x.getType().equals(ScanType.PURCHASE_RET)).findFirst().get();
828
                        .filter(x -> x.getType().equals(ScanType.PURCHASE_RET)).findFirst().get();
831
				scanRecordRepository.delete(sr);
829
                scanRecordRepository.delete(sr);
832
				CurrentInventorySnapshot cis = currentInventorySnapshotRepository
830
                CurrentInventorySnapshot cis = currentInventorySnapshotRepository
833
						.selectByItemAndFofoId(inventoryItem.getItemId(), inventoryItem.getFofoId());
831
                        .selectByItemAndFofoId(inventoryItem.getItemId(), inventoryItem.getFofoId());
834
				if (cis == null) {
832
                if (cis == null) {
835
					cis = new CurrentInventorySnapshot();
833
                    cis = new CurrentInventorySnapshot();
836
					cis.setFofoId(inventoryItem.getFofoId());
834
                    cis.setFofoId(inventoryItem.getFofoId());
837
					cis.setItemId(inventoryItem.getId());
835
                    cis.setItemId(inventoryItem.getId());
838
					currentInventorySnapshotRepository.persist(cis);
836
                    currentInventorySnapshotRepository.persist(cis);
839
				}
837
                }
840
				cis.setAvailability(cis.getAvailability() + 1);
838
                cis.setAvailability(cis.getAvailability() + 1);
841
				schemeService.processSchemeIn(inventoryItem.getPurchaseId(), inventoryItem.getFofoId());
839
                schemeService.processSchemeIn(inventoryItem.getPurchaseId(), inventoryItem.getFofoId());
842
			}
840
            }
843
		}
841
        }
844
		purchaseReturnItems.stream().forEach(x -> purchaseReturnItemRepository.delete(x));
842
        purchaseReturnItems.stream().forEach(x -> purchaseReturnItemRepository.delete(x));
845
	}
843
    }
846
 
844
 
847
	public void processPd(int priceDropId) throws ProfitMandiBusinessException {
845
    public void processPd(int priceDropId) throws ProfitMandiBusinessException {
848
		priceDropService.processPriceDrop(priceDropId, false);
846
        priceDropService.processPriceDrop(priceDropId, false);
849
	}
847
    }
850
 
848
 
851
	public void fixScheme() throws Exception {
849
    public void fixScheme() throws Exception {
852
		LOGGER.info("Partner Types found\tPartnerType To Remove\tAmout to Rollback");
850
        LOGGER.info("Partner Types found\tPartnerType To Remove\tAmout to Rollback");
853
		final Map<Integer, Scheme> schemesMap = schemeRepository.selectAll().stream()
851
        final Map<Integer, Scheme> schemesMap = schemeRepository.selectAll().stream()
854
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
852
                .collect(Collectors.toMap(x -> x.getId(), x -> x));
855
		List<SchemeInOut> sios = schemeInOutRepository.selectAllByCreateDate(LocalDate.of(2019, 9, 1).atTime(0, 0),
853
        List<SchemeInOut> sios = schemeInOutRepository.selectAllByCreateDate(LocalDate.of(2019, 9, 1).atTime(0, 0),
856
				LocalDateTime.now());
854
                LocalDateTime.now());
857
		Map<SioTuple, Map<PartnerType, List<SchemeInOut>>> schemeTupleMap = sios.stream()
855
        Map<SioTuple, Map<PartnerType, List<SchemeInOut>>> schemeTupleMap = sios.stream()
858
				.filter(x -> x.getRolledBackTimestamp() == null)
856
                .filter(x -> x.getRolledBackTimestamp() == null)
859
				.filter(x -> schemesMap.get(x.getSchemeId()).getPartnerType() != PartnerType.ALL)
857
                .filter(x -> schemesMap.get(x.getSchemeId()).getPartnerType() != PartnerType.ALL)
860
				.collect(Collectors.groupingBy(
858
                .collect(Collectors.groupingBy(
861
						x -> new SioTuple(x.getInventoryItemId(), schemesMap.get(x.getSchemeId()).getType()),
859
                        x -> new SioTuple(x.getInventoryItemId(), schemesMap.get(x.getSchemeId()).getType()),
862
						Collectors.groupingBy(x -> schemesMap.get(x.getSchemeId()).getPartnerType(),
860
                        Collectors.groupingBy(x -> schemesMap.get(x.getSchemeId()).getPartnerType(),
863
								Collectors.mapping(x -> x, Collectors.toList()))));
861
                                Collectors.mapping(x -> x, Collectors.toList()))));
864
 
862
 
865
		schemeTupleMap.entrySet().stream().filter(x -> x.getValue().size() > 1).forEach(x -> {
863
        schemeTupleMap.entrySet().stream().filter(x -> x.getValue().size() > 1).forEach(x -> {
866
			Map<PartnerType, List<SchemeInOut>> partnerTypeSchemeMap = x.getValue();
864
            Map<PartnerType, List<SchemeInOut>> partnerTypeSchemeMap = x.getValue();
867
			PartnerType partnerTypeToRemove = partnerTypeSchemeMap.keySet().stream()
865
            PartnerType partnerTypeToRemove = partnerTypeSchemeMap.keySet().stream()
868
					.min(Comparator.comparing(y -> PartnerType.PartnerTypeRankMap.get(y))).get();
866
                    .min(Comparator.comparing(y -> PartnerType.PartnerTypeRankMap.get(y))).get();
869
			LOGGER.info("{}\t{}\t{}\t{}\t{}\t{}", partnerTypeSchemeMap.keySet(), partnerTypeToRemove,
867
            LOGGER.info("{}\t{}\t{}\t{}\t{}\t{}", partnerTypeSchemeMap.keySet(), partnerTypeToRemove,
870
					partnerTypeSchemeMap.get(partnerTypeToRemove).stream()
868
                    partnerTypeSchemeMap.get(partnerTypeToRemove).stream()
871
							.collect(Collectors.summingDouble(SchemeInOut::getAmount)),
869
                            .collect(Collectors.summingDouble(SchemeInOut::getAmount)),
872
					FormattingUtils.formatDate(partnerTypeSchemeMap.get(partnerTypeToRemove).stream()
870
                    FormattingUtils.formatDate(partnerTypeSchemeMap.get(partnerTypeToRemove).stream()
873
							.map(y -> y.getCreateTimestamp()).findFirst().get()));
871
                            .map(y -> y.getCreateTimestamp()).findFirst().get()));
874
 
872
 
875
		});
873
        });
876
	}
874
    }
877
 
875
 
878
	@Autowired
876
    @Autowired
879
	GstProAuthService gstProAuthService;
877
    GstProAuthService gstProAuthService;
880
 
878
 
881
	@Autowired
879
    @Autowired
882
	GstProService gstProService;
880
    GstProService gstProService;
883
 
881
 
884
	@Autowired
882
    @Autowired
885
	InvoiceService invoiceService;
883
    InvoiceService invoiceService;
886
 
884
 
887
	public void updateIrnsToInvoices() {
885
    public void updateIrnsToInvoices() {
888
		try {
886
        try {
889
			invoiceService.updateIrnsToInvoices();
887
            invoiceService.updateIrnsToInvoices();
890
		} catch (Throwable t) {
888
        } catch (Throwable t) {
891
			t.printStackTrace();
889
            t.printStackTrace();
892
		}
890
        }
893
	}
891
    }
894
 
892
 
895
	@Autowired
893
    @Autowired
896
	AmazonPurchaseService amazonPurchaseService;
894
    AmazonPurchaseService amazonPurchaseService;
897
 
895
 
898
	@Autowired
896
    @Autowired
899
	OfferTargetSlabRepository offerTargetSlabRepository;
897
    OfferTargetSlabRepository offerTargetSlabRepository;
900
 
898
 
901
	public void amazonPurchase() throws Exception {
899
    public void amazonPurchase() throws Exception {
902
		amazonPurchaseService.purchaseAmazon("B085M5R82K", 10, 3999);
900
        amazonPurchaseService.purchaseAmazon("B085M5R82K", 10, 3999);
903
	}
901
    }
904
 
902
 
905
	@Autowired
903
    @Autowired
906
	ItemCriteriaRepository itemCriteriaRepository;
904
    ItemCriteriaRepository itemCriteriaRepository;
907
 
905
 
908
	public void createOfferCriteria() throws Exception {
906
    public void createOfferCriteria() throws Exception {
909
		Offer offer = offerRepository.selectById(1099);
907
        Offer offer = offerRepository.selectById(1099);
910
		CreateOfferRequest createOfferRequest = offerService.getCreateOfferRequest(offer);
908
        CreateOfferRequest createOfferRequest = offerService.getCreateOfferRequest(offer);
911
		createOfferRequest.setStartDate(LocalDate.of(2022, 7, 5).atStartOfDay());
909
        createOfferRequest.setStartDate(LocalDate.of(2022, 7, 5).atStartOfDay());
912
		createOfferRequest.setEndDate(LocalDate.of(2022, 7, 31).atTime(LocalTime.MAX));
910
        createOfferRequest.setEndDate(LocalDate.of(2022, 7, 31).atTime(LocalTime.MAX));
913
		createOfferRequest.setCreatedOn(LocalDateTime.now());
911
        createOfferRequest.setCreatedOn(LocalDateTime.now());
914
		offerService.addOfferService(createOfferRequest);
912
        offerService.addOfferService(createOfferRequest);
915
	}
913
    }
916
 
914
 
917
	public void createOfferCriteria1() throws Exception {
915
    public void createOfferCriteria1() throws Exception {
918
		Map<Integer, List<Integer>> map = new HashMap<>();
916
        Map<Integer, List<Integer>> map = new HashMap<>();
919
		map.put(31960, Arrays.asList(57, 69));
917
        map.put(31960, Arrays.asList(57, 69));
920
		map.put(32844, Arrays.asList(57, 69));
918
        map.put(32844, Arrays.asList(57, 69));
921
		map.put(31964, Arrays.asList(65, 78));
919
        map.put(31964, Arrays.asList(65, 78));
922
		map.put(33493, Arrays.asList(70, 84));
920
        map.put(33493, Arrays.asList(70, 84));
923
		map.put(32847, Arrays.asList(65, 78));
921
        map.put(32847, Arrays.asList(65, 78));
924
		map.put(32623, Arrays.asList(72, 86));
922
        map.put(32623, Arrays.asList(72, 86));
925
		map.put(31972, Arrays.asList(74, 88));
923
        map.put(31972, Arrays.asList(74, 88));
926
		map.put(33495, Arrays.asList(78, 93));
924
        map.put(33495, Arrays.asList(78, 93));
927
		map.put(32699, Arrays.asList(78, 93));
925
        map.put(32699, Arrays.asList(78, 93));
928
		map.put(31967, Arrays.asList(78, 93));
926
        map.put(31967, Arrays.asList(78, 93));
929
		map.put(33424, Arrays.asList(86, 103));
927
        map.put(33424, Arrays.asList(86, 103));
930
		map.put(33441, Arrays.asList(94, 113));
928
        map.put(33441, Arrays.asList(94, 113));
931
		map.put(33491, Arrays.asList(102, 123));
929
        map.put(33491, Arrays.asList(102, 123));
932
		map.put(32664, Arrays.asList(94, 112));
930
        map.put(32664, Arrays.asList(94, 112));
933
		map.put(33430, Arrays.asList(159, 181));
931
        map.put(33430, Arrays.asList(159, 181));
934
		map.put(33381, Arrays.asList(172, 195));
932
        map.put(33381, Arrays.asList(172, 195));
935
		map.put(33484, Arrays.asList(184, 209));
933
        map.put(33484, Arrays.asList(184, 209));
936
		map.put(32698, Arrays.asList(171, 194));
934
        map.put(32698, Arrays.asList(171, 194));
937
		map.put(32665, Arrays.asList(171, 194));
935
        map.put(32665, Arrays.asList(171, 194));
938
		map.put(33428, Arrays.asList(146, 166));
936
        map.put(33428, Arrays.asList(146, 166));
939
		map.put(33499, Arrays.asList(196, 223));
937
        map.put(33499, Arrays.asList(196, 223));
940
		map.put(33427, Arrays.asList(184, 208));
938
        map.put(33427, Arrays.asList(184, 208));
941
		map.put(33385, Arrays.asList(203, 230));
939
        map.put(33385, Arrays.asList(203, 230));
942
		map.put(33373, Arrays.asList(196, 222));
940
        map.put(33373, Arrays.asList(196, 222));
943
		map.put(33429, Arrays.asList(171, 193));
941
        map.put(33429, Arrays.asList(171, 193));
944
		map.put(33387, Arrays.asList(215, 244));
942
        map.put(33387, Arrays.asList(215, 244));
945
		map.put(33432, Arrays.asList(208, 236));
943
        map.put(33432, Arrays.asList(208, 236));
946
		map.put(32546, Arrays.asList(196, 222));
944
        map.put(32546, Arrays.asList(196, 222));
947
		map.put(33389, Arrays.asList(227, 257));
945
        map.put(33389, Arrays.asList(227, 257));
948
		map.put(33498, Arrays.asList(233, 264));
946
        map.put(33498, Arrays.asList(233, 264));
949
		map.put(33496, Arrays.asList(202, 229));
947
        map.put(33496, Arrays.asList(202, 229));
950
		map.put(32088, Arrays.asList(233, 264));
948
        map.put(32088, Arrays.asList(233, 264));
951
		map.put(33377, Arrays.asList(233, 264));
949
        map.put(33377, Arrays.asList(233, 264));
952
		map.put(33395, Arrays.asList(327, 392));
950
        map.put(33395, Arrays.asList(327, 392));
953
		map.put(33393, Arrays.asList(344, 413));
951
        map.put(33393, Arrays.asList(344, 413));
954
		map.put(32277, Arrays.asList(360, 432));
952
        map.put(32277, Arrays.asList(360, 432));
955
		map.put(33397, Arrays.asList(377, 452));
953
        map.put(33397, Arrays.asList(377, 452));
956
		map.put(32305, Arrays.asList(393, 472));
954
        map.put(32305, Arrays.asList(393, 472));
957
		map.put(33492, Arrays.asList(409, 491));
955
        map.put(33492, Arrays.asList(409, 491));
958
		map.put(33399, Arrays.asList(409, 491));
956
        map.put(33399, Arrays.asList(409, 491));
959
		map.put(33405, Arrays.asList(442, 531));
957
        map.put(33405, Arrays.asList(442, 531));
960
		map.put(33403, Arrays.asList(442, 531));
958
        map.put(33403, Arrays.asList(442, 531));
961
		map.put(32854, Arrays.asList(442, 531));
959
        map.put(32854, Arrays.asList(442, 531));
962
		map.put(32155, Arrays.asList(458, 550));
960
        map.put(32155, Arrays.asList(458, 550));
963
		map.put(32151, Arrays.asList(458, 550));
961
        map.put(32151, Arrays.asList(458, 550));
964
		map.put(33407, Arrays.asList(475, 570));
962
        map.put(33407, Arrays.asList(475, 570));
965
		map.put(32855, Arrays.asList(475, 570));
963
        map.put(32855, Arrays.asList(475, 570));
966
		map.put(33409, Arrays.asList(655, 786));
964
        map.put(33409, Arrays.asList(655, 786));
967
		map.put(33411, Arrays.asList(688, 825));
965
        map.put(33411, Arrays.asList(688, 825));
968
		map.put(32687, Arrays.asList(688, 825));
966
        map.put(32687, Arrays.asList(688, 825));
969
		map.put(33413, Arrays.asList(720, 865));
967
        map.put(33413, Arrays.asList(720, 865));
970
		map.put(33415, Arrays.asList(1032, 1238));
968
        map.put(33415, Arrays.asList(1032, 1238));
971
		map.put(33417, Arrays.asList(1097, 1316));
969
        map.put(33417, Arrays.asList(1097, 1316));
972
 
970
 
973
		Offer offer = offerRepository.selectById(1099);
971
        Offer offer = offerRepository.selectById(1099);
974
		List<TargetSlab> targetSlabs = offerTargetSlabRepository.getByOfferId(offer.getId());
972
        List<TargetSlab> targetSlabs = offerTargetSlabRepository.getByOfferId(offer.getId());
975
		ItemCriteria itemCriteria = targetSlabs.get(0).getItemCriteriaPayouts().get(0).getItemCriteria();
973
        ItemCriteria itemCriteria = targetSlabs.get(0).getItemCriteriaPayouts().get(0).getItemCriteria();
976
 
974
 
977
		Map<List<Integer>, List<Integer>> payoutModelsMap = map.entrySet().stream().map(x ->
975
        Map<List<Integer>, List<Integer>> payoutModelsMap = map.entrySet().stream().map(x ->
978
		{
976
        {
979
			try {
977
            try {
980
				int catalogId = itemRepository.selectById(x.getKey()).getCatalogItemId();
978
                int catalogId = itemRepository.selectById(x.getKey()).getCatalogItemId();
981
				return new AbstractMap.SimpleEntry<>(catalogId, x.getValue());
979
                return new AbstractMap.SimpleEntry<>(catalogId, x.getValue());
982
			} catch (Exception e) {
980
            } catch (Exception e) {
983
				return new AbstractMap.SimpleEntry<>(0, new ArrayList());
981
                return new AbstractMap.SimpleEntry<>(0, new ArrayList());
984
			}
982
            }
985
		}).collect(Collectors.groupingBy(x -> x.getValue(), Collectors.mapping(x -> x.getKey(), Collectors.toList())));
983
        }).collect(Collectors.groupingBy(x -> x.getValue(), Collectors.mapping(x -> x.getKey(), Collectors.toList())));
986
 
984
 
987
		payoutModelsMap.entrySet().stream().forEach(x ->
985
        payoutModelsMap.entrySet().stream().forEach(x ->
988
		{
986
        {
989
			itemCriteria.setCatalogIds(x.getValue());
987
            itemCriteria.setCatalogIds(x.getValue());
990
 
988
 
991
			com.spice.profitmandi.dao.entity.catalog.ItemCriteria itemCriteria1 = new com.spice.profitmandi.dao.entity.catalog.ItemCriteria();
989
            com.spice.profitmandi.dao.entity.catalog.ItemCriteria itemCriteria1 = new com.spice.profitmandi.dao.entity.catalog.ItemCriteria();
992
			itemCriteria1.setCriteria(gson.toJson(itemCriteria));
990
            itemCriteria1.setCriteria(gson.toJson(itemCriteria));
993
			itemCriteriaRepository.persist(itemCriteria1);
991
            itemCriteriaRepository.persist(itemCriteria1);
994
			com.spice.profitmandi.dao.entity.catalog.TargetSlab ts = new com.spice.profitmandi.dao.entity.catalog.TargetSlab();
992
            com.spice.profitmandi.dao.entity.catalog.TargetSlab ts = new com.spice.profitmandi.dao.entity.catalog.TargetSlab();
995
			ts.setOfferId(offer.getId());
993
            ts.setOfferId(offer.getId());
996
			ts.setAmountType(targetSlabs.get(0).getItemCriteriaPayouts().get(0).getAmountType());
994
            ts.setAmountType(targetSlabs.get(0).getItemCriteriaPayouts().get(0).getAmountType());
997
			ts.setPayoutTarget(25);
995
            ts.setPayoutTarget(25);
998
			ts.setItemCriteriaId(itemCriteria1.getId());
996
            ts.setItemCriteriaId(itemCriteria1.getId());
999
			ts.setPayoutValue(x.getKey().get(0));
997
            ts.setPayoutValue(x.getKey().get(0));
1000
			offerTargetSlabRepository.persist(ts);
998
            offerTargetSlabRepository.persist(ts);
1001
 
999
 
1002
			com.spice.profitmandi.dao.entity.catalog.TargetSlab ts1 = new com.spice.profitmandi.dao.entity.catalog.TargetSlab();
1000
            com.spice.profitmandi.dao.entity.catalog.TargetSlab ts1 = new com.spice.profitmandi.dao.entity.catalog.TargetSlab();
1003
			ts1.setOfferId(offer.getId());
1001
            ts1.setOfferId(offer.getId());
1004
			ts1.setAmountType(targetSlabs.get(0).getItemCriteriaPayouts().get(0).getAmountType());
1002
            ts1.setAmountType(targetSlabs.get(0).getItemCriteriaPayouts().get(0).getAmountType());
1005
			ts1.setPayoutTarget(100);
1003
            ts1.setPayoutTarget(100);
1006
			ts1.setItemCriteriaId(itemCriteria1.getId());
1004
            ts1.setItemCriteriaId(itemCriteria1.getId());
1007
			ts1.setPayoutValue(x.getKey().get(1));
1005
            ts1.setPayoutValue(x.getKey().get(1));
1008
			offerTargetSlabRepository.persist(ts1);
1006
            offerTargetSlabRepository.persist(ts1);
1009
		});
1007
        });
1010
 
1008
 
1011
	}
1009
    }
1012
 
1010
 
1013
	@Autowired
1011
    @Autowired
1014
	PriceDropRepository priceDropRepository;
1012
    PriceDropRepository priceDropRepository;
1015
 
1013
 
1016
 
1014
 
1017
	@Autowired
1015
    @Autowired
1018
	PriceDropIMEIRepository priceDropIMEIRepository;
1016
    PriceDropIMEIRepository priceDropIMEIRepository;
1019
 
1017
 
1020
	public void fixPriceDrop() throws ProfitMandiBusinessException {
1018
    public void fixPriceDrop() throws ProfitMandiBusinessException {
1021
		//List<Integer> priceDropIds = Arrays.asList(609, 610, 611, 648, 649, 650, 651, 653, 667, 691, 692, 693, 695, 696, 697, 698);
1019
        //List<Integer> priceDropIds = Arrays.asList(609, 610, 611, 648, 649, 650, 651, 653, 667, 691, 692, 693, 695, 696, 697, 698);
1022
		List<Integer> priceDropIds = Arrays.asList(609, 610, 611, 648, 649, 650, 651, 653, 667, 691, 692, 693, 695, 696, 697, 698, 645, 688);
1020
        List<Integer> priceDropIds = Arrays.asList(609, 610, 611, 648, 649, 650, 651, 653, 667, 691, 692, 693, 695, 696, 697, 698, 645, 688);
1023
		for (int priceDropId : priceDropIds) {
1021
        for (int priceDropId : priceDropIds) {
1024
			PriceDrop pd = priceDropRepository.selectById(priceDropId);
1022
            PriceDrop pd = priceDropRepository.selectById(priceDropId);
1025
			LOGGER.info("Price Drop ---- {}", pd);
1023
            LOGGER.info("Price Drop ---- {}", pd);
1026
			List<ImeiDropSummaryModel> actualList = priceDropService.getAllSerialNumbersByAffectedDate(pd.getAffectedOn(), pd.getCatalogItemId());
1024
            List<ImeiDropSummaryModel> actualList = priceDropService.getAllSerialNumbersByAffectedDate(pd.getAffectedOn(), pd.getCatalogItemId());
1027
			Map<String, ImeiDropSummaryModel> actualMap = actualList.stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x));
1025
            Map<String, ImeiDropSummaryModel> actualMap = actualList.stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x));
1028
 
1026
 
1029
			List<PriceDropIMEI> priceDropIMEIs = priceDropIMEIRepository.selectByPriceDropId(pd.getId());
1027
            List<PriceDropIMEI> priceDropIMEIs = priceDropIMEIRepository.selectByPriceDropId(pd.getId());
1030
			Map<String, PriceDropIMEI> oldImeisMap = priceDropIMEIs.stream().collect(Collectors.toMap(x -> x.getImei(), x -> x));
1028
            Map<String, PriceDropIMEI> oldImeisMap = priceDropIMEIs.stream().collect(Collectors.toMap(x -> x.getImei(), x -> x));
1031
 
1029
 
1032
			for (Map.Entry<String, PriceDropIMEI> entry : oldImeisMap.entrySet()) {
1030
            for (Map.Entry<String, PriceDropIMEI> entry : oldImeisMap.entrySet()) {
1033
				String imei = entry.getKey();
1031
                String imei = entry.getKey();
1034
				if (!actualMap.containsKey(imei)) {
1032
                if (!actualMap.containsKey(imei)) {
1035
					//This imei is invalid and need to be checked
1033
                    //This imei is invalid and need to be checked
1036
					if (!entry.getValue().getStatus().equals(PriceDropImeiStatus.REJECTED)) {
1034
                    if (!entry.getValue().getStatus().equals(PriceDropImeiStatus.REJECTED)) {
1037
						if (entry.getValue().getStatus().equals(PriceDropImeiStatus.PENDING)) {
1035
                        if (entry.getValue().getStatus().equals(PriceDropImeiStatus.PENDING)) {
1038
							LOGGER.info("Invalid pending imei -- {} should be deleted", imei);
1036
                            LOGGER.info("Invalid pending imei -- {} should be deleted", imei);
1039
						} else if (entry.getValue().getStatus().equals(PriceDropImeiStatus.APPROVED)) {
1037
                        } else if (entry.getValue().getStatus().equals(PriceDropImeiStatus.APPROVED)) {
1040
							LOGGER.info("Invalid approved imei -- {} should be reversed", imei);
1038
                            LOGGER.info("Invalid approved imei -- {} should be reversed", imei);
1041
						}
1039
                        }
1042
						//These values should either be rejected or rolledBack
1040
                        //These values should either be rejected or rolledBack
1043
						LOGGER.info("Should be rejected or rolledBack -- Imei --- {}, Status --- {}", imei, entry.getValue().getStatus());
1041
                        LOGGER.info("Should be rejected or rolledBack -- Imei --- {}, Status --- {}", imei, entry.getValue().getStatus());
1044
					} else {
1042
                    } else {
1045
						//Rejections can be ignored
1043
                        //Rejections can be ignored
1046
					}
1044
                    }
1047
				} else {
1045
                } else {
1048
					if (entry.getValue().getStatus().equals(PriceDropImeiStatus.REJECTED)) {
1046
                    if (entry.getValue().getStatus().equals(PriceDropImeiStatus.REJECTED)) {
1049
						LOGGER.info("Valid but rejected imeis should be retried, marked pending --- {}", imei);
1047
                        LOGGER.info("Valid but rejected imeis should be retried, marked pending --- {}", imei);
1050
						entry.getValue().setStatus(PriceDropImeiStatus.PENDING);
1048
                        entry.getValue().setStatus(PriceDropImeiStatus.PENDING);
1051
					}
1049
                    }
1052
				}
1050
                }
1053
			}
1051
            }
1054
 
1052
 
1055
			for (Map.Entry<String, ImeiDropSummaryModel> entry : actualMap.entrySet()) {
1053
            for (Map.Entry<String, ImeiDropSummaryModel> entry : actualMap.entrySet()) {
1056
				ImeiDropSummaryModel imeiDropSummaryModel = entry.getValue();
1054
                ImeiDropSummaryModel imeiDropSummaryModel = entry.getValue();
1057
				String imei = entry.getKey();
1055
                String imei = entry.getKey();
1058
				if (!oldImeisMap.containsKey(imei)) {
1056
                if (!oldImeisMap.containsKey(imei)) {
1059
					//this imei should be added for processing in pending state
1057
                    //this imei should be added for processing in pending state
1060
					PriceDropIMEI priceDropIMEI = new PriceDropIMEI();
1058
                    PriceDropIMEI priceDropIMEI = new PriceDropIMEI();
1061
					priceDropIMEI.setPriceDropId(priceDropId);
1059
                    priceDropIMEI.setPriceDropId(priceDropId);
1062
					priceDropIMEI.setStatus(PriceDropImeiStatus.PENDING);
1060
                    priceDropIMEI.setStatus(PriceDropImeiStatus.PENDING);
1063
					priceDropIMEI.setImei(imei);
1061
                    priceDropIMEI.setImei(imei);
1064
					priceDropIMEI.setPartnerId(imeiDropSummaryModel.getRetailerId());
1062
                    priceDropIMEI.setPartnerId(imeiDropSummaryModel.getRetailerId());
1065
					priceDropIMEI.setUpdateTimestamp(LocalDateTime.now());
1063
                    priceDropIMEI.setUpdateTimestamp(LocalDateTime.now());
1066
					priceDropIMEIRepository.persist(priceDropIMEI);
1064
                    priceDropIMEIRepository.persist(priceDropIMEI);
1067
					LOGGER.info("These imeis are added and were missing earlier --- {}", imei);
1065
                    LOGGER.info("These imeis are added and were missing earlier --- {}", imei);
1068
 
1066
 
1069
				}
1067
                }
1070
			}
1068
            }
1071
 
1069
 
1072
		}
1070
        }
1073
	}
1071
    }
1074
 
1072
 
1075
	@Autowired
1073
    @Autowired
1076
	private SaholicInventoryService saholicInventoryService;
1074
    private SaholicInventoryService saholicInventoryService;
1077
 
1075
 
1078
	public void updateSaholicCISTable() {
1076
    public void updateSaholicCISTable() {
1079
		saholicInventoryService.updateSaholicCIS();
1077
        saholicInventoryService.updateSaholicCIS();
1080
	}
1078
    }
1081
 
1079
 
1082
	@Autowired
1080
    @Autowired
1083
	BAGService bagService;
1081
    BAGService bagService;
1084
 
1082
 
1085
	public void testBag() throws Exception {
1083
    public void testBag() throws Exception {
1086
		//bagService.getPlans(10006, 10000f);
1084
        //bagService.getPlans(10006, 10000f);
1087
		//bagService.getBrandsMaster();
1085
        //bagService.getBrandsMaster();
1088
		bagService.getAllPlans();
1086
        bagService.getAllPlans();
1089
	}
1087
    }
1090
 
1088
 
1091
	@Autowired
1089
    @Autowired
1092
	private OneAssistService oneAssistService;
1090
    private OneAssistService oneAssistService;
1093
 
1091
 
1094
	public void cancelOnceAssist(String invoiceNumber) throws Exception {
1092
    public void cancelOnceAssist(String invoiceNumber) throws Exception {
1095
		FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
1093
        FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
1096
		insuranceService.cancelInsurance(fofoOrder);
1094
        insuranceService.cancelInsurance(fofoOrder);
1097
	}
1095
    }
1098
 
1096
 
1099
	public void mapBag() throws Exception {
1097
    public void mapBag() throws Exception {
1100
		List<Item> items = itemRepository.selectAllItems(10006, Arrays.asList("OnePlus", "Oppo", "Realme", "Samsung", "Vivo", "Xiaomi"));
1098
        List<Item> items = itemRepository.selectAllItems(10006, Arrays.asList("OnePlus", "Oppo", "Realme", "Samsung", "Vivo", "Xiaomi"));
1101
		items.stream().collect(Collectors.groupingBy(x -> x.getBrand()));
1099
        items.stream().collect(Collectors.groupingBy(x -> x.getBrand()));
1102
 
1100
 
1103
		List<CSVRecord> csvRecordList = FileUtil.readFile(new File("/home/amit/Documents/sample.csv"));
1101
        List<CSVRecord> csvRecordList = FileUtil.readFile(new File("/home/amit/Documents/sample.csv"));
1104
		for (CSVRecord csvRecord : csvRecordList) {
1102
        for (CSVRecord csvRecord : csvRecordList) {
1105
			Sample sample = new Sample(csvRecord.get(0), csvRecord.get(1), csvRecord.get(2));
1103
            Sample sample = new Sample(csvRecord.get(0), csvRecord.get(1), csvRecord.get(2));
1106
			//StringUtils.getLevenshteinDistance()
1104
            //StringUtils.getLevenshteinDistance()
1107
		}
1105
        }
1108
	}
1106
    }
1109
 
1107
 
1110
	public void reverseInvalidActivation(List<Integer> inventoryItemIds) throws Exception {
1108
    public void reverseInvalidActivation(List<Integer> inventoryItemIds) throws Exception {
1111
		orderService.reverseActivationScheme(inventoryItemIds);
1109
        orderService.reverseActivationScheme(inventoryItemIds);
1112
	}
1110
    }
1113
 
1111
 
1114
 
1112
 
1115
	@Autowired
1113
    @Autowired
1116
	CartRepository cartRepository;
1114
    CartRepository cartRepository;
1117
 
1115
 
1118
	@Autowired
1116
    @Autowired
1119
	CartService cartService;
1117
    CartService cartService;
1120
 
1118
 
1121
	@Autowired
1119
    @Autowired
1122
	private CommonPaymentService commonPaymentService;
1120
    private CommonPaymentService commonPaymentService;
1123
	;
1121
    ;
1124
 
1122
 
1125
	public void getSweet() throws Exception {
1123
    public void getSweet() throws Exception {
1126
		List<Integer> fofoIds = Arrays.asList(175139179, 175139178, 175138987, 175138174, 175138843, 175139094, 175135227, 175138908, 175138814, 175139015, 175135707, 175138886, 175139211, 175139130, 159690067, 175139161, 175138842, 175138867, 175139218, 175127215, 175139238, 175139267, 175138541, 175139248, 175138989, 175139232, 175139257, 175138840, 175138829, 175138836, 175139242, 175139217, 175139246, 175139222, 175139256, 175139261, 175139154, 175139266, 175138906, 175138820, 175138951, 175139255, 175139172, 175139264, 175138863, 175139029, 175138934, 175139258, 175139270, 175138408, 175139180, 175139230, 175135923, 175139237, 175139227, 175139191, 175139268, 175139203, 166900459, 175138982, 175139236, 175139205, 175139241, 175138875, 175139184, 175138948, 175139176, 175139189, 175139019, 175139233, 175139204, 175138868, 175139138, 175139262, 175139207, 175138871, 175139188, 175138929, 175139199, 167996137, 175139102, 175139259, 175139260, 175138827, 175139082, 175139158, 175139229, 175139149, 175139073, 175139215, 175139249, 175139223, 175139235, 175139006, 175139107, 175138970, 175139123, 175139114, 175139074, 175139135, 175138883, 175139187, 175139247, 175138856, 175138983, 175138832, 175139190, 175139231, 175139079, 157327507, 175138864, 175139129, 175139214, 175138876, 175139212, 175139146, 175139150, 175139069, 175139025, 175139202, 175139224, 175139243, 175138958, 175139045, 175139108, 175139195, 175139164, 175139181, 175139013, 175138844, 175139226, 175138816, 175139219, 175139088, 175138897, 175139081, 175139197, 175138931);
1124
        List<Integer> fofoIds = Arrays.asList(175139179, 175139178, 175138987, 175138174, 175138843, 175139094, 175135227, 175138908, 175138814, 175139015, 175135707, 175138886, 175139211, 175139130, 159690067, 175139161, 175138842, 175138867, 175139218, 175127215, 175139238, 175139267, 175138541, 175139248, 175138989, 175139232, 175139257, 175138840, 175138829, 175138836, 175139242, 175139217, 175139246, 175139222, 175139256, 175139261, 175139154, 175139266, 175138906, 175138820, 175138951, 175139255, 175139172, 175139264, 175138863, 175139029, 175138934, 175139258, 175139270, 175138408, 175139180, 175139230, 175135923, 175139237, 175139227, 175139191, 175139268, 175139203, 166900459, 175138982, 175139236, 175139205, 175139241, 175138875, 175139184, 175138948, 175139176, 175139189, 175139019, 175139233, 175139204, 175138868, 175139138, 175139262, 175139207, 175138871, 175139188, 175138929, 175139199, 167996137, 175139102, 175139259, 175139260, 175138827, 175139082, 175139158, 175139229, 175139149, 175139073, 175139215, 175139249, 175139223, 175139235, 175139006, 175139107, 175138970, 175139123, 175139114, 175139074, 175139135, 175138883, 175139187, 175139247, 175138856, 175138983, 175138832, 175139190, 175139231, 175139079, 157327507, 175138864, 175139129, 175139214, 175138876, 175139212, 175139146, 175139150, 175139069, 175139025, 175139202, 175139224, 175139243, 175138958, 175139045, 175139108, 175139195, 175139164, 175139181, 175139013, 175138844, 175139226, 175138816, 175139219, 175139088, 175138897, 175139081, 175139197, 175138931);
1127
		for (int fofoId : fofoIds) {
1125
        for (int fofoId : fofoIds) {
1128
			User user = userRepository.selectById(fofoId);
1126
            User user = userRepository.selectById(fofoId);
1129
			UserCart uc = new UserCart();
1127
            UserCart uc = new UserCart();
1130
			uc.setUserId(fofoId);
1128
            uc.setUserId(fofoId);
1131
			uc.setCartId(user.getActiveCartId());
1129
            uc.setCartId(user.getActiveCartId());
1132
			List<CartItem> cartItems = new ArrayList<>();
1130
            List<CartItem> cartItems = new ArrayList<>();
1133
			CartItem cartItem = new CartItem();
1131
            CartItem cartItem = new CartItem();
1134
			cartItem.setItemId(33855);
1132
            cartItem.setItemId(33855);
1135
			cartItem.setSellingPrice(0.1d);
1133
            cartItem.setSellingPrice(0.1d);
1136
			cartItem.setQuantity(1);
1134
            cartItem.setQuantity(1);
1137
			cartItems.add(cartItem);
1135
            cartItems.add(cartItem);
1138
			cartService.addItemsToCart(uc.getCartId(), cartItems);
1136
            cartService.addItemsToCart(uc.getCartId(), cartItems);
1139
			int transactionId = transactionService.createTransaction(uc, 0.1, 0);
1137
            int transactionId = transactionService.createTransaction(uc, 0.1, 0);
1140
			commonPaymentService.payThroughWallet(transactionId);
1138
            commonPaymentService.payThroughWallet(transactionId);
1141
			// Once paid let proceed to process the order further.
1139
            // Once paid let proceed to process the order further.
1142
 
1140
 
1143
			transactionService.processTransaction(transactionId);
1141
            transactionService.processTransaction(transactionId);
1144
		}
1142
        }
1145
	}
1143
    }
1146
 
1144
 
1147
	private class SioTuple {
1145
    private class SioTuple {
1148
		int inventoryId;
1146
        int inventoryId;
1149
		SchemeType schemeType;
1147
        SchemeType schemeType;
1150
 
1148
 
1151
		public SioTuple(int inventoryItemId, SchemeType schemeType) {
1149
        public SioTuple(int inventoryItemId, SchemeType schemeType) {
1152
			this.inventoryId = inventoryItemId;
1150
            this.inventoryId = inventoryItemId;
1153
			this.schemeType = schemeType;
1151
            this.schemeType = schemeType;
1154
		}
1152
        }
1155
 
1153
 
1156
		public int getInventoryId() {
1154
        public int getInventoryId() {
1157
			return inventoryId;
1155
            return inventoryId;
1158
		}
1156
        }
1159
 
1157
 
1160
		public void setInventoryId(int inventoryId) {
1158
        public void setInventoryId(int inventoryId) {
1161
			this.inventoryId = inventoryId;
1159
            this.inventoryId = inventoryId;
1162
		}
1160
        }
1163
 
1161
 
1164
		public SchemeType getSchemeType() {
1162
        public SchemeType getSchemeType() {
1165
			return schemeType;
1163
            return schemeType;
1166
		}
1164
        }
1167
 
1165
 
1168
		public void setSchemeType(SchemeType schemeType) {
1166
        public void setSchemeType(SchemeType schemeType) {
1169
			this.schemeType = schemeType;
1167
            this.schemeType = schemeType;
1170
		}
1168
        }
1171
 
1169
 
1172
		@Override
1170
        @Override
1173
		public int hashCode() {
1171
        public int hashCode() {
1174
			final int prime = 31;
1172
            final int prime = 31;
1175
			int result = 1;
1173
            int result = 1;
1176
			result = prime * result + getOuterType().hashCode();
1174
            result = prime * result + getOuterType().hashCode();
1177
			result = prime * result + inventoryId;
1175
            result = prime * result + inventoryId;
1178
			result = prime * result + ((schemeType == null) ? 0 : schemeType.hashCode());
1176
            result = prime * result + ((schemeType == null) ? 0 : schemeType.hashCode());
1179
			return result;
1177
            return result;
1180
		}
1178
        }
1181
 
1179
 
1182
		@Override
1180
        @Override
1183
		public boolean equals(Object obj) {
1181
        public boolean equals(Object obj) {
1184
			if (this == obj)
1182
            if (this == obj)
1185
				return true;
1183
                return true;
1186
			if (obj == null)
1184
            if (obj == null)
1187
				return false;
1185
                return false;
1188
			if (getClass() != obj.getClass())
1186
            if (getClass() != obj.getClass())
1189
				return false;
1187
                return false;
1190
			SioTuple other = (SioTuple) obj;
1188
            SioTuple other = (SioTuple) obj;
1191
			if (!getOuterType().equals(other.getOuterType()))
1189
            if (!getOuterType().equals(other.getOuterType()))
1192
				return false;
1190
                return false;
1193
			if (inventoryId != other.inventoryId)
1191
            if (inventoryId != other.inventoryId)
1194
				return false;
1192
                return false;
1195
			if (schemeType != other.schemeType)
1193
            if (schemeType != other.schemeType)
1196
				return false;
1194
                return false;
1197
			return true;
1195
            return true;
1198
		}
1196
        }
1199
 
1197
 
1200
		private RunOnceTasks getOuterType() {
1198
        private RunOnceTasks getOuterType() {
1201
			return RunOnceTasks.this;
1199
            return RunOnceTasks.this;
1202
		}
1200
        }
1203
 
1201
 
1204
	}
1202
    }
1205
 
1203
 
1206
	public void printPendingLeads() {
1204
    public void printPendingLeads() {
1207
		LOGGER.info("PENDING LEADES {}", leadRepository.selectLeadsScheduledBetweenDate(null,
1205
        LOGGER.info("PENDING LEADES {}", leadRepository.selectLeadsScheduledBetweenDate(null,
1208
				LocalDateTime.now().minusDays(15), LocalDateTime.now().plusHours(4)));
1206
                LocalDateTime.now().minusDays(15), LocalDateTime.now().plusHours(4)));
1209
	}
1207
    }
1210
 
1208
 
1211
	public void removeDuplicateOrders() throws Exception {
1209
    public void removeDuplicateOrders() throws Exception {
1212
		List<String> invoiceNumbers = Arrays.asList(/*
1210
        List<String> invoiceNumbers = Arrays.asList(/*
1213
				 * "DLWE066/1108", "DLWE066/299", "DLWE066/348", "HRFB004/242",
1211
                 * "DLWE066/1108", "DLWE066/299", "DLWE066/348", "HRFB004/242",
1214
				 * "HRFB004/243", "HRFB004/514", "HRFTB155/29", "HRJND076/1146",
1212
                 * "HRFB004/243", "HRFB004/514", "HRFTB155/29", "HRJND076/1146",
1215
				 * "HRJND076/966", "HRKA134/295", "HRKA134/421", "HRKK091/381",
1213
                 * "HRJND076/966", "HRKA134/295", "HRKA134/421", "HRKK091/381",
1216
				 * "HRMGH106/576", "HRSP056/139", "HRYN030/103", "UPGZ019/395",
1214
                 * "HRMGH106/576", "HRSP056/139", "HRYN030/103", "UPGZ019/395",
1217
				 * "UPHRD130/1299", "UPHRD130/456", "UPHRD130/634", "UPLKO063/897",
1215
                 * "UPHRD130/1299", "UPHRD130/456", "UPHRD130/634", "UPLKO063/897",
1218
				 * "UPMRT149/54", "UPSJP119/748", "UPSJP119/980", "UPSTP065/1218",
1216
                 * "UPMRT149/54", "UPSJP119/748", "UPSJP119/980", "UPSTP065/1218",
1219
				 * "UPSTP065/2039", "UPSTP090/437", "UPSTP120/164",
1217
                 * "UPSTP065/2039", "UPSTP090/437", "UPSTP120/164",
1220
				 */
1218
                 */
1221
				"HRMGH106/1576");
1219
                "HRMGH106/1576");
1222
 
1220
 
1223
		int totalAmount = 0;
1221
        int totalAmount = 0;
1224
		float saleAmount = 0;
1222
        float saleAmount = 0;
1225
		float schemeReverseAmount = 0;
1223
        float schemeReverseAmount = 0;
1226
		for (String invoiceNumber : invoiceNumbers) {
1224
        for (String invoiceNumber : invoiceNumbers) {
1227
			List<FofoOrder> orders = fofoOrderRepository.selectByInvoiceNumberLike(invoiceNumber);
1225
            List<FofoOrder> orders = fofoOrderRepository.selectByInvoiceNumberLike(invoiceNumber);
1228
			orders = orders.stream().skip(1).collect(Collectors.toList());
1226
            orders = orders.stream().skip(1).collect(Collectors.toList());
1229
			for (FofoOrder fofoOrder : orders) {
1227
            for (FofoOrder fofoOrder : orders) {
1230
				LOGGER.info("Fofo Order Id - {}, Invoice {}", fofoOrder.getId(), invoiceNumber);
1228
                LOGGER.info("Fofo Order Id - {}, Invoice {}", fofoOrder.getId(), invoiceNumber);
1231
				int inventoryItemId = 0;
1229
                int inventoryItemId = 0;
1232
				saleAmount += fofoOrder.getTotalAmount();
1230
                saleAmount += fofoOrder.getTotalAmount();
1233
				fofoOrderRepository.delete(fofoOrder);
1231
                fofoOrderRepository.delete(fofoOrder);
1234
				LOGGER.info("Fofo Order Id - {}, Invoice {}", fofoOrder.getId(), invoiceNumber);
1232
                LOGGER.info("Fofo Order Id - {}, Invoice {}", fofoOrder.getId(), invoiceNumber);
1235
				List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
1233
                List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
1236
				List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
1234
                List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
1237
						.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
1235
                        .selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
1238
				for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
1236
                for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
1239
					paymentOptionTransactionRepository.delete(paymentOptionTransaction);
1237
                    paymentOptionTransactionRepository.delete(paymentOptionTransaction);
1240
				}
1238
                }
1241
				for (FofoOrderItem foi : fofoOrderItems) {
1239
                for (FofoOrderItem foi : fofoOrderItems) {
1242
					List<FofoLineItem> flis = fofoLineItemRepository.selectByFofoOrderItemId(foi.getId());
1240
                    List<FofoLineItem> flis = fofoLineItemRepository.selectByFofoOrderItemId(foi.getId());
1243
					fofoOrderItemRepository.delete(foi);
1241
                    fofoOrderItemRepository.delete(foi);
1244
					for (FofoLineItem fli : flis) {
1242
                    for (FofoLineItem fli : flis) {
1245
						inventoryItemId = fli.getInventoryItemId();
1243
                        inventoryItemId = fli.getInventoryItemId();
1246
						fofoLineItemRepository.delete(fli);
1244
                        fofoLineItemRepository.delete(fli);
1247
					}
1245
                    }
1248
				}
1246
                }
1249
				// Rollback entry with reversal reason
1247
                // Rollback entry with reversal reason
1250
				if (fofoOrder.getCreateTimestamp().isAfter(LocalDate.of(2020, 4, 1).atStartOfDay())) {
1248
                if (fofoOrder.getCreateTimestamp().isAfter(LocalDate.of(2020, 4, 1).atStartOfDay())) {
1251
					float invoiceSchemeReversalAmount = 0;
1249
                    float invoiceSchemeReversalAmount = 0;
1252
					List<UserWalletHistory> userWalletHistory = userWalletHistoryRepository
1250
                    List<UserWalletHistory> userWalletHistory = userWalletHistoryRepository
1253
							.selectAllByreferenceIdandreferenceType(fofoOrder.getId(), WalletReferenceType.SCHEME_OUT);
1251
                            .selectAllByreferenceIdandreferenceType(fofoOrder.getId(), WalletReferenceType.SCHEME_OUT);
1254
					float invoiceWalletAmount = userWalletHistory.stream()
1252
                    float invoiceWalletAmount = userWalletHistory.stream()
1255
							.collect(Collectors.summingInt(y -> y.getAmount()));
1253
                            .collect(Collectors.summingInt(y -> y.getAmount()));
1256
					totalAmount += invoiceWalletAmount;
1254
                    totalAmount += invoiceWalletAmount;
1257
					try {
1255
                    try {
1258
						walletService.rollbackAmountFromWallet(fofoOrder.getFofoId(), invoiceWalletAmount,
1256
                        walletService.rollbackAmountFromWallet(fofoOrder.getFofoId(), invoiceWalletAmount,
1259
								fofoOrder.getId(), WalletReferenceType.SCHEME_OUT,
1257
                                fofoOrder.getId(), WalletReferenceType.SCHEME_OUT,
1260
								"Same order for Invoice-" + invoiceNumber + "created twice, duplicate invoice rollback",
1258
                                "Same order for Invoice-" + invoiceNumber + "created twice, duplicate invoice rollback",
1261
								fofoOrder.getCancelledTimestamp());
1259
                                fofoOrder.getCancelledTimestamp());
1262
					} catch (Exception e) {
1260
                    } catch (Exception e) {
1263
						LOGGER.info("Failed wallet update Reson [{}]", e.getMessage());
1261
                        LOGGER.info("Failed wallet update Reson [{}]", e.getMessage());
1264
					}
1262
                    }
1265
					LOGGER.info("inventoryItemId - {}", inventoryItemId);
1263
                    LOGGER.info("inventoryItemId - {}", inventoryItemId);
1266
					List<SchemeInOut> schemeInOuts = schemeInOutRepository
1264
                    List<SchemeInOut> schemeInOuts = schemeInOutRepository
1267
							.selectByInventoryItemIds(new HashSet<>(Arrays.asList(inventoryItemId)));
1265
                            .selectByInventoryItemIds(new HashSet<>(Arrays.asList(inventoryItemId)));
1268
					Set<Integer> schemeIds = new HashSet<>();
1266
                    Set<Integer> schemeIds = new HashSet<>();
1269
					Set<Integer> schemeIdsRolledback = new HashSet<>();
1267
                    Set<Integer> schemeIdsRolledback = new HashSet<>();
1270
					for (SchemeInOut sio : schemeInOuts) {
1268
                    for (SchemeInOut sio : schemeInOuts) {
1271
						if (Math.abs(sio.getCreateTimestamp().until(fofoOrder.getCreateTimestamp(),
1269
                        if (Math.abs(sio.getCreateTimestamp().until(fofoOrder.getCreateTimestamp(),
1272
								ChronoUnit.MINUTES)) <= 35 && sio.getRolledBackTimestamp() == null) {
1270
                                ChronoUnit.MINUTES)) <= 35 && sio.getRolledBackTimestamp() == null) {
1273
							LOGGER.info(sio);
1271
                            LOGGER.info(sio);
1274
							if (!schemeIds.contains(sio.getSchemeId())) {
1272
                            if (!schemeIds.contains(sio.getSchemeId())) {
1275
								schemeIds.add(sio.getSchemeId());
1273
                                schemeIds.add(sio.getSchemeId());
1276
							} else if (!schemeIdsRolledback.contains(sio.getSchemeId())) {
1274
                            } else if (!schemeIdsRolledback.contains(sio.getSchemeId())) {
1277
								schemeIdsRolledback.add(sio.getSchemeId());
1275
                                schemeIdsRolledback.add(sio.getSchemeId());
1278
								sio.setRolledBackTimestamp(LocalDateTime.now());
1276
                                sio.setRolledBackTimestamp(LocalDateTime.now());
1279
								schemeReverseAmount += sio.getAmount();
1277
                                schemeReverseAmount += sio.getAmount();
1280
								invoiceSchemeReversalAmount += sio.getAmount();
1278
                                invoiceSchemeReversalAmount += sio.getAmount();
1281
							}
1279
                            }
1282
						}
1280
                        }
1283
					}
1281
                    }
1284
					if (Math.abs(invoiceWalletAmount - invoiceSchemeReversalAmount) > 3) {
1282
                    if (Math.abs(invoiceWalletAmount - invoiceSchemeReversalAmount) > 3) {
1285
						LOGGER.info("No Matchhhh");
1283
                        LOGGER.info("No Matchhhh");
1286
					}
1284
                    }
1287
					LOGGER.info("invoiceWalletAmount - {}, invoiceSchemeReversalAmount {}", invoiceWalletAmount,
1285
                    LOGGER.info("invoiceWalletAmount - {}, invoiceSchemeReversalAmount {}", invoiceWalletAmount,
1288
							invoiceSchemeReversalAmount);
1286
                            invoiceSchemeReversalAmount);
1289
				}
1287
                }
1290
			}
1288
            }
1291
		}
1289
        }
1292
		LOGGER.info(
1290
        LOGGER.info(
1293
				"Total Sale Amount Reversal - {}, Total Wallet Amount Reversal {}, Total Scheme Reversal Amount - {}",
1291
                "Total Sale Amount Reversal - {}, Total Wallet Amount Reversal {}, Total Scheme Reversal Amount - {}",
1294
				saleAmount, totalAmount, schemeReverseAmount);
1292
                saleAmount, totalAmount, schemeReverseAmount);
1295
		// throw new Exception();
1293
        // throw new Exception();
1296
	}
1294
    }
1297
 
1295
 
1298
	public void createGeofence() throws IOException, ProfitMandiBusinessException {
1296
    public void createGeofence() throws IOException, ProfitMandiBusinessException {
1299
 
1297
 
1300
		// List<FofoStore> fofoStores = fofoStoreRepository.selectActiveStores();
1298
        // List<FofoStore> fofoStores = fofoStoreRepository.selectActiveStores();
1301
		// for (FofoStore fofoStore : fofoStores) {
1299
        // for (FofoStore fofoStore : fofoStores) {
1302
		// if (fofoStore.getLatitude() != null && fofoStore.getLongitude() != null) {
1300
        // if (fofoStore.getLatitude() != null && fofoStore.getLongitude() != null) {
1303
		CustomRetailer customRetailer = retailerService.getFofoRetailer(175138812);
1301
        CustomRetailer customRetailer = retailerService.getFofoRetailer(175138812);
1304
		OkHttpClient client = new OkHttpClient();
1302
        OkHttpClient client = new OkHttpClient();
1305
		okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/json");
1303
        okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/json");
1306
		JSONObject geofe = new JSONObject();
1304
        JSONObject geofe = new JSONObject();
1307
		JSONArray geofences = new JSONArray();
1305
        JSONArray geofences = new JSONArray();
1308
		JSONObject geometry = new JSONObject();
1306
        JSONObject geometry = new JSONObject();
1309
		JSONObject geo = new JSONObject();
1307
        JSONObject geo = new JSONObject();
1310
		JSONArray coordinates = new JSONArray();
1308
        JSONArray coordinates = new JSONArray();
1311
		ArrayList<Double> crds = new ArrayList<>();
1309
        ArrayList<Double> crds = new ArrayList<>();
1312
		// crds.add(Double.parseDouble(fofoStore.getLongitude()));
1310
        // crds.add(Double.parseDouble(fofoStore.getLongitude()));
1313
		// crds.add(Double.parseDouble(fofoStore.getLatitude()));
1311
        // crds.add(Double.parseDouble(fofoStore.getLatitude()));
1314
		crds.add(79.739197);
1312
        crds.add(79.739197);
1315
		crds.add(27.961215);
1313
        crds.add(27.961215);
1316
		// crds.add(77.08596155373755);
1314
        // crds.add(77.08596155373755);
1317
		// crds.add(28.64944201113976);
1315
        // crds.add(28.64944201113976);
1318
		// coordinates.put(fofoStore.getLongitude());
1316
        // coordinates.put(fofoStore.getLongitude());
1319
		// coordinates.put(fofoStore.getLatitude());
1317
        // coordinates.put(fofoStore.getLatitude());
1320
		geo.put("type", "Point");
1318
        geo.put("type", "Point");
1321
		geo.put("coordinates", crds);
1319
        geo.put("coordinates", crds);
1322
		geometry.put("geometry", geo);
1320
        geometry.put("geometry", geo);
1323
		JSONObject metadata = new JSONObject();
1321
        JSONObject metadata = new JSONObject();
1324
		metadata.put("name", customRetailer.getBusinessName());
1322
        metadata.put("name", customRetailer.getBusinessName());
1325
		metadata.put("city", customRetailer.getAddress().getCity());
1323
        metadata.put("city", customRetailer.getAddress().getCity());
1326
		metadata.put("Code", customRetailer.getCode());
1324
        metadata.put("Code", customRetailer.getCode());
1327
		geometry.put("metadata", metadata);
1325
        geometry.put("metadata", metadata);
1328
		geometry.put("radius", 200);
1326
        geometry.put("radius", 200);
1329
 
1327
 
1330
		geofences.put(geometry);
1328
        geofences.put(geometry);
1331
		geofe.put("geofences", geofences);
1329
        geofe.put("geofences", geofences);
1332
		okhttp3.RequestBody body = okhttp3.RequestBody.create(mediaType, geofe.toString());
1330
        okhttp3.RequestBody body = okhttp3.RequestBody.create(mediaType, geofe.toString());
1333
		String authString = "Basic "
1331
        String authString = "Basic "
1334
				+ Base64.getEncoder().encodeToString(String.format("%s:%s", ACCOUNT_ID, SECRET_KEY).getBytes());
1332
                + Base64.getEncoder().encodeToString(String.format("%s:%s", ACCOUNT_ID, SECRET_KEY).getBytes());
1335
 
1333
 
1336
		Request request1 = new Request.Builder().url("https://v3.api.hypertrack.com/geofences").post(body)
1334
        Request request1 = new Request.Builder().url("https://v3.api.hypertrack.com/geofences").post(body)
1337
				.addHeader("Authorization", authString).build();
1335
                .addHeader("Authorization", authString).build();
1338
 
1336
 
1339
		Response response = client.newCall(request1).execute();
1337
        Response response = client.newCall(request1).execute();
1340
 
1338
 
1341
		JSONArray ja = new JSONArray(response.body().string());
1339
        JSONArray ja = new JSONArray(response.body().string());
1342
		LOGGER.info("geofence" + ja);
1340
        LOGGER.info("geofence" + ja);
1343
		LOGGER.info("jalength" + ja.length());
1341
        LOGGER.info("jalength" + ja.length());
1344
		/*
1342
        /*
1345
		 * for (int i = 0; i < ja.length(); i++) { JSONObject c = ja.getJSONObject(i);
1343
         * for (int i = 0; i < ja.length(); i++) { JSONObject c = ja.getJSONObject(i);
1346
		 * String geofenceId = c.getString("geofence_id"); LOGGER.info("geofenceId" +
1344
         * String geofenceId = c.getString("geofence_id"); LOGGER.info("geofenceId" +
1347
		 * geofenceId); FofoStoreGeofence fsg = new FofoStoreGeofence();
1345
         * geofenceId); FofoStoreGeofence fsg = new FofoStoreGeofence();
1348
		 * fsg.setFofoId(customRetailer.getPartnerId()); fsg.setGeofenceId(geofenceId);
1346
         * fsg.setFofoId(customRetailer.getPartnerId()); fsg.setGeofenceId(geofenceId);
1349
		 * fofoStoreGeofenceRepository.persist(fsg); }
1347
         * fofoStoreGeofenceRepository.persist(fsg); }
1350
		 *
1348
         *
1351
		 * }
1349
         * }
1352
		 *
1350
         *
1353
		 * }
1351
         * }
1354
		 */
1352
         */
1355
 
1353
 
1356
	}
1354
    }
1357
 
1355
 
1358
	public void getAllGeofences() throws IOException, ProfitMandiBusinessException {
1356
    public void getAllGeofences() throws IOException, ProfitMandiBusinessException {
1359
 
1357
 
1360
		OkHttpClient client = new OkHttpClient();
1358
        OkHttpClient client = new OkHttpClient();
1361
 
1359
 
1362
		String authString = "Basic "
1360
        String authString = "Basic "
1363
				+ Base64.getEncoder().encodeToString(String.format("%s:%s", ACCOUNT_ID, SECRET_KEY).getBytes());
1361
                + Base64.getEncoder().encodeToString(String.format("%s:%s", ACCOUNT_ID, SECRET_KEY).getBytes());
1364
 
1362
 
1365
		// Get geofences created for all app users
1363
        // Get geofences created for all app users
1366
		Request request1 = new Request.Builder().url("https://v3.api.hypertrack.com/geofences")
1364
        Request request1 = new Request.Builder().url("https://v3.api.hypertrack.com/geofences")
1367
				.addHeader("Authorization", authString).build();
1365
                .addHeader("Authorization", authString).build();
1368
 
1366
 
1369
		Response response = client.newCall(request1).execute();
1367
        Response response = client.newCall(request1).execute();
1370
 
1368
 
1371
		LOGGER.info("response" + response.body().string());
1369
        LOGGER.info("response" + response.body().string());
1372
	}
1370
    }
1373
 
1371
 
1374
	public void deleteGeofences(List<String> geofenceIds) throws IOException, ProfitMandiBusinessException {
1372
    public void deleteGeofences(List<String> geofenceIds) throws IOException, ProfitMandiBusinessException {
1375
		OkHttpClient client = new OkHttpClient();
1373
        OkHttpClient client = new OkHttpClient();
1376
 
1374
 
1377
		String authString = "Basic "
1375
        String authString = "Basic "
1378
				+ Base64.getEncoder().encodeToString(String.format("%s:%s", ACCOUNT_ID, SECRET_KEY).getBytes());
1376
                + Base64.getEncoder().encodeToString(String.format("%s:%s", ACCOUNT_ID, SECRET_KEY).getBytes());
1379
 
1377
 
1380
		for (String geofenceId : geofenceIds) {
1378
        for (String geofenceId : geofenceIds) {
1381
			Request request1 = new Request.Builder().url("https://v3.api.hypertrack.com/geofences/" + geofenceId)
1379
            Request request1 = new Request.Builder().url("https://v3.api.hypertrack.com/geofences/" + geofenceId)
1382
					.delete().addHeader("Authorization", authString).build();
1380
                    .delete().addHeader("Authorization", authString).build();
1383
			LOGGER.info("geofenceId" + geofenceId);
1381
            LOGGER.info("geofenceId" + geofenceId);
1384
			Response response = client.newCall(request1).execute();
1382
            Response response = client.newCall(request1).execute();
1385
 
1383
 
1386
			LOGGER.info("response" + response.body().string());
1384
            LOGGER.info("response" + response.body().string());
1387
		}
1385
        }
1388
 
1386
 
1389
	}
1387
    }
1390
 
1388
 
1391
	public void processSchemeOut(int fofoId, int orderId) throws Exception {
1389
    public void processSchemeOut(int fofoId, int orderId) throws Exception {
1392
		schemeService.processSchemeOut(orderId, fofoId);
1390
        schemeService.processSchemeOut(orderId, fofoId);
1393
 
1391
 
1394
	}
1392
    }
1395
 
1393
 
1396
	public void createDummyInvoices() {
1394
    public void createDummyInvoices() {
1397
		List<WarehouseInventoryItem> lavaInventoryItems = warehouseInventoryItemRepository.getSerialNumbers("Lava",
1395
        List<WarehouseInventoryItem> lavaInventoryItems = warehouseInventoryItemRepository.getSerialNumbers("Lava",
1398
				LocalDate.of(2020, Month.SEPTEMBER, 1).atStartOfDay(), LocalDateTime.now());
1396
                LocalDate.of(2020, Month.SEPTEMBER, 1).atStartOfDay(), LocalDateTime.now());
1399
		LOGGER.info("Lava Inventory Size is {}", lavaInventoryItems.size());
1397
        LOGGER.info("Lava Inventory Size is {}", lavaInventoryItems.size());
1400
	}
1398
    }
1401
 
1399
 
1402
	@Autowired
1400
    @Autowired
1403
	private WarehouseScanRepository warehouseScanRepository;
1401
    private WarehouseScanRepository warehouseScanRepository;
1404
 
1402
 
1405
	@Autowired
1403
    @Autowired
1406
	private WarehouseInventoryService warehouseInventoryService;
1404
    private WarehouseInventoryService warehouseInventoryService;
1407
 
1405
 
1408
	public void genericCreateCurrentInventorySnapshot() throws Exception {
1406
    public void genericCreateCurrentInventorySnapshot() throws Exception {
1409
		purchaseService.genericCreateCurrentInventorySnapshot(175138856, 32820, 2);
1407
        purchaseService.genericCreateCurrentInventorySnapshot(175138856, 32820, 2);
1410
	}
1408
    }
1411
 
1409
 
1412
	public void fixScans() {
1410
    public void fixScans() {
1413
		Map<Integer, Integer> inventoryOrderMap = new HashMap<>();
1411
        Map<Integer, Integer> inventoryOrderMap = new HashMap<>();
1414
		inventoryOrderMap.put(348795, 1628598);
1412
        inventoryOrderMap.put(348795, 1628598);
1415
		inventoryOrderMap.put(348796, 1628599);
1413
        inventoryOrderMap.put(348796, 1628599);
1416
		inventoryOrderMap.put(329854, 1628600);
1414
        inventoryOrderMap.put(329854, 1628600);
1417
		inventoryOrderMap.put(334197, 1628602);
1415
        inventoryOrderMap.put(334197, 1628602);
1418
		inventoryOrderMap.put(330110, 1628603);
1416
        inventoryOrderMap.put(330110, 1628603);
1419
		inventoryOrderMap.put(330111, 1628604);
1417
        inventoryOrderMap.put(330111, 1628604);
1420
		inventoryOrderMap.put(332843, 1628605);
1418
        inventoryOrderMap.put(332843, 1628605);
1421
		inventoryOrderMap.put(338067, 1628606);
1419
        inventoryOrderMap.put(338067, 1628606);
1422
		inventoryOrderMap.put(338974, 1628609);
1420
        inventoryOrderMap.put(338974, 1628609);
1423
		inventoryOrderMap.put(338975, 1628610);
1421
        inventoryOrderMap.put(338975, 1628610);
1424
		inventoryOrderMap.put(338971, 1628612);
1422
        inventoryOrderMap.put(338971, 1628612);
1425
		inventoryOrderMap.put(338588, 1628615);
1423
        inventoryOrderMap.put(338588, 1628615);
1426
		inventoryOrderMap.put(368205, 1631619);
1424
        inventoryOrderMap.put(368205, 1631619);
1427
		inventoryOrderMap.put(368206, 1631620);
1425
        inventoryOrderMap.put(368206, 1631620);
1428
		inventoryOrderMap.put(368207, 1631621);
1426
        inventoryOrderMap.put(368207, 1631621);
1429
		inventoryOrderMap.put(368208, 1631622);
1427
        inventoryOrderMap.put(368208, 1631622);
1430
		inventoryOrderMap.put(368209, 1631623);
1428
        inventoryOrderMap.put(368209, 1631623);
1431
		inventoryOrderMap.put(368211, 1631625);
1429
        inventoryOrderMap.put(368211, 1631625);
1432
		inventoryOrderMap.put(368213, 1631627);
1430
        inventoryOrderMap.put(368213, 1631627);
1433
		inventoryOrderMap.put(368214, 1631628);
1431
        inventoryOrderMap.put(368214, 1631628);
1434
		inventoryOrderMap.put(368203, 1631629);
1432
        inventoryOrderMap.put(368203, 1631629);
1435
		inventoryOrderMap.put(368216, 1631630);
1433
        inventoryOrderMap.put(368216, 1631630);
1436
		inventoryOrderMap.put(368217, 1631631);
1434
        inventoryOrderMap.put(368217, 1631631);
1437
		inventoryOrderMap.put(368218, 1631632);
1435
        inventoryOrderMap.put(368218, 1631632);
1438
		inventoryOrderMap.put(368219, 1631633);
1436
        inventoryOrderMap.put(368219, 1631633);
1439
		inventoryOrderMap.put(368222, 1631635);
1437
        inventoryOrderMap.put(368222, 1631635);
1440
		List<WarehouseScan> scans = warehouseScanRepository
1438
        List<WarehouseScan> scans = warehouseScanRepository
1441
				.selectAllByInventoryItemIds(new ArrayList<>(inventoryOrderMap.keySet()));
1439
                .selectAllByInventoryItemIds(new ArrayList<>(inventoryOrderMap.keySet()));
1442
		Map<Integer, List<WarehouseScan>> inventoryScansMap = scans.stream()
1440
        Map<Integer, List<WarehouseScan>> inventoryScansMap = scans.stream()
1443
				.collect(Collectors.groupingBy(WarehouseScan::getInventoryItemId));
1441
                .collect(Collectors.groupingBy(WarehouseScan::getInventoryItemId));
1444
 
1442
 
1445
		for (Map.Entry<Integer, List<WarehouseScan>> mapEntry : inventoryScansMap.entrySet()) {
1443
        for (Map.Entry<Integer, List<WarehouseScan>> mapEntry : inventoryScansMap.entrySet()) {
1446
			int inventoryItemId = mapEntry.getKey();
1444
            int inventoryItemId = mapEntry.getKey();
1447
			List<WarehouseScan> duplicateScans = mapEntry.getValue().stream().filter(
1445
            List<WarehouseScan> duplicateScans = mapEntry.getValue().stream().filter(
1448
							x -> x.getOrderId() != null && x.getOrderId().equals(inventoryOrderMap.get(inventoryItemId)))
1446
                            x -> x.getOrderId() != null && x.getOrderId().equals(inventoryOrderMap.get(inventoryItemId)))
1449
					.collect(Collectors.toList());
1447
                    .collect(Collectors.toList());
1450
			WarehouseScan duplicateScan = duplicateScans.stream().skip(1).findFirst().get();
1448
            WarehouseScan duplicateScan = duplicateScans.stream().skip(1).findFirst().get();
1451
			warehouseScanRepository.delete(duplicateScan);
1449
            warehouseScanRepository.delete(duplicateScan);
1452
			warehouseInventoryService.addQuantity(duplicateScan.getInventoryItemId(), duplicateScan.getQuantity());
1450
            warehouseInventoryService.addQuantity(duplicateScan.getInventoryItemId(), duplicateScan.getQuantity());
1453
 
1451
 
1454
		}
1452
        }
1455
 
1453
 
1456
	}
1454
    }
1457
 
1455
 
1458
	public void fixOffer() throws Exception {
1456
    public void fixOffer() throws Exception {
1459
		List<Integer> offerIds = Arrays.asList(228, 241, 242, 243, 244, 253);
1457
        List<Integer> offerIds = Arrays.asList(228, 241, 242, 243, 244, 253);
1460
		List<Integer> fofoIds = fofoStoreRepository.selectAll().stream().filter(x -> x.getWarehouseId() == 7678)
1458
        List<Integer> fofoIds = fofoStoreRepository.selectAll().stream().filter(x -> x.getWarehouseId() == 7678)
1461
				.map(x -> x.getId()).collect(Collectors.toList());
1459
                .map(x -> x.getId()).collect(Collectors.toList());
1462
		LOGGER.info("UP West Partner Ids - {}", fofoIds);
1460
        LOGGER.info("UP West Partner Ids - {}", fofoIds);
1463
		for (int offerId : offerIds) {
1461
        for (int offerId : offerIds) {
1464
			Offer offer = offerRepository.selectById(offerId);
1462
            Offer offer = offerRepository.selectById(offerId);
1465
 
1463
 
1466
			PartnerCriteria partnerCriteria = gson.fromJson(offer.getPartnerCriteria(), PartnerCriteria.class);
1464
            PartnerCriteria partnerCriteria = gson.fromJson(offer.getPartnerCriteria(), PartnerCriteria.class);
1467
			LOGGER.info("Offer Partner Ids - {}", partnerCriteria.getFofoIds());
1465
            LOGGER.info("Offer Partner Ids - {}", partnerCriteria.getFofoIds());
1468
			for (Integer fofoId : fofoIds) {
1466
            for (Integer fofoId : fofoIds) {
1469
				if (partnerCriteria.getFofoIds().contains(fofoId)) {
1467
                if (partnerCriteria.getFofoIds().contains(fofoId)) {
1470
					// This shoud be removed
1468
                    // This shoud be removed
1471
					LOGGER.info("This shoud be removed FofoStore Code - {}",
1469
                    LOGGER.info("This shoud be removed FofoStore Code - {}",
1472
							fofoStoreRepository.selectByRetailerId(fofoId).getCode());
1470
                            fofoStoreRepository.selectByRetailerId(fofoId).getCode());
1473
					partnerCriteria.getFofoIds().remove(fofoId);
1471
                    partnerCriteria.getFofoIds().remove(fofoId);
1474
				}
1472
                }
1475
			}
1473
            }
1476
			offer.setPartnerCriteria(gson.toJson(partnerCriteria));
1474
            offer.setPartnerCriteria(gson.toJson(partnerCriteria));
1477
		}
1475
        }
1478
	}
1476
    }
1479
 
1477
 
1480
	public void reverseMaa() throws Exception {
1478
    public void reverseMaa() throws Exception {
1481
		Purchase purchase = purchaseRepository.selectById(28877);
1479
        Purchase purchase = purchaseRepository.selectById(28877);
1482
		Set<Integer> inventoryItemIds = inventoryItemRepository.selectByPurchaseId(28877).stream().map(x -> x.getId())
1480
        Set<Integer> inventoryItemIds = inventoryItemRepository.selectByPurchaseId(28877).stream().map(x -> x.getId())
1483
				.collect(Collectors.toSet());
1481
                .collect(Collectors.toSet());
1484
		double totalAmount = schemeInOutRepository.selectByInventoryItemIds(inventoryItemIds).stream()
1482
        double totalAmount = schemeInOutRepository.selectByInventoryItemIds(inventoryItemIds).stream()
1485
				/*
1483
                /*
1486
				 * .filter(x -> x.getRolledBackTimestamp() == null ||
1484
                 * .filter(x -> x.getRolledBackTimestamp() == null ||
1487
				 * x.getStatusDescription().contains("investment")) .map(x -> {
1485
                 * x.getStatusDescription().contains("investment")) .map(x -> {
1488
				 * x.setRolledBackTimestamp(LocalDateTime.now());
1486
                 * x.setRolledBackTimestamp(LocalDateTime.now());
1489
				 * x.setStatus(SchemePayoutStatus.REJECTED); x.
1487
                 * x.setStatus(SchemePayoutStatus.REJECTED); x.
1490
				 * setStatusDescription("Invoice-NSLCK3350 was cancelled, hence all schemes were rolled back"
1488
                 * setStatusDescription("Invoice-NSLCK3350 was cancelled, hence all schemes were rolled back"
1491
				 * ); return x; })
1489
                 * ); return x; })
1492
				 */
1490
                 */
1493
				.collect(Collectors.summingDouble(x -> x.getAmount()));
1491
                .collect(Collectors.summingDouble(x -> x.getAmount()));
1494
		WalletReferenceType walletReferenceType = WalletReferenceType.OTHERS;
1492
        WalletReferenceType walletReferenceType = WalletReferenceType.OTHERS;
1495
		ManualPaymentType paymentType = manualPaymentRequestRepository.selectByReferenceType(walletReferenceType);
1493
        ManualPaymentType paymentType = manualPaymentRequestRepository.selectByReferenceType(walletReferenceType);
1496
		if (paymentType == null) {
1494
        if (paymentType == null) {
1497
			paymentType = new ManualPaymentType();
1495
            paymentType = new ManualPaymentType();
1498
			paymentType.setReferenceType(walletReferenceType);
1496
            paymentType.setReferenceType(walletReferenceType);
1499
			manualPaymentRequestRepository.persist(paymentType);
1497
            manualPaymentRequestRepository.persist(paymentType);
1500
		}
1498
        }
1501
		paymentType.setCounter(paymentType.getCounter() + 1);
1499
        paymentType.setCounter(paymentType.getCounter() + 1);
1502
		int reference = paymentType.getCounter();
1500
        int reference = paymentType.getCounter();
1503
		walletService.consumeAmountFromWallet(purchase.getFofoId(), reference, WalletReferenceType.OTHERS,
1501
        walletService.consumeAmountFromWallet(purchase.getFofoId(), reference, WalletReferenceType.OTHERS,
1504
				"Invoice-NSLCK3350 was cancelled, hence all schemes were rolled back", (int) totalAmount,
1502
                "Invoice-NSLCK3350 was cancelled, hence all schemes were rolled back", (int) totalAmount,
1505
				LocalDateTime.now());
1503
                LocalDateTime.now());
1506
		LOGGER.info("Total Deduction is around Rs. {}", totalAmount);
1504
        LOGGER.info("Total Deduction is around Rs. {}", totalAmount);
1507
	}
1505
    }
1508
 
1506
 
1509
	public void opporeno() {
1507
    public void opporeno() {
1510
		List<Integer> offerIds = Arrays.asList(270, 269, 267, 265, 264, 257, 253, 244, 243, 242, 241, 240, 239, 228,
1508
        List<Integer> offerIds = Arrays.asList(270, 269, 267, 265, 264, 257, 253, 244, 243, 242, 241, 240, 239, 228,
1511
				227, 226, 225);
1509
                227, 226, 225);
1512
		for (Integer offerId : offerIds) {
1510
        for (Integer offerId : offerIds) {
1513
			Offer offer = offerRepository.selectById(offerId);
1511
            Offer offer = offerRepository.selectById(offerId);
1514
			com.spice.profitmandi.service.offers.ItemCriteria itemCriteria = gson.fromJson(offer.getItemCriteria(),
1512
            com.spice.profitmandi.service.offers.ItemCriteria itemCriteria = gson.fromJson(offer.getItemCriteria(),
1515
					com.spice.profitmandi.service.offers.ItemCriteria.class);
1513
                    com.spice.profitmandi.service.offers.ItemCriteria.class);
1516
			if (itemCriteria.getExcludeCatalogIds().contains(1022950)) {
1514
            if (itemCriteria.getExcludeCatalogIds().contains(1022950)) {
1517
				System.out.println("Excludes reno");
1515
                System.out.println("Excludes reno");
1518
			} else {
1516
            } else {
1519
				System.out.println("Does not excludes reno.. excluding it");
1517
                System.out.println("Does not excludes reno.. excluding it");
1520
				itemCriteria.getExcludeCatalogIds().add(1022950);
1518
                itemCriteria.getExcludeCatalogIds().add(1022950);
1521
				offer.setItemCriteria(gson.toJson(itemCriteria));
1519
                offer.setItemCriteria(gson.toJson(itemCriteria));
1522
			}
1520
            }
1523
 
1521
 
1524
		}
1522
        }
1525
	}
1523
    }
1526
 
1524
 
1527
	@Autowired
1525
    @Autowired
1528
	SaholicReservationSnapshotRepository saholicReservationSnapshotRepository;
1526
    SaholicReservationSnapshotRepository saholicReservationSnapshotRepository;
1529
 
1527
 
1530
	public void fixReservations() throws Exception {
1528
    public void fixReservations() throws Exception {
1531
		// Clear all Reservations
1529
        // Clear all Reservations
1532
		saholicInventorySnapshotRepository.selectAll().stream().forEach(x -> x.setReserved(0));
1530
        saholicInventorySnapshotRepository.selectAll().stream().forEach(x -> x.setReserved(0));
1533
		saholicReservationSnapshotRepository.selectAll().forEach(x -> saholicReservationSnapshotRepository.delete(x));
1531
        saholicReservationSnapshotRepository.selectAll().forEach(x -> saholicReservationSnapshotRepository.delete(x));
1534
		List<Order> orders = orderRepository.selectAllOrderDatesBetweenByStatus(
1532
        List<Order> orders = orderRepository.selectAllOrderDatesBetweenByStatus(
1535
				LocalDate.now().minusDays(40).atStartOfDay(), LocalDateTime.now(),
1533
                LocalDate.now().minusDays(40).atStartOfDay(), LocalDateTime.now(),
1536
				OrderStatus.SUBMITTED_FOR_PROCESSING);
1534
                OrderStatus.SUBMITTED_FOR_PROCESSING);
1537
		for (Order order : orders) {
1535
        for (Order order : orders) {
1538
			SaholicReservationSnapshot saholicReservationSnapshot = saholicReservationSnapshotRepository
1536
            SaholicReservationSnapshot saholicReservationSnapshot = saholicReservationSnapshotRepository
1539
					.selectByOrderId(order.getId());
1537
                    .selectByOrderId(order.getId());
1540
			if (saholicReservationSnapshot == null) {
1538
            if (saholicReservationSnapshot == null) {
1541
				saholicInventoryService.addReservationCount(order.getLineItem().getItemId(),
1539
                saholicInventoryService.addReservationCount(order.getLineItem().getItemId(),
1542
						order.getFulfilmentWarehouseId(), order.getLineItem().getQuantity(), order.getId());
1540
                        order.getFulfilmentWarehouseId(), order.getLineItem().getQuantity(), order.getId());
1543
			}
1541
            }
1544
		}
1542
        }
1545
	}
1543
    }
1546
 
1544
 
1547
	public void fixOrders() throws Exception {
1545
    public void fixOrders() throws Exception {
1548
		List<Order> orders = orderRepository.selectAllOrderDatesBetweenByStatus(
1546
        List<Order> orders = orderRepository.selectAllOrderDatesBetweenByStatus(
1549
				LocalDate.now().minusDays(10).atStartOfDay(), LocalDateTime.now(),
1547
                LocalDate.now().minusDays(10).atStartOfDay(), LocalDateTime.now(),
1550
				OrderStatus.SUBMITTED_FOR_PROCESSING);
1548
                OrderStatus.SUBMITTED_FOR_PROCESSING);
1551
		orders = orders.stream().filter(x -> x.getCreateTimestamp().isAfter(LocalDateTime.of(2021, 7, 21, 0, 0, 0)))
1549
        orders = orders.stream().filter(x -> x.getCreateTimestamp().isAfter(LocalDateTime.of(2021, 7, 21, 0, 0, 0)))
1552
				.collect(Collectors.toList());
1550
                .collect(Collectors.toList());
1553
		for (Order order : orders) {
1551
        for (Order order : orders) {
1554
 
1552
 
1555
			LineItem lineItem = lineItemRepository.selectById(order.getLineItem().getId());
1553
            LineItem lineItem = lineItemRepository.selectById(order.getLineItem().getId());
1556
			if (order.getOrderType() == null) {
1554
            if (order.getOrderType() == null) {
1557
				order.setProductCondition(0);
1555
                order.setProductCondition(0);
1558
				order.setOrderType(0);
1556
                order.setOrderType(0);
1559
				int itemId = order.getLineItem().getItemId();
1557
                int itemId = order.getLineItem().getItemId();
1560
				int fulfillmentWarehouseId = order.getFulfilmentWarehouseId();
1558
                int fulfillmentWarehouseId = order.getFulfilmentWarehouseId();
1561
				System.out.println("Item id " + itemId);
1559
                System.out.println("Item id " + itemId);
1562
				Item item = itemRepository.selectById(itemId);
1560
                Item item = itemRepository.selectById(itemId);
1563
 
1561
 
1564
				VendorItemPricing vendorItemPricing = vendorItemPricingRepository.selectByItemIdAndVendorId(itemId,
1562
                VendorItemPricing vendorItemPricing = vendorItemPricingRepository.selectByItemIdAndVendorId(itemId,
1565
						fulfillmentWarehouseId);
1563
                        fulfillmentWarehouseId);
1566
				if (vendorItemPricing == null) {
1564
                if (vendorItemPricing == null) {
1567
					vendorItemPricing = vendorItemPricingRepository.selectAll(itemId).get(0);
1565
                    vendorItemPricing = vendorItemPricingRepository.selectAll(itemId).get(0);
1568
				}
1566
                }
1569
				System.out.println("vendorItemPricing " + vendorItemPricing);
1567
                System.out.println("vendorItemPricing " + vendorItemPricing);
1570
				lineItem.setProductGoup(item.getProductGroup());
1568
                lineItem.setProductGoup(item.getProductGroup());
1571
				lineItem.setColor(item.getColor());
1569
                lineItem.setColor(item.getColor());
1572
				lineItem.setNlc(vendorItemPricing.getNlc());
1570
                lineItem.setNlc(vendorItemPricing.getNlc());
1573
				lineItem.setTransferPrice(vendorItemPricing.getTp());
1571
                lineItem.setTransferPrice(vendorItemPricing.getTp());
1574
				lineItem.setLogisticsCost(0f);
1572
                lineItem.setLogisticsCost(0f);
1575
				lineItem.setCodCollectionCharges(0f);
1573
                lineItem.setCodCollectionCharges(0f);
1576
 
1574
 
1577
			}
1575
            }
1578
 
1576
 
1579
			int warehouseTo = fofoStoreRepository.selectByRetailerId(order.getRetailerId()).getWarehouseId();
1577
            int warehouseTo = fofoStoreRepository.selectByRetailerId(order.getRetailerId()).getWarehouseId();
1580
			int itemId = order.getLineItem().getItemId();
1578
            int itemId = order.getLineItem().getItemId();
1581
			Warehouse warehouse = transactionService.getFulfilmentWarehouseMap(Arrays.asList(itemId), warehouseTo)
1579
            Warehouse warehouse = transactionService.getFulfilmentWarehouseMap(Arrays.asList(itemId), warehouseTo)
1582
					.get(itemId);
1580
                    .get(itemId);
1583
			LOGGER.info(
1581
            LOGGER.info(
1584
					"Order Id - {}, WarehouseTo - {}, Item Id - {}, Warehouse From - {}, Fulfilment Warehouse Id - {}",
1582
                    "Order Id - {}, WarehouseTo - {}, Item Id - {}, Warehouse From - {}, Fulfilment Warehouse Id - {}",
1585
					order.getId(), warehouseTo, itemId, warehouse.getBillingWarehouseId(), warehouse.getId());
1583
                    order.getId(), warehouseTo, itemId, warehouse.getBillingWarehouseId(), warehouse.getId());
1586
			order.setWarehouseId(warehouse.getBillingWarehouseId());
1584
            order.setWarehouseId(warehouse.getBillingWarehouseId());
1587
			order.setFulfilmentWarehouseId(warehouse.getId());
1585
            order.setFulfilmentWarehouseId(warehouse.getId());
1588
 
1586
 
1589
		}
1587
        }
1590
 
1588
 
1591
	}
1589
    }
1592
 
1590
 
1593
	@Autowired
1591
    @Autowired
1594
	PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
1592
    PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
1595
 
1593
 
1596
	public void addInvestment() {
1594
    public void addInvestment() {
1597
		List<LocalDate> dates = Arrays.asList(
1595
        LocalDate currentDate = LocalDate.now();
1598
				LocalDate.of(2022, 12, 1)
1596
        YearMonth currentMonth = YearMonth.from(currentDate);
1599
		);
1597
        List<LocalDate> dates = new ArrayList<>();
1600
		// List<Integer> fofoIds = Arrays.asList(175136207, 175138910, 175138967,
1598
        for (int i = 1; i < currentDate.getDayOfMonth(); i++) {
1601
		// 175138990, 175138999);
1599
            LocalDate date = currentMonth.atDay(i);
1602
		for (LocalDate date : dates) {
1600
            boolean exists = partnerDailyInvestmentRepository.isDateExist(date);
1603
			LOGGER.info("Date - {}", date);
1601
            if(!exists) {
1604
			Map<Integer, PartnerDailyInvestment> investmentMap = partnerDailyInvestmentRepository
1602
                dates.add(date);
1605
					.selectAll(date.plusDays(1)).stream().collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
1603
            }
1606
			List<PartnerDailyInvestment> investments = partnerDailyInvestmentRepository.selectAll(date.minusDays(1));
1604
        }
1607
			for (PartnerDailyInvestment investment : investments) {
1605
        for (LocalDate date : dates) {
1608
				if (investmentMap.get(investment.getFofoId()) == null || (investmentMap.get(investment.getFofoId())
1606
            LOGGER.info("Date - {}", date);
1609
						.getShortPercentage() <= 10) == (investment.getShortPercentage() <= 10)) {
1607
            Map<Integer, PartnerDailyInvestment> investmentMap = partnerDailyInvestmentRepository
1610
					// Do nothing add investment as is
1608
                    .selectAll(date.plusDays(1)).stream().collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
1611
				} else {
1609
            List<PartnerDailyInvestment> investments = partnerDailyInvestmentRepository.selectAll(date.minusDays(1));
1612
					LOGGER.info("Problem with fofo id => {}", investment.getFofoId());
1610
            for (PartnerDailyInvestment investment : investments) {
1613
					// Lets give benefit of doubt
1611
                if (investmentMap.get(investment.getFofoId()) == null || (investmentMap.get(investment.getFofoId())
1614
					if (investment.getShortPercentage() > 10) {
1612
                        .getShortPercentage() <= 10) == (investment.getShortPercentage() <= 10)) {
1615
						investment = investmentMap.get(investment.getFofoId());
1613
                    // Do nothing add investment as is
1616
					}
1614
                } else {
1617
				}
1615
                    LOGGER.info("Problem with fofo id => {}", investment.getFofoId());
1618
				PartnerDailyInvestment partnerDailyInvestment = new PartnerDailyInvestment();
1616
                    // Lets give benefit of doubt
1619
				partnerDailyInvestment.setActivatedStockAmount(investment.getActivatedStockAmount());
1617
                    if (investment.getShortPercentage() > 10) {
1620
				partnerDailyInvestment.setDate(date);
1618
                        investment = investmentMap.get(investment.getFofoId());
1621
				partnerDailyInvestment.setFofoId(investment.getFofoId());
1619
                    }
1622
				partnerDailyInvestment.setMinInvestment(investment.getMinInvestment());
1620
                }
1623
				partnerDailyInvestment.setGrnPendingAmount(investment.getGrnPendingAmount());
1621
                PartnerDailyInvestment partnerDailyInvestment = new PartnerDailyInvestment();
1624
				partnerDailyInvestment.setActivatedStockAmount(investment.getActivatedStockAmount());
1622
                partnerDailyInvestment.setActivatedStockAmount(investment.getActivatedStockAmount());
1625
				partnerDailyInvestment.setUnbilledAmount(investment.getUnbilledAmount());
1623
                partnerDailyInvestment.setDate(date);
1626
				partnerDailyInvestment.setReturnInTransitAmount(investment.getReturnInTransitAmount());
1624
                partnerDailyInvestment.setFofoId(investment.getFofoId());
1627
				partnerDailyInvestment.setSalesAmount(investment.getSalesAmount());
1625
                partnerDailyInvestment.setMinInvestment(investment.getMinInvestment());
1628
				partnerDailyInvestment.setInStockAmount(investment.getInStockAmount());
1626
                partnerDailyInvestment.setGrnPendingAmount(investment.getGrnPendingAmount());
1629
				partnerDailyInvestment.setWalletAmount(investment.getWalletAmount());
1627
                partnerDailyInvestment.setActivatedStockAmount(investment.getActivatedStockAmount());
1630
				partnerDailyInvestment.setActivatedGrnPendingAmount(investment.getActivatedGrnPendingAmount());
1628
                partnerDailyInvestment.setUnbilledAmount(investment.getUnbilledAmount());
1631
				partnerDailyInvestmentRepository.persist(partnerDailyInvestment);
1629
                partnerDailyInvestment.setReturnInTransitAmount(investment.getReturnInTransitAmount());
1632
			}
1630
                partnerDailyInvestment.setSalesAmount(investment.getSalesAmount());
1633
		}
1631
                partnerDailyInvestment.setInStockAmount(investment.getInStockAmount());
1634
	}
1632
                partnerDailyInvestment.setWalletAmount(investment.getWalletAmount());
1635
 
1633
                partnerDailyInvestment.setActivatedGrnPendingAmount(investment.getActivatedGrnPendingAmount());
1636
	@Autowired
1634
                partnerDailyInvestmentRepository.persist(partnerDailyInvestment);
1637
	BrandRegionMappingRepository brandRegionMappingRepository;
1635
            }
1638
 
1636
        }
1639
	public void brandRegion() {
1637
    }
1640
		Set<Integer> warehouseIds = ProfitMandiConstants.WAREHOUSE_MAP.keySet();
1638
 
1641
		Map<String, Map<Boolean, List<BrandRegionMapping>>> mapping = brandRegionMappingRepository.selectAll().stream()
1639
    @Autowired
1642
				.collect(Collectors.groupingBy(BrandRegionMapping::getBrand,
1640
    BrandRegionMappingRepository brandRegionMappingRepository;
1643
						Collectors.collectingAndThen(Collectors.toList(),
1641
 
1644
								x -> x.stream().collect(Collectors.groupingBy(BrandRegionMapping::isAccessory)))));
1642
    public void brandRegion() {
1645
		for (Map.Entry<String, Map<Boolean, List<BrandRegionMapping>>> entry : mapping.entrySet()) {
1643
        Set<Integer> warehouseIds = ProfitMandiConstants.WAREHOUSE_MAP.keySet();
1646
			String brand = entry.getKey();
1644
        Map<String, Map<Boolean, List<BrandRegionMapping>>> mapping = brandRegionMappingRepository.selectAll().stream()
1647
			for (Map.Entry<Boolean, List<BrandRegionMapping>> isAccessoryEntry : entry.getValue().entrySet()) {
1645
                .collect(Collectors.groupingBy(BrandRegionMapping::getBrand,
1648
				boolean isAccessory = isAccessoryEntry.getKey();
1646
                        Collectors.collectingAndThen(Collectors.toList(),
1649
				Map<Integer, List<Integer>> warehouseToIdsMap = isAccessoryEntry.getValue().stream()
1647
                                x -> x.stream().collect(Collectors.groupingBy(BrandRegionMapping::isAccessory)))));
1650
						.collect(Collectors.groupingBy(BrandRegionMapping::getToWarehouseId,
1648
        for (Map.Entry<String, Map<Boolean, List<BrandRegionMapping>>> entry : mapping.entrySet()) {
1651
								Collectors.mapping(BrandRegionMapping::getFromWarehouseId, Collectors.toList())));
1649
            String brand = entry.getKey();
1652
				for (int warehouseIdTo : warehouseIds) {
1650
            for (Map.Entry<Boolean, List<BrandRegionMapping>> isAccessoryEntry : entry.getValue().entrySet()) {
1653
					List<Integer> warehouseIdsFrom = warehouseToIdsMap.get(warehouseIdTo);
1651
                boolean isAccessory = isAccessoryEntry.getKey();
1654
					if (warehouseIdsFrom == null || !warehouseIdsFrom.contains(warehouseIdTo)) {
1652
                Map<Integer, List<Integer>> warehouseToIdsMap = isAccessoryEntry.getValue().stream()
1655
						LOGGER.info("Missing entries for brand region mapping = {}, {}, {}", brand, isAccessory,
1653
                        .collect(Collectors.groupingBy(BrandRegionMapping::getToWarehouseId,
1656
								warehouseIdTo);
1654
                                Collectors.mapping(BrandRegionMapping::getFromWarehouseId, Collectors.toList())));
1657
 
1655
                for (int warehouseIdTo : warehouseIds) {
1658
						BrandRegionMapping brandRegionMapping = new BrandRegionMapping();
1656
                    List<Integer> warehouseIdsFrom = warehouseToIdsMap.get(warehouseIdTo);
1659
						brandRegionMapping.setAccessory(isAccessory);
1657
                    if (warehouseIdsFrom == null || !warehouseIdsFrom.contains(warehouseIdTo)) {
1660
						brandRegionMapping.setBrand(brand);
1658
                        LOGGER.info("Missing entries for brand region mapping = {}, {}, {}", brand, isAccessory,
1661
						brandRegionMapping.setFromWarehouseId(warehouseIdTo);
1659
                                warehouseIdTo);
1662
						brandRegionMapping.setToWarehouseId(warehouseIdTo);
1660
 
1663
						brandRegionMappingRepository.persist(brandRegionMapping);
1661
                        BrandRegionMapping brandRegionMapping = new BrandRegionMapping();
1664
 
1662
                        brandRegionMapping.setAccessory(isAccessory);
1665
					}
1663
                        brandRegionMapping.setBrand(brand);
1666
				}
1664
                        brandRegionMapping.setFromWarehouseId(warehouseIdTo);
1667
			}
1665
                        brandRegionMapping.setToWarehouseId(warehouseIdTo);
1668
		}
1666
                        brandRegionMappingRepository.persist(brandRegionMapping);
1669
	}
1667
 
1670
 
1668
                    }
1671
	public void reverseSchemes(String invoiceNumber) throws Exception {
1669
                }
1672
		FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
1670
            }
1673
		if (fofoOrder.getCancelledTimestamp() != null) {
1671
        }
1674
			orderService.reverseScheme(fofoOrder);
1672
    }
1675
		}
1673
 
1676
	}
1674
    public void reverseSchemes(String invoiceNumber) throws Exception {
-
 
1675
        FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
-
 
1676
        if (fofoOrder.getCancelledTimestamp() != null) {
-
 
1677
            orderService.reverseScheme(fofoOrder);
-
 
1678
        }
-
 
1679
    }
1677
 
1680
 
1678
	@Autowired
1681
    @Autowired
1679
	PartnerTypeChangeService partnerTypeChangeService;
1682
    PartnerTypeChangeService partnerTypeChangeService;
1680
 
1683
 
1681
	public void runMe() throws Exception {
1684
    public void runMe() throws Exception {
1682
		/*System.out.println("runme ==== " + fofoOrderItemRepository.selectSumMopGroupByRetailer(
1685
		/*System.out.println("runme ==== " + fofoOrderItemRepository.selectSumMopGroupByRetailer(
1683
				LocalDate.of(2021, 11, 1).atStartOfDay(), LocalDate.of(2021, 12, 1).atStartOfDay(), 175138408, false));
1686
				LocalDate.of(2021, 11, 1).atStartOfDay(), LocalDate.of(2021, 12, 1).atStartOfDay(), 175138408, false));
1684
		System.out.println("change " + partnerTypeChangeService.getTypeOnDate(175138408, LocalDate.now()));*/
1687
		System.out.println("change " + partnerTypeChangeService.getTypeOnDate(175138408, LocalDate.now()));*/
1685
 
1688
 
1686
		List<Integer> catalogItemIds = Arrays.asList(1023209, 1023209, 1023208, 1023208, 1023199, 1023199, 1023198, 1023198, 1023200, 1023200, 1023197, 1023196, 1023113, 1023112, 1023194, 1023194, 1023194, 1023193, 1023193, 1023190, 1023190, 1023190, 1023189, 1023189, 1023189, 1023188, 1023188, 1023181, 1023181, 1023180, 1023180, 1023179, 1023179, 1023178, 1023178, 1023183, 1023183, 1023182, 1023182, 1022511, 1023066, 1023164, 1023163, 1023064, 1023174, 1023174, 1023173, 1023173, 1023172, 1023172, 1023171, 1023171, 1023171, 1022765, 1023170, 1023170, 1023166, 1023166, 1023166, 1023012, 1023073, 1023168, 1023167, 1023167, 1023118, 1023118, 1023118, 1023164, 1023163, 1023162, 1022971, 1023161, 1023160, 1023159, 1023158, 1023157, 1023156, 1023058, 1023142, 1023142, 1023141, 1023141, 1023145, 1023145, 1023145, 1023145, 1023144, 1023144, 1023144, 1023144, 1023143, 1023143, 1023143, 1023139, 1023137, 1023135, 1023134, 1023133, 1023130, 1023129, 1023126, 1023125, 1023124, 1023121, 1023128, 1023116, 1023077, 1023102, 1023079, 1023113, 1023113, 1023112, 1023112, 1023110, 1023110, 1023109, 1023109, 1023108, 1023108, 1023107, 1023107, 1022809, 1022871, 1023078, 1023101, 1023103, 1023102, 1023102, 1023100, 1023100, 1023099, 1023099, 1023079, 1023079, 1023078, 1023078, 1023081, 1023081, 1023080, 1023080, 1023080, 1022872, 1023077, 1023077, 1023076, 1023076, 1023076, 1022861, 1022970, 1023074, 1023073, 1023073, 1023072, 1023072, 1023071, 1023071, 1023045, 1023070, 1023070, 1023069, 1023063, 1023063, 1023062, 1023062, 1023061, 1023061, 1023057, 1023056, 1023055, 1023054, 1023053, 1023052, 1023068, 1023068, 1023067, 1023067, 1023066, 1023066, 1023065, 1023065, 1023064, 1023064, 1023059, 1023058, 1023058, 1023059, 1023050, 1023050, 1023049, 1023049, 1023048, 1023048, 1023047, 1023047, 1022845, 1023046, 1023046, 1023045, 1023045, 1022955, 1023044, 1023042, 1023043, 1023043, 1023043, 1023018, 1023017, 1023017, 1023016, 1023016, 1023015, 1023015, 1023041, 1023041, 1023041, 1023040, 1023039, 1023039, 1022769, 1023038, 1023038, 1023037, 1023037, 1023036, 1023036, 1023035, 1023035, 1023027, 1023027, 1023034, 1023034, 1023033, 1023033, 1023031, 1023031, 1023030, 1023029, 1023028, 1022630, 1022630, 1022630, 1023026, 1023013, 1022987, 1022982, 1023019, 1023019, 1022979, 1022978, 1022977, 1023023, 1023022, 1023022, 1023014, 1023014, 1023013, 1023013, 1022956, 1022816, 1023012, 1023012, 1023011, 1023011, 1023010, 1023010, 1023010, 1023009, 1023009, 1023006, 1023006, 1023006, 1023005, 1023005, 1023005, 1023004, 1023004, 1023004, 1023003, 1023003, 1023002, 1023002, 1023001, 1023001, 1022971, 1022970, 1022974, 1022973, 1022976, 1022976, 1022764, 1022782, 1022972, 1022972, 1022971, 1022970, 1022955, 1022956, 1022833, 1022967, 1022967, 1022967, 1022965, 1022965, 1022965, 1022965, 1022963, 1022963, 1022767, 1022962, 1022962, 1022960, 1022960, 1022957, 1022956, 1022956, 1022955, 1022955, 1022955, 1022950, 1022950, 1022944, 1022949, 1022949, 1022784, 1022566, 1022871, 1022947, 1022947, 1022946, 1022946, 1022946, 1022944, 1022944, 1022943, 1022943, 1022941, 1022941, 1022941, 1022800, 1022937, 1022937, 1022936, 1022936, 1022940, 1022940, 1022939, 1022939, 1022938, 1022931, 1022931, 1022930, 1022929, 1022934, 1022934, 1022932, 1022932, 1022783, 1022917, 1022897, 1022896, 1022893, 1022892, 1022888, 1022882, 1022833, 1022928, 1022928, 1022877, 1022877, 1022876, 1022876, 1022842, 1022875, 1022875, 1022874, 1022874, 1022872, 1022872, 1022871, 1022871, 1022809, 1022868, 1022868, 1022868, 1022867, 1022867, 1022867, 1022866, 1022866, 1022866, 1022862, 1022862, 1022862, 1022861, 1022861, 1022861, 1022859, 1022858, 1022808, 1022851, 1022851, 1022851, 1022850, 1022850, 1022850, 1022835, 1022846, 1022846, 1022845, 1022845, 1022844, 1022844, 1022843, 1022843, 1022842, 1022842, 1022841, 1022841, 1022840, 1022840, 1022839, 1022839, 1022799, 1022834, 1022834, 1022833, 1022833, 1022830, 1022830, 1022830, 1022825, 1022825, 1022824, 1022783, 1022817, 1022817, 1022816, 1022816, 1022815, 1022815, 1022814, 1022814, 1022401, 1022402, 1022400, 1022399, 1022813, 1022813, 1022813, 1022813, 1022812, 1022812, 1022812, 1022812, 1022811, 1022811, 1022811, 1022811, 1022811, 1022810, 1022810, 1022810, 1022810, 1022810, 1022809, 1022808, 1022808, 1022806, 1022806, 1022806, 1022805, 1022805, 1022805, 1022804, 1022804, 1022804, 1022803, 1022803, 1022803, 1022802, 1022802, 1022802, 1022802, 1022801, 1022801, 1022801, 1022801, 1022800, 1022800, 1022800, 1022799, 1022799, 1022799, 1022798, 1022798, 1022798, 1022797, 1022797, 1022797, 1022796, 1022796, 1022796, 1022794, 1022793, 1022792, 1022792, 1022792, 1022791, 1022791, 1022791, 1022790, 1022790, 1022790, 1022789, 1022789, 1022789, 1022785, 1022785, 1022788, 1022788, 1022784, 1022784, 1022783, 1022783, 1022782, 1022782, 1022546, 1022546, 1022781, 1022781, 1022781, 1022773, 1021600, 1022779, 1022779, 1022778, 1022774, 1022774, 1022774, 1022773, 1022773, 1022773, 1022770, 1022771, 1022771, 1022770, 1022770, 1022770, 1022769, 1022769, 1022769, 1022759, 1022758, 1022754, 1022753, 1022752, 1022757, 1022757, 1022756, 1022755, 1022767, 1022765, 1022743, 1022742, 1022742, 1022741, 1022741, 1022741, 1022740, 1022740, 1022740, 1022739, 1022739, 1022739, 1022738, 1022738, 1022738, 1022748, 1022748, 1022737, 1022677, 1022736, 1022736, 1022736, 1022735, 1022735, 1022735, 1022734, 1022734, 1022592, 1022705, 1022705, 1022699, 1022699, 1022694, 1022694, 1022693, 1022693, 1022629, 1022461, 1022592, 1022590, 1022590, 1022590, 1022590, 1022582, 1022582, 1022566, 1022565, 1022565, 1022559, 1022559, 1022559, 1022558, 1022558, 1022558, 1022546, 1022546, 1022542, 1022542, 1022541, 1022541, 1022541, 1022521, 1022521, 1022521, 1022521, 1022520, 1022520, 1022520, 1022518, 1022518, 1022518, 1022515, 1022515, 1022515, 1022514, 1022514, 1022514, 1022514, 1022511, 1022511, 1022511, 1022501, 1022501, 1022501, 1022500, 1022500, 1022500, 1021443, 1022467, 1022467, 1022467, 1022467, 1022461, 1022461, 1022465, 1022465, 1022465, 1022443, 1022451, 1022451, 1022451, 1022435, 1022435, 1022419, 1022419, 1022418, 1022418, 1022402, 1022402, 1022402, 1022401, 1022401, 1022401, 1022400, 1022400, 1022400, 1022399, 1022399, 1022399, 1022395, 1022395, 1022392, 1022392, 1015059, 1022361, 1022361, 1022010, 1021600, 1022017, 1022017, 1021848, 1022010, 1022009, 1021848, 1021848, 1021848, 1021958, 1021958, 1021958, 1021443, 1021431, 1021430, 1021429, 1021428, 1021427, 1021425, 1021424, 1021422, 1021421, 1021420, 1021419, 1021417, 1021600, 1015060, 1015061, 1003800, 1015061, 1015059, 1015059, 1015059, 1015060, 1015060, 1015060, 1003800, 1003800, 1003800, 1015061, 1015061);
1689
        List<Integer> catalogItemIds = Arrays.asList(1023209, 1023209, 1023208, 1023208, 1023199, 1023199, 1023198, 1023198, 1023200, 1023200, 1023197, 1023196, 1023113, 1023112, 1023194, 1023194, 1023194, 1023193, 1023193, 1023190, 1023190, 1023190, 1023189, 1023189, 1023189, 1023188, 1023188, 1023181, 1023181, 1023180, 1023180, 1023179, 1023179, 1023178, 1023178, 1023183, 1023183, 1023182, 1023182, 1022511, 1023066, 1023164, 1023163, 1023064, 1023174, 1023174, 1023173, 1023173, 1023172, 1023172, 1023171, 1023171, 1023171, 1022765, 1023170, 1023170, 1023166, 1023166, 1023166, 1023012, 1023073, 1023168, 1023167, 1023167, 1023118, 1023118, 1023118, 1023164, 1023163, 1023162, 1022971, 1023161, 1023160, 1023159, 1023158, 1023157, 1023156, 1023058, 1023142, 1023142, 1023141, 1023141, 1023145, 1023145, 1023145, 1023145, 1023144, 1023144, 1023144, 1023144, 1023143, 1023143, 1023143, 1023139, 1023137, 1023135, 1023134, 1023133, 1023130, 1023129, 1023126, 1023125, 1023124, 1023121, 1023128, 1023116, 1023077, 1023102, 1023079, 1023113, 1023113, 1023112, 1023112, 1023110, 1023110, 1023109, 1023109, 1023108, 1023108, 1023107, 1023107, 1022809, 1022871, 1023078, 1023101, 1023103, 1023102, 1023102, 1023100, 1023100, 1023099, 1023099, 1023079, 1023079, 1023078, 1023078, 1023081, 1023081, 1023080, 1023080, 1023080, 1022872, 1023077, 1023077, 1023076, 1023076, 1023076, 1022861, 1022970, 1023074, 1023073, 1023073, 1023072, 1023072, 1023071, 1023071, 1023045, 1023070, 1023070, 1023069, 1023063, 1023063, 1023062, 1023062, 1023061, 1023061, 1023057, 1023056, 1023055, 1023054, 1023053, 1023052, 1023068, 1023068, 1023067, 1023067, 1023066, 1023066, 1023065, 1023065, 1023064, 1023064, 1023059, 1023058, 1023058, 1023059, 1023050, 1023050, 1023049, 1023049, 1023048, 1023048, 1023047, 1023047, 1022845, 1023046, 1023046, 1023045, 1023045, 1022955, 1023044, 1023042, 1023043, 1023043, 1023043, 1023018, 1023017, 1023017, 1023016, 1023016, 1023015, 1023015, 1023041, 1023041, 1023041, 1023040, 1023039, 1023039, 1022769, 1023038, 1023038, 1023037, 1023037, 1023036, 1023036, 1023035, 1023035, 1023027, 1023027, 1023034, 1023034, 1023033, 1023033, 1023031, 1023031, 1023030, 1023029, 1023028, 1022630, 1022630, 1022630, 1023026, 1023013, 1022987, 1022982, 1023019, 1023019, 1022979, 1022978, 1022977, 1023023, 1023022, 1023022, 1023014, 1023014, 1023013, 1023013, 1022956, 1022816, 1023012, 1023012, 1023011, 1023011, 1023010, 1023010, 1023010, 1023009, 1023009, 1023006, 1023006, 1023006, 1023005, 1023005, 1023005, 1023004, 1023004, 1023004, 1023003, 1023003, 1023002, 1023002, 1023001, 1023001, 1022971, 1022970, 1022974, 1022973, 1022976, 1022976, 1022764, 1022782, 1022972, 1022972, 1022971, 1022970, 1022955, 1022956, 1022833, 1022967, 1022967, 1022967, 1022965, 1022965, 1022965, 1022965, 1022963, 1022963, 1022767, 1022962, 1022962, 1022960, 1022960, 1022957, 1022956, 1022956, 1022955, 1022955, 1022955, 1022950, 1022950, 1022944, 1022949, 1022949, 1022784, 1022566, 1022871, 1022947, 1022947, 1022946, 1022946, 1022946, 1022944, 1022944, 1022943, 1022943, 1022941, 1022941, 1022941, 1022800, 1022937, 1022937, 1022936, 1022936, 1022940, 1022940, 1022939, 1022939, 1022938, 1022931, 1022931, 1022930, 1022929, 1022934, 1022934, 1022932, 1022932, 1022783, 1022917, 1022897, 1022896, 1022893, 1022892, 1022888, 1022882, 1022833, 1022928, 1022928, 1022877, 1022877, 1022876, 1022876, 1022842, 1022875, 1022875, 1022874, 1022874, 1022872, 1022872, 1022871, 1022871, 1022809, 1022868, 1022868, 1022868, 1022867, 1022867, 1022867, 1022866, 1022866, 1022866, 1022862, 1022862, 1022862, 1022861, 1022861, 1022861, 1022859, 1022858, 1022808, 1022851, 1022851, 1022851, 1022850, 1022850, 1022850, 1022835, 1022846, 1022846, 1022845, 1022845, 1022844, 1022844, 1022843, 1022843, 1022842, 1022842, 1022841, 1022841, 1022840, 1022840, 1022839, 1022839, 1022799, 1022834, 1022834, 1022833, 1022833, 1022830, 1022830, 1022830, 1022825, 1022825, 1022824, 1022783, 1022817, 1022817, 1022816, 1022816, 1022815, 1022815, 1022814, 1022814, 1022401, 1022402, 1022400, 1022399, 1022813, 1022813, 1022813, 1022813, 1022812, 1022812, 1022812, 1022812, 1022811, 1022811, 1022811, 1022811, 1022811, 1022810, 1022810, 1022810, 1022810, 1022810, 1022809, 1022808, 1022808, 1022806, 1022806, 1022806, 1022805, 1022805, 1022805, 1022804, 1022804, 1022804, 1022803, 1022803, 1022803, 1022802, 1022802, 1022802, 1022802, 1022801, 1022801, 1022801, 1022801, 1022800, 1022800, 1022800, 1022799, 1022799, 1022799, 1022798, 1022798, 1022798, 1022797, 1022797, 1022797, 1022796, 1022796, 1022796, 1022794, 1022793, 1022792, 1022792, 1022792, 1022791, 1022791, 1022791, 1022790, 1022790, 1022790, 1022789, 1022789, 1022789, 1022785, 1022785, 1022788, 1022788, 1022784, 1022784, 1022783, 1022783, 1022782, 1022782, 1022546, 1022546, 1022781, 1022781, 1022781, 1022773, 1021600, 1022779, 1022779, 1022778, 1022774, 1022774, 1022774, 1022773, 1022773, 1022773, 1022770, 1022771, 1022771, 1022770, 1022770, 1022770, 1022769, 1022769, 1022769, 1022759, 1022758, 1022754, 1022753, 1022752, 1022757, 1022757, 1022756, 1022755, 1022767, 1022765, 1022743, 1022742, 1022742, 1022741, 1022741, 1022741, 1022740, 1022740, 1022740, 1022739, 1022739, 1022739, 1022738, 1022738, 1022738, 1022748, 1022748, 1022737, 1022677, 1022736, 1022736, 1022736, 1022735, 1022735, 1022735, 1022734, 1022734, 1022592, 1022705, 1022705, 1022699, 1022699, 1022694, 1022694, 1022693, 1022693, 1022629, 1022461, 1022592, 1022590, 1022590, 1022590, 1022590, 1022582, 1022582, 1022566, 1022565, 1022565, 1022559, 1022559, 1022559, 1022558, 1022558, 1022558, 1022546, 1022546, 1022542, 1022542, 1022541, 1022541, 1022541, 1022521, 1022521, 1022521, 1022521, 1022520, 1022520, 1022520, 1022518, 1022518, 1022518, 1022515, 1022515, 1022515, 1022514, 1022514, 1022514, 1022514, 1022511, 1022511, 1022511, 1022501, 1022501, 1022501, 1022500, 1022500, 1022500, 1021443, 1022467, 1022467, 1022467, 1022467, 1022461, 1022461, 1022465, 1022465, 1022465, 1022443, 1022451, 1022451, 1022451, 1022435, 1022435, 1022419, 1022419, 1022418, 1022418, 1022402, 1022402, 1022402, 1022401, 1022401, 1022401, 1022400, 1022400, 1022400, 1022399, 1022399, 1022399, 1022395, 1022395, 1022392, 1022392, 1015059, 1022361, 1022361, 1022010, 1021600, 1022017, 1022017, 1021848, 1022010, 1022009, 1021848, 1021848, 1021848, 1021958, 1021958, 1021958, 1021443, 1021431, 1021430, 1021429, 1021428, 1021427, 1021425, 1021424, 1021422, 1021421, 1021420, 1021419, 1021417, 1021600, 1015060, 1015061, 1003800, 1015061, 1015059, 1015059, 1015059, 1015060, 1015060, 1015060, 1003800, 1003800, 1003800, 1015061, 1015061);
1687
		for (Integer catalogItemId : catalogItemIds) {
1690
        for (Integer catalogItemId : catalogItemIds) {
1688
			try {
1691
            try {
1689
 
1692
 
1690
				ContentPojo cp = mongoClient.getEntityById(catalogItemId);
1693
                ContentPojo cp = mongoClient.getEntityById(catalogItemId);
1691
				System.out.println(cp.getDefaultImageUrl());
1694
                System.out.println(cp.getDefaultImageUrl());
1692
			} catch (Exception e) {
1695
            } catch (Exception e) {
1693
				System.out.println("------");
1696
                System.out.println("------");
1694
			}
1697
            }
1695
		}
1698
        }
1696
	}
1699
    }
1697
 
1700
 
1698
	public void createOffers(FileInputStream stream) throws Exception {
1701
    public void createOffers(FileInputStream stream) throws Exception {
1699
		offerService.createOffers(stream);
1702
        offerService.createOffers(stream);
1700
	}
1703
    }
1701
 
1704
 
1702
	@Autowired
1705
    @Autowired
1703
	MandiiService mandiiService;
1706
    MandiiService mandiiService;
1704
 
1707
 
1705
	@Autowired
1708
    @Autowired
1706
	FofoKycRepository fofoKycRepository;
1709
    FofoKycRepository fofoKycRepository;
1707
 
1710
 
1708
	@Autowired
1711
    @Autowired
1709
	PartnerOnBoardingPanelRepository partnerOnBoardingPanelRepository;
1712
    PartnerOnBoardingPanelRepository partnerOnBoardingPanelRepository;
1710
 
1713
 
1711
	@Autowired
1714
    @Autowired
1712
	DocumentRepository documentRepository;
1715
    DocumentRepository documentRepository;
1713
 
1716
 
1714
	@Autowired
1717
    @Autowired
1715
	com.spice.profitmandi.dao.repository.dtr.UserRepository dtrUserRepository;
1718
    com.spice.profitmandi.dao.repository.dtr.UserRepository dtrUserRepository;
1716
 
1719
 
1717
	public void mandiiUser(String firstName, String lastName, String pan, String dob, String aadhaar, String gender,
1720
    public void mandiiUser(String firstName, String lastName, String pan, String dob, String aadhaar, String gender,
1718
						   String father) throws Exception {
1721
                           String father) throws Exception {
1719
		FofoStore fs = fofoStoreRepository.selectByPan(pan);
1722
        FofoStore fs = fofoStoreRepository.selectByPan(pan);
1720
		CustomRetailer cr = retailerService.getFofoRetailer(fs.getId());
1723
        CustomRetailer cr = retailerService.getFofoRetailer(fs.getId());
1721
		com.spice.profitmandi.dao.entity.dtr.User dtrUser = dtrUserRepository.selectByEmailId(cr.getEmail());
1724
        com.spice.profitmandi.dao.entity.dtr.User dtrUser = dtrUserRepository.selectByEmailId(cr.getEmail());
1722
		MandiiUser mandiiUser = mandiiService.getUser(dtrUser.getFirstName(), dtrUser.getLastName(), father,
1725
        MandiiUser mandiiUser = mandiiService.getUser(dtrUser.getFirstName(), dtrUser.getLastName(), father,
1723
				Gender.valueOf(gender), cr.getEmail(), pan, cr.getMobileNumber(), LocalDate.parse(dob),
1726
                Gender.valueOf(gender), cr.getEmail(), pan, cr.getMobileNumber(), LocalDate.parse(dob),
1724
				cr.getAddress().getLine1() + " " + cr.getAddress().getLine2(), cr.getAddress().getCity(),
1727
                cr.getAddress().getLine1() + " " + cr.getAddress().getLine2(), cr.getAddress().getCity(),
1725
				cr.getAddress().getState(), cr.getAddress().getPinCode());
1728
                cr.getAddress().getState(), cr.getAddress().getPinCode());
1726
		mandiiUser.setFatherName(father);
1729
        mandiiUser.setFatherName(father);
1727
		if (StringUtils.isNotEmpty(firstName)) {
1730
        if (StringUtils.isNotEmpty(firstName)) {
1728
			mandiiUser.setFirstName(firstName);
1731
            mandiiUser.setFirstName(firstName);
1729
			mandiiUser.setLastName(lastName);
1732
            mandiiUser.setLastName(lastName);
1730
		}
1733
        }
1731
		if (StringUtils.isNotEmpty(father)) {
1734
        if (StringUtils.isNotEmpty(father)) {
1732
			mandiiUser.setFatherName(father);
1735
            mandiiUser.setFatherName(father);
1733
		}
1736
        }
1734
		if (StringUtils.isNotEmpty(aadhaar)) {
1737
        if (StringUtils.isNotEmpty(aadhaar)) {
1735
			mandiiUser.setAadharNumber(aadhaar);
1738
            mandiiUser.setAadharNumber(aadhaar);
1736
		}
1739
        }
1737
		mandiiUser.setGender(Gender.valueOf(gender));
1740
        mandiiUser.setGender(Gender.valueOf(gender));
1738
		mandiiService.createAccount(cr.getBusinessName(), mandiiUser);
1741
        mandiiService.createAccount(cr.getBusinessName(), mandiiUser);
1739
	}
1742
    }
1740
 
1743
 
1741
	@Autowired
1744
    @Autowired
1742
	CreditAccountRepository creditAccountRepository;
1745
    CreditAccountRepository creditAccountRepository;
1743
 
1746
 
1744
	public void mandiiUsers() throws Exception {
1747
    public void mandiiUsers() throws Exception {
1745
		List<CreditAccount> creditAccounts = creditAccountRepository.selectAll();
1748
        List<CreditAccount> creditAccounts = creditAccountRepository.selectAll();
1746
		List<Integer> fofoIds = creditAccounts.stream().filter(x -> x.getGateway().equals(Gateway.MANDII) && (x.getCreditStatus().equals(CreditStatus.UNKNOWN) || x.getCreditStatus().equals(CreditStatus.TO_BE_EVALUATED))).map(x -> x.getFofoId()).collect(Collectors.toList());
1749
        List<Integer> fofoIds = creditAccounts.stream().filter(x -> x.getGateway().equals(Gateway.MANDII) && (x.getCreditStatus().equals(CreditStatus.UNKNOWN) || x.getCreditStatus().equals(CreditStatus.TO_BE_EVALUATED))).map(x -> x.getFofoId()).collect(Collectors.toList());
1747
		List<FofoStore> fsList = fofoStoreRepository.selectByRetailerIds(fofoIds);
1750
        List<FofoStore> fsList = fofoStoreRepository.selectByRetailerIds(fofoIds);
1748
		for (FofoStore store : fsList) {
1751
        for (FofoStore store : fsList) {
1749
			this.mandiiUsers(store.getPan());
1752
            this.mandiiUsers(store.getPan());
1750
		}
1753
        }
1751
 
1754
 
1752
	}
1755
    }
1753
 
1756
 
1754
	public void mandiiUsers(String pan) throws Exception {
1757
    public void mandiiUsers(String pan) throws Exception {
1755
		FofoStore fs = fofoStoreRepository.selectByPan(pan);
1758
        FofoStore fs = fofoStoreRepository.selectByPan(pan);
1756
 
1759
 
1757
		PartnerOnBoardingPanel pob = partnerOnBoardingPanelRepository.selectByCode(fs.getCode());
1760
        PartnerOnBoardingPanel pob = partnerOnBoardingPanelRepository.selectByCode(fs.getCode());
1758
		List<FofoKyc> fofoKycs = fofoKycRepository.selectByPartnerOnBoardingId(pob.getId());
1761
        List<FofoKyc> fofoKycs = fofoKycRepository.selectByPartnerOnBoardingId(pob.getId());
1759
		CustomRetailer cr = retailerService.getFofoRetailer(fs.getId());
1762
        CustomRetailer cr = retailerService.getFofoRetailer(fs.getId());
1760
		com.spice.profitmandi.dao.entity.dtr.User dtrUser = dtrUserRepository.selectByEmailId(cr.getEmail());
1763
        com.spice.profitmandi.dao.entity.dtr.User dtrUser = dtrUserRepository.selectByEmailId(cr.getEmail());
1761
		boolean ca = false;
1764
        boolean ca = false;
1762
		for (FofoKyc fk : fofoKycs) {
1765
        for (FofoKyc fk : fofoKycs) {
1763
 
1766
 
1764
			MandiiUser mandiiUser = mandiiService.getUser(fk.getFirstName(), fk.getLastName(), fk.getFatherName(),
1767
            MandiiUser mandiiUser = mandiiService.getUser(fk.getFirstName(), fk.getLastName(), fk.getFatherName(),
1765
					fk.getGender(), fk.getEmail(), pan, fk.getMobile(), fk.getDob(),
1768
                    fk.getGender(), fk.getEmail(), pan, fk.getMobile(), fk.getDob(),
1766
					fk.getAddress1() + " " + fk.getAddress2() + " " + fk.getAddress3(), fk.getCity(), fk.getState(),
1769
                    fk.getAddress1() + " " + fk.getAddress2() + " " + fk.getAddress3(), fk.getCity(), fk.getState(),
1767
					fk.getPincode());
1770
                    fk.getPincode());
1768
 
1771
 
1769
			LOGGER.info("mandiiUser" + mandiiUser);
1772
            LOGGER.info("mandiiUser" + mandiiUser);
1770
 
1773
 
1771
			ca = mandiiService.createAccount(cr.getBusinessName(), mandiiUser);
1774
            ca = mandiiService.createAccount(cr.getBusinessName(), mandiiUser);
1772
 
1775
 
1773
			Document panDoc = documentRepository.selectById(fk.getPanDoc());
1776
            Document panDoc = documentRepository.selectById(fk.getPanDoc());
1774
			File fPan = new File(panDoc.getPath() + panDoc.getName());
1777
            File fPan = new File(panDoc.getPath() + panDoc.getName());
1775
			String encodeString = encodeFileToBase64Binary(fPan);
1778
            String encodeString = encodeFileToBase64Binary(fPan);
1776
 
1779
 
1777
			mandiiService.documentUpload(pan, fk.getMobile(), "PROPRIETOR_PAN", encodeString, null);
1780
            mandiiService.documentUpload(pan, fk.getMobile(), "PROPRIETOR_PAN", encodeString, null);
1778
 
1781
 
1779
			Document adhaarF = documentRepository.selectById(fk.getPoaFront());
1782
            Document adhaarF = documentRepository.selectById(fk.getPoaFront());
1780
			File adharf = new File(adhaarF.getPath() + adhaarF.getName());
1783
            File adharf = new File(adhaarF.getPath() + adhaarF.getName());
1781
			String adhaarFEncodstring = encodeFileToBase64Binary(adharf);
1784
            String adhaarFEncodstring = encodeFileToBase64Binary(adharf);
1782
			mandiiService.documentUpload(pan, fk.getMobile(), "AADHAAR", adhaarFEncodstring, "FRONT");
1785
            mandiiService.documentUpload(pan, fk.getMobile(), "AADHAAR", adhaarFEncodstring, "FRONT");
1783
 
1786
 
1784
			Document adhaarB = documentRepository.selectById(fk.getPoaBack());
1787
            Document adhaarB = documentRepository.selectById(fk.getPoaBack());
1785
			File adharb = new File(adhaarB.getPath() + adhaarF.getName());
1788
            File adharb = new File(adhaarB.getPath() + adhaarF.getName());
1786
			String adhaarBEncodstring = encodeFileToBase64Binary(adharb);
1789
            String adhaarBEncodstring = encodeFileToBase64Binary(adharb);
1787
			mandiiService.documentUpload(pan, fk.getMobile(), "AADHAAR", adhaarBEncodstring, "BACK");
1790
            mandiiService.documentUpload(pan, fk.getMobile(), "AADHAAR", adhaarBEncodstring, "BACK");
1788
 
1791
 
1789
			if (ca == true) {
1792
            if (ca == true) {
1790
				AccountStatusResponseOut accountStatusResponseOut = mandiiService.getStatus(fs.getPan());
1793
                AccountStatusResponseOut accountStatusResponseOut = mandiiService.getStatus(fs.getPan());
1791
				this.setCreditAccount(fs.getId(), accountStatusResponseOut);
1794
                this.setCreditAccount(fs.getId(), accountStatusResponseOut);
1792
			}
1795
            }
1793
 
1796
 
1794
		}
1797
        }
1795
 
1798
 
1796
	}
1799
    }
1797
 
1800
 
1798
	private void setCreditAccount(int fofoId, AccountStatusResponseOut accountStatusResponseOut) {
1801
    private void setCreditAccount(int fofoId, AccountStatusResponseOut accountStatusResponseOut) {
1799
 
1802
 
1800
		CreditAccount creditAccount = creditAccountRepository.selectByFofoIdAndGateway(fofoId, Gateway.MANDII);
1803
        CreditAccount creditAccount = creditAccountRepository.selectByFofoIdAndGateway(fofoId, Gateway.MANDII);
1801
 
1804
 
1802
		if (creditAccount == null) {
1805
        if (creditAccount == null) {
1803
			creditAccount = new CreditAccount();
1806
            creditAccount = new CreditAccount();
1804
			creditAccount.setFofoId(fofoId);
1807
            creditAccount.setFofoId(fofoId);
1805
			creditAccount.setGateway(Gateway.MANDII);
1808
            creditAccount.setGateway(Gateway.MANDII);
1806
		}
1809
        }
1807
 
1810
 
1808
		if (accountStatusResponseOut == null) {
1811
        if (accountStatusResponseOut == null) {
1809
			creditAccount.setCreditStatus(CreditStatus.UNKNOWN);
1812
            creditAccount.setCreditStatus(CreditStatus.UNKNOWN);
1810
			creditAccount.setDescription("User company not found");
1813
            creditAccount.setDescription("User company not found");
1811
 
1814
 
1812
		} else {
1815
        } else {
1813
			if (accountStatusResponseOut.getSanctionLimit() != null) {
1816
            if (accountStatusResponseOut.getSanctionLimit() != null) {
1814
				creditAccount.setSanctionedAmount(accountStatusResponseOut.getSanctionLimit().floatValue());
1817
                creditAccount.setSanctionedAmount(accountStatusResponseOut.getSanctionLimit().floatValue());
1815
			} else {
1818
            } else {
1816
				creditAccount.setSanctionedAmount(0);
1819
                creditAccount.setSanctionedAmount(0);
1817
			}
1820
            }
1818
 
1821
 
1819
			creditAccount.setInterestRate(accountStatusResponseOut.getRateOfInterest());
1822
            creditAccount.setInterestRate(accountStatusResponseOut.getRateOfInterest());
1820
			if (accountStatusResponseOut.getBalanceAmount() != null) {
1823
            if (accountStatusResponseOut.getBalanceAmount() != null) {
1821
				creditAccount.setAvailableAmount(accountStatusResponseOut.getBalanceAmount().floatValue());
1824
                creditAccount.setAvailableAmount(accountStatusResponseOut.getBalanceAmount().floatValue());
1822
			} else {
1825
            } else {
1823
				creditAccount.setAvailableAmount(0);
1826
                creditAccount.setAvailableAmount(0);
1824
			}
1827
            }
1825
 
1828
 
1826
			if (accountStatusResponseOut.getCurrentStage() != null) {
1829
            if (accountStatusResponseOut.getCurrentStage() != null) {
1827
				creditAccount.setDescription(accountStatusResponseOut.getCurrentStage().toString());
1830
                creditAccount.setDescription(accountStatusResponseOut.getCurrentStage().toString());
1828
			}
1831
            }
1829
			if (accountStatusResponseOut.getStatus().equals(EligibilityStatusEnum.SANCTION_AVAILABLE)) {
1832
            if (accountStatusResponseOut.getStatus().equals(EligibilityStatusEnum.SANCTION_AVAILABLE)) {
1830
				creditAccount.setCreditStatus(CreditStatus.SANCTIONED);
1833
                creditAccount.setCreditStatus(CreditStatus.SANCTIONED);
1831
			} else if (accountStatusResponseOut.getStatus().equals(EligibilityStatusEnum.IN_ELIGIBLE)) {
1834
            } else if (accountStatusResponseOut.getStatus().equals(EligibilityStatusEnum.IN_ELIGIBLE)) {
1832
				creditAccount.setCreditStatus(CreditStatus.INELIGIBLE);
1835
                creditAccount.setCreditStatus(CreditStatus.INELIGIBLE);
1833
			} else {
1836
            } else {
1834
 
1837
 
1835
				creditAccount.setCreditStatus(CreditStatus.TO_BE_EVALUATED);
1838
                creditAccount.setCreditStatus(CreditStatus.TO_BE_EVALUATED);
1836
			}
1839
            }
1837
		}
1840
        }
1838
 
1841
 
1839
		creditAccount.setUpdatedOn(LocalDateTime.now());
1842
        creditAccount.setUpdatedOn(LocalDateTime.now());
1840
		creditAccountRepository.persist(creditAccount);
1843
        creditAccountRepository.persist(creditAccount);
1841
	}
1844
    }
1842
 
1845
 
1843
	private static String encodeFileToBase64Binary(File file) throws Exception {
1846
    private static String encodeFileToBase64Binary(File file) throws Exception {
1844
		FileInputStream fileInputStreamReader = new FileInputStream(file);
1847
        FileInputStream fileInputStreamReader = new FileInputStream(file);
1845
		byte[] bytes = new byte[(int) file.length()];
1848
        byte[] bytes = new byte[(int) file.length()];
1846
		fileInputStreamReader.read(bytes);
1849
        fileInputStreamReader.read(bytes);
1847
		return new String(Base64.getEncoder().encodeToString(bytes));
1850
        return new String(Base64.getEncoder().encodeToString(bytes));
1848
	}
1851
    }
1849
 
1852
 
1850
	public void testIrnLive(String invoiceNumber) throws Exception {
1853
    public void testIrnLive(String invoiceNumber) throws Exception {
1851
		List<Order> orders = orderRepository.selectByInvoiceNumber(invoiceNumber);
1854
        List<Order> orders = orderRepository.selectByInvoiceNumber(invoiceNumber);
1852
		gstProService.getEInvoice(orders);
1855
        gstProService.getEInvoice(orders);
1853
	}
1856
    }
1854
 
1857
 
1855
	public void processSchemeByIds(List<Integer> schemeIds) throws Exception {
1858
    public void processSchemeByIds(List<Integer> schemeIds) throws Exception {
1856
		List<Scheme> schemes = schemeRepository.selectBySchemeIds(schemeIds);
1859
        List<Scheme> schemes = schemeRepository.selectBySchemeIds(schemeIds);
1857
		for (Scheme scheme : schemes) {
1860
        for (Scheme scheme : schemes) {
1858
			List<Integer> catalogIds = schemeItemRepository.selectBySchemeIds(new HashSet<>(Arrays.asList(scheme.getId()))).stream().map(x -> x.getCatalogId()).collect(Collectors.toList());
1861
            List<Integer> catalogIds = schemeItemRepository.selectBySchemeIds(new HashSet<>(Arrays.asList(scheme.getId()))).stream().map(x -> x.getCatalogId()).collect(Collectors.toList());
1859
			if (Arrays.asList(SchemeType.SPECIAL_SUPPORT, SchemeType.ACTIVATION, SchemeType.CATEGORY, SchemeType.INVESTMENT, SchemeType.ACTIVATION, SchemeType.SPECIAL_SUPPORT).contains(scheme.getType())) {
1862
            if (Arrays.asList(SchemeType.SPECIAL_SUPPORT, SchemeType.ACTIVATION, SchemeType.CATEGORY, SchemeType.INVESTMENT, SchemeType.ACTIVATION, SchemeType.SPECIAL_SUPPORT).contains(scheme.getType())) {
1860
				List<FofoOrder> fofoOrders = fofoOrderRepository.selectOrderByModelAndSaleBetween(catalogIds, scheme.getStartDateTime(), scheme.getEndDateTime());
1863
                List<FofoOrder> fofoOrders = fofoOrderRepository.selectOrderByModelAndSaleBetween(catalogIds, scheme.getStartDateTime(), scheme.getEndDateTime());
1861
				for (FofoOrder fofoOrder : fofoOrders) {
1864
                for (FofoOrder fofoOrder : fofoOrders) {
1862
					System.out.println("Processing fofoOrder --- " + fofoOrder.getInvoiceNumber());
1865
                    System.out.println("Processing fofoOrder --- " + fofoOrder.getInvoiceNumber());
1863
					System.out.println("Processing fofoOrder --- " + fofoOrder.getInvoiceNumber());
1866
                    System.out.println("Processing fofoOrder --- " + fofoOrder.getInvoiceNumber());
1864
					schemeService.processSchemeOut(fofoOrder.getId(), fofoOrder.getFofoId());
1867
                    schemeService.processSchemeOut(fofoOrder.getId(), fofoOrder.getFofoId());
1865
				}
1868
                }
1866
			} else if (Arrays.asList(SchemeType.IN).contains(scheme.getType())) {
1869
            } else if (Arrays.asList(SchemeType.IN).contains(scheme.getType())) {
1867
				List<Purchase> purchases = purchaseRepository.selectPurchaseByCatalogsAndSaleBetween(catalogIds, scheme.getStartDateTime(), scheme.getEndDateTime());
1870
                List<Purchase> purchases = purchaseRepository.selectPurchaseByCatalogsAndSaleBetween(catalogIds, scheme.getStartDateTime(), scheme.getEndDateTime());
1868
				for (Purchase purchase : purchases) {
1871
                for (Purchase purchase : purchases) {
1869
					System.out.println("Processing purchase --- " + purchase.getPurchaseReference());
1872
                    System.out.println("Processing purchase --- " + purchase.getPurchaseReference());
1870
					schemeService.processSchemeIn(purchase.getId(), purchase.getFofoId());
1873
                    schemeService.processSchemeIn(purchase.getId(), purchase.getFofoId());
1871
				}
1874
                }
1872
 
1875
 
1873
			}
1876
            }
1874
		}
1877
        }
1875
	}
1878
    }
1876
 
1879
 
1877
	@Autowired
1880
    @Autowired
1878
	InsurancePolicyRepository insurancePolicyRepository;
1881
    InsurancePolicyRepository insurancePolicyRepository;
1879
 
1882
 
1880
	public void addMissingWalletDebitsForInsurance() throws Exception {
1883
    public void addMissingWalletDebitsForInsurance() throws Exception {
1881
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectAllByProviderId(5, Optional.empty());
1884
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectAllByProviderId(5, Optional.empty());
1882
		for (InsurancePolicy insurancePolicy : insurancePolicies) {
1885
        for (InsurancePolicy insurancePolicy : insurancePolicies) {
1883
			FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(insurancePolicy.getInvoiceNumber());
1886
            FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(insurancePolicy.getInvoiceNumber());
1884
			List<UserWalletHistory> userWalletHistories = userWalletHistoryRepository.selectAllByreferenceIdandreferenceType(insurancePolicy.getId(), WalletReferenceType.DAMAGE_PROTECTION);
1887
            List<UserWalletHistory> userWalletHistories = userWalletHistoryRepository.selectAllByreferenceIdandreferenceType(insurancePolicy.getId(), WalletReferenceType.DAMAGE_PROTECTION);
1885
			if (userWalletHistories.size() > 1) {
1888
            if (userWalletHistories.size() > 1) {
1886
				UserWalletHistory userWalletHistory = userWalletHistories.get(0);
1889
                UserWalletHistory userWalletHistory = userWalletHistories.get(0);
1887
				walletService.addAmountToWallet(insurancePolicy.getRetailerId(), userWalletHistory.getReference(), WalletReferenceType.DAMAGE_PROTECTION, "Excess deduction - settled", 198, LocalDateTime.now());
1890
                walletService.addAmountToWallet(insurancePolicy.getRetailerId(), userWalletHistory.getReference(), WalletReferenceType.DAMAGE_PROTECTION, "Excess deduction - settled", 198, LocalDateTime.now());
1888
			}
1891
            }
1889
		}
1892
        }
1890
	}
1893
    }
1891
 
1894
 
1892
 
1895
 
1893
}
1896
}
1894
 
1897
 
1895
//7015845171
1898
//7015845171
1896
1899