Subversion Repositories SmartDukaan

Rev

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