Subversion Repositories SmartDukaan

Rev

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

Rev 23952 Rev 23973
Line 82... Line 82...
82
import com.spice.profitmandi.service.pricing.PricingService;
82
import com.spice.profitmandi.service.pricing.PricingService;
83
import com.spice.profitmandi.web.model.LoginDetails;
83
import com.spice.profitmandi.web.model.LoginDetails;
84
import com.spice.profitmandi.web.util.CookiesProcessor;
84
import com.spice.profitmandi.web.util.CookiesProcessor;
85
 
85
 
86
@Controller
86
@Controller
87
@Transactional(rollbackFor=Throwable.class)
87
@Transactional(rollbackFor = Throwable.class)
88
public class OrderController {
88
public class OrderController {
89
 
89
 
90
	private static final Logger LOGGER = LogManager.getLogger(OrderController.class);
90
	private static final Logger LOGGER = LogManager.getLogger(OrderController.class);
91
 
91
 
92
	@Autowired
92
	@Autowired
93
	private CustomerRepository customerRepository;
93
	private CustomerRepository customerRepository;
94
	
94
 
95
	private boolean accessoriesDeals = true;
95
	private boolean accessoriesDeals = true;
96
 
96
 
97
	@Autowired
97
	@Autowired
98
	private RoleManager roleManager;
98
	private RoleManager roleManager;
99
	
99
 
100
	@Autowired
100
	@Autowired
101
	private CustomerReturnItemRepository customerReturnItemRepository;
101
	private CustomerReturnItemRepository customerReturnItemRepository;
102
	
102
 
103
	@Autowired
103
	@Autowired
104
	private FofoOrderItemRepository fofoOrderItemRepository;
104
	private FofoOrderItemRepository fofoOrderItemRepository;
105
 
105
 
106
	@Autowired
106
	@Autowired
107
	private PaymentOptionRepository paymentOptionRepository;
107
	private PaymentOptionRepository paymentOptionRepository;
108
	
108
 
109
	@Autowired
109
	@Autowired
110
	private ItemRepository itemRepository;
110
	private ItemRepository itemRepository;
111
 
111
 
112
	@Autowired
112
	@Autowired
113
	private FofoOrderRepository fofoOrderRepository;
113
	private FofoOrderRepository fofoOrderRepository;
114
 
114
 
115
	@Autowired
115
	@Autowired
116
	private CustomerAddressRepository customerAddressRepository;
116
	private CustomerAddressRepository customerAddressRepository;
117
	
117
 
118
	@Autowired
118
	@Autowired
119
	private InsurancePolicyRepository insurancePolicyRepository;
119
	private InsurancePolicyRepository insurancePolicyRepository;
120
	
120
 
121
	@Autowired
121
	@Autowired
122
	private InsuranceProviderRepository insuranceProviderRepository;
122
	private InsuranceProviderRepository insuranceProviderRepository;
123
 
123
 
124
	@Autowired
124
	@Autowired
125
	private CookiesProcessor cookiesProcessor;
125
	private CookiesProcessor cookiesProcessor;
126
	
126
 
127
	@Autowired
127
	@Autowired
128
	private PricingService pricingService;
128
	private PricingService pricingService;
129
	
129
 
130
	@Autowired
130
	@Autowired
131
	private OrderService orderService;
131
	private OrderService orderService;
132
	
132
 
133
	@Autowired
133
	@Autowired
134
	private RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
134
	private RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
135
	
135
 
136
	@Autowired
136
	@Autowired
137
	private AddressRepository addressRepository;
137
	private AddressRepository addressRepository;
138
	
138
 
139
	@Autowired
139
	@Autowired
140
	private PaymentOptionTransactionRepository fofoOrderPaymentOptionRepository;
140
	private PaymentOptionTransactionRepository fofoOrderPaymentOptionRepository;
141
	
141
 
142
	@Autowired
142
	@Autowired
143
	private FofoPartnerPaymentOptionRepository fofoPartnerPaymentOptionRepository;
143
	private FofoPartnerPaymentOptionRepository fofoPartnerPaymentOptionRepository;
144
	
144
 
145
	@Autowired
145
	@Autowired
146
	private PrebookingOrderItemRepository prebookingOrderItemRepository;
146
	private PrebookingOrderItemRepository prebookingOrderItemRepository;
147
	
147
 
148
	@Autowired
148
	@Autowired
149
	private ResponseSender<?> responseSender;
149
	private ResponseSender<?> responseSender;
150
	
150
 
151
	@RequestMapping(value = "/order")
151
	@RequestMapping(value = "/order")
152
	public String orderIndex(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model) throws ProfitMandiBusinessException{
152
	public String orderIndex(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
-
 
153
			throws ProfitMandiBusinessException {
153
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);;
154
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
154
		
155
		;
-
 
156
 
155
		int addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(loginDetails.getFofoId());
157
		int addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(loginDetails.getFofoId());
156
		Address address = addressRepository.selectById(addressId);
158
		Address address = addressRepository.selectById(addressId);
157
		
159
 
158
		List<CartFofo> cartItems = orderService.cartCheckout(cartData);
160
		List<CartFofo> cartItems = orderService.cartCheckout(cartData);
159
		Set<Integer> itemIds = new HashSet<>();
161
		Set<Integer> itemIds = new HashSet<>();
160
		for(CartFofo cartFofo : cartItems){
162
		for (CartFofo cartFofo : cartItems) {
161
			itemIds.add(cartFofo.getItemId());
163
			itemIds.add(cartFofo.getItemId());
162
		}
164
		}
163
		Map<Integer, PriceModel> mopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIds, loginDetails.getFofoId());
165
		Map<Integer, PriceModel> mopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIds,
-
 
166
				loginDetails.getFofoId());
164
		List<Integer> paymentOptionIds = fofoPartnerPaymentOptionRepository.selectPaymentOptionIdsByFofoId(loginDetails.getFofoId());
167
		List<Integer> paymentOptionIds = fofoPartnerPaymentOptionRepository
-
 
168
				.selectPaymentOptionIdsByFofoId(loginDetails.getFofoId());
165
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(new HashSet<>(paymentOptionIds));
169
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(new HashSet<>(paymentOptionIds));
166
		LOGGER.info("mopPriceMap {}", mopPriceMap);
170
		LOGGER.info("mopPriceMap {}", mopPriceMap);
167
		model.addAttribute("stateNames", Utils.getAllStateNames());
171
		model.addAttribute("stateNames", Utils.getAllStateNames());
168
		model.addAttribute("retailerStateName", address.getState());
172
		model.addAttribute("retailerStateName", address.getState());
169
		model.addAttribute("cartObj", cartItems);
173
		model.addAttribute("cartObj", cartItems);
170
		model.addAttribute("mopPriceMap", mopPriceMap);
174
		model.addAttribute("mopPriceMap", mopPriceMap);
171
		model.addAttribute("paymentOptions", paymentOptions);
175
		model.addAttribute("paymentOptions", paymentOptions);
172
		model.addAttribute("accessoriesDeals", accessoriesDeals);
176
		model.addAttribute("accessoriesDeals", accessoriesDeals);
173
		return "order-index";
177
		return "order-index";
174
	}
178
	}
175
	
-
 
176
	
179
 
177
	@RequestMapping(value = "/insurancePrices", method = RequestMethod.GET)
180
	@RequestMapping(value = "/insurancePrices", method = RequestMethod.GET)
-
 
181
	public ResponseEntity<?> getInsurancePrices(HttpServletRequest request,
178
	public ResponseEntity<?> getInsurancePrices(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.PRICE) float price) throws ProfitMandiBusinessException{
182
			@RequestParam(name = ProfitMandiConstants.PRICE) float price) throws ProfitMandiBusinessException {
179
		LOGGER.info("Request received at url : {}", request.getRequestURI());
183
		LOGGER.info("Request received at url : {}", request.getRequestURI());
180
		Set<Float> prices = new HashSet<>();
184
		Set<Float> prices = new HashSet<>();
181
		prices.add(price);
185
		prices.add(price);
182
		return responseSender.ok(pricingService.getInsurancePrices(prices, ProfitMandiConstants.GADGET_COPS));
186
		return responseSender.ok(pricingService.getInsurancePrices(prices, ProfitMandiConstants.GADGET_COPS));
183
	}
187
	}
184
	
-
 
185
	
188
 
186
	@RequestMapping(value = "/get-order", method = RequestMethod.GET)
189
	@RequestMapping(value = "/get-order", method = RequestMethod.GET)
187
	public String getOrder(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) throws ProfitMandiBusinessException{
190
	public String getOrder(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId,
-
 
191
			Model model) throws ProfitMandiBusinessException {
188
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
192
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
189
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
193
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
190
		List<FofoOrderItem> fofoLineItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
194
		List<FofoOrderItem> fofoLineItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
191
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
195
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
192
		Customer customer  = customerRepository.selectById(fofoOrder.getCustomerId());
196
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
193
		customerAddress.setPhoneNumber(customer.getMobileNumber());
197
		customerAddress.setPhoneNumber(customer.getMobileNumber());
194
		List<PaymentOptionTransaction> paymentOptionTransactions = fofoOrderPaymentOptionRepository.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
198
		List<PaymentOptionTransaction> paymentOptionTransactions = fofoOrderPaymentOptionRepository
-
 
199
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
195
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
200
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
-
 
201
				.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
-
 
202
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
196
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
203
				.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
197
		this.addInsuranceProvider(insurancePolicies);
204
		this.addInsuranceProvider(insurancePolicies);
198
		List<PrebookingOrderItem> prebookingOrderItems = prebookingOrderItemRepository.selectByOrderId(orderId);
205
		List<PrebookingOrderItem> prebookingOrderItems = prebookingOrderItemRepository.selectByOrderId(orderId);
-
 
206
		Map<Integer, PrebookingOrderItem> itemIdPrebookingOrderItemMap = this
199
		Map<Integer, PrebookingOrderItem> itemIdPrebookingOrderItemMap = this.prebookingOrderItemToItemIdPrebookingOrderItem(prebookingOrderItems);
207
				.prebookingOrderItemToItemIdPrebookingOrderItem(prebookingOrderItems);
200
		model.addAttribute("fofoOrder", fofoOrder);
208
		model.addAttribute("fofoOrder", fofoOrder);
201
		model.addAttribute("fofoLineItems", fofoLineItems);
209
		model.addAttribute("fofoLineItems", fofoLineItems);
202
		model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
210
		model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
203
		model.addAttribute("customerBillingAddressObj", customerAddress);
211
		model.addAttribute("customerBillingAddressObj", customerAddress);
204
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
212
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
205
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
213
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
206
		model.addAttribute("insurancePolicies", insurancePolicies);
214
		model.addAttribute("insurancePolicies", insurancePolicies);
207
		model.addAttribute("itemIdPrebookingOrderItemMap", itemIdPrebookingOrderItemMap);
215
		model.addAttribute("itemIdPrebookingOrderItemMap", itemIdPrebookingOrderItemMap);
208
		return "order-details";
216
		return "order-details";
209
	}
217
	}
210
	
218
 
211
	@RequestMapping(value = "/generateOtp", method = RequestMethod.POST)
219
	@RequestMapping(value = "/generateOtp", method = RequestMethod.POST)
212
	public ResponseEntity<?> generateOtp(@RequestBody Map<Integer, Float> itemIdAdvanceAmount, @RequestParam(name = ProfitMandiConstants.CUSTOMER_EMAIL_ID) String customerEmailId, @RequestParam(name = ProfitMandiConstants.CUSTOMER_MOBILE_NUMBER) String customerMobileNumber)
220
	public ResponseEntity<?> generateOtp(@RequestBody Map<Integer, Float> itemIdAdvanceAmount,
-
 
221
			@RequestParam(name = ProfitMandiConstants.CUSTOMER_EMAIL_ID) String customerEmailId,
-
 
222
			@RequestParam(name = ProfitMandiConstants.CUSTOMER_MOBILE_NUMBER) String customerMobileNumber)
213
			throws ProfitMandiBusinessException{
223
			throws ProfitMandiBusinessException {
214
			
224
 
215
		int response = orderService.generatePrebookingOrdersOtp(customerEmailId, customerMobileNumber, itemIdAdvanceAmount);
225
		int response = orderService.generatePrebookingOrdersOtp(customerEmailId, customerMobileNumber,
-
 
226
				itemIdAdvanceAmount);
216
		
227
 
217
		return responseSender.ok(response);
228
		return responseSender.ok(response);
218
	}
229
	}
219
	
230
 
220
	@RequestMapping(value = "/validateOtp", method = RequestMethod.GET)
231
	@RequestMapping(value = "/validateOtp", method = RequestMethod.GET)
-
 
232
	public ResponseEntity<?> validateOtp(
221
	public ResponseEntity<?> validateOtp(@RequestParam(name = ProfitMandiConstants.CUSTOMER_EMAIL_ID) String customerEmailId,
233
			@RequestParam(name = ProfitMandiConstants.CUSTOMER_EMAIL_ID) String customerEmailId,
222
			@RequestParam(name = ProfitMandiConstants.CUSTOMER_MOBILE_NUMBER) String customerMobileNumber,
234
			@RequestParam(name = ProfitMandiConstants.CUSTOMER_MOBILE_NUMBER) String customerMobileNumber,
223
			@RequestParam("otpId") int otpId, @RequestParam("otpValue") String otpValue)
235
			@RequestParam("otpId") int otpId, @RequestParam("otpValue") String otpValue)
224
			throws ProfitMandiBusinessException{
236
			throws ProfitMandiBusinessException {
225
			
237
 
226
		String responseString = orderService.validateOtp(customerEmailId, customerMobileNumber, otpId, otpValue);
238
		String responseString = orderService.validateOtp(customerEmailId, customerMobileNumber, otpId, otpValue);
227
		
239
 
228
		return responseSender.ok(responseString);
240
		return responseSender.ok(responseString);
229
	}
241
	}
230
	
-
 
231
	
242
 
232
	private Map<Integer, InsuranceProvider> toInsuranceProviderIdInsuranceProvider(List<InsuranceProvider> insuranceProviders){
243
	private Map<Integer, InsuranceProvider> toInsuranceProviderIdInsuranceProvider(
-
 
244
			List<InsuranceProvider> insuranceProviders) {
233
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = new HashMap<>();
245
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = new HashMap<>();
234
		for(InsuranceProvider insuranceProvider : insuranceProviders){
246
		for (InsuranceProvider insuranceProvider : insuranceProviders) {
235
			insuranceProviderIdInsuranceProviderMap.put(insuranceProvider.getId(), insuranceProvider);
247
			insuranceProviderIdInsuranceProviderMap.put(insuranceProvider.getId(), insuranceProvider);
236
		}
248
		}
237
		return insuranceProviderIdInsuranceProviderMap;
249
		return insuranceProviderIdInsuranceProviderMap;
238
	}
250
	}
239
	
251
 
240
	private void addInsuranceProvider(List<InsurancePolicy> insurancePolicies){
252
	private void addInsuranceProvider(List<InsurancePolicy> insurancePolicies) {
241
		if(insurancePolicies.isEmpty()){
253
		if (insurancePolicies.isEmpty()) {
242
			return;
254
			return;
243
		}
255
		}
244
		Set<Integer> insuranceProviderIds = new HashSet<>();
256
		Set<Integer> insuranceProviderIds = new HashSet<>();
245
		for(InsurancePolicy insurancePolicy : insurancePolicies){
257
		for (InsurancePolicy insurancePolicy : insurancePolicies) {
246
			insuranceProviderIds.add(insurancePolicy.getProviderId());
258
			insuranceProviderIds.add(insurancePolicy.getProviderId());
247
		}
259
		}
248
		LOGGER.info("insuranceProviderIds {}", insuranceProviderIds);
260
		LOGGER.info("insuranceProviderIds {}", insuranceProviderIds);
249
		List<InsuranceProvider> insuranceProviders = insuranceProviderRepository.selectByIds(insuranceProviderIds);
261
		List<InsuranceProvider> insuranceProviders = insuranceProviderRepository.selectByIds(insuranceProviderIds);
250
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = this.toInsuranceProviderIdInsuranceProvider(insuranceProviders);
262
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = this
-
 
263
				.toInsuranceProviderIdInsuranceProvider(insuranceProviders);
251
		for(InsurancePolicy insurancePolicy : insurancePolicies){
264
		for (InsurancePolicy insurancePolicy : insurancePolicies) {
-
 
265
			insurancePolicy
252
			insurancePolicy.setInsuranceProvider(insuranceProviderIdInsuranceProviderMap.get(insurancePolicy.getProviderId()));
266
					.setInsuranceProvider(insuranceProviderIdInsuranceProviderMap.get(insurancePolicy.getProviderId()));
253
		}
267
		}
254
	}
268
	}
255
	
-
 
256
	
269
 
257
	@RequestMapping(value = "/saleDetails", method = RequestMethod.GET)
270
	@RequestMapping(value = "/saleDetails", method = RequestMethod.GET)
-
 
271
	public String getSaleDetails(HttpServletRequest request,
258
	public String getSaleDetails(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) throws Exception {
272
			@RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) throws Exception {
259
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
273
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
260
		
274
 
261
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
275
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
262
		List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
276
		List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
263
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
277
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
264
		List<PaymentOptionTransaction> paymentOptionTransactions = fofoOrderPaymentOptionRepository.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
278
		List<PaymentOptionTransaction> paymentOptionTransactions = fofoOrderPaymentOptionRepository
-
 
279
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
265
		
280
 
266
		//Added Migration info as we lost it.
281
		// Added Migration info as we lost it.
267
		if(paymentOptionTransactions== null || paymentOptionTransactions.size() == 0) {
282
		if (paymentOptionTransactions == null || paymentOptionTransactions.size() == 0) {
268
			PaymentOptionTransaction pot = new PaymentOptionTransaction();
283
			PaymentOptionTransaction pot = new PaymentOptionTransaction();
269
			pot.setAmount(fofoOrder.getTotalAmount());
284
			pot.setAmount(fofoOrder.getTotalAmount());
270
			pot.setCreateTimestamp(fofoOrder.getCreateTimestamp());
285
			pot.setCreateTimestamp(fofoOrder.getCreateTimestamp());
271
			//Mark it paid through cash
286
			// Mark it paid through cash
272
			pot.setPaymentOptionId(1);
287
			pot.setPaymentOptionId(1);
273
			pot.setReferenceType(PaymentOptionReferenceType.ORDER);
288
			pot.setReferenceType(PaymentOptionReferenceType.ORDER);
274
			fofoOrderPaymentOptionRepository.persist(pot);
289
			fofoOrderPaymentOptionRepository.persist(pot);
275
			paymentOptionTransactions.add(pot);
290
			paymentOptionTransactions.add(pot);
276
			LOGGER.info("Added to get invoice");
291
			LOGGER.info("Added to get invoice");
277
		}
292
		}
278
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
293
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
-
 
294
				.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
-
 
295
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
279
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
296
				.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
280
		this.addInsuranceProvider(insurancePolicies);
297
		this.addInsuranceProvider(insurancePolicies);
281
		List<PrebookingOrderItem> prebookingOrderItems = prebookingOrderItemRepository.selectByOrderId(orderId);
298
		List<PrebookingOrderItem> prebookingOrderItems = prebookingOrderItemRepository.selectByOrderId(orderId);
-
 
299
		Map<Integer, PrebookingOrderItem> itemIdPrebookingOrderItemMap = this
282
		Map<Integer, PrebookingOrderItem> itemIdPrebookingOrderItemMap = this.prebookingOrderItemToItemIdPrebookingOrderItem(prebookingOrderItems);
300
				.prebookingOrderItemToItemIdPrebookingOrderItem(prebookingOrderItems);
283
		Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x->x.getItemId(), x->{
301
		Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
284
			try {
302
			try {
285
				return itemRepository.selectById(x.getItemId());
303
				return itemRepository.selectById(x.getItemId());
286
			} catch (ProfitMandiBusinessException e) {
304
			} catch (ProfitMandiBusinessException e) {
287
				// TODO Auto-generated catch block
305
				// TODO Auto-generated catch block
288
				return null;
306
				return null;
289
			}
307
			}
290
		}));
308
		}));
291
		Map<Integer, Set<FofoLineItem>>fofoOrderItemIdLineItemMap = fofoOrderItems.stream().collect(Collectors.toMap(FofoOrderItem::getId, 
309
		Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
292
				FofoOrderItem::getFofoLineItems));
310
				.collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
293
 
311
 
294
		Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream().collect(Collectors.toMap(foi->foi.getId(),
312
		Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
-
 
313
				.collect(Collectors.toMap(foi -> foi.getId(),
295
				foi->customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
314
						foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
296
 
315
 
297
		Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
316
		Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
298
		
-
 
299
		
-
 
300
		
317
 
301
		for(FofoOrderItem foi : fofoOrderItems) {
318
		for (FofoOrderItem foi : fofoOrderItems) {
302
			for(FofoLineItem fli : foi.getFofoLineItems()) {
319
			for (FofoLineItem fli : foi.getFofoLineItems()) {
303
				inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
320
				inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
304
			}
321
			}
305
			List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository.selectAllByOrderItemId(foi.getId());
322
			List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
-
 
323
					.selectAllByOrderItemId(foi.getId());
306
			for(CustomerReturnItem customerReturnItem : customerReturnItems) {
324
			for (CustomerReturnItem customerReturnItem : customerReturnItems) {
-
 
325
				inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
307
				inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(), inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
326
						inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
308
			}
327
			}
309
		}
328
		}
310
		
329
 
311
		LOGGER.info("fofoOrderItemIdLineItemMap {}", fofoOrderItemIdLineItemMap);
330
		LOGGER.info("fofoOrderItemIdLineItemMap {}", fofoOrderItemIdLineItemMap);
312
		model.addAttribute("fofoOrder", fofoOrder);
331
		model.addAttribute("fofoOrder", fofoOrder);
313
		model.addAttribute("itemsMap", itemsMap);
332
		model.addAttribute("itemsMap", itemsMap);
314
		model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
333
		model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
-
 
334
		model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
315
		model.addAttribute("foiIdCustomerReturnInventoryItemsMap",StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
335
				StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
316
		model.addAttribute("fofoOrderItems", fofoOrderItems);
336
		model.addAttribute("fofoOrderItems", fofoOrderItems);
317
		model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
337
		model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
318
		model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
338
		model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
319
		model.addAttribute("customerBillingAddressObj", customerAddress);
339
		model.addAttribute("customerBillingAddressObj", customerAddress);
320
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
340
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
Line 323... Line 343...
323
		model.addAttribute("itemIdPrebookingOrderItemMap", itemIdPrebookingOrderItemMap);
343
		model.addAttribute("itemIdPrebookingOrderItemMap", itemIdPrebookingOrderItemMap);
324
		model.addAttribute("markDoa", this.markDoa(fofoOrder));
344
		model.addAttribute("markDoa", this.markDoa(fofoOrder));
325
		model.addAttribute("markDefective", this.markDefective(fofoOrder));
345
		model.addAttribute("markDefective", this.markDefective(fofoOrder));
326
		return "sale-details";
346
		return "sale-details";
327
	}
347
	}
328
	
348
 
329
	private boolean markDoa(FofoOrder fofoOrder) {
349
	private boolean markDoa(FofoOrder fofoOrder) {
330
		return fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS).plusDays(90).
350
		return fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS).plusDays(90)
331
		isAfter(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));
351
				.isAfter(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));
332
	}
352
	}
333
	
353
 
334
	private boolean markDefective(FofoOrder fofoOrder) {
354
	private boolean markDefective(FofoOrder fofoOrder) {
335
		return fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS).plusDays(180).
355
		return fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS).plusDays(180)
336
		isAfter(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));
356
				.isAfter(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));
337
		
357
 
338
	}
358
	}
339
	
359
 
340
	@RequestMapping(value = "/getSearchOrder")
360
	@RequestMapping(value = "/getSearchOrder")
341
	public String getSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException{
361
	public String getSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
342
		return "search-order";
362
		return "search-order";
343
	}
363
	}
344
	
-
 
345
	
364
 
346
	@RequestMapping(value = "/customerDetails", method = RequestMethod.PUT)
365
	@RequestMapping(value = "/customerDetails", method = RequestMethod.PUT)
347
	public String updateCustomerDetails(HttpServletRequest request, @RequestBody CustomCustomer customCustomer, @RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
366
	public String updateCustomerDetails(HttpServletRequest request, @RequestBody CustomCustomer customCustomer,
-
 
367
			@RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
348
			throws ProfitMandiBusinessException{
368
			throws ProfitMandiBusinessException {
349
			
369
 
350
		orderService.updateCustomerDetails(customCustomer, invoiceNumber);
370
		orderService.updateCustomerDetails(customCustomer, invoiceNumber);
351
		
371
 
352
		return this.getSearchOrderDetails(request, invoiceNumber, model);
372
		return this.getSearchOrderDetails(request, invoiceNumber, model);
353
	}
373
	}
354
	
-
 
355
	
374
 
356
	@RequestMapping(value = "/searchOrderDetails", method = RequestMethod.GET)
375
	@RequestMapping(value = "/searchOrderDetails", method = RequestMethod.GET)
-
 
376
	public String getSearchOrderDetails(HttpServletRequest request,
357
	public String getSearchOrderDetails(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model) throws ProfitMandiBusinessException{
377
			@RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
-
 
378
			throws ProfitMandiBusinessException {
358
		
379
 
359
		FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
380
		FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
360
		List<FofoOrderItem> fofoLineItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
381
		List<FofoOrderItem> fofoLineItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
361
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
382
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
362
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
383
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
363
		List<PaymentOptionTransaction> paymentOptionTransactions = fofoOrderPaymentOptionRepository.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
384
		List<PaymentOptionTransaction> paymentOptionTransactions = fofoOrderPaymentOptionRepository
-
 
385
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
364
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
386
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
-
 
387
				.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
-
 
388
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
365
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
389
				.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
366
		this.addInsuranceProvider(insurancePolicies);
390
		this.addInsuranceProvider(insurancePolicies);
367
		List<PrebookingOrderItem> prebookingOrderItems = prebookingOrderItemRepository.selectByOrderId(fofoOrder.getId());
391
		List<PrebookingOrderItem> prebookingOrderItems = prebookingOrderItemRepository
-
 
392
				.selectByOrderId(fofoOrder.getId());
-
 
393
		Map<Integer, PrebookingOrderItem> itemIdPrebookingOrderItemMap = this
368
		Map<Integer, PrebookingOrderItem> itemIdPrebookingOrderItemMap = this.prebookingOrderItemToItemIdPrebookingOrderItem(prebookingOrderItems);
394
				.prebookingOrderItemToItemIdPrebookingOrderItem(prebookingOrderItems);
369
		model.addAttribute("fofoOrder", fofoOrder);
395
		model.addAttribute("fofoOrder", fofoOrder);
370
		model.addAttribute("fofoLineItems", fofoLineItems);
396
		model.addAttribute("fofoLineItems", fofoLineItems);
371
		model.addAttribute("customer", customer);
397
		model.addAttribute("customer", customer);
372
		model.addAttribute("customerAddress", customerAddress);
398
		model.addAttribute("customerAddress", customerAddress);
373
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
399
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
Line 375... Line 401...
375
		model.addAttribute("insurancePolicies", insurancePolicies);
401
		model.addAttribute("insurancePolicies", insurancePolicies);
376
		model.addAttribute("itemIdPrebookingOrderItemMap", itemIdPrebookingOrderItemMap);
402
		model.addAttribute("itemIdPrebookingOrderItemMap", itemIdPrebookingOrderItemMap);
377
		model.addAttribute("stateNames", Utils.getAllStateNames());
403
		model.addAttribute("stateNames", Utils.getAllStateNames());
378
		return "search-order-details";
404
		return "search-order-details";
379
	}
405
	}
380
	
406
 
381
	private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap(List<PaymentOptionTransaction> paymentOptionTransactions){
407
	private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap(
-
 
408
			List<PaymentOptionTransaction> paymentOptionTransactions) {
382
		Set<Integer> paymentOptionIds = new HashSet<>();
409
		Set<Integer> paymentOptionIds = new HashSet<>();
383
		for(PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
410
		for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
384
			paymentOptionIds.add(paymentOptionTransaction.getPaymentOptionId());
411
			paymentOptionIds.add(paymentOptionTransaction.getPaymentOptionId());
385
		}
412
		}
386
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(paymentOptionIds);
413
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(paymentOptionIds);
387
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
414
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
388
		for(PaymentOption paymentOption : paymentOptions) {
415
		for (PaymentOption paymentOption : paymentOptions) {
389
			paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
416
			paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
390
		}
417
		}
391
		return paymentOptionIdPaymentOptionMap;
418
		return paymentOptionIdPaymentOptionMap;
392
	}
419
	}
393
	
420
 
394
	private Map<Integer, PrebookingOrderItem> prebookingOrderItemToItemIdPrebookingOrderItem(List<PrebookingOrderItem> prebookingOrderItems){
421
	private Map<Integer, PrebookingOrderItem> prebookingOrderItemToItemIdPrebookingOrderItem(
-
 
422
			List<PrebookingOrderItem> prebookingOrderItems) {
395
		Map<Integer, PrebookingOrderItem> itemIdPrebookingOrderItem = new HashMap<>();
423
		Map<Integer, PrebookingOrderItem> itemIdPrebookingOrderItem = new HashMap<>();
396
		for(PrebookingOrderItem prebookingOrderItem : prebookingOrderItems) {
424
		for (PrebookingOrderItem prebookingOrderItem : prebookingOrderItems) {
397
			itemIdPrebookingOrderItem.put(prebookingOrderItem.getItemId(), prebookingOrderItem);
425
			itemIdPrebookingOrderItem.put(prebookingOrderItem.getItemId(), prebookingOrderItem);
398
		}
426
		}
399
		return itemIdPrebookingOrderItem;
427
		return itemIdPrebookingOrderItem;
400
	}
428
	}
401
	
-
 
402
 
429
 
403
	@RequestMapping(value = "/create-order", method = RequestMethod.POST)
430
	@RequestMapping(value = "/create-order", method = RequestMethod.POST)
404
	public String createOrder(HttpServletRequest request, @RequestBody CreateOrderRequest createOrderRequest, Model model)  throws ProfitMandiBusinessException{
431
	public String createOrder(HttpServletRequest request, @RequestBody CreateOrderRequest createOrderRequest,
-
 
432
			Model model) throws ProfitMandiBusinessException {
405
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), createOrderRequest);
433
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), createOrderRequest);
406
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
434
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
407
		
435
 
408
		int fofoOrderId = orderService.createOrder(createOrderRequest, fofoDetails.getFofoId(), accessoriesDeals);
436
		int fofoOrderId = orderService.createOrder(createOrderRequest, fofoDetails.getFofoId(), accessoriesDeals);
409
		LOGGER.info("Order has been created successfully...");
437
		LOGGER.info("Order has been created successfully...");
410
		return "redirect:/get-order/?orderId="+fofoOrderId;
438
		return "redirect:/get-order/?orderId=" + fofoOrderId;
411
	}
439
	}
412
	
440
 
413
	@RequestMapping(value = "/order/bad_return", method = RequestMethod.POST)
441
	@RequestMapping(value = "/order/bad_return", method = RequestMethod.POST)
414
	public ResponseEntity<?> badReturn(HttpServletRequest request, @RequestBody FoiBadReturnRequest foiBadReturnRequest, Model model)  throws ProfitMandiBusinessException{
442
	public ResponseEntity<?> badReturn(HttpServletRequest request, @RequestBody FoiBadReturnRequest foiBadReturnRequest,
-
 
443
			Model model) throws ProfitMandiBusinessException {
415
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), foiBadReturnRequest);
444
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), foiBadReturnRequest);
416
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
445
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
417
		CustomerCreditNote custmoerCreditNote = orderService.badReturn(fofoDetails.getFofoId(), foiBadReturnRequest);
446
		CustomerCreditNote custmoerCreditNote = orderService.badReturn(fofoDetails.getFofoId(), foiBadReturnRequest);
418
		return responseSender.ok(custmoerCreditNote.getId());
447
		return responseSender.ok(custmoerCreditNote.getId());
419
	}
448
	}
420
 
449
 
421
 
-
 
422
	@RequestMapping(value = "/generateInvoice")
450
	@RequestMapping(value = "/generateInvoice")
-
 
451
	public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
423
	public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException{
452
			@RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
424
		LOGGER.info("Request received at url {} with params [{}={}] ", request.getRequestURI(), ProfitMandiConstants.ORDER_ID, orderId);
453
		LOGGER.info("Request received at url {} with params [{}={}] ", request.getRequestURI(),
-
 
454
				ProfitMandiConstants.ORDER_ID, orderId);
425
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
455
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
426
		PdfModel pdfModel = null;
456
		PdfModel pdfModel = null;
427
		if(roleManager.isAdmin(fofoDetails.getRoleIds())) {
457
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
428
			pdfModel = orderService.getInvoicePdfModel(orderId);
458
			pdfModel = orderService.getInvoicePdfModel(orderId);
429
		}else {
459
		} else {
430
			pdfModel = orderService.getInvoicePdfModel(fofoDetails.getFofoId(), orderId);
460
			pdfModel = orderService.getInvoicePdfModel(fofoDetails.getFofoId(), orderId);
431
		}
461
		}
432
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
462
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
433
		PdfUtils.generateAndWrite(pdfModel, byteArrayOutputStream);
463
		PdfUtils.generateAndWrite(pdfModel, byteArrayOutputStream);
434
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
464
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
435
        final HttpHeaders headers=new HttpHeaders();
465
		final HttpHeaders headers = new HttpHeaders();
436
        headers.setContentType(MediaType.APPLICATION_PDF);
466
		headers.setContentType(MediaType.APPLICATION_PDF);
437
        headers.set("Content-disposition", "inline; filename=invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
467
		headers.set("Content-disposition", "inline; filename=invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
438
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
468
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
439
        final InputStream inputStream=new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
469
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
440
        final InputStreamResource inputStreamResource=new InputStreamResource(inputStream);
470
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
441
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
471
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
442
	}
472
	}
443
	
473
 
444
	@RequestMapping(value = "/saleHistory")
474
	@RequestMapping(value = "/saleHistory")
-
 
475
	public String saleHistory(HttpServletRequest request,
445
	public String saleHistory(HttpServletRequest request, @RequestParam(name = "searchValue", defaultValue = "") String searchValue, 
476
			@RequestParam(name = "searchValue", defaultValue = "") String searchValue,
446
			@RequestParam(name = "searchType", defaultValue="") SearchType searchType, 
477
			@RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
447
			@RequestParam(required = false) LocalDateTime startTime, 
478
			@RequestParam(required = false) LocalDateTime startTime,
448
			@RequestParam(required = false) LocalDateTime endTime, 
479
			@RequestParam(required = false) LocalDateTime endTime,
-
 
480
			@RequestParam(name = "offset", defaultValue = "0") int offset,
449
			@RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{
481
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
-
 
482
			throws ProfitMandiBusinessException {
450
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
483
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
451
		
484
 
452
		Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue, startTime, endTime, offset, limit);
485
		Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
-
 
486
				startTime, endTime, offset, limit);
453
		model.addAllAttributes(map);
487
		model.addAllAttributes(map);
454
		
488
 
455
		return "sale-history";
489
		return "sale-history";
456
	}
490
	}
457
	
491
 
458
	@RequestMapping(value="/credit-note/{creditNoteId}") 
492
	@RequestMapping(value = "/credit-note/{creditNoteId}")
459
	public ResponseEntity<?> downloadCreditNote(HttpServletRequest request, @PathVariable int creditNoteId) throws ProfitMandiBusinessException	{
493
	public ResponseEntity<?> downloadCreditNote(HttpServletRequest request, @PathVariable int creditNoteId)
-
 
494
			throws ProfitMandiBusinessException {
460
		CreditNotePdfModel creditNotePdfModel = orderService.getCreditNotePdfModel(creditNoteId);
495
		CreditNotePdfModel creditNotePdfModel = orderService.getCreditNotePdfModel(creditNoteId);
461
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
496
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
462
		PdfUtils.generateAndWriteCustomerCreditNotes(Arrays.asList(creditNotePdfModel), byteArrayOutputStream);
497
		PdfUtils.generateAndWriteCustomerCreditNotes(Arrays.asList(creditNotePdfModel), byteArrayOutputStream);
463
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
498
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
464
        final HttpHeaders headers=new HttpHeaders();
499
		final HttpHeaders headers = new HttpHeaders();
465
        headers.setContentType(MediaType.APPLICATION_PDF);
500
		headers.setContentType(MediaType.APPLICATION_PDF);
-
 
501
		headers.set("Content-disposition",
466
        headers.set("Content-disposition", "inline; filename=invoice-" + creditNotePdfModel.getCreditNoteNumber() + ".pdf");
502
				"inline; filename=invoice-" + creditNotePdfModel.getCreditNoteNumber() + ".pdf");
467
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
503
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
468
        final InputStream inputStream=new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
504
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
469
        final InputStreamResource inputStreamResource=new InputStreamResource(inputStream);
505
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
470
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
506
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
471
	}
507
	}
472
	
-
 
473
	
508
 
474
	@RequestMapping(value = "/getPaginatedSaleHistory")
509
	@RequestMapping(value = "/getPaginatedSaleHistory")
-
 
510
	public String getSaleHistoryPaginated(HttpServletRequest request,
-
 
511
			@RequestParam(name = "searchValue", defaultValue = "") String searchValue,
475
	public String getSaleHistoryPaginated(HttpServletRequest request, @RequestParam(name = "searchValue", defaultValue="") String searchValue, @RequestParam(name = "searchType", defaultValue = "") SearchType searchType, 
512
			@RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
476
			@RequestParam(required = false) LocalDateTime startTime, 
513
			@RequestParam(required = false) LocalDateTime startTime,
477
			@RequestParam(required = false) LocalDateTime endTime, 
514
			@RequestParam(required = false) LocalDateTime endTime,
478
			@RequestParam(name = "offset", defaultValue = "0") int offset, 
515
			@RequestParam(name = "offset", defaultValue = "0") int offset,
479
			@RequestParam(name = "limit", defaultValue="10") int limit, Model model) throws ProfitMandiBusinessException{
516
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
-
 
517
			throws ProfitMandiBusinessException {
480
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
518
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
481
		
-
 
482
		Map<String, Object> map = orderService.getSaleHistoryPaginated(loginDetails.getFofoId(), searchType, searchValue, startTime, endTime, offset, limit);
519
		Map<String, Object> map = orderService.getSaleHistoryPaginated(loginDetails.getFofoId(), searchType,
-
 
520
				searchValue, startTime, endTime, offset, limit);
483
		model.addAllAttributes(map);
521
		model.addAllAttributes(map);
484
		
522
 
485
		return "sale-history-paginated";
523
		return "sale-history-paginated";
486
	}
524
	}
487
 
525
 
488
}
526
}