Subversion Repositories SmartDukaan

Rev

Rev 33092 | Rev 33172 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 33092 Rev 33102
Line 3... Line 3...
3
import com.google.gson.Gson;
3
import com.google.gson.Gson;
4
import com.spice.profitmandi.common.enumuration.SearchType;
4
import com.spice.profitmandi.common.enumuration.SearchType;
5
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
5
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
6
import com.spice.profitmandi.common.model.*;
6
import com.spice.profitmandi.common.model.*;
7
import com.spice.profitmandi.common.solr.SolrService;
7
import com.spice.profitmandi.common.solr.SolrService;
8
import com.spice.profitmandi.common.util.FileUtil;
-
 
9
import com.spice.profitmandi.common.util.FormattingUtils;
-
 
10
import com.spice.profitmandi.common.util.PdfUtils;
8
import com.spice.profitmandi.common.util.PdfUtils;
11
import com.spice.profitmandi.common.util.StringUtils;
9
import com.spice.profitmandi.common.util.StringUtils;
12
import com.spice.profitmandi.common.web.util.ResponseSender;
10
import com.spice.profitmandi.common.web.util.ResponseSender;
13
import com.spice.profitmandi.dao.entity.catalog.Item;
11
import com.spice.profitmandi.dao.entity.catalog.Item;
14
import com.spice.profitmandi.dao.entity.catalog.TagListing;
12
import com.spice.profitmandi.dao.entity.catalog.TagListing;
Line 17... Line 15...
17
import com.spice.profitmandi.dao.entity.dtr.PaymentOptionTransaction;
15
import com.spice.profitmandi.dao.entity.dtr.PaymentOptionTransaction;
18
import com.spice.profitmandi.dao.entity.fofo.*;
16
import com.spice.profitmandi.dao.entity.fofo.*;
19
import com.spice.profitmandi.dao.entity.user.Address;
17
import com.spice.profitmandi.dao.entity.user.Address;
20
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
18
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
21
import com.spice.profitmandi.dao.enumuration.transaction.OrderStatus;
19
import com.spice.profitmandi.dao.enumuration.transaction.OrderStatus;
22
import com.spice.profitmandi.dao.model.*;
-
 
23
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
20
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
24
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
21
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
25
import com.spice.profitmandi.dao.repository.dtr.*;
22
import com.spice.profitmandi.dao.repository.dtr.*;
26
import com.spice.profitmandi.dao.repository.fofo.*;
23
import com.spice.profitmandi.dao.repository.fofo.*;
27
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
24
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
Line 59... Line 56...
59
import javax.servlet.http.HttpServletResponse;
56
import javax.servlet.http.HttpServletResponse;
60
import java.io.ByteArrayInputStream;
57
import java.io.ByteArrayInputStream;
61
import java.io.ByteArrayOutputStream;
58
import java.io.ByteArrayOutputStream;
62
import java.io.InputStream;
59
import java.io.InputStream;
63
import java.nio.charset.StandardCharsets;
60
import java.nio.charset.StandardCharsets;
64
import java.time.LocalDate;
-
 
65
import java.time.LocalDateTime;
61
import java.time.LocalDateTime;
66
import java.time.LocalTime;
-
 
67
import java.time.format.DateTimeFormatter;
62
import java.time.format.DateTimeFormatter;
68
import java.time.temporal.ChronoUnit;
63
import java.time.temporal.ChronoUnit;
69
import java.util.*;
64
import java.util.*;
70
import java.util.stream.Collectors;
65
import java.util.stream.Collectors;
71
 
66
 
72
@Controller
67
@Controller
73
@Transactional(rollbackFor = Throwable.class)
68
@Transactional(rollbackFor = Throwable.class)
74
public class OrderController {
69
public class OrderController {
75
 
70
 
76
    private static final Logger LOGGER = LogManager.getLogger(OrderController.class);
71
	private static final Logger LOGGER = LogManager.getLogger(OrderController.class);
-
 
72
 
-
 
73
	private static final List<String> offlineOrders = Arrays.asList("EMIOD", "POD");
-
 
74
	private static final List<String> allowedDoaImeis = Arrays.asList("863903054378477");
-
 
75
	@Autowired
-
 
76
	NotificationService notificationService;
-
 
77
	@Autowired
-
 
78
	private CustomerRepository customerRepository;
-
 
79
	private boolean accessoriesDeals = true;
-
 
80
	@Autowired
-
 
81
	private RoleManager roleManager;
-
 
82
	@Autowired
-
 
83
	private Gson gson;
-
 
84
	@Autowired
-
 
85
	private CustomerReturnItemRepository customerReturnItemRepository;
-
 
86
	@Autowired
-
 
87
	private FofoOrderItemRepository fofoOrderItemRepository;
-
 
88
	@Autowired
-
 
89
	private PaymentOptionRepository paymentOptionRepository;
-
 
90
	@Autowired
-
 
91
	private StateRepository stateRepository;
-
 
92
	@Autowired
-
 
93
	private ItemRepository itemRepository;
-
 
94
	@Autowired
-
 
95
	private MVCResponseSender mvcResponseSender;
-
 
96
	@Autowired
-
 
97
	private InsuranceService insuranceService;
-
 
98
	@Autowired
-
 
99
	private FofoOrderRepository fofoOrderRepository;
-
 
100
	@Autowired
-
 
101
	private CustomerAddressRepository customerAddressRepository;
-
 
102
	@Autowired
-
 
103
	private InsurancePolicyRepository insurancePolicyRepository;
-
 
104
	@Autowired
-
 
105
	private InsuranceProviderRepository insuranceProviderRepository;
-
 
106
	@Autowired
-
 
107
	private CookiesProcessor cookiesProcessor;
-
 
108
	@Autowired
-
 
109
	private PricingService pricingService;
-
 
110
	@Autowired
-
 
111
	private OrderService orderService;
-
 
112
	@Autowired
-
 
113
	private RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
-
 
114
	@Autowired
-
 
115
	private AddressRepository addressRepository;
-
 
116
	@Autowired
-
 
117
	private PaymentOptionTransactionRepository paymentOptionTransactionRepository;
-
 
118
	@Autowired
-
 
119
	private FofoPartnerPaymentOptionRepository fofoPartnerPaymentOptionRepository;
-
 
120
	@Autowired
-
 
121
	private ResponseSender<?> responseSender;
-
 
122
	@Autowired
-
 
123
	private PendingOrderRepository pendingOrderRepository;
-
 
124
	@Autowired
-
 
125
	private OrderRepository orderRepository;
-
 
126
	@Autowired
-
 
127
	private PendingOrderItemRepository pendingOrderItemRepository;
-
 
128
	@Autowired
-
 
129
	private FofoStoreRepository fofoStoreRepository;
-
 
130
	@Autowired
-
 
131
	private RetailerService retailerService;
-
 
132
	@Autowired
-
 
133
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
-
 
134
	@Autowired
-
 
135
	private TagListingRepository tagListingRepository;
-
 
136
	@Autowired
-
 
137
	private PendingOrderService pendingOrderService;
-
 
138
	@Autowired
-
 
139
	private EmailService emailService;
-
 
140
	@Autowired
-
 
141
	private SolrService commonSolrService;
-
 
142
	@Autowired
-
 
143
	private MouRepository mouRepository;
-
 
144
 
-
 
145
	@Autowired
-
 
146
	private WhatsappMessageService whatsappMessageService;
-
 
147
 
-
 
148
	@RequestMapping(value = "/order")
-
 
149
	public String orderIndex(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
-
 
150
			throws ProfitMandiBusinessException {
-
 
151
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
152
 
-
 
153
		int addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(loginDetails.getFofoId());
-
 
154
		Address address = addressRepository.selectById(addressId);
-
 
155
 
-
 
156
		List<CartFofo> cartItems = orderService.cartCheckout(cartData);
-
 
157
		Set<Integer> itemIds = new HashSet<>();
-
 
158
		List<Integer> poIds = new ArrayList<>();
-
 
159
		List<Integer> poItemIds = new ArrayList<>();
-
 
160
		for (CartFofo cartFofo : cartItems) {
-
 
161
			itemIds.add(cartFofo.getItemId());
-
 
162
			if (cartFofo.getPoId() != 0) {
-
 
163
				poIds.add(cartFofo.getPoId());
-
 
164
				poItemIds.add(cartFofo.getPoItemId());
-
 
165
			}
-
 
166
		}
-
 
167
 
-
 
168
		PendingOrder po = null;
-
 
169
		Customer customer = null;
-
 
170
		PendingOrderItem poi = null;
-
 
171
		Map<Integer, PriceModel> mopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIds,
-
 
172
				loginDetails.getFofoId());
-
 
173
		List<Integer> paymentOptionIds = fofoPartnerPaymentOptionRepository
-
 
174
				.selectPaymentOptionIdsByFofoId(loginDetails.getFofoId());
-
 
175
 
-
 
176
		if (!poIds.isEmpty()) {
-
 
177
			po = pendingOrderRepository.selectById(poIds.get(0));
-
 
178
			customer = customerRepository.selectById(po.getCustomerId());
-
 
179
			if (!offlineOrders.contains(po.getPayMethod())) {
-
 
180
				paymentOptionIds.add(23);
-
 
181
			}
-
 
182
		}
-
 
183
 
-
 
184
		if (!poItemIds.isEmpty()) {
-
 
185
			poi = pendingOrderItemRepository.selectById(poItemIds.get(0));
-
 
186
		}
-
 
187
 
-
 
188
		// List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(new
-
 
189
		// HashSet<>(paymentOptionIds));
-
 
190
 
-
 
191
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectActiveOption();
-
 
192
 
-
 
193
		LOGGER.info("pendingOrder" + po);
-
 
194
		LOGGER.info("pendingOrderItem" + poi);
-
 
195
 
-
 
196
		LOGGER.info("mopPriceMap {}", mopPriceMap);
-
 
197
		model.addAttribute("stateNames",
-
 
198
				stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
-
 
199
		model.addAttribute("retailerStateName", address.getState());
-
 
200
		model.addAttribute("pendingPOCustomer", gson.toJson(customer));
-
 
201
		model.addAttribute("pendingPO", gson.toJson(po));
-
 
202
 
-
 
203
		model.addAttribute("cartItems", cartItems);
-
 
204
		model.addAttribute("pendingOrder", po);
-
 
205
		model.addAttribute("pendingOrderItem", poi);
-
 
206
 
-
 
207
		model.addAttribute("mopPriceMap", mopPriceMap);
-
 
208
		model.addAttribute("paymentOptions", paymentOptions);
-
 
209
		model.addAttribute("accessoriesDeals", accessoriesDeals);
-
 
210
		return "order-index";
-
 
211
	}
-
 
212
 
-
 
213
	@RequestMapping(value = "/checkplans", method = RequestMethod.GET)
-
 
214
	public String getInsurancePrices(HttpServletRequest request, @RequestParam float price, Model model,
-
 
215
									 @RequestParam int itemId) throws ProfitMandiBusinessException {
-
 
216
		LOGGER.info("Request received at url : {}", request.getRequestURI());
-
 
217
 
-
 
218
		try {
-
 
219
			String response = mvcResponseSender.createResponseString(this.getPlans(price, itemId));
-
 
220
			model.addAttribute("response1", response);
-
 
221
		} catch (Exception e) {
-
 
222
			// TODO Auto-generated catch block
-
 
223
			LOGGER.info(e.getMessage(), e);
-
 
224
			throw new ProfitMandiBusinessException("Plans", "Plans API", "Error formatting insurance plans");
-
 
225
		}
-
 
226
 
-
 
227
		return "response";
-
 
228
	}
-
 
229
 
-
 
230
	@RequestMapping(value = "/get-order", method = RequestMethod.GET)
-
 
231
	public String getOrder(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId,
-
 
232
						   Model model) throws ProfitMandiBusinessException {
-
 
233
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
234
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
-
 
235
		List<FofoOrderItem> fofoLineItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
-
 
236
		CustomerAddress customerAddress = null;
-
 
237
		if (fofoOrder.getCustomerAddressId() != 0) {
-
 
238
			customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
-
 
239
		}
-
 
240
 
-
 
241
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
-
 
242
		if (customerAddress != null) {
-
 
243
			customerAddress.setPhoneNumber(customer.getMobileNumber());
-
 
244
		}
-
 
245
		LOGGER.info("Added to get invoice - {}, {}", customer, 123);
-
 
246
		List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
-
 
247
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
-
 
248
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
-
 
249
				.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
-
 
250
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
-
 
251
				.selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
-
 
252
		this.addInsuranceProvider(insurancePolicies);
-
 
253
 
-
 
254
		model.addAttribute("fofoOrder", fofoOrder);
-
 
255
		model.addAttribute("fofoLineItems", fofoLineItems);
-
 
256
		if (customerAddress != null) {
-
 
257
			model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
-
 
258
		} else {
-
 
259
			model.addAttribute("customerBillingAddress", "");
-
 
260
 
-
 
261
		}
-
 
262
		model.addAttribute("customerBillingAddressObj", customerAddress);
-
 
263
		model.addAttribute("customerDetailsObj", customer);
-
 
264
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
-
 
265
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
-
 
266
		model.addAttribute("insurancePolicies", insurancePolicies);
-
 
267
		return "order-details";
-
 
268
	}
-
 
269
 
-
 
270
	private Map<Integer, InsuranceProvider> toInsuranceProviderIdInsuranceProvider(
-
 
271
			List<InsuranceProvider> insuranceProviders) {
-
 
272
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = new HashMap<>();
-
 
273
		for (InsuranceProvider insuranceProvider : insuranceProviders) {
-
 
274
			insuranceProviderIdInsuranceProviderMap.put(insuranceProvider.getId(), insuranceProvider);
-
 
275
		}
-
 
276
		return insuranceProviderIdInsuranceProviderMap;
-
 
277
	}
-
 
278
 
-
 
279
	private void addInsuranceProvider(List<InsurancePolicy> insurancePolicies) {
-
 
280
		if (insurancePolicies.isEmpty()) {
-
 
281
			return;
-
 
282
		}
-
 
283
		Set<Integer> insuranceProviderIds = new HashSet<>();
-
 
284
		for (InsurancePolicy insurancePolicy : insurancePolicies) {
-
 
285
			insuranceProviderIds.add(insurancePolicy.getProviderId());
-
 
286
		}
-
 
287
		LOGGER.info("insuranceProviderIds {}", insuranceProviderIds);
-
 
288
		List<InsuranceProvider> insuranceProviders = insuranceProviderRepository.selectByIds(insuranceProviderIds);
-
 
289
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = this
-
 
290
				.toInsuranceProviderIdInsuranceProvider(insuranceProviders);
-
 
291
		for (InsurancePolicy insurancePolicy : insurancePolicies) {
-
 
292
			insurancePolicy
-
 
293
					.setInsuranceProvider(insuranceProviderIdInsuranceProviderMap.get(insurancePolicy.getProviderId()));
-
 
294
		}
-
 
295
	}
-
 
296
 
-
 
297
	@RequestMapping(value = "/saleDetails", method = RequestMethod.GET)
-
 
298
	public String getSaleDetails(HttpServletRequest request,
-
 
299
								 @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) throws Exception {
-
 
300
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
301
		boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
-
 
302
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
-
 
303
		List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
-
 
304
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
-
 
305
		List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
-
 
306
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
-
 
307
 
-
 
308
		// Added Migration info as we lost it.
-
 
309
		if (paymentOptionTransactions == null || paymentOptionTransactions.size() == 0) {
-
 
310
			PaymentOptionTransaction pot = new PaymentOptionTransaction();
-
 
311
			pot.setAmount(fofoOrder.getTotalAmount());
-
 
312
			pot.setCreateTimestamp(fofoOrder.getCreateTimestamp());
-
 
313
			// Mark it paid through cash
-
 
314
			pot.setPaymentOptionId(1);
-
 
315
			pot.setReferenceType(PaymentOptionReferenceType.ORDER);
-
 
316
			paymentOptionTransactionRepository.persist(pot);
-
 
317
			paymentOptionTransactions.add(pot);
-
 
318
			LOGGER.info("Added to get invoice");
-
 
319
		}
-
 
320
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
-
 
321
				.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
-
 
322
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
-
 
323
				.selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
-
 
324
		this.addInsuranceProvider(insurancePolicies);
-
 
325
		Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
-
 
326
			try {
-
 
327
				return itemRepository.selectById(x.getItemId());
-
 
328
			} catch (ProfitMandiBusinessException e) {
-
 
329
				// TODO Auto-generated catch block
-
 
330
				return null;
-
 
331
			}
-
 
332
		}));
-
 
333
		Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
-
 
334
				.collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
-
 
335
 
-
 
336
		Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
-
 
337
				.collect(Collectors.toMap(foi -> foi.getId(),
-
 
338
						foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
-
 
339
 
-
 
340
		Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
-
 
341
 
-
 
342
		for (FofoOrderItem foi : fofoOrderItems) {
-
 
343
			for (FofoLineItem fli : foi.getFofoLineItems()) {
-
 
344
				inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
-
 
345
			}
-
 
346
			List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
-
 
347
					.selectAllByOrderItemId(foi.getId());
-
 
348
			this.markDoa(fofoOrder, foi, isAdmin);
-
 
349
			for (CustomerReturnItem customerReturnItem : customerReturnItems) {
-
 
350
				inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
-
 
351
						inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
-
 
352
			}
-
 
353
		}
-
 
354
 
-
 
355
		LOGGER.info("fofoOrderItemIdLineItemMap {}", fofoOrderItemIdLineItemMap);
-
 
356
		model.addAttribute("fofoOrder", fofoOrder);
-
 
357
		model.addAttribute("itemsMap", itemsMap);
-
 
358
		model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
-
 
359
		model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
-
 
360
				StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
-
 
361
		model.addAttribute("fofoOrderItemIdLineItemMap", fofoOrderItemIdLineItemMap);
-
 
362
 
-
 
363
		model.addAttribute("fofoOrderItems", fofoOrderItems);
-
 
364
		model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
-
 
365
		if (customerAddress != null) {
-
 
366
 
-
 
367
			model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
-
 
368
		} else {
-
 
369
			model.addAttribute("customerBillingAddress", "");
-
 
370
 
-
 
371
		}
-
 
372
		model.addAttribute("customerBillingAddressObj", customerAddress);
-
 
373
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
-
 
374
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
-
 
375
		model.addAttribute("insurancePolicies", insurancePolicies);
-
 
376
		model.addAttribute("markDefective", this.markDefective(fofoOrder));
-
 
377
		return "sale-details";
-
 
378
	}
-
 
379
 
-
 
380
	private void markDoa(FofoOrder fofoOrder, FofoOrderItem foi, boolean isAdmin) {
-
 
381
		if (isAdmin) {
-
 
382
			foi.setDoa(true);
-
 
383
			return;
-
 
384
		}
-
 
385
		boolean isImei = foi.getFofoLineItems().stream()
-
 
386
				.anyMatch(x -> org.apache.commons.lang3.StringUtils.isNotEmpty(x.getSerialNumber())
-
 
387
						&& allowedDoaImeis.contains(x.getSerialNumber()));
-
 
388
		LocalDateTime buyDate = fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS);
-
 
389
		LocalDateTime curDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
-
 
390
		if (buyDate.isAfter(curDate.minusDays(45)) || isImei) {
-
 
391
			foi.setDoa(true);
-
 
392
		} else
-
 
393
			foi.setDoa(
-
 
394
					foi.getBrand().equals("Nokia") && foi.getCost() < 4990 && buyDate.isAfter(curDate.minusYears(1)));
-
 
395
	}
-
 
396
 
-
 
397
	private boolean markDefective(FofoOrder fofoOrder) {
-
 
398
		return fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS).plusDays(180)
-
 
399
				.isAfter(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));
-
 
400
 
-
 
401
	}
-
 
402
 
-
 
403
	@RequestMapping(value = "/getSearchOrder")
-
 
404
	public String getSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
405
		return "search-order";
-
 
406
	}
-
 
407
 
-
 
408
	@RequestMapping(value = "/getInvoiceSearchOrder")
-
 
409
	public String getInvoiceSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
410
		return "invoices-cancel";
-
 
411
	}
-
 
412
 
-
 
413
	@RequestMapping(value = "/customerDetails", method = RequestMethod.PUT)
-
 
414
	public String updateCustomerDetails(HttpServletRequest request, @RequestBody CustomCustomer customCustomer,
-
 
415
										@RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
-
 
416
			throws Exception {
-
 
417
 
-
 
418
		orderService.updateCustomerDetails(customCustomer, invoiceNumber);
-
 
419
		return this.getSearchOrderDetails(request, invoiceNumber, model);
-
 
420
	}
-
 
421
 
-
 
422
	@RequestMapping(value = "/searchOrderDetails", method = RequestMethod.GET)
-
 
423
	public String getSearchOrderDetails(HttpServletRequest request,
-
 
424
										@RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
-
 
425
			throws Exception {
-
 
426
 
-
 
427
		FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
-
 
428
		List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
-
 
429
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
-
 
430
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
-
 
431
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = paymentOptionRepository.selectActiveOption().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
-
 
432
		List<Integer> fofoPartnerPaymentOptions = new ArrayList<>(paymentOptionIdPaymentOptionMap.keySet());
-
 
433
		Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
-
 
434
			try {
-
 
435
				return itemRepository.selectById(x.getItemId());
-
 
436
			} catch (ProfitMandiBusinessException e) {
-
 
437
				// TODO Auto-generated catch block
-
 
438
				return null;
-
 
439
			}
-
 
440
		}));
-
 
441
		LOGGER.info("fofoPartnerPaymentOptions" + fofoPartnerPaymentOptions);
-
 
442
		List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
-
 
443
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
-
 
444
		LOGGER.info("paymentOptionTransactions" + paymentOptionTransactions);
-
 
445
 
-
 
446
		Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
-
 
447
				.paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
-
 
448
		LOGGER.info("paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
-
 
449
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
-
 
450
				.selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
-
 
451
		this.addInsuranceProvider(insurancePolicies);
-
 
452
		model.addAttribute("fofoOrder", fofoOrder);
-
 
453
		for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
-
 
454
			fofoOrderItem.setDoa(true);
-
 
455
		}
-
 
456
 
-
 
457
		Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
-
 
458
				.collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
-
 
459
 
-
 
460
		Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
-
 
461
				.collect(Collectors.toMap(foi -> foi.getId(),
-
 
462
						foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
-
 
463
 
-
 
464
		Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
-
 
465
 
-
 
466
		for (FofoOrderItem foi : fofoOrderItems) {
-
 
467
			for (FofoLineItem fli : foi.getFofoLineItems()) {
-
 
468
				inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
-
 
469
			}
-
 
470
			List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
-
 
471
					.selectAllByOrderItemId(foi.getId());
-
 
472
			for (CustomerReturnItem customerReturnItem : customerReturnItems) {
-
 
473
				inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
-
 
474
						inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
-
 
475
			}
-
 
476
		}
-
 
477
		model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
-
 
478
				StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
-
 
479
		model.addAttribute("fofoOrderItems", fofoOrderItems);
-
 
480
		model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
-
 
481
		model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
-
 
482
		model.addAttribute("itemsMap", itemsMap);
-
 
483
		model.addAttribute("markDefective", true);
-
 
484
		model.addAttribute("customer", customer);
-
 
485
		model.addAttribute("customerAddress", customerAddress);
-
 
486
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
-
 
487
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
-
 
488
		model.addAttribute("paymentOptionIdPaymentOptionTransactionMap", paymentOptionIdPaymentOptionTransactionMap);
-
 
489
		model.addAttribute("insurancePolicies", insurancePolicies);
-
 
490
		model.addAttribute("fofoPartnerPaymentOptions", fofoPartnerPaymentOptions);
-
 
491
		model.addAttribute("totalNumberOfPaymentOptionId", fofoPartnerPaymentOptions.size());
-
 
492
		model.addAttribute("stateNames",
-
 
493
				stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
-
 
494
		return "search-order-details";
-
 
495
	}
-
 
496
 
-
 
497
	private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap(
-
 
498
			List<PaymentOptionTransaction> paymentOptionTransactions) {
-
 
499
		Set<Integer> paymentOptionIds = new HashSet<>();
-
 
500
		for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
-
 
501
			paymentOptionIds.add(paymentOptionTransaction.getPaymentOptionId());
-
 
502
		}
-
 
503
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(paymentOptionIds);
-
 
504
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
-
 
505
		for (PaymentOption paymentOption : paymentOptions) {
-
 
506
			paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
-
 
507
		}
-
 
508
		return paymentOptionIdPaymentOptionMap;
-
 
509
	}
-
 
510
 
-
 
511
	private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMapUsingPaymentOptions(
-
 
512
			List<Integer> fofoPartnerPaymentOptions) {
-
 
513
		List<PaymentOption> paymentOptions = paymentOptionRepository
-
 
514
				.selectByIds(new HashSet<>(fofoPartnerPaymentOptions));
-
 
515
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
-
 
516
		for (PaymentOption paymentOption : paymentOptions) {
-
 
517
			paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
-
 
518
		}
-
 
519
		return paymentOptionIdPaymentOptionMap;
-
 
520
	}
-
 
521
 
-
 
522
	private Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap(
-
 
523
			List<PaymentOptionTransaction> paymentOptionTransactions) {
-
 
524
		Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = new HashMap<>();
-
 
525
		for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
-
 
526
			paymentOptionIdPaymentOptionTransactionMap.put(paymentOptionTransaction.getPaymentOptionId(),
-
 
527
					paymentOptionTransaction);
-
 
528
		}
-
 
529
		return paymentOptionIdPaymentOptionTransactionMap;
-
 
530
	}
-
 
531
 
-
 
532
	@RequestMapping(value = "/create-order", method = RequestMethod.POST)
-
 
533
	public String createOrder(HttpServletRequest request, @RequestBody CreateOrderRequest createOrderRequest,
-
 
534
							  Model model) throws ProfitMandiBusinessException {
-
 
535
		// throw new ProfitMandiBusinessException("Billing is on hold temporarily",
-
 
536
		// "Billing is on hold temporarily", "Billing is on hold temporarily");
-
 
537
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), createOrderRequest);
-
 
538
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
539
 
-
 
540
		int fofoOrderId = orderService.createOrder(createOrderRequest, fofoDetails.getFofoId(), accessoriesDeals);
-
 
541
 
-
 
542
		LOGGER.info("Order has been created successfully...");
-
 
543
		try {
-
 
544
			this.sendWhatsappInvoice(fofoOrderRepository.selectByOrderId(fofoOrderId));
-
 
545
		} catch (Exception e) {
-
 
546
			LOGGER.info("Could not send whatsapp message");
-
 
547
			e.printStackTrace();
-
 
548
		}
-
 
549
		return "redirect:/get-order/?orderId=" + fofoOrderId;
-
 
550
	}
-
 
551
 
-
 
552
	private void sendWhatsappInvoice(FofoOrder fofoOrder) throws Exception {
-
 
553
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
-
 
554
		CustomRetailer retailer = retailerService.getFofoRetailer(fofoOrder.getFofoId());
-
 
555
		String message = String.format("Dear %s,\n" +
-
 
556
				"Thank you for your purchase from SmartDukaan store - %s, %s.\n" +
-
 
557
				"Your purchase invoice is attached for your reference.\n" +
-
 
558
				"\n" +
-
 
559
				"Download our app for offers and updates on new products.\n" +
-
 
560
				"https://www.smartdukaan.com/b2c\n" +
-
 
561
				"\n" +
-
 
562
				"Best Regards\n" +
-
 
563
				"SmartDukaan", customer.getFirstName(), retailer.getBusinessName(), retailer.getAddress().getCity());
-
 
564
		boolean sentMessage = notificationService.isWhatMessageSend(customer.getMobileNumber());
-
 
565
		if (sentMessage) {
-
 
566
			notificationService.sendWhatsappMediaMessage(message, customer.getMobileNumber(), this.getPublicInvoiceUrl(fofoOrder.getInvoiceNumber()),
-
 
567
					this.getFileName(fofoOrder.getInvoiceNumber()), WhatsappMessageType.DOCUMENT);
-
 
568
		}
-
 
569
	}
-
 
570
 
-
 
571
	private String getFileName(String invoiceNumber) {
-
 
572
		return "INV-" + invoiceNumber.replace("/", "-") + ".pdf";
-
 
573
	}
-
 
574
 
-
 
575
	private String getPublicInvoiceUrl(String invoiceNumber) {
-
 
576
		String base64Encoded = Base64.getMimeEncoder().encodeToString(invoiceNumber.getBytes(StandardCharsets.UTF_8));
-
 
577
		String publicUrl = "https://partners.smartdukaan.com/wa-invoice-send/" + base64Encoded + ".pdf";
-
 
578
		LOGGER.info("Public Whatsapp Url for Invoice Message - {}", publicUrl);
-
 
579
		return publicUrl;
-
 
580
	}
-
 
581
 
-
 
582
	@RequestMapping(value = "/order/bad_return", method = RequestMethod.POST)
-
 
583
	public ResponseEntity<?> badReturn(HttpServletRequest request, @RequestBody FoiBadReturnRequest foiBadReturnRequest,
-
 
584
									   Model model) throws ProfitMandiBusinessException {
-
 
585
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), foiBadReturnRequest);
-
 
586
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
587
		CustomerCreditNote custmoerCreditNote;
-
 
588
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
-
 
589
			FofoOrderItem foi = fofoOrderItemRepository.selectById(foiBadReturnRequest.getFofoOrderItemId());
-
 
590
			FofoOrder fo = fofoOrderRepository.selectByOrderId(foi.getOrderId());
-
 
591
			custmoerCreditNote = orderService.badReturn(fo.getFofoId(), foiBadReturnRequest);
-
 
592
		} else {
-
 
593
			custmoerCreditNote = orderService.badReturn(fofoDetails.getFofoId(), foiBadReturnRequest);
-
 
594
		}
-
 
595
		return responseSender.ok(custmoerCreditNote.getId());
-
 
596
	}
-
 
597
 
-
 
598
	@GetMapping(value = "/wa-invoice-send/{invoiceHash}")
-
 
599
	public ResponseEntity<?> generateInvoice(@PathVariable String invoiceHash) throws ProfitMandiBusinessException {
-
 
600
		String decodedInvoiceNumber = new String(Base64.getMimeDecoder().decode(invoiceHash));
-
 
601
		LOGGER.info("Invoice Hash {}", invoiceHash);
-
 
602
 
-
 
603
 
-
 
604
		FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(decodedInvoiceNumber);
-
 
605
 
-
 
606
		InvoicePdfModel pdfModel = orderService.getInvoicePdfModel(fofoOrder.getId());
-
 
607
 
-
 
608
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-
 
609
		PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
-
 
610
		final HttpHeaders headers = new HttpHeaders();
-
 
611
		//headers.setContentDispositionFormData("inline", number + ".pdf");
-
 
612
		headers.add(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=" + pdfModel.getInvoiceNumber() + ".pdf");
-
 
613
		int contentLength = byteArrayOutputStream.toByteArray().length;
-
 
614
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
-
 
615
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
-
 
616
		return ResponseEntity.ok()
-
 
617
				.headers(headers)
-
 
618
				.contentLength(contentLength)
-
 
619
				.contentType(MediaType.parseMediaType("application/pdf"))
-
 
620
				.body(inputStreamResource);
-
 
621
	}
-
 
622
 
-
 
623
	@RequestMapping(value = "/wa-listen", method = RequestMethod.POST)
-
 
624
	public ResponseEntity<?> listenWhatsappStatus(@RequestBody String whatsappJsonResponse) {
-
 
625
		LOGGER.info("whatsappJsonResponse {}", whatsappJsonResponse);
-
 
626
		//jaihind
-
 
627
		//  String jsonString = "[{\"srcAddr\":\"TESTSM\",\"channel\":\"WHATSAPP\",\"externalId\":\"4977024756456780043-180044363908187691\",\"cause\":\"SUCCESS\",\"errorCode\":\"000\",\"destAddr\":\"919813272029\",\"eventType\":\"DELIVERED\",\"eventTs\":1692848106000}]";
-
 
628
		JSONArray jsonArray = new JSONArray(whatsappJsonResponse);
-
 
629
		for (int i = 0; i < jsonArray.length(); i++) {
-
 
630
 
-
 
631
			JSONObject jsonObject = jsonArray.getJSONObject(i);
-
 
632
			String externalId = jsonObject.getString("externalId");
-
 
633
			String destAddr = jsonObject.getString("destAddr");
-
 
634
			String eventType = jsonObject.getString("eventType");
-
 
635
			whatsappMessageService.setWhatsappResponse(externalId, destAddr, eventType);
-
 
636
		}
-
 
637
		//jaihind
-
 
638
		return responseSender.ok("Success");
-
 
639
 
-
 
640
	}
-
 
641
 
-
 
642
	@RequestMapping(value = "/generateInvoice")
-
 
643
	public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
-
 
644
											 @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
-
 
645
		LOGGER.info("Request received at url {} with params [{}={}] ", request.getRequestURI(),
-
 
646
				ProfitMandiConstants.ORDER_ID, orderId);
-
 
647
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
648
		InvoicePdfModel pdfModel = null;
-
 
649
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
-
 
650
			pdfModel = orderService.getInvoicePdfModel(orderId);
-
 
651
		} else {
-
 
652
			pdfModel = orderService.getInvoicePdfModel(fofoDetails.getFofoId(), orderId);
-
 
653
		}
-
 
654
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-
 
655
		PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
-
 
656
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
-
 
657
		final HttpHeaders headers = new HttpHeaders();
-
 
658
		headers.setContentType(MediaType.APPLICATION_PDF);
-
 
659
		headers.setContentDispositionFormData("inline", "invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
-
 
660
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
-
 
661
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
-
 
662
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
-
 
663
		return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
-
 
664
	}
-
 
665
 
-
 
666
	@RequestMapping(value = "/generateInvoices")
-
 
667
	public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
-
 
668
											 @RequestParam LocalDateTime startDate, @RequestParam LocalDateTime endDate, @RequestParam int partnerId)
-
 
669
			throws ProfitMandiBusinessException {
-
 
670
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
671
		List<InvoicePdfModel> pdfModels = new ArrayList<>();
-
 
672
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
-
 
673
			List<Integer> orderIds = fofoOrderRepository.selectByFofoId(partnerId, startDate, endDate, 0, 0).stream()
-
 
674
					.map(x -> x.getId()).collect(Collectors.toList());
-
 
675
			for (int orderId : orderIds) {
-
 
676
				pdfModels.add(orderService.getInvoicePdfModel(orderId));
-
 
677
			}
-
 
678
			ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-
 
679
			PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
-
 
680
			LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
-
 
681
			final HttpHeaders headers = new HttpHeaders();
-
 
682
			headers.setContentType(MediaType.APPLICATION_PDF);
-
 
683
			headers.set("Content-disposition", "inline; filename=invoice-" + partnerId + ".pdf");
-
 
684
			headers.setContentLength(byteArrayOutputStream.toByteArray().length);
-
 
685
			final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
-
 
686
			final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
-
 
687
			return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
-
 
688
		} else {
-
 
689
			throw new ProfitMandiBusinessException("Auth", fofoDetails.getEmailId(), "Unauthorised access");
-
 
690
		}
-
 
691
	}
-
 
692
 
-
 
693
	@RequestMapping(value = "/saleHistory")
-
 
694
	public String saleHistory(HttpServletRequest request,
-
 
695
							  @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
-
 
696
							  @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
-
 
697
							  @RequestParam(required = false) LocalDateTime startTime,
-
 
698
							  @RequestParam(required = false) LocalDateTime endTime,
-
 
699
							  @RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
700
							  @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
-
 
701
			throws ProfitMandiBusinessException {
-
 
702
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
703
 
-
 
704
		Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
-
 
705
				startTime, endTime, offset, limit);
-
 
706
		model.addAllAttributes(map);
-
 
707
		return "sale-history";
-
 
708
	}
-
 
709
 
-
 
710
	@RequestMapping(value = "/downloadInvoices")
-
 
711
	public ResponseEntity<?> downloadInvoices(HttpServletRequest request,
-
 
712
											  @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
-
 
713
											  @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
-
 
714
											  @RequestParam(required = false) LocalDateTime startTime,
-
 
715
											  @RequestParam(required = false) LocalDateTime endTime,
-
 
716
											  @RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
717
											  @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
-
 
718
			throws ProfitMandiBusinessException {
-
 
719
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
720
 
-
 
721
		Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
-
 
722
				startTime, endTime, offset, 100);
-
 
723
		List<FofoOrder> fofoOrders = (List<FofoOrder>) map.get("saleHistories");
-
 
724
 
-
 
725
		if (fofoOrders.size() == 0) {
-
 
726
			throw new ProfitMandiBusinessException("Search criteria", "", "No orders found for criteria");
-
 
727
		}
-
 
728
 
-
 
729
		final HttpHeaders headers = new HttpHeaders();
-
 
730
		headers.setContentType(MediaType.APPLICATION_PDF);
-
 
731
		headers.set("Content-disposition", "inline; filename=invoices.pdf");
-
 
732
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-
 
733
		List<InvoicePdfModel> pdfModels = new ArrayList<>();
-
 
734
		for (FofoOrder fofoOrder : fofoOrders) {
-
 
735
			try {
-
 
736
				pdfModels.add(orderService.getInvoicePdfModel(fofoOrder.getId()));
-
 
737
			} catch (Exception e) {
-
 
738
				LOGGER.info("could not create invoice for {}, invoice number {}", fofoOrder.getId(),
-
 
739
						fofoOrder.getInvoiceNumber());
-
 
740
			}
-
 
741
		}
-
 
742
		PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
-
 
743
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
-
 
744
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
-
 
745
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
-
 
746
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
-
 
747
	}
-
 
748
 
-
 
749
	@RequestMapping(value = "/credit-note/{creditNoteId}")
-
 
750
	public ResponseEntity<?> downloadCreditNote(HttpServletRequest request, @PathVariable int creditNoteId)
-
 
751
			throws ProfitMandiBusinessException {
-
 
752
		CreditNotePdfModel creditNotePdfModel = orderService.getCreditNotePdfModel(creditNoteId);
-
 
753
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-
 
754
		PdfUtils.generateAndWriteCustomerCreditNotes(Arrays.asList(creditNotePdfModel), byteArrayOutputStream);
-
 
755
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
-
 
756
		final HttpHeaders headers = new HttpHeaders();
-
 
757
		headers.setContentType(MediaType.APPLICATION_PDF);
-
 
758
		headers.set("Content-disposition",
-
 
759
				"inline; filename=invoice-" + creditNotePdfModel.getCreditNoteNumber() + ".pdf");
-
 
760
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
-
 
761
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
-
 
762
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
-
 
763
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
-
 
764
	}
-
 
765
 
-
 
766
	@RequestMapping(value = "/getPaginatedSaleHistory")
-
 
767
	public String getSaleHistoryPaginated(HttpServletRequest request,
-
 
768
										  @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
-
 
769
										  @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
-
 
770
										  @RequestParam(required = false) LocalDateTime startTime,
-
 
771
										  @RequestParam(required = false) LocalDateTime endTime,
-
 
772
										  @RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
773
										  @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
-
 
774
			throws ProfitMandiBusinessException {
-
 
775
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
776
		Map<String, Object> map = orderService.getSaleHistoryPaginated(loginDetails.getFofoId(), searchType,
-
 
777
				searchValue, startTime, endTime, offset, limit);
-
 
778
		model.addAllAttributes(map);
-
 
779
		return "sale-history-paginated";
-
 
780
	}
-
 
781
 
-
 
782
	@PutMapping(value = "/updatePaymentTransaction")
-
 
783
	public String updateTransactionDetails(HttpServletRequest request, @RequestParam String referenceType,
-
 
784
										   @RequestParam int fofoId, @RequestParam int referenceId,
-
 
785
										   @RequestBody PartnerOptionsAndItemAmountModel partnerOptionsAndItemAmountModel,
-
 
786
										   @RequestParam float totalAmount, Model model) throws Exception {
-
 
787
 
-
 
788
		List<PaymentOptionTransactionModel> paymentOptionTransactionModels = partnerOptionsAndItemAmountModel
-
 
789
				.getPaymentOptionTransactionModel();
-
 
790
		LOGGER.info(paymentOptionTransactionModels);
-
 
791
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoId, referenceId);
-
 
792
		LOGGER.info("sdssd" + fofoOrder);
-
 
793
		fofoOrder.setTotalAmount(totalAmount);
-
 
794
		List<FofoItemIdAmountModel> fofoItemIdAmountModel = partnerOptionsAndItemAmountModel.getItemAmountModel();
-
 
795
		for (FofoItemIdAmountModel fim : fofoItemIdAmountModel) {
-
 
796
			LOGGER.info("fim" + fim.getFofoItemId());
-
 
797
 
-
 
798
			LOGGER.info("fimAmount" + fim.getAmount());
-
 
799
			Item item = itemRepository.selectById(fim.getItemId());
-
 
800
			TagListing tagListing = tagListingRepository.selectByItemId(item.getId());
-
 
801
			FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectById(fim.getFofoItemId());
-
 
802
			LOGGER.info("category" + item.getCategoryId());
-
 
803
			if (item.getCategoryId() == ProfitMandiConstants.MOBILE_CATEGORY_ID) {
-
 
804
				if (fofoOrderItem.getMop() <= fim.getAmount()) {
-
 
805
 
-
 
806
					if (fim.getAmount() <= tagListing.getMrp()) {
-
 
807
						fofoOrderItem.setSellingPrice(fim.getAmount());
-
 
808
					} else {
-
 
809
						throw new ProfitMandiBusinessException("Amount", fim.getAmount(),
-
 
810
								"Sum of amount is not less than  to MRP");
-
 
811
					}
-
 
812
 
-
 
813
					LOGGER.info("fofoOrderItem2" + fofoOrderItem);
-
 
814
 
-
 
815
				} else {
-
 
816
					// TODO below mop condition need to added added
-
 
817
					fofoOrderItem.setSellingPrice(fim.getAmount());
-
 
818
				}
-
 
819
 
-
 
820
			} else {
-
 
821
				fofoOrderItem.setSellingPrice(fim.getAmount());
-
 
822
				LOGGER.info("fofoOrderItem1" + fofoOrderItem);
-
 
823
 
-
 
824
			}
-
 
825
			LOGGER.info("fofoOrderItem" + fofoOrderItem);
-
 
826
 
-
 
827
		}
-
 
828
 
-
 
829
		/*
-
 
830
		 * for (PaymentOptionTransactionModel paymentOptionTransactionModel :
-
 
831
		 * paymentOptionTransactionModels) { amount = amount +
-
 
832
		 * paymentOptionTransactionModel.getAmount(); } LOGGER.info("FofoOrder amount" +
-
 
833
		 * fofoOrder.getUnitPrice() + "amount" + amount); if (amount ==
-
 
834
		 * fofoOrder.getUnitPrice()) {
-
 
835
		 */
-
 
836
		if (paymentOptionTransactionModels.size() > 0) {
-
 
837
			List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
-
 
838
					.selectByReferenceIdAndType(referenceId, PaymentOptionReferenceType.ORDER);
-
 
839
			Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
-
 
840
					.paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
-
 
841
			LOGGER.info(
-
 
842
					"paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
-
 
843
			for (PaymentOptionTransactionModel paymentOptionTransactionModel : paymentOptionTransactionModels) {
-
 
844
				if (paymentOptionIdPaymentOptionTransactionMap
-
 
845
						.containsKey(paymentOptionTransactionModel.getPaymentOptionId())) {
-
 
846
 
-
 
847
					PaymentOptionTransaction paymentOptionTransaction = paymentOptionIdPaymentOptionTransactionMap
-
 
848
							.get(paymentOptionTransactionModel.getPaymentOptionId());
-
 
849
 
-
 
850
					if (paymentOptionTransactionModel.getAmount() == 0) {
-
 
851
						paymentOptionTransactionRepository.delete(paymentOptionTransaction);
-
 
852
						LOGGER.info("deleted successfully");
-
 
853
					} else {
-
 
854
 
-
 
855
						paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
-
 
856
						paymentOptionTransactionRepository.persist(paymentOptionTransaction);
-
 
857
						LOGGER.info("updated successfully");
-
 
858
 
-
 
859
					}
-
 
860
				} else {
-
 
861
					if (paymentOptionTransactionModel.getAmount() > 0) {
-
 
862
						PaymentOptionTransaction paymentOptionTransaction = new PaymentOptionTransaction();
-
 
863
						paymentOptionTransaction.setReferenceId(referenceId);
-
 
864
						paymentOptionTransaction.setReferenceType(PaymentOptionReferenceType.ORDER);
-
 
865
						paymentOptionTransaction.setPaymentOptionId(paymentOptionTransactionModel.getPaymentOptionId());
-
 
866
						paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
-
 
867
						paymentOptionTransaction.setFofoId(fofoId);
-
 
868
						paymentOptionTransaction.setCreateTimestamp(fofoOrder.getCreateTimestamp());
-
 
869
						paymentOptionTransactionRepository.persist(paymentOptionTransaction);
-
 
870
						LOGGER.info("inserted successfully");
-
 
871
					}
-
 
872
				}
-
 
873
 
-
 
874
			}
-
 
875
 
-
 
876
			model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
877
		}
-
 
878
		/*
-
 
879
		 * else
-
 
880
		 *
-
 
881
		 * { throw new ProfitMandiBusinessException("Amount", amount,
-
 
882
		 * "Sum of amount is not equal to total amount"); }
-
 
883
		 */
-
 
884
 
-
 
885
		return "response";
-
 
886
 
-
 
887
	}
-
 
888
 
-
 
889
	private Map<String, List<MobileInsurancePlan>> getPlans(float sellingPrice, int itemId)
-
 
890
			throws ProfitMandiBusinessException {
-
 
891
		try {
-
 
892
			Map<String, List<MobileInsurancePlan>> productDurationPlans = insuranceService.getAllPlans(itemId,
-
 
893
					sellingPrice);
-
 
894
			return productDurationPlans;
-
 
895
		} catch (Exception e) {
-
 
896
			LOGGER.info(e, e);
-
 
897
			throw new ProfitMandiBusinessException("Fetch Insurance Plans", "Insurance",
-
 
898
					"Could not fetch insurance Plans");
-
 
899
		}
-
 
900
 
-
 
901
	}
-
 
902
 
-
 
903
	@GetMapping("/insuranceDetails")
-
 
904
	public String getInsuranceDetails(HttpServletRequest request,
-
 
905
									  @RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
906
									  @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
-
 
907
			throws ProfitMandiBusinessException {
-
 
908
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
909
		long size = 0;
-
 
910
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
-
 
911
				offset, limit);
-
 
912
		size = insurancePolicyRepository.selectCountByRetailerId(loginDetails.getFofoId());
-
 
913
		Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
-
 
914
				.selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
-
 
915
				.stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
-
 
916
		if (size < limit) {
-
 
917
			model.addAttribute("end", offset + size);
-
 
918
		} else {
-
 
919
			model.addAttribute("end", offset + limit);
-
 
920
		}
-
 
921
		model.addAttribute("start", offset + 1);
-
 
922
		model.addAttribute("size", size);
-
 
923
		model.addAttribute("insurancePolicies", insurancePolicies);
-
 
924
		model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
-
 
925
		return "insurance-details";
-
 
926
	}
-
 
927
 
-
 
928
	@GetMapping("/insuranceDetailsPaginated")
-
 
929
	public String getInsuranceDetailsPaginated(HttpServletRequest request,
-
 
930
											   @RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
931
											   @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
-
 
932
			throws ProfitMandiBusinessException {
-
 
933
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
934
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
-
 
935
				offset, limit);
-
 
936
		Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
-
 
937
				.selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
-
 
938
				.stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
-
 
939
		model.addAttribute("insurancePolicies", insurancePolicies);
-
 
940
		model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
-
 
941
		return "insurance-details-paginated";
-
 
942
	}
-
 
943
 
-
 
944
	@GetMapping("/getMouForm")
-
 
945
	public String getMouForm(HttpServletRequest request, Model model) throws Exception {
-
 
946
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
947
 
-
 
948
		Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
-
 
949
		if (mou != null) {
-
 
950
			if (mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
-
 
951
				model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
952
			} else {
-
 
953
				model.addAttribute("response1", mvcResponseSender.createResponseString(false));
-
 
954
			}
-
 
955
 
-
 
956
		} else {
-
 
957
			model.addAttribute("response1", mvcResponseSender.createResponseString(false));
-
 
958
 
-
 
959
		}
-
 
960
		return "response";
-
 
961
 
-
 
962
	}
-
 
963
 
-
 
964
	@GetMapping("/pendingOrders")
-
 
965
	public String getPendingOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
966
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
967
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
968
		Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
-
 
969
		if (mou == null) {
-
 
970
			mou = new Mou();
-
 
971
			mou.setFofoId(loginDetails.getFofoId());
-
 
972
			mou.setCreateTimestamp(LocalDateTime.now());
-
 
973
			mou.setUpdateTimestamp(LocalDateTime.now());
-
 
974
			mouRepository.persist(mou);
-
 
975
		} else if (!mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
-
 
976
			mou.setUpdateTimestamp(LocalDateTime.now());
-
 
977
		}
-
 
978
 
-
 
979
		List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.PROCESSING,
-
 
980
				loginDetails.getFofoId());
-
 
981
 
-
 
982
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, loginDetails.getFofoId());
-
 
983
		model.addAttribute("inventoryMap", map.get("inventoryMap"));
-
 
984
		model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
-
 
985
 
-
 
986
		model.addAttribute("isAdmin", isAdmin);
-
 
987
		return "pending_fofo_order";
-
 
988
 
-
 
989
	}
-
 
990
 
-
 
991
	@GetMapping("/billedOrders")
-
 
992
	public String getBilledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
993
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
994
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
995
 
-
 
996
		List<PendingOrderItem> pendingOrderItem;
-
 
997
 
-
 
998
		if (isAdmin) {
-
 
999
 
-
 
1000
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.BILLED);
-
 
1001
 
-
 
1002
		} else {
-
 
1003
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.BILLED,
-
 
1004
					loginDetails.getFofoId());
-
 
1005
		}
-
 
1006
 
-
 
1007
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
-
 
1008
 
-
 
1009
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
-
 
1010
		model.addAttribute("isAdmin", isAdmin);
-
 
1011
		return "billed_order_item";
-
 
1012
	}
-
 
1013
 
-
 
1014
	@GetMapping("/settledOrders")
-
 
1015
	public String getSettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
1016
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1017
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1018
 
-
 
1019
		List<PendingOrderItem> pendingOrderItem = null;
-
 
1020
 
-
 
1021
		if (isAdmin) {
-
 
1022
 
-
 
1023
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.SETTLED);
-
 
1024
 
-
 
1025
		} else {
-
 
1026
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.SETTLED,
-
 
1027
					loginDetails.getFofoId());
-
 
1028
		}
-
 
1029
 
-
 
1030
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
-
 
1031
 
-
 
1032
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
-
 
1033
		model.addAttribute("isAdmin", isAdmin);
-
 
1034
		return "settled_order_item";
-
 
1035
	}
-
 
1036
 
-
 
1037
	@GetMapping("/unsettledOrders")
-
 
1038
	public String getunsettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
1039
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1040
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1041
 
-
 
1042
		List<PendingOrderItem> pendingOrderItem = null;
-
 
1043
 
-
 
1044
		if (isAdmin) {
-
 
1045
 
-
 
1046
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.UNSETTLED);
-
 
1047
 
-
 
1048
		} else {
-
 
1049
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.UNSETTLED,
-
 
1050
					loginDetails.getFofoId());
-
 
1051
		}
-
 
1052
 
-
 
1053
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
-
 
1054
 
-
 
1055
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
-
 
1056
		model.addAttribute("isAdmin", isAdmin);
-
 
1057
		return "unsettled_order_item";
-
 
1058
	}
-
 
1059
 
-
 
1060
	@GetMapping("/claimedOrders")
-
 
1061
	public String getclaimedOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
1062
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1063
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1064
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
-
 
1065
				.collect(Collectors.toList());
-
 
1066
 
-
 
1067
		List<PendingOrderItem> pendingOrderItem = null;
-
 
1068
 
-
 
1069
		if (isAdmin) {
-
 
1070
 
-
 
1071
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.CLAIMED);
-
 
1072
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
-
 
1073
 
-
 
1074
			Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
-
 
1075
					.filter(x -> x != null).collect(Collectors.toList()).stream()
-
 
1076
					.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
-
 
1077
			model.addAttribute("customRetailersMap", customRetailersMap);
-
 
1078
 
-
 
1079
		} else {
-
 
1080
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.CLAIMED,
-
 
1081
					loginDetails.getFofoId());
-
 
1082
		}
-
 
1083
 
-
 
1084
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
-
 
1085
 
-
 
1086
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
-
 
1087
		model.addAttribute("isAdmin", isAdmin);
-
 
1088
		return "claim_raised_order_item";
-
 
1089
	}
-
 
1090
 
-
 
1091
	@GetMapping("/getPendingOrderItem")
-
 
1092
	public String getPendingOrderItem(HttpServletRequest request, @RequestParam int orderId, Model model)
-
 
1093
			throws ProfitMandiBusinessException {
-
 
1094
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1095
		Map<Integer, Item> itemMap = new HashMap<>();
-
 
1096
		Map<Integer, CurrentInventorySnapshot> inventoryMap = new HashMap<>();
-
 
1097
		PendingOrder pendingPO = pendingOrderRepository.selectById(orderId);
-
 
1098
		Customer customer = customerRepository.selectById(pendingPO.getCustomerId());
-
 
1099
		List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(orderId);
-
 
1100
		for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
-
 
1101
			Item item = itemRepository.selectById(pendingOrderItem.getItemId());
-
 
1102
			CurrentInventorySnapshot cis = currentInventorySnapshotRepository
-
 
1103
					.selectByItemAndFofoId(pendingOrderItem.getItemId(), pendingPO.getFofoId());
-
 
1104
			itemMap.put(pendingOrderItem.getItemId(), item);
-
 
1105
			LOGGER.info("cis" + cis);
-
 
1106
			inventoryMap.put(pendingOrderItem.getItemId(), cis);
-
 
1107
		}
-
 
1108
 
-
 
1109
		LOGGER.info("inventoryMap" + inventoryMap);
-
 
1110
		model.addAttribute("pendingOrderItems", pendingOrderItems);
-
 
1111
		model.addAttribute("itemMap", itemMap);
-
 
1112
		model.addAttribute("inventoryMap", inventoryMap);
-
 
1113
		model.addAttribute("pendingPO", gson.toJson(pendingPO));
-
 
1114
		model.addAttribute("pendingPOCustomer", gson.toJson(customer));
-
 
1115
		model.addAttribute("isAdmin", roleManager.isAdmin(loginDetails.getRoleIds()));
-
 
1116
		return "pending-order-item";
-
 
1117
	}
-
 
1118
 
-
 
1119
	@RequestMapping(value = "/getPendingOrderItemById", method = RequestMethod.GET)
-
 
1120
	public String getPendingOrderItemById(HttpServletRequest request, @RequestParam int id, Model model)
-
 
1121
			throws Exception {
-
 
1122
 
-
 
1123
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
-
 
1124
		model.addAttribute("pendingOrderItem", pendingOrderItem);
-
 
1125
		return "cancel-pending-order";
-
 
1126
	}
-
 
1127
 
-
 
1128
	@RequestMapping(value = "/getPendingOrderChangePartnerById", method = RequestMethod.GET)
-
 
1129
	public String getPendingOrderChangePartnerById(HttpServletRequest request, @RequestParam int id, Model model)
-
 
1130
			throws Exception {
-
 
1131
 
-
 
1132
		PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
-
 
1133
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(true);
-
 
1134
		model.addAttribute("customRetailersMap", customRetailersMap);
-
 
1135
		model.addAttribute("pendingOrder", pendingOrder);
-
 
1136
		return "change-partner-po";
-
 
1137
	}
-
 
1138
 
-
 
1139
	@RequestMapping(value = "/changePendingOrderPartner", method = RequestMethod.POST)
-
 
1140
	public String changePendingOrderPartner(HttpServletRequest request, @RequestParam int id, @RequestParam int fofoId,
-
 
1141
											Model model) throws Exception {
-
 
1142
 
-
 
1143
		PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
-
 
1144
		pendingOrder.setFofoId(fofoId);
-
 
1145
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
1146
 
-
 
1147
		return "response";
-
 
1148
	}
-
 
1149
 
-
 
1150
	@RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
-
 
1151
	public String cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id, @RequestParam String reason,
-
 
1152
										 Model model) throws Exception {
-
 
1153
 
-
 
1154
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1155
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
-
 
1156
 
-
 
1157
		pendingOrderItem.setStatus(OrderStatus.CANCELLED);
-
 
1158
		pendingOrderItem.setStatusDescription(loginDetails.getEmailId());
-
 
1159
		pendingOrderItem.setRemark(reason);
-
 
1160
		pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
-
 
1161
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
-
 
1162
 
-
 
1163
		List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
-
 
1164
				.map(x -> x.getStatus()).collect(Collectors.toList());
-
 
1165
 
-
 
1166
		Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
-
 
1167
 
-
 
1168
		List<Integer> catalogIds = new ArrayList<>();
-
 
1169
 
-
 
1170
		Item item = itemRepository.selectById(pendingOrderItem.getItemId());
-
 
1171
		pendingOrderItem.setItemName(item.getItemDescription());
-
 
1172
		catalogIds.add(item.getCatalogItemId());
-
 
1173
 
-
 
1174
		Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
-
 
1175
		JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
-
 
1176
		pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
-
 
1177
		pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
-
 
1178
		CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
-
 
1179
 
-
 
1180
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
-
 
1181
 
-
 
1182
		Map<String, Object> emailModel = new HashMap<>();
-
 
1183
		emailModel.put("customer", customerAddress);
-
 
1184
		emailModel.put("pendingOrder", pendingOrder);
-
 
1185
		emailModel.put("date", dateTimeFormatter);
-
 
1186
		LOGGER.info("emal" + customer.getEmailId());
-
 
1187
		String[] customerEmail = null;
-
 
1188
		if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
-
 
1189
			customerEmail = new String[]{customer.getEmailId()};
-
 
1190
 
-
 
1191
			List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
-
 
1192
 
-
 
1193
			emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel,
-
 
1194
					customerEmail, null, bccTo.toArray(new String[0]));
-
 
1195
 
-
 
1196
		}
-
 
1197
 
-
 
1198
		if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
-
 
1199
				&& !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
-
 
1200
				&& !status.contains(OrderStatus.CLAIMED)) {
-
 
1201
			pendingOrder.setStatus(OrderStatus.CLOSED);
-
 
1202
		}
-
 
1203
		pendingOrderItemRepository.persist(pendingOrderItem);
-
 
1204
 
-
 
1205
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
1206
 
-
 
1207
		return "response";
-
 
1208
	}
-
 
1209
 
-
 
1210
	@RequestMapping(value = "/deliveredPendingOrderItem", method = RequestMethod.POST)
-
 
1211
	public String deliveredPendingOrderItem(HttpServletRequest request, @RequestParam int id, Model model)
-
 
1212
			throws Exception {
-
 
1213
 
-
 
1214
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1215
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
-
 
1216
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
-
 
1217
 
-
 
1218
		if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
-
 
1219
			pendingOrderItem.setStatus(OrderStatus.UNSETTLED);
-
 
1220
			pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
-
 
1221
 
-
 
1222
		} else {
-
 
1223
			pendingOrderItem.setStatus(OrderStatus.SETTLED);
-
 
1224
			pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
-
 
1225
 
-
 
1226
		}
-
 
1227
 
-
 
1228
		List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
-
 
1229
				.map(x -> x.getStatus()).collect(Collectors.toList());
-
 
1230
 
-
 
1231
		List<Integer> catalogIds = new ArrayList<>();
-
 
1232
 
-
 
1233
		Item item = itemRepository.selectById(pendingOrderItem.getItemId());
-
 
1234
		pendingOrderItem.setItemName(item.getItemDescription());
-
 
1235
		catalogIds.add(item.getCatalogItemId());
-
 
1236
 
-
 
1237
		Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
-
 
1238
		JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
-
 
1239
		pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
-
 
1240
		pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
-
 
1241
		CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
-
 
1242
 
-
 
1243
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
-
 
1244
 
-
 
1245
		Map<String, Object> emailModel = new HashMap<>();
-
 
1246
		emailModel.put("customer", customerAddress);
-
 
1247
		emailModel.put("pendingOrder", pendingOrder);
-
 
1248
		emailModel.put("date", dateTimeFormatter);
-
 
1249
		Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
-
 
1250
		String[] customerEmail = null;
-
 
1251
		if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
-
 
1252
			customerEmail = new String[]{customer.getEmailId()};
-
 
1253
			List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
-
 
1254
 
-
 
1255
			emailService.sendMailWithAttachments("Order Delivered with SmartDukaan", "order-delivered.vm", emailModel,
-
 
1256
					customerEmail, null, bccTo.toArray(new String[0]));
-
 
1257
 
-
 
1258
		}
-
 
1259
		if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
-
 
1260
				&& !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
-
 
1261
				&& !status.contains(OrderStatus.CLAIMED)) {
-
 
1262
			pendingOrder.setStatus(OrderStatus.CLOSED);
-
 
1263
		}
-
 
1264
		pendingOrderItemRepository.persist(pendingOrderItem);
-
 
1265
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
1266
 
-
 
1267
		return "response";
-
 
1268
	}
-
 
1269
 
-
 
1270
	@RequestMapping(value = "/raiseClaimOrderItem", method = RequestMethod.POST)
-
 
1271
	public String raiseClaimOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
-
 
1272
 
-
 
1273
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1274
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
-
 
1275
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
-
 
1276
 
-
 
1277
		if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
-
 
1278
			pendingOrderItem.setStatus(OrderStatus.CLAIMED);
-
 
1279
			pendingOrderItem.setClaimedTimestamp(LocalDateTime.now());
-
 
1280
 
-
 
1281
		}
-
 
1282
		pendingOrderItemRepository.persist(pendingOrderItem);
-
 
1283
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
1284
 
-
 
1285
		return "response";
-
 
1286
	}
-
 
1287
 
-
 
1288
	@RequestMapping(value = "/verifyOrderItem", method = RequestMethod.POST)
-
 
1289
	public String verifyOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
-
 
1290
 
-
 
1291
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1292
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
-
 
1293
		pendingOrderItem.setVerifiedTimestamp(LocalDateTime.now());
-
 
1294
 
-
 
1295
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
1296
 
-
 
1297
		return "response";
-
 
1298
	}
-
 
1299
 
-
 
1300
	@RequestMapping(value = "/cancelOrderByInvoice", method = RequestMethod.POST)
-
 
1301
	public String cancelOrder(HttpServletRequest request, @RequestParam List<String> invoiceNumbers, Model model)
-
 
1302
			throws Exception {
-
 
1303
		orderService.cancelOrder(invoiceNumbers);
-
 
1304
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
1305
 
-
 
1306
		return "response";
-
 
1307
	}
-
 
1308
 
-
 
1309
	@RequestMapping(value = "/getOnlineOrder", method = RequestMethod.GET)
-
 
1310
	public String cancelOrder(HttpServletRequest request, Model model) throws Exception {
-
 
1311
		return "online-order";
-
 
1312
	}
-
 
1313
 
-
 
1314
	@GetMapping("/getAllOrdersByStatus")
-
 
1315
	public String getAllOrdersByStatus(HttpServletRequest request, @RequestParam OrderStatus status,
-
 
1316
									   @RequestParam(required = false) LocalDateTime startTime,
-
 
1317
									   @RequestParam(required = false) LocalDateTime endTime, Model model) throws ProfitMandiBusinessException {
-
 
1318
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1319
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1320
 
-
 
1321
		LOGGER.info("startTime {}", startTime);
-
 
1322
		LOGGER.info("endTime {}", endTime);
-
 
1323
 
-
 
1324
		List<PendingOrderItem> pendingOrderItems;
-
 
1325
		if (startTime == null) {
-
 
1326
			pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatus(status);
-
 
1327
		} else {
-
 
1328
			List<OrderStatus> statusList = new ArrayList<>();
-
 
1329
			if (status.equals(OrderStatus.DELIVERED)) {
-
 
1330
				statusList.add(OrderStatus.SETTLED);
-
 
1331
				statusList.add(OrderStatus.UNSETTLED);
-
 
1332
			} else {
-
 
1333
				statusList.add(status);
-
 
1334
			}
-
 
1335
			pendingOrderItems = pendingOrderItemRepository.selectByStatusAndCreateTimestamp(statusList,
-
 
1336
					startTime.toLocalDate().atStartOfDay(), endTime);
-
 
1337
		}
-
 
1338
 
-
 
1339
		List<Integer> pendingOrderIds = pendingOrderItems.stream().map(x -> x.getOrderId()).collect(Collectors.toList());
-
 
1340
 
-
 
1341
		List<Integer> fofoIds = pendingOrderRepository.selectByIds(pendingOrderIds)
-
 
1342
				.stream().map(x -> x.getFofoId()).distinct().collect(Collectors.toList());
-
 
1343
 
-
 
1344
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
-
 
1345
 
-
 
1346
		Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
-
 
1347
				.filter(x -> x != null).collect(Collectors.toList()).stream()
-
 
1348
				.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
-
 
1349
		model.addAttribute("customRetailersMap", customRetailersMap);
-
 
1350
 
-
 
1351
		LOGGER.info("customRetailersMap {}", customRetailersMap);
-
 
1352
 
-
 
1353
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, 0);
-
 
1354
 
-
 
1355
		model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
-
 
1356
		model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
-
 
1357
 
-
 
1358
		model.addAttribute("isAdmin", isAdmin);
-
 
1359
		return "online-order-item";
-
 
1360
	}
-
 
1361
 
77
 
1362
 
78
    private static final List<String> offlineOrders = Arrays.asList("EMIOD", "POD");
-
 
79
    private static final List<String> allowedDoaImeis = Arrays.asList("863903054378477");
-
 
80
    @Autowired
-
 
81
    NotificationService notificationService;
-
 
82
    @Autowired
-
 
83
    private CustomerRepository customerRepository;
-
 
84
    private boolean accessoriesDeals = true;
-
 
85
    @Autowired
-
 
86
    private RoleManager roleManager;
-
 
87
    @Autowired
-
 
88
    private Gson gson;
-
 
89
    @Autowired
-
 
90
    private CustomerReturnItemRepository customerReturnItemRepository;
-
 
91
    @Autowired
-
 
92
    private FofoOrderItemRepository fofoOrderItemRepository;
-
 
93
    @Autowired
-
 
94
    private PaymentOptionRepository paymentOptionRepository;
-
 
95
    @Autowired
-
 
96
    private StateRepository stateRepository;
-
 
97
    @Autowired
-
 
98
    private ItemRepository itemRepository;
-
 
99
    @Autowired
-
 
100
    private MVCResponseSender mvcResponseSender;
-
 
101
    @Autowired
-
 
102
    private InsuranceService insuranceService;
-
 
103
    @Autowired
-
 
104
    private FofoOrderRepository fofoOrderRepository;
-
 
105
    @Autowired
-
 
106
    private CustomerAddressRepository customerAddressRepository;
-
 
107
    @Autowired
-
 
108
    private InsurancePolicyRepository insurancePolicyRepository;
-
 
109
    @Autowired
-
 
110
    private InsuranceProviderRepository insuranceProviderRepository;
-
 
111
    @Autowired
-
 
112
    private CookiesProcessor cookiesProcessor;
-
 
113
    @Autowired
-
 
114
    private PricingService pricingService;
-
 
115
    @Autowired
-
 
116
    private OrderService orderService;
-
 
117
    @Autowired
-
 
118
    private RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
-
 
119
    @Autowired
-
 
120
    private AddressRepository addressRepository;
-
 
121
    @Autowired
-
 
122
    private PaymentOptionTransactionRepository paymentOptionTransactionRepository;
-
 
123
    @Autowired
-
 
124
    private FofoPartnerPaymentOptionRepository fofoPartnerPaymentOptionRepository;
-
 
125
    @Autowired
-
 
126
    private ResponseSender<?> responseSender;
-
 
127
    @Autowired
-
 
128
    private PendingOrderRepository pendingOrderRepository;
-
 
129
    @Autowired
-
 
130
    private OrderRepository orderRepository;
-
 
131
    @Autowired
-
 
132
    private PendingOrderItemRepository pendingOrderItemRepository;
-
 
133
    @Autowired
-
 
134
    private FofoStoreRepository fofoStoreRepository;
-
 
135
    @Autowired
-
 
136
    private RetailerService retailerService;
-
 
137
    @Autowired
-
 
138
    private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
-
 
139
    @Autowired
-
 
140
    private TagListingRepository tagListingRepository;
-
 
141
    @Autowired
-
 
142
    private PendingOrderService pendingOrderService;
-
 
143
    @Autowired
-
 
144
    private EmailService emailService;
-
 
145
    @Autowired
-
 
146
    private SolrService commonSolrService;
-
 
147
    @Autowired
-
 
148
    private MouRepository mouRepository;
-
 
149
 
-
 
150
    @Autowired
-
 
151
    private WhatsappMessageService whatsappMessageService;
-
 
152
 
-
 
153
    @RequestMapping(value = "/order")
-
 
154
    public String orderIndex(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
-
 
155
            throws ProfitMandiBusinessException {
-
 
156
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
157
 
-
 
158
        int addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(loginDetails.getFofoId());
-
 
159
        Address address = addressRepository.selectById(addressId);
-
 
160
 
-
 
161
        List<CartFofo> cartItems = orderService.cartCheckout(cartData);
-
 
162
        Set<Integer> itemIds = new HashSet<>();
-
 
163
        List<Integer> poIds = new ArrayList<>();
-
 
164
        List<Integer> poItemIds = new ArrayList<>();
-
 
165
        for (CartFofo cartFofo : cartItems) {
-
 
166
            itemIds.add(cartFofo.getItemId());
-
 
167
            if (cartFofo.getPoId() != 0) {
-
 
168
                poIds.add(cartFofo.getPoId());
-
 
169
                poItemIds.add(cartFofo.getPoItemId());
-
 
170
            }
-
 
171
        }
-
 
172
 
-
 
173
        PendingOrder po = null;
-
 
174
        Customer customer = null;
-
 
175
        PendingOrderItem poi = null;
-
 
176
        Map<Integer, PriceModel> mopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIds,
-
 
177
                loginDetails.getFofoId());
-
 
178
        List<Integer> paymentOptionIds = fofoPartnerPaymentOptionRepository
-
 
179
                .selectPaymentOptionIdsByFofoId(loginDetails.getFofoId());
-
 
180
 
-
 
181
        if (!poIds.isEmpty()) {
-
 
182
            po = pendingOrderRepository.selectById(poIds.get(0));
-
 
183
            customer = customerRepository.selectById(po.getCustomerId());
-
 
184
            if (!offlineOrders.contains(po.getPayMethod())) {
-
 
185
                paymentOptionIds.add(23);
-
 
186
            }
-
 
187
        }
-
 
188
 
-
 
189
        if (!poItemIds.isEmpty()) {
-
 
190
            poi = pendingOrderItemRepository.selectById(poItemIds.get(0));
-
 
191
        }
-
 
192
 
-
 
193
        // List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(new
-
 
194
        // HashSet<>(paymentOptionIds));
-
 
195
 
-
 
196
        List<PaymentOption> paymentOptions = paymentOptionRepository.selectActiveOption();
-
 
197
 
-
 
198
        LOGGER.info("pendingOrder" + po);
-
 
199
        LOGGER.info("pendingOrderItem" + poi);
-
 
200
 
-
 
201
        LOGGER.info("mopPriceMap {}", mopPriceMap);
-
 
202
        model.addAttribute("stateNames",
-
 
203
                stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
-
 
204
        model.addAttribute("retailerStateName", address.getState());
-
 
205
        model.addAttribute("pendingPOCustomer", gson.toJson(customer));
-
 
206
        model.addAttribute("pendingPO", gson.toJson(po));
-
 
207
 
-
 
208
        model.addAttribute("cartItems", cartItems);
-
 
209
        model.addAttribute("pendingOrder", po);
-
 
210
        model.addAttribute("pendingOrderItem", poi);
-
 
211
 
-
 
212
        model.addAttribute("mopPriceMap", mopPriceMap);
-
 
213
        model.addAttribute("paymentOptions", paymentOptions);
-
 
214
        model.addAttribute("accessoriesDeals", accessoriesDeals);
-
 
215
        return "order-index";
-
 
216
    }
-
 
217
 
-
 
218
    @RequestMapping(value = "/checkplans", method = RequestMethod.GET)
-
 
219
    public String getInsurancePrices(HttpServletRequest request, @RequestParam float price, Model model,
-
 
220
                                     @RequestParam int itemId) throws ProfitMandiBusinessException {
-
 
221
        LOGGER.info("Request received at url : {}", request.getRequestURI());
-
 
222
 
-
 
223
        try {
-
 
224
            String response = mvcResponseSender.createResponseString(this.getPlans(price, itemId));
-
 
225
            model.addAttribute("response1", response);
-
 
226
        } catch (Exception e) {
-
 
227
            // TODO Auto-generated catch block
-
 
228
            LOGGER.info(e.getMessage(), e);
-
 
229
            throw new ProfitMandiBusinessException("Plans", "Plans API", "Error formatting insurance plans");
-
 
230
        }
-
 
231
 
-
 
232
        return "response";
-
 
233
    }
-
 
234
 
-
 
235
    @RequestMapping(value = "/get-order", method = RequestMethod.GET)
-
 
236
    public String getOrder(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId,
-
 
237
                           Model model) throws ProfitMandiBusinessException {
-
 
238
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
239
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
-
 
240
        List<FofoOrderItem> fofoLineItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
-
 
241
        CustomerAddress customerAddress = null;
-
 
242
        if (fofoOrder.getCustomerAddressId() != 0) {
-
 
243
            customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
-
 
244
        }
-
 
245
 
-
 
246
        Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
-
 
247
        if (customerAddress != null) {
-
 
248
            customerAddress.setPhoneNumber(customer.getMobileNumber());
-
 
249
        }
-
 
250
        LOGGER.info("Added to get invoice - {}, {}", customer, 123);
-
 
251
        List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
-
 
252
                .selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
-
 
253
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
-
 
254
                .paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
-
 
255
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
-
 
256
                .selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
-
 
257
        this.addInsuranceProvider(insurancePolicies);
-
 
258
 
-
 
259
        model.addAttribute("fofoOrder", fofoOrder);
-
 
260
        model.addAttribute("fofoLineItems", fofoLineItems);
-
 
261
        if (customerAddress != null) {
-
 
262
            model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
-
 
263
        } else {
-
 
264
            model.addAttribute("customerBillingAddress", "");
-
 
265
 
-
 
266
        }
-
 
267
        model.addAttribute("customerBillingAddressObj", customerAddress);
-
 
268
        model.addAttribute("customerDetailsObj", customer);
-
 
269
        model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
-
 
270
        model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
-
 
271
        model.addAttribute("insurancePolicies", insurancePolicies);
-
 
272
        return "order-details";
-
 
273
    }
-
 
274
 
-
 
275
    private Map<Integer, InsuranceProvider> toInsuranceProviderIdInsuranceProvider(
-
 
276
            List<InsuranceProvider> insuranceProviders) {
-
 
277
        Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = new HashMap<>();
-
 
278
        for (InsuranceProvider insuranceProvider : insuranceProviders) {
-
 
279
            insuranceProviderIdInsuranceProviderMap.put(insuranceProvider.getId(), insuranceProvider);
-
 
280
        }
-
 
281
        return insuranceProviderIdInsuranceProviderMap;
-
 
282
    }
-
 
283
 
-
 
284
    private void addInsuranceProvider(List<InsurancePolicy> insurancePolicies) {
-
 
285
        if (insurancePolicies.isEmpty()) {
-
 
286
            return;
-
 
287
        }
-
 
288
        Set<Integer> insuranceProviderIds = new HashSet<>();
-
 
289
        for (InsurancePolicy insurancePolicy : insurancePolicies) {
-
 
290
            insuranceProviderIds.add(insurancePolicy.getProviderId());
-
 
291
        }
-
 
292
        LOGGER.info("insuranceProviderIds {}", insuranceProviderIds);
-
 
293
        List<InsuranceProvider> insuranceProviders = insuranceProviderRepository.selectByIds(insuranceProviderIds);
-
 
294
        Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = this
-
 
295
                .toInsuranceProviderIdInsuranceProvider(insuranceProviders);
-
 
296
        for (InsurancePolicy insurancePolicy : insurancePolicies) {
-
 
297
            insurancePolicy
-
 
298
                    .setInsuranceProvider(insuranceProviderIdInsuranceProviderMap.get(insurancePolicy.getProviderId()));
-
 
299
        }
-
 
300
    }
-
 
301
 
-
 
302
    @RequestMapping(value = "/saleDetails", method = RequestMethod.GET)
-
 
303
    public String getSaleDetails(HttpServletRequest request,
-
 
304
                                 @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) throws Exception {
-
 
305
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
306
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
-
 
307
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
-
 
308
        List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
-
 
309
        CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
-
 
310
        List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
-
 
311
                .selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
-
 
312
 
-
 
313
        // Added Migration info as we lost it.
-
 
314
        if (paymentOptionTransactions == null || paymentOptionTransactions.size() == 0) {
-
 
315
            PaymentOptionTransaction pot = new PaymentOptionTransaction();
-
 
316
            pot.setAmount(fofoOrder.getTotalAmount());
-
 
317
            pot.setCreateTimestamp(fofoOrder.getCreateTimestamp());
-
 
318
            // Mark it paid through cash
-
 
319
            pot.setPaymentOptionId(1);
-
 
320
            pot.setReferenceType(PaymentOptionReferenceType.ORDER);
-
 
321
            paymentOptionTransactionRepository.persist(pot);
-
 
322
            paymentOptionTransactions.add(pot);
-
 
323
            LOGGER.info("Added to get invoice");
-
 
324
        }
-
 
325
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
-
 
326
                .paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
-
 
327
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
-
 
328
                .selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
-
 
329
        this.addInsuranceProvider(insurancePolicies);
-
 
330
        Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
-
 
331
            try {
-
 
332
                return itemRepository.selectById(x.getItemId());
-
 
333
            } catch (ProfitMandiBusinessException e) {
-
 
334
                // TODO Auto-generated catch block
-
 
335
                return null;
-
 
336
            }
-
 
337
        }));
-
 
338
        Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
-
 
339
                .collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
-
 
340
 
-
 
341
        Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
-
 
342
                .collect(Collectors.toMap(foi -> foi.getId(),
-
 
343
                        foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
-
 
344
 
-
 
345
        Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
-
 
346
 
-
 
347
        for (FofoOrderItem foi : fofoOrderItems) {
-
 
348
            for (FofoLineItem fli : foi.getFofoLineItems()) {
-
 
349
                inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
-
 
350
            }
-
 
351
            List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
-
 
352
                    .selectAllByOrderItemId(foi.getId());
-
 
353
            this.markDoa(fofoOrder, foi, isAdmin);
-
 
354
            for (CustomerReturnItem customerReturnItem : customerReturnItems) {
-
 
355
                inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
-
 
356
                        inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
-
 
357
            }
-
 
358
        }
-
 
359
 
-
 
360
        LOGGER.info("fofoOrderItemIdLineItemMap {}", fofoOrderItemIdLineItemMap);
-
 
361
        model.addAttribute("fofoOrder", fofoOrder);
-
 
362
        model.addAttribute("itemsMap", itemsMap);
-
 
363
        model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
-
 
364
        model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
-
 
365
                StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
-
 
366
        model.addAttribute("fofoOrderItemIdLineItemMap", fofoOrderItemIdLineItemMap);
-
 
367
 
-
 
368
        model.addAttribute("fofoOrderItems", fofoOrderItems);
-
 
369
        model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
-
 
370
        if (customerAddress != null) {
-
 
371
 
-
 
372
            model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
-
 
373
        } else {
-
 
374
            model.addAttribute("customerBillingAddress", "");
-
 
375
 
-
 
376
        }
-
 
377
        model.addAttribute("customerBillingAddressObj", customerAddress);
-
 
378
        model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
-
 
379
        model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
-
 
380
        model.addAttribute("insurancePolicies", insurancePolicies);
-
 
381
        model.addAttribute("markDefective", this.markDefective(fofoOrder));
-
 
382
        return "sale-details";
-
 
383
    }
-
 
384
 
-
 
385
    private void markDoa(FofoOrder fofoOrder, FofoOrderItem foi, boolean isAdmin) {
-
 
386
        if (isAdmin) {
-
 
387
            foi.setDoa(true);
-
 
388
            return;
-
 
389
        }
-
 
390
        boolean isImei = foi.getFofoLineItems().stream()
-
 
391
                .anyMatch(x -> org.apache.commons.lang3.StringUtils.isNotEmpty(x.getSerialNumber())
-
 
392
                        && allowedDoaImeis.contains(x.getSerialNumber()));
-
 
393
        LocalDateTime buyDate = fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS);
-
 
394
        LocalDateTime curDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
-
 
395
        if (buyDate.isAfter(curDate.minusDays(45)) || isImei) {
-
 
396
            foi.setDoa(true);
-
 
397
        } else
-
 
398
            foi.setDoa(
-
 
399
                    foi.getBrand().equals("Nokia") && foi.getCost() < 4990 && buyDate.isAfter(curDate.minusYears(1)));
-
 
400
    }
-
 
401
 
-
 
402
    private boolean markDefective(FofoOrder fofoOrder) {
-
 
403
        return fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS).plusDays(180)
-
 
404
                .isAfter(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));
-
 
405
 
-
 
406
    }
-
 
407
 
-
 
408
    @RequestMapping(value = "/getSearchOrder")
-
 
409
    public String getSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
410
        return "search-order";
-
 
411
    }
-
 
412
 
-
 
413
    @RequestMapping(value = "/getInvoiceSearchOrder")
-
 
414
    public String getInvoiceSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
415
        return "invoices-cancel";
-
 
416
    }
-
 
417
 
-
 
418
    @RequestMapping(value = "/customerDetails", method = RequestMethod.PUT)
-
 
419
    public String updateCustomerDetails(HttpServletRequest request, @RequestBody CustomCustomer customCustomer,
-
 
420
                                        @RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
-
 
421
            throws Exception {
-
 
422
 
-
 
423
        orderService.updateCustomerDetails(customCustomer, invoiceNumber);
-
 
424
        return this.getSearchOrderDetails(request, invoiceNumber, model);
-
 
425
    }
-
 
426
 
-
 
427
    @RequestMapping(value = "/searchOrderDetails", method = RequestMethod.GET)
-
 
428
    public String getSearchOrderDetails(HttpServletRequest request,
-
 
429
                                        @RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
-
 
430
            throws Exception {
-
 
431
 
-
 
432
        FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
-
 
433
        List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
-
 
434
        Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
-
 
435
        CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
-
 
436
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = paymentOptionRepository.selectActiveOption().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
-
 
437
        List<Integer> fofoPartnerPaymentOptions = new ArrayList<>(paymentOptionIdPaymentOptionMap.keySet());
-
 
438
        Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
-
 
439
            try {
-
 
440
                return itemRepository.selectById(x.getItemId());
-
 
441
            } catch (ProfitMandiBusinessException e) {
-
 
442
                // TODO Auto-generated catch block
-
 
443
                return null;
-
 
444
            }
-
 
445
        }));
-
 
446
        LOGGER.info("fofoPartnerPaymentOptions" + fofoPartnerPaymentOptions);
-
 
447
        List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
-
 
448
                .selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
-
 
449
        LOGGER.info("paymentOptionTransactions" + paymentOptionTransactions);
-
 
450
 
-
 
451
        Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
-
 
452
                .paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
-
 
453
        LOGGER.info("paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
-
 
454
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
-
 
455
                .selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
-
 
456
        this.addInsuranceProvider(insurancePolicies);
-
 
457
        model.addAttribute("fofoOrder", fofoOrder);
-
 
458
        for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
-
 
459
            fofoOrderItem.setDoa(true);
-
 
460
        }
-
 
461
 
-
 
462
        Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
-
 
463
                .collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
-
 
464
 
-
 
465
        Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
-
 
466
                .collect(Collectors.toMap(foi -> foi.getId(),
-
 
467
                        foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
-
 
468
 
-
 
469
        Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
-
 
470
 
-
 
471
        for (FofoOrderItem foi : fofoOrderItems) {
-
 
472
            for (FofoLineItem fli : foi.getFofoLineItems()) {
-
 
473
                inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
-
 
474
            }
-
 
475
            List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
-
 
476
                    .selectAllByOrderItemId(foi.getId());
-
 
477
            for (CustomerReturnItem customerReturnItem : customerReturnItems) {
-
 
478
                inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
-
 
479
                        inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
-
 
480
            }
-
 
481
        }
-
 
482
        model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
-
 
483
                StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
-
 
484
        model.addAttribute("fofoOrderItems", fofoOrderItems);
-
 
485
        model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
-
 
486
        model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
-
 
487
        model.addAttribute("itemsMap", itemsMap);
-
 
488
        model.addAttribute("markDefective", true);
-
 
489
        model.addAttribute("customer", customer);
-
 
490
        model.addAttribute("customerAddress", customerAddress);
-
 
491
        model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
-
 
492
        model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
-
 
493
        model.addAttribute("paymentOptionIdPaymentOptionTransactionMap", paymentOptionIdPaymentOptionTransactionMap);
-
 
494
        model.addAttribute("insurancePolicies", insurancePolicies);
-
 
495
        model.addAttribute("fofoPartnerPaymentOptions", fofoPartnerPaymentOptions);
-
 
496
        model.addAttribute("totalNumberOfPaymentOptionId", fofoPartnerPaymentOptions.size());
-
 
497
        model.addAttribute("stateNames",
-
 
498
                stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
-
 
499
        return "search-order-details";
-
 
500
    }
-
 
501
 
-
 
502
    private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap(
-
 
503
            List<PaymentOptionTransaction> paymentOptionTransactions) {
-
 
504
        Set<Integer> paymentOptionIds = new HashSet<>();
-
 
505
        for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
-
 
506
            paymentOptionIds.add(paymentOptionTransaction.getPaymentOptionId());
-
 
507
        }
-
 
508
        List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(paymentOptionIds);
-
 
509
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
-
 
510
        for (PaymentOption paymentOption : paymentOptions) {
-
 
511
            paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
-
 
512
        }
-
 
513
        return paymentOptionIdPaymentOptionMap;
-
 
514
    }
-
 
515
 
-
 
516
    private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMapUsingPaymentOptions(
-
 
517
            List<Integer> fofoPartnerPaymentOptions) {
-
 
518
        List<PaymentOption> paymentOptions = paymentOptionRepository
-
 
519
                .selectByIds(new HashSet<>(fofoPartnerPaymentOptions));
-
 
520
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
-
 
521
        for (PaymentOption paymentOption : paymentOptions) {
-
 
522
            paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
-
 
523
        }
-
 
524
        return paymentOptionIdPaymentOptionMap;
-
 
525
    }
-
 
526
 
-
 
527
    private Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap(
-
 
528
            List<PaymentOptionTransaction> paymentOptionTransactions) {
-
 
529
        Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = new HashMap<>();
-
 
530
        for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
-
 
531
            paymentOptionIdPaymentOptionTransactionMap.put(paymentOptionTransaction.getPaymentOptionId(),
-
 
532
                    paymentOptionTransaction);
-
 
533
        }
-
 
534
        return paymentOptionIdPaymentOptionTransactionMap;
-
 
535
    }
-
 
536
 
-
 
537
    @RequestMapping(value = "/create-order", method = RequestMethod.POST)
-
 
538
    public String createOrder(HttpServletRequest request, @RequestBody CreateOrderRequest createOrderRequest,
-
 
539
                              Model model) throws ProfitMandiBusinessException {
-
 
540
        // throw new ProfitMandiBusinessException("Billing is on hold temporarily",
-
 
541
        // "Billing is on hold temporarily", "Billing is on hold temporarily");
-
 
542
        LOGGER.info("request at uri {} body {}", request.getRequestURI(), createOrderRequest);
-
 
543
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
544
 
-
 
545
        int fofoOrderId = orderService.createOrder(createOrderRequest, fofoDetails.getFofoId(), accessoriesDeals);
-
 
546
 
-
 
547
        LOGGER.info("Order has been created successfully...");
-
 
548
        try {
-
 
549
            this.sendWhatsappInvoice(fofoOrderRepository.selectByOrderId(fofoOrderId));
-
 
550
        } catch (Exception e) {
-
 
551
            LOGGER.info("Could not send whatsapp message");
-
 
552
            e.printStackTrace();
-
 
553
        }
-
 
554
        return "redirect:/get-order/?orderId=" + fofoOrderId;
-
 
555
    }
-
 
556
 
-
 
557
    private void sendWhatsappInvoice(FofoOrder fofoOrder) throws Exception {
-
 
558
        Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
-
 
559
        CustomRetailer retailer = retailerService.getFofoRetailer(fofoOrder.getFofoId());
-
 
560
        String message = String.format("Dear %s,\n" +
-
 
561
                "Thank you for your purchase from SmartDukaan store - %s, %s.\n" +
-
 
562
                "Your purchase invoice is attached for your reference.\n" +
-
 
563
                "\n" +
-
 
564
                "Download our app for offers and updates on new products.\n" +
-
 
565
                "https://www.smartdukaan.com/b2c\n" +
-
 
566
                "\n" +
-
 
567
                "Best Regards\n" +
-
 
568
                "SmartDukaan", customer.getFirstName(), retailer.getBusinessName(), retailer.getAddress().getCity());
-
 
569
        boolean sentMessage = notificationService.isWhatMessageSend(customer.getMobileNumber());
-
 
570
        if (sentMessage) {
-
 
571
            notificationService.sendWhatsappMediaMessage(message, customer.getMobileNumber(), this.getPublicInvoiceUrl(fofoOrder.getInvoiceNumber()),
-
 
572
                    this.getFileName(fofoOrder.getInvoiceNumber()), WhatsappMessageType.DOCUMENT);
-
 
573
        }
-
 
574
    }
-
 
575
 
-
 
576
    private String getFileName(String invoiceNumber) {
-
 
577
        return "INV-" + invoiceNumber.replace("/", "-") + ".pdf";
-
 
578
    }
-
 
579
 
-
 
580
    private String getPublicInvoiceUrl(String invoiceNumber) {
-
 
581
        String base64Encoded = Base64.getMimeEncoder().encodeToString(invoiceNumber.getBytes(StandardCharsets.UTF_8));
-
 
582
        String publicUrl = "https://partners.smartdukaan.com/wa-invoice-send/" + base64Encoded + ".pdf";
-
 
583
        LOGGER.info("Public Whatsapp Url for Invoice Message - {}", publicUrl);
-
 
584
        return publicUrl;
-
 
585
    }
-
 
586
 
-
 
587
    @RequestMapping(value = "/order/bad_return", method = RequestMethod.POST)
-
 
588
    public ResponseEntity<?> badReturn(HttpServletRequest request, @RequestBody FoiBadReturnRequest foiBadReturnRequest,
-
 
589
                                       Model model) throws ProfitMandiBusinessException {
-
 
590
        LOGGER.info("request at uri {} body {}", request.getRequestURI(), foiBadReturnRequest);
-
 
591
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
592
        CustomerCreditNote custmoerCreditNote;
-
 
593
        if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
-
 
594
            FofoOrderItem foi = fofoOrderItemRepository.selectById(foiBadReturnRequest.getFofoOrderItemId());
-
 
595
            FofoOrder fo = fofoOrderRepository.selectByOrderId(foi.getOrderId());
-
 
596
            custmoerCreditNote = orderService.badReturn(fo.getFofoId(), foiBadReturnRequest);
-
 
597
        } else {
-
 
598
            custmoerCreditNote = orderService.badReturn(fofoDetails.getFofoId(), foiBadReturnRequest);
-
 
599
        }
-
 
600
        return responseSender.ok(custmoerCreditNote.getId());
-
 
601
    }
-
 
602
 
-
 
603
    @GetMapping(value = "/wa-invoice-send/{invoiceHash}")
-
 
604
    public ResponseEntity<?> generateInvoice(@PathVariable String invoiceHash) throws ProfitMandiBusinessException {
-
 
605
        String decodedInvoiceNumber = new String(Base64.getMimeDecoder().decode(invoiceHash));
-
 
606
        LOGGER.info("Invoice Hash {}", invoiceHash);
-
 
607
 
-
 
608
 
-
 
609
        FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(decodedInvoiceNumber);
-
 
610
 
-
 
611
        InvoicePdfModel pdfModel = orderService.getInvoicePdfModel(fofoOrder.getId());
-
 
612
 
-
 
613
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-
 
614
        PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
-
 
615
        final HttpHeaders headers = new HttpHeaders();
-
 
616
        //headers.setContentDispositionFormData("inline", number + ".pdf");
-
 
617
        headers.add(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=" + pdfModel.getInvoiceNumber() + ".pdf");
-
 
618
        int contentLength = byteArrayOutputStream.toByteArray().length;
-
 
619
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
-
 
620
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
-
 
621
        return ResponseEntity.ok()
-
 
622
                .headers(headers)
-
 
623
                .contentLength(contentLength)
-
 
624
                .contentType(MediaType.parseMediaType("application/pdf"))
-
 
625
                .body(inputStreamResource);
-
 
626
    }
-
 
627
 
-
 
628
    @RequestMapping(value = "/wa-listen", method = RequestMethod.POST)
-
 
629
    public ResponseEntity<?> listenWhatsappStatus(@RequestBody String whatsappJsonResponse) {
-
 
630
        LOGGER.info("whatsappJsonResponse {}", whatsappJsonResponse);
-
 
631
        //jaihind
-
 
632
        //  String jsonString = "[{\"srcAddr\":\"TESTSM\",\"channel\":\"WHATSAPP\",\"externalId\":\"4977024756456780043-180044363908187691\",\"cause\":\"SUCCESS\",\"errorCode\":\"000\",\"destAddr\":\"919813272029\",\"eventType\":\"DELIVERED\",\"eventTs\":1692848106000}]";
-
 
633
        JSONArray jsonArray = new JSONArray(whatsappJsonResponse);
-
 
634
        for (int i = 0; i < jsonArray.length(); i++) {
-
 
635
 
-
 
636
            JSONObject jsonObject = jsonArray.getJSONObject(i);
-
 
637
            String externalId = jsonObject.getString("externalId");
-
 
638
            String destAddr = jsonObject.getString("destAddr");
-
 
639
            String eventType = jsonObject.getString("eventType");
-
 
640
            whatsappMessageService.setWhatsappResponse(externalId, destAddr, eventType);
-
 
641
        }
-
 
642
        //jaihind
-
 
643
        return responseSender.ok("Success");
-
 
644
 
-
 
645
    }
-
 
646
 
-
 
647
    @RequestMapping(value = "/generateInvoice")
-
 
648
    public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
-
 
649
                                             @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
-
 
650
        LOGGER.info("Request received at url {} with params [{}={}] ", request.getRequestURI(),
-
 
651
                ProfitMandiConstants.ORDER_ID, orderId);
-
 
652
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
653
        InvoicePdfModel pdfModel = null;
-
 
654
        if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
-
 
655
            pdfModel = orderService.getInvoicePdfModel(orderId);
-
 
656
        } else {
-
 
657
            pdfModel = orderService.getInvoicePdfModel(fofoDetails.getFofoId(), orderId);
-
 
658
        }
-
 
659
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-
 
660
        PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
-
 
661
        LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
-
 
662
        final HttpHeaders headers = new HttpHeaders();
-
 
663
        headers.setContentType(MediaType.APPLICATION_PDF);
-
 
664
        headers.setContentDispositionFormData("inline", "invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
-
 
665
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
-
 
666
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
-
 
667
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
-
 
668
        return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
-
 
669
    }
-
 
670
 
-
 
671
    @RequestMapping(value = "/generateInvoices")
-
 
672
    public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
-
 
673
                                             @RequestParam LocalDateTime startDate, @RequestParam LocalDateTime endDate, @RequestParam int partnerId)
-
 
674
            throws ProfitMandiBusinessException {
-
 
675
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
676
        List<InvoicePdfModel> pdfModels = new ArrayList<>();
-
 
677
        if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
-
 
678
            List<Integer> orderIds = fofoOrderRepository.selectByFofoId(partnerId, startDate, endDate, 0, 0).stream()
-
 
679
                    .map(x -> x.getId()).collect(Collectors.toList());
-
 
680
            for (int orderId : orderIds) {
-
 
681
                pdfModels.add(orderService.getInvoicePdfModel(orderId));
-
 
682
            }
-
 
683
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-
 
684
            PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
-
 
685
            LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
-
 
686
            final HttpHeaders headers = new HttpHeaders();
-
 
687
            headers.setContentType(MediaType.APPLICATION_PDF);
-
 
688
            headers.set("Content-disposition", "inline; filename=invoice-" + partnerId + ".pdf");
-
 
689
            headers.setContentLength(byteArrayOutputStream.toByteArray().length);
-
 
690
            final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
-
 
691
            final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
-
 
692
            return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
-
 
693
        } else {
-
 
694
            throw new ProfitMandiBusinessException("Auth", fofoDetails.getEmailId(), "Unauthorised access");
-
 
695
        }
-
 
696
    }
-
 
697
 
-
 
698
    @RequestMapping(value = "/saleHistory")
-
 
699
    public String saleHistory(HttpServletRequest request,
-
 
700
                              @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
-
 
701
                              @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
-
 
702
                              @RequestParam(required = false) LocalDateTime startTime,
-
 
703
                              @RequestParam(required = false) LocalDateTime endTime,
-
 
704
                              @RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
705
                              @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
-
 
706
            throws ProfitMandiBusinessException {
-
 
707
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
708
 
-
 
709
        Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
-
 
710
                startTime, endTime, offset, limit);
-
 
711
        model.addAllAttributes(map);
-
 
712
        return "sale-history";
-
 
713
    }
-
 
714
 
-
 
715
    @RequestMapping(value = "/downloadInvoices")
-
 
716
    public ResponseEntity<?> downloadInvoices(HttpServletRequest request,
-
 
717
                                              @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
-
 
718
                                              @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
-
 
719
                                              @RequestParam(required = false) LocalDateTime startTime,
-
 
720
                                              @RequestParam(required = false) LocalDateTime endTime,
-
 
721
                                              @RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
722
                                              @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
-
 
723
            throws ProfitMandiBusinessException {
-
 
724
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
725
 
-
 
726
        Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
-
 
727
                startTime, endTime, offset, 100);
-
 
728
        List<FofoOrder> fofoOrders = (List<FofoOrder>) map.get("saleHistories");
-
 
729
 
-
 
730
        if (fofoOrders.size() == 0) {
-
 
731
            throw new ProfitMandiBusinessException("Search criteria", "", "No orders found for criteria");
-
 
732
        }
-
 
733
 
-
 
734
        final HttpHeaders headers = new HttpHeaders();
-
 
735
        headers.setContentType(MediaType.APPLICATION_PDF);
-
 
736
        headers.set("Content-disposition", "inline; filename=invoices.pdf");
-
 
737
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-
 
738
        List<InvoicePdfModel> pdfModels = new ArrayList<>();
-
 
739
        for (FofoOrder fofoOrder : fofoOrders) {
-
 
740
            try {
-
 
741
                pdfModels.add(orderService.getInvoicePdfModel(fofoOrder.getId()));
-
 
742
            } catch (Exception e) {
-
 
743
                LOGGER.info("could not create invoice for {}, invoice number {}", fofoOrder.getId(),
-
 
744
                        fofoOrder.getInvoiceNumber());
-
 
745
            }
-
 
746
        }
-
 
747
        PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
-
 
748
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
-
 
749
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
-
 
750
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
-
 
751
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
-
 
752
    }
-
 
753
 
-
 
754
    @RequestMapping(value = "/credit-note/{creditNoteId}")
-
 
755
    public ResponseEntity<?> downloadCreditNote(HttpServletRequest request, @PathVariable int creditNoteId)
-
 
756
            throws ProfitMandiBusinessException {
-
 
757
        CreditNotePdfModel creditNotePdfModel = orderService.getCreditNotePdfModel(creditNoteId);
-
 
758
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-
 
759
        PdfUtils.generateAndWriteCustomerCreditNotes(Arrays.asList(creditNotePdfModel), byteArrayOutputStream);
-
 
760
        LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
-
 
761
        final HttpHeaders headers = new HttpHeaders();
-
 
762
        headers.setContentType(MediaType.APPLICATION_PDF);
-
 
763
        headers.set("Content-disposition",
-
 
764
                "inline; filename=invoice-" + creditNotePdfModel.getCreditNoteNumber() + ".pdf");
-
 
765
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
-
 
766
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
-
 
767
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
-
 
768
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
-
 
769
    }
-
 
770
 
-
 
771
    @RequestMapping(value = "/getPaginatedSaleHistory")
-
 
772
    public String getSaleHistoryPaginated(HttpServletRequest request,
-
 
773
                                          @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
-
 
774
                                          @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
-
 
775
                                          @RequestParam(required = false) LocalDateTime startTime,
-
 
776
                                          @RequestParam(required = false) LocalDateTime endTime,
-
 
777
                                          @RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
778
                                          @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
-
 
779
            throws ProfitMandiBusinessException {
-
 
780
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
781
        Map<String, Object> map = orderService.getSaleHistoryPaginated(loginDetails.getFofoId(), searchType,
-
 
782
                searchValue, startTime, endTime, offset, limit);
-
 
783
        model.addAllAttributes(map);
-
 
784
        return "sale-history-paginated";
-
 
785
    }
-
 
786
 
-
 
787
    @PutMapping(value = "/updatePaymentTransaction")
-
 
788
    public String updateTransactionDetails(HttpServletRequest request, @RequestParam String referenceType,
-
 
789
                                           @RequestParam int fofoId, @RequestParam int referenceId,
-
 
790
                                           @RequestBody PartnerOptionsAndItemAmountModel partnerOptionsAndItemAmountModel,
-
 
791
                                           @RequestParam float totalAmount, Model model) throws Exception {
-
 
792
 
-
 
793
        List<PaymentOptionTransactionModel> paymentOptionTransactionModels = partnerOptionsAndItemAmountModel
-
 
794
                .getPaymentOptionTransactionModel();
-
 
795
        LOGGER.info(paymentOptionTransactionModels);
-
 
796
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoId, referenceId);
-
 
797
        LOGGER.info("sdssd" + fofoOrder);
-
 
798
        fofoOrder.setTotalAmount(totalAmount);
-
 
799
        List<FofoItemIdAmountModel> fofoItemIdAmountModel = partnerOptionsAndItemAmountModel.getItemAmountModel();
-
 
800
        for (FofoItemIdAmountModel fim : fofoItemIdAmountModel) {
-
 
801
            LOGGER.info("fim" + fim.getFofoItemId());
-
 
802
 
-
 
803
            LOGGER.info("fimAmount" + fim.getAmount());
-
 
804
            Item item = itemRepository.selectById(fim.getItemId());
-
 
805
            TagListing tagListing = tagListingRepository.selectByItemId(item.getId());
-
 
806
            FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectById(fim.getFofoItemId());
-
 
807
            LOGGER.info("category" + item.getCategoryId());
-
 
808
            if (item.getCategoryId() == ProfitMandiConstants.MOBILE_CATEGORY_ID) {
-
 
809
                if (fofoOrderItem.getMop() <= fim.getAmount()) {
-
 
810
 
-
 
811
                    if (fim.getAmount() <= tagListing.getMrp()) {
-
 
812
                        fofoOrderItem.setSellingPrice(fim.getAmount());
-
 
813
                    } else {
-
 
814
                        throw new ProfitMandiBusinessException("Amount", fim.getAmount(),
-
 
815
                                "Sum of amount is not less than  to MRP");
-
 
816
                    }
-
 
817
 
-
 
818
                    LOGGER.info("fofoOrderItem2" + fofoOrderItem);
-
 
819
 
-
 
820
                } else {
-
 
821
                    // TODO below mop condition need to added added
-
 
822
                    fofoOrderItem.setSellingPrice(fim.getAmount());
-
 
823
                }
-
 
824
 
-
 
825
            } else {
-
 
826
                fofoOrderItem.setSellingPrice(fim.getAmount());
-
 
827
                LOGGER.info("fofoOrderItem1" + fofoOrderItem);
-
 
828
 
-
 
829
            }
-
 
830
            LOGGER.info("fofoOrderItem" + fofoOrderItem);
-
 
831
 
-
 
832
        }
-
 
833
 
-
 
834
        /*
-
 
835
         * for (PaymentOptionTransactionModel paymentOptionTransactionModel :
-
 
836
         * paymentOptionTransactionModels) { amount = amount +
-
 
837
         * paymentOptionTransactionModel.getAmount(); } LOGGER.info("FofoOrder amount" +
-
 
838
         * fofoOrder.getUnitPrice() + "amount" + amount); if (amount ==
-
 
839
         * fofoOrder.getUnitPrice()) {
-
 
840
         */
-
 
841
        if (paymentOptionTransactionModels.size() > 0) {
-
 
842
            List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
-
 
843
                    .selectByReferenceIdAndType(referenceId, PaymentOptionReferenceType.ORDER);
-
 
844
            Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
-
 
845
                    .paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
-
 
846
            LOGGER.info(
-
 
847
                    "paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
-
 
848
            for (PaymentOptionTransactionModel paymentOptionTransactionModel : paymentOptionTransactionModels) {
-
 
849
                if (paymentOptionIdPaymentOptionTransactionMap
-
 
850
                        .containsKey(paymentOptionTransactionModel.getPaymentOptionId())) {
-
 
851
 
-
 
852
                    PaymentOptionTransaction paymentOptionTransaction = paymentOptionIdPaymentOptionTransactionMap
-
 
853
                            .get(paymentOptionTransactionModel.getPaymentOptionId());
-
 
854
 
-
 
855
                    if (paymentOptionTransactionModel.getAmount() == 0) {
-
 
856
                        paymentOptionTransactionRepository.delete(paymentOptionTransaction);
-
 
857
                        LOGGER.info("deleted successfully");
-
 
858
                    } else {
-
 
859
 
-
 
860
                        paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
-
 
861
                        paymentOptionTransactionRepository.persist(paymentOptionTransaction);
-
 
862
                        LOGGER.info("updated successfully");
-
 
863
 
-
 
864
                    }
-
 
865
                } else {
-
 
866
                    if (paymentOptionTransactionModel.getAmount() > 0) {
-
 
867
                        PaymentOptionTransaction paymentOptionTransaction = new PaymentOptionTransaction();
-
 
868
                        paymentOptionTransaction.setReferenceId(referenceId);
-
 
869
                        paymentOptionTransaction.setReferenceType(PaymentOptionReferenceType.ORDER);
-
 
870
                        paymentOptionTransaction.setPaymentOptionId(paymentOptionTransactionModel.getPaymentOptionId());
-
 
871
                        paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
-
 
872
                        paymentOptionTransaction.setFofoId(fofoId);
-
 
873
                        paymentOptionTransaction.setCreateTimestamp(fofoOrder.getCreateTimestamp());
-
 
874
                        paymentOptionTransactionRepository.persist(paymentOptionTransaction);
-
 
875
                        LOGGER.info("inserted successfully");
-
 
876
                    }
-
 
877
                }
-
 
878
 
-
 
879
            }
-
 
880
 
-
 
881
            model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
882
        }
-
 
883
        /*
-
 
884
         * else
-
 
885
         *
-
 
886
         * { throw new ProfitMandiBusinessException("Amount", amount,
-
 
887
         * "Sum of amount is not equal to total amount"); }
-
 
888
         */
-
 
889
 
-
 
890
        return "response";
-
 
891
 
-
 
892
    }
-
 
893
 
-
 
894
    private Map<String, List<MobileInsurancePlan>> getPlans(float sellingPrice, int itemId)
-
 
895
            throws ProfitMandiBusinessException {
-
 
896
        try {
-
 
897
            Map<String, List<MobileInsurancePlan>> productDurationPlans = insuranceService.getAllPlans(itemId,
-
 
898
                    sellingPrice);
-
 
899
            return productDurationPlans;
-
 
900
        } catch (Exception e) {
-
 
901
            LOGGER.info(e, e);
-
 
902
            throw new ProfitMandiBusinessException("Fetch Insurance Plans", "Insurance",
-
 
903
                    "Could not fetch insurance Plans");
-
 
904
        }
-
 
905
 
-
 
906
    }
-
 
907
 
-
 
908
    @GetMapping("/insuranceDetails")
-
 
909
    public String getInsuranceDetails(HttpServletRequest request,
-
 
910
                                      @RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
911
                                      @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
-
 
912
            throws ProfitMandiBusinessException {
-
 
913
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
914
        long size = 0;
-
 
915
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
-
 
916
                offset, limit);
-
 
917
        size = insurancePolicyRepository.selectCountByRetailerId(loginDetails.getFofoId());
-
 
918
        Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
-
 
919
                .selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
-
 
920
                .stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
-
 
921
        if (size < limit) {
-
 
922
            model.addAttribute("end", offset + size);
-
 
923
        } else {
-
 
924
            model.addAttribute("end", offset + limit);
-
 
925
        }
-
 
926
        model.addAttribute("start", offset + 1);
-
 
927
        model.addAttribute("size", size);
-
 
928
        model.addAttribute("insurancePolicies", insurancePolicies);
-
 
929
        model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
-
 
930
        return "insurance-details";
-
 
931
    }
-
 
932
 
-
 
933
    @GetMapping("/insuranceDetailsPaginated")
-
 
934
    public String getInsuranceDetailsPaginated(HttpServletRequest request,
-
 
935
                                               @RequestParam(name = "offset", defaultValue = "0") int offset,
-
 
936
                                               @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
-
 
937
            throws ProfitMandiBusinessException {
-
 
938
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
939
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
-
 
940
                offset, limit);
-
 
941
        Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
-
 
942
                .selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
-
 
943
                .stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
-
 
944
        model.addAttribute("insurancePolicies", insurancePolicies);
-
 
945
        model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
-
 
946
        return "insurance-details-paginated";
-
 
947
    }
-
 
948
 
-
 
949
    @GetMapping("/getMouForm")
-
 
950
    public String getMouForm(HttpServletRequest request, Model model) throws Exception {
-
 
951
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
952
 
-
 
953
        Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
-
 
954
        if (mou != null) {
-
 
955
            if (mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
-
 
956
                model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
957
            } else {
-
 
958
                model.addAttribute("response1", mvcResponseSender.createResponseString(false));
-
 
959
            }
-
 
960
 
-
 
961
        } else {
-
 
962
            model.addAttribute("response1", mvcResponseSender.createResponseString(false));
-
 
963
 
-
 
964
        }
-
 
965
        return "response";
-
 
966
 
-
 
967
    }
-
 
968
 
-
 
969
    @GetMapping("/pendingOrders")
-
 
970
    public String getPendingOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
971
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
972
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
973
        Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
-
 
974
        if (mou == null) {
-
 
975
            mou = new Mou();
-
 
976
            mou.setFofoId(loginDetails.getFofoId());
-
 
977
            mou.setCreateTimestamp(LocalDateTime.now());
-
 
978
            mou.setUpdateTimestamp(LocalDateTime.now());
-
 
979
            mouRepository.persist(mou);
-
 
980
        } else if (!mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
-
 
981
            mou.setUpdateTimestamp(LocalDateTime.now());
-
 
982
        }
-
 
983
 
-
 
984
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.PROCESSING,
-
 
985
                loginDetails.getFofoId());
-
 
986
 
-
 
987
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, loginDetails.getFofoId());
-
 
988
        model.addAttribute("inventoryMap", map.get("inventoryMap"));
-
 
989
        model.addAttribute("pendingOrderItems", (List<PendingOrderItem>)map.get("pendingOrderItems"));
-
 
990
 
-
 
991
        model.addAttribute("isAdmin", isAdmin);
-
 
992
        return "pending_fofo_order";
-
 
993
 
-
 
994
    }
-
 
995
 
-
 
996
    @GetMapping("/billedOrders")
-
 
997
    public String getBilledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
998
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
999
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1000
 
-
 
1001
        List<PendingOrderItem> pendingOrderItem;
-
 
1002
 
-
 
1003
        if (isAdmin) {
-
 
1004
 
-
 
1005
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.BILLED);
-
 
1006
 
-
 
1007
        } else {
-
 
1008
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.BILLED,
-
 
1009
                    loginDetails.getFofoId());
-
 
1010
        }
-
 
1011
 
-
 
1012
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
-
 
1013
 
-
 
1014
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
-
 
1015
        model.addAttribute("isAdmin", isAdmin);
-
 
1016
        return "billed_order_item";
-
 
1017
    }
-
 
1018
 
-
 
1019
    @GetMapping("/settledOrders")
-
 
1020
    public String getSettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
1021
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1022
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1023
 
-
 
1024
        List<PendingOrderItem> pendingOrderItem = null;
-
 
1025
 
-
 
1026
        if (isAdmin) {
-
 
1027
 
-
 
1028
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.SETTLED);
-
 
1029
 
-
 
1030
        } else {
-
 
1031
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.SETTLED,
-
 
1032
                    loginDetails.getFofoId());
-
 
1033
        }
-
 
1034
 
-
 
1035
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
-
 
1036
 
-
 
1037
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
-
 
1038
        model.addAttribute("isAdmin", isAdmin);
-
 
1039
        return "settled_order_item";
-
 
1040
    }
-
 
1041
 
-
 
1042
    @GetMapping("/unsettledOrders")
-
 
1043
    public String getunsettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
1044
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1045
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1046
 
-
 
1047
        List<PendingOrderItem> pendingOrderItem = null;
-
 
1048
 
-
 
1049
        if (isAdmin) {
-
 
1050
 
-
 
1051
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.UNSETTLED);
-
 
1052
 
-
 
1053
        } else {
-
 
1054
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.UNSETTLED,
-
 
1055
                    loginDetails.getFofoId());
-
 
1056
        }
-
 
1057
 
-
 
1058
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
-
 
1059
 
-
 
1060
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
-
 
1061
        model.addAttribute("isAdmin", isAdmin);
-
 
1062
        return "unsettled_order_item";
-
 
1063
    }
-
 
1064
 
-
 
1065
    @GetMapping("/claimedOrders")
-
 
1066
    public String getclaimedOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
-
 
1067
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1068
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1069
        List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
-
 
1070
                .collect(Collectors.toList());
-
 
1071
 
-
 
1072
        List<PendingOrderItem> pendingOrderItem = null;
-
 
1073
 
-
 
1074
        if (isAdmin) {
-
 
1075
 
-
 
1076
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.CLAIMED);
-
 
1077
            Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
-
 
1078
 
-
 
1079
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
-
 
1080
                    .filter(x -> x != null).collect(Collectors.toList()).stream()
-
 
1081
                    .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
-
 
1082
            model.addAttribute("customRetailersMap", customRetailersMap);
-
 
1083
 
-
 
1084
        } else {
-
 
1085
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.CLAIMED,
-
 
1086
                    loginDetails.getFofoId());
-
 
1087
        }
-
 
1088
 
-
 
1089
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
-
 
1090
 
-
 
1091
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
-
 
1092
        model.addAttribute("isAdmin", isAdmin);
-
 
1093
        return "claim_raised_order_item";
-
 
1094
    }
-
 
1095
 
-
 
1096
    @GetMapping("/getPendingOrderItem")
-
 
1097
    public String getPendingOrderItem(HttpServletRequest request, @RequestParam int orderId, Model model)
-
 
1098
            throws ProfitMandiBusinessException {
-
 
1099
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1100
        Map<Integer, Item> itemMap = new HashMap<>();
-
 
1101
        Map<Integer, CurrentInventorySnapshot> inventoryMap = new HashMap<>();
-
 
1102
        PendingOrder pendingPO = pendingOrderRepository.selectById(orderId);
-
 
1103
        Customer customer = customerRepository.selectById(pendingPO.getCustomerId());
-
 
1104
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(orderId);
-
 
1105
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
-
 
1106
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
-
 
1107
            CurrentInventorySnapshot cis = currentInventorySnapshotRepository
-
 
1108
                    .selectByItemAndFofoId(pendingOrderItem.getItemId(), pendingPO.getFofoId());
-
 
1109
            itemMap.put(pendingOrderItem.getItemId(), item);
-
 
1110
            LOGGER.info("cis" + cis);
-
 
1111
            inventoryMap.put(pendingOrderItem.getItemId(), cis);
-
 
1112
        }
-
 
1113
 
-
 
1114
        LOGGER.info("inventoryMap" + inventoryMap);
-
 
1115
        model.addAttribute("pendingOrderItems", pendingOrderItems);
-
 
1116
        model.addAttribute("itemMap", itemMap);
-
 
1117
        model.addAttribute("inventoryMap", inventoryMap);
-
 
1118
        model.addAttribute("pendingPO", gson.toJson(pendingPO));
-
 
1119
        model.addAttribute("pendingPOCustomer", gson.toJson(customer));
-
 
1120
        model.addAttribute("isAdmin", roleManager.isAdmin(loginDetails.getRoleIds()));
-
 
1121
        return "pending-order-item";
-
 
1122
    }
-
 
1123
 
-
 
1124
    @RequestMapping(value = "/getPendingOrderItemById", method = RequestMethod.GET)
-
 
1125
    public String getPendingOrderItemById(HttpServletRequest request, @RequestParam int id, Model model)
-
 
1126
            throws Exception {
-
 
1127
 
-
 
1128
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
-
 
1129
        model.addAttribute("pendingOrderItem", pendingOrderItem);
-
 
1130
        return "cancel-pending-order";
-
 
1131
    }
-
 
1132
 
-
 
1133
    @RequestMapping(value = "/getPendingOrderChangePartnerById", method = RequestMethod.GET)
-
 
1134
    public String getPendingOrderChangePartnerById(HttpServletRequest request, @RequestParam int id, Model model)
-
 
1135
            throws Exception {
-
 
1136
 
-
 
1137
        PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
-
 
1138
        Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(true);
-
 
1139
        model.addAttribute("customRetailersMap", customRetailersMap);
-
 
1140
        model.addAttribute("pendingOrder", pendingOrder);
-
 
1141
        return "change-partner-po";
-
 
1142
    }
-
 
1143
 
-
 
1144
    @RequestMapping(value = "/changePendingOrderPartner", method = RequestMethod.POST)
-
 
1145
    public String changePendingOrderPartner(HttpServletRequest request, @RequestParam int id, @RequestParam int fofoId,
-
 
1146
                                            Model model) throws Exception {
-
 
1147
 
-
 
1148
        PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
-
 
1149
        pendingOrder.setFofoId(fofoId);
-
 
1150
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
1151
 
-
 
1152
        return "response";
-
 
1153
    }
-
 
1154
 
-
 
1155
    @RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
-
 
1156
    public String cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id, @RequestParam String reason,
-
 
1157
                                         Model model) throws Exception {
-
 
1158
 
-
 
1159
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1160
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
-
 
1161
 
-
 
1162
        pendingOrderItem.setStatus(OrderStatus.CANCELLED);
-
 
1163
        pendingOrderItem.setStatusDescription(loginDetails.getEmailId());
-
 
1164
        pendingOrderItem.setRemark(reason);
-
 
1165
        pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
-
 
1166
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
-
 
1167
 
-
 
1168
        List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
-
 
1169
                .map(x -> x.getStatus()).collect(Collectors.toList());
-
 
1170
 
-
 
1171
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
-
 
1172
 
-
 
1173
        List<Integer> catalogIds = new ArrayList<>();
-
 
1174
 
-
 
1175
        Item item = itemRepository.selectById(pendingOrderItem.getItemId());
-
 
1176
        pendingOrderItem.setItemName(item.getItemDescription());
-
 
1177
        catalogIds.add(item.getCatalogItemId());
-
 
1178
 
-
 
1179
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
-
 
1180
        JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
-
 
1181
        pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
-
 
1182
        pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
-
 
1183
        CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
-
 
1184
 
-
 
1185
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
-
 
1186
 
-
 
1187
        Map<String, Object> emailModel = new HashMap<>();
-
 
1188
        emailModel.put("customer", customerAddress);
-
 
1189
        emailModel.put("pendingOrder", pendingOrder);
-
 
1190
        emailModel.put("date", dateTimeFormatter);
-
 
1191
        LOGGER.info("emal" + customer.getEmailId());
-
 
1192
        String[] customerEmail = null;
-
 
1193
        if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
-
 
1194
            customerEmail = new String[]{customer.getEmailId()};
-
 
1195
 
-
 
1196
            List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
-
 
1197
 
-
 
1198
            emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel,
-
 
1199
                    customerEmail, null, bccTo.toArray(new String[0]));
-
 
1200
 
-
 
1201
        }
-
 
1202
 
-
 
1203
        if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
-
 
1204
                && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
-
 
1205
                && !status.contains(OrderStatus.CLAIMED)) {
-
 
1206
            pendingOrder.setStatus(OrderStatus.CLOSED);
-
 
1207
        }
-
 
1208
        pendingOrderItemRepository.persist(pendingOrderItem);
-
 
1209
 
-
 
1210
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
1211
 
-
 
1212
        return "response";
-
 
1213
    }
-
 
1214
 
-
 
1215
    @RequestMapping(value = "/deliveredPendingOrderItem", method = RequestMethod.POST)
-
 
1216
    public String deliveredPendingOrderItem(HttpServletRequest request, @RequestParam int id, Model model)
-
 
1217
            throws Exception {
-
 
1218
 
-
 
1219
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1220
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
-
 
1221
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
-
 
1222
 
-
 
1223
        if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
-
 
1224
            pendingOrderItem.setStatus(OrderStatus.UNSETTLED);
-
 
1225
            pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
-
 
1226
 
-
 
1227
        } else {
-
 
1228
            pendingOrderItem.setStatus(OrderStatus.SETTLED);
-
 
1229
            pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
-
 
1230
 
-
 
1231
        }
-
 
1232
 
-
 
1233
        List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
-
 
1234
                .map(x -> x.getStatus()).collect(Collectors.toList());
-
 
1235
 
-
 
1236
        List<Integer> catalogIds = new ArrayList<>();
-
 
1237
 
-
 
1238
        Item item = itemRepository.selectById(pendingOrderItem.getItemId());
-
 
1239
        pendingOrderItem.setItemName(item.getItemDescription());
-
 
1240
        catalogIds.add(item.getCatalogItemId());
-
 
1241
 
-
 
1242
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
-
 
1243
        JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
-
 
1244
        pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
-
 
1245
        pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
-
 
1246
        CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
-
 
1247
 
-
 
1248
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
-
 
1249
 
-
 
1250
        Map<String, Object> emailModel = new HashMap<>();
-
 
1251
        emailModel.put("customer", customerAddress);
-
 
1252
        emailModel.put("pendingOrder", pendingOrder);
-
 
1253
        emailModel.put("date", dateTimeFormatter);
-
 
1254
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
-
 
1255
        String[] customerEmail = null;
-
 
1256
        if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
-
 
1257
            customerEmail = new String[]{customer.getEmailId()};
-
 
1258
            List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
-
 
1259
 
-
 
1260
            emailService.sendMailWithAttachments("Order Delivered with SmartDukaan", "order-delivered.vm", emailModel,
-
 
1261
                    customerEmail, null, bccTo.toArray(new String[0]));
-
 
1262
 
-
 
1263
        }
-
 
1264
        if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
-
 
1265
                && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
-
 
1266
                && !status.contains(OrderStatus.CLAIMED)) {
-
 
1267
            pendingOrder.setStatus(OrderStatus.CLOSED);
-
 
1268
        }
-
 
1269
        pendingOrderItemRepository.persist(pendingOrderItem);
-
 
1270
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
1271
 
-
 
1272
        return "response";
-
 
1273
    }
-
 
1274
 
-
 
1275
    @RequestMapping(value = "/raiseClaimOrderItem", method = RequestMethod.POST)
-
 
1276
    public String raiseClaimOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
-
 
1277
 
-
 
1278
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1279
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
-
 
1280
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
-
 
1281
 
-
 
1282
        if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
-
 
1283
            pendingOrderItem.setStatus(OrderStatus.CLAIMED);
-
 
1284
            pendingOrderItem.setClaimedTimestamp(LocalDateTime.now());
-
 
1285
 
-
 
1286
        }
-
 
1287
        pendingOrderItemRepository.persist(pendingOrderItem);
-
 
1288
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
1289
 
-
 
1290
        return "response";
-
 
1291
    }
-
 
1292
 
-
 
1293
    @RequestMapping(value = "/verifyOrderItem", method = RequestMethod.POST)
-
 
1294
    public String verifyOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
-
 
1295
 
-
 
1296
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1297
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
-
 
1298
        pendingOrderItem.setVerifiedTimestamp(LocalDateTime.now());
-
 
1299
 
-
 
1300
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
1301
 
-
 
1302
        return "response";
-
 
1303
    }
-
 
1304
 
-
 
1305
    @RequestMapping(value = "/cancelOrderByInvoice", method = RequestMethod.POST)
-
 
1306
    public String cancelOrder(HttpServletRequest request, @RequestParam List<String> invoiceNumbers, Model model)
-
 
1307
            throws Exception {
-
 
1308
        orderService.cancelOrder(invoiceNumbers);
-
 
1309
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
1310
 
-
 
1311
        return "response";
-
 
1312
    }
-
 
1313
 
-
 
1314
    @RequestMapping(value = "/getOnlineOrder", method = RequestMethod.GET)
-
 
1315
    public String cancelOrder(HttpServletRequest request, Model model) throws Exception {
-
 
1316
        return "online-order";
-
 
1317
    }
-
 
1318
 
-
 
1319
    @GetMapping("/getAllOrdersByStatus")
-
 
1320
    public String getAllOrdersByStatus(HttpServletRequest request, @RequestParam OrderStatus status,
-
 
1321
                                       @RequestParam(required = false) LocalDateTime startTime,
-
 
1322
                                       @RequestParam(required = false) LocalDateTime endTime, Model model) throws ProfitMandiBusinessException {
-
 
1323
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1324
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1325
 
-
 
1326
        LOGGER.info("startTime {}", startTime);
-
 
1327
        LOGGER.info("endTime {}", endTime);
-
 
1328
 
-
 
1329
        List<PendingOrderItem> pendingOrderItems;
-
 
1330
        if (startTime == null) {
-
 
1331
            pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatus(status);
-
 
1332
        } else {
-
 
1333
            List<OrderStatus> statusList = new ArrayList<>();
-
 
1334
            if (status.equals(OrderStatus.DELIVERED)) {
-
 
1335
                statusList.add(OrderStatus.SETTLED);
-
 
1336
                statusList.add(OrderStatus.UNSETTLED);
-
 
1337
            } else {
-
 
1338
                statusList.add(status);
-
 
1339
            }
-
 
1340
            pendingOrderItems = pendingOrderItemRepository.selectByStatusAndCreateTimestamp(statusList,
-
 
1341
                    startTime.toLocalDate().atStartOfDay(), endTime);
-
 
1342
        }
-
 
1343
 
-
 
1344
        List<Integer> pendingOrderIds = pendingOrderItems.stream().map(x -> x.getOrderId()).collect(Collectors.toList());
-
 
1345
 
-
 
1346
        List<Integer> fofoIds = pendingOrderRepository.selectByIds(pendingOrderIds)
-
 
1347
                .stream().map(x -> x.getFofoId()).distinct().collect(Collectors.toList());
-
 
1348
 
-
 
1349
        Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
-
 
1350
 
-
 
1351
        Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
-
 
1352
                .filter(x -> x != null).collect(Collectors.toList()).stream()
-
 
1353
                .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
-
 
1354
        model.addAttribute("customRetailersMap", customRetailersMap);
-
 
1355
 
-
 
1356
        LOGGER.info("customRetailersMap {}", customRetailersMap);
-
 
1357
 
-
 
1358
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, 0);
-
 
1359
 
-
 
1360
        model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
-
 
1361
        model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
-
 
1362
 
-
 
1363
        model.addAttribute("isAdmin", isAdmin);
-
 
1364
        return "online-order-item";
-
 
1365
    }
-
 
1366
 
-
 
1367
 
-
 
1368
    @RequestMapping(value = "/franchiseeSalesReport", method = RequestMethod.GET)
-
 
1369
    public String getFranchiseeSalesReport(HttpServletRequest request, Model model, @RequestParam(defaultValue = "0") int fofoId,
-
 
1370
                                           @RequestParam(required = false) LocalDate startDate, @RequestParam(required = false) LocalDate endDate)
-
 
1371
            throws ProfitMandiBusinessException {
-
 
1372
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1373
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1374
        if (startDate == null) {
-
 
1375
            startDate = LocalDate.now().minusDays(30);
-
 
1376
 
-
 
1377
        }
-
 
1378
        endDate = LocalDate.now();
-
 
1379
        model.addAttribute("startDate", startDate);
-
 
1380
        model.addAttribute("endDate", endDate);
-
 
1381
        model.addAttribute("isAdmin", isAdmin);
-
 
1382
        LOGGER.info("q {}, starDate - {}, endDate - {}", fofoId, startDate, endDate);
-
 
1383
        if (isAdmin) {
-
 
1384
            if (fofoId == 0) {
-
 
1385
                //No need to pull any data
-
 
1386
                model.addAttribute("focoSaleReportList", new ArrayList<>());
-
 
1387
                return "foco-sale-report";
-
 
1388
 
-
 
1389
            }
-
 
1390
        } else {
-
 
1391
            fofoId = loginDetails.getFofoId();
-
 
1392
        }
-
 
1393
 
-
 
1394
 
-
 
1395
        FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoId);
-
 
1396
 
-
 
1397
        List<FocoSaleReportModel> focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoId, fs.getCode(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1398
        model.addAttribute("focoSaleReportList", focoSaleReportList);
-
 
1399
        return "foco-sale-report";
-
 
1400
    }
-
 
1401
 
-
 
1402
    @RequestMapping(value = "/franchiseeSalesFetchReportByDate", method = RequestMethod.GET)
-
 
1403
    public String getfranchiseeSalesFetchReport(HttpServletRequest request, Model model,
-
 
1404
                                                @RequestParam(defaultValue = "0") int fofoId,
-
 
1405
                                                @RequestParam(required = false) LocalDate startDate,
-
 
1406
                                                @RequestParam(required = false) LocalDate endDate)
-
 
1407
            throws Exception {
-
 
1408
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1409
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1410
        if (startDate == null) {
-
 
1411
 
-
 
1412
            startDate = LocalDate.now().minusDays(30);
-
 
1413
            endDate = LocalDate.now();
-
 
1414
        }
-
 
1415
        model.addAttribute("startDate",startDate);
-
 
1416
        model.addAttribute("endDate", endDate);
-
 
1417
        model.addAttribute("isAdmin", isAdmin);
-
 
1418
 
-
 
1419
        // List<List<?>> rows = new ArrayList<>();
-
 
1420
 
-
 
1421
        LOGGER.info("q {}, starDate - {}, endDate - {}", fofoId, startDate, endDate);
-
 
1422
        if (isAdmin) {
-
 
1423
            if (fofoId == 0) {
-
 
1424
                //no need any data
-
 
1425
                model.addAttribute("focoSaleReportList", new ArrayList<>());
-
 
1426
                return "foco-sale-report";
-
 
1427
            }
-
 
1428
        } else {
-
 
1429
            fofoId = loginDetails.getFofoId();
-
 
1430
        }
-
 
1431
        FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoId);
-
 
1432
        List<FocoSaleReportModel> focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoId, fs.getCode(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1433
        model.addAttribute("focoSaleReportList", focoSaleReportList);
-
 
1434
        return "foco-sale-report";
-
 
1435
    }
-
 
1436
 
-
 
1437
 
-
 
1438
    @RequestMapping(value = "/downloadFranchiseeSales", method = RequestMethod.GET)
-
 
1439
    public ResponseEntity<?> getdownloadFranchiseeSales(HttpServletRequest request,
-
 
1440
                                                        @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
-
 
1441
                                                        @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
-
 
1442
            throws Exception {
-
 
1443
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1444
        List<List<?>> rows = new ArrayList<>();
-
 
1445
 
-
 
1446
        FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoDetails.getFofoId());
-
 
1447
        List<FocoSaleReportModel> focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoDetails.getFofoId(),
-
 
1448
                fs.getCode(), startDate.atStartOfDay(), endDate.atStartOfDay());
-
 
1449
        LOGGER.info("FocoSaleReportList {}", focoSaleReportList);
-
 
1450
 
-
 
1451
        for (FocoSaleReportModel fsr : focoSaleReportList) {
-
 
1452
 
-
 
1453
            rows.add(Arrays.asList(fsr.getCode(), fsr.getName(), fsr.getCity(), fsr.getState(), fsr.getRegion(),
-
 
1454
                    fsr.getItemId(), fsr.getBrand(), fsr.getModelName(), fsr.getModelNumber(), fsr.getColor(),
-
 
1455
                    fsr.getQuantity(), fsr.getDp(), fsr.getSellingPrice(), fsr.getMop(), fsr.getSerialNumber(),
-
 
1456
                    FormattingUtils.format(fsr.getCreateDate()), fsr.getCustomerName(), fsr.getCustomerPhone(),
-
 
1457
                    fsr.getCustomerCity(), fsr.getCustomerPincode(), fsr.getInvoiceNumber(), fsr.getPurchaseReference(),
-
 
1458
                    fsr.getCustomerGstNumber(), FormattingUtils.format(fsr.getCancelledTimestamp()),
-
 
1459
                    FormattingUtils.format(fsr.getGrnCompleteDate()), fsr.getHygieneRating(), fsr.getRating(),
-
 
1460
                    fsr.getStatus(), fsr.getRemark(), FormattingUtils.format(fsr.getCreatedTimestamp()),
-
 
1461
                    FormattingUtils.format(fsr.getDisposedTimestamp()),
-
 
1462
                    FormattingUtils.format(fsr.getNextTimestamp()),
-
 
1463
                    FormattingUtils.format(fsr.getActivationTimestamp()),
-
 
1464
                    FormattingUtils.format(fsr.getActivationTimestamp()), fsr.getLabel()));
-
 
1465
 
-
 
1466
        }
-
 
1467
 
-
 
1468
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
-
 
1469
                Arrays.asList("Code", "Name", "City", "State", "Region", "Item Id", "Brand", "Model Name",
-
 
1470
                        "Model Number", "Color", "Quantity", "Dp", "Selling_Price", "mop", "Serial Number",
-
 
1471
                        "Create Date", "Customer Name", "Customer Phone", "Customer City", " Customer Pincode",
-
 
1472
                        "Invoice  Number", "Purchase Reference", "Customer Gst Number", " Cancelled Timestamp",
-
 
1473
                        "GRN Complete Date", "Hygiene Rating", "Rating", "Status", "Remark", "Created Timestamp",
-
 
1474
                        "Disposed Timestamp", " Next Timestamp", "Activation Timestamp", "Create Timestamp", "Label"),
-
 
1475
                rows);
-
 
1476
 
-
 
1477
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Franchisee Sales Report");
-
 
1478
 
-
 
1479
        return responseEntity;
-
 
1480
 
-
 
1481
    }
-
 
1482
 
-
 
1483
    @RequestMapping(value = "/downloadWalletSummaryReport", method = RequestMethod.GET)
-
 
1484
    public ResponseEntity<?> getDownloadWalletSummaryReport(HttpServletRequest request,
-
 
1485
                                                            @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
-
 
1486
                                                            @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
-
 
1487
            throws Exception {
-
 
1488
 
-
 
1489
        List<List<?>> rows = new ArrayList<>();
-
 
1490
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1491
        List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository.selectWalletSummaryReport(
-
 
1492
                fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1493
        LOGGER.info("walletSummartList {}", walletSummartList);
-
 
1494
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
-
 
1495
 
-
 
1496
        for (WalletSummaryReportModel walletSummary : walletSummartList) {
-
 
1497
 
-
 
1498
            rows.add(Arrays.asList(walletSummary.getId(), walletSummary.getCode(), walletSummary.getName(),
-
 
1499
                    walletSummary.getEmail(), walletSummary.getPhone(), walletSummary.getAmount(),
-
 
1500
                    walletSummary.getRefundableAmount(), walletSummary.getReference(), walletSummary.getReferenceType(),
-
 
1501
                    FormattingUtils.format(walletSummary.getBusinessTimestamp())));
-
 
1502
 
-
 
1503
        }
-
 
1504
 
-
 
1505
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
-
 
1506
                .getCSVByteStream(Arrays.asList("Id", "Code", "Name", "Email", "Phone", "Amount", "Refundable_amount",
-
 
1507
                        "Reference", "Reference_type", "Business_timestamp", "Description"), rows);
-
 
1508
 
-
 
1509
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Wallet Statement Report");
-
 
1510
 
-
 
1511
        return responseEntity;
-
 
1512
 
-
 
1513
    }
-
 
1514
    @RequestMapping(value = "/walletSummaryFetchReportByDate", method = RequestMethod.GET)
-
 
1515
    public String getwalletSummaryFetchReport(HttpServletRequest request, Model model, @RequestParam(defaultValue = "0") int fofoId,
-
 
1516
                                              @RequestParam(required = false) LocalDate startDate,
-
 
1517
                                              @RequestParam(required = false) LocalDate endDate)
-
 
1518
            throws Exception {
-
 
1519
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1520
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1521
        if (startDate == null) {
-
 
1522
            startDate = LocalDate.now().minusDays(30);
-
 
1523
        }
-
 
1524
        endDate = LocalDate.now();
-
 
1525
        model.addAttribute("startDate", startDate);
-
 
1526
        model.addAttribute("endDate", endDate);
-
 
1527
        model.addAttribute("isAdmin", isAdmin);
-
 
1528
        if (isAdmin) {
-
 
1529
            if (fofoId == 0) {
-
 
1530
                //No need to send any data
-
 
1531
                model.addAttribute("walletSummartList", new ArrayList<>());
-
 
1532
 
-
 
1533
                return "wallet-summary-report";
-
 
1534
            } else {
-
 
1535
                List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository
-
 
1536
                        .selectWalletSummaryReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1537
                model.addAttribute("walletSummartList", walletSummartList);
-
 
1538
 
-
 
1539
                return "wallet-summary-report";
-
 
1540
            }
-
 
1541
 
-
 
1542
        } else {
-
 
1543
 
-
 
1544
 
-
 
1545
            FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoId);
-
 
1546
            List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository
-
 
1547
                    .selectWalletSummaryReport(loginDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1548
            //LOGGER.info("walletSummartList {}", walletSummartList);
-
 
1549
 
-
 
1550
            model.addAttribute("walletSummartList", walletSummartList);
-
 
1551
 
-
 
1552
            return "wallet-summary-report";
-
 
1553
        }
-
 
1554
    }
-
 
1555
 
-
 
1556
    @RequestMapping(value = "/walletSummaryReport", method = RequestMethod.GET)
-
 
1557
    public String getWalletSummaryReport(HttpServletRequest request, Model model) throws Exception {
-
 
1558
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1559
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
-
 
1560
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
-
 
1561
        LocalDateTime currentStartMonth = currentDate.minusDays(30).toLocalDate().atStartOfDay();
-
 
1562
 
-
 
1563
        List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository
-
 
1564
                .selectWalletSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
-
 
1565
        LOGGER.info("walletSummartList {}", walletSummartList);
-
 
1566
 
-
 
1567
        model.addAttribute("startDate", currentDate.minusDays(30).toLocalDate());
-
 
1568
        model.addAttribute("endDate", LocalDate.now());
-
 
1569
        model.addAttribute("walletSummartList", walletSummartList);
-
 
1570
        model.addAttribute("isAdmin", isAdmin);
-
 
1571
 
-
 
1572
        return "wallet-summary-report";
-
 
1573
    }
-
 
1574
 
-
 
1575
    @RequestMapping(value = "/pendingIndentReport", method = RequestMethod.GET)
-
 
1576
    public String getPendingIndentReport(HttpServletRequest request, Model model) throws Exception {
-
 
1577
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1578
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
-
 
1579
 
-
 
1580
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
-
 
1581
        LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();
-
 
1582
 
-
 
1583
        List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
-
 
1584
                .selectPendingIndentReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
-
 
1585
        LOGGER.info("pendingIndentReports {}", pendingIndentReports);
-
 
1586
 
-
 
1587
        model.addAttribute("startDate", currentDate.minusMonths(2).toLocalDate());
-
 
1588
        model.addAttribute("endDate", LocalDate.now());
-
 
1589
        model.addAttribute("pendingIndentReports", pendingIndentReports);
-
 
1590
        model.addAttribute("isAdmin", isAdmin);
-
 
1591
 
-
 
1592
 
-
 
1593
        return "pending-indent-report";
-
 
1594
    }
-
 
1595
    @RequestMapping(value = "/pendingIndentFetchReportByDate", method = RequestMethod.GET)
-
 
1596
    public String getpendingIndentFetchReport(
-
 
1597
            HttpServletRequest request,
-
 
1598
            @RequestParam(defaultValue = "0") int fofoId,
-
 
1599
            @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
-
 
1600
            @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate,
-
 
1601
            Model model
-
 
1602
    ) throws Exception {
-
 
1603
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1604
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
-
 
1605
        if (startDate == null) {
-
 
1606
            startDate = LocalDate.now().minusDays(30);
-
 
1607
            endDate = LocalDate.now();
-
 
1608
        }
-
 
1609
        model.addAttribute("startDate", startDate);
-
 
1610
        model.addAttribute("endDate", endDate);
-
 
1611
        model.addAttribute("isAdmin", isAdmin);
-
 
1612
        if (isAdmin) {
-
 
1613
            if (fofoId == 0) {
-
 
1614
                model.addAttribute("pendingIndentReports", new ArrayList<>());
-
 
1615
                return "pending-indent-report";
-
 
1616
            } else {
-
 
1617
                List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
-
 
1618
                        .selectPendingIndentReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1619
                model.addAttribute("pendingIndentReports", pendingIndentReports);
-
 
1620
                return "pending-indent-report";
-
 
1621
            }
-
 
1622
        } else {
-
 
1623
            LocalDateTime currentDate = LocalDate.now().atStartOfDay();
-
 
1624
            List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
-
 
1625
                    .selectPendingIndentReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1626
            model.addAttribute("pendingIndentReports", pendingIndentReports);
-
 
1627
            return "pending-indent-report";
-
 
1628
 
-
 
1629
        }
-
 
1630
    }
-
 
1631
 
-
 
1632
 
-
 
1633
    @RequestMapping(value = "/pendingIndentReportDownload", method = RequestMethod.GET)
-
 
1634
    public ResponseEntity<?> getPendingIndentReportDownload(HttpServletRequest request,
-
 
1635
                                                            @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
-
 
1636
                                                            @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
-
 
1637
            throws Exception{
-
 
1638
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1639
        /*LocalDateTime currentDate = LocalDate.now().atStartOfDay();
-
 
1640
        LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();*/
-
 
1641
        List<List<?>> rows = new ArrayList<>();
-
 
1642
        List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
-
 
1643
                .selectPendingIndentReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1644
        LOGGER.info("pendingIndentReports {}", pendingIndentReports);
-
 
1645
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
-
 
1646
 
-
 
1647
        for (PendingIndentReportModel pir : pendingIndentReports) {
-
 
1648
 
-
 
1649
            rows.add(Arrays.asList(pir.getTransactionId(), pir.getOrderId(),
-
 
1650
                    pir.getCreatTimestamp().format(dateTimeFormatter), pir.getItemId(), pir.getBrand(),
-
 
1651
                    pir.getModelName(), pir.getModelNumber(), pir.getColor(), pir.getQuantity(), pir.getUnitPrice(),
-
 
1652
                    pir.getWalletAmount(), pir.getStatus(), pir.getInvoiceNumber(),
-
 
1653
                    pir.getBillingTimestamp().format(dateTimeFormatter)));
-
 
1654
 
-
 
1655
        }
-
 
1656
 
-
 
1657
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList(
-
 
1658
                "Transaction Id", "Order Id", "Created_At", "Item_Id", "Brand", "Model Name", "Model Number", "Color",
-
 
1659
                "Quantity", "Unit Price", "Wallet Deduction", "Status", "Invoice Number", "Billing Timestamp"), rows);
-
 
1660
 
-
 
1661
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Order Status Summary Report");
-
 
1662
 
-
 
1663
        return responseEntity;
-
 
1664
    }
-
 
1665
 
-
 
1666
    @RequestMapping(value = "/schemePayoutReport", method = RequestMethod.GET)
-
 
1667
    public String getschemePayoutReport(HttpServletRequest request, Model model,
-
 
1668
                                           @RequestParam(required = false) LocalDate startDate, @RequestParam(required = false) LocalDate endDate)
-
 
1669
            throws ProfitMandiBusinessException {
-
 
1670
    //public String getSchemePayoutReport(HttpServletRequest request, Model model) throws Exception {
-
 
1671
        //LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1672
    LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1673
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1674
               if (startDate == null) {
-
 
1675
                       startDate = LocalDate.now().minusDays(30);
-
 
1676
                       endDate = LocalDate.now();
-
 
1677
                   }model.addAttribute("startDate", startDate);
-
 
1678
               model.addAttribute("endDate", endDate);
-
 
1679
                model.addAttribute("isAdmin", isAdmin);
-
 
1680
        //LocalDateTime currentDate = LocalDate.now().atStartOfDay();
-
 
1681
       // LocalDateTime startDate = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
-
 
1682
 
-
 
1683
       // List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
-
 
1684
                //.selectSchemePayoutReport(fofoDetails.getFofoId(), startDate, currentDate);
-
 
1685
        //LOGGER.info("schemePayoutReports {}", schemePayoutReports);
-
 
1686
        List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
-
 
1687
        .selectSchemePayoutReport(loginDetails.getFofoId(),  startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1688
        model.addAttribute("schemePayoutReports", schemePayoutReports);
-
 
1689
        return "scheme-payout-report";
-
 
1690
 
-
 
1691
    }
-
 
1692
    @RequestMapping(value = "/schemePayoutFetchReportByDate", method = RequestMethod.GET)
-
 
1693
    public String getschemePayoutFetchReportByDate(
-
 
1694
            HttpServletRequest request,
-
 
1695
            Model model,
-
 
1696
            @RequestParam(defaultValue = "0") int fofoId,
-
 
1697
            @RequestParam(required = false) LocalDate startDate,
-
 
1698
            @RequestParam(required = false) LocalDate endDate)
-
 
1699
            throws ProfitMandiBusinessException {
-
 
1700
        //LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1701
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1702
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1703
        if (startDate == null) {
-
 
1704
            startDate = LocalDate.now().minusDays(30);
-
 
1705
            endDate = LocalDate.now();
-
 
1706
        }
-
 
1707
        model.addAttribute("startDate", startDate);
-
 
1708
        model.addAttribute("endDate", endDate);
-
 
1709
        model.addAttribute("isAdmin", isAdmin);
-
 
1710
 
-
 
1711
        LOGGER.info("q {}, starDate - {}, endDate - {}", fofoId, startDate, endDate);
-
 
1712
        if (isAdmin) {
-
 
1713
            if (fofoId == 0) {
-
 
1714
                //No need to pull any data
-
 
1715
                model.addAttribute("schemePayoutReports", new ArrayList<>());
-
 
1716
                return "scheme-payout-report";
-
 
1717
 
-
 
1718
            }
-
 
1719
            else{
-
 
1720
                List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
-
 
1721
                        .selectSchemePayoutReport(fofoId,  startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1722
 
-
 
1723
                model.addAttribute("schemePayoutReports", schemePayoutReports);
-
 
1724
                return "scheme-payout-report";
-
 
1725
            }
-
 
1726
        } else {
-
 
1727
            fofoId = loginDetails.getFofoId();
-
 
1728
 
-
 
1729
            List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
-
 
1730
                    .selectSchemePayoutReport(fofoId,  startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1731
 
-
 
1732
            model.addAttribute("schemePayoutReports", schemePayoutReports);
-
 
1733
            return "scheme-payout-report";
-
 
1734
        }
-
 
1735
 
-
 
1736
    }
-
 
1737
 
-
 
1738
    @RequestMapping(value = "/offerPayoutReport", method = RequestMethod.GET)
-
 
1739
    public String getOfferPayoutReport(HttpServletRequest request, Model model, @RequestParam(required = false) LocalDate startDate, @RequestParam(required = false) LocalDate endDate) throws Exception {
-
 
1740
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1741
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
-
 
1742
 
-
 
1743
        if (startDate == null) {
-
 
1744
            startDate = LocalDate.now().minusDays(30);
-
 
1745
            endDate = LocalDate.now();
-
 
1746
        }
-
 
1747
        model.addAttribute("startDate", startDate);
-
 
1748
        model.addAttribute("endDate", endDate);
-
 
1749
 
-
 
1750
 
-
 
1751
        List<OfferPayoutDumpReportModel> offerPayoutDumpReports = fofoOrderRepository
-
 
1752
                .selectOfferPayoutDumpReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1753
        LOGGER.info("offerPayoutDumpReports {}", offerPayoutDumpReports);
-
 
1754
 
-
 
1755
        model.addAttribute("offerPayoutDumpReports", offerPayoutDumpReports);
-
 
1756
        model.addAttribute("isAdmin", isAdmin);
-
 
1757
 
-
 
1758
        return "offer-payout-dump-report";
-
 
1759
    }
-
 
1760
    @RequestMapping(value = "/offerPayoutFetchReportByDate", method = RequestMethod.GET)
-
 
1761
    public String getofferPayoutFetchReportByDate(HttpServletRequest request, Model model, @RequestParam(defaultValue = "0") int fofoId,
-
 
1762
                                       @RequestParam(required = false) LocalDate startDate, @RequestParam(required = false) LocalDate endDate)
-
 
1763
            throws ProfitMandiBusinessException {
-
 
1764
 
-
 
1765
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1766
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
1767
        if (startDate == null) {
-
 
1768
            startDate = LocalDate.now().minusDays(30);
-
 
1769
            endDate = LocalDate.now();
-
 
1770
        }
-
 
1771
        model.addAttribute("startDate", startDate);
-
 
1772
        model.addAttribute("endDate", endDate);
-
 
1773
        model.addAttribute("isAdmin", isAdmin);
-
 
1774
        LOGGER.info("q {}, starDate - {}, endDate - {}", fofoId, startDate, endDate);
-
 
1775
        if (isAdmin) {
-
 
1776
            if (fofoId == 0) {
-
 
1777
                //No need to pull any data
-
 
1778
                model.addAttribute("offerPayoutReports", new ArrayList<>());
-
 
1779
                return "offer-payout-dump-report";
-
 
1780
 
-
 
1781
            }
-
 
1782
            else{
-
 
1783
                List<OfferPayoutDumpReportModel> offerPayoutDumpReports = fofoOrderRepository
-
 
1784
                        .selectOfferPayoutDumpReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1785
 
-
 
1786
                model.addAttribute("offerPayoutDumpReports", offerPayoutDumpReports);
-
 
1787
 
-
 
1788
 
-
 
1789
                return "offer-payout-dump-report";
-
 
1790
 
-
 
1791
            }
-
 
1792
        } else {
-
 
1793
            fofoId = loginDetails.getFofoId();
-
 
1794
            List<OfferPayoutDumpReportModel> offerPayoutDumpReports = fofoOrderRepository
-
 
1795
                    .selectOfferPayoutDumpReport(fofoId, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1796
 
-
 
1797
            model.addAttribute("offerPayoutDumpReports", offerPayoutDumpReports);
-
 
1798
 
-
 
1799
 
-
 
1800
            return "offer-payout-dump-report";
-
 
1801
        }
-
 
1802
    }
-
 
1803
 
-
 
1804
 
-
 
1805
    @RequestMapping(value = "/selectPartnerBillingSummaryReport", method = RequestMethod.GET)
-
 
1806
    public String getselectPartnerBillingSummaryReport(HttpServletRequest request, Model model) throws Exception {
-
 
1807
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1808
 
-
 
1809
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
-
 
1810
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
-
 
1811
 
-
 
1812
        List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
-
 
1813
                .selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
-
 
1814
 
-
 
1815
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
-
 
1816
        model.addAttribute("endDate", LocalDate.now());
-
 
1817
        model.addAttribute("partnerBillingSummaryReports", partnerBillingSummaryReports);
-
 
1818
 
-
 
1819
        return "partner-billing-summary-report";
-
 
1820
    }
-
 
1821
 
-
 
1822
    @RequestMapping(value = "/priceDropReport", method = RequestMethod.GET)
-
 
1823
    public String getSelectPriceDropReport(HttpServletRequest request, @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
-
 
1824
                                           @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model) throws Exception {
-
 
1825
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1826
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
-
 
1827
        if (startDate == null) {
-
 
1828
            startDate = LocalDate.now().minusDays(30);
-
 
1829
            endDate = LocalDate.now();
-
 
1830
        }
-
 
1831
        model.addAttribute("startDate", startDate);
-
 
1832
        model.addAttribute("endDate", endDate);
-
 
1833
        model.addAttribute("isAdmin", isAdmin);
-
 
1834
        List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
-
 
1835
                startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1836
        model.addAttribute("priceDropReports", priceDropReports);
-
 
1837
 
-
 
1838
        return "price-drop-report";
-
 
1839
    }
-
 
1840
    @RequestMapping(value = "/priceDropFetchReportByDate", method = RequestMethod.GET)
-
 
1841
    public String getpriceDropFetchReportByDate(HttpServletRequest request,
-
 
1842
                                                @RequestParam(defaultValue = "0") int fofoId,
-
 
1843
                                                @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
-
 
1844
                                                @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
-
 
1845
            throws Exception {
-
 
1846
 
-
 
1847
            LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1848
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
-
 
1849
        if (startDate == null) {
-
 
1850
            startDate = LocalDate.now().minusDays(30);
-
 
1851
            endDate = LocalDate.now();
-
 
1852
        }
-
 
1853
        model.addAttribute("startDate", startDate);
-
 
1854
        model.addAttribute("endDate", endDate);
-
 
1855
        model.addAttribute("isAdmin", isAdmin);
-
 
1856
        if (isAdmin) {
-
 
1857
            if (fofoId == 0) {
-
 
1858
                model.addAttribute("priceDropReports", new ArrayList<>());
-
 
1859
                return "price-drop-report";
-
 
1860
            } else {
-
 
1861
                List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoId,
-
 
1862
                        startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1863
                model.addAttribute("priceDropReports", priceDropReports);
-
 
1864
                return "price-drop-report";
-
 
1865
            }
-
 
1866
 
-
 
1867
        } else {
-
 
1868
            List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
-
 
1869
                    startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1870
            model.addAttribute("priceDropReports", priceDropReports);
-
 
1871
            return "price-drop-report";
-
 
1872
        }
-
 
1873
    }
-
 
1874
 
-
 
1875
 
-
 
1876
    @RequestMapping(value = "/downloadPriceDropReport", method = RequestMethod.GET)
-
 
1877
    public ResponseEntity<?> getSelectDownloadPriceDropReport(HttpServletRequest request,
-
 
1878
                                                              @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
-
 
1879
                                                              @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
-
 
1880
            throws Exception {
-
 
1881
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1882
 
-
 
1883
        List<List<?>> rows = new ArrayList<>();
-
 
1884
        List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
-
 
1885
                startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
1886
 
-
 
1887
        for (PriceDropReportModel pdr : priceDropReports) {
-
 
1888
 
-
 
1889
            rows.add(Arrays.asList(pdr.getCode(), pdr.getId(), pdr.getBrand(), pdr.getModelName(), pdr.getModelNumber(),
-
 
1890
                    pdr.getAffectedOn(), pdr.getAmount(), pdr.getPartnerPayout(), pdr.getImei(), pdr.getStatus(),
-
 
1891
                    pdr.getUpdateTimestamp(), pdr.getRejectionReason()));
-
 
1892
 
-
 
1893
        }
-
 
1894
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
-
 
1895
                .getCSVByteStream(Arrays.asList("code", "Price_Drop_Id", "brand", "model_name", "model_number",
-
 
1896
                        "affected_on", "amount", "partner_payout", "Imei", "status", "processed_on", "Reason"), rows);
-
 
1897
 
-
 
1898
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "price drop report");
-
 
1899
 
-
 
1900
        return responseEntity;
-
 
1901
 
-
 
1902
    }
-
 
1903
 
-
 
1904
    @RequestMapping(value = "/downloadPartnerBillingSummaryReport", method = RequestMethod.GET)
-
 
1905
    public ResponseEntity<?> getdownloadPartnerBillingSummaryReport(HttpServletRequest request,
-
 
1906
                                                                    @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
-
 
1907
                                                                    @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
-
 
1908
            throws Exception {
-
 
1909
 
-
 
1910
        List<List<?>> rows = new ArrayList<>();
-
 
1911
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1912
 
-
 
1913
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
-
 
1914
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
-
 
1915
 
-
 
1916
        List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
-
 
1917
                .selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), startDate.atStartOfDay(),
-
 
1918
                        endDate.atTime(LocalTime.MAX));
-
 
1919
 
-
 
1920
        for (PartnerBillingSummaryModel pbsr : partnerBillingSummaryReports) {
-
 
1921
 
-
 
1922
            rows.add(Arrays.asList(pbsr.getId(),
-
 
1923
                    FormattingUtils.format(pbsr.getCreateTimestamp()),
-
 
1924
                    FormattingUtils.format(pbsr.getBillingTimestamp()),
-
 
1925
                    FormattingUtils.format(pbsr.getDeliveryTimestamp()),
-
 
1926
                    FormattingUtils.format(pbsr.getPartnerGrnTimestamp()),
-
 
1927
                    pbsr.getTransactionId(),
-
 
1928
                    pbsr.getLogisticsTransactionId(), pbsr.getAirwayBillNumber(), pbsr.getStatusSubGroup(),
-
 
1929
                    pbsr.getStatusName(), pbsr.getRetailerId(), pbsr.getRetailerName(), pbsr.getItemId(),
-
 
1930
                    pbsr.getBrand(), pbsr.getModelName(), pbsr.getModelNumber(), pbsr.getColor(), pbsr.getUnitPrice(),
-
 
1931
                    pbsr.getQuantity(), pbsr.getTotalPrice(), pbsr.getInvoiceNumber(),pbsr.getSellerName(),pbsr.getGstNumber(),pbsr.getHsnCode(), pbsr.getIgstRate(),
-
 
1932
                    pbsr.getCgstRate(), pbsr.getSgstRate()));
-
 
1933
 
-
 
1934
        }
-
 
1935
 
-
 
1936
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("OrderId",
-
 
1937
                "Created On", "Billed On", "Delivered On", "Grned On", "Transaction_id", "master_order_id",
-
 
1938
                "airwaybill_no", "statusSubGroupp", "statusName", "customer_id", "customer_name", "Item_Id", "brand",
-
 
1939
                "model_name", "model_number", "color", "selling_price", "Quantity", "total_price", "invoice_number",
-
 
1940
                "seller_name","gst_number","hsn_code","igstrate", "cgstrate", "sgstrate"), rows);
-
 
1941
 
-
 
1942
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Billing Statement Report");
-
 
1943
 
-
 
1944
        return responseEntity;
-
 
1945
 
-
 
1946
 
-
 
1947
    }
-
 
1948
 
-
 
1949
    @RequestMapping(value = "/invoiceSchemeOutSummaryReport", method = RequestMethod.GET)
-
 
1950
    public String getInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model) throws Exception {
-
 
1951
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1952
 
-
 
1953
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
-
 
1954
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
-
 
1955
 
-
 
1956
        List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
-
 
1957
                .selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
-
 
1958
        LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
-
 
1959
 
-
 
1960
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
-
 
1961
        model.addAttribute("endDate", LocalDate.now());
-
 
1962
        model.addAttribute("focoSchemeOutReports", focoSchemeOutReports);
-
 
1963
 
-
 
1964
        return "invoicewise-scheme-out-report";
-
 
1965
    }
-
 
1966
 
-
 
1967
    @RequestMapping(value = "/downloadInvoiceSchemeOutSummaryReport", method = RequestMethod.GET)
-
 
1968
    public ResponseEntity<?> getDownloadInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model)
-
 
1969
            throws Exception {
-
 
1970
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1971
 
-
 
1972
        List<List<?>> rows = new ArrayList<>();
-
 
1973
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
-
 
1974
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
-
 
1975
 
-
 
1976
        List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
-
 
1977
                .selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
-
 
1978
        LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
-
 
1979
 
-
 
1980
        for (FocoSchemeOutReportModel fsor : focoSchemeOutReports) {
-
 
1981
            rows.add(Arrays.asList(fsor.getInvoiceNumber(), fsor.getQuantity(), fsor.getBrand(), fsor.getModelName(),
-
 
1982
                    fsor.getModelNumber(), fsor.getColor(), fsor.getAmount()));
-
 
1983
 
-
 
1984
        }
-
 
1985
 
-
 
1986
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
-
 
1987
                Arrays.asList("InvoiceNumber", "Quantity", "Brand", "Model Name", "Model Number", "Color", "Amount"),
-
 
1988
                rows);
-
 
1989
 
-
 
1990
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows,
-
 
1991
                "invoice wise scheme out Summary Report");
-
 
1992
 
-
 
1993
        return responseEntity;
-
 
1994
    }
-
 
1995
 
-
 
1996
   @RequestMapping(value = "/schemePayoutReportDownload", method = RequestMethod.GET)
-
 
1997
    public ResponseEntity<?> getSchemePayoutReportDownload(HttpServletRequest request,
-
 
1998
                                                           @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
-
 
1999
                                                           @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
-
 
2000
            throws Exception {
-
 
2001
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
2002
 
-
 
2003
        List<List<?>> rows = new ArrayList<>();
-
 
2004
 
-
 
2005
 
-
 
2006
        List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
-
 
2007
                .selectSchemePayoutReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
2008
        LOGGER.info("schemePayoutReports {}", schemePayoutReports);
-
 
2009
 
-
 
2010
        for (SchemePayoutReportModel spr : schemePayoutReports) {
-
 
2011
 
-
 
2012
            rows.add(Arrays.asList(spr.getId(), spr.getSerialNumber(), spr.getBrand(), spr.getModelName(),
-
 
2013
                    spr.getModelNumber(), spr.getColor(), spr.getSchemeInDp(), spr.getSchemeOutDp(), spr.getSchemeId(),
-
 
2014
                    spr.getName(), spr.getType(), spr.getAmountType(), spr.getPurchaseReference(),
-
 
2015
                    spr.getInvoiceNumber(), spr.getSioAmount(), spr.getStatus(), spr.getStatusDescription(),
-
 
2016
                    spr.getCreateTimestamp(), spr.getRolledBackTimestamp()));
-
 
2017
 
-
 
2018
        }
-
 
2019
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("Item_Id",
-
 
2020
                "serial_number", "Brand", "Model Name", "Model Number", "Color", "Scheme_IN_DP", "Scheme_out_dp",
-
 
2021
                "Scheme_Id", "Name", "Type", "amount", "Purchase_Invoice", "SALE_INOVOICE", "Amount", "status",
-
 
2022
                "description", "create_timestamp", "rolled_back_timestamp"), rows);
-
 
2023
 
-
 
2024
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Scheme Payout Summary Report");
-
 
2025
 
-
 
2026
        return responseEntity;
-
 
2027
    }
-
 
2028
 
-
 
2029
 
-
 
2030
 
-
 
2031
    @RequestMapping(value = "/offerPayoutDumpReportDownload", method = RequestMethod.GET)
-
 
2032
    public ResponseEntity<?> getOfferPayoutDumpReportDownload(HttpServletRequest request,
-
 
2033
                                                           @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
-
 
2034
                                                           @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
-
 
2035
            throws Exception {
-
 
2036
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
2037
 
-
 
2038
        List<List<?>> rows = new ArrayList<>();
-
 
2039
 
-
 
2040
 
-
 
2041
        List<OfferPayoutDumpReportModel> offerPayoutReports = fofoOrderRepository
-
 
2042
                .selectOfferPayoutDumpReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
-
 
2043
 
-
 
2044
 
-
 
2045
        for (OfferPayoutDumpReportModel opdr : offerPayoutReports) {
-
 
2046
 
-
 
2047
            rows.add(Arrays.asList(opdr.getId(),  opdr.getBrand(), opdr.getModelName(),
-
 
2048
                    opdr.getModelNumber(), opdr.getColor(), opdr.getSerialNumber(), opdr.getOfferId(),
-
 
2049
                    opdr.getName(), opdr.getType(),
-
 
2050
                    opdr.getSlabAmount(), opdr.getAmount(),opdr.getDescription(),
-
 
2051
                    opdr.getCreateTimestamp(), opdr.getRejectTimestamp()));
-
 
2052
 
-
 
2053
        }
-
 
2054
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("Id",
-
 
2055
                "Brand", "Model Name", "Model Number", "Color","Serial number",
-
 
2056
                "Offer Id", "Name", "Type", "Slab Amount","Amount",
-
 
2057
                "Description", "Credited On", "Rejected On"), rows);
-
 
2058
 
-
 
2059
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Offer Payout Summary Report");
-
 
2060
 
-
 
2061
        return responseEntity;
-
 
2062
    }
-
 
2063
 
-
 
2064
 
-
 
2065
 
-
 
2066
 
-
 
2067
    @GetMapping("/getAllOnlineOrder")
-
 
2068
    public String getAllOrders(HttpServletRequest request, @RequestParam(required = false) LocalDate date, Model model)
-
 
2069
            throws ProfitMandiBusinessException {
-
 
2070
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
2071
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
-
 
2072
        if (date == null) {
-
 
2073
            date = LocalDate.now().minusDays(3);
-
 
2074
        }
-
 
2075
 
-
 
2076
        LOGGER.info("date" + date);
-
 
2077
        List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
-
 
2078
                .collect(Collectors.toList());
-
 
2079
 
-
 
2080
        Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
-
 
2081
 
-
 
2082
        Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
-
 
2083
                .filter(x -> x != null).collect(Collectors.toList()).stream()
-
 
2084
                .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
-
 
2085
 
-
 
2086
        model.addAttribute("customRetailersMap", customRetailersMap);
-
 
2087
 
-
 
2088
        List<PendingOrderItem> pendingOrderItem = null;
-
 
2089
 
-
 
2090
        pendingOrderItem = pendingOrderItemRepository.selectAll(date.atStartOfDay(), LocalDateTime.now());
-
 
2091
 
-
 
2092
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, 0);
-
 
2093
 
-
 
2094
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
-
 
2095
        model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
-
 
2096
        model.addAttribute("date", date);
-
 
2097
        model.addAttribute("isAdmin", isAdmin);
-
 
2098
        return "online-all-order-item";
-
 
2099
    }
-
 
2100
}
1363
}
2101
 
1364
 
2102
 
1365
 
2103
 
1366
 
2104
 
1367