Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
21612 ashik.ali 1
package com.spice.profitmandi.web.controller;
2
 
21689 ashik.ali 3
import java.io.ByteArrayInputStream;
4
import java.io.ByteArrayOutputStream;
5
import java.io.InputStream;
23638 amit.gupta 6
import java.time.LocalDateTime;
7
import java.time.temporal.ChronoUnit;
24844 amit.gupta 8
import java.util.ArrayList;
23654 amit.gupta 9
import java.util.Arrays;
23343 ashik.ali 10
import java.util.HashMap;
21612 ashik.ali 11
import java.util.HashSet;
21680 ashik.ali 12
import java.util.List;
13
import java.util.Map;
21612 ashik.ali 14
import java.util.Set;
23638 amit.gupta 15
import java.util.stream.Collectors;
21612 ashik.ali 16
 
17
import javax.servlet.http.HttpServletRequest;
21689 ashik.ali 18
import javax.servlet.http.HttpServletResponse;
21612 ashik.ali 19
 
23638 amit.gupta 20
import org.apache.logging.log4j.LogManager;
23568 govind 21
import org.apache.logging.log4j.Logger;
21612 ashik.ali 22
import org.springframework.beans.factory.annotation.Autowired;
21689 ashik.ali 23
import org.springframework.core.io.InputStreamResource;
24
import org.springframework.http.HttpHeaders;
25
import org.springframework.http.HttpStatus;
26
import org.springframework.http.MediaType;
27
import org.springframework.http.ResponseEntity;
21612 ashik.ali 28
import org.springframework.stereotype.Controller;
22064 ashik.ali 29
import org.springframework.transaction.annotation.Transactional;
21985 kshitij.so 30
import org.springframework.ui.Model;
24880 govind 31
import org.springframework.web.bind.annotation.GetMapping;
23654 amit.gupta 32
import org.springframework.web.bind.annotation.PathVariable;
24105 govind 33
import org.springframework.web.bind.annotation.PutMapping;
21612 ashik.ali 34
import org.springframework.web.bind.annotation.RequestBody;
35
import org.springframework.web.bind.annotation.RequestMapping;
36
import org.springframework.web.bind.annotation.RequestMethod;
21689 ashik.ali 37
import org.springframework.web.bind.annotation.RequestParam;
21612 ashik.ali 38
 
23203 ashik.ali 39
import com.spice.profitmandi.common.enumuration.SearchType;
21612 ashik.ali 40
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
21985 kshitij.so 41
import com.spice.profitmandi.common.model.CartFofo;
22860 ashik.ali 42
import com.spice.profitmandi.common.model.CreateOrderRequest;
23654 amit.gupta 43
import com.spice.profitmandi.common.model.CreditNotePdfModel;
23584 ashik.ali 44
import com.spice.profitmandi.common.model.CustomCustomer;
23638 amit.gupta 45
import com.spice.profitmandi.common.model.FoiBadReturnRequest;
24105 govind 46
import com.spice.profitmandi.common.model.PaymentOptionTransactionModel;
22660 ashik.ali 47
import com.spice.profitmandi.common.model.PdfModel;
22581 ashik.ali 48
import com.spice.profitmandi.common.model.PriceModel;
21612 ashik.ali 49
import com.spice.profitmandi.common.model.ProfitMandiConstants;
21689 ashik.ali 50
import com.spice.profitmandi.common.util.PdfUtils;
23638 amit.gupta 51
import com.spice.profitmandi.common.util.StringUtils;
22244 ashik.ali 52
import com.spice.profitmandi.common.web.util.ResponseSender;
23638 amit.gupta 53
import com.spice.profitmandi.dao.entity.catalog.Item;
22217 ashik.ali 54
import com.spice.profitmandi.dao.entity.dtr.InsurancePolicy;
23343 ashik.ali 55
import com.spice.profitmandi.dao.entity.dtr.InsuranceProvider;
23548 ashik.ali 56
import com.spice.profitmandi.dao.entity.dtr.PaymentOptionTransaction;
21728 ashik.ali 57
import com.spice.profitmandi.dao.entity.fofo.Customer;
58
import com.spice.profitmandi.dao.entity.fofo.CustomerAddress;
23654 amit.gupta 59
import com.spice.profitmandi.dao.entity.fofo.CustomerCreditNote;
60
import com.spice.profitmandi.dao.entity.fofo.CustomerReturnItem;
23638 amit.gupta 61
import com.spice.profitmandi.dao.entity.fofo.FofoLineItem;
22927 ashik.ali 62
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
22860 ashik.ali 63
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
21728 ashik.ali 64
import com.spice.profitmandi.dao.entity.fofo.PaymentOption;
23298 ashik.ali 65
import com.spice.profitmandi.dao.entity.user.Address;
23548 ashik.ali 66
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
23638 amit.gupta 67
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
22217 ashik.ali 68
import com.spice.profitmandi.dao.repository.dtr.InsurancePolicyRepository;
23343 ashik.ali 69
import com.spice.profitmandi.dao.repository.dtr.InsuranceProviderRepository;
23638 amit.gupta 70
import com.spice.profitmandi.dao.repository.dtr.PaymentOptionTransactionRepository;
23298 ashik.ali 71
import com.spice.profitmandi.dao.repository.dtr.RetailerRegisteredAddressRepository;
21728 ashik.ali 72
import com.spice.profitmandi.dao.repository.fofo.CustomerAddressRepository;
73
import com.spice.profitmandi.dao.repository.fofo.CustomerRepository;
23650 amit.gupta 74
import com.spice.profitmandi.dao.repository.fofo.CustomerReturnItemRepository;
22860 ashik.ali 75
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
21728 ashik.ali 76
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
23366 ashik.ali 77
import com.spice.profitmandi.dao.repository.fofo.FofoPartnerPaymentOptionRepository;
21728 ashik.ali 78
import com.spice.profitmandi.dao.repository.fofo.PaymentOptionRepository;
24440 amit.gupta 79
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
23298 ashik.ali 80
import com.spice.profitmandi.dao.repository.user.AddressRepository;
23798 amit.gupta 81
import com.spice.profitmandi.service.authentication.RoleManager;
24440 amit.gupta 82
import com.spice.profitmandi.service.integrations.zest.MobileInsurancePlan;
83
import com.spice.profitmandi.service.integrations.zest.ZestService;
23366 ashik.ali 84
import com.spice.profitmandi.service.order.OrderService;
22069 ashik.ali 85
import com.spice.profitmandi.service.pricing.PricingService;
22139 amit.gupta 86
import com.spice.profitmandi.web.model.LoginDetails;
22069 ashik.ali 87
import com.spice.profitmandi.web.util.CookiesProcessor;
24105 govind 88
import com.spice.profitmandi.web.util.MVCResponseSender;
21612 ashik.ali 89
 
90
@Controller
23973 govind 91
@Transactional(rollbackFor = Throwable.class)
21612 ashik.ali 92
public class OrderController {
93
 
23568 govind 94
	private static final Logger LOGGER = LogManager.getLogger(OrderController.class);
21985 kshitij.so 95
 
21612 ashik.ali 96
	@Autowired
22860 ashik.ali 97
	private CustomerRepository customerRepository;
23973 govind 98
 
23821 amit.gupta 99
	private boolean accessoriesDeals = true;
21985 kshitij.so 100
 
21612 ashik.ali 101
	@Autowired
23786 amit.gupta 102
	private RoleManager roleManager;
23973 govind 103
 
23786 amit.gupta 104
	@Autowired
23654 amit.gupta 105
	private CustomerReturnItemRepository customerReturnItemRepository;
23973 govind 106
 
23654 amit.gupta 107
	@Autowired
23638 amit.gupta 108
	private FofoOrderItemRepository fofoOrderItemRepository;
21985 kshitij.so 109
 
21612 ashik.ali 110
	@Autowired
22860 ashik.ali 111
	private PaymentOptionRepository paymentOptionRepository;
24844 amit.gupta 112
 
24440 amit.gupta 113
	@Autowired
114
	private StateRepository stateRepository;
23973 govind 115
 
23638 amit.gupta 116
	@Autowired
117
	private ItemRepository itemRepository;
21985 kshitij.so 118
 
21680 ashik.ali 119
	@Autowired
24105 govind 120
	private MVCResponseSender mvcResponseSender;
24844 amit.gupta 121
 
24440 amit.gupta 122
	@Autowired
123
	private ZestService zestService;
24105 govind 124
 
125
	@Autowired
22860 ashik.ali 126
	private FofoOrderRepository fofoOrderRepository;
21985 kshitij.so 127
 
21680 ashik.ali 128
	@Autowired
22860 ashik.ali 129
	private CustomerAddressRepository customerAddressRepository;
23973 govind 130
 
22217 ashik.ali 131
	@Autowired
22860 ashik.ali 132
	private InsurancePolicyRepository insurancePolicyRepository;
23973 govind 133
 
23343 ashik.ali 134
	@Autowired
135
	private InsuranceProviderRepository insuranceProviderRepository;
21985 kshitij.so 136
 
21896 ashik.ali 137
	@Autowired
22860 ashik.ali 138
	private CookiesProcessor cookiesProcessor;
23973 govind 139
 
22069 ashik.ali 140
	@Autowired
22860 ashik.ali 141
	private PricingService pricingService;
23973 govind 142
 
22354 ashik.ali 143
	@Autowired
22860 ashik.ali 144
	private OrderService orderService;
23973 govind 145
 
23298 ashik.ali 146
	@Autowired
147
	private RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
23973 govind 148
 
22354 ashik.ali 149
	@Autowired
23298 ashik.ali 150
	private AddressRepository addressRepository;
23973 govind 151
 
23298 ashik.ali 152
	@Autowired
23548 ashik.ali 153
	private PaymentOptionTransactionRepository fofoOrderPaymentOptionRepository;
23973 govind 154
 
23366 ashik.ali 155
	@Autowired
156
	private FofoPartnerPaymentOptionRepository fofoPartnerPaymentOptionRepository;
23973 govind 157
 
23419 ashik.ali 158
	@Autowired
22860 ashik.ali 159
	private ResponseSender<?> responseSender;
23973 govind 160
 
21985 kshitij.so 161
	@RequestMapping(value = "/order")
23973 govind 162
	public String orderIndex(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
163
			throws ProfitMandiBusinessException {
164
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
165
		;
166
 
23298 ashik.ali 167
		int addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(loginDetails.getFofoId());
168
		Address address = addressRepository.selectById(addressId);
23973 govind 169
 
22860 ashik.ali 170
		List<CartFofo> cartItems = orderService.cartCheckout(cartData);
171
		Set<Integer> itemIds = new HashSet<>();
23973 govind 172
		for (CartFofo cartFofo : cartItems) {
22860 ashik.ali 173
			itemIds.add(cartFofo.getItemId());
21985 kshitij.so 174
		}
23973 govind 175
		Map<Integer, PriceModel> mopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIds,
176
				loginDetails.getFofoId());
177
		List<Integer> paymentOptionIds = fofoPartnerPaymentOptionRepository
178
				.selectPaymentOptionIdsByFofoId(loginDetails.getFofoId());
23366 ashik.ali 179
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(new HashSet<>(paymentOptionIds));
22860 ashik.ali 180
		LOGGER.info("mopPriceMap {}", mopPriceMap);
24844 amit.gupta 181
		model.addAttribute("stateNames",
182
				stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
23298 ashik.ali 183
		model.addAttribute("retailerStateName", address.getState());
24440 amit.gupta 184
		model.addAttribute("cartItems", cartItems);
22860 ashik.ali 185
		model.addAttribute("mopPriceMap", mopPriceMap);
23366 ashik.ali 186
		model.addAttribute("paymentOptions", paymentOptions);
23821 amit.gupta 187
		model.addAttribute("accessoriesDeals", accessoriesDeals);
22860 ashik.ali 188
		return "order-index";
21985 kshitij.so 189
	}
23973 govind 190
 
24440 amit.gupta 191
	@RequestMapping(value = "/checkplans", method = RequestMethod.GET)
24844 amit.gupta 192
	public String getInsurancePrices(HttpServletRequest request, @RequestParam float price, Model model)
193
			throws ProfitMandiBusinessException {
22244 ashik.ali 194
		LOGGER.info("Request received at url : {}", request.getRequestURI());
24844 amit.gupta 195
 
24440 amit.gupta 196
		try {
197
			String response = mvcResponseSender.createResponseString(this.getPlans(price));
198
			model.addAttribute("response", response);
199
		} catch (Exception e) {
200
			// TODO Auto-generated catch block
201
			e.printStackTrace();
202
			throw new ProfitMandiBusinessException("Plans", "Plans API", "Error formatting insurance plans");
203
		}
24844 amit.gupta 204
 
24440 amit.gupta 205
		return "response";
22244 ashik.ali 206
	}
23973 govind 207
 
21985 kshitij.so 208
	@RequestMapping(value = "/get-order", method = RequestMethod.GET)
23973 govind 209
	public String getOrder(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId,
210
			Model model) throws ProfitMandiBusinessException {
22927 ashik.ali 211
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
212
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
23638 amit.gupta 213
		List<FofoOrderItem> fofoLineItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
22927 ashik.ali 214
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
23973 govind 215
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
22927 ashik.ali 216
		customerAddress.setPhoneNumber(customer.getMobileNumber());
23973 govind 217
		List<PaymentOptionTransaction> paymentOptionTransactions = fofoOrderPaymentOptionRepository
218
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
219
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
220
				.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
221
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
222
				.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
23343 ashik.ali 223
		this.addInsuranceProvider(insurancePolicies);
24087 amit.gupta 224
 
22927 ashik.ali 225
		model.addAttribute("fofoOrder", fofoOrder);
226
		model.addAttribute("fofoLineItems", fofoLineItems);
227
		model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
228
		model.addAttribute("customerBillingAddressObj", customerAddress);
23548 ashik.ali 229
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
23366 ashik.ali 230
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
22927 ashik.ali 231
		model.addAttribute("insurancePolicies", insurancePolicies);
232
		return "order-details";
21985 kshitij.so 233
	}
23973 govind 234
 
235
	private Map<Integer, InsuranceProvider> toInsuranceProviderIdInsuranceProvider(
236
			List<InsuranceProvider> insuranceProviders) {
23343 ashik.ali 237
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = new HashMap<>();
23973 govind 238
		for (InsuranceProvider insuranceProvider : insuranceProviders) {
23343 ashik.ali 239
			insuranceProviderIdInsuranceProviderMap.put(insuranceProvider.getId(), insuranceProvider);
240
		}
241
		return insuranceProviderIdInsuranceProviderMap;
242
	}
23973 govind 243
 
244
	private void addInsuranceProvider(List<InsurancePolicy> insurancePolicies) {
245
		if (insurancePolicies.isEmpty()) {
23343 ashik.ali 246
			return;
247
		}
248
		Set<Integer> insuranceProviderIds = new HashSet<>();
23973 govind 249
		for (InsurancePolicy insurancePolicy : insurancePolicies) {
23343 ashik.ali 250
			insuranceProviderIds.add(insurancePolicy.getProviderId());
251
		}
252
		LOGGER.info("insuranceProviderIds {}", insuranceProviderIds);
253
		List<InsuranceProvider> insuranceProviders = insuranceProviderRepository.selectByIds(insuranceProviderIds);
23973 govind 254
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = this
255
				.toInsuranceProviderIdInsuranceProvider(insuranceProviders);
256
		for (InsurancePolicy insurancePolicy : insurancePolicies) {
257
			insurancePolicy
258
					.setInsuranceProvider(insuranceProviderIdInsuranceProviderMap.get(insurancePolicy.getProviderId()));
23343 ashik.ali 259
		}
260
	}
23973 govind 261
 
22244 ashik.ali 262
	@RequestMapping(value = "/saleDetails", method = RequestMethod.GET)
23973 govind 263
	public String getSaleDetails(HttpServletRequest request,
264
			@RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) throws Exception {
22927 ashik.ali 265
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
25562 amit.gupta 266
		boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
22927 ashik.ali 267
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
23654 amit.gupta 268
		List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
22927 ashik.ali 269
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
23973 govind 270
		List<PaymentOptionTransaction> paymentOptionTransactions = fofoOrderPaymentOptionRepository
271
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
272
 
273
		// Added Migration info as we lost it.
274
		if (paymentOptionTransactions == null || paymentOptionTransactions.size() == 0) {
23952 amit.gupta 275
			PaymentOptionTransaction pot = new PaymentOptionTransaction();
276
			pot.setAmount(fofoOrder.getTotalAmount());
277
			pot.setCreateTimestamp(fofoOrder.getCreateTimestamp());
23973 govind 278
			// Mark it paid through cash
23952 amit.gupta 279
			pot.setPaymentOptionId(1);
280
			pot.setReferenceType(PaymentOptionReferenceType.ORDER);
281
			fofoOrderPaymentOptionRepository.persist(pot);
282
			paymentOptionTransactions.add(pot);
283
			LOGGER.info("Added to get invoice");
284
		}
23973 govind 285
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
286
				.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
287
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
288
				.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
23343 ashik.ali 289
		this.addInsuranceProvider(insurancePolicies);
23973 govind 290
		Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
23638 amit.gupta 291
			try {
292
				return itemRepository.selectById(x.getItemId());
293
			} catch (ProfitMandiBusinessException e) {
294
				// TODO Auto-generated catch block
295
				return null;
296
			}
297
		}));
23973 govind 298
		Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
299
				.collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
23654 amit.gupta 300
 
23973 govind 301
		Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
302
				.collect(Collectors.toMap(foi -> foi.getId(),
303
						foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
23654 amit.gupta 304
 
305
		Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
23973 govind 306
 
307
		for (FofoOrderItem foi : fofoOrderItems) {
308
			for (FofoLineItem fli : foi.getFofoLineItems()) {
23654 amit.gupta 309
				inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
310
			}
23973 govind 311
			List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
312
					.selectAllByOrderItemId(foi.getId());
25562 amit.gupta 313
			this.markDoa(fofoOrder, foi, isAdmin);
23973 govind 314
			for (CustomerReturnItem customerReturnItem : customerReturnItems) {
315
				inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
316
						inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
23654 amit.gupta 317
			}
318
		}
23973 govind 319
 
23654 amit.gupta 320
		LOGGER.info("fofoOrderItemIdLineItemMap {}", fofoOrderItemIdLineItemMap);
22927 ashik.ali 321
		model.addAttribute("fofoOrder", fofoOrder);
23638 amit.gupta 322
		model.addAttribute("itemsMap", itemsMap);
23654 amit.gupta 323
		model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
23973 govind 324
		model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
325
				StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
23654 amit.gupta 326
		model.addAttribute("fofoOrderItems", fofoOrderItems);
327
		model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
22927 ashik.ali 328
		model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
329
		model.addAttribute("customerBillingAddressObj", customerAddress);
23548 ashik.ali 330
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
23366 ashik.ali 331
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
22927 ashik.ali 332
		model.addAttribute("insurancePolicies", insurancePolicies);
23638 amit.gupta 333
		model.addAttribute("markDefective", this.markDefective(fofoOrder));
22927 ashik.ali 334
		return "sale-details";
22244 ashik.ali 335
	}
23973 govind 336
 
25562 amit.gupta 337
	private void markDoa(FofoOrder fofoOrder, FofoOrderItem foi, boolean isAdmin) {
25606 tejbeer 338
		if (isAdmin) {
24094 amit.gupta 339
			foi.setDoa(true);
25562 amit.gupta 340
			return;
24094 amit.gupta 341
		}
342
		LocalDateTime buyDate = fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS);
343
		LocalDateTime curDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
344
		if (buyDate.isAfter(curDate.minusDays(45))) {
345
			foi.setDoa(true);
346
		} else
347
			foi.setDoa(
348
					foi.getBrand().equals("Nokia") && foi.getCost() < 4990 && buyDate.isAfter(curDate.minusYears(1)));
23638 amit.gupta 349
	}
23973 govind 350
 
23638 amit.gupta 351
	private boolean markDefective(FofoOrder fofoOrder) {
23973 govind 352
		return fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS).plusDays(180)
353
				.isAfter(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));
354
 
23638 amit.gupta 355
	}
23973 govind 356
 
23584 ashik.ali 357
	@RequestMapping(value = "/getSearchOrder")
23973 govind 358
	public String getSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
23584 ashik.ali 359
		return "search-order";
360
	}
23973 govind 361
 
23584 ashik.ali 362
	@RequestMapping(value = "/customerDetails", method = RequestMethod.PUT)
23973 govind 363
	public String updateCustomerDetails(HttpServletRequest request, @RequestBody CustomCustomer customCustomer,
364
			@RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
24281 amit.gupta 365
			throws Exception {
23973 govind 366
 
23584 ashik.ali 367
		orderService.updateCustomerDetails(customCustomer, invoiceNumber);
368
		return this.getSearchOrderDetails(request, invoiceNumber, model);
369
	}
23973 govind 370
 
23584 ashik.ali 371
	@RequestMapping(value = "/searchOrderDetails", method = RequestMethod.GET)
23973 govind 372
	public String getSearchOrderDetails(HttpServletRequest request,
373
			@RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
24281 amit.gupta 374
			throws Exception {
23973 govind 375
 
23584 ashik.ali 376
		FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
24271 amit.gupta 377
		List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
23584 ashik.ali 378
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
379
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
24105 govind 380
		List<Integer> fofoPartnerPaymentOptions = fofoPartnerPaymentOptionRepository
381
				.selectPaymentOptionIdsByFofoId(fofoOrder.getFofoId());
24844 amit.gupta 382
 
24276 amit.gupta 383
		Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
384
			try {
385
				return itemRepository.selectById(x.getItemId());
386
			} catch (ProfitMandiBusinessException e) {
387
				// TODO Auto-generated catch block
388
				return null;
389
			}
390
		}));
24105 govind 391
		LOGGER.info("fofoPartnerPaymentOptions" + fofoPartnerPaymentOptions);
23973 govind 392
		List<PaymentOptionTransaction> paymentOptionTransactions = fofoOrderPaymentOptionRepository
393
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
24105 govind 394
		LOGGER.info("paymentOptionTransactions" + paymentOptionTransactions);
23973 govind 395
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
24105 govind 396
				.paymentOptionIdPaymentOptionMapUsingPaymentOptions(fofoPartnerPaymentOptions);
397
		Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
398
				.paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
399
		LOGGER.info("paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
23973 govind 400
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
401
				.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
23584 ashik.ali 402
		this.addInsuranceProvider(insurancePolicies);
403
		model.addAttribute("fofoOrder", fofoOrder);
24844 amit.gupta 404
		for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
24271 amit.gupta 405
			fofoOrderItem.setDoa(true);
406
		}
24844 amit.gupta 407
 
24281 amit.gupta 408
		Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
409
				.collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
410
 
411
		Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
412
				.collect(Collectors.toMap(foi -> foi.getId(),
413
						foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
414
 
415
		Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
416
 
417
		for (FofoOrderItem foi : fofoOrderItems) {
418
			for (FofoLineItem fli : foi.getFofoLineItems()) {
419
				inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
420
			}
421
			List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
422
					.selectAllByOrderItemId(foi.getId());
423
			for (CustomerReturnItem customerReturnItem : customerReturnItems) {
424
				inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
425
						inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
426
			}
427
		}
428
		model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
429
				StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
24271 amit.gupta 430
		model.addAttribute("fofoOrderItems", fofoOrderItems);
24281 amit.gupta 431
		model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
432
		model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
24276 amit.gupta 433
		model.addAttribute("itemsMap", itemsMap);
24271 amit.gupta 434
		model.addAttribute("markDefective", true);
23584 ashik.ali 435
		model.addAttribute("customer", customer);
436
		model.addAttribute("customerAddress", customerAddress);
437
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
438
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
24105 govind 439
		model.addAttribute("paymentOptionIdPaymentOptionTransactionMap", paymentOptionIdPaymentOptionTransactionMap);
23584 ashik.ali 440
		model.addAttribute("insurancePolicies", insurancePolicies);
24105 govind 441
		model.addAttribute("fofoPartnerPaymentOptions", fofoPartnerPaymentOptions);
442
		model.addAttribute("totalNumberOfPaymentOptionId", fofoPartnerPaymentOptions.size());
24844 amit.gupta 443
		model.addAttribute("stateNames",
444
				stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
23584 ashik.ali 445
		return "search-order-details";
446
	}
23973 govind 447
 
448
	private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap(
449
			List<PaymentOptionTransaction> paymentOptionTransactions) {
23366 ashik.ali 450
		Set<Integer> paymentOptionIds = new HashSet<>();
23973 govind 451
		for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
23548 ashik.ali 452
			paymentOptionIds.add(paymentOptionTransaction.getPaymentOptionId());
23366 ashik.ali 453
		}
454
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(paymentOptionIds);
455
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
23973 govind 456
		for (PaymentOption paymentOption : paymentOptions) {
23366 ashik.ali 457
			paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
458
		}
459
		return paymentOptionIdPaymentOptionMap;
460
	}
23973 govind 461
 
24105 govind 462
	private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMapUsingPaymentOptions(
463
			List<Integer> fofoPartnerPaymentOptions) {
464
		List<PaymentOption> paymentOptions = paymentOptionRepository
465
				.selectByIds(new HashSet<>(fofoPartnerPaymentOptions));
466
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
467
		for (PaymentOption paymentOption : paymentOptions) {
468
			paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
469
		}
470
		return paymentOptionIdPaymentOptionMap;
471
	}
472
 
473
	private Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap(
474
			List<PaymentOptionTransaction> paymentOptionTransactions) {
475
		Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = new HashMap<>();
476
		for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
477
			paymentOptionIdPaymentOptionTransactionMap.put(paymentOptionTransaction.getPaymentOptionId(),
478
					paymentOptionTransaction);
479
		}
480
		return paymentOptionIdPaymentOptionTransactionMap;
481
	}
482
 
21985 kshitij.so 483
	@RequestMapping(value = "/create-order", method = RequestMethod.POST)
23973 govind 484
	public String createOrder(HttpServletRequest request, @RequestBody CreateOrderRequest createOrderRequest,
485
			Model model) throws ProfitMandiBusinessException {
22064 ashik.ali 486
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), createOrderRequest);
22927 ashik.ali 487
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
23973 govind 488
 
23823 amit.gupta 489
		int fofoOrderId = orderService.createOrder(createOrderRequest, fofoDetails.getFofoId(), accessoriesDeals);
22280 ashik.ali 490
		LOGGER.info("Order has been created successfully...");
23973 govind 491
		return "redirect:/get-order/?orderId=" + fofoOrderId;
21612 ashik.ali 492
	}
23973 govind 493
 
23638 amit.gupta 494
	@RequestMapping(value = "/order/bad_return", method = RequestMethod.POST)
23973 govind 495
	public ResponseEntity<?> badReturn(HttpServletRequest request, @RequestBody FoiBadReturnRequest foiBadReturnRequest,
496
			Model model) throws ProfitMandiBusinessException {
23638 amit.gupta 497
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), foiBadReturnRequest);
498
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
24282 amit.gupta 499
		CustomerCreditNote custmoerCreditNote;
24844 amit.gupta 500
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
24282 amit.gupta 501
			FofoOrderItem foi = fofoOrderItemRepository.selectById(foiBadReturnRequest.getFofoOrderItemId());
502
			FofoOrder fo = fofoOrderRepository.selectByOrderId(foi.getOrderId());
503
			custmoerCreditNote = orderService.badReturn(fo.getFofoId(), foiBadReturnRequest);
504
		} else {
505
			custmoerCreditNote = orderService.badReturn(fofoDetails.getFofoId(), foiBadReturnRequest);
506
		}
23654 amit.gupta 507
		return responseSender.ok(custmoerCreditNote.getId());
23638 amit.gupta 508
	}
21985 kshitij.so 509
 
21689 ashik.ali 510
	@RequestMapping(value = "/generateInvoice")
23973 govind 511
	public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
512
			@RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
513
		LOGGER.info("Request received at url {} with params [{}={}] ", request.getRequestURI(),
514
				ProfitMandiConstants.ORDER_ID, orderId);
22139 amit.gupta 515
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
23594 ashik.ali 516
		PdfModel pdfModel = null;
23973 govind 517
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
23594 ashik.ali 518
			pdfModel = orderService.getInvoicePdfModel(orderId);
23973 govind 519
		} else {
23594 ashik.ali 520
			pdfModel = orderService.getInvoicePdfModel(fofoDetails.getFofoId(), orderId);
521
		}
21689 ashik.ali 522
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
24844 amit.gupta 523
		PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
21689 ashik.ali 524
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
23973 govind 525
		final HttpHeaders headers = new HttpHeaders();
526
		headers.setContentType(MediaType.APPLICATION_PDF);
527
		headers.set("Content-disposition", "inline; filename=invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
528
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
529
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
530
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
531
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
21689 ashik.ali 532
	}
23973 govind 533
 
24844 amit.gupta 534
	@RequestMapping(value = "/generateInvoices")
535
	public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
536
			@RequestParam LocalDateTime startDate, @RequestParam LocalDateTime endDate, @RequestParam int partnerId)
537
			throws ProfitMandiBusinessException {
538
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
539
		List<PdfModel> pdfModels = new ArrayList<>();
540
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
541
			List<Integer> orderIds = fofoOrderRepository.selectByFofoId(partnerId, startDate, endDate, 0, 0).stream()
542
					.map(x -> x.getId()).collect(Collectors.toList());
543
			for (int orderId : orderIds) {
544
				pdfModels.add(orderService.getInvoicePdfModel(orderId));
545
			}
546
			ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
547
			PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
548
			LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
549
			final HttpHeaders headers = new HttpHeaders();
550
			headers.setContentType(MediaType.APPLICATION_PDF);
551
			headers.set("Content-disposition", "inline; filename=invoice-" + partnerId + ".pdf");
552
			headers.setContentLength(byteArrayOutputStream.toByteArray().length);
553
			final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
554
			final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
555
			return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
556
		} else {
557
			throw new ProfitMandiBusinessException("Auth", fofoDetails.getEmailId(), "Unauthorised access");
558
		}
559
	}
560
 
22244 ashik.ali 561
	@RequestMapping(value = "/saleHistory")
23973 govind 562
	public String saleHistory(HttpServletRequest request,
563
			@RequestParam(name = "searchValue", defaultValue = "") String searchValue,
564
			@RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
565
			@RequestParam(required = false) LocalDateTime startTime,
566
			@RequestParam(required = false) LocalDateTime endTime,
567
			@RequestParam(name = "offset", defaultValue = "0") int offset,
568
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
569
			throws ProfitMandiBusinessException {
22927 ashik.ali 570
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23973 govind 571
 
572
		Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
573
				startTime, endTime, offset, limit);
25607 tejbeer 574
 
23203 ashik.ali 575
		model.addAllAttributes(map);
23973 govind 576
 
25606 tejbeer 577
		model.addAttribute("url", "/getPaginatedSaleHistory");
578
 
22244 ashik.ali 579
		return "sale-history";
580
	}
23973 govind 581
 
25092 amit.gupta 582
	@RequestMapping(value = "/downloadInvoices")
583
	public ResponseEntity<?> downloadInvoices(HttpServletRequest request,
584
			@RequestParam(name = "searchValue", defaultValue = "") String searchValue,
585
			@RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
586
			@RequestParam(required = false) LocalDateTime startTime,
587
			@RequestParam(required = false) LocalDateTime endTime,
588
			@RequestParam(name = "offset", defaultValue = "0") int offset,
589
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
590
			throws ProfitMandiBusinessException {
591
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
592
 
593
		Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
594
				startTime, endTime, offset, 100);
25562 amit.gupta 595
		List<FofoOrder> fofoOrders = (List<FofoOrder>) map.get("saleHistories");
25092 amit.gupta 596
 
25562 amit.gupta 597
		if (fofoOrders.size() == 0) {
25092 amit.gupta 598
			throw new ProfitMandiBusinessException("Search criteria", "", "No orders found for criteria");
599
		}
600
 
25093 amit.gupta 601
		final HttpHeaders headers = new HttpHeaders();
25092 amit.gupta 602
		headers.setContentType(MediaType.APPLICATION_PDF);
603
		headers.set("Content-disposition", "inline; filename=invoices.pdf");
604
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
605
		List<PdfModel> pdfModels = new ArrayList<>();
25562 amit.gupta 606
		for (FofoOrder fofoOrder : fofoOrders) {
25092 amit.gupta 607
			try {
608
				pdfModels.add(orderService.getInvoicePdfModel(fofoOrder.getId()));
25606 tejbeer 609
			} catch (Exception e) {
610
				LOGGER.info("could not create invoice for {}, invoice number {}", fofoOrder.getId(),
611
						fofoOrder.getInvoiceNumber());
25092 amit.gupta 612
			}
613
		}
614
		PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
615
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
616
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
617
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
618
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
619
	}
620
 
23973 govind 621
	@RequestMapping(value = "/credit-note/{creditNoteId}")
622
	public ResponseEntity<?> downloadCreditNote(HttpServletRequest request, @PathVariable int creditNoteId)
623
			throws ProfitMandiBusinessException {
23654 amit.gupta 624
		CreditNotePdfModel creditNotePdfModel = orderService.getCreditNotePdfModel(creditNoteId);
625
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
626
		PdfUtils.generateAndWriteCustomerCreditNotes(Arrays.asList(creditNotePdfModel), byteArrayOutputStream);
627
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
23973 govind 628
		final HttpHeaders headers = new HttpHeaders();
629
		headers.setContentType(MediaType.APPLICATION_PDF);
630
		headers.set("Content-disposition",
631
				"inline; filename=invoice-" + creditNotePdfModel.getCreditNoteNumber() + ".pdf");
632
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
633
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
634
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
635
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
23654 amit.gupta 636
	}
23973 govind 637
 
22291 ashik.ali 638
	@RequestMapping(value = "/getPaginatedSaleHistory")
23973 govind 639
	public String getSaleHistoryPaginated(HttpServletRequest request,
640
			@RequestParam(name = "searchValue", defaultValue = "") String searchValue,
641
			@RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
642
			@RequestParam(required = false) LocalDateTime startTime,
643
			@RequestParam(required = false) LocalDateTime endTime,
644
			@RequestParam(name = "offset", defaultValue = "0") int offset,
645
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
646
			throws ProfitMandiBusinessException {
22927 ashik.ali 647
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23973 govind 648
		Map<String, Object> map = orderService.getSaleHistoryPaginated(loginDetails.getFofoId(), searchType,
649
				searchValue, startTime, endTime, offset, limit);
23203 ashik.ali 650
		model.addAllAttributes(map);
25606 tejbeer 651
		model.addAttribute("url", "/getPaginatedSaleHistory");
22291 ashik.ali 652
		return "sale-history-paginated";
653
	}
654
 
24105 govind 655
	@PutMapping(value = "/updatePaymentTransaction")
656
	public String updateTransactionDetails(HttpServletRequest request, @RequestParam String referenceType,
657
			@RequestParam int fofoId, @RequestParam int referenceId,
658
			@RequestBody List<PaymentOptionTransactionModel> paymentOptionTransactionModels, Model model)
659
			throws Exception {
660
		float amount = 0;
661
		LOGGER.info(paymentOptionTransactionModels);
662
 
663
		for (PaymentOptionTransactionModel paymentOptionTransactionModel : paymentOptionTransactionModels) {
664
			amount = amount + paymentOptionTransactionModel.getAmount();
665
		}
666
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoId, referenceId);
667
		LOGGER.info("FofoOrder amount" + fofoOrder.getTotalAmount() + "amount" + amount);
668
		if (amount == fofoOrder.getTotalAmount()) {
669
			if (paymentOptionTransactionModels.size() > 0) {
670
				List<PaymentOptionTransaction> paymentOptionTransactions = fofoOrderPaymentOptionRepository
671
						.selectByReferenceIdAndType(referenceId, PaymentOptionReferenceType.ORDER);
672
				Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
673
						.paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
674
				LOGGER.info("paymentOptionIdPaymentOptionTransactionMap"
675
						+ paymentOptionIdPaymentOptionTransactionMap.keySet());
676
				for (PaymentOptionTransactionModel paymentOptionTransactionModel : paymentOptionTransactionModels) {
677
					if (paymentOptionIdPaymentOptionTransactionMap
678
							.containsKey(paymentOptionTransactionModel.getPaymentOptionId())) {
679
 
680
						PaymentOptionTransaction paymentOptionTransaction = paymentOptionIdPaymentOptionTransactionMap
681
								.get(paymentOptionTransactionModel.getPaymentOptionId());
682
 
683
						if (paymentOptionTransactionModel.getAmount() == 0) {
684
							fofoOrderPaymentOptionRepository.delete(paymentOptionTransaction);
685
							LOGGER.info("deleted successfully");
686
						} else {
687
 
688
							paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
689
							fofoOrderPaymentOptionRepository.persist(paymentOptionTransaction);
690
							LOGGER.info("updated successfully");
691
 
692
						}
693
					} else {
694
						if (paymentOptionTransactionModel.getAmount() > 0) {
695
							PaymentOptionTransaction paymentOptionTransaction = new PaymentOptionTransaction();
696
							paymentOptionTransaction.setReferenceId(referenceId);
697
							paymentOptionTransaction.setReferenceType(PaymentOptionReferenceType.ORDER);
698
							paymentOptionTransaction
699
									.setPaymentOptionId(paymentOptionTransactionModel.getPaymentOptionId());
700
							paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
701
							paymentOptionTransaction.setFofoId(fofoId);
24167 amit.gupta 702
							paymentOptionTransaction.setCreateTimestamp(fofoOrder.getCreateTimestamp());
24105 govind 703
							fofoOrderPaymentOptionRepository.persist(paymentOptionTransaction);
704
							LOGGER.info("inserted successfully");
705
						}
706
					}
707
 
708
				}
709
 
710
				model.addAttribute("response", mvcResponseSender.createResponseString(true));
711
			}
712
		} else {
713
			throw new ProfitMandiBusinessException("Amount", amount, "Sum of amount is not equal to total amount");
714
		}
715
 
716
		return "response";
717
	}
24440 amit.gupta 718
 
719
	private Map<String, List<MobileInsurancePlan>> getPlans(float sellingPrice) throws ProfitMandiBusinessException {
720
		Map<String, List<MobileInsurancePlan>> productDurationPlans = zestService.getAllPlansByProductAndDuration();
721
		Map<String, List<MobileInsurancePlan>> returnPlans = new HashMap<>();
722
		productDurationPlans.entrySet().stream().forEach(m -> {
723
			returnPlans.put(m.getKey(), m.getValue().stream().filter(x -> {
724
				return Float.parseFloat(x.getMaxPrice()) >= sellingPrice
725
						&& Float.parseFloat(x.getMinPrice()) <= sellingPrice;
726
			}).collect(Collectors.toList()));
727
		});
728
		return returnPlans;
729
	}
24880 govind 730
 
731
	@GetMapping("/insuranceDetails")
732
	public String getInsuranceDetails(HttpServletRequest request,
733
			@RequestParam(name = "offset", defaultValue = "0") int offset,
734
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
735
			throws ProfitMandiBusinessException {
736
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
737
		long size = 0;
738
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
739
				offset, limit);
740
		size = insurancePolicyRepository.selectCountByRetailerId(loginDetails.getFofoId());
741
		Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
742
				.selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
743
				.stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
744
		if (size < limit) {
745
			model.addAttribute("end", offset + size);
746
		} else {
747
			model.addAttribute("end", offset + limit);
748
		}
749
		model.addAttribute("start", offset + 1);
750
		model.addAttribute("size", size);
751
		model.addAttribute("insurancePolicies", insurancePolicies);
752
		model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
753
		return "insurance-details";
754
	}
25092 amit.gupta 755
 
24880 govind 756
	@GetMapping("/insuranceDetailsPaginated")
757
	public String getInsuranceDetailsPaginated(HttpServletRequest request,
758
			@RequestParam(name = "offset", defaultValue = "0") int offset,
759
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
760
			throws ProfitMandiBusinessException {
761
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
762
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
763
				offset, limit);
764
		Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
765
				.selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
766
				.stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
767
		model.addAttribute("insurancePolicies", insurancePolicies);
768
		model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
769
		return "insurance-details-paginated";
770
	}
21612 ashik.ali 771
}