Subversion Repositories SmartDukaan

Rev

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