Subversion Repositories SmartDukaan

Rev

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

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