Subversion Repositories SmartDukaan

Rev

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

Rev 33172 Rev 33213
Line 3... Line 3...
3
import com.google.gson.Gson;
3
import com.google.gson.Gson;
4
import com.spice.profitmandi.common.enumuration.SearchType;
4
import com.spice.profitmandi.common.enumuration.SearchType;
5
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
5
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
6
import com.spice.profitmandi.common.model.*;
6
import com.spice.profitmandi.common.model.*;
7
import com.spice.profitmandi.common.solr.SolrService;
7
import com.spice.profitmandi.common.solr.SolrService;
-
 
8
import com.spice.profitmandi.common.util.FileUtil;
8
import com.spice.profitmandi.common.util.PdfUtils;
9
import com.spice.profitmandi.common.util.PdfUtils;
9
import com.spice.profitmandi.common.util.StringUtils;
10
import com.spice.profitmandi.common.util.StringUtils;
10
import com.spice.profitmandi.common.web.util.ResponseSender;
11
import com.spice.profitmandi.common.web.util.ResponseSender;
-
 
12
import com.spice.profitmandi.dao.entity.auth.AuthUser;
11
import com.spice.profitmandi.dao.entity.catalog.Item;
13
import com.spice.profitmandi.dao.entity.catalog.Item;
12
import com.spice.profitmandi.dao.entity.catalog.TagListing;
14
import com.spice.profitmandi.dao.entity.catalog.TagListing;
13
import com.spice.profitmandi.dao.entity.dtr.InsurancePolicy;
15
import com.spice.profitmandi.dao.entity.dtr.InsurancePolicy;
14
import com.spice.profitmandi.dao.entity.dtr.InsuranceProvider;
16
import com.spice.profitmandi.dao.entity.dtr.InsuranceProvider;
15
import com.spice.profitmandi.dao.entity.dtr.PaymentOptionTransaction;
17
import com.spice.profitmandi.dao.entity.dtr.PaymentOptionTransaction;
16
import com.spice.profitmandi.dao.entity.fofo.*;
18
import com.spice.profitmandi.dao.entity.fofo.*;
-
 
19
import com.spice.profitmandi.dao.entity.transaction.LineItem;
-
 
20
import com.spice.profitmandi.dao.entity.transaction.Order;
-
 
21
import com.spice.profitmandi.dao.entity.transaction.Transaction;
-
 
22
import com.spice.profitmandi.dao.entity.transaction.TransactionApproval;
17
import com.spice.profitmandi.dao.entity.user.Address;
23
import com.spice.profitmandi.dao.entity.user.Address;
18
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
24
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
19
import com.spice.profitmandi.dao.enumuration.transaction.OrderStatus;
25
import com.spice.profitmandi.dao.enumuration.transaction.OrderStatus;
-
 
26
import com.spice.profitmandi.dao.enumuration.transaction.TransactionApprovalStatus;
-
 
27
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
20
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
28
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
21
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
29
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
22
import com.spice.profitmandi.dao.repository.dtr.*;
30
import com.spice.profitmandi.dao.repository.dtr.*;
23
import com.spice.profitmandi.dao.repository.fofo.*;
31
import com.spice.profitmandi.dao.repository.fofo.*;
24
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
32
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
-
 
33
import com.spice.profitmandi.dao.repository.transaction.LineItemRepository;
25
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
34
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
-
 
35
import com.spice.profitmandi.dao.repository.transaction.TransactionApprovalRepository;
-
 
36
import com.spice.profitmandi.dao.repository.transaction.TransactionRepository;
26
import com.spice.profitmandi.dao.repository.user.AddressRepository;
37
import com.spice.profitmandi.dao.repository.user.AddressRepository;
27
import com.spice.profitmandi.service.EmailService;
38
import com.spice.profitmandi.service.EmailService;
28
import com.spice.profitmandi.service.NotificationService;
39
import com.spice.profitmandi.service.NotificationService;
29
import com.spice.profitmandi.service.authentication.RoleManager;
40
import com.spice.profitmandi.service.authentication.RoleManager;
30
import com.spice.profitmandi.service.integrations.zest.InsuranceService;
41
import com.spice.profitmandi.service.integrations.zest.InsuranceService;
31
import com.spice.profitmandi.service.integrations.zest.MobileInsurancePlan;
42
import com.spice.profitmandi.service.integrations.zest.MobileInsurancePlan;
32
import com.spice.profitmandi.service.order.BulkOrderService;
43
import com.spice.profitmandi.service.order.BulkOrderService;
33
import com.spice.profitmandi.service.order.OrderService;
44
import com.spice.profitmandi.service.order.OrderService;
34
import com.spice.profitmandi.service.pricing.PricingService;
45
import com.spice.profitmandi.service.pricing.PricingService;
-
 
46
import com.spice.profitmandi.service.transaction.TransactionService;
35
import com.spice.profitmandi.service.user.RetailerService;
47
import com.spice.profitmandi.service.user.RetailerService;
36
import com.spice.profitmandi.service.whatsapp.WhatsappMessageService;
48
import com.spice.profitmandi.service.whatsapp.WhatsappMessageService;
37
import com.spice.profitmandi.service.whatsapp.WhatsappMessageType;
49
import com.spice.profitmandi.service.whatsapp.WhatsappMessageType;
38
import com.spice.profitmandi.web.model.LoginDetails;
50
import com.spice.profitmandi.web.model.LoginDetails;
39
import com.spice.profitmandi.web.util.CookiesProcessor;
51
import com.spice.profitmandi.web.util.CookiesProcessor;
Line 68... Line 80...
68
 
80
 
69
@Controller
81
@Controller
70
@Transactional(rollbackFor = Throwable.class)
82
@Transactional(rollbackFor = Throwable.class)
71
public class OrderController {
83
public class OrderController {
72
 
84
 
73
	private static final Logger LOGGER = LogManager.getLogger(OrderController.class);
85
    private static final Logger LOGGER = LogManager.getLogger(OrderController.class);
74
 
86
 
75
	private static final List<String> offlineOrders = Arrays.asList("EMIOD", "POD");
87
    private static final List<String> offlineOrders = Arrays.asList("EMIOD", "POD");
76
	private static final List<String> allowedDoaImeis = Arrays.asList("863903054378477");
88
    private static final List<String> allowedDoaImeis = Arrays.asList("863903054378477");
77
	@Autowired
89
    @Autowired
78
	NotificationService notificationService;
90
    NotificationService notificationService;
79
	@Autowired
91
    @Autowired
80
	private CustomerRepository customerRepository;
92
    TransactionApprovalRepository transactionApprovalRepository;
81
	private boolean accessoriesDeals = true;
93
    @Autowired
82
	@Autowired
94
    LineItemRepository lineItemRepository;
83
	private RoleManager roleManager;
95
    @Autowired
84
	@Autowired
96
    AuthRepository authRepository;
85
	private Gson gson;
97
    @Autowired
86
	@Autowired
98
    TransactionService transactionService;
87
	private CustomerReturnItemRepository customerReturnItemRepository;
99
    @Autowired
88
	@Autowired
100
    BulkOrderService bulkOrderService;
89
	private FofoOrderItemRepository fofoOrderItemRepository;
101
    @Autowired
90
	@Autowired
102
    private CustomerRepository customerRepository;
91
	private PaymentOptionRepository paymentOptionRepository;
103
    private boolean accessoriesDeals = true;
92
	@Autowired
104
    @Autowired
93
	private StateRepository stateRepository;
105
    private RoleManager roleManager;
94
	@Autowired
106
    @Autowired
95
	private ItemRepository itemRepository;
107
    private Gson gson;
96
	@Autowired
108
    @Autowired
97
	private MVCResponseSender mvcResponseSender;
109
    private CustomerReturnItemRepository customerReturnItemRepository;
98
	@Autowired
110
    @Autowired
99
	private InsuranceService insuranceService;
111
    private FofoOrderItemRepository fofoOrderItemRepository;
100
	@Autowired
112
    @Autowired
101
	private FofoOrderRepository fofoOrderRepository;
113
    private PaymentOptionRepository paymentOptionRepository;
102
	@Autowired
114
    @Autowired
103
	private CustomerAddressRepository customerAddressRepository;
115
    private StateRepository stateRepository;
104
	@Autowired
116
    @Autowired
105
	private InsurancePolicyRepository insurancePolicyRepository;
117
    private ItemRepository itemRepository;
106
	@Autowired
118
    @Autowired
107
	private InsuranceProviderRepository insuranceProviderRepository;
119
    private MVCResponseSender mvcResponseSender;
108
	@Autowired
120
    @Autowired
109
	private CookiesProcessor cookiesProcessor;
121
    private InsuranceService insuranceService;
110
	@Autowired
122
    @Autowired
111
	private PricingService pricingService;
123
    private FofoOrderRepository fofoOrderRepository;
112
	@Autowired
124
    @Autowired
113
	private OrderService orderService;
125
    private CustomerAddressRepository customerAddressRepository;
114
	@Autowired
126
    @Autowired
115
	private RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
127
    private InsurancePolicyRepository insurancePolicyRepository;
116
	@Autowired
128
    @Autowired
117
	private AddressRepository addressRepository;
129
    private InsuranceProviderRepository insuranceProviderRepository;
118
	@Autowired
130
    @Autowired
119
	private PaymentOptionTransactionRepository paymentOptionTransactionRepository;
131
    private CookiesProcessor cookiesProcessor;
120
	@Autowired
132
    @Autowired
121
	private FofoPartnerPaymentOptionRepository fofoPartnerPaymentOptionRepository;
133
    private PricingService pricingService;
122
	@Autowired
134
    @Autowired
123
	private ResponseSender<?> responseSender;
135
    private OrderService orderService;
124
	@Autowired
136
    @Autowired
125
	private PendingOrderRepository pendingOrderRepository;
137
    private RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
126
	@Autowired
138
    @Autowired
127
	private OrderRepository orderRepository;
139
    private AddressRepository addressRepository;
128
	@Autowired
140
    @Autowired
129
	private PendingOrderItemRepository pendingOrderItemRepository;
141
    private PaymentOptionTransactionRepository paymentOptionTransactionRepository;
130
	@Autowired
142
    @Autowired
131
	private FofoStoreRepository fofoStoreRepository;
143
    private FofoPartnerPaymentOptionRepository fofoPartnerPaymentOptionRepository;
132
	@Autowired
144
    @Autowired
133
	private RetailerService retailerService;
145
    private ResponseSender<?> responseSender;
134
	@Autowired
146
    @Autowired
135
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
147
    private PendingOrderRepository pendingOrderRepository;
136
	@Autowired
148
    @Autowired
137
	private TagListingRepository tagListingRepository;
149
    private OrderRepository orderRepository;
138
	@Autowired
150
    @Autowired
139
	private PendingOrderService pendingOrderService;
151
    private PendingOrderItemRepository pendingOrderItemRepository;
140
	@Autowired
152
    @Autowired
141
	private EmailService emailService;
153
    private FofoStoreRepository fofoStoreRepository;
142
	@Autowired
154
    @Autowired
143
	private SolrService commonSolrService;
155
    private RetailerService retailerService;
144
	@Autowired
156
    @Autowired
145
	private MouRepository mouRepository;
157
    private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
146
 
158
    @Autowired
147
	@Autowired
159
    private TagListingRepository tagListingRepository;
148
	private WhatsappMessageService whatsappMessageService;
160
    @Autowired
149
 
161
    private PendingOrderService pendingOrderService;
150
	@RequestMapping(value = "/order")
162
    @Autowired
151
	public String orderIndex(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
163
    private EmailService emailService;
152
			throws ProfitMandiBusinessException {
164
    @Autowired
153
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
165
    private SolrService commonSolrService;
154
 
166
    @Autowired
155
		int addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(loginDetails.getFofoId());
167
    private MouRepository mouRepository;
156
		Address address = addressRepository.selectById(addressId);
168
    @Autowired
157
 
169
    private WhatsappMessageService whatsappMessageService;
158
		List<CartFofo> cartItems = orderService.cartCheckout(cartData);
170
    @Autowired
159
		Set<Integer> itemIds = new HashSet<>();
171
    private TransactionRepository transactionRepository;
160
		List<Integer> poIds = new ArrayList<>();
172
 
161
		List<Integer> poItemIds = new ArrayList<>();
173
    @RequestMapping(value = "/order")
162
		for (CartFofo cartFofo : cartItems) {
174
    public String orderIndex(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
163
			itemIds.add(cartFofo.getItemId());
175
            throws ProfitMandiBusinessException {
164
			if (cartFofo.getPoId() != 0) {
176
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
165
				poIds.add(cartFofo.getPoId());
177
 
166
				poItemIds.add(cartFofo.getPoItemId());
178
        int addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(loginDetails.getFofoId());
167
			}
179
        Address address = addressRepository.selectById(addressId);
168
		}
180
 
169
 
181
        List<CartFofo> cartItems = orderService.cartCheckout(cartData);
170
		PendingOrder po = null;
182
        Set<Integer> itemIds = new HashSet<>();
171
		Customer customer = null;
183
        List<Integer> poIds = new ArrayList<>();
172
		PendingOrderItem poi = null;
184
        List<Integer> poItemIds = new ArrayList<>();
173
		Map<Integer, PriceModel> mopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIds,
185
        for (CartFofo cartFofo : cartItems) {
174
				loginDetails.getFofoId());
186
            itemIds.add(cartFofo.getItemId());
175
		List<Integer> paymentOptionIds = fofoPartnerPaymentOptionRepository
187
            if (cartFofo.getPoId() != 0) {
176
				.selectPaymentOptionIdsByFofoId(loginDetails.getFofoId());
188
                poIds.add(cartFofo.getPoId());
177
 
189
                poItemIds.add(cartFofo.getPoItemId());
178
		if (!poIds.isEmpty()) {
190
            }
179
			po = pendingOrderRepository.selectById(poIds.get(0));
191
        }
180
			customer = customerRepository.selectById(po.getCustomerId());
192
 
181
			if (!offlineOrders.contains(po.getPayMethod())) {
193
        PendingOrder po = null;
182
				paymentOptionIds.add(23);
194
        Customer customer = null;
183
			}
195
        PendingOrderItem poi = null;
184
		}
196
        Map<Integer, PriceModel> mopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIds,
185
 
197
                loginDetails.getFofoId());
186
		if (!poItemIds.isEmpty()) {
198
        List<Integer> paymentOptionIds = fofoPartnerPaymentOptionRepository
187
			poi = pendingOrderItemRepository.selectById(poItemIds.get(0));
199
                .selectPaymentOptionIdsByFofoId(loginDetails.getFofoId());
188
		}
200
 
189
 
201
        if (!poIds.isEmpty()) {
190
		// List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(new
202
            po = pendingOrderRepository.selectById(poIds.get(0));
191
		// HashSet<>(paymentOptionIds));
203
            customer = customerRepository.selectById(po.getCustomerId());
192
 
204
            if (!offlineOrders.contains(po.getPayMethod())) {
193
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectActiveOption();
205
                paymentOptionIds.add(23);
194
 
206
            }
195
		LOGGER.info("pendingOrder" + po);
207
        }
196
		LOGGER.info("pendingOrderItem" + poi);
208
 
197
 
209
        if (!poItemIds.isEmpty()) {
198
		LOGGER.info("mopPriceMap {}", mopPriceMap);
210
            poi = pendingOrderItemRepository.selectById(poItemIds.get(0));
199
		model.addAttribute("stateNames",
211
        }
200
				stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
212
 
201
		model.addAttribute("retailerStateName", address.getState());
213
        // List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(new
202
		model.addAttribute("pendingPOCustomer", gson.toJson(customer));
214
        // HashSet<>(paymentOptionIds));
203
		model.addAttribute("pendingPO", gson.toJson(po));
215
 
204
 
216
        List<PaymentOption> paymentOptions = paymentOptionRepository.selectActiveOption();
205
		model.addAttribute("cartItems", cartItems);
217
 
206
		model.addAttribute("pendingOrder", po);
218
        LOGGER.info("pendingOrder" + po);
207
		model.addAttribute("pendingOrderItem", poi);
219
        LOGGER.info("pendingOrderItem" + poi);
208
 
220
 
209
		model.addAttribute("mopPriceMap", mopPriceMap);
221
        LOGGER.info("mopPriceMap {}", mopPriceMap);
210
		model.addAttribute("paymentOptions", paymentOptions);
222
        model.addAttribute("stateNames",
211
		model.addAttribute("accessoriesDeals", accessoriesDeals);
223
                stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
212
		return "order-index";
224
        model.addAttribute("retailerStateName", address.getState());
213
	}
225
        model.addAttribute("pendingPOCustomer", gson.toJson(customer));
214
 
226
        model.addAttribute("pendingPO", gson.toJson(po));
215
	@RequestMapping(value = "/checkplans", method = RequestMethod.GET)
227
 
216
	public String getInsurancePrices(HttpServletRequest request, @RequestParam float price, Model model,
228
        model.addAttribute("cartItems", cartItems);
217
									 @RequestParam int itemId) throws ProfitMandiBusinessException {
229
        model.addAttribute("pendingOrder", po);
218
		LOGGER.info("Request received at url : {}", request.getRequestURI());
230
        model.addAttribute("pendingOrderItem", poi);
219
 
231
 
220
		try {
232
        model.addAttribute("mopPriceMap", mopPriceMap);
221
			String response = mvcResponseSender.createResponseString(this.getPlans(price, itemId));
233
        model.addAttribute("paymentOptions", paymentOptions);
222
			model.addAttribute("response1", response);
234
        model.addAttribute("accessoriesDeals", accessoriesDeals);
223
		} catch (Exception e) {
235
        return "order-index";
224
			// TODO Auto-generated catch block
236
    }
225
			LOGGER.info(e.getMessage(), e);
237
 
226
			throw new ProfitMandiBusinessException("Plans", "Plans API", "Error formatting insurance plans");
238
    @RequestMapping(value = "/checkplans", method = RequestMethod.GET)
227
		}
239
    public String getInsurancePrices(HttpServletRequest request, @RequestParam float price, Model model,
228
 
240
                                     @RequestParam int itemId) throws ProfitMandiBusinessException {
229
		return "response";
241
        LOGGER.info("Request received at url : {}", request.getRequestURI());
230
	}
242
 
231
 
243
        try {
232
	@RequestMapping(value = "/get-order", method = RequestMethod.GET)
244
            String response = mvcResponseSender.createResponseString(this.getPlans(price, itemId));
233
	public String getOrder(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId,
245
            model.addAttribute("response1", response);
234
						   Model model) throws ProfitMandiBusinessException {
246
        } catch (Exception e) {
235
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
247
            // TODO Auto-generated catch block
236
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
248
            LOGGER.info(e.getMessage(), e);
237
		List<FofoOrderItem> fofoLineItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
249
            throw new ProfitMandiBusinessException("Plans", "Plans API", "Error formatting insurance plans");
238
		CustomerAddress customerAddress = null;
250
        }
239
		if (fofoOrder.getCustomerAddressId() != 0) {
251
 
240
			customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
252
        return "response";
241
		}
253
    }
242
 
254
 
243
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
255
    @RequestMapping(value = "/get-order", method = RequestMethod.GET)
244
		if (customerAddress != null) {
256
    public String getOrder(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId,
245
			customerAddress.setPhoneNumber(customer.getMobileNumber());
257
                           Model model) throws ProfitMandiBusinessException {
246
		}
258
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
247
		LOGGER.info("Added to get invoice - {}, {}", customer, 123);
259
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
248
		List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
260
        List<FofoOrderItem> fofoLineItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
249
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
261
        CustomerAddress customerAddress = null;
250
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
262
        if (fofoOrder.getCustomerAddressId() != 0) {
251
				.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
263
            customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
252
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
264
        }
253
				.selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
265
 
254
		this.addInsuranceProvider(insurancePolicies);
266
        Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
255
 
267
        if (customerAddress != null) {
256
		model.addAttribute("fofoOrder", fofoOrder);
268
            customerAddress.setPhoneNumber(customer.getMobileNumber());
257
		model.addAttribute("fofoLineItems", fofoLineItems);
269
        }
258
		if (customerAddress != null) {
270
        LOGGER.info("Added to get invoice - {}, {}", customer, 123);
259
			model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
271
        List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
260
		} else {
272
                .selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
261
			model.addAttribute("customerBillingAddress", "");
273
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
262
 
274
                .paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
263
		}
275
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
264
		model.addAttribute("customerBillingAddressObj", customerAddress);
276
                .selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
265
		model.addAttribute("customerDetailsObj", customer);
277
        this.addInsuranceProvider(insurancePolicies);
266
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
278
 
267
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
279
        model.addAttribute("fofoOrder", fofoOrder);
268
		model.addAttribute("insurancePolicies", insurancePolicies);
280
        model.addAttribute("fofoLineItems", fofoLineItems);
269
		return "order-details";
281
        if (customerAddress != null) {
270
	}
282
            model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
271
 
283
        } else {
272
	private Map<Integer, InsuranceProvider> toInsuranceProviderIdInsuranceProvider(
284
            model.addAttribute("customerBillingAddress", "");
273
			List<InsuranceProvider> insuranceProviders) {
285
 
274
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = new HashMap<>();
286
        }
275
		for (InsuranceProvider insuranceProvider : insuranceProviders) {
287
        model.addAttribute("customerBillingAddressObj", customerAddress);
276
			insuranceProviderIdInsuranceProviderMap.put(insuranceProvider.getId(), insuranceProvider);
288
        model.addAttribute("customerDetailsObj", customer);
277
		}
289
        model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
278
		return insuranceProviderIdInsuranceProviderMap;
290
        model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
279
	}
291
        model.addAttribute("insurancePolicies", insurancePolicies);
280
 
292
        return "order-details";
281
	private void addInsuranceProvider(List<InsurancePolicy> insurancePolicies) {
293
    }
282
		if (insurancePolicies.isEmpty()) {
294
 
283
			return;
295
    private Map<Integer, InsuranceProvider> toInsuranceProviderIdInsuranceProvider(
284
		}
296
            List<InsuranceProvider> insuranceProviders) {
285
		Set<Integer> insuranceProviderIds = new HashSet<>();
297
        Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = new HashMap<>();
286
		for (InsurancePolicy insurancePolicy : insurancePolicies) {
298
        for (InsuranceProvider insuranceProvider : insuranceProviders) {
287
			insuranceProviderIds.add(insurancePolicy.getProviderId());
299
            insuranceProviderIdInsuranceProviderMap.put(insuranceProvider.getId(), insuranceProvider);
288
		}
300
        }
289
		LOGGER.info("insuranceProviderIds {}", insuranceProviderIds);
301
        return insuranceProviderIdInsuranceProviderMap;
290
		List<InsuranceProvider> insuranceProviders = insuranceProviderRepository.selectByIds(insuranceProviderIds);
302
    }
291
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = this
303
 
292
				.toInsuranceProviderIdInsuranceProvider(insuranceProviders);
304
    private void addInsuranceProvider(List<InsurancePolicy> insurancePolicies) {
293
		for (InsurancePolicy insurancePolicy : insurancePolicies) {
305
        if (insurancePolicies.isEmpty()) {
294
			insurancePolicy
306
            return;
295
					.setInsuranceProvider(insuranceProviderIdInsuranceProviderMap.get(insurancePolicy.getProviderId()));
307
        }
296
		}
308
        Set<Integer> insuranceProviderIds = new HashSet<>();
297
	}
309
        for (InsurancePolicy insurancePolicy : insurancePolicies) {
298
 
310
            insuranceProviderIds.add(insurancePolicy.getProviderId());
299
	@RequestMapping(value = "/saleDetails", method = RequestMethod.GET)
311
        }
300
	public String getSaleDetails(HttpServletRequest request,
312
        LOGGER.info("insuranceProviderIds {}", insuranceProviderIds);
301
								 @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) throws Exception {
313
        List<InsuranceProvider> insuranceProviders = insuranceProviderRepository.selectByIds(insuranceProviderIds);
302
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
314
        Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = this
303
		boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
315
                .toInsuranceProviderIdInsuranceProvider(insuranceProviders);
304
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
316
        for (InsurancePolicy insurancePolicy : insurancePolicies) {
305
		List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
317
            insurancePolicy
306
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
318
                    .setInsuranceProvider(insuranceProviderIdInsuranceProviderMap.get(insurancePolicy.getProviderId()));
307
		List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
319
        }
308
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
320
    }
309
 
321
 
310
		// Added Migration info as we lost it.
322
    @RequestMapping(value = "/saleDetails", method = RequestMethod.GET)
311
		if (paymentOptionTransactions == null || paymentOptionTransactions.size() == 0) {
323
    public String getSaleDetails(HttpServletRequest request,
312
			PaymentOptionTransaction pot = new PaymentOptionTransaction();
324
                                 @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) throws Exception {
313
			pot.setAmount(fofoOrder.getTotalAmount());
325
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
314
			pot.setCreateTimestamp(fofoOrder.getCreateTimestamp());
326
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
315
			// Mark it paid through cash
327
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
316
			pot.setPaymentOptionId(1);
328
        List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
317
			pot.setReferenceType(PaymentOptionReferenceType.ORDER);
329
        CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
318
			paymentOptionTransactionRepository.persist(pot);
330
        List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
319
			paymentOptionTransactions.add(pot);
331
                .selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
320
			LOGGER.info("Added to get invoice");
332
 
321
		}
333
        // Added Migration info as we lost it.
322
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
334
        if (paymentOptionTransactions == null || paymentOptionTransactions.size() == 0) {
323
				.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
335
            PaymentOptionTransaction pot = new PaymentOptionTransaction();
324
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
336
            pot.setAmount(fofoOrder.getTotalAmount());
325
				.selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
337
            pot.setCreateTimestamp(fofoOrder.getCreateTimestamp());
326
		this.addInsuranceProvider(insurancePolicies);
338
            // Mark it paid through cash
327
		Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
339
            pot.setPaymentOptionId(1);
328
			try {
340
            pot.setReferenceType(PaymentOptionReferenceType.ORDER);
329
				return itemRepository.selectById(x.getItemId());
341
            paymentOptionTransactionRepository.persist(pot);
330
			} catch (ProfitMandiBusinessException e) {
342
            paymentOptionTransactions.add(pot);
331
				// TODO Auto-generated catch block
343
            LOGGER.info("Added to get invoice");
332
				return null;
344
        }
333
			}
345
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
334
		}));
346
                .paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
335
		Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
347
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
336
				.collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
348
                .selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
337
 
349
        this.addInsuranceProvider(insurancePolicies);
338
		Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
350
        Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
339
				.collect(Collectors.toMap(foi -> foi.getId(),
351
            try {
340
						foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
352
                return itemRepository.selectById(x.getItemId());
341
 
353
            } catch (ProfitMandiBusinessException e) {
342
		Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
354
                // TODO Auto-generated catch block
343
 
355
                return null;
344
		for (FofoOrderItem foi : fofoOrderItems) {
356
            }
345
			for (FofoLineItem fli : foi.getFofoLineItems()) {
357
        }));
346
				inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
358
        Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
347
			}
359
                .collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
348
			List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
360
 
349
					.selectAllByOrderItemId(foi.getId());
361
        Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
350
			this.markDoa(fofoOrder, foi, isAdmin);
362
                .collect(Collectors.toMap(foi -> foi.getId(),
351
			for (CustomerReturnItem customerReturnItem : customerReturnItems) {
363
                        foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
352
				inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
364
 
353
						inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
365
        Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
354
			}
366
 
355
		}
367
        for (FofoOrderItem foi : fofoOrderItems) {
356
 
368
            for (FofoLineItem fli : foi.getFofoLineItems()) {
357
		LOGGER.info("fofoOrderItemIdLineItemMap {}", fofoOrderItemIdLineItemMap);
369
                inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
358
		model.addAttribute("fofoOrder", fofoOrder);
370
            }
359
		model.addAttribute("itemsMap", itemsMap);
371
            List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
360
		model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
372
                    .selectAllByOrderItemId(foi.getId());
361
		model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
373
            this.markDoa(fofoOrder, foi, isAdmin);
362
				StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
374
            for (CustomerReturnItem customerReturnItem : customerReturnItems) {
363
		model.addAttribute("fofoOrderItemIdLineItemMap", fofoOrderItemIdLineItemMap);
375
                inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
364
 
376
                        inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
365
		model.addAttribute("fofoOrderItems", fofoOrderItems);
377
            }
366
		model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
378
        }
367
		if (customerAddress != null) {
379
 
368
 
380
        LOGGER.info("fofoOrderItemIdLineItemMap {}", fofoOrderItemIdLineItemMap);
369
			model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
381
        model.addAttribute("fofoOrder", fofoOrder);
370
		} else {
382
        model.addAttribute("itemsMap", itemsMap);
371
			model.addAttribute("customerBillingAddress", "");
383
        model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
372
 
384
        model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
373
		}
385
                StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
374
		model.addAttribute("customerBillingAddressObj", customerAddress);
386
        model.addAttribute("fofoOrderItemIdLineItemMap", fofoOrderItemIdLineItemMap);
375
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
387
 
376
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
388
        model.addAttribute("fofoOrderItems", fofoOrderItems);
377
		model.addAttribute("insurancePolicies", insurancePolicies);
389
        model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
378
		model.addAttribute("markDefective", this.markDefective(fofoOrder));
390
        if (customerAddress != null) {
379
		return "sale-details";
391
 
380
	}
392
            model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
381
 
393
        } else {
382
	private void markDoa(FofoOrder fofoOrder, FofoOrderItem foi, boolean isAdmin) {
394
            model.addAttribute("customerBillingAddress", "");
383
		if (isAdmin) {
395
 
384
			foi.setDoa(true);
396
        }
385
			return;
397
        model.addAttribute("customerBillingAddressObj", customerAddress);
386
		}
398
        model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
387
		boolean isImei = foi.getFofoLineItems().stream()
399
        model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
388
				.anyMatch(x -> org.apache.commons.lang3.StringUtils.isNotEmpty(x.getSerialNumber())
400
        model.addAttribute("insurancePolicies", insurancePolicies);
389
						&& allowedDoaImeis.contains(x.getSerialNumber()));
401
        model.addAttribute("markDefective", this.markDefective(fofoOrder));
390
		LocalDateTime buyDate = fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS);
402
        return "sale-details";
391
		LocalDateTime curDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
403
    }
392
		if (buyDate.isAfter(curDate.minusDays(45)) || isImei) {
404
 
393
			foi.setDoa(true);
405
    private void markDoa(FofoOrder fofoOrder, FofoOrderItem foi, boolean isAdmin) {
394
		} else
406
        if (isAdmin) {
395
			foi.setDoa(
407
            foi.setDoa(true);
396
					foi.getBrand().equals("Nokia") && foi.getCost() < 4990 && buyDate.isAfter(curDate.minusYears(1)));
408
            return;
397
	}
409
        }
398
 
410
        boolean isImei = foi.getFofoLineItems().stream()
399
	private boolean markDefective(FofoOrder fofoOrder) {
411
                .anyMatch(x -> org.apache.commons.lang3.StringUtils.isNotEmpty(x.getSerialNumber())
400
		return fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS).plusDays(180)
412
                        && allowedDoaImeis.contains(x.getSerialNumber()));
401
				.isAfter(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));
413
        LocalDateTime buyDate = fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS);
402
 
414
        LocalDateTime curDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
403
	}
415
        if (buyDate.isAfter(curDate.minusDays(45)) || isImei) {
404
 
416
            foi.setDoa(true);
405
	@Autowired
417
        } else
406
	BulkOrderService bulkOrderService;
418
            foi.setDoa(
407
 
419
                    foi.getBrand().equals("Nokia") && foi.getCost() < 4990 && buyDate.isAfter(curDate.minusYears(1)));
408
	@RequestMapping(value = "/getBulkOrder")
420
    }
409
	public String getBulkOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
421
 
410
		return "bulk_order";
422
    private boolean markDefective(FofoOrder fofoOrder) {
411
	}
423
        return fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS).plusDays(180)
412
 
424
                .isAfter(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));
413
	@PostMapping(value = "/bulkOrder/upload")
425
 
414
	public String uploadCatalog(HttpServletRequest request, @RequestPart("file") MultipartFile file, Model model)
426
    }
415
			throws Exception {
427
 
416
		bulkOrderService.parseBulkOrders(file);
428
    @RequestMapping(value = "/getSearchOrder")
417
 
429
    public String getSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
418
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
430
        return "search-order";
419
		return "response";
431
    }
420
	}
432
 
421
 
433
    @RequestMapping(value = "/getInvoiceSearchOrder")
422
	@RequestMapping(value = "/getSearchOrder")
434
    public String getInvoiceSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
423
	public String getSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
435
        return "invoices-cancel";
424
		return "search-order";
436
    }
425
	}
437
 
426
 
438
    @RequestMapping(value = "/customerDetails", method = RequestMethod.PUT)
427
	@RequestMapping(value = "/getInvoiceSearchOrder")
439
    public String updateCustomerDetails(HttpServletRequest request, @RequestBody CustomCustomer customCustomer,
428
	public String getInvoiceSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
440
                                        @RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
429
		return "invoices-cancel";
441
            throws Exception {
430
	}
442
 
431
 
443
        orderService.updateCustomerDetails(customCustomer, invoiceNumber);
432
	@RequestMapping(value = "/customerDetails", method = RequestMethod.PUT)
444
        return this.getSearchOrderDetails(request, invoiceNumber, model);
433
	public String updateCustomerDetails(HttpServletRequest request, @RequestBody CustomCustomer customCustomer,
445
    }
434
										@RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
446
 
435
			throws Exception {
447
    @RequestMapping(value = "/searchOrderDetails", method = RequestMethod.GET)
436
 
448
    public String getSearchOrderDetails(HttpServletRequest request,
437
		orderService.updateCustomerDetails(customCustomer, invoiceNumber);
449
                                        @RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
438
		return this.getSearchOrderDetails(request, invoiceNumber, model);
450
            throws Exception {
439
	}
451
 
440
 
452
        FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
441
	@RequestMapping(value = "/searchOrderDetails", method = RequestMethod.GET)
453
        List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
442
	public String getSearchOrderDetails(HttpServletRequest request,
454
        Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
443
										@RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
455
        CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
444
			throws Exception {
456
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = paymentOptionRepository.selectActiveOption().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
445
 
457
        List<Integer> fofoPartnerPaymentOptions = new ArrayList<>(paymentOptionIdPaymentOptionMap.keySet());
446
		FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
458
        Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
447
		List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
459
            try {
448
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
460
                return itemRepository.selectById(x.getItemId());
449
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
461
            } catch (ProfitMandiBusinessException e) {
450
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = paymentOptionRepository.selectActiveOption().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
462
                // TODO Auto-generated catch block
451
		List<Integer> fofoPartnerPaymentOptions = new ArrayList<>(paymentOptionIdPaymentOptionMap.keySet());
463
                return null;
452
		Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
464
            }
453
			try {
465
        }));
454
				return itemRepository.selectById(x.getItemId());
466
        LOGGER.info("fofoPartnerPaymentOptions" + fofoPartnerPaymentOptions);
455
			} catch (ProfitMandiBusinessException e) {
467
        List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
456
				// TODO Auto-generated catch block
468
                .selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
457
				return null;
469
        LOGGER.info("paymentOptionTransactions" + paymentOptionTransactions);
458
			}
470
 
459
		}));
471
        Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
460
		LOGGER.info("fofoPartnerPaymentOptions" + fofoPartnerPaymentOptions);
472
                .paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
461
		List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
473
        LOGGER.info("paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
462
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
474
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
463
		LOGGER.info("paymentOptionTransactions" + paymentOptionTransactions);
475
                .selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
464
 
476
        this.addInsuranceProvider(insurancePolicies);
465
		Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
477
        model.addAttribute("fofoOrder", fofoOrder);
466
				.paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
478
        for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
467
		LOGGER.info("paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
479
            fofoOrderItem.setDoa(true);
468
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
480
        }
469
				.selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
481
 
470
		this.addInsuranceProvider(insurancePolicies);
482
        Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
471
		model.addAttribute("fofoOrder", fofoOrder);
483
                .collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
472
		for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
484
 
473
			fofoOrderItem.setDoa(true);
485
        Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
474
		}
486
                .collect(Collectors.toMap(foi -> foi.getId(),
475
 
487
                        foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
476
		Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
488
 
477
				.collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
489
        Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
478
 
490
 
479
		Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
491
        for (FofoOrderItem foi : fofoOrderItems) {
480
				.collect(Collectors.toMap(foi -> foi.getId(),
492
            for (FofoLineItem fli : foi.getFofoLineItems()) {
481
						foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
493
                inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
482
 
494
            }
483
		Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
495
            List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
484
 
496
                    .selectAllByOrderItemId(foi.getId());
485
		for (FofoOrderItem foi : fofoOrderItems) {
497
            for (CustomerReturnItem customerReturnItem : customerReturnItems) {
486
			for (FofoLineItem fli : foi.getFofoLineItems()) {
498
                inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
487
				inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
499
                        inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
488
			}
500
            }
489
			List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
501
        }
490
					.selectAllByOrderItemId(foi.getId());
502
        model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
491
			for (CustomerReturnItem customerReturnItem : customerReturnItems) {
503
                StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
492
				inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
504
        model.addAttribute("fofoOrderItems", fofoOrderItems);
493
						inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
505
        model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
494
			}
506
        model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
495
		}
507
        model.addAttribute("itemsMap", itemsMap);
496
		model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
508
        model.addAttribute("markDefective", true);
497
				StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
509
        model.addAttribute("customer", customer);
498
		model.addAttribute("fofoOrderItems", fofoOrderItems);
510
        model.addAttribute("customerAddress", customerAddress);
499
		model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
511
        model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
500
		model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
512
        model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
501
		model.addAttribute("itemsMap", itemsMap);
513
        model.addAttribute("paymentOptionIdPaymentOptionTransactionMap", paymentOptionIdPaymentOptionTransactionMap);
502
		model.addAttribute("markDefective", true);
514
        model.addAttribute("insurancePolicies", insurancePolicies);
503
		model.addAttribute("customer", customer);
515
        model.addAttribute("fofoPartnerPaymentOptions", fofoPartnerPaymentOptions);
504
		model.addAttribute("customerAddress", customerAddress);
516
        model.addAttribute("totalNumberOfPaymentOptionId", fofoPartnerPaymentOptions.size());
505
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
517
        model.addAttribute("stateNames",
506
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
518
                stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
507
		model.addAttribute("paymentOptionIdPaymentOptionTransactionMap", paymentOptionIdPaymentOptionTransactionMap);
519
        return "search-order-details";
508
		model.addAttribute("insurancePolicies", insurancePolicies);
520
    }
509
		model.addAttribute("fofoPartnerPaymentOptions", fofoPartnerPaymentOptions);
521
 
510
		model.addAttribute("totalNumberOfPaymentOptionId", fofoPartnerPaymentOptions.size());
522
    private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap(
511
		model.addAttribute("stateNames",
523
            List<PaymentOptionTransaction> paymentOptionTransactions) {
512
				stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
524
        Set<Integer> paymentOptionIds = new HashSet<>();
513
		return "search-order-details";
525
        for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
514
	}
526
            paymentOptionIds.add(paymentOptionTransaction.getPaymentOptionId());
515
 
527
        }
516
	private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap(
528
        List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(paymentOptionIds);
517
			List<PaymentOptionTransaction> paymentOptionTransactions) {
529
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
518
		Set<Integer> paymentOptionIds = new HashSet<>();
530
        for (PaymentOption paymentOption : paymentOptions) {
519
		for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
531
            paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
520
			paymentOptionIds.add(paymentOptionTransaction.getPaymentOptionId());
532
        }
521
		}
533
        return paymentOptionIdPaymentOptionMap;
522
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(paymentOptionIds);
534
    }
523
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
535
 
524
		for (PaymentOption paymentOption : paymentOptions) {
536
    private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMapUsingPaymentOptions(
525
			paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
537
            List<Integer> fofoPartnerPaymentOptions) {
526
		}
538
        List<PaymentOption> paymentOptions = paymentOptionRepository
527
		return paymentOptionIdPaymentOptionMap;
539
                .selectByIds(new HashSet<>(fofoPartnerPaymentOptions));
528
	}
540
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
529
 
541
        for (PaymentOption paymentOption : paymentOptions) {
530
	private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMapUsingPaymentOptions(
542
            paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
531
			List<Integer> fofoPartnerPaymentOptions) {
543
        }
532
		List<PaymentOption> paymentOptions = paymentOptionRepository
544
        return paymentOptionIdPaymentOptionMap;
533
				.selectByIds(new HashSet<>(fofoPartnerPaymentOptions));
545
    }
534
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
546
 
535
		for (PaymentOption paymentOption : paymentOptions) {
547
    private Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap(
536
			paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
548
            List<PaymentOptionTransaction> paymentOptionTransactions) {
537
		}
549
        Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = new HashMap<>();
538
		return paymentOptionIdPaymentOptionMap;
550
        for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
539
	}
551
            paymentOptionIdPaymentOptionTransactionMap.put(paymentOptionTransaction.getPaymentOptionId(),
540
 
552
                    paymentOptionTransaction);
541
	private Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap(
553
        }
542
			List<PaymentOptionTransaction> paymentOptionTransactions) {
554
        return paymentOptionIdPaymentOptionTransactionMap;
543
		Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = new HashMap<>();
555
    }
544
		for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
556
 
545
			paymentOptionIdPaymentOptionTransactionMap.put(paymentOptionTransaction.getPaymentOptionId(),
557
    @RequestMapping(value = "/create-order", method = RequestMethod.POST)
546
					paymentOptionTransaction);
558
    public String createOrder(HttpServletRequest request, @RequestBody CreateOrderRequest createOrderRequest,
547
		}
559
                              Model model) throws ProfitMandiBusinessException {
548
		return paymentOptionIdPaymentOptionTransactionMap;
560
        // throw new ProfitMandiBusinessException("Billing is on hold temporarily",
549
	}
561
        // "Billing is on hold temporarily", "Billing is on hold temporarily");
550
 
562
        LOGGER.info("request at uri {} body {}", request.getRequestURI(), createOrderRequest);
551
	@RequestMapping(value = "/create-order", method = RequestMethod.POST)
563
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
552
	public String createOrder(HttpServletRequest request, @RequestBody CreateOrderRequest createOrderRequest,
564
 
553
							  Model model) throws ProfitMandiBusinessException {
565
        int fofoOrderId = orderService.createOrder(createOrderRequest, fofoDetails.getFofoId(), accessoriesDeals);
554
		// throw new ProfitMandiBusinessException("Billing is on hold temporarily",
566
 
555
		// "Billing is on hold temporarily", "Billing is on hold temporarily");
567
        LOGGER.info("Order has been created successfully...");
556
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), createOrderRequest);
568
        try {
557
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
569
            this.sendWhatsappInvoice(fofoOrderRepository.selectByOrderId(fofoOrderId));
558
 
570
        } catch (Exception e) {
559
		int fofoOrderId = orderService.createOrder(createOrderRequest, fofoDetails.getFofoId(), accessoriesDeals);
571
            LOGGER.info("Could not send whatsapp message");
560
 
572
            e.printStackTrace();
561
		LOGGER.info("Order has been created successfully...");
573
        }
562
		try {
574
        return "redirect:/get-order/?orderId=" + fofoOrderId;
563
			this.sendWhatsappInvoice(fofoOrderRepository.selectByOrderId(fofoOrderId));
575
    }
564
		} catch (Exception e) {
576
 
565
			LOGGER.info("Could not send whatsapp message");
577
    private void sendWhatsappInvoice(FofoOrder fofoOrder) throws Exception {
566
			e.printStackTrace();
578
        Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
567
		}
579
        CustomRetailer retailer = retailerService.getFofoRetailer(fofoOrder.getFofoId());
568
		return "redirect:/get-order/?orderId=" + fofoOrderId;
580
        String message = String.format("Dear %s,\n" +
569
	}
581
                "Thank you for your purchase from SmartDukaan store - %s, %s.\n" +
570
 
582
                "Your purchase invoice is attached for your reference.\n" +
571
	private void sendWhatsappInvoice(FofoOrder fofoOrder) throws Exception {
583
                "\n" +
572
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
584
                "Download our app for offers and updates on new products.\n" +
573
		CustomRetailer retailer = retailerService.getFofoRetailer(fofoOrder.getFofoId());
585
                "https://www.smartdukaan.com/b2c\n" +
574
		String message = String.format("Dear %s,\n" +
586
                "\n" +
575
				"Thank you for your purchase from SmartDukaan store - %s, %s.\n" +
587
                "Best Regards\n" +
576
				"Your purchase invoice is attached for your reference.\n" +
588
                "SmartDukaan", customer.getFirstName(), retailer.getBusinessName(), retailer.getAddress().getCity());
577
				"\n" +
589
        boolean sentMessage = notificationService.isWhatMessageSend(customer.getMobileNumber());
578
				"Download our app for offers and updates on new products.\n" +
590
        if (sentMessage) {
579
				"https://www.smartdukaan.com/b2c\n" +
591
            notificationService.sendWhatsappMediaMessage(message, customer.getMobileNumber(), this.getPublicInvoiceUrl(fofoOrder.getInvoiceNumber()),
580
				"\n" +
592
                    this.getFileName(fofoOrder.getInvoiceNumber()), WhatsappMessageType.DOCUMENT);
581
				"Best Regards\n" +
593
        }
582
				"SmartDukaan", customer.getFirstName(), retailer.getBusinessName(), retailer.getAddress().getCity());
594
    }
583
		boolean sentMessage = notificationService.isWhatMessageSend(customer.getMobileNumber());
595
 
584
		if (sentMessage) {
596
    private String getFileName(String invoiceNumber) {
585
			notificationService.sendWhatsappMediaMessage(message, customer.getMobileNumber(), this.getPublicInvoiceUrl(fofoOrder.getInvoiceNumber()),
597
        return "INV-" + invoiceNumber.replace("/", "-") + ".pdf";
586
					this.getFileName(fofoOrder.getInvoiceNumber()), WhatsappMessageType.DOCUMENT);
598
    }
587
		}
599
 
588
	}
600
    private String getPublicInvoiceUrl(String invoiceNumber) {
589
 
601
        String base64Encoded = Base64.getMimeEncoder().encodeToString(invoiceNumber.getBytes(StandardCharsets.UTF_8));
590
	private String getFileName(String invoiceNumber) {
602
        String publicUrl = "https://partners.smartdukaan.com/wa-invoice-send/" + base64Encoded + ".pdf";
591
		return "INV-" + invoiceNumber.replace("/", "-") + ".pdf";
603
        LOGGER.info("Public Whatsapp Url for Invoice Message - {}", publicUrl);
592
	}
604
        return publicUrl;
593
 
605
    }
594
	private String getPublicInvoiceUrl(String invoiceNumber) {
606
 
595
		String base64Encoded = Base64.getMimeEncoder().encodeToString(invoiceNumber.getBytes(StandardCharsets.UTF_8));
607
    @RequestMapping(value = "/order/bad_return", method = RequestMethod.POST)
596
		String publicUrl = "https://partners.smartdukaan.com/wa-invoice-send/" + base64Encoded + ".pdf";
608
    public ResponseEntity<?> badReturn(HttpServletRequest request, @RequestBody FoiBadReturnRequest foiBadReturnRequest,
597
		LOGGER.info("Public Whatsapp Url for Invoice Message - {}", publicUrl);
609
                                       Model model) throws ProfitMandiBusinessException {
598
		return publicUrl;
610
        LOGGER.info("request at uri {} body {}", request.getRequestURI(), foiBadReturnRequest);
599
	}
611
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
600
 
612
        CustomerCreditNote custmoerCreditNote;
601
	@RequestMapping(value = "/order/bad_return", method = RequestMethod.POST)
613
        if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
602
	public ResponseEntity<?> badReturn(HttpServletRequest request, @RequestBody FoiBadReturnRequest foiBadReturnRequest,
614
            FofoOrderItem foi = fofoOrderItemRepository.selectById(foiBadReturnRequest.getFofoOrderItemId());
603
									   Model model) throws ProfitMandiBusinessException {
615
            FofoOrder fo = fofoOrderRepository.selectByOrderId(foi.getOrderId());
604
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), foiBadReturnRequest);
616
            custmoerCreditNote = orderService.badReturn(fo.getFofoId(), foiBadReturnRequest);
605
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
617
        } else {
606
		CustomerCreditNote custmoerCreditNote;
618
            custmoerCreditNote = orderService.badReturn(fofoDetails.getFofoId(), foiBadReturnRequest);
607
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
619
        }
608
			FofoOrderItem foi = fofoOrderItemRepository.selectById(foiBadReturnRequest.getFofoOrderItemId());
620
        return responseSender.ok(custmoerCreditNote.getId());
609
			FofoOrder fo = fofoOrderRepository.selectByOrderId(foi.getOrderId());
621
    }
610
			custmoerCreditNote = orderService.badReturn(fo.getFofoId(), foiBadReturnRequest);
622
 
611
		} else {
623
    @GetMapping(value = "/wa-invoice-send/{invoiceHash}")
612
			custmoerCreditNote = orderService.badReturn(fofoDetails.getFofoId(), foiBadReturnRequest);
624
    public ResponseEntity<?> generateInvoice(@PathVariable String invoiceHash) throws ProfitMandiBusinessException {
613
		}
625
        String decodedInvoiceNumber = new String(Base64.getMimeDecoder().decode(invoiceHash));
614
		return responseSender.ok(custmoerCreditNote.getId());
626
        LOGGER.info("Invoice Hash {}", invoiceHash);
615
	}
627
 
616
 
628
 
617
	@GetMapping(value = "/wa-invoice-send/{invoiceHash}")
629
        FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(decodedInvoiceNumber);
618
	public ResponseEntity<?> generateInvoice(@PathVariable String invoiceHash) throws ProfitMandiBusinessException {
630
 
619
		String decodedInvoiceNumber = new String(Base64.getMimeDecoder().decode(invoiceHash));
631
        InvoicePdfModel pdfModel = orderService.getInvoicePdfModel(fofoOrder.getId());
620
		LOGGER.info("Invoice Hash {}", invoiceHash);
632
 
621
 
633
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
622
 
634
        PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
623
		FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(decodedInvoiceNumber);
635
        final HttpHeaders headers = new HttpHeaders();
624
 
636
        //headers.setContentDispositionFormData("inline", number + ".pdf");
625
		InvoicePdfModel pdfModel = orderService.getInvoicePdfModel(fofoOrder.getId());
637
        headers.add(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=" + pdfModel.getInvoiceNumber() + ".pdf");
626
 
638
        int contentLength = byteArrayOutputStream.toByteArray().length;
627
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
639
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
628
		PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
640
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
629
		final HttpHeaders headers = new HttpHeaders();
641
        return ResponseEntity.ok()
630
		//headers.setContentDispositionFormData("inline", number + ".pdf");
642
                .headers(headers)
631
		headers.add(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=" + pdfModel.getInvoiceNumber() + ".pdf");
643
                .contentLength(contentLength)
632
		int contentLength = byteArrayOutputStream.toByteArray().length;
644
                .contentType(MediaType.parseMediaType("application/pdf"))
633
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
645
                .body(inputStreamResource);
634
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
646
    }
635
		return ResponseEntity.ok()
647
 
636
				.headers(headers)
648
    @RequestMapping(value = "/wa-listen", method = RequestMethod.POST)
637
				.contentLength(contentLength)
649
    public ResponseEntity<?> listenWhatsappStatus(@RequestBody String whatsappJsonResponse) {
638
				.contentType(MediaType.parseMediaType("application/pdf"))
650
        LOGGER.info("whatsappJsonResponse {}", whatsappJsonResponse);
639
				.body(inputStreamResource);
651
        //jaihind
640
	}
652
        //  String jsonString = "[{\"srcAddr\":\"TESTSM\",\"channel\":\"WHATSAPP\",\"externalId\":\"4977024756456780043-180044363908187691\",\"cause\":\"SUCCESS\",\"errorCode\":\"000\",\"destAddr\":\"919813272029\",\"eventType\":\"DELIVERED\",\"eventTs\":1692848106000}]";
641
 
653
        JSONArray jsonArray = new JSONArray(whatsappJsonResponse);
642
	@RequestMapping(value = "/wa-listen", method = RequestMethod.POST)
654
        for (int i = 0; i < jsonArray.length(); i++) {
643
	public ResponseEntity<?> listenWhatsappStatus(@RequestBody String whatsappJsonResponse) {
655
 
644
		LOGGER.info("whatsappJsonResponse {}", whatsappJsonResponse);
656
            JSONObject jsonObject = jsonArray.getJSONObject(i);
645
		//jaihind
657
            String externalId = jsonObject.getString("externalId");
646
		//  String jsonString = "[{\"srcAddr\":\"TESTSM\",\"channel\":\"WHATSAPP\",\"externalId\":\"4977024756456780043-180044363908187691\",\"cause\":\"SUCCESS\",\"errorCode\":\"000\",\"destAddr\":\"919813272029\",\"eventType\":\"DELIVERED\",\"eventTs\":1692848106000}]";
658
            String destAddr = jsonObject.getString("destAddr");
647
		JSONArray jsonArray = new JSONArray(whatsappJsonResponse);
659
            String eventType = jsonObject.getString("eventType");
648
		for (int i = 0; i < jsonArray.length(); i++) {
660
            whatsappMessageService.setWhatsappResponse(externalId, destAddr, eventType);
649
 
661
        }
650
			JSONObject jsonObject = jsonArray.getJSONObject(i);
662
        //jaihind
651
			String externalId = jsonObject.getString("externalId");
663
        return responseSender.ok("Success");
652
			String destAddr = jsonObject.getString("destAddr");
664
 
653
			String eventType = jsonObject.getString("eventType");
665
    }
654
			whatsappMessageService.setWhatsappResponse(externalId, destAddr, eventType);
666
 
655
		}
667
    @RequestMapping(value = "/generateInvoice")
656
		//jaihind
668
    public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
657
		return responseSender.ok("Success");
669
                                             @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
658
 
670
        LOGGER.info("Request received at url {} with params [{}={}] ", request.getRequestURI(),
659
	}
671
                ProfitMandiConstants.ORDER_ID, orderId);
660
 
672
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
661
	@RequestMapping(value = "/generateInvoice")
673
        InvoicePdfModel pdfModel = null;
662
	public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
674
        if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
663
											 @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
675
            pdfModel = orderService.getInvoicePdfModel(orderId);
664
		LOGGER.info("Request received at url {} with params [{}={}] ", request.getRequestURI(),
676
        } else {
665
				ProfitMandiConstants.ORDER_ID, orderId);
677
            pdfModel = orderService.getInvoicePdfModel(fofoDetails.getFofoId(), orderId);
666
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
678
        }
667
		InvoicePdfModel pdfModel = null;
679
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
668
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
680
        PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
669
			pdfModel = orderService.getInvoicePdfModel(orderId);
681
        LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
670
		} else {
682
        final HttpHeaders headers = new HttpHeaders();
671
			pdfModel = orderService.getInvoicePdfModel(fofoDetails.getFofoId(), orderId);
683
        headers.setContentType(MediaType.APPLICATION_PDF);
672
		}
684
        headers.setContentDispositionFormData("inline", "invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
673
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
685
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
674
		PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
686
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
675
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
687
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
676
		final HttpHeaders headers = new HttpHeaders();
688
        return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
677
		headers.setContentType(MediaType.APPLICATION_PDF);
689
    }
678
		headers.setContentDispositionFormData("inline", "invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
690
 
679
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
691
    @RequestMapping(value = "/generateInvoices")
680
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
692
    public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
681
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
693
                                             @RequestParam LocalDateTime startDate, @RequestParam LocalDateTime endDate, @RequestParam int partnerId)
682
		return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
694
            throws ProfitMandiBusinessException {
683
	}
695
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
684
 
696
        List<InvoicePdfModel> pdfModels = new ArrayList<>();
685
	@RequestMapping(value = "/generateInvoices")
697
        if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
686
	public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
698
            List<Integer> orderIds = fofoOrderRepository.selectByFofoId(partnerId, startDate, endDate, 0, 0).stream()
687
											 @RequestParam LocalDateTime startDate, @RequestParam LocalDateTime endDate, @RequestParam int partnerId)
699
                    .map(x -> x.getId()).collect(Collectors.toList());
688
			throws ProfitMandiBusinessException {
700
            for (int orderId : orderIds) {
689
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
701
                pdfModels.add(orderService.getInvoicePdfModel(orderId));
690
		List<InvoicePdfModel> pdfModels = new ArrayList<>();
702
            }
691
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
703
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
692
			List<Integer> orderIds = fofoOrderRepository.selectByFofoId(partnerId, startDate, endDate, 0, 0).stream()
704
            PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
693
					.map(x -> x.getId()).collect(Collectors.toList());
705
            LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
694
			for (int orderId : orderIds) {
706
            final HttpHeaders headers = new HttpHeaders();
695
				pdfModels.add(orderService.getInvoicePdfModel(orderId));
707
            headers.setContentType(MediaType.APPLICATION_PDF);
696
			}
708
            headers.set("Content-disposition", "inline; filename=invoice-" + partnerId + ".pdf");
697
			ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
709
            headers.setContentLength(byteArrayOutputStream.toByteArray().length);
698
			PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
710
            final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
699
			LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
711
            final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
700
			final HttpHeaders headers = new HttpHeaders();
712
            return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
701
			headers.setContentType(MediaType.APPLICATION_PDF);
713
        } else {
702
			headers.set("Content-disposition", "inline; filename=invoice-" + partnerId + ".pdf");
714
            throw new ProfitMandiBusinessException("Auth", fofoDetails.getEmailId(), "Unauthorised access");
703
			headers.setContentLength(byteArrayOutputStream.toByteArray().length);
715
        }
704
			final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
716
    }
705
			final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
717
 
706
			return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
718
    @RequestMapping(value = "/saleHistory")
707
		} else {
719
    public String saleHistory(HttpServletRequest request,
708
			throw new ProfitMandiBusinessException("Auth", fofoDetails.getEmailId(), "Unauthorised access");
720
                              @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
709
		}
721
                              @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
710
	}
722
                              @RequestParam(required = false) LocalDateTime startTime,
711
 
723
                              @RequestParam(required = false) LocalDateTime endTime,
712
	@RequestMapping(value = "/saleHistory")
724
                              @RequestParam(name = "offset", defaultValue = "0") int offset,
713
	public String saleHistory(HttpServletRequest request,
725
                              @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
714
							  @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
726
            throws ProfitMandiBusinessException {
715
							  @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
727
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
716
							  @RequestParam(required = false) LocalDateTime startTime,
728
 
717
							  @RequestParam(required = false) LocalDateTime endTime,
729
        Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
718
							  @RequestParam(name = "offset", defaultValue = "0") int offset,
730
                startTime, endTime, offset, limit);
719
							  @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
731
        model.addAllAttributes(map);
720
			throws ProfitMandiBusinessException {
732
        return "sale-history";
721
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
733
    }
722
 
734
 
723
		Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
735
    @RequestMapping(value = "/downloadInvoices")
724
				startTime, endTime, offset, limit);
736
    public ResponseEntity<?> downloadInvoices(HttpServletRequest request,
725
		model.addAllAttributes(map);
737
                                              @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
726
		return "sale-history";
738
                                              @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
727
	}
739
                                              @RequestParam(required = false) LocalDateTime startTime,
728
 
740
                                              @RequestParam(required = false) LocalDateTime endTime,
729
	@RequestMapping(value = "/downloadInvoices")
741
                                              @RequestParam(name = "offset", defaultValue = "0") int offset,
730
	public ResponseEntity<?> downloadInvoices(HttpServletRequest request,
742
                                              @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
731
											  @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
743
            throws ProfitMandiBusinessException {
732
											  @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
744
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
733
											  @RequestParam(required = false) LocalDateTime startTime,
745
 
734
											  @RequestParam(required = false) LocalDateTime endTime,
746
        Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
735
											  @RequestParam(name = "offset", defaultValue = "0") int offset,
747
                startTime, endTime, offset, 100);
736
											  @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
748
        List<FofoOrder> fofoOrders = (List<FofoOrder>) map.get("saleHistories");
737
			throws ProfitMandiBusinessException {
749
 
738
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
750
        if (fofoOrders.size() == 0) {
739
 
751
            throw new ProfitMandiBusinessException("Search criteria", "", "No orders found for criteria");
740
		Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
752
        }
741
				startTime, endTime, offset, 100);
753
 
742
		List<FofoOrder> fofoOrders = (List<FofoOrder>) map.get("saleHistories");
754
        final HttpHeaders headers = new HttpHeaders();
743
 
755
        headers.setContentType(MediaType.APPLICATION_PDF);
744
		if (fofoOrders.size() == 0) {
756
        headers.set("Content-disposition", "inline; filename=invoices.pdf");
745
			throw new ProfitMandiBusinessException("Search criteria", "", "No orders found for criteria");
757
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
746
		}
758
        List<InvoicePdfModel> pdfModels = new ArrayList<>();
747
 
759
        for (FofoOrder fofoOrder : fofoOrders) {
748
		final HttpHeaders headers = new HttpHeaders();
760
            try {
749
		headers.setContentType(MediaType.APPLICATION_PDF);
761
                pdfModels.add(orderService.getInvoicePdfModel(fofoOrder.getId()));
750
		headers.set("Content-disposition", "inline; filename=invoices.pdf");
762
            } catch (Exception e) {
751
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
763
                LOGGER.info("could not create invoice for {}, invoice number {}", fofoOrder.getId(),
752
		List<InvoicePdfModel> pdfModels = new ArrayList<>();
764
                        fofoOrder.getInvoiceNumber());
753
		for (FofoOrder fofoOrder : fofoOrders) {
765
            }
754
			try {
766
        }
755
				pdfModels.add(orderService.getInvoicePdfModel(fofoOrder.getId()));
767
        PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
756
			} catch (Exception e) {
768
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
757
				LOGGER.info("could not create invoice for {}, invoice number {}", fofoOrder.getId(),
769
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
758
						fofoOrder.getInvoiceNumber());
770
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
759
			}
771
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
760
		}
772
    }
761
		PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
773
 
762
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
774
    @RequestMapping(value = "/credit-note/{creditNoteId}")
763
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
775
    public ResponseEntity<?> downloadCreditNote(HttpServletRequest request, @PathVariable int creditNoteId)
764
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
776
            throws ProfitMandiBusinessException {
765
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
777
        CreditNotePdfModel creditNotePdfModel = orderService.getCreditNotePdfModel(creditNoteId);
766
	}
778
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
767
 
779
        PdfUtils.generateAndWriteCustomerCreditNotes(Arrays.asList(creditNotePdfModel), byteArrayOutputStream);
768
	@RequestMapping(value = "/credit-note/{creditNoteId}")
780
        LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
769
	public ResponseEntity<?> downloadCreditNote(HttpServletRequest request, @PathVariable int creditNoteId)
781
        final HttpHeaders headers = new HttpHeaders();
770
			throws ProfitMandiBusinessException {
782
        headers.setContentType(MediaType.APPLICATION_PDF);
771
		CreditNotePdfModel creditNotePdfModel = orderService.getCreditNotePdfModel(creditNoteId);
783
        headers.set("Content-disposition",
772
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
784
                "inline; filename=invoice-" + creditNotePdfModel.getCreditNoteNumber() + ".pdf");
773
		PdfUtils.generateAndWriteCustomerCreditNotes(Arrays.asList(creditNotePdfModel), byteArrayOutputStream);
785
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
774
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
786
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
775
		final HttpHeaders headers = new HttpHeaders();
787
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
776
		headers.setContentType(MediaType.APPLICATION_PDF);
788
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
777
		headers.set("Content-disposition",
789
    }
778
				"inline; filename=invoice-" + creditNotePdfModel.getCreditNoteNumber() + ".pdf");
790
 
779
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
791
    @RequestMapping(value = "/getPaginatedSaleHistory")
780
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
792
    public String getSaleHistoryPaginated(HttpServletRequest request,
781
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
793
                                          @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
782
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
794
                                          @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
783
	}
795
                                          @RequestParam(required = false) LocalDateTime startTime,
784
 
796
                                          @RequestParam(required = false) LocalDateTime endTime,
785
	@RequestMapping(value = "/getPaginatedSaleHistory")
797
                                          @RequestParam(name = "offset", defaultValue = "0") int offset,
786
	public String getSaleHistoryPaginated(HttpServletRequest request,
798
                                          @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
787
										  @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
799
            throws ProfitMandiBusinessException {
788
										  @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
800
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
789
										  @RequestParam(required = false) LocalDateTime startTime,
801
        Map<String, Object> map = orderService.getSaleHistoryPaginated(loginDetails.getFofoId(), searchType,
790
										  @RequestParam(required = false) LocalDateTime endTime,
802
                searchValue, startTime, endTime, offset, limit);
791
										  @RequestParam(name = "offset", defaultValue = "0") int offset,
803
        model.addAllAttributes(map);
792
										  @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
804
        return "sale-history-paginated";
793
			throws ProfitMandiBusinessException {
805
    }
794
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
806
 
795
		Map<String, Object> map = orderService.getSaleHistoryPaginated(loginDetails.getFofoId(), searchType,
807
    @PutMapping(value = "/updatePaymentTransaction")
796
				searchValue, startTime, endTime, offset, limit);
808
    public String updateTransactionDetails(HttpServletRequest request, @RequestParam String referenceType,
797
		model.addAllAttributes(map);
809
                                           @RequestParam int fofoId, @RequestParam int referenceId,
798
		return "sale-history-paginated";
810
                                           @RequestBody PartnerOptionsAndItemAmountModel partnerOptionsAndItemAmountModel,
799
	}
811
                                           @RequestParam float totalAmount, Model model) throws Exception {
800
 
812
 
801
	@PutMapping(value = "/updatePaymentTransaction")
813
        List<PaymentOptionTransactionModel> paymentOptionTransactionModels = partnerOptionsAndItemAmountModel
802
	public String updateTransactionDetails(HttpServletRequest request, @RequestParam String referenceType,
814
                .getPaymentOptionTransactionModel();
803
										   @RequestParam int fofoId, @RequestParam int referenceId,
815
        LOGGER.info(paymentOptionTransactionModels);
804
										   @RequestBody PartnerOptionsAndItemAmountModel partnerOptionsAndItemAmountModel,
816
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoId, referenceId);
805
										   @RequestParam float totalAmount, Model model) throws Exception {
817
        LOGGER.info("sdssd" + fofoOrder);
806
 
818
        fofoOrder.setTotalAmount(totalAmount);
807
		List<PaymentOptionTransactionModel> paymentOptionTransactionModels = partnerOptionsAndItemAmountModel
819
        List<FofoItemIdAmountModel> fofoItemIdAmountModel = partnerOptionsAndItemAmountModel.getItemAmountModel();
808
				.getPaymentOptionTransactionModel();
820
        for (FofoItemIdAmountModel fim : fofoItemIdAmountModel) {
809
		LOGGER.info(paymentOptionTransactionModels);
821
            LOGGER.info("fim" + fim.getFofoItemId());
810
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoId, referenceId);
822
 
811
		LOGGER.info("sdssd" + fofoOrder);
823
            LOGGER.info("fimAmount" + fim.getAmount());
812
		fofoOrder.setTotalAmount(totalAmount);
824
            Item item = itemRepository.selectById(fim.getItemId());
813
		List<FofoItemIdAmountModel> fofoItemIdAmountModel = partnerOptionsAndItemAmountModel.getItemAmountModel();
825
            TagListing tagListing = tagListingRepository.selectByItemId(item.getId());
814
		for (FofoItemIdAmountModel fim : fofoItemIdAmountModel) {
826
            FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectById(fim.getFofoItemId());
815
			LOGGER.info("fim" + fim.getFofoItemId());
827
            LOGGER.info("category" + item.getCategoryId());
816
 
828
            if (item.getCategoryId() == ProfitMandiConstants.MOBILE_CATEGORY_ID) {
817
			LOGGER.info("fimAmount" + fim.getAmount());
829
                if (fofoOrderItem.getMop() <= fim.getAmount()) {
818
			Item item = itemRepository.selectById(fim.getItemId());
830
 
819
			TagListing tagListing = tagListingRepository.selectByItemId(item.getId());
831
                    if (fim.getAmount() <= tagListing.getMrp()) {
820
			FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectById(fim.getFofoItemId());
832
                        fofoOrderItem.setSellingPrice(fim.getAmount());
821
			LOGGER.info("category" + item.getCategoryId());
833
                    } else {
822
			if (item.getCategoryId() == ProfitMandiConstants.MOBILE_CATEGORY_ID) {
834
                        throw new ProfitMandiBusinessException("Amount", fim.getAmount(),
823
				if (fofoOrderItem.getMop() <= fim.getAmount()) {
835
                                "Sum of amount is not less than  to MRP");
824
 
836
                    }
825
					if (fim.getAmount() <= tagListing.getMrp()) {
837
 
826
						fofoOrderItem.setSellingPrice(fim.getAmount());
838
                    LOGGER.info("fofoOrderItem2" + fofoOrderItem);
827
					} else {
839
 
828
						throw new ProfitMandiBusinessException("Amount", fim.getAmount(),
840
                } else {
829
								"Sum of amount is not less than  to MRP");
841
                    // TODO below mop condition need to added added
830
					}
842
                    fofoOrderItem.setSellingPrice(fim.getAmount());
831
 
843
                }
832
					LOGGER.info("fofoOrderItem2" + fofoOrderItem);
844
 
833
 
845
            } else {
834
				} else {
846
                fofoOrderItem.setSellingPrice(fim.getAmount());
835
					// TODO below mop condition need to added added
847
                LOGGER.info("fofoOrderItem1" + fofoOrderItem);
836
					fofoOrderItem.setSellingPrice(fim.getAmount());
848
 
837
				}
849
            }
838
 
850
            LOGGER.info("fofoOrderItem" + fofoOrderItem);
839
			} else {
851
 
840
				fofoOrderItem.setSellingPrice(fim.getAmount());
852
        }
841
				LOGGER.info("fofoOrderItem1" + fofoOrderItem);
853
 
842
 
854
        /*
843
			}
855
         * for (PaymentOptionTransactionModel paymentOptionTransactionModel :
844
			LOGGER.info("fofoOrderItem" + fofoOrderItem);
856
         * paymentOptionTransactionModels) { amount = amount +
845
 
857
         * paymentOptionTransactionModel.getAmount(); } LOGGER.info("FofoOrder amount" +
846
		}
858
         * fofoOrder.getUnitPrice() + "amount" + amount); if (amount ==
847
 
859
         * fofoOrder.getUnitPrice()) {
848
		/*
860
         */
849
		 * for (PaymentOptionTransactionModel paymentOptionTransactionModel :
861
        if (paymentOptionTransactionModels.size() > 0) {
850
		 * paymentOptionTransactionModels) { amount = amount +
862
            List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
851
		 * paymentOptionTransactionModel.getAmount(); } LOGGER.info("FofoOrder amount" +
863
                    .selectByReferenceIdAndType(referenceId, PaymentOptionReferenceType.ORDER);
852
		 * fofoOrder.getUnitPrice() + "amount" + amount); if (amount ==
864
            Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
853
		 * fofoOrder.getUnitPrice()) {
865
                    .paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
854
		 */
866
            LOGGER.info(
855
		if (paymentOptionTransactionModels.size() > 0) {
867
                    "paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
856
			List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
868
            for (PaymentOptionTransactionModel paymentOptionTransactionModel : paymentOptionTransactionModels) {
857
					.selectByReferenceIdAndType(referenceId, PaymentOptionReferenceType.ORDER);
869
                if (paymentOptionIdPaymentOptionTransactionMap
858
			Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
870
                        .containsKey(paymentOptionTransactionModel.getPaymentOptionId())) {
859
					.paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
871
 
860
			LOGGER.info(
872
                    PaymentOptionTransaction paymentOptionTransaction = paymentOptionIdPaymentOptionTransactionMap
861
					"paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
873
                            .get(paymentOptionTransactionModel.getPaymentOptionId());
862
			for (PaymentOptionTransactionModel paymentOptionTransactionModel : paymentOptionTransactionModels) {
874
 
863
				if (paymentOptionIdPaymentOptionTransactionMap
875
                    if (paymentOptionTransactionModel.getAmount() == 0) {
864
						.containsKey(paymentOptionTransactionModel.getPaymentOptionId())) {
876
                        paymentOptionTransactionRepository.delete(paymentOptionTransaction);
865
 
877
                        LOGGER.info("deleted successfully");
866
					PaymentOptionTransaction paymentOptionTransaction = paymentOptionIdPaymentOptionTransactionMap
878
                    } else {
867
							.get(paymentOptionTransactionModel.getPaymentOptionId());
879
 
868
 
880
                        paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
869
					if (paymentOptionTransactionModel.getAmount() == 0) {
881
                        paymentOptionTransactionRepository.persist(paymentOptionTransaction);
870
						paymentOptionTransactionRepository.delete(paymentOptionTransaction);
882
                        LOGGER.info("updated successfully");
871
						LOGGER.info("deleted successfully");
883
 
872
					} else {
884
                    }
873
 
885
                } else {
874
						paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
886
                    if (paymentOptionTransactionModel.getAmount() > 0) {
875
						paymentOptionTransactionRepository.persist(paymentOptionTransaction);
887
                        PaymentOptionTransaction paymentOptionTransaction = new PaymentOptionTransaction();
876
						LOGGER.info("updated successfully");
888
                        paymentOptionTransaction.setReferenceId(referenceId);
877
 
889
                        paymentOptionTransaction.setReferenceType(PaymentOptionReferenceType.ORDER);
878
					}
890
                        paymentOptionTransaction.setPaymentOptionId(paymentOptionTransactionModel.getPaymentOptionId());
879
				} else {
891
                        paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
880
					if (paymentOptionTransactionModel.getAmount() > 0) {
892
                        paymentOptionTransaction.setFofoId(fofoId);
881
						PaymentOptionTransaction paymentOptionTransaction = new PaymentOptionTransaction();
893
                        paymentOptionTransaction.setCreateTimestamp(fofoOrder.getCreateTimestamp());
882
						paymentOptionTransaction.setReferenceId(referenceId);
894
                        paymentOptionTransactionRepository.persist(paymentOptionTransaction);
883
						paymentOptionTransaction.setReferenceType(PaymentOptionReferenceType.ORDER);
895
                        LOGGER.info("inserted successfully");
884
						paymentOptionTransaction.setPaymentOptionId(paymentOptionTransactionModel.getPaymentOptionId());
896
                    }
885
						paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
897
                }
886
						paymentOptionTransaction.setFofoId(fofoId);
898
 
887
						paymentOptionTransaction.setCreateTimestamp(fofoOrder.getCreateTimestamp());
899
            }
888
						paymentOptionTransactionRepository.persist(paymentOptionTransaction);
900
 
889
						LOGGER.info("inserted successfully");
901
            model.addAttribute("response1", mvcResponseSender.createResponseString(true));
890
					}
902
        }
891
				}
903
        /*
892
 
904
         * else
893
			}
905
         *
894
 
906
         * { throw new ProfitMandiBusinessException("Amount", amount,
895
			model.addAttribute("response1", mvcResponseSender.createResponseString(true));
907
         * "Sum of amount is not equal to total amount"); }
896
		}
908
         */
897
		/*
909
 
898
		 * else
910
        return "response";
899
		 *
911
 
900
		 * { throw new ProfitMandiBusinessException("Amount", amount,
912
    }
901
		 * "Sum of amount is not equal to total amount"); }
913
 
902
		 */
914
    private Map<String, List<MobileInsurancePlan>> getPlans(float sellingPrice, int itemId)
903
 
915
            throws ProfitMandiBusinessException {
904
		return "response";
916
        try {
905
 
917
            Map<String, List<MobileInsurancePlan>> productDurationPlans = insuranceService.getAllPlans(itemId,
906
	}
918
                    sellingPrice);
907
 
919
            return productDurationPlans;
908
	private Map<String, List<MobileInsurancePlan>> getPlans(float sellingPrice, int itemId)
920
        } catch (Exception e) {
909
			throws ProfitMandiBusinessException {
921
            LOGGER.info(e, e);
910
		try {
922
            throw new ProfitMandiBusinessException("Fetch Insurance Plans", "Insurance",
911
			Map<String, List<MobileInsurancePlan>> productDurationPlans = insuranceService.getAllPlans(itemId,
923
                    "Could not fetch insurance Plans");
912
					sellingPrice);
924
        }
913
			return productDurationPlans;
925
 
914
		} catch (Exception e) {
926
    }
915
			LOGGER.info(e, e);
927
 
916
			throw new ProfitMandiBusinessException("Fetch Insurance Plans", "Insurance",
928
    @GetMapping("/insuranceDetails")
917
					"Could not fetch insurance Plans");
929
    public String getInsuranceDetails(HttpServletRequest request,
918
		}
930
                                      @RequestParam(name = "offset", defaultValue = "0") int offset,
919
 
931
                                      @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
920
	}
932
            throws ProfitMandiBusinessException {
921
 
933
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
922
	@GetMapping("/insuranceDetails")
934
        long size = 0;
923
	public String getInsuranceDetails(HttpServletRequest request,
935
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
924
									  @RequestParam(name = "offset", defaultValue = "0") int offset,
936
                offset, limit);
925
									  @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
937
        size = insurancePolicyRepository.selectCountByRetailerId(loginDetails.getFofoId());
926
			throws ProfitMandiBusinessException {
938
        Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
927
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
939
                .selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
928
		long size = 0;
940
                .stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
929
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
941
        if (size < limit) {
930
				offset, limit);
942
            model.addAttribute("end", offset + size);
931
		size = insurancePolicyRepository.selectCountByRetailerId(loginDetails.getFofoId());
943
        } else {
932
		Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
944
            model.addAttribute("end", offset + limit);
933
				.selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
945
        }
934
				.stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
946
        model.addAttribute("start", offset + 1);
935
		if (size < limit) {
947
        model.addAttribute("size", size);
936
			model.addAttribute("end", offset + size);
948
        model.addAttribute("insurancePolicies", insurancePolicies);
937
		} else {
949
        model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
938
			model.addAttribute("end", offset + limit);
950
        return "insurance-details";
939
		}
951
    }
940
		model.addAttribute("start", offset + 1);
952
 
941
		model.addAttribute("size", size);
953
    @GetMapping("/insuranceDetailsPaginated")
942
		model.addAttribute("insurancePolicies", insurancePolicies);
954
    public String getInsuranceDetailsPaginated(HttpServletRequest request,
943
		model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
955
                                               @RequestParam(name = "offset", defaultValue = "0") int offset,
944
		return "insurance-details";
956
                                               @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
945
	}
957
            throws ProfitMandiBusinessException {
946
 
958
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
947
	@GetMapping("/insuranceDetailsPaginated")
959
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
948
	public String getInsuranceDetailsPaginated(HttpServletRequest request,
960
                offset, limit);
949
											   @RequestParam(name = "offset", defaultValue = "0") int offset,
961
        Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
950
											   @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
962
                .selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
951
			throws ProfitMandiBusinessException {
963
                .stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
952
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
964
        model.addAttribute("insurancePolicies", insurancePolicies);
953
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
965
        model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
954
				offset, limit);
966
        return "insurance-details-paginated";
955
		Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
967
    }
956
				.selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
968
 
957
				.stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
969
    @GetMapping("/getMouForm")
958
		model.addAttribute("insurancePolicies", insurancePolicies);
970
    public String getMouForm(HttpServletRequest request, Model model) throws Exception {
959
		model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
971
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
960
		return "insurance-details-paginated";
972
 
961
	}
973
        Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
962
 
974
        if (mou != null) {
963
	@GetMapping("/getMouForm")
975
            if (mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
964
	public String getMouForm(HttpServletRequest request, Model model) throws Exception {
976
                model.addAttribute("response1", mvcResponseSender.createResponseString(true));
965
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
977
            } else {
966
 
978
                model.addAttribute("response1", mvcResponseSender.createResponseString(false));
967
		Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
979
            }
968
		if (mou != null) {
980
 
969
			if (mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
981
        } else {
970
				model.addAttribute("response1", mvcResponseSender.createResponseString(true));
982
            model.addAttribute("response1", mvcResponseSender.createResponseString(false));
971
			} else {
983
 
972
				model.addAttribute("response1", mvcResponseSender.createResponseString(false));
984
        }
973
			}
985
        return "response";
974
 
986
 
975
		} else {
987
    }
976
			model.addAttribute("response1", mvcResponseSender.createResponseString(false));
988
 
977
 
989
    @GetMapping("/pendingOrders")
978
		}
990
    public String getPendingOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
979
		return "response";
991
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
980
 
992
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
981
	}
993
        Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
982
 
994
        if (mou == null) {
983
	@GetMapping("/pendingOrders")
995
            mou = new Mou();
984
	public String getPendingOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
996
            mou.setFofoId(loginDetails.getFofoId());
985
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
997
            mou.setCreateTimestamp(LocalDateTime.now());
986
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
998
            mou.setUpdateTimestamp(LocalDateTime.now());
987
		Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
999
            mouRepository.persist(mou);
988
		if (mou == null) {
1000
        } else if (!mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
989
			mou = new Mou();
1001
            mou.setUpdateTimestamp(LocalDateTime.now());
990
			mou.setFofoId(loginDetails.getFofoId());
1002
        }
991
			mou.setCreateTimestamp(LocalDateTime.now());
1003
 
992
			mou.setUpdateTimestamp(LocalDateTime.now());
1004
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.PROCESSING,
993
			mouRepository.persist(mou);
1005
                loginDetails.getFofoId());
994
		} else if (!mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
1006
 
995
			mou.setUpdateTimestamp(LocalDateTime.now());
1007
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, loginDetails.getFofoId());
996
		}
1008
        model.addAttribute("inventoryMap", map.get("inventoryMap"));
997
 
1009
        model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
998
		List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.PROCESSING,
1010
 
999
				loginDetails.getFofoId());
1011
        model.addAttribute("isAdmin", isAdmin);
1000
 
1012
        return "pending_fofo_order";
1001
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, loginDetails.getFofoId());
1013
 
1002
		model.addAttribute("inventoryMap", map.get("inventoryMap"));
1014
    }
1003
		model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
1015
 
1004
 
1016
    @GetMapping("/billedOrders")
1005
		model.addAttribute("isAdmin", isAdmin);
1017
    public String getBilledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1006
		return "pending_fofo_order";
1018
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1007
 
1019
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1008
	}
1020
 
1009
 
1021
        List<PendingOrderItem> pendingOrderItem;
1010
	@GetMapping("/billedOrders")
1022
 
1011
	public String getBilledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1023
        if (isAdmin) {
1012
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1024
 
1013
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1025
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.BILLED);
1014
 
1026
 
1015
		List<PendingOrderItem> pendingOrderItem;
1027
        } else {
1016
 
1028
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.BILLED,
1017
		if (isAdmin) {
1029
                    loginDetails.getFofoId());
1018
 
1030
        }
1019
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.BILLED);
1031
 
1020
 
1032
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
1021
		} else {
1033
 
1022
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.BILLED,
1034
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1023
					loginDetails.getFofoId());
1035
        model.addAttribute("isAdmin", isAdmin);
1024
		}
1036
        return "billed_order_item";
1025
 
1037
    }
1026
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
1038
 
1027
 
1039
    @GetMapping("/settledOrders")
1028
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1040
    public String getSettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1029
		model.addAttribute("isAdmin", isAdmin);
1041
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1030
		return "billed_order_item";
1042
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1031
	}
1043
 
1032
 
1044
        List<PendingOrderItem> pendingOrderItem = null;
1033
	@GetMapping("/settledOrders")
1045
 
1034
	public String getSettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1046
        if (isAdmin) {
1035
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1047
 
1036
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1048
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.SETTLED);
1037
 
1049
 
1038
		List<PendingOrderItem> pendingOrderItem = null;
1050
        } else {
1039
 
1051
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.SETTLED,
1040
		if (isAdmin) {
1052
                    loginDetails.getFofoId());
1041
 
1053
        }
1042
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.SETTLED);
1054
 
1043
 
1055
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
1044
		} else {
1056
 
1045
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.SETTLED,
1057
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1046
					loginDetails.getFofoId());
1058
        model.addAttribute("isAdmin", isAdmin);
1047
		}
1059
        return "settled_order_item";
1048
 
1060
    }
1049
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
1061
 
1050
 
1062
    @GetMapping("/unsettledOrders")
1051
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1063
    public String getunsettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1052
		model.addAttribute("isAdmin", isAdmin);
1064
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1053
		return "settled_order_item";
1065
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1054
	}
1066
 
1055
 
1067
        List<PendingOrderItem> pendingOrderItem = null;
1056
	@GetMapping("/unsettledOrders")
1068
 
1057
	public String getunsettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1069
        if (isAdmin) {
1058
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1070
 
1059
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1071
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.UNSETTLED);
1060
 
1072
 
1061
		List<PendingOrderItem> pendingOrderItem = null;
1073
        } else {
1062
 
1074
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.UNSETTLED,
1063
		if (isAdmin) {
1075
                    loginDetails.getFofoId());
1064
 
1076
        }
1065
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.UNSETTLED);
1077
 
1066
 
1078
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
1067
		} else {
1079
 
1068
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.UNSETTLED,
1080
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1069
					loginDetails.getFofoId());
1081
        model.addAttribute("isAdmin", isAdmin);
1070
		}
1082
        return "unsettled_order_item";
1071
 
1083
    }
1072
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
1084
 
1073
 
1085
    @GetMapping("/claimedOrders")
1074
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1086
    public String getclaimedOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1075
		model.addAttribute("isAdmin", isAdmin);
1087
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1076
		return "unsettled_order_item";
1088
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1077
	}
1089
        List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1078
 
1090
                .collect(Collectors.toList());
1079
	@GetMapping("/claimedOrders")
1091
 
1080
	public String getclaimedOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1092
        List<PendingOrderItem> pendingOrderItem = null;
1081
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1093
 
1082
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1094
        if (isAdmin) {
1083
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1095
 
1084
				.collect(Collectors.toList());
1096
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.CLAIMED);
1085
 
1097
            Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
1086
		List<PendingOrderItem> pendingOrderItem = null;
1098
 
1087
 
1099
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1088
		if (isAdmin) {
1100
                    .filter(x -> x != null).collect(Collectors.toList()).stream()
1089
 
1101
                    .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1090
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.CLAIMED);
1102
            model.addAttribute("customRetailersMap", customRetailersMap);
1091
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
1103
 
1092
 
1104
        } else {
1093
			Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1105
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.CLAIMED,
1094
					.filter(x -> x != null).collect(Collectors.toList()).stream()
1106
                    loginDetails.getFofoId());
1095
					.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1107
        }
1096
			model.addAttribute("customRetailersMap", customRetailersMap);
1108
 
1097
 
1109
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
1098
		} else {
1110
 
1099
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.CLAIMED,
1111
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1100
					loginDetails.getFofoId());
1112
        model.addAttribute("isAdmin", isAdmin);
1101
		}
1113
        return "claim_raised_order_item";
1102
 
1114
    }
1103
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
1115
 
1104
 
1116
    @GetMapping("/getPendingOrderItem")
1105
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1117
    public String getPendingOrderItem(HttpServletRequest request, @RequestParam int orderId, Model model)
1106
		model.addAttribute("isAdmin", isAdmin);
1118
            throws ProfitMandiBusinessException {
1107
		return "claim_raised_order_item";
1119
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1108
	}
1120
        Map<Integer, Item> itemMap = new HashMap<>();
1109
 
1121
        Map<Integer, CurrentInventorySnapshot> inventoryMap = new HashMap<>();
1110
	@GetMapping("/getPendingOrderItem")
1122
        PendingOrder pendingPO = pendingOrderRepository.selectById(orderId);
1111
	public String getPendingOrderItem(HttpServletRequest request, @RequestParam int orderId, Model model)
1123
        Customer customer = customerRepository.selectById(pendingPO.getCustomerId());
1112
			throws ProfitMandiBusinessException {
1124
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(orderId);
1113
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1125
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
1114
		Map<Integer, Item> itemMap = new HashMap<>();
1126
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1115
		Map<Integer, CurrentInventorySnapshot> inventoryMap = new HashMap<>();
1127
            CurrentInventorySnapshot cis = currentInventorySnapshotRepository
1116
		PendingOrder pendingPO = pendingOrderRepository.selectById(orderId);
1128
                    .selectByItemAndFofoId(pendingOrderItem.getItemId(), pendingPO.getFofoId());
1117
		Customer customer = customerRepository.selectById(pendingPO.getCustomerId());
1129
            itemMap.put(pendingOrderItem.getItemId(), item);
1118
		List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(orderId);
1130
            LOGGER.info("cis" + cis);
1119
		for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
1131
            inventoryMap.put(pendingOrderItem.getItemId(), cis);
1120
			Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1132
        }
1121
			CurrentInventorySnapshot cis = currentInventorySnapshotRepository
1133
 
1122
					.selectByItemAndFofoId(pendingOrderItem.getItemId(), pendingPO.getFofoId());
1134
        LOGGER.info("inventoryMap" + inventoryMap);
1123
			itemMap.put(pendingOrderItem.getItemId(), item);
1135
        model.addAttribute("pendingOrderItems", pendingOrderItems);
1124
			LOGGER.info("cis" + cis);
1136
        model.addAttribute("itemMap", itemMap);
1125
			inventoryMap.put(pendingOrderItem.getItemId(), cis);
1137
        model.addAttribute("inventoryMap", inventoryMap);
1126
		}
1138
        model.addAttribute("pendingPO", gson.toJson(pendingPO));
1127
 
1139
        model.addAttribute("pendingPOCustomer", gson.toJson(customer));
1128
		LOGGER.info("inventoryMap" + inventoryMap);
1140
        model.addAttribute("isAdmin", roleManager.isAdmin(loginDetails.getRoleIds()));
1129
		model.addAttribute("pendingOrderItems", pendingOrderItems);
1141
        return "pending-order-item";
1130
		model.addAttribute("itemMap", itemMap);
1142
    }
1131
		model.addAttribute("inventoryMap", inventoryMap);
1143
 
1132
		model.addAttribute("pendingPO", gson.toJson(pendingPO));
1144
    @RequestMapping(value = "/getPendingOrderItemById", method = RequestMethod.GET)
1133
		model.addAttribute("pendingPOCustomer", gson.toJson(customer));
1145
    public String getPendingOrderItemById(HttpServletRequest request, @RequestParam int id, Model model)
1134
		model.addAttribute("isAdmin", roleManager.isAdmin(loginDetails.getRoleIds()));
1146
            throws Exception {
1135
		return "pending-order-item";
1147
 
1136
	}
1148
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1137
 
1149
        model.addAttribute("pendingOrderItem", pendingOrderItem);
1138
	@RequestMapping(value = "/getPendingOrderItemById", method = RequestMethod.GET)
1150
        return "cancel-pending-order";
1139
	public String getPendingOrderItemById(HttpServletRequest request, @RequestParam int id, Model model)
1151
    }
1140
			throws Exception {
1152
 
1141
 
1153
    @RequestMapping(value = "/getPendingOrderChangePartnerById", method = RequestMethod.GET)
1142
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1154
    public String getPendingOrderChangePartnerById(HttpServletRequest request, @RequestParam int id, Model model)
1143
		model.addAttribute("pendingOrderItem", pendingOrderItem);
1155
            throws Exception {
1144
		return "cancel-pending-order";
1156
 
1145
	}
1157
        PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
1146
 
1158
        Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(true);
1147
	@RequestMapping(value = "/getPendingOrderChangePartnerById", method = RequestMethod.GET)
1159
        model.addAttribute("customRetailersMap", customRetailersMap);
1148
	public String getPendingOrderChangePartnerById(HttpServletRequest request, @RequestParam int id, Model model)
1160
        model.addAttribute("pendingOrder", pendingOrder);
1149
			throws Exception {
1161
        return "change-partner-po";
1150
 
1162
    }
1151
		PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
1163
 
1152
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(true);
1164
    @RequestMapping(value = "/changePendingOrderPartner", method = RequestMethod.POST)
1153
		model.addAttribute("customRetailersMap", customRetailersMap);
1165
    public String changePendingOrderPartner(HttpServletRequest request, @RequestParam int id, @RequestParam int fofoId,
1154
		model.addAttribute("pendingOrder", pendingOrder);
1166
                                            Model model) throws Exception {
1155
		return "change-partner-po";
1167
 
1156
	}
1168
        PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
1157
 
1169
        pendingOrder.setFofoId(fofoId);
1158
	@RequestMapping(value = "/changePendingOrderPartner", method = RequestMethod.POST)
1170
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1159
	public String changePendingOrderPartner(HttpServletRequest request, @RequestParam int id, @RequestParam int fofoId,
1171
 
1160
											Model model) throws Exception {
1172
        return "response";
1161
 
1173
    }
1162
		PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
1174
 
1163
		pendingOrder.setFofoId(fofoId);
1175
    @RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
1164
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1176
    public String cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id, @RequestParam String reason,
1165
 
1177
                                         Model model) throws Exception {
1166
		return "response";
1178
 
1167
	}
1179
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1168
 
1180
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1169
	@RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
1181
 
1170
	public String cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id, @RequestParam String reason,
1182
        pendingOrderItem.setStatus(OrderStatus.CANCELLED);
1171
										 Model model) throws Exception {
1183
        pendingOrderItem.setStatusDescription(loginDetails.getEmailId());
1172
 
1184
        pendingOrderItem.setRemark(reason);
1173
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1185
        pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
1174
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1186
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1175
 
1187
 
1176
		pendingOrderItem.setStatus(OrderStatus.CANCELLED);
1188
        List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
1177
		pendingOrderItem.setStatusDescription(loginDetails.getEmailId());
1189
                .map(x -> x.getStatus()).collect(Collectors.toList());
1178
		pendingOrderItem.setRemark(reason);
1190
 
1179
		pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
1191
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1180
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1192
 
1181
 
1193
        List<Integer> catalogIds = new ArrayList<>();
1182
		List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
1194
 
1183
				.map(x -> x.getStatus()).collect(Collectors.toList());
1195
        Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1184
 
1196
        pendingOrderItem.setItemName(item.getItemDescription());
1185
		Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1197
        catalogIds.add(item.getCatalogItemId());
1186
 
1198
 
1187
		List<Integer> catalogIds = new ArrayList<>();
1199
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1188
 
1200
        JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1189
		Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1201
        pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1190
		pendingOrderItem.setItemName(item.getItemDescription());
1202
        pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1191
		catalogIds.add(item.getCatalogItemId());
1203
        CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
1192
 
1204
 
1193
		Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1205
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
1194
		JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1206
 
1195
		pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1207
        Map<String, Object> emailModel = new HashMap<>();
1196
		pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1208
        emailModel.put("customer", customerAddress);
1197
		CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
1209
        emailModel.put("pendingOrder", pendingOrder);
1198
 
1210
        emailModel.put("date", dateTimeFormatter);
1199
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
1211
        LOGGER.info("emal" + customer.getEmailId());
1200
 
1212
        String[] customerEmail = null;
1201
		Map<String, Object> emailModel = new HashMap<>();
1213
        if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
1202
		emailModel.put("customer", customerAddress);
1214
            customerEmail = new String[]{customer.getEmailId()};
1203
		emailModel.put("pendingOrder", pendingOrder);
1215
 
1204
		emailModel.put("date", dateTimeFormatter);
1216
            List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
1205
		LOGGER.info("emal" + customer.getEmailId());
1217
 
1206
		String[] customerEmail = null;
1218
            emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel,
1207
		if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
1219
                    customerEmail, null, bccTo.toArray(new String[0]));
1208
			customerEmail = new String[]{customer.getEmailId()};
1220
 
1209
 
1221
        }
1210
			List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
1222
 
1211
 
1223
        if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1212
			emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel,
1224
                && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1213
					customerEmail, null, bccTo.toArray(new String[0]));
1225
                && !status.contains(OrderStatus.CLAIMED)) {
1214
 
1226
            pendingOrder.setStatus(OrderStatus.CLOSED);
1215
		}
1227
        }
1216
 
1228
        pendingOrderItemRepository.persist(pendingOrderItem);
1217
		if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1229
 
1218
				&& !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1230
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1219
				&& !status.contains(OrderStatus.CLAIMED)) {
1231
 
1220
			pendingOrder.setStatus(OrderStatus.CLOSED);
1232
        return "response";
1221
		}
1233
    }
1222
		pendingOrderItemRepository.persist(pendingOrderItem);
1234
 
1223
 
1235
    @RequestMapping(value = "/deliveredPendingOrderItem", method = RequestMethod.POST)
1224
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1236
    public String deliveredPendingOrderItem(HttpServletRequest request, @RequestParam int id, Model model)
1225
 
1237
            throws Exception {
1226
		return "response";
1238
 
1227
	}
1239
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1228
 
1240
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1229
	@RequestMapping(value = "/deliveredPendingOrderItem", method = RequestMethod.POST)
1241
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1230
	public String deliveredPendingOrderItem(HttpServletRequest request, @RequestParam int id, Model model)
1242
 
1231
			throws Exception {
1243
        if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
1232
 
1244
            pendingOrderItem.setStatus(OrderStatus.UNSETTLED);
1233
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1245
            pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
1234
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1246
 
1235
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1247
        } else {
1236
 
1248
            pendingOrderItem.setStatus(OrderStatus.SETTLED);
1237
		if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
1249
            pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
1238
			pendingOrderItem.setStatus(OrderStatus.UNSETTLED);
1250
 
1239
			pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
1251
        }
1240
 
1252
 
1241
		} else {
1253
        List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
1242
			pendingOrderItem.setStatus(OrderStatus.SETTLED);
1254
                .map(x -> x.getStatus()).collect(Collectors.toList());
1243
			pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
1255
 
1244
 
1256
        List<Integer> catalogIds = new ArrayList<>();
1245
		}
1257
 
1246
 
1258
        Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1247
		List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
1259
        pendingOrderItem.setItemName(item.getItemDescription());
1248
				.map(x -> x.getStatus()).collect(Collectors.toList());
1260
        catalogIds.add(item.getCatalogItemId());
1249
 
1261
 
1250
		List<Integer> catalogIds = new ArrayList<>();
1262
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1251
 
1263
        JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1252
		Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1264
        pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1253
		pendingOrderItem.setItemName(item.getItemDescription());
1265
        pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1254
		catalogIds.add(item.getCatalogItemId());
1266
        CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
1255
 
1267
 
1256
		Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1268
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
1257
		JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1269
 
1258
		pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1270
        Map<String, Object> emailModel = new HashMap<>();
1259
		pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1271
        emailModel.put("customer", customerAddress);
1260
		CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
1272
        emailModel.put("pendingOrder", pendingOrder);
1261
 
1273
        emailModel.put("date", dateTimeFormatter);
1262
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
1274
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1263
 
1275
        String[] customerEmail = null;
1264
		Map<String, Object> emailModel = new HashMap<>();
1276
        if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
1265
		emailModel.put("customer", customerAddress);
1277
            customerEmail = new String[]{customer.getEmailId()};
1266
		emailModel.put("pendingOrder", pendingOrder);
1278
            List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
1267
		emailModel.put("date", dateTimeFormatter);
1279
 
1268
		Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1280
            emailService.sendMailWithAttachments("Order Delivered with SmartDukaan", "order-delivered.vm", emailModel,
1269
		String[] customerEmail = null;
1281
                    customerEmail, null, bccTo.toArray(new String[0]));
1270
		if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
1282
 
1271
			customerEmail = new String[]{customer.getEmailId()};
1283
        }
1272
			List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
1284
        if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1273
 
1285
                && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1274
			emailService.sendMailWithAttachments("Order Delivered with SmartDukaan", "order-delivered.vm", emailModel,
1286
                && !status.contains(OrderStatus.CLAIMED)) {
1275
					customerEmail, null, bccTo.toArray(new String[0]));
1287
            pendingOrder.setStatus(OrderStatus.CLOSED);
1276
 
1288
        }
1277
		}
1289
        pendingOrderItemRepository.persist(pendingOrderItem);
1278
		if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1290
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1279
				&& !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1291
 
1280
				&& !status.contains(OrderStatus.CLAIMED)) {
1292
        return "response";
1281
			pendingOrder.setStatus(OrderStatus.CLOSED);
1293
    }
1282
		}
1294
 
1283
		pendingOrderItemRepository.persist(pendingOrderItem);
1295
    @RequestMapping(value = "/raiseClaimOrderItem", method = RequestMethod.POST)
1284
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1296
    public String raiseClaimOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
1285
 
1297
 
1286
		return "response";
1298
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1287
	}
1299
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1288
 
1300
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1289
	@RequestMapping(value = "/raiseClaimOrderItem", method = RequestMethod.POST)
1301
 
1290
	public String raiseClaimOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
1302
        if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
1291
 
1303
            pendingOrderItem.setStatus(OrderStatus.CLAIMED);
1292
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1304
            pendingOrderItem.setClaimedTimestamp(LocalDateTime.now());
1293
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1305
 
1294
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1306
        }
1295
 
1307
        pendingOrderItemRepository.persist(pendingOrderItem);
1296
		if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
1308
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1297
			pendingOrderItem.setStatus(OrderStatus.CLAIMED);
1309
 
1298
			pendingOrderItem.setClaimedTimestamp(LocalDateTime.now());
1310
        return "response";
1299
 
1311
    }
1300
		}
1312
 
1301
		pendingOrderItemRepository.persist(pendingOrderItem);
1313
    @RequestMapping(value = "/verifyOrderItem", method = RequestMethod.POST)
1302
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1314
    public String verifyOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
1303
 
1315
 
1304
		return "response";
1316
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1305
	}
1317
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1306
 
1318
        pendingOrderItem.setVerifiedTimestamp(LocalDateTime.now());
1307
	@RequestMapping(value = "/verifyOrderItem", method = RequestMethod.POST)
1319
 
1308
	public String verifyOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
1320
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1309
 
1321
 
1310
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1322
        return "response";
1311
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1323
    }
1312
		pendingOrderItem.setVerifiedTimestamp(LocalDateTime.now());
1324
 
1313
 
1325
    @RequestMapping(value = "/cancelOrderByInvoice", method = RequestMethod.POST)
1314
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1326
    public String cancelOrder(HttpServletRequest request, @RequestParam List<String> invoiceNumbers, Model model)
1315
 
1327
            throws Exception {
1316
		return "response";
1328
        orderService.cancelOrder(invoiceNumbers);
1317
	}
1329
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1318
 
1330
 
1319
	@RequestMapping(value = "/cancelOrderByInvoice", method = RequestMethod.POST)
1331
        return "response";
1320
	public String cancelOrder(HttpServletRequest request, @RequestParam List<String> invoiceNumbers, Model model)
1332
    }
1321
			throws Exception {
1333
 
1322
		orderService.cancelOrder(invoiceNumbers);
1334
    @RequestMapping(value = "/getOnlineOrder", method = RequestMethod.GET)
1323
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1335
    public String cancelOrder(HttpServletRequest request, Model model) throws Exception {
1324
 
1336
        return "online-order";
1325
		return "response";
1337
    }
1326
	}
1338
 
1327
 
1339
    @GetMapping("/getAllOrdersByStatus")
1328
	@RequestMapping(value = "/getOnlineOrder", method = RequestMethod.GET)
1340
    public String getAllOrdersByStatus(HttpServletRequest request, @RequestParam OrderStatus status,
1329
	public String cancelOrder(HttpServletRequest request, Model model) throws Exception {
1341
                                       @RequestParam(required = false) LocalDateTime startTime,
1330
		return "online-order";
1342
                                       @RequestParam(required = false) LocalDateTime endTime, Model model) throws ProfitMandiBusinessException {
1331
	}
1343
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1332
 
1344
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1333
	@GetMapping("/getAllOrdersByStatus")
1345
 
1334
	public String getAllOrdersByStatus(HttpServletRequest request, @RequestParam OrderStatus status,
1346
        LOGGER.info("startTime {}", startTime);
1335
									   @RequestParam(required = false) LocalDateTime startTime,
1347
        LOGGER.info("endTime {}", endTime);
1336
									   @RequestParam(required = false) LocalDateTime endTime, Model model) throws ProfitMandiBusinessException {
1348
 
1337
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1349
        List<PendingOrderItem> pendingOrderItems;
1338
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1350
        if (startTime == null) {
1339
 
1351
            pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatus(status);
1340
		LOGGER.info("startTime {}", startTime);
1352
        } else {
1341
		LOGGER.info("endTime {}", endTime);
1353
            List<OrderStatus> statusList = new ArrayList<>();
1342
 
1354
            if (status.equals(OrderStatus.DELIVERED)) {
1343
		List<PendingOrderItem> pendingOrderItems;
1355
                statusList.add(OrderStatus.SETTLED);
1344
		if (startTime == null) {
1356
                statusList.add(OrderStatus.UNSETTLED);
1345
			pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatus(status);
1357
            } else {
1346
		} else {
1358
                statusList.add(status);
1347
			List<OrderStatus> statusList = new ArrayList<>();
1359
            }
1348
			if (status.equals(OrderStatus.DELIVERED)) {
1360
            pendingOrderItems = pendingOrderItemRepository.selectByStatusAndCreateTimestamp(statusList,
1349
				statusList.add(OrderStatus.SETTLED);
1361
                    startTime.toLocalDate().atStartOfDay(), endTime);
1350
				statusList.add(OrderStatus.UNSETTLED);
1362
        }
1351
			} else {
1363
 
1352
				statusList.add(status);
1364
        List<Integer> pendingOrderIds = pendingOrderItems.stream().map(x -> x.getOrderId()).collect(Collectors.toList());
1353
			}
1365
 
1354
			pendingOrderItems = pendingOrderItemRepository.selectByStatusAndCreateTimestamp(statusList,
1366
        List<Integer> fofoIds = pendingOrderRepository.selectByIds(pendingOrderIds)
1355
					startTime.toLocalDate().atStartOfDay(), endTime);
1367
                .stream().map(x -> x.getFofoId()).distinct().collect(Collectors.toList());
1356
		}
1368
 
1357
 
1369
        Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
1358
		List<Integer> pendingOrderIds = pendingOrderItems.stream().map(x -> x.getOrderId()).collect(Collectors.toList());
1370
 
1359
 
1371
        Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1360
		List<Integer> fofoIds = pendingOrderRepository.selectByIds(pendingOrderIds)
1372
                .filter(x -> x != null).collect(Collectors.toList()).stream()
1361
				.stream().map(x -> x.getFofoId()).distinct().collect(Collectors.toList());
1373
                .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1362
 
1374
        model.addAttribute("customRetailersMap", customRetailersMap);
1363
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
1375
 
1364
 
1376
        LOGGER.info("customRetailersMap {}", customRetailersMap);
1365
		Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1377
 
1366
				.filter(x -> x != null).collect(Collectors.toList()).stream()
1378
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, 0);
1367
				.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1379
 
1368
		model.addAttribute("customRetailersMap", customRetailersMap);
1380
        model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
1369
 
1381
        model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
1370
		LOGGER.info("customRetailersMap {}", customRetailersMap);
1382
 
1371
 
1383
        model.addAttribute("isAdmin", isAdmin);
1372
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, 0);
1384
        return "online-order-item";
1373
 
1385
    }
1374
		model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
1386
 
1375
		model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
1387
    //TODO Tejus
1376
 
1388
    @RequestMapping(value = "/getBulkOrder")
1377
		model.addAttribute("isAdmin", isAdmin);
1389
    public String getBulkOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1378
		return "online-order-item";
1390
        return "bulk-order";
1379
	}
1391
    }
-
 
1392
 
-
 
1393
    @PostMapping(value = "/bulkOrder/upload")
-
 
1394
    public String uploadCatalog(HttpServletRequest request, @RequestPart("file") MultipartFile file, Model model)
-
 
1395
            throws Exception {
-
 
1396
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
-
 
1397
        int authId = authRepository.selectByEmailOrMobile(fofoDetails.getEmailId()).getId();
-
 
1398
        LOGGER.info("authId - {}", authId);
-
 
1399
        bulkOrderService.parseBulkOrders(file, authId);
-
 
1400
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
1401
        return "response";
-
 
1402
    }
-
 
1403
 
-
 
1404
    // This method is use for sending all pending transaction to Transation Approval menu
-
 
1405
    @RequestMapping(value = "/transaction/pendingApprovals", method = RequestMethod.GET)
-
 
1406
    public String getTransactionApproval(HttpServletRequest request, Model model) throws Exception {
-
 
1407
        List<TransactionApproval> transactionapproval = transactionApprovalRepository.selectAllPending();
-
 
1408
        List<Integer> transactionAppprovalIds = transactionapproval.stream().map(x -> x.getId()).collect(Collectors.toList());
-
 
1409
        // List<Integer> transactionAppprovalIds= Arrays.asList( 1135352, 1135353, 1135354);
-
 
1410
        LOGGER.info("list of Approval transaction Id " + transactionAppprovalIds);
-
 
1411
        List<TransctionApprovalModel> approvalModelList = new ArrayList<>();
-
 
1412
        for (int transactionAppprovalId : transactionAppprovalIds) {
-
 
1413
            List<Order> orderList = orderRepository.selectAllByTransactionId(transactionAppprovalId);
-
 
1414
            Transaction transaction = transactionRepository.selectById(transactionAppprovalId);
-
 
1415
            List<Integer> orderIds = orderList.stream().map(order -> order.getId()).collect(Collectors.toList());
-
 
1416
            List<LineItem> lineItems = lineItemRepository.selectLineItem(orderIds);
-
 
1417
            List<LineItemModel> lineItemModelList = new ArrayList<>();
-
 
1418
            for (LineItem lineItem : lineItems) {
-
 
1419
                LineItemModel lineItemModel = new LineItemModel();
-
 
1420
                lineItemModel.setItemId(lineItem.getItemId());
-
 
1421
                lineItemModel.setItemName(lineItem.getModelName());
-
 
1422
                lineItemModel.setItemQuantity(lineItem.getQuantity());
-
 
1423
                lineItemModel.setSellingPrice(lineItem.getUnitPrice());
-
 
1424
                lineItemModel.setDp(tagListingRepository.selectByItemId(lineItem.getItemId()).getSellingPrice());
-
 
1425
                lineItemModelList.add(lineItemModel);
-
 
1426
            }
-
 
1427
            AuthUser authUser = authRepository.selectById(transaction.getCreatedBy());
-
 
1428
            TransctionApprovalModel transactionApprovalModel = new TransctionApprovalModel();
-
 
1429
            String retailerName = " ";
-
 
1430
            retailerName = orderList.get(0).getRetailerName();
-
 
1431
            transactionApprovalModel.setRetailerName(retailerName);
-
 
1432
            transactionApprovalModel.setCreatedBy(authUser.getFullName());
-
 
1433
            transactionApprovalModel.setCreatedOn(transaction.getCreateTimestamp());
-
 
1434
            transactionApprovalModel.setTransactionId(transactionAppprovalId);
-
 
1435
            transactionApprovalModel.setLineItemModels(lineItemModelList);
-
 
1436
            approvalModelList.add(transactionApprovalModel);
-
 
1437
 
-
 
1438
 
-
 
1439
        }
-
 
1440
 
-
 
1441
        model.addAttribute("approvalModelList", approvalModelList);
-
 
1442
        return "transaction/transaction-approvals";
-
 
1443
    }
-
 
1444
 
-
 
1445
    @RequestMapping(value = "transaction/approval", method = RequestMethod.PUT)
-
 
1446
    public String transactionApproval(HttpServletRequest request, Model model,
-
 
1447
                                      @RequestParam int transactionId,
-
 
1448
                                      @RequestParam String remark,
-
 
1449
                                      @RequestParam TransactionApprovalStatus transactionApprovalStatus
-
 
1450
    ) throws Exception {
-
 
1451
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
-
 
1452
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
-
 
1453
        int approvalId = authUser.getId();
-
 
1454
        String approvedBy = authUser.getFullName();
-
 
1455
        LocalDateTime approvedOn = LocalDateTime.now();
-
 
1456
        this.updateApprovalStatus(transactionId, approvalId, approvedBy, approvedOn, remark, transactionApprovalStatus);
-
 
1457
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
-
 
1458
        return "response";
-
 
1459
 
-
 
1460
    }
-
 
1461
 
-
 
1462
    private void updateApprovalStatus(int transactionId, int approvalId, String approvedBy, LocalDateTime approvedOn, String remark, TransactionApprovalStatus transactionApprovalStatus) throws Exception {
-
 
1463
        TransactionApproval transactionApproval = transactionApprovalRepository.selectById(transactionId);
-
 
1464
        if (!transactionApproval.getStatus().equals(TransactionApprovalStatus.PENDING)) {
-
 
1465
            throw new ProfitMandiBusinessException("Transaction already Processed", "Transaction already Processed", "Transaction already Processed");
-
 
1466
        }
-
 
1467
        transactionApproval.setStatus(transactionApprovalStatus);
-
 
1468
        transactionApproval.setRemark(remark);
-
 
1469
        transactionApproval.setApprovalId(approvalId);
-
 
1470
        transactionApproval.setApprovedBy(approvedBy);
-
 
1471
        transactionApproval.setApprovedOn(approvedOn);
-
 
1472
        if (transactionApprovalStatus.equals(TransactionApprovalStatus.APPROVED)) {
-
 
1473
            transactionService.processTransaction(transactionId);
-
 
1474
        }
-
 
1475
    }
-
 
1476
 
-
 
1477
    @RequestMapping(value = "/bulkOrderTemplate", method = RequestMethod.GET)
-
 
1478
    public ResponseEntity<?> bulkOrderTemplate() throws Exception {
-
 
1479
        List<List<?>> rows = new ArrayList<>();
-
 
1480
        rows.add(Arrays.asList("Mahaveer", "Change description for your reference", "175139287", "28264", "0", "4"));
-
 
1481
        rows.add(Arrays.asList("Mahaveer", "Price =0 means system price", "175139287", "28268", "0", "7"));
-
 
1482
        rows.add(Arrays.asList("Jas", "You give custom price also ", "171273247", "28264", "300", "3"));
-
 
1483
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
-
 
1484
                .getCSVByteStream(Arrays.asList("Partner name", "Description", "Partner Id", "Item Id", "Price", "Quantity"), rows);
-
 
1485
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Bulk order template");
1380
 
1486
 
-
 
1487
        return responseEntity;
1381
 
1488
 
-
 
1489
    }
1382
}
1490
}
1383
 
1491
 
1384
 
1492
 
1385
 
1493
 
1386
 
1494