Subversion Repositories SmartDukaan

Rev

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