Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
23755 amit.gupta 1
package com.smartdukaan.cron.migrations;
2
 
25765 amit.gupta 3
import java.io.File;
27450 tejbeer 4
import java.io.IOException;
23824 amit.gupta 5
import java.time.LocalDate;
23755 amit.gupta 6
import java.time.LocalDateTime;
23824 amit.gupta 7
import java.time.LocalTime;
27511 amit.gupta 8
import java.time.Month;
27310 amit.gupta 9
import java.time.temporal.ChronoUnit;
24819 amit.gupta 10
import java.util.ArrayList;
23755 amit.gupta 11
import java.util.Arrays;
27450 tejbeer 12
import java.util.Base64;
23827 amit.gupta 13
import java.util.Collections;
26928 amit.gupta 14
import java.util.Comparator;
24002 amit.gupta 15
import java.util.HashMap;
24005 amit.gupta 16
import java.util.HashSet;
23755 amit.gupta 17
import java.util.List;
24002 amit.gupta 18
import java.util.Map;
25749 amit.gupta 19
import java.util.Set;
20
import java.util.concurrent.TimeUnit;
28622 amit.gupta 21
import java.util.stream.Collector;
24641 amit.gupta 22
import java.util.stream.Collectors;
23755 amit.gupta 23
 
24819 amit.gupta 24
import org.apache.commons.io.output.ByteArrayOutputStream;
23755 amit.gupta 25
import org.apache.commons.lang.StringUtils;
26
import org.apache.logging.log4j.LogManager;
27
import org.apache.logging.log4j.Logger;
27450 tejbeer 28
import org.json.JSONArray;
29
import org.json.JSONObject;
25773 amit.gupta 30
import org.openqa.selenium.Dimension;
25749 amit.gupta 31
import org.openqa.selenium.OutputType;
32
import org.openqa.selenium.TakesScreenshot;
33
import org.openqa.selenium.WebDriver;
34
import org.openqa.selenium.chrome.ChromeDriver;
25752 amit.gupta 35
import org.openqa.selenium.chrome.ChromeOptions;
23755 amit.gupta 36
import org.springframework.beans.factory.annotation.Autowired;
24819 amit.gupta 37
import org.springframework.core.io.ByteArrayResource;
24767 amit.gupta 38
import org.springframework.mail.javamail.JavaMailSender;
23755 amit.gupta 39
import org.springframework.stereotype.Component;
40
import org.springframework.transaction.annotation.Transactional;
41
 
28557 amit.gupta 42
import com.google.gson.Gson;
26214 amit.gupta 43
import com.smartdukaan.cron.scheduled.SamsungIMEIActivationService;
25043 amit.gupta 44
import com.smartdukaan.cron.scheduled.ScheduledTasks;
26095 amit.gupta 45
import com.spice.profitmandi.common.enumuration.ItemType;
26033 amit.gupta 46
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
27450 tejbeer 47
import com.spice.profitmandi.common.model.CustomRetailer;
24819 amit.gupta 48
import com.spice.profitmandi.common.util.FileUtil;
25749 amit.gupta 49
import com.spice.profitmandi.common.util.FormattingUtils;
24819 amit.gupta 50
import com.spice.profitmandi.common.util.Utils;
26033 amit.gupta 51
import com.spice.profitmandi.dao.entity.catalog.Item;
28557 amit.gupta 52
import com.spice.profitmandi.dao.entity.catalog.Offer;
25021 amit.gupta 53
import com.spice.profitmandi.dao.entity.catalog.Scheme;
26579 amit.gupta 54
import com.spice.profitmandi.dao.entity.catalog.TagListing;
27286 amit.gupta 55
import com.spice.profitmandi.dao.entity.dtr.PaymentOptionTransaction;
24716 amit.gupta 56
import com.spice.profitmandi.dao.entity.fofo.CurrentInventorySnapshot;
26759 amit.gupta 57
import com.spice.profitmandi.dao.entity.fofo.DebitNote;
27286 amit.gupta 58
import com.spice.profitmandi.dao.entity.fofo.FofoLineItem;
24806 amit.gupta 59
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
60
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
25530 amit.gupta 61
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
24005 amit.gupta 62
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
26928 amit.gupta 63
import com.spice.profitmandi.dao.entity.fofo.PartnerType;
26033 amit.gupta 64
import com.spice.profitmandi.dao.entity.fofo.PrebookingOrder;
23898 amit.gupta 65
import com.spice.profitmandi.dao.entity.fofo.Purchase;
26759 amit.gupta 66
import com.spice.profitmandi.dao.entity.fofo.PurchaseReturnItem;
24716 amit.gupta 67
import com.spice.profitmandi.dao.entity.fofo.ScanRecord;
25034 amit.gupta 68
import com.spice.profitmandi.dao.entity.fofo.SchemeInOut;
25021 amit.gupta 69
import com.spice.profitmandi.dao.entity.fofo.SchemeItem;
24953 amit.gupta 70
import com.spice.profitmandi.dao.entity.inventory.SaholicInventorySnapshot;
27721 amit.gupta 71
import com.spice.profitmandi.dao.entity.transaction.HdfcPayment;
23824 amit.gupta 72
import com.spice.profitmandi.dao.entity.transaction.LineItem;
23755 amit.gupta 73
import com.spice.profitmandi.dao.entity.transaction.LineItemImei;
74
import com.spice.profitmandi.dao.entity.transaction.Order;
24802 amit.gupta 75
import com.spice.profitmandi.dao.entity.transaction.SellerWarehouse;
25046 amit.gupta 76
import com.spice.profitmandi.dao.entity.transaction.UserWallet;
25034 amit.gupta 77
import com.spice.profitmandi.dao.entity.transaction.UserWalletHistory;
25530 amit.gupta 78
import com.spice.profitmandi.dao.entity.user.Address;
79
import com.spice.profitmandi.dao.entity.user.User;
27511 amit.gupta 80
import com.spice.profitmandi.dao.entity.warehouse.WarehouseInventoryItem;
28038 amit.gupta 81
import com.spice.profitmandi.dao.entity.warehouse.WarehouseScan;
25021 amit.gupta 82
import com.spice.profitmandi.dao.enumuration.catalog.AmountType;
25522 amit.gupta 83
import com.spice.profitmandi.dao.enumuration.catalog.SchemeType;
27286 amit.gupta 84
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
26759 amit.gupta 85
import com.spice.profitmandi.dao.enumuration.fofo.ScanType;
26579 amit.gupta 86
import com.spice.profitmandi.dao.model.ContentPojo;
27948 amit.gupta 87
import com.spice.profitmandi.dao.model.CreateOfferRequest;
26579 amit.gupta 88
import com.spice.profitmandi.dao.model.MediaPojo;
24716 amit.gupta 89
import com.spice.profitmandi.dao.repository.GenericRepository;
25034 amit.gupta 90
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
28557 amit.gupta 91
import com.spice.profitmandi.dao.repository.catalog.OfferRepository;
25021 amit.gupta 92
import com.spice.profitmandi.dao.repository.catalog.SchemeRepository;
26579 amit.gupta 93
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
25749 amit.gupta 94
import com.spice.profitmandi.dao.repository.cs.CsService;
23899 amit.gupta 95
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
27221 amit.gupta 96
import com.spice.profitmandi.dao.repository.dtr.LeadRepository;
26579 amit.gupta 97
import com.spice.profitmandi.dao.repository.dtr.Mongo;
27286 amit.gupta 98
import com.spice.profitmandi.dao.repository.dtr.PaymentOptionTransactionRepository;
24716 amit.gupta 99
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
24002 amit.gupta 100
import com.spice.profitmandi.dao.repository.fofo.DebitNoteRepository;
27286 amit.gupta 101
import com.spice.profitmandi.dao.repository.fofo.FofoLineItemRepository;
24806 amit.gupta 102
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
103
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
24002 amit.gupta 104
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
24806 amit.gupta 105
import com.spice.profitmandi.dao.repository.fofo.InvoiceNumberGenerationSequenceRepository;
24883 amit.gupta 106
import com.spice.profitmandi.dao.repository.fofo.PartnerTargetRepository;
26033 amit.gupta 107
import com.spice.profitmandi.dao.repository.fofo.PrebookingOrderRepository;
23898 amit.gupta 108
import com.spice.profitmandi.dao.repository.fofo.PurchaseRepository;
26759 amit.gupta 109
import com.spice.profitmandi.dao.repository.fofo.PurchaseReturnItemRepository;
24716 amit.gupta 110
import com.spice.profitmandi.dao.repository.fofo.ScanRecordRepository;
24002 amit.gupta 111
import com.spice.profitmandi.dao.repository.fofo.SchemeInOutRepository;
25021 amit.gupta 112
import com.spice.profitmandi.dao.repository.fofo.SchemeItemRepository;
24953 amit.gupta 113
import com.spice.profitmandi.dao.repository.inventory.SaholicInventorySnapshotRepository;
26928 amit.gupta 114
import com.spice.profitmandi.dao.repository.inventory.SaholicReservationSnapshotRepository;
27721 amit.gupta 115
import com.spice.profitmandi.dao.repository.transaction.HdfcPaymentRepository;
23755 amit.gupta 116
import com.spice.profitmandi.dao.repository.transaction.LineItemImeisRepository;
23824 amit.gupta 117
import com.spice.profitmandi.dao.repository.transaction.LineItemRepository;
23755 amit.gupta 118
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
24772 amit.gupta 119
import com.spice.profitmandi.dao.repository.transaction.ReturnOrderRepository;
24802 amit.gupta 120
import com.spice.profitmandi.dao.repository.transaction.SellerWarehouseRepository;
24767 amit.gupta 121
import com.spice.profitmandi.dao.repository.transaction.UserWalletHistoryRepository;
122
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
25530 amit.gupta 123
import com.spice.profitmandi.dao.repository.user.AddressRepository;
24002 amit.gupta 124
import com.spice.profitmandi.dao.repository.user.UserRepository;
27511 amit.gupta 125
import com.spice.profitmandi.dao.repository.warehouse.WarehouseInventoryItemRepository;
28038 amit.gupta 126
import com.spice.profitmandi.dao.repository.warehouse.WarehouseScanRepository;
23899 amit.gupta 127
import com.spice.profitmandi.service.inventory.InventoryService;
26033 amit.gupta 128
import com.spice.profitmandi.service.inventory.PurchaseService;
27948 amit.gupta 129
import com.spice.profitmandi.service.offers.OfferService;
28557 amit.gupta 130
import com.spice.profitmandi.service.offers.PartnerCriteria;
24266 amit.gupta 131
import com.spice.profitmandi.service.order.OrderService;
24005 amit.gupta 132
import com.spice.profitmandi.service.pricing.PriceDropService;
133
import com.spice.profitmandi.service.scheme.SchemeService;
23899 amit.gupta 134
import com.spice.profitmandi.service.transaction.TransactionService;
135
import com.spice.profitmandi.service.user.RetailerService;
136
import com.spice.profitmandi.service.wallet.WalletService;
28046 amit.gupta 137
import com.spice.profitmandi.service.warehouse.WarehouseInventoryService;
23755 amit.gupta 138
 
24953 amit.gupta 139
import in.shop2020.model.v1.order.OrderStatus;
24002 amit.gupta 140
import in.shop2020.model.v1.order.WalletReferenceType;
27450 tejbeer 141
import okhttp3.OkHttpClient;
142
import okhttp3.Request;
143
import okhttp3.Response;
24002 amit.gupta 144
 
23755 amit.gupta 145
@Component
146
@Transactional(rollbackFor = Throwable.class)
147
public class RunOnceTasks {
148
 
28038 amit.gupta 149
 
23755 amit.gupta 150
	private static final Logger LOGGER = LogManager.getLogger(RunOnceTasks.class);
151
	@Autowired
23824 amit.gupta 152
	private LineItemRepository lineItemRepository;
24711 amit.gupta 153
 
23905 amit.gupta 154
	@Autowired
27221 amit.gupta 155
	private LeadRepository leadRepository;
27277 amit.gupta 156
 
27221 amit.gupta 157
	@Autowired
26759 amit.gupta 158
	private PurchaseReturnItemRepository purchaseReturnItemRepository;
26928 amit.gupta 159
 
26759 amit.gupta 160
	@Autowired
24953 amit.gupta 161
	private SaholicInventorySnapshotRepository saholicInventorySnapshotRepository;
25752 amit.gupta 162
 
25749 amit.gupta 163
	@Autowired
164
	private CsService csService;
28557 amit.gupta 165
 
166
	@Autowired
167
	private OfferRepository offerRepository;
26299 amit.gupta 168
 
26033 amit.gupta 169
	@Autowired
26579 amit.gupta 170
	private Mongo mongoClient;
27787 amit.gupta 171
 
27286 amit.gupta 172
	@Autowired
28557 amit.gupta 173
	private Gson gson;
174
 
175
	@Autowired
27286 amit.gupta 176
	private PaymentOptionTransactionRepository paymentOptionTransactionRepository;
26579 amit.gupta 177
 
178
	@Autowired
26195 amit.gupta 179
	private SamsungIMEIActivationService samsungActivationService;
26299 amit.gupta 180
 
26195 amit.gupta 181
	@Autowired
26033 amit.gupta 182
	private PrebookingOrderRepository prebookingOrderRepository;
24953 amit.gupta 183
 
184
	@Autowired
26928 amit.gupta 185
	private SaholicReservationSnapshotRepository saholicReservationInventorySnapshotRepository;
24953 amit.gupta 186
 
187
	@Autowired
24883 amit.gupta 188
	private PartnerTargetRepository partnerTargetRepository;
189
 
190
	@Autowired
24802 amit.gupta 191
	private SellerWarehouseRepository sellerWarehouseRepository;
24814 amit.gupta 192
 
24802 amit.gupta 193
	@Autowired
24806 amit.gupta 194
	private FofoOrderItemRepository fofoOrderItemRepository;
27787 amit.gupta 195
 
27286 amit.gupta 196
	@Autowired
197
	private FofoLineItemRepository fofoLineItemRepository;
24814 amit.gupta 198
 
24806 amit.gupta 199
	@Autowired
200
	private FofoOrderRepository fofoOrderRepository;
24814 amit.gupta 201
 
24806 amit.gupta 202
	@Autowired
24767 amit.gupta 203
	private UserWalletRepository userWalletRepository;
204
 
205
	@Autowired
206
	private UserWalletHistoryRepository userWalletHistoryRepository;
207
 
208
	@Autowired
24002 amit.gupta 209
	private UserRepository userRepository;
24711 amit.gupta 210
 
24002 amit.gupta 211
	@Autowired
23899 amit.gupta 212
	private WalletService walletService;
213
 
214
	@Autowired
25034 amit.gupta 215
	private ItemRepository itemRepository;
216
 
217
	@Autowired
23899 amit.gupta 218
	private InventoryService inventoryService;
219
 
220
	@Autowired
221
	private TransactionService transactionService;
26299 amit.gupta 222
 
26033 amit.gupta 223
	@Autowired
224
	private PurchaseService purchaseService;
23899 amit.gupta 225
 
24711 amit.gupta 226
	// Service for Tertiary/Partner Orders
24266 amit.gupta 227
	@Autowired
228
	private OrderService orderService;
23767 amit.gupta 229
 
23755 amit.gupta 230
	@Autowired
25021 amit.gupta 231
	private SchemeRepository schemeRepository;
25516 amit.gupta 232
 
25043 amit.gupta 233
	@Autowired
25530 amit.gupta 234
	private AddressRepository addressRepository;
25749 amit.gupta 235
 
25530 amit.gupta 236
	@Autowired
25043 amit.gupta 237
	private ScheduledTasks scheduledTasks;
25034 amit.gupta 238
 
25021 amit.gupta 239
	@Autowired
240
	private SchemeItemRepository schemeItemRepository;
241
 
242
	@Autowired
24772 amit.gupta 243
	private ReturnOrderRepository returnOrderRepository;
244
 
245
	@Autowired
23899 amit.gupta 246
	private FofoStoreRepository fofoStoreRepository;
247
 
248
	@Autowired
23755 amit.gupta 249
	private LineItemImeisRepository lineItemImeisRepository;
24711 amit.gupta 250
 
24002 amit.gupta 251
	@Autowired
252
	private InventoryItemRepository inventoryItemRepository;
24814 amit.gupta 253
 
24806 amit.gupta 254
	@Autowired
26579 amit.gupta 255
	private TagListingRepository tagListingRepository;
256
 
257
	@Autowired
24806 amit.gupta 258
	private InvoiceNumberGenerationSequenceRepository invoiceNumberGenerationSequenceRepository;
23901 amit.gupta 259
 
23898 amit.gupta 260
	@Autowired
23899 amit.gupta 261
	private RetailerService retailerService;
24711 amit.gupta 262
 
24002 amit.gupta 263
	@Autowired
264
	private SchemeInOutRepository schemeInOutRepository;
24711 amit.gupta 265
 
24002 amit.gupta 266
	@Autowired
267
	private DebitNoteRepository debitNoteRepository;
27948 amit.gupta 268
 
269
	@Autowired
270
	private OfferService offerService;
23899 amit.gupta 271
 
272
	@Autowired
24716 amit.gupta 273
	private GenericRepository genericRepository;
274
 
275
	@Autowired
23898 amit.gupta 276
	private PurchaseRepository purchaseRepository;
24711 amit.gupta 277
 
24005 amit.gupta 278
	@Autowired
279
	private PriceDropService priceDropService;
24883 amit.gupta 280
 
24819 amit.gupta 281
	@Autowired
282
	private JavaMailSender googleMailSender;
24711 amit.gupta 283
 
24005 amit.gupta 284
	@Autowired
285
	private SchemeService schemeService;
24711 amit.gupta 286
 
24716 amit.gupta 287
	@Autowired
288
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
289
 
290
	@Autowired
24767 amit.gupta 291
	private OrderRepository orderRepository;
292
 
293
	@Autowired
24716 amit.gupta 294
	private ScanRecordRepository scanRecordRepository;
295
 
24767 amit.gupta 296
	@Autowired
297
	private JavaMailSender mailSender;
27451 tejbeer 298
 
27450 tejbeer 299
	private static final String ACCOUNT_ID = "aZ6flHhrgPIEl18buHdPBdueEN4";
300
	private static final String SECRET_KEY = "a7rsX5B4UNNfTTx1-IJ19qdH48BT4YvBKlQJg3n3_KKNe7WWych55g";
24767 amit.gupta 301
 
27511 amit.gupta 302
	@Autowired
303
	private WarehouseInventoryItemRepository warehouseInventoryItemRepository;
27787 amit.gupta 304
 
23898 amit.gupta 305
	public void populateGrnTimestamp() {
306
		List<Purchase> allPurchases = purchaseRepository.selectAll();
23899 amit.gupta 307
		for (Purchase p : allPurchases) {
23898 amit.gupta 308
			String invoiceNumber = p.getPurchaseReference();
23899 amit.gupta 309
			if (p.getCompleteTimestamp() == null) {
23898 amit.gupta 310
				LOGGER.info("GRN for invoice {} is delivered but partially Completed.", p.getPurchaseReference());
311
			} else {
312
				List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(invoiceNumber, p.getFofoId());
23899 amit.gupta 313
				for (Order order : orders) {
23902 amit.gupta 314
					if (order.getPartnerGrnTimestamp() == null) {
315
						order.setPartnerGrnTimestamp(p.getCompleteTimestamp());
23898 amit.gupta 316
					}
317
				}
318
			}
319
		}
23899 amit.gupta 320
 
23898 amit.gupta 321
	}
23899 amit.gupta 322
 
26408 amit.gupta 323
	public void fetchImeiActivation(int ym) throws Exception {
27787 amit.gupta 324
		LocalDate startDate = null;
325
		LocalDate endDate = null;
326
		if (ym == 0) {
327
			startDate = LocalDate.now().minusDays(30);
328
			endDate = LocalDate.now();
329
		} else {
330
			startDate = LocalDate.now().minusMonths(ym);
331
			endDate = startDate.plusMonths(1);
332
		}
333
		samsungActivationService.getActivationsBetweenNew(startDate, endDate);
26195 amit.gupta 334
	}
26299 amit.gupta 335
 
24716 amit.gupta 336
	public void migarateLineItemsToNewTable() throws Exception {
23755 amit.gupta 337
		LOGGER.info("Before Migrated LineItems Successfully");
23824 amit.gupta 338
		int lineItemImeiId = 0;
339
		LocalDateTime startDate = null;
340
		try {
341
			lineItemImeiId = lineItemImeisRepository.selectMaxId();
23899 amit.gupta 342
			LineItem lineItem = lineItemRepository
343
					.selectById(lineItemImeisRepository.selectById(lineItemImeiId).getLineItemId());
23824 amit.gupta 344
			Order order = orderRepository.selectById(lineItem.getOrderId());
345
			startDate = order.getBillingTimestamp();
346
		} catch (Exception e) {
347
			LOGGER.info("Running before first time");
23826 amit.gupta 348
			startDate = LocalDateTime.of(LocalDate.of(2017, 7, 1), LocalTime.MIDNIGHT);
23824 amit.gupta 349
		}
350
		List<Order> orders = orderRepository.selectAllByBillingDatesBetween(startDate, LocalDateTime.now());
23827 amit.gupta 351
		Collections.reverse(orders);
23899 amit.gupta 352
 
23755 amit.gupta 353
		for (Order order : orders) {
23824 amit.gupta 354
			try {
23767 amit.gupta 355
				String serialNumbers = order.getLineItem().getSerialNumber();
356
				if (!StringUtils.isEmpty(serialNumbers)) {
357
					List<String> serialNumberList = Arrays.asList(serialNumbers.split(","));
358
					for (String serialNumber : serialNumberList) {
359
						int lineItemId = order.getLineItem().getId();
360
						LineItemImei lineItemImei = new LineItemImei();
361
						lineItemImei.setSerialNumber(serialNumber);
362
						lineItemImei.setLineItemId(lineItemId);
363
						lineItemImeisRepository.persist(lineItemImei);
364
					}
365
				} else {
366
					LOGGER.info("Serial Numbers dont exist for Order {}", order.getId());
23755 amit.gupta 367
				}
23824 amit.gupta 368
			} catch (Exception e) {
23899 amit.gupta 369
				LOGGER.info("Error occurred while creating lineitem imei {}, because of {}", order.getId(),
370
						e.getMessage());
23755 amit.gupta 371
			}
372
		}
373
		LOGGER.info("Migrated LineItems Successfully");
374
	}
24266 amit.gupta 375
 
376
	public void cancelOrder(List<String> invoiceNumbers) throws Exception {
377
		orderService.cancelOrder(invoiceNumbers);
378
	}
27787 amit.gupta 379
 
380
	@Autowired
381
	HdfcPaymentRepository hdfcPaymentRepository;
382
 
27721 amit.gupta 383
	public void addPayment() throws Exception {
27722 amit.gupta 384
		List<Integer> paymentIds = Arrays.asList(3777);
27721 amit.gupta 385
		for (int hdfcPaymentId : paymentIds) {
386
			HdfcPayment hdfcPayment = hdfcPaymentRepository.selectById(hdfcPaymentId);
387
			String virtualAccount = hdfcPayment.getVirtualAccount();
388
			String retailerIdString = virtualAccount.substring(6);
389
			int retailerId = Integer.parseInt(retailerIdString);
390
			String description = String.format("Advance payment received through %s, Utr# %s",
391
					hdfcPayment.getTransferMode(), hdfcPayment.getUtr());
392
			walletService.addAmountToWallet(retailerId, hdfcPayment.getId(), WalletReferenceType.AUTOMATED_ADVANCE,
393
					description, (float) hdfcPayment.getAmount(), hdfcPayment.getCreditTimestamp());
394
		}
395
	}
24711 amit.gupta 396
 
24722 amit.gupta 397
	public void migratePurchase() throws Exception {
24641 amit.gupta 398
		List<Purchase> purchases = purchaseRepository.selectPurchaseAllPurchasesLessThanZero();
24706 amit.gupta 399
		System.out.printf("Total Purchases count is %s", purchases.size());
24711 amit.gupta 400
		for (Purchase purchase : purchases) {
401
			List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchase.getId());
402
			Map<Integer, List<InventoryItem>> itemIdInventoryMap = inventoryItems.stream()
403
					.collect(Collectors.groupingBy(InventoryItem::getItemId));
404
			List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(purchase.getPurchaseReference(),
405
					purchase.getFofoId());
406
			Map<Integer, Integer> ourSaleItemQtyMap = orders.stream().collect(Collectors.groupingBy(
407
					x -> x.getLineItem().getItemId(), Collectors.summingInt(x -> x.getLineItem().getQuantity())));
408
			Map<Integer, Integer> theirPurchaseItemQtyMap = inventoryItems.stream().collect(Collectors
409
					.groupingBy(InventoryItem::getItemId, Collectors.summingInt(InventoryItem::getInitialQuantity)));
24709 amit.gupta 410
			for (Map.Entry<Integer, Integer> itemQtyEntry : theirPurchaseItemQtyMap.entrySet()) {
24711 amit.gupta 411
				if (!ourSaleItemQtyMap.containsKey(itemQtyEntry.getKey())) {
412
					LOGGER.info("Cannot find in Invoice {} item {}", purchase.getPurchaseReference(),
413
							itemQtyEntry.getKey());
24646 amit.gupta 414
					continue;
24645 amit.gupta 415
				}
24709 amit.gupta 416
				int ourSale = ourSaleItemQtyMap.get(itemQtyEntry.getKey());
24713 amit.gupta 417
				int quantityToReduce = itemQtyEntry.getValue() - ourSale;
24716 amit.gupta 418
				List<InventoryItem> itemIis = itemIdInventoryMap.get(itemQtyEntry.getKey());
419
				if (itemIdInventoryMap != null) {
420
					for (InventoryItem ii : itemIis) {
24915 amit.gupta 421
						if (ii.getSerialNumber() == null && ii.getGoodQuantity() == ii.getInitialQuantity()
422
								&& quantityToReduce >= ii.getInitialQuantity()) {
24734 amit.gupta 423
							LOGGER.info("Changed in inventoryItems {}, {}, {}, {}, {}, {}",
24716 amit.gupta 424
									purchase.getPurchaseReference(), ii.getId(), ii.getItemId(),
24734 amit.gupta 425
									ii.getInitialQuantity(), ii.getGoodQuantity(), quantityToReduce);
24912 amit.gupta 426
							List<ScanRecord> scanRecords = scanRecordRepository.selectByInventoryItemId(ii.getId());
427
							for (ScanRecord scanRecord : scanRecords) {
24915 amit.gupta 428
								CurrentInventorySnapshot cis = currentInventorySnapshotRepository
429
										.selectByItemIdAndFofoId(itemQtyEntry.getKey(), purchase.getFofoId());
430
								scanRecord.setQuantity(0);
431
								ii.setGoodQuantity(0);
432
								quantityToReduce = quantityToReduce - ii.getInitialQuantity();
433
								cis.setAvailability(cis.getAvailability() - ii.getInitialQuantity());
434
								purchase.setUnfullfilledNonSerializedQuantity(
435
										purchase.getUnfullfilledNonSerializedQuantity() + quantityToReduce);
436
								LOGGER.info("Rectified {}, {}, {}, {}, {}, {}", purchase.getPurchaseReference(),
437
										ii.getId(), ii.getItemId(), ii.getInitialQuantity(), ii.getGoodQuantity(),
438
										quantityToReduce);
24711 amit.gupta 439
							}
24641 amit.gupta 440
						}
441
					}
442
				}
443
			}
444
		}
24953 amit.gupta 445
		// throw new Exception();
24641 amit.gupta 446
	}
24767 amit.gupta 447
 
24802 amit.gupta 448
	public void migrateChallansToInvoices() throws Exception {
24814 amit.gupta 449
		Map<String, List<Order>> invoiceOrdersMap = orderRepository.selectAllChallans().stream()
450
				.filter(x -> !x.getLineItem().getHsnCode().equals("NOGST"))
24794 amit.gupta 451
				.collect(Collectors.groupingBy(Order::getInvoiceNumber, Collectors.toList()));
24814 amit.gupta 452
 
25837 amit.gupta 453
		List<List<?>> rows = new ArrayList<>();
24814 amit.gupta 454
		for (String invoice : invoiceOrdersMap.keySet()) {
24794 amit.gupta 455
			Order oneOrder = invoiceOrdersMap.get(invoice).get(0);
456
			int totalOrders = invoiceOrdersMap.get(invoice).size();
457
			LineItem lineItem = oneOrder.getLineItem();
24802 amit.gupta 458
			oneOrder.setBillingTimestamp(LocalDateTime.now());
459
			oneOrder.setInvoiceNumber(getInvoiceNumber(oneOrder));
24819 amit.gupta 460
			rows.add(Arrays.asList(oneOrder.getId(), invoice, oneOrder.getInvoiceNumber(), lineItem.getQuantity()));
24883 amit.gupta 461
			LOGGER.info(invoice + "\t" + oneOrder.getInvoiceNumber() + oneOrder.getId() + "\t",
462
					"\t" + totalOrders + "\t" + lineItem.getQuantity());
24814 amit.gupta 463
			Purchase p = null;
464
			try {
465
				p = purchaseRepository.selectByPurchaseReferenceAndFofoId(invoice, oneOrder.getRetailerId());
466
			} catch (Exception e) {
24815 amit.gupta 467
				LOGGER.info("Could not find purchase for invoice {}", invoice);
24812 amit.gupta 468
			}
24814 amit.gupta 469
			if (p != null) {
470
				List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(p.getId());
471
				for (InventoryItem inventoryItem : inventoryItems) {
24815 amit.gupta 472
					LOGGER.info(inventoryItem.getItemId() + " " + inventoryItem.getGoodQuantity() + " "
24883 amit.gupta 473
							+ inventoryItem.getHsnCode() + " " + inventoryItem.getSerialNumber() + " "
474
							+ p.getPurchaseReference());
24814 amit.gupta 475
				}
476
			}
477
 
24794 amit.gupta 478
		}
24818 amit.gupta 479
		changePartnerInvoices();
24883 amit.gupta 480
		ByteArrayOutputStream baos = FileUtil
481
				.getCSVByteStream(Arrays.asList("Order id", "Challan", "Invoice", "Quantity"), rows);
482
 
24819 amit.gupta 483
		Utils.sendMailWithAttachment(googleMailSender,
484
				new String[] { "amit.gupta@shop2020.in", "sunny.yadav@smartdukaan.com" }, null,
24883 amit.gupta 485
				"Challans Converted to Invoice", "PFA", "Challans-To-Invoice.csv",
486
				new ByteArrayResource(baos.toByteArray()));
24916 amit.gupta 487
		throw new Exception();
24794 amit.gupta 488
	}
24767 amit.gupta 489
 
24802 amit.gupta 490
	private String getInvoiceNumber(Order oneOrder) {
24805 amit.gupta 491
		String prefix = oneOrder.getInvoiceNumber().split("-")[1].replaceAll("\\d*", "");
24803 amit.gupta 492
		System.out.println("Prefix is " + prefix);
24802 amit.gupta 493
		SellerWarehouse sellerWarehouse = sellerWarehouseRepository.selectByPrefix(prefix);
494
		int newSequence = sellerWarehouse.getInvoiceSequence() + 1;
495
		sellerWarehouse.setInvoiceSequence(newSequence);
24814 amit.gupta 496
		return prefix + newSequence;
24802 amit.gupta 497
	}
24814 amit.gupta 498
 
24806 amit.gupta 499
	private void changePartnerInvoices() throws Exception {
24814 amit.gupta 500
		List<FofoOrder> fofoOrders = fofoOrderRepository.selectByInvoiceNumberLike("%SEC%");
501
		for (FofoOrder fofoOrder : fofoOrders) {
24806 amit.gupta 502
			FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId()).get(0);
24814 amit.gupta 503
			if (fofoOrderItem.getBrand().equals("Vivo")) {
24806 amit.gupta 504
				String challanString = fofoOrder.getInvoiceNumber();
24814 amit.gupta 505
				String storeCode = invoiceNumberGenerationSequenceRepository.selectByFofoId(fofoOrder.getFofoId())
506
						.getPrefix();
24806 amit.gupta 507
				String invoiceNumber = orderService.getInvoiceNumber(fofoOrder.getFofoId(), storeCode);
508
				fofoOrder.setInvoiceNumber(invoiceNumber);
509
				fofoOrder.setCreateTimestamp(LocalDateTime.now());
24818 amit.gupta 510
				LOGGER.info(challanString + "\t" + invoiceNumber + "\t" + fofoOrderItem.getQuantity());
24806 amit.gupta 511
			}
24814 amit.gupta 512
 
24806 amit.gupta 513
		}
514
	}
24802 amit.gupta 515
 
25023 amit.gupta 516
	public void populateSchemes() {
25021 amit.gupta 517
		List<Integer> list05 = Arrays.asList(29093, 29094, 29095, 29096, 29097, 29098, 29099, 29101, 29102);
518
		List<Integer> list10 = Arrays.asList(29187, 29188);
519
		List<Integer> list13 = Arrays.asList(28095, 28097, 28098, 28101, 28102, 28104, 28106, 28107, 28108, 28227,
520
				28228, 28229, 28231, 29055, 29056, 29066, 29079);
521
		List<Integer> list15 = Arrays.asList(20891, 27938, 27939, 27940, 27941, 27943, 27947, 27948, 27953, 27954,
522
				27955, 28220, 28467, 29020, 29033, 29034, 29035, 29592, 29886, 29890, 29891, 29941, 29942, 27445, 27958,
523
				27960, 27961);
524
		List<Integer> list18 = Arrays.asList(28137, 28138, 28140, 28157, 28158, 28161, 28162, 28163, 28164, 28176,
525
				28177, 28178, 28199, 28200, 28208, 28209, 28210, 28211, 28215, 28216, 28217, 28230, 28380, 28381, 28382,
526
				28383, 28384, 28385, 28386, 28387, 28388, 28389, 28390, 28391, 28392, 28395, 28461, 28462, 28463, 28464,
527
				28465, 28466, 28488, 28489, 28490, 28491, 28564, 28565, 28762, 28773, 28871, 28872, 28873, 28874, 28880,
528
				28881, 28914, 28915, 28916, 28917, 28918, 28919, 28920, 29046, 29047, 29048, 29068, 29069, 29110, 29111,
529
				29112, 29113, 29114, 29115, 29116, 29117, 29207, 29208, 29217, 29218, 29225, 29474, 29475, 29476, 29477,
530
				29478, 29479, 29483, 29485, 29486, 29487, 29488, 29739, 29740, 29741, 29742, 29743, 29744, 29745, 29746,
531
				29747, 29748, 29749, 29753, 29756, 29757, 29758, 29760, 29761, 29762, 29763, 29764, 29765, 29766, 29767,
532
				29779, 29780, 29781, 29792, 29793, 29828, 29829, 29830, 29879, 29880, 29881, 29882, 29951);
533
		List<Integer> list20 = Arrays.asList(27975, 27976, 28091, 28363, 29023, 29024, 29025);
534
		List<Integer> list25 = Arrays.asList(28763, 28764, 28765, 29152, 29154, 29157, 29209, 29210, 29601, 29602,
535
				29720, 29721, 29722, 29723, 29725, 29726, 29727);
536
		List<Integer> list30 = Arrays.asList(27962, 27963, 27964, 27965, 27966, 27968, 27969, 28328, 28362, 28566,
537
				28567, 28568, 28571, 28572, 29073, 29074, 29075, 29080, 29081, 29120, 29121, 29122, 29124, 29189, 29190,
538
				29191, 29192, 29193, 29194, 29196, 29197, 29198, 29199, 29515, 29516, 29517, 29675, 29676, 29677, 29678,
539
				29679, 29707, 29708, 29794, 29795, 29883, 29884, 29885, 29887, 29888, 29889, 29931, 29932, 29935, 29936,
540
				29937, 29938, 29939, 29940);
541
		List<Integer> list35 = Arrays.asList(27996, 27998, 29067, 29071, 29643, 29644, 29945, 29946, 29987, 29052,
542
				29053, 29078, 29085, 29086, 29567, 29568, 29569, 29570, 29797, 29914, 29915, 29930, 28877, 28878, 29604,
543
				29605, 29606, 29775, 29776, 29777, 29778, 28862, 28863, 28864, 29026, 29103, 29104, 29105, 28979, 28980,
544
				28981, 28982, 28983, 29002, 29003, 29004, 29834, 29835, 29836, 29837, 29943);
545
		List<Integer> list40 = Arrays.asList(29082, 29083, 28766, 28767, 28768, 28769, 28771);
546
		List<Integer> list45 = Arrays.asList(28026, 28027, 28028, 29528, 29529, 29530, 29534, 29535, 29536, 29538,
547
				29755);
548
		List<Integer> list55 = Arrays.asList(28010, 28011, 28015, 28016, 28019, 28240, 28469, 28470, 28471, 28569,
549
				28570, 28674, 28759, 28761, 28909, 28910, 28911, 28912, 28913, 29108, 29109, 29143, 29144, 29145, 29146,
550
				29211, 29212, 29213, 29214, 29482, 29511, 29512, 29521, 29525, 29526, 29527, 29574, 29575, 29576, 29611,
551
				29612, 29616, 29641, 29642, 29728, 29729, 29750, 29771, 29782, 29783, 29784, 29923, 29924, 29944, 29953,
552
				29992, 29994, 27977, 27978, 28092, 28325, 28326, 28327, 28486, 28487, 29148, 29149, 29150, 29151, 29384,
553
				29385, 29386, 29427, 29489, 29518, 29519, 29520, 29577, 29578, 29579, 29580, 29586, 29660, 29661, 29662,
554
				29663, 29769, 29770, 29790, 29791, 29796, 29928, 29929, 29947, 29948, 28093, 28094, 28556, 28557, 28673,
555
				28867, 28868, 28870, 29089, 29090, 29091, 29106, 29107);
556
		List<Integer> list65 = Arrays.asList(28058, 28223, 28224, 28225, 28226, 28329, 29201, 29202, 29203, 29204,
557
				29205, 29206, 29466, 29467, 29468, 29469, 29470, 29471, 29472, 29573);
558
		Map<Float, List<Integer>> m = new HashMap<>();
559
		m.put(0.5f, list05);
560
		m.put(1.0f, list10);
561
		m.put(1.3f, list13);
562
		m.put(1.5f, list15);
563
		m.put(1.8f, list18);
564
		m.put(2.0f, list20);
565
		m.put(2.5f, list25);
566
		m.put(3.0f, list30);
567
		m.put(3.5f, list35);
568
		m.put(4.0f, list40);
569
		m.put(4.5f, list45);
570
		m.put(5.5f, list55);
571
		m.put(6.5f, list65);
572
		for (Map.Entry<Float, List<Integer>> itemsListEntry : m.entrySet()) {
573
			Scheme s1 = getScheme();
574
			s1.setAmount(itemsListEntry.getKey());
575
			schemeRepository.persist(s1);
25034 amit.gupta 576
			for (Integer itemId : itemsListEntry.getValue()) {
25021 amit.gupta 577
				SchemeItem schemeItem = new SchemeItem();
578
				schemeItem.setItemId(itemId);
579
				schemeItem.setSchemeId(s1.getId());
580
				schemeItemRepository.persist(schemeItem);
581
			}
582
		}
25034 amit.gupta 583
 
25021 amit.gupta 584
	}
585
 
586
	private Scheme getScheme() {
587
		Scheme s = new Scheme();
588
		s.setName("List Price Margin");
589
		s.setDescription("List Price Margin");
590
		s.setActiveTimestamp(null);
591
		s.setStartDateTime(LocalDate.of(2019, 6, 1).atStartOfDay());
592
		s.setEndDateTime(LocalDate.of(2019, 7, 1).atStartOfDay());
593
		s.setAmountType(AmountType.PERCENTAGE);
594
		s.setCreateTimestamp(LocalDateTime.now());
595
		s.setExpireTimestamp(null);
596
		s.setCreatedBy(175120474);
597
		return s;
598
	}
599
 
24957 amit.gupta 600
	public void findMismatchesInIndent() throws Exception {
601
		List<Order> allInProcessOrders = orderRepository.selectAllOrder(OrderStatus.SUBMITTED_FOR_PROCESSING);
24967 amit.gupta 602
 
25021 amit.gupta 603
		Map<String, Integer> lineItemWhQtyMap = allInProcessOrders.stream()
25734 amit.gupta 604
				.collect(Collectors.groupingBy(y -> y.getLineItem().getItemId() + "-" + y.getFulfilmentWarehouseId(),
24967 amit.gupta 605
						Collectors.summingInt(y -> y.getLineItem().getQuantity())));
25021 amit.gupta 606
 
607
		lineItemWhQtyMap.forEach((key, value) -> {
608
 
24967 amit.gupta 609
			int itemId = Integer.parseInt(key.split("-")[0]);
610
			int warehouseId = Integer.parseInt(key.split("-")[1]);
25021 amit.gupta 611
			System.out.printf("%d\t%d\t%d\n", itemId, warehouseId, value);
612
			SaholicInventorySnapshot cis = saholicInventorySnapshotRepository.selectByWarehouseIdandItemId(warehouseId,
613
					itemId);
614
			if (cis == null) {
24970 amit.gupta 615
				cis = new SaholicInventorySnapshot();
616
				cis.setItemId(itemId);
617
				cis.setWarehouseId(warehouseId);
618
				cis.setAvailability(0);
619
				saholicInventorySnapshotRepository.persist(cis);
620
			}
24967 amit.gupta 621
			cis.setReserved(value);
622
		});
24953 amit.gupta 623
	}
624
 
25034 amit.gupta 625
	public void fixSchemePayouts() throws Exception {
25524 amit.gupta 626
		LOGGER.info("In fix scheme Payouts");
25522 amit.gupta 627
		LocalDateTime startDate = LocalDate.of(2019, 9, 1).atStartOfDay();
628
		List<SchemeInOut> sios = schemeInOutRepository.selectAllByCreateDate(startDate, LocalDateTime.now());
25530 amit.gupta 629
 
25034 amit.gupta 630
		for (SchemeInOut sio : sios) {
25530 amit.gupta 631
			if (sio.getSchemeId() != 347) {
25523 amit.gupta 632
				LOGGER.info("Skipping {}", sio.getSchemeId());
25522 amit.gupta 633
				continue;
634
			}
25043 amit.gupta 635
			genericRepository.delete(sio);
25522 amit.gupta 636
			InventoryItem ii = inventoryItemRepository.selectById(sio.getInventoryItemId());
637
			UserWallet userWallet = userWalletRepository.selectByRetailerId(ii.getFofoId());
638
			Scheme scheme = schemeRepository.selectById(sio.getSchemeId());
639
			if (scheme.getType().equals(SchemeType.IN)) {
640
				List<UserWalletHistory> historyList = userWalletHistoryRepository
641
						.selectAllByreferenceIdandreferenceType(ii.getPurchaseId(), WalletReferenceType.SCHEME_IN);
642
				for (UserWalletHistory uwh : historyList) {
25530 amit.gupta 643
					if (uwh.getTimestamp().isAfter(startDate)) {
25522 amit.gupta 644
						genericRepository.delete(uwh);
645
						userWallet.setAmount(userWallet.getAmount() - uwh.getAmount());
646
					}
647
				}
648
			} else {
649
				List<ScanRecord> scanRecords = scanRecordRepository.selectByInventoryItemId(ii.getId());
650
				int orderId = scanRecords.get(0).getOrderId();
651
				List<UserWalletHistory> historyList = userWalletHistoryRepository
652
						.selectAllByreferenceIdandreferenceType(orderId, WalletReferenceType.SCHEME_OUT);
653
				for (UserWalletHistory uwh : historyList) {
25530 amit.gupta 654
					if (uwh.getTimestamp().isAfter(startDate)) {
25522 amit.gupta 655
						userWallet.setAmount(userWallet.getAmount() - uwh.getAmount());
656
						genericRepository.delete(uwh);
657
					}
658
				}
659
				List<UserWalletHistory> historyListBroken = userWalletHistoryRepository
25530 amit.gupta 660
						.selectAllByreferenceIdandreferenceType(ii.getPurchaseId(), WalletReferenceType.SCHEME_OUT);
25522 amit.gupta 661
				for (UserWalletHistory uwh : historyListBroken) {
25530 amit.gupta 662
					if (uwh.getTimestamp().isAfter(startDate)) {
25522 amit.gupta 663
						genericRepository.delete(uwh);
664
						userWallet.setAmount(userWallet.getAmount() - uwh.getAmount());
665
					}
666
				}
667
			}
668
 
25530 amit.gupta 669
			// System.out.println("Total Amount Rolled Back is " + totalRollbackAmount);
25516 amit.gupta 670
		}
25589 amit.gupta 671
		scheduledTasks.processScheme(startDate, startDate.plusDays(10), true);
25030 amit.gupta 672
	}
25530 amit.gupta 673
 
674
	public void fixWallet() throws Exception {
675
		List<FofoStore> fofoStores = fofoStoreRepository.selectAll();
25536 amit.gupta 676
		System.out.println("id\tcode\tactive\tname\tcity\tstate\twallet amount\tsum\twallet amount-sum");
25530 amit.gupta 677
		for (FofoStore fofoStore : fofoStores) {
678
			UserWallet uw = userWalletRepository.selectByRetailerId(fofoStore.getId());
679
			User user = userRepository.selectById(fofoStore.getId());
25749 amit.gupta 680
			if (user == null) {
25533 amit.gupta 681
				LOGGER.info("store does not exist", fofoStore.getCode());
25535 amit.gupta 682
				continue;
25533 amit.gupta 683
			}
25536 amit.gupta 684
			Address address = null;
685
			try {
686
				address = addressRepository.selectById(user.getAddressId());
25749 amit.gupta 687
			} catch (Exception e) {
25536 amit.gupta 688
				LOGGER.info("Could not find address for Store", fofoStore.getCode());
689
				address = new Address();
690
			}
25539 amit.gupta 691
			double sum = userWalletHistoryRepository.selectSumByWallet(uw.getId());
25749 amit.gupta 692
			int calculated = (int) sum;
693
			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(),
694
					fofoStore.isActive(), address.getName(), address.getCity(), address.getState(), uw.getAmount(),
695
					calculated, uw.getAmount() - calculated);
25530 amit.gupta 696
		}
697
	}
25749 amit.gupta 698
 
25734 amit.gupta 699
	public void changeWarehouse() throws Exception {
700
		transactionService.moveWarehouses();
701
	}
25749 amit.gupta 702
 
703
	public void mailDashboardScreenshots() throws Exception {
704
		System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver");
705
 
25752 amit.gupta 706
		ChromeOptions options = new ChromeOptions();
707
		options.addArguments("--headless");
708
		options.addArguments("--no-sandbox");
709
		options.addArguments("start-maximized");
710
		options.addArguments("disable-infobars");
711
		options.addArguments("--disable-extensions");
712
 
25753 amit.gupta 713
		WebDriver driver = new ChromeDriver(options);
25774 amit.gupta 714
		driver.manage().window().setSize(new Dimension(1600, 900));
25749 amit.gupta 715
		driver.manage().window().maximize();
25752 amit.gupta 716
		// Deleting all the cookies
25749 amit.gupta 717
		driver.manage().deleteAllCookies();
25752 amit.gupta 718
		// Specifiying pageLoadTimeout and Implicit wait
25749 amit.gupta 719
		driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
720
		driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
25752 amit.gupta 721
 
25749 amit.gupta 722
		Map<String, Set<Integer>> authUserPartnerIdMapping = csService.getAuthUserPartnerIdMapping();
723
		Set<Integer> allPartners = new HashSet<>();
25765 amit.gupta 724
		Map<Integer, File> partnerSnapshotMap = new HashMap<>();
25752 amit.gupta 725
		authUserPartnerIdMapping.values().stream().forEach(x -> allPartners.addAll(x));
25749 amit.gupta 726
		System.out.println(allPartners.size());
25752 amit.gupta 727
		for (int fofoId : allPartners) {
25749 amit.gupta 728
			driver.get("https://partners.smartdukaan.com/12dashboard34?fofoId=" + fofoId);
25765 amit.gupta 729
			File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
730
			partnerSnapshotMap.put(fofoId, file);
25752 amit.gupta 731
 
25749 amit.gupta 732
		}
25752 amit.gupta 733
		for (Map.Entry<String, Set<Integer>> entry : authUserPartnerIdMapping.entrySet()) {
25749 amit.gupta 734
			String email = entry.getKey();
25996 amit.gupta 735
			LOGGER.info("Sending mail start to {}", email);
25749 amit.gupta 736
			Set<Integer> partnerIds = entry.getValue();
737
			StringBuffer body = new StringBuffer();
25769 amit.gupta 738
			Map<Integer, File> emailSnapshotMap = new HashMap<>();
25752 amit.gupta 739
			for (int fofoId : partnerIds) {
25769 amit.gupta 740
				body.append(String.format("<br/><img src=\"cid:%d\"/>", fofoId));
741
				emailSnapshotMap.put(fofoId, partnerSnapshotMap.get(fofoId));
25749 amit.gupta 742
			}
25837 amit.gupta 743
			Utils.sendEmbeddedHtmlMail(mailSender, new String[] { email }, new String[] {},
25752 amit.gupta 744
					String.format("Franchise Screenshots - %s", FormattingUtils.formatDate(LocalDateTime.now())),
25837 amit.gupta 745
					body.toString(), emailSnapshotMap);
25996 amit.gupta 746
			LOGGER.info("Sent mail to {}", email);
25749 amit.gupta 747
		}
748
		driver.quit();
749
	}
26033 amit.gupta 750
 
26299 amit.gupta 751
	// Rollout prebooking orders amount in case the order is grned.
26033 amit.gupta 752
	public void pbfix() throws ProfitMandiBusinessException {
753
		List<Item> items = itemRepository.selectAllByCatalogItemId(1022304);
26299 amit.gupta 754
		for (Item item : items) {
26033 amit.gupta 755
			List<InventoryItem> inventoryItems = inventoryItemRepository.selectByItemId(item.getId(), 0, 500);
26299 amit.gupta 756
			for (InventoryItem inventoryItem : inventoryItems) {
26033 amit.gupta 757
				List<PrebookingOrder> prebookingOrders = prebookingOrderRepository
26299 amit.gupta 758
						.selectByFofoIdAndCatalogIds(inventoryItem.getFofoId(), item.getCatalogItemId()).stream()
759
						.collect(Collectors.toList());
760
				if (prebookingOrders.size() > 0) {
761
					purchaseService.sendPrebookingNotifyMessage(prebookingOrders.get(0));
26033 amit.gupta 762
				}
26299 amit.gupta 763
				// inventoryItem.getFofoId()
26033 amit.gupta 764
			}
765
		}
26299 amit.gupta 766
		// throw new ProfitMandiBusinessException("", "", "");
767
		// prebookingOrderRepository.select
26033 amit.gupta 768
		// TODO Auto-generated method stub
26299 amit.gupta 769
 
26033 amit.gupta 770
	}
26092 amit.gupta 771
 
26299 amit.gupta 772
	public void fixGrn() throws Exception {
26092 amit.gupta 773
		List<Purchase> incompletePurchases = purchaseRepository.selectIncompletePurchase();
26299 amit.gupta 774
		for (Purchase incompletePurchase : incompletePurchases) {
775
			List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(
776
					incompletePurchase.getPurchaseReference(), incompletePurchase.getFofoId());
26093 amit.gupta 777
			List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(incompletePurchase.getId());
778
			Map<Integer, Integer> grnedItems = inventoryItems.stream().collect(
26299 amit.gupta 779
					Collectors.groupingBy(x -> x.getItemId(), Collectors.summingInt(x -> x.getInitialQuantity())));
780
			Map<Integer, Integer> billedItems = orders.stream().collect(Collectors.groupingBy(
781
					x -> x.getLineItem().getItemId(), Collectors.summingInt(x -> x.getLineItem().getQuantity())));
782
			for (Integer billedItemId : billedItems.keySet()) {
783
				if (grnedItems.containsKey(billedItemId)) {
784
					if (grnedItems.get(billedItemId) > billedItems.get(billedItemId)) {
785
						LOGGER.info("Billed Qty {} ---- Grned {}, ItemId {}, Invoice Number {}({}), Grn Date {}",
786
								billedItems.get(billedItemId), grnedItems.get(billedItemId), billedItemId,
787
								incompletePurchase.getPurchaseReference(), incompletePurchase.getId(),
788
								incompletePurchase.getCreateTimestamp());
26095 amit.gupta 789
						Item item = itemRepository.selectById(billedItemId);
26299 amit.gupta 790
						if (item.getType().equals(ItemType.SERIALIZED)) {
791
 
26096 amit.gupta 792
						} else {
26299 amit.gupta 793
							for (InventoryItem inventoryItem : inventoryItems) {
794
								if (inventoryItem.getItemId() == billedItemId && inventoryItem.getGoodQuantity() == 0) {
795
									List<ScanRecord> scanRecords = scanRecordRepository
796
											.selectByInventoryItemId(inventoryItem.getId());
797
									if (scanRecords.size() == 1 && scanRecords.get(0).getQuantity() == 0) {
26096 amit.gupta 798
										LOGGER.info("Safe to remove InventoryItem Id {}", inventoryItem.getId());
26101 amit.gupta 799
										scanRecordRepository.delete(scanRecords.get(0));
800
										inventoryItemRepository.delete(inventoryItem);
26299 amit.gupta 801
										incompletePurchase.setUnfullfilledNonSerializedQuantity(
802
												incompletePurchase.getUnfullfilledNonSerializedQuantity()
803
														+ inventoryItem.getInitialQuantity());
26096 amit.gupta 804
									}
805
								}
806
							}
26095 amit.gupta 807
						}
26093 amit.gupta 808
					}
809
				}
26092 amit.gupta 810
			}
26299 amit.gupta 811
 
26092 amit.gupta 812
		}
26299 amit.gupta 813
 
26092 amit.gupta 814
	}
26265 amit.gupta 815
 
816
	public void fixDupGrns() throws Exception {
26412 amit.gupta 817
		List<Integer> duplicatePurchaseIds = Arrays.asList(14984);
26299 amit.gupta 818
		for (int duplicatePurchaseId : duplicatePurchaseIds) {
26265 amit.gupta 819
			Purchase purchase = purchaseRepository.selectById(duplicatePurchaseId);
820
			List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(duplicatePurchaseId);
26299 amit.gupta 821
			if (inventoryItems.size() == 0) {
26266 amit.gupta 822
				LOGGER.info("Could not find InventoryItems for {}", duplicatePurchaseId);
823
				continue;
824
			}
26299 amit.gupta 825
			schemeService.rollbackSchemes(inventoryItems.stream().map(x -> x.getId()).collect(Collectors.toList()),
826
					duplicatePurchaseId,
827
					"Rolled back duplicate grn for Purchase Invoice " + purchase.getPurchaseReference());
828
			for (InventoryItem inventoryItem : inventoryItems) {
26265 amit.gupta 829
				inventoryItemRepository.delete(inventoryItem);
830
				List<ScanRecord> scanRecords = scanRecordRepository.selectByInventoryItemId(inventoryItem.getId());
26299 amit.gupta 831
				for (ScanRecord scanRecord : scanRecords) {
26265 amit.gupta 832
					scanRecordRepository.delete(scanRecord);
833
				}
26299 amit.gupta 834
				List<SchemeInOut> sios = schemeInOutRepository
835
						.selectByInventoryItemIds(new HashSet<>(Arrays.asList(inventoryItem.getId())));
836
				for (SchemeInOut sio : sios) {
26265 amit.gupta 837
					LOGGER.info("SIO - {}", sio);
838
					schemeInOutRepository.delete(sio);
839
				}
26299 amit.gupta 840
 
26265 amit.gupta 841
			}
842
		}
26299 amit.gupta 843
		// throw new Exception();
26265 amit.gupta 844
	}
26579 amit.gupta 845
 
846
	public void mongom() {
847
		List<TagListing> tls = tagListingRepository.selectAll(false);
848
		Set<Integer> itemIds = tls.stream().map(x -> x.getItemId()).collect(Collectors.toSet());
849
		Set<Integer> catalogIds = itemRepository.selectByIds(itemIds).stream().map(x -> x.getCatalogItemId())
850
				.collect(Collectors.toSet());
851
		for (int catalogId : catalogIds) {
852
			try {
853
				ContentPojo cp = mongoClient.getEntityById(catalogId);
26580 amit.gupta 854
				try {
855
					cp.setIconImageUrl(cp.getIconImageUrl().replace("saholic", "smartdukaan"));
26759 amit.gupta 856
				} catch (Exception e) {
857
 
26580 amit.gupta 858
				}
26759 amit.gupta 859
 
26580 amit.gupta 860
				try {
861
					cp.setThumbnailImageUrl(cp.getThumbnailImageUrl().replace("saholic", "smartdukaan"));
26759 amit.gupta 862
				} catch (Exception e) {
863
 
26580 amit.gupta 864
				}
26759 amit.gupta 865
 
26579 amit.gupta 866
				cp.setDefaultImageUrl(cp.getDefaultImageUrl().replace("saholic", "smartdukaan"));
867
				List<MediaPojo> mPojos = cp.getImages();
26759 amit.gupta 868
				if (mPojos != null) {
26580 amit.gupta 869
					mPojos.stream().forEach(mPojo -> {
870
						mPojo.setUrl(mPojo.getUrl().replace("saholic", "smartdukaan"));
871
					});
872
				}
26579 amit.gupta 873
				mongoClient.persistEntity(cp);
874
			} catch (Exception e) {
875
				continue;
876
			}
877
		}
878
	}
26759 amit.gupta 879
 
880
	public void cancelDn(String debitNoteNumber) throws Exception {
881
		DebitNote debitNote = debitNoteRepository.selectDebitNoteByNumber(debitNoteNumber);
26928 amit.gupta 882
 
883
		List<PurchaseReturnItem> purchaseReturnItems = purchaseReturnItemRepository
884
				.selectAllByDebitNoteId(debitNote.getId());
26759 amit.gupta 885
		// Select all inventory Item
886
		Set<Integer> inventoryItemIds = purchaseReturnItems.stream().map(x -> x.getInventoryItemId())
887
				.collect(Collectors.toSet());
888
		List<InventoryItem> inventoryItems = inventoryItemRepository.selectByIds(inventoryItemIds);
889
		for (InventoryItem inventoryItem : inventoryItems) {
890
			if (!StringUtils.isEmpty(inventoryItem.getSerialNumber())) {
891
				inventoryItem.setGoodQuantity(1);
892
				inventoryItem.setLastScanType(ScanType.PURCHASE);
893
				ScanRecord sr = scanRecordRepository.selectByInventoryItemId(inventoryItem.getId()).stream()
894
						.filter(x -> x.getType().equals(ScanType.PURCHASE_RET)).findFirst().get();
895
				scanRecordRepository.delete(sr);
896
				CurrentInventorySnapshot cis = currentInventorySnapshotRepository
897
						.selectByItemAndFofoId(inventoryItem.getItemId(), inventoryItem.getFofoId());
898
				if (cis == null) {
899
					cis = new CurrentInventorySnapshot();
900
					cis.setFofoId(inventoryItem.getFofoId());
901
					cis.setItemId(inventoryItem.getId());
902
					currentInventorySnapshotRepository.persist(cis);
903
				}
904
				cis.setAvailability(cis.getAvailability() + 1);
905
				schemeService.processSchemeIn(inventoryItem.getPurchaseId(), inventoryItem.getFofoId());
906
			}
26928 amit.gupta 907
		}
908
		purchaseReturnItems.stream().forEach(x -> purchaseReturnItemRepository.delete(x));
26759 amit.gupta 909
	}
26799 amit.gupta 910
 
911
	public void processPd(int priceDropId) throws ProfitMandiBusinessException {
27079 amit.gupta 912
		priceDropService.processPriceDrop(priceDropId, false);
26799 amit.gupta 913
	}
26928 amit.gupta 914
 
915
	public void fixScheme() throws Exception {
26936 amit.gupta 916
		LOGGER.info("Partner Types found\tPartnerType To Remove\tAmout to Rollback");
26928 amit.gupta 917
		final Map<Integer, Scheme> schemesMap = schemeRepository.selectAll().stream()
918
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
919
		List<SchemeInOut> sios = schemeInOutRepository.selectAllByCreateDate(LocalDate.of(2019, 9, 1).atTime(0, 0),
920
				LocalDateTime.now());
27221 amit.gupta 921
		Map<SioTuple, Map<PartnerType, List<SchemeInOut>>> schemeTupleMap = sios.stream()
922
				.filter(x -> x.getRolledBackTimestamp() == null)
26928 amit.gupta 923
				.filter(x -> schemesMap.get(x.getSchemeId()).getPartnerType() != PartnerType.ALL)
924
				.collect(Collectors.groupingBy(
925
						x -> new SioTuple(x.getInventoryItemId(), schemesMap.get(x.getSchemeId()).getType()),
27221 amit.gupta 926
						Collectors.groupingBy(x -> schemesMap.get(x.getSchemeId()).getPartnerType(),
927
								Collectors.mapping(x -> x, Collectors.toList()))));
928
 
929
		schemeTupleMap.entrySet().stream().filter(x -> x.getValue().size() > 1).forEach(x -> {
26929 amit.gupta 930
			Map<PartnerType, List<SchemeInOut>> partnerTypeSchemeMap = x.getValue();
27221 amit.gupta 931
			PartnerType partnerTypeToRemove = partnerTypeSchemeMap.keySet().stream()
932
					.min(Comparator.comparing(y -> PartnerType.PartnerTypeRankMap.get(y))).get();
933
			LOGGER.info("{}\t{}\t{}\t{}\t{}\t{}", partnerTypeSchemeMap.keySet(), partnerTypeToRemove,
934
					partnerTypeSchemeMap.get(partnerTypeToRemove).stream()
935
							.collect(Collectors.summingDouble(SchemeInOut::getAmount)),
936
					FormattingUtils.formatDate(partnerTypeSchemeMap.get(partnerTypeToRemove).stream()
937
							.map(y -> y.getCreateTimestamp()).findFirst().get()));
938
 
26928 amit.gupta 939
		});
940
	}
941
 
942
	private class SioTuple {
943
		int inventoryId;
944
		SchemeType schemeType;
945
 
946
		public SioTuple(int inventoryItemId, SchemeType schemeType) {
947
			this.inventoryId = inventoryItemId;
948
			this.schemeType = schemeType;
949
		}
950
 
951
		public int getInventoryId() {
952
			return inventoryId;
953
		}
954
 
955
		public void setInventoryId(int inventoryId) {
956
			this.inventoryId = inventoryId;
957
		}
958
 
959
		public SchemeType getSchemeType() {
960
			return schemeType;
961
		}
962
 
963
		public void setSchemeType(SchemeType schemeType) {
964
			this.schemeType = schemeType;
965
		}
966
 
967
		@Override
968
		public int hashCode() {
969
			final int prime = 31;
970
			int result = 1;
971
			result = prime * result + getOuterType().hashCode();
972
			result = prime * result + inventoryId;
973
			result = prime * result + ((schemeType == null) ? 0 : schemeType.hashCode());
974
			return result;
975
		}
976
 
977
		@Override
978
		public boolean equals(Object obj) {
979
			if (this == obj)
980
				return true;
981
			if (obj == null)
982
				return false;
983
			if (getClass() != obj.getClass())
984
				return false;
985
			SioTuple other = (SioTuple) obj;
986
			if (!getOuterType().equals(other.getOuterType()))
987
				return false;
988
			if (inventoryId != other.inventoryId)
989
				return false;
990
			if (schemeType != other.schemeType)
991
				return false;
992
			return true;
993
		}
994
 
995
		private RunOnceTasks getOuterType() {
996
			return RunOnceTasks.this;
997
		}
998
 
999
	}
27221 amit.gupta 1000
 
1001
	public void printPendingLeads() {
27277 amit.gupta 1002
		LOGGER.info("PENDING LEADES {}", leadRepository
1003
				.selectLeadsScheduledBetweenDate(LocalDateTime.now().minusDays(15), LocalDateTime.now().plusHours(4)));
27221 amit.gupta 1004
	}
27277 amit.gupta 1005
 
27286 amit.gupta 1006
	public void removeDuplicateOrders() throws Exception {
27451 tejbeer 1007
		List<String> invoiceNumbers = Arrays.asList(/*
1008
													 * "DLWE066/1108", "DLWE066/299", "DLWE066/348", "HRFB004/242",
1009
													 * "HRFB004/243", "HRFB004/514", "HRFTB155/29", "HRJND076/1146",
1010
													 * "HRJND076/966", "HRKA134/295", "HRKA134/421", "HRKK091/381",
1011
													 * "HRMGH106/576", "HRSP056/139", "HRYN030/103", "UPGZ019/395",
1012
													 * "UPHRD130/1299", "UPHRD130/456", "UPHRD130/634", "UPLKO063/897",
1013
													 * "UPMRT149/54", "UPSJP119/748", "UPSJP119/980", "UPSTP065/1218",
1014
													 * "UPSTP065/2039", "UPSTP090/437", "UPSTP120/164",
1015
													 */
27312 amit.gupta 1016
				"HRMGH106/1576");
27451 tejbeer 1017
 
27288 amit.gupta 1018
		int totalAmount = 0;
1019
		float saleAmount = 0;
27289 amit.gupta 1020
		float schemeReverseAmount = 0;
27451 tejbeer 1021
		for (String invoiceNumber : invoiceNumbers) {
27281 amit.gupta 1022
			List<FofoOrder> orders = fofoOrderRepository.selectByInvoiceNumberLike(invoiceNumber);
27283 amit.gupta 1023
			orders = orders.stream().skip(1).collect(Collectors.toList());
27286 amit.gupta 1024
			for (FofoOrder fofoOrder : orders) {
27295 amit.gupta 1025
				LOGGER.info("Fofo Order Id - {}, Invoice {}", fofoOrder.getId(), invoiceNumber);
27286 amit.gupta 1026
				int inventoryItemId = 0;
27288 amit.gupta 1027
				saleAmount += fofoOrder.getTotalAmount();
27297 amit.gupta 1028
				fofoOrderRepository.delete(fofoOrder);
27302 amit.gupta 1029
				LOGGER.info("Fofo Order Id - {}, Invoice {}", fofoOrder.getId(), invoiceNumber);
27286 amit.gupta 1030
				List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
27451 tejbeer 1031
				List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
1032
						.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
1033
				for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
27297 amit.gupta 1034
					paymentOptionTransactionRepository.delete(paymentOptionTransaction);
27286 amit.gupta 1035
				}
27451 tejbeer 1036
				for (FofoOrderItem foi : fofoOrderItems) {
27302 amit.gupta 1037
					List<FofoLineItem> flis = fofoLineItemRepository.selectByFofoOrderItemId(foi.getId());
27297 amit.gupta 1038
					fofoOrderItemRepository.delete(foi);
27451 tejbeer 1039
					for (FofoLineItem fli : flis) {
27302 amit.gupta 1040
						inventoryItemId = fli.getInventoryItemId();
27297 amit.gupta 1041
						fofoLineItemRepository.delete(fli);
27286 amit.gupta 1042
					}
1043
				}
27451 tejbeer 1044
				// Rollback entry with reversal reason
1045
				if (fofoOrder.getCreateTimestamp().isAfter(LocalDate.of(2020, 4, 1).atStartOfDay())) {
27293 amit.gupta 1046
					float invoiceSchemeReversalAmount = 0;
27451 tejbeer 1047
					List<UserWalletHistory> userWalletHistory = userWalletHistoryRepository
1048
							.selectAllByreferenceIdandreferenceType(fofoOrder.getId(), WalletReferenceType.SCHEME_OUT);
1049
					float invoiceWalletAmount = userWalletHistory.stream()
1050
							.collect(Collectors.summingInt(y -> y.getAmount()));
27303 amit.gupta 1051
					totalAmount += invoiceWalletAmount;
27299 amit.gupta 1052
					try {
27451 tejbeer 1053
						walletService.rollbackAmountFromWallet(fofoOrder.getFofoId(), invoiceWalletAmount,
1054
								fofoOrder.getId(), WalletReferenceType.SCHEME_OUT,
1055
								"Same order for Invoice-" + invoiceNumber + "created twice, duplicate invoice rollback",
1056
								fofoOrder.getCancelledTimestamp());
27299 amit.gupta 1057
					} catch (Exception e) {
1058
						LOGGER.info("Failed wallet update Reson [{}]", e.getMessage());
1059
					}
27301 amit.gupta 1060
					LOGGER.info("inventoryItemId - {}", inventoryItemId);
27451 tejbeer 1061
					List<SchemeInOut> schemeInOuts = schemeInOutRepository
1062
							.selectByInventoryItemIds(new HashSet<>(Arrays.asList(inventoryItemId)));
27292 amit.gupta 1063
					Set<Integer> schemeIds = new HashSet<>();
27298 amit.gupta 1064
					Set<Integer> schemeIdsRolledback = new HashSet<>();
27451 tejbeer 1065
					for (SchemeInOut sio : schemeInOuts) {
1066
						if (Math.abs(sio.getCreateTimestamp().until(fofoOrder.getCreateTimestamp(),
1067
								ChronoUnit.MINUTES)) <= 35 && sio.getRolledBackTimestamp() == null) {
27289 amit.gupta 1068
							LOGGER.info(sio);
27451 tejbeer 1069
							if (!schemeIds.contains(sio.getSchemeId())) {
27292 amit.gupta 1070
								schemeIds.add(sio.getSchemeId());
27298 amit.gupta 1071
							} else if (!schemeIdsRolledback.contains(sio.getSchemeId())) {
1072
								schemeIdsRolledback.add(sio.getSchemeId());
27297 amit.gupta 1073
								sio.setRolledBackTimestamp(LocalDateTime.now());
27292 amit.gupta 1074
								schemeReverseAmount += sio.getAmount();
27293 amit.gupta 1075
								invoiceSchemeReversalAmount += sio.getAmount();
27292 amit.gupta 1076
							}
27289 amit.gupta 1077
						}
27286 amit.gupta 1078
					}
27451 tejbeer 1079
					if (Math.abs(invoiceWalletAmount - invoiceSchemeReversalAmount) > 3) {
27303 amit.gupta 1080
						LOGGER.info("No Matchhhh");
1081
					}
27451 tejbeer 1082
					LOGGER.info("invoiceWalletAmount - {}, invoiceSchemeReversalAmount {}", invoiceWalletAmount,
1083
							invoiceSchemeReversalAmount);
1084
				}
27283 amit.gupta 1085
			}
27277 amit.gupta 1086
		}
27451 tejbeer 1087
		LOGGER.info(
1088
				"Total Sale Amount Reversal - {}, Total Wallet Amount Reversal {}, Total Scheme Reversal Amount - {}",
1089
				saleAmount, totalAmount, schemeReverseAmount);
1090
		// throw new Exception();
27277 amit.gupta 1091
	}
27430 amit.gupta 1092
 
27450 tejbeer 1093
	public void createGeofence() throws IOException, ProfitMandiBusinessException {
1094
 
27486 tejbeer 1095
		// List<FofoStore> fofoStores = fofoStoreRepository.selectActiveStores();
1096
		// for (FofoStore fofoStore : fofoStores) {
1097
		// if (fofoStore.getLatitude() != null && fofoStore.getLongitude() != null) {
27503 tejbeer 1098
		CustomRetailer customRetailer = retailerService.getFofoRetailer(175138812);
27486 tejbeer 1099
		OkHttpClient client = new OkHttpClient();
1100
		okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/json");
1101
		JSONObject geofe = new JSONObject();
1102
		JSONArray geofences = new JSONArray();
1103
		JSONObject geometry = new JSONObject();
1104
		JSONObject geo = new JSONObject();
1105
		JSONArray coordinates = new JSONArray();
1106
		ArrayList<Double> crds = new ArrayList<>();
1107
		// crds.add(Double.parseDouble(fofoStore.getLongitude()));
1108
		// crds.add(Double.parseDouble(fofoStore.getLatitude()));
27503 tejbeer 1109
		crds.add(79.739197);
1110
		crds.add(27.961215);
27486 tejbeer 1111
		// crds.add(77.08596155373755);
1112
		// crds.add(28.64944201113976);
1113
		// coordinates.put(fofoStore.getLongitude());
1114
		// coordinates.put(fofoStore.getLatitude());
1115
		geo.put("type", "Point");
1116
		geo.put("coordinates", crds);
1117
		geometry.put("geometry", geo);
1118
		JSONObject metadata = new JSONObject();
27503 tejbeer 1119
		metadata.put("name", customRetailer.getBusinessName());
1120
		metadata.put("city", customRetailer.getAddress().getCity());
1121
		metadata.put("Code", customRetailer.getCode());
27487 tejbeer 1122
		geometry.put("metadata", metadata);
27486 tejbeer 1123
		geometry.put("radius", 200);
27451 tejbeer 1124
 
27486 tejbeer 1125
		geofences.put(geometry);
1126
		geofe.put("geofences", geofences);
1127
		okhttp3.RequestBody body = okhttp3.RequestBody.create(mediaType, geofe.toString());
1128
		String authString = "Basic "
1129
				+ Base64.getEncoder().encodeToString(String.format("%s:%s", ACCOUNT_ID, SECRET_KEY).getBytes());
27450 tejbeer 1130
 
27486 tejbeer 1131
		Request request1 = new Request.Builder().url("https://v3.api.hypertrack.com/geofences").post(body)
1132
				.addHeader("Authorization", authString).build();
27450 tejbeer 1133
 
27486 tejbeer 1134
		Response response = client.newCall(request1).execute();
27450 tejbeer 1135
 
27486 tejbeer 1136
		JSONArray ja = new JSONArray(response.body().string());
1137
		LOGGER.info("geofence" + ja);
1138
		LOGGER.info("jalength" + ja.length());
1139
		/*
1140
		 * for (int i = 0; i < ja.length(); i++) { JSONObject c = ja.getJSONObject(i);
1141
		 * String geofenceId = c.getString("geofence_id"); LOGGER.info("geofenceId" +
1142
		 * geofenceId); FofoStoreGeofence fsg = new FofoStoreGeofence();
1143
		 * fsg.setFofoId(customRetailer.getPartnerId()); fsg.setGeofenceId(geofenceId);
1144
		 * fofoStoreGeofenceRepository.persist(fsg); }
1145
		 * 
1146
		 * }
1147
		 * 
1148
		 * }
1149
		 */
27482 tejbeer 1150
 
27462 tejbeer 1151
	}
1152
 
27451 tejbeer 1153
	public void getAllGeofences() throws IOException, ProfitMandiBusinessException {
27450 tejbeer 1154
 
1155
		OkHttpClient client = new OkHttpClient();
1156
 
1157
		String authString = "Basic "
1158
				+ Base64.getEncoder().encodeToString(String.format("%s:%s", ACCOUNT_ID, SECRET_KEY).getBytes());
1159
 
1160
		// Get geofences created for all app users
1161
		Request request1 = new Request.Builder().url("https://v3.api.hypertrack.com/geofences")
1162
				.addHeader("Authorization", authString).build();
1163
 
1164
		Response response = client.newCall(request1).execute();
27451 tejbeer 1165
 
27450 tejbeer 1166
		LOGGER.info("response" + response.body().string());
1167
	}
1168
 
27457 tejbeer 1169
	public void deleteGeofences(List<String> geofenceIds) throws IOException, ProfitMandiBusinessException {
1170
		OkHttpClient client = new OkHttpClient();
1171
 
1172
		String authString = "Basic "
1173
				+ Base64.getEncoder().encodeToString(String.format("%s:%s", ACCOUNT_ID, SECRET_KEY).getBytes());
1174
 
1175
		for (String geofenceId : geofenceIds) {
27460 tejbeer 1176
			Request request1 = new Request.Builder().url("https://v3.api.hypertrack.com/geofences/" + geofenceId)
27457 tejbeer 1177
					.delete().addHeader("Authorization", authString).build();
1178
			LOGGER.info("geofenceId" + geofenceId);
1179
			Response response = client.newCall(request1).execute();
1180
 
27460 tejbeer 1181
			LOGGER.info("response" + response.body().string());
27457 tejbeer 1182
		}
1183
 
1184
	}
1185
 
27430 amit.gupta 1186
	public void processSchemeOut(int fofoId, int orderId) throws Exception {
1187
		schemeService.processSchemeOut(orderId, fofoId);
27451 tejbeer 1188
 
27430 amit.gupta 1189
	}
27511 amit.gupta 1190
 
1191
	public void createDummyInvoices() {
27787 amit.gupta 1192
		List<WarehouseInventoryItem> lavaInventoryItems = warehouseInventoryItemRepository.getSerialNumbers("Lava",
1193
				LocalDate.of(2020, Month.SEPTEMBER, 1).atStartOfDay(), LocalDateTime.now());
27511 amit.gupta 1194
		LOGGER.info("Lava Inventory Size is {}", lavaInventoryItems.size());
1195
	}
27948 amit.gupta 1196
 
1197
	public void createOffers(int offerId) throws Exception {
28042 amit.gupta 1198
		Map<List<Integer>, List<Integer>> targetMap = new HashMap<>();
28148 amit.gupta 1199
		targetMap.put(Arrays.asList(175138805,175138733,175138821,175138886,175138853,175138799),Arrays.asList(300000,330000,375000));
1200
		targetMap.put(Arrays.asList(175138895,175138877,175138854,175138857,175138870,175138862,175138873),Arrays.asList(350000,400000,450000));
1201
		targetMap.put(Arrays.asList(175138878),Arrays.asList(380000,418000,475000));
1202
		targetMap.put(Arrays.asList(175138922,175138833,175138893,175138939,175138832,175138949,175138882,175138876,175138834,175138930,175138911,175138522,175138871,175138934,175138900,4149607,175138835,175138941,175138917,175138855,175138825,175138896,175138866,175138174,175138887,175138816,175138892,175135376,175138918,175138845,175138946,175138920,175138903,175138813,175138901,175138899,175136389,175138913,175138919,175138923,175138926,175138950,175138953,175138954,175138955),Arrays.asList(400000,500000,600000));
1203
		targetMap.put(Arrays.asList(175138839),Arrays.asList(412000,453200,515000));
1204
		targetMap.put(Arrays.asList(175138716),Arrays.asList(450000,495000,562500));
1205
		targetMap.put(Arrays.asList(175138812),Arrays.asList(465000,511500,581250));
1206
		targetMap.put(Arrays.asList(175138859,175138906,175138874,175138940,175138916,175136207,175138851,175138844,175138929),Arrays.asList(500000,600000,700000));
1207
		targetMap.put(Arrays.asList(175138804,175138910),Arrays.asList(550000,600000,650000));
1208
		targetMap.put(Arrays.asList(175127215,175138879),Arrays.asList(555000,610500,693750));
1209
		targetMap.put(Arrays.asList(175138869,175138902,175138909,175138914,175138824,157112773,175138897,175138801),Arrays.asList(600000,730000,840000));
1210
		targetMap.put(Arrays.asList(172157716),Arrays.asList(616000,677600,770000));
1211
		targetMap.put(Arrays.asList(175138674,175138840),Arrays.asList(650000,715000,812500));
1212
		targetMap.put(Arrays.asList(175138936,175138952,175138907,156232687,175138856,175138836,175138942),Arrays.asList(700000,800000,900000));
1213
		targetMap.put(Arrays.asList(175138868),Arrays.asList(775000,852500,968750));
1214
		targetMap.put(Arrays.asList(175138820),Arrays.asList(780000,850000,1050000));
1215
		targetMap.put(Arrays.asList(175138864,175138863,175138867,175138823,175135227),Arrays.asList(800000,900000,1000000));
1216
		targetMap.put(Arrays.asList(175138408),Arrays.asList(850000,900000,950000));
1217
		targetMap.put(Arrays.asList(175135923,175138888),Arrays.asList(900000,990000,1125000));
1218
		targetMap.put(Arrays.asList(175138908),Arrays.asList(1000000,1200000,1350000));
1219
		targetMap.put(Arrays.asList(175138843),Arrays.asList(1100000,1200000,1350000));
1220
		targetMap.put(Arrays.asList(175138827),Arrays.asList(1150000,1265000,1437500));
1221
		targetMap.put(Arrays.asList(175138883,175135707),Arrays.asList(1200000,1300000,1400000));
1222
		targetMap.put(Arrays.asList(175138814,175138829),Arrays.asList(1300000,1500000,1650000));
1223
		targetMap.put(Arrays.asList(175138842,175138875),Arrays.asList(1500000,1650000,1800000));
1224
		targetMap.put(Arrays.asList(175138541),Arrays.asList(1600000,1700000,1850000));
1225
		targetMap.put(Arrays.asList(175138372),Arrays.asList(1890000,2079000,2362500));
1226
		targetMap.put(Arrays.asList(175138885),Arrays.asList(2100000,2400000,2600000));
28042 amit.gupta 1227
 
27948 amit.gupta 1228
 
1229
		CreateOfferRequest createOfferRequest = offerService.getOffer(offerId);
28042 amit.gupta 1230
		for(Map.Entry<List<Integer>, List<Integer>> targetEntry : targetMap.entrySet()) {
27948 amit.gupta 1231
			List<Integer> targets = targetEntry.getValue();
28042 amit.gupta 1232
 
1233
			createOfferRequest.getPartnerCriteria().setFofoIds(targetEntry.getKey());
27948 amit.gupta 1234
			int counter = 0;
1235
			for(com.spice.profitmandi.dao.model.TargetSlab targetSlab : createOfferRequest.getTargetSlabs()) {
1236
				targetSlab.setOnwardsAmount(targets.get(counter));
1237
				counter++;
1238
			}
1239
			offerService.addOfferService(createOfferRequest);
1240
		}
1241
	}
27747 amit.gupta 1242
 
28038 amit.gupta 1243
 
1244
	@Autowired
1245
	private WarehouseScanRepository warehouseScanRepository;
28046 amit.gupta 1246
 
1247
	@Autowired
1248
	private WarehouseInventoryService warehouseInventoryService;
1249
 
28038 amit.gupta 1250
	public void fixScans() {
1251
		Map<Integer, Integer> inventoryOrderMap = new HashMap<>();
1252
		inventoryOrderMap.put(348795,1628598);
1253
		inventoryOrderMap.put(348796,1628599);
1254
		inventoryOrderMap.put(329854,1628600);
1255
		inventoryOrderMap.put(334197,1628602);
1256
		inventoryOrderMap.put(330110,1628603);
1257
		inventoryOrderMap.put(330111,1628604);
1258
		inventoryOrderMap.put(332843,1628605);
1259
		inventoryOrderMap.put(338067,1628606);
1260
		inventoryOrderMap.put(338974,1628609);
1261
		inventoryOrderMap.put(338975,1628610);
1262
		inventoryOrderMap.put(338971,1628612);
1263
		inventoryOrderMap.put(338588,1628615);
1264
		inventoryOrderMap.put(368205,1631619);
1265
		inventoryOrderMap.put(368206,1631620);
1266
		inventoryOrderMap.put(368207,1631621);
1267
		inventoryOrderMap.put(368208,1631622);
1268
		inventoryOrderMap.put(368209,1631623);
1269
		inventoryOrderMap.put(368211,1631625);
1270
		inventoryOrderMap.put(368213,1631627);
1271
		inventoryOrderMap.put(368214,1631628);
1272
		inventoryOrderMap.put(368203,1631629);
1273
		inventoryOrderMap.put(368216,1631630);
1274
		inventoryOrderMap.put(368217,1631631);
1275
		inventoryOrderMap.put(368218,1631632);
1276
		inventoryOrderMap.put(368219,1631633);
1277
		inventoryOrderMap.put(368222,1631635);
28039 amit.gupta 1278
		List<WarehouseScan> scans = warehouseScanRepository.selectAllByInventoryItemIds(new ArrayList<>(inventoryOrderMap.keySet()));
1279
		Map<Integer, List<WarehouseScan>> inventoryScansMap = scans.stream().collect(Collectors.groupingBy(WarehouseScan::getInventoryItemId));
28038 amit.gupta 1280
 
1281
		for(Map.Entry<Integer, List<WarehouseScan>> mapEntry : inventoryScansMap.entrySet()) {
1282
			int inventoryItemId = mapEntry.getKey();
28045 amit.gupta 1283
			List<WarehouseScan> duplicateScans = mapEntry.getValue().stream().filter(x->x.getOrderId() != null && x.getOrderId().equals(inventoryOrderMap.get(inventoryItemId))).collect(Collectors.toList());
28047 amit.gupta 1284
			WarehouseScan duplicateScan = duplicateScans.stream().skip(1).findFirst().get();
28046 amit.gupta 1285
			warehouseScanRepository.delete(duplicateScan);
1286
			warehouseInventoryService.addQuantity(duplicateScan.getInventoryItemId(), duplicateScan.getQuantity());
1287
 
28038 amit.gupta 1288
		}
1289
 
1290
	}
1291
 
28561 amit.gupta 1292
	public void fixOffer() throws Exception {
28557 amit.gupta 1293
		List<Integer> offerIds = Arrays.asList(228, 241,242, 243,244, 253);
28559 amit.gupta 1294
		List<Integer> fofoIds = fofoStoreRepository.selectAll().stream().filter(x->x.getWarehouseId()==7678).map(x->x.getId()).collect(Collectors.toList());
28563 amit.gupta 1295
		LOGGER.info("UP West Partner Ids - {}", fofoIds);
28557 amit.gupta 1296
		for(int offerId : offerIds) {
1297
			Offer offer =  offerRepository.selectById(offerId);
1298
 
1299
			PartnerCriteria partnerCriteria = gson.fromJson(offer.getPartnerCriteria(), PartnerCriteria.class);
28563 amit.gupta 1300
			LOGGER.info("Offer Partner Ids - {}", partnerCriteria.getFofoIds());
28560 amit.gupta 1301
			for (Integer fofoId : fofoIds) {
28557 amit.gupta 1302
				if(partnerCriteria.getFofoIds().contains(fofoId)) {
28561 amit.gupta 1303
					//This shoud be removed
28562 amit.gupta 1304
					LOGGER.info("This shoud be removed FofoStore Code - {}", fofoStoreRepository.selectByRetailerId(fofoId).getCode());
28557 amit.gupta 1305
					partnerCriteria.getFofoIds().remove(fofoId);
1306
				}
1307
			}
1308
			offer.setPartnerCriteria(gson.toJson(partnerCriteria));
1309
		}
1310
	}
28622 amit.gupta 1311
 
1312
	public void reverseMaa() throws Exception {
1313
		Set<Integer> inventoryItemIds = inventoryItemRepository.selectByPurchaseId(28877).stream().map(x->x.getId()).collect(Collectors.toSet());
28623 amit.gupta 1314
			double totalAmount = schemeInOutRepository.selectByInventoryItemIds(inventoryItemIds).stream().filter(x->x.getRolledBackTimestamp()!=null || x.getStatusDescription().contains("investment"))
28622 amit.gupta 1315
					//.map(x->x.setRolledBackTimestamp(null))
1316
					.collect(Collectors.summingDouble(x->x.getAmount()));
1317
			LOGGER.info("Total Deduction is around Rs. {}", totalAmount);
1318
	}
28557 amit.gupta 1319
 
25043 amit.gupta 1320
}
1321
 
1322
//7015845171