Subversion Repositories SmartDukaan

Rev

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