Subversion Repositories SmartDukaan

Rev

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

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