Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
21612 ashik.ali 1
package com.spice.profitmandi.web.controller;
2
 
26817 amit.gupta 3
import com.google.gson.Gson;
23203 ashik.ali 4
import com.spice.profitmandi.common.enumuration.SearchType;
21612 ashik.ali 5
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
30322 amit.gupta 6
import com.spice.profitmandi.common.model.*;
28339 tejbeer 7
import com.spice.profitmandi.common.solr.SolrService;
33213 tejus.loha 8
import com.spice.profitmandi.common.util.FileUtil;
21689 ashik.ali 9
import com.spice.profitmandi.common.util.PdfUtils;
35066 amit 10
import com.spice.profitmandi.common.util.PrinterType;
23638 amit.gupta 11
import com.spice.profitmandi.common.util.StringUtils;
22244 ashik.ali 12
import com.spice.profitmandi.common.web.util.ResponseSender;
33213 tejus.loha 13
import com.spice.profitmandi.dao.entity.auth.AuthUser;
33795 ranu 14
import com.spice.profitmandi.dao.entity.catalog.CustomerOffer;
15
import com.spice.profitmandi.dao.entity.catalog.CustomerOfferItem;
23638 amit.gupta 16
import com.spice.profitmandi.dao.entity.catalog.Item;
27861 tejbeer 17
import com.spice.profitmandi.dao.entity.catalog.TagListing;
33400 ranu 18
import com.spice.profitmandi.dao.entity.cs.Position;
34798 ranu 19
import com.spice.profitmandi.dao.entity.dtr.*;
30322 amit.gupta 20
import com.spice.profitmandi.dao.entity.fofo.*;
34194 ranu 21
import com.spice.profitmandi.dao.entity.transaction.EInvoiceDetails;
22
import com.spice.profitmandi.dao.entity.transaction.Order;
23
import com.spice.profitmandi.dao.entity.transaction.TransactionApproval;
24
import com.spice.profitmandi.dao.entity.transaction.UserWalletHistory;
23298 ashik.ali 25
import com.spice.profitmandi.dao.entity.user.Address;
33400 ranu 26
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
23548 ashik.ali 27
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
27046 tejbeer 28
import com.spice.profitmandi.dao.enumuration.transaction.OrderStatus;
33213 tejus.loha 29
import com.spice.profitmandi.dao.enumuration.transaction.TransactionApprovalStatus;
34788 ranu 30
import com.spice.profitmandi.dao.model.ItemWiseCustomerOfferSummaryModel;
34168 tejus.loha 31
import com.spice.profitmandi.dao.model.hdfc.IrnResetOrderModel;
33213 tejus.loha 32
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
33795 ranu 33
import com.spice.profitmandi.dao.repository.catalog.*;
33400 ranu 34
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
30322 amit.gupta 35
import com.spice.profitmandi.dao.repository.dtr.*;
36
import com.spice.profitmandi.dao.repository.fofo.*;
24440 amit.gupta 37
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
33336 tejus.loha 38
import com.spice.profitmandi.dao.repository.transaction.*;
23298 ashik.ali 39
import com.spice.profitmandi.dao.repository.user.AddressRepository;
33336 tejus.loha 40
import com.spice.profitmandi.dao.repository.user.CartRepository;
34474 aman.kumar 41
import com.spice.profitmandi.dao.service.ScratchService;
28377 tejbeer 42
import com.spice.profitmandi.service.EmailService;
32251 amit.gupta 43
import com.spice.profitmandi.service.NotificationService;
23798 amit.gupta 44
import com.spice.profitmandi.service.authentication.RoleManager;
34798 ranu 45
import com.spice.profitmandi.service.integrations.bharti.model.PlanVariant;
46
import com.spice.profitmandi.service.integrations.icicilombard.IciciLombardService;
47
import com.spice.profitmandi.service.integrations.icicilombard.model.AfinityQuoteModel;
34805 ranu 48
import com.spice.profitmandi.service.integrations.icicilombard.model.AfinityQuoteResponseModel;
25726 amit.gupta 49
import com.spice.profitmandi.service.integrations.zest.InsuranceService;
24440 amit.gupta 50
import com.spice.profitmandi.service.integrations.zest.MobileInsurancePlan;
33172 tejus.loha 51
import com.spice.profitmandi.service.order.BulkOrderService;
23366 ashik.ali 52
import com.spice.profitmandi.service.order.OrderService;
22069 ashik.ali 53
import com.spice.profitmandi.service.pricing.PricingService;
33696 amit.gupta 54
import com.spice.profitmandi.service.transaction.SDCreditService;
33213 tejus.loha 55
import com.spice.profitmandi.service.transaction.TransactionService;
26647 tejbeer 56
import com.spice.profitmandi.service.user.RetailerService;
33336 tejus.loha 57
import com.spice.profitmandi.service.wallet.WalletService;
32405 jai.hind 58
import com.spice.profitmandi.service.whatsapp.WhatsappMessageService;
32855 amit.gupta 59
import com.spice.profitmandi.service.whatsapp.WhatsappMessageType;
22139 amit.gupta 60
import com.spice.profitmandi.web.model.LoginDetails;
22069 ashik.ali 61
import com.spice.profitmandi.web.util.CookiesProcessor;
24105 govind 62
import com.spice.profitmandi.web.util.MVCResponseSender;
33336 tejus.loha 63
import in.shop2020.model.v1.order.WalletReferenceType;
30148 amit.gupta 64
import org.apache.logging.log4j.LogManager;
65
import org.apache.logging.log4j.Logger;
32405 jai.hind 66
import org.json.JSONArray;
30148 amit.gupta 67
import org.json.JSONObject;
68
import org.springframework.beans.factory.annotation.Autowired;
69
import org.springframework.core.io.InputStreamResource;
70
import org.springframework.http.HttpHeaders;
71
import org.springframework.http.HttpStatus;
72
import org.springframework.http.MediaType;
73
import org.springframework.http.ResponseEntity;
74
import org.springframework.stereotype.Controller;
75
import org.springframework.transaction.annotation.Transactional;
76
import org.springframework.ui.Model;
77
import org.springframework.web.bind.annotation.*;
33172 tejus.loha 78
import org.springframework.web.multipart.MultipartFile;
21612 ashik.ali 79
 
33336 tejus.loha 80
import javax.mail.MessagingException;
30148 amit.gupta 81
import javax.servlet.http.HttpServletRequest;
82
import javax.servlet.http.HttpServletResponse;
34805 ranu 83
import java.io.*;
32271 amit.gupta 84
import java.nio.charset.StandardCharsets;
34805 ranu 85
import java.nio.file.Files;
33367 ranu 86
import java.time.LocalDate;
30148 amit.gupta 87
import java.time.LocalDateTime;
88
import java.time.format.DateTimeFormatter;
89
import java.time.temporal.ChronoUnit;
90
import java.util.*;
91
import java.util.stream.Collectors;
92
 
21612 ashik.ali 93
@Controller
23973 govind 94
@Transactional(rollbackFor = Throwable.class)
21612 ashik.ali 95
public class OrderController {
96
 
33213 tejus.loha 97
    private static final Logger LOGGER = LogManager.getLogger(OrderController.class);
21985 kshitij.so 98
 
33213 tejus.loha 99
    private static final List<String> offlineOrders = Arrays.asList("EMIOD", "POD");
100
    private static final List<String> allowedDoaImeis = Arrays.asList("863903054378477");
101
    @Autowired
102
    NotificationService notificationService;
103
    @Autowired
104
    TransactionApprovalRepository transactionApprovalRepository;
105
    @Autowired
106
    LineItemRepository lineItemRepository;
107
    @Autowired
108
    AuthRepository authRepository;
109
    @Autowired
110
    TransactionService transactionService;
111
    @Autowired
112
    BulkOrderService bulkOrderService;
113
    @Autowired
114
    private CustomerRepository customerRepository;
115
    private boolean accessoriesDeals = true;
116
    @Autowired
117
    private RoleManager roleManager;
118
    @Autowired
119
    private Gson gson;
120
    @Autowired
121
    private CustomerReturnItemRepository customerReturnItemRepository;
122
    @Autowired
123
    private FofoOrderItemRepository fofoOrderItemRepository;
124
    @Autowired
125
    private PaymentOptionRepository paymentOptionRepository;
126
    @Autowired
127
    private StateRepository stateRepository;
128
    @Autowired
129
    private ItemRepository itemRepository;
130
    @Autowired
131
    private MVCResponseSender mvcResponseSender;
132
    @Autowired
133
    private InsuranceService insuranceService;
134
    @Autowired
135
    private FofoOrderRepository fofoOrderRepository;
136
    @Autowired
137
    private CustomerAddressRepository customerAddressRepository;
138
    @Autowired
139
    private InsurancePolicyRepository insurancePolicyRepository;
140
    @Autowired
141
    private InsuranceProviderRepository insuranceProviderRepository;
142
    @Autowired
143
    private CookiesProcessor cookiesProcessor;
144
    @Autowired
145
    private PricingService pricingService;
146
    @Autowired
147
    private OrderService orderService;
148
    @Autowired
149
    private RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
150
    @Autowired
151
    private AddressRepository addressRepository;
152
    @Autowired
153
    private PaymentOptionTransactionRepository paymentOptionTransactionRepository;
154
    @Autowired
155
    private FofoPartnerPaymentOptionRepository fofoPartnerPaymentOptionRepository;
156
    @Autowired
157
    private ResponseSender<?> responseSender;
158
    @Autowired
159
    private PendingOrderRepository pendingOrderRepository;
160
    @Autowired
161
    private OrderRepository orderRepository;
162
    @Autowired
163
    private PendingOrderItemRepository pendingOrderItemRepository;
164
    @Autowired
165
    private FofoStoreRepository fofoStoreRepository;
166
    @Autowired
167
    private RetailerService retailerService;
168
    @Autowired
169
    private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
170
    @Autowired
171
    private TagListingRepository tagListingRepository;
172
    @Autowired
173
    private PendingOrderService pendingOrderService;
174
    @Autowired
175
    private EmailService emailService;
176
    @Autowired
177
    private SolrService commonSolrService;
178
    @Autowired
179
    private MouRepository mouRepository;
180
    @Autowired
181
    private WhatsappMessageService whatsappMessageService;
182
    @Autowired
183
    private TransactionRepository transactionRepository;
33336 tejus.loha 184
    @Autowired
185
    WalletService walletService;
186
    @Autowired
187
    CartRepository cartRepository;
188
    @Autowired
189
    UserWalletRepository userWalletRepository;
28339 tejbeer 190
 
33795 ranu 191
    @Autowired
192
    private CatalogRepository catalogRepository;
33336 tejus.loha 193
 
33400 ranu 194
    @Autowired
33795 ranu 195
    private CustomerOfferRepository customerOfferRepository;
196
 
197
    @Autowired
198
    private CustomerOfferItemRepository customerOfferItemRepository;
199
 
200
    @Autowired
201
    private WebOfferRepository webOfferRepository;
202
 
203
    @Autowired
33400 ranu 204
    PositionRepository positionRepository;
32405 jai.hind 205
 
33437 ranu 206
    @Autowired
207
    PendingOrderPlanRepository pendingOrderPlanRepository;
24105 govind 208
 
34168 tejus.loha 209
    @Autowired
210
    PartnerOnBoardingPanelRepository partnerOnBoardingPanelRepository;
211
 
212
    @Autowired
213
    SDCreditService sdCreditService;
214
 
34798 ranu 215
    @Autowired
216
    IciciPolicyTrackerRepository iciciPolicyTrackerRepository;
34788 ranu 217
 
218
    @Autowired
34474 aman.kumar 219
    ScratchService scratchService;
34798 ranu 220
 
34788 ranu 221
    @Autowired
34798 ranu 222
    IciciLombardService iciciLombardService;
34788 ranu 223
 
33419 amit.gupta 224
    @RequestMapping(value = "/wa-send-invoice", method = RequestMethod.GET)
225
    public String sendWhatsappMessage(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) {
226
        try {
227
            this.sendWhatsappInvoice(fofoOrderRepository.selectByOrderId(orderId));
228
        } catch (Exception e) {
229
            LOGGER.info("Could not send whatsapp message");
230
            e.printStackTrace();
231
        }
232
        model.addAttribute("response1", true);
233
        return "response";
234
    }
235
 
33213 tejus.loha 236
    @RequestMapping(value = "/get-order", method = RequestMethod.GET)
237
    public String getOrder(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId,
238
                           Model model) throws ProfitMandiBusinessException {
239
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
240
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
241
        List<FofoOrderItem> fofoLineItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
242
        CustomerAddress customerAddress = null;
243
        if (fofoOrder.getCustomerAddressId() != 0) {
244
            customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
245
        }
23973 govind 246
 
33213 tejus.loha 247
        Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
248
        if (customerAddress != null) {
249
            customerAddress.setPhoneNumber(customer.getMobileNumber());
250
        }
251
        LOGGER.info("Added to get invoice - {}, {}", customer, 123);
252
        List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
253
                .selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
254
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
255
                .paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
256
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
257
                .selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
258
        this.addInsuranceProvider(insurancePolicies);
32627 ranu 259
 
33213 tejus.loha 260
        model.addAttribute("fofoOrder", fofoOrder);
261
        model.addAttribute("fofoLineItems", fofoLineItems);
262
        if (customerAddress != null) {
263
            model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
264
        } else {
265
            model.addAttribute("customerBillingAddress", "");
21985 kshitij.so 266
 
33213 tejus.loha 267
        }
268
        model.addAttribute("customerBillingAddressObj", customerAddress);
269
        model.addAttribute("customerDetailsObj", customer);
270
        model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
271
        model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
272
        model.addAttribute("insurancePolicies", insurancePolicies);
273
        return "order-details";
274
    }
32637 amit.gupta 275
 
33213 tejus.loha 276
    private Map<Integer, InsuranceProvider> toInsuranceProviderIdInsuranceProvider(
277
            List<InsuranceProvider> insuranceProviders) {
278
        Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = new HashMap<>();
279
        for (InsuranceProvider insuranceProvider : insuranceProviders) {
280
            insuranceProviderIdInsuranceProviderMap.put(insuranceProvider.getId(), insuranceProvider);
281
        }
282
        return insuranceProviderIdInsuranceProviderMap;
283
    }
23973 govind 284
 
33247 ranu 285
    private void addInsuranceProvider(List<InsurancePolicy> insurancePolicies) throws ProfitMandiBusinessException {
33213 tejus.loha 286
        if (insurancePolicies.isEmpty()) {
287
            return;
288
        }
289
        Set<Integer> insuranceProviderIds = new HashSet<>();
290
        for (InsurancePolicy insurancePolicy : insurancePolicies) {
291
            insuranceProviderIds.add(insurancePolicy.getProviderId());
292
        }
293
        LOGGER.info("insuranceProviderIds {}", insuranceProviderIds);
294
        List<InsuranceProvider> insuranceProviders = insuranceProviderRepository.selectByIds(insuranceProviderIds);
295
        Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = this
296
                .toInsuranceProviderIdInsuranceProvider(insuranceProviders);
297
        for (InsurancePolicy insurancePolicy : insurancePolicies) {
298
            insurancePolicy
299
                    .setInsuranceProvider(insuranceProviderIdInsuranceProviderMap.get(insurancePolicy.getProviderId()));
300
        }
301
    }
23973 govind 302
 
33213 tejus.loha 303
    @RequestMapping(value = "/saleDetails", method = RequestMethod.GET)
304
    public String getSaleDetails(HttpServletRequest request,
305
                                 @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) throws Exception {
306
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
307
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
308
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
309
        List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
310
        CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
311
        List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
312
                .selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
23973 govind 313
 
33213 tejus.loha 314
        // Added Migration info as we lost it.
315
        if (paymentOptionTransactions == null || paymentOptionTransactions.size() == 0) {
316
            PaymentOptionTransaction pot = new PaymentOptionTransaction();
317
            pot.setAmount(fofoOrder.getTotalAmount());
318
            pot.setCreateTimestamp(fofoOrder.getCreateTimestamp());
319
            // Mark it paid through cash
320
            pot.setPaymentOptionId(1);
321
            pot.setReferenceType(PaymentOptionReferenceType.ORDER);
322
            paymentOptionTransactionRepository.persist(pot);
323
            paymentOptionTransactions.add(pot);
324
            LOGGER.info("Added to get invoice");
325
        }
326
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
327
                .paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
328
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
329
                .selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
330
        this.addInsuranceProvider(insurancePolicies);
331
        Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
332
            try {
333
                return itemRepository.selectById(x.getItemId());
334
            } catch (ProfitMandiBusinessException e) {
335
                // TODO Auto-generated catch block
336
                return null;
337
            }
338
        }));
339
        Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
340
                .collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
23973 govind 341
 
33213 tejus.loha 342
        Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
343
                .collect(Collectors.toMap(foi -> foi.getId(),
344
                        foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
23973 govind 345
 
33213 tejus.loha 346
        Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
23973 govind 347
 
33213 tejus.loha 348
        for (FofoOrderItem foi : fofoOrderItems) {
349
            for (FofoLineItem fli : foi.getFofoLineItems()) {
350
                inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
351
            }
352
            List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
353
                    .selectAllByOrderItemId(foi.getId());
354
            this.markDoa(fofoOrder, foi, isAdmin);
355
            for (CustomerReturnItem customerReturnItem : customerReturnItems) {
356
                inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
357
                        inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
358
            }
359
        }
23973 govind 360
 
33213 tejus.loha 361
        LOGGER.info("fofoOrderItemIdLineItemMap {}", fofoOrderItemIdLineItemMap);
362
        model.addAttribute("fofoOrder", fofoOrder);
363
        model.addAttribute("itemsMap", itemsMap);
364
        model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
365
        model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
366
                StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
367
        model.addAttribute("fofoOrderItemIdLineItemMap", fofoOrderItemIdLineItemMap);
23973 govind 368
 
33213 tejus.loha 369
        model.addAttribute("fofoOrderItems", fofoOrderItems);
370
        model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
371
        if (customerAddress != null) {
30426 tejbeer 372
 
33213 tejus.loha 373
            model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
374
        } else {
375
            model.addAttribute("customerBillingAddress", "");
32637 amit.gupta 376
 
33213 tejus.loha 377
        }
378
        model.addAttribute("customerBillingAddressObj", customerAddress);
379
        model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
380
        model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
381
        model.addAttribute("insurancePolicies", insurancePolicies);
382
        model.addAttribute("markDefective", this.markDefective(fofoOrder));
383
        return "sale-details";
384
    }
32637 amit.gupta 385
 
33213 tejus.loha 386
    private void markDoa(FofoOrder fofoOrder, FofoOrderItem foi, boolean isAdmin) {
387
        if (isAdmin) {
388
            foi.setDoa(true);
389
            return;
390
        }
391
        boolean isImei = foi.getFofoLineItems().stream()
392
                .anyMatch(x -> org.apache.commons.lang3.StringUtils.isNotEmpty(x.getSerialNumber())
393
                        && allowedDoaImeis.contains(x.getSerialNumber()));
394
        LocalDateTime buyDate = fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS);
395
        LocalDateTime curDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
396
        if (buyDate.isAfter(curDate.minusDays(45)) || isImei) {
397
            foi.setDoa(true);
398
        } else
399
            foi.setDoa(
400
                    foi.getBrand().equals("Nokia") && foi.getCost() < 4990 && buyDate.isAfter(curDate.minusYears(1)));
401
    }
30426 tejbeer 402
 
33213 tejus.loha 403
    private boolean markDefective(FofoOrder fofoOrder) {
404
        return fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS).plusDays(180)
405
                .isAfter(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));
26647 tejbeer 406
 
33213 tejus.loha 407
    }
26647 tejbeer 408
 
33213 tejus.loha 409
    @RequestMapping(value = "/getSearchOrder")
410
    public String getSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
411
        return "search-order";
412
    }
26647 tejbeer 413
 
33213 tejus.loha 414
    @RequestMapping(value = "/getInvoiceSearchOrder")
415
    public String getInvoiceSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
416
        return "invoices-cancel";
417
    }
33172 tejus.loha 418
 
33213 tejus.loha 419
    @RequestMapping(value = "/customerDetails", method = RequestMethod.PUT)
420
    public String updateCustomerDetails(HttpServletRequest request, @RequestBody CustomCustomer customCustomer,
421
                                        @RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
422
            throws Exception {
34338 ranu 423
        LOGGER.info("CustomCustomer {}", customCustomer);
33172 tejus.loha 424
 
33213 tejus.loha 425
        orderService.updateCustomerDetails(customCustomer, invoiceNumber);
426
        return this.getSearchOrderDetails(request, invoiceNumber, model);
427
    }
33172 tejus.loha 428
 
33213 tejus.loha 429
    @RequestMapping(value = "/searchOrderDetails", method = RequestMethod.GET)
430
    public String getSearchOrderDetails(HttpServletRequest request,
431
                                        @RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
432
            throws Exception {
33172 tejus.loha 433
 
33213 tejus.loha 434
        FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
34474 aman.kumar 435
        if (fofoOrder == null) {
436
            throw new ProfitMandiBusinessException("invalid invoice number", "invoice - " + invoiceNumber, "Please enter valid invoice number");
34181 tejus.loha 437
        }
438
 
33213 tejus.loha 439
        List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
440
        Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
441
        CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
442
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = paymentOptionRepository.selectActiveOption().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
443
        List<Integer> fofoPartnerPaymentOptions = new ArrayList<>(paymentOptionIdPaymentOptionMap.keySet());
444
        Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
445
            try {
446
                return itemRepository.selectById(x.getItemId());
447
            } catch (ProfitMandiBusinessException e) {
448
                // TODO Auto-generated catch block
449
                return null;
450
            }
451
        }));
452
        LOGGER.info("fofoPartnerPaymentOptions" + fofoPartnerPaymentOptions);
453
        List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
454
                .selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
455
        LOGGER.info("paymentOptionTransactions" + paymentOptionTransactions);
26647 tejbeer 456
 
33213 tejus.loha 457
        Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
458
                .paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
459
        LOGGER.info("paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
460
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
461
                .selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
462
        this.addInsuranceProvider(insurancePolicies);
463
        model.addAttribute("fofoOrder", fofoOrder);
464
        for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
465
            fofoOrderItem.setDoa(true);
466
        }
27861 tejbeer 467
 
33213 tejus.loha 468
        Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
469
                .collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
28339 tejbeer 470
 
33213 tejus.loha 471
        Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
472
                .collect(Collectors.toMap(foi -> foi.getId(),
473
                        foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
28339 tejbeer 474
 
33213 tejus.loha 475
        Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
28339 tejbeer 476
 
33213 tejus.loha 477
        for (FofoOrderItem foi : fofoOrderItems) {
478
            for (FofoLineItem fli : foi.getFofoLineItems()) {
479
                inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
480
            }
481
            List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
482
                    .selectAllByOrderItemId(foi.getId());
483
            for (CustomerReturnItem customerReturnItem : customerReturnItems) {
484
                inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
485
                        inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
486
            }
487
        }
488
        model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
489
                StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
490
        model.addAttribute("fofoOrderItems", fofoOrderItems);
491
        model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
492
        model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
493
        model.addAttribute("itemsMap", itemsMap);
494
        model.addAttribute("markDefective", true);
495
        model.addAttribute("customer", customer);
496
        model.addAttribute("customerAddress", customerAddress);
497
        model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
498
        model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
499
        model.addAttribute("paymentOptionIdPaymentOptionTransactionMap", paymentOptionIdPaymentOptionTransactionMap);
500
        model.addAttribute("insurancePolicies", insurancePolicies);
501
        model.addAttribute("fofoPartnerPaymentOptions", fofoPartnerPaymentOptions);
502
        model.addAttribute("totalNumberOfPaymentOptionId", fofoPartnerPaymentOptions.size());
503
        model.addAttribute("stateNames",
504
                stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
505
        return "search-order-details";
506
    }
28420 tejbeer 507
 
33213 tejus.loha 508
    private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap(
33247 ranu 509
            List<PaymentOptionTransaction> paymentOptionTransactions) throws ProfitMandiBusinessException {
33213 tejus.loha 510
        Set<Integer> paymentOptionIds = new HashSet<>();
511
        for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
512
            paymentOptionIds.add(paymentOptionTransaction.getPaymentOptionId());
513
        }
514
        List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(paymentOptionIds);
515
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
516
        for (PaymentOption paymentOption : paymentOptions) {
517
            paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
518
        }
519
        return paymentOptionIdPaymentOptionMap;
520
    }
23973 govind 521
 
33213 tejus.loha 522
    private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMapUsingPaymentOptions(
33247 ranu 523
            List<Integer> fofoPartnerPaymentOptions) throws ProfitMandiBusinessException {
33213 tejus.loha 524
        List<PaymentOption> paymentOptions = paymentOptionRepository
525
                .selectByIds(new HashSet<>(fofoPartnerPaymentOptions));
526
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
527
        for (PaymentOption paymentOption : paymentOptions) {
528
            paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
529
        }
530
        return paymentOptionIdPaymentOptionMap;
531
    }
23973 govind 532
 
33213 tejus.loha 533
    private Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap(
534
            List<PaymentOptionTransaction> paymentOptionTransactions) {
535
        Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = new HashMap<>();
536
        for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
537
            paymentOptionIdPaymentOptionTransactionMap.put(paymentOptionTransaction.getPaymentOptionId(),
538
                    paymentOptionTransaction);
539
        }
540
        return paymentOptionIdPaymentOptionTransactionMap;
541
    }
28339 tejbeer 542
 
33437 ranu 543
    @RequestMapping(value = "/checkplans", method = RequestMethod.GET)
544
    public String getInsurancePrices(HttpServletRequest request, @RequestParam float price, Model model,
545
                                     @RequestParam int itemId, @RequestParam int poiId) throws ProfitMandiBusinessException {
546
        LOGGER.info("Request received at url : {}", request.getRequestURI());
28339 tejbeer 547
 
33437 ranu 548
        try {
549
            String response = mvcResponseSender.createResponseString(this.getPlans(price, itemId, poiId));
550
            model.addAttribute("response1", response);
551
        } catch (Exception e) {
552
            // TODO Auto-generated catch block
553
            LOGGER.info(e.getMessage(), e);
554
            throw new ProfitMandiBusinessException("Plans", "Plans API", "Error formatting insurance plans");
33213 tejus.loha 555
        }
33400 ranu 556
 
33437 ranu 557
        return "response";
33213 tejus.loha 558
    }
28339 tejbeer 559
 
34798 ranu 560
    @RequestMapping(value = "/getPlanQuote", method = RequestMethod.GET)
34788 ranu 561
    public String getPlanQuote(HttpServletRequest request, Model model,
35002 ranu 562
                               @RequestParam String planCode, @RequestParam int sumInsured, @RequestParam String manufacturedDate, @RequestParam int itemId, @RequestParam String planName) throws ProfitMandiBusinessException {
34788 ranu 563
 
564
        try {
34798 ranu 565
 
566
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
567
            LocalDate manufactured = LocalDate.parse(manufacturedDate, formatter);
568
 
34788 ranu 569
            PlanVariant planVariant = insuranceService.getICICIPremiumByVariantId(planCode);
570
 
35066 amit 571
            LOGGER.info("planVariant111 {}", planVariant);
34788 ranu 572
 
573
            String correlationId = UUID.randomUUID().toString();
574
            IciciPolicyTracker policyTracker = new IciciPolicyTracker();
575
            policyTracker.setCorrelationId(correlationId);
576
            iciciPolicyTrackerRepository.persist(policyTracker);
577
 
578
            // Policy validity (1 year from today)
579
            LocalDate today = LocalDate.now();
580
            LocalDate oneYearLater = today.plusYears(1);
581
 
582
            String itemBrand = itemRepository.selectById(itemId).getBrand();
583
 
584
            AfinityQuoteModel quoteModel = new AfinityQuoteModel();
35002 ranu 585
            quoteModel.setProductCode(iciciLombardService.PRODUCT_CODE_STAGGING);
586
            quoteModel.setPlanCode(String.valueOf(planVariant.getOurPlanId()));
587
            quoteModel.setPlanName(planName);
588
            /*quoteModel.setPlanCode(String.valueOf(11730));
589
            quoteModel.setPlanName("SHUBHI");*/
590
            quoteModel.setSumInsured((int) sumInsured);
34788 ranu 591
            quoteModel.setPolicyStartDate(today.toString());          // format: yyyy-MM-dd
592
            quoteModel.setPolicyEndDate(oneYearLater.toString());
35002 ranu 593
            quoteModel.setTaxEffectiveDate(today.toString());
594
            quoteModel.setPolicyType("New");
595
            quoteModel.setIlgicStateName(iciciLombardService.PARTY_STATE_NAME);
34805 ranu 596
            quoteModel.setPartyStateName(iciciLombardService.PARTY_STATE_NAME);
35002 ranu 597
            quoteModel.setUserLevel("UW3");
598
            quoteModel.setNoOfClaimsAllowed(999);
599
            quoteModel.setMakeAndModelOfGadget("High");
600
            quoteModel.setPremiumBeforeEndorsementCancellation(0);
601
            quoteModel.setGeographicalLimit("WithinIndia");
602
            quoteModel.setTransactionDate(today.toString());
603
            quoteModel.setEndorsementEffectiveDate(today.toString());
604
            quoteModel.setRegisteredCustomer(true);
34788 ranu 605
            quoteModel.setCorrelationId(correlationId);
606
 
35002 ranu 607
            // Set cover details
608
            AfinityQuoteModel.CoverDetail coverDetail = new AfinityQuoteModel.CoverDetail();
609
            coverDetail.setName("Accidental Damage");
610
            coverDetail.setPremium(0);
611
 
612
            // Set risk details
613
            AfinityQuoteModel.RiskDetail riskDetail = new AfinityQuoteModel.RiskDetail();
614
            riskDetail.setRiskSIComponent("MOBILE");
615
            riskDetail.setCoverDetails(Arrays.asList(coverDetail));
616
 
617
            quoteModel.setRisksDetails(Arrays.asList(riskDetail));
618
 
34805 ranu 619
            AfinityQuoteResponseModel afinityQuoteResponseModel = iciciLombardService.hitAfinityQuote(quoteModel);
620
            float planDp = insuranceService.getPlanDp(afinityQuoteResponseModel.getTotalPremium(), planVariant.getCoverage());
621
 
622
            Map<String, Object> responseMap = new HashMap<>();
623
            responseMap.put("afinityQuoteModel", afinityQuoteResponseModel);
624
            responseMap.put("planDp", planDp);
625
            model.addAttribute("response1", mvcResponseSender.createResponseString(responseMap));
34788 ranu 626
        } catch (Exception e) {
627
            // TODO Auto-generated catch block
628
            LOGGER.info(e.getMessage(), e);
629
            throw new ProfitMandiBusinessException("Plans", "Plans Quote", "Error qutotation insurance plans");
630
        }
631
 
632
        return "response";
34798 ranu 633
    }
34788 ranu 634
 
34204 tejus.loha 635
    private boolean sendWhatsappInvoice(FofoOrder fofoOrder) throws Exception {
636
        return this.sendWhatsappInvoice(fofoOrder, "");
34179 tejus.loha 637
    }
638
 
34204 tejus.loha 639
    private boolean sendWhatsappInvoice(FofoOrder fofoOrder, String whatsAppNo) throws Exception {
640
        boolean shouldSendWhatsappMessage = notificationService.shouldSendWhatsappMessage(whatsAppNo);
34474 aman.kumar 641
        boolean isSend = false;
34204 tejus.loha 642
        if (shouldSendWhatsappMessage) {
643
            Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
644
            String mobileNumber;
645
            if (!whatsAppNo.isEmpty()) {
34474 aman.kumar 646
                mobileNumber = whatsAppNo;
647
            } else {
648
                mobileNumber = customer.getMobileNumber();
649
            }
650
            CustomRetailer retailer = retailerService.getFofoRetailer(fofoOrder.getFofoId());
651
            String message = String.format("Dear %s,\n" +
652
                    "Thank you for your purchase from SmartDukaan store - %s, %s.\n" +
653
                    "Your purchase invoice is attached for your reference.\n" +
654
                    "\n" +
655
                    "Download our app for offers and updates on new products.\n" +
656
                    "https://www.smartdukaan.com/b2c\n" +
657
                    "\n" +
658
                    "Best Regards\n" +
659
                    "SmartDukaan", customer.getFirstName(), retailer.getBusinessName(), retailer.getAddress().getCity());
34204 tejus.loha 660
 
34474 aman.kumar 661
            isSend = notificationService.sendWhatsappMediaMessage(message, mobileNumber, this.getPublicInvoiceUrl(fofoOrder.getInvoiceNumber()),
33213 tejus.loha 662
                    this.getFileName(fofoOrder.getInvoiceNumber()), WhatsappMessageType.DOCUMENT);
663
        }
34204 tejus.loha 664
        return isSend;
33213 tejus.loha 665
    }
28339 tejbeer 666
 
33213 tejus.loha 667
    private String getFileName(String invoiceNumber) {
668
        return "INV-" + invoiceNumber.replace("/", "-") + ".pdf";
669
    }
31375 tejbeer 670
 
33213 tejus.loha 671
    private String getPublicInvoiceUrl(String invoiceNumber) {
672
        String base64Encoded = Base64.getMimeEncoder().encodeToString(invoiceNumber.getBytes(StandardCharsets.UTF_8));
673
        String publicUrl = "https://partners.smartdukaan.com/wa-invoice-send/" + base64Encoded + ".pdf";
674
        LOGGER.info("Public Whatsapp Url for Invoice Message - {}", publicUrl);
675
        return publicUrl;
676
    }
28339 tejbeer 677
 
33213 tejus.loha 678
    @RequestMapping(value = "/order/bad_return", method = RequestMethod.POST)
679
    public ResponseEntity<?> badReturn(HttpServletRequest request, @RequestBody FoiBadReturnRequest foiBadReturnRequest,
680
                                       Model model) throws ProfitMandiBusinessException {
681
        LOGGER.info("request at uri {} body {}", request.getRequestURI(), foiBadReturnRequest);
682
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
683
        CustomerCreditNote custmoerCreditNote;
684
        if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
685
            FofoOrderItem foi = fofoOrderItemRepository.selectById(foiBadReturnRequest.getFofoOrderItemId());
686
            FofoOrder fo = fofoOrderRepository.selectByOrderId(foi.getOrderId());
34168 tejus.loha 687
            custmoerCreditNote = orderService.badReturn(fofoDetails.getEmailId(), fo.getFofoId(), foiBadReturnRequest);
33213 tejus.loha 688
        } else {
689
            custmoerCreditNote = orderService.badReturn(fofoDetails.getFofoId(), foiBadReturnRequest);
690
        }
691
        return responseSender.ok(custmoerCreditNote.getId());
692
    }
28339 tejbeer 693
 
33213 tejus.loha 694
    @GetMapping(value = "/wa-invoice-send/{invoiceHash}")
695
    public ResponseEntity<?> generateInvoice(@PathVariable String invoiceHash) throws ProfitMandiBusinessException {
696
        String decodedInvoiceNumber = new String(Base64.getMimeDecoder().decode(invoiceHash));
697
        LOGGER.info("Invoice Hash {}", invoiceHash);
28339 tejbeer 698
 
23973 govind 699
 
33213 tejus.loha 700
        FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(decodedInvoiceNumber);
24844 amit.gupta 701
 
33213 tejus.loha 702
        InvoicePdfModel pdfModel = orderService.getInvoicePdfModel(fofoOrder.getId());
24844 amit.gupta 703
 
33213 tejus.loha 704
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
705
        PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
706
        final HttpHeaders headers = new HttpHeaders();
707
        //headers.setContentDispositionFormData("inline", number + ".pdf");
708
        headers.add(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=" + pdfModel.getInvoiceNumber() + ".pdf");
709
        int contentLength = byteArrayOutputStream.toByteArray().length;
710
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
711
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
712
        return ResponseEntity.ok()
713
                .headers(headers)
714
                .contentLength(contentLength)
715
                .contentType(MediaType.parseMediaType("application/pdf"))
716
                .body(inputStreamResource);
717
    }
23973 govind 718
 
33213 tejus.loha 719
    @RequestMapping(value = "/wa-listen", method = RequestMethod.POST)
720
    public ResponseEntity<?> listenWhatsappStatus(@RequestBody String whatsappJsonResponse) {
721
        LOGGER.info("whatsappJsonResponse {}", whatsappJsonResponse);
722
        //jaihind
723
        //  String jsonString = "[{\"srcAddr\":\"TESTSM\",\"channel\":\"WHATSAPP\",\"externalId\":\"4977024756456780043-180044363908187691\",\"cause\":\"SUCCESS\",\"errorCode\":\"000\",\"destAddr\":\"919813272029\",\"eventType\":\"DELIVERED\",\"eventTs\":1692848106000}]";
724
        JSONArray jsonArray = new JSONArray(whatsappJsonResponse);
725
        for (int i = 0; i < jsonArray.length(); i++) {
32711 amit.gupta 726
 
33213 tejus.loha 727
            JSONObject jsonObject = jsonArray.getJSONObject(i);
728
            String externalId = jsonObject.getString("externalId");
729
            String destAddr = jsonObject.getString("destAddr");
730
            String eventType = jsonObject.getString("eventType");
731
            whatsappMessageService.setWhatsappResponse(externalId, destAddr, eventType);
732
        }
733
        //jaihind
734
        return responseSender.ok("Success");
32711 amit.gupta 735
 
33213 tejus.loha 736
    }
32271 amit.gupta 737
 
33213 tejus.loha 738
    @RequestMapping(value = "/generateInvoice")
739
    public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
35066 amit 740
                                             @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, @RequestParam(required = false) PrinterType printerType) throws ProfitMandiBusinessException {
33213 tejus.loha 741
        LOGGER.info("Request received at url {} with params [{}={}] ", request.getRequestURI(),
742
                ProfitMandiConstants.ORDER_ID, orderId);
743
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
744
        InvoicePdfModel pdfModel = null;
35066 amit 745
        int fofoId;
33213 tejus.loha 746
        if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
747
            pdfModel = orderService.getInvoicePdfModel(orderId);
35066 amit 748
            fofoId = pdfModel.getCustomer().getCustomerId();
33213 tejus.loha 749
        } else {
750
            pdfModel = orderService.getInvoicePdfModel(fofoDetails.getFofoId(), orderId);
35066 amit 751
            fofoId = fofoDetails.getFofoId();
33213 tejus.loha 752
        }
35066 amit 753
 
754
        if (printerType == null) {
755
            FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoId);
756
            //printerType = fs.getPrinterType();
757
        }
758
 
759
 
34805 ranu 760
        FofoOrder fofoOrder = fofoOrderRepository.selectByOrderId(orderId);
761
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
762
 
763
        // Step 1: Generate invoice PDF
764
        ByteArrayOutputStream invoiceOutput = new ByteArrayOutputStream();
35066 amit 765
 
766
        PdfUtils.generateAndWrite(Arrays.asList(pdfModel), printerType, invoiceOutput);
34805 ranu 767
        byte[] invoicePdf = invoiceOutput.toByteArray();
768
 
769
        // Step 2: Load all policy certificate PDFs
770
        List<byte[]> pdfFiles = new ArrayList<>();
771
        pdfFiles.add(invoicePdf); // first add invoice
772
 
773
        for (InsurancePolicy insurancePolicy : insurancePolicies) {
35076 ranu 774
            if (insurancePolicy.getProviderId() == 6) {
775
                String policyNumber = insurancePolicy.getPolicyNumber();
776
                String safePolicyNo = policyNumber.replace("/", "-");
777
                String filePath = "/uploads/policy-certificate-" + safePolicyNo + ".pdf";
778
                File file = new File(filePath);
34805 ranu 779
 
35076 ranu 780
                if (file.exists()) {
781
                    try {
782
                        byte[] policyPdf = Files.readAllBytes(file.toPath());
783
                        pdfFiles.add(policyPdf);
784
                    } catch (IOException e) {
785
                        LOGGER.error("Failed to read policy PDF: {}", filePath, e);
786
                    }
787
                } else {
788
                    LOGGER.warn("Policy PDF not found: {}", filePath);
34805 ranu 789
                }
790
            }
35076 ranu 791
 
34805 ranu 792
        }
793
 
794
        // Step 3: Merge all PDFs
795
        byte[] mergedPdf;
796
        try {
797
            mergedPdf = PdfUtils.mergePdfFiles(pdfFiles);
798
        } catch (Exception e) {
799
            LOGGER.error("Error merging PDFs", e);
800
            throw new ProfitMandiBusinessException("Failed to generate merged PDF", "", "");
801
        }
802
 
803
        // Step 4: Return merged PDF as response
804
        HttpHeaders headers = new HttpHeaders();
33213 tejus.loha 805
        headers.setContentType(MediaType.APPLICATION_PDF);
34805 ranu 806
        headers.setContentDispositionFormData("inline", "invoice-with-policies-" + pdfModel.getInvoiceNumber() + ".pdf");
807
        headers.setContentLength(mergedPdf.length);
808
 
809
        InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(mergedPdf));
810
        return new ResponseEntity<>(resource, headers, HttpStatus.OK);
33213 tejus.loha 811
    }
24087 amit.gupta 812
 
33213 tejus.loha 813
    @RequestMapping(value = "/generateInvoices")
814
    public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
815
                                             @RequestParam LocalDateTime startDate, @RequestParam LocalDateTime endDate, @RequestParam int partnerId)
816
            throws ProfitMandiBusinessException {
817
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
818
        List<InvoicePdfModel> pdfModels = new ArrayList<>();
819
        if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
820
            List<Integer> orderIds = fofoOrderRepository.selectByFofoId(partnerId, startDate, endDate, 0, 0).stream()
821
                    .map(x -> x.getId()).collect(Collectors.toList());
822
            for (int orderId : orderIds) {
823
                pdfModels.add(orderService.getInvoicePdfModel(orderId));
824
            }
825
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
826
            PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
827
            LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
828
            final HttpHeaders headers = new HttpHeaders();
829
            headers.setContentType(MediaType.APPLICATION_PDF);
830
            headers.set("Content-disposition", "inline; filename=invoice-" + partnerId + ".pdf");
831
            headers.setContentLength(byteArrayOutputStream.toByteArray().length);
832
            final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
833
            final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
834
            return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
835
        } else {
836
            throw new ProfitMandiBusinessException("Auth", fofoDetails.getEmailId(), "Unauthorised access");
837
        }
838
    }
23973 govind 839
 
33213 tejus.loha 840
    @RequestMapping(value = "/saleHistory")
841
    public String saleHistory(HttpServletRequest request,
842
                              @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
843
                              @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
844
                              @RequestParam(required = false) LocalDateTime startTime,
845
                              @RequestParam(required = false) LocalDateTime endTime,
846
                              @RequestParam(name = "offset", defaultValue = "0") int offset,
847
                              @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
848
            throws ProfitMandiBusinessException {
849
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
32405 jai.hind 850
 
33213 tejus.loha 851
        Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
852
                startTime, endTime, offset, limit);
853
        model.addAllAttributes(map);
854
        return "sale-history";
855
    }
32405 jai.hind 856
 
33213 tejus.loha 857
    @RequestMapping(value = "/downloadInvoices")
858
    public ResponseEntity<?> downloadInvoices(HttpServletRequest request,
859
                                              @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
860
                                              @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
861
                                              @RequestParam(required = false) LocalDateTime startTime,
862
                                              @RequestParam(required = false) LocalDateTime endTime,
863
                                              @RequestParam(name = "offset", defaultValue = "0") int offset,
864
                                              @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
865
            throws ProfitMandiBusinessException {
866
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
32409 amit.gupta 867
 
33213 tejus.loha 868
        Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
869
                startTime, endTime, offset, 100);
870
        List<FofoOrder> fofoOrders = (List<FofoOrder>) map.get("saleHistories");
23973 govind 871
 
33213 tejus.loha 872
        if (fofoOrders.size() == 0) {
873
            throw new ProfitMandiBusinessException("Search criteria", "", "No orders found for criteria");
874
        }
23654 amit.gupta 875
 
33213 tejus.loha 876
        final HttpHeaders headers = new HttpHeaders();
877
        headers.setContentType(MediaType.APPLICATION_PDF);
878
        headers.set("Content-disposition", "inline; filename=invoices.pdf");
879
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
880
        List<InvoicePdfModel> pdfModels = new ArrayList<>();
881
        for (FofoOrder fofoOrder : fofoOrders) {
882
            try {
883
                pdfModels.add(orderService.getInvoicePdfModel(fofoOrder.getId()));
884
            } catch (Exception e) {
885
                LOGGER.info("could not create invoice for {}, invoice number {}", fofoOrder.getId(),
886
                        fofoOrder.getInvoiceNumber());
887
            }
888
        }
889
        PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
890
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
891
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
892
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
893
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
894
    }
23654 amit.gupta 895
 
33213 tejus.loha 896
    @RequestMapping(value = "/credit-note/{creditNoteId}")
897
    public ResponseEntity<?> downloadCreditNote(HttpServletRequest request, @PathVariable int creditNoteId)
898
            throws ProfitMandiBusinessException {
899
        CreditNotePdfModel creditNotePdfModel = orderService.getCreditNotePdfModel(creditNoteId);
900
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
901
        PdfUtils.generateAndWriteCustomerCreditNotes(Arrays.asList(creditNotePdfModel), byteArrayOutputStream);
902
        LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
903
        final HttpHeaders headers = new HttpHeaders();
904
        headers.setContentType(MediaType.APPLICATION_PDF);
905
        headers.set("Content-disposition",
906
                "inline; filename=invoice-" + creditNotePdfModel.getCreditNoteNumber() + ".pdf");
907
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
908
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
909
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
910
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
911
    }
23973 govind 912
 
33213 tejus.loha 913
    @RequestMapping(value = "/getPaginatedSaleHistory")
914
    public String getSaleHistoryPaginated(HttpServletRequest request,
915
                                          @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
916
                                          @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
917
                                          @RequestParam(required = false) LocalDateTime startTime,
918
                                          @RequestParam(required = false) LocalDateTime endTime,
919
                                          @RequestParam(name = "offset", defaultValue = "0") int offset,
920
                                          @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
921
            throws ProfitMandiBusinessException {
922
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
923
        Map<String, Object> map = orderService.getSaleHistoryPaginated(loginDetails.getFofoId(), searchType,
924
                searchValue, startTime, endTime, offset, limit);
925
        model.addAllAttributes(map);
926
        return "sale-history-paginated";
927
    }
23973 govind 928
 
33213 tejus.loha 929
    @PutMapping(value = "/updatePaymentTransaction")
930
    public String updateTransactionDetails(HttpServletRequest request, @RequestParam String referenceType,
931
                                           @RequestParam int fofoId, @RequestParam int referenceId,
932
                                           @RequestBody PartnerOptionsAndItemAmountModel partnerOptionsAndItemAmountModel,
933
                                           @RequestParam float totalAmount, Model model) throws Exception {
29707 tejbeer 934
 
33213 tejus.loha 935
        List<PaymentOptionTransactionModel> paymentOptionTransactionModels = partnerOptionsAndItemAmountModel
936
                .getPaymentOptionTransactionModel();
937
        LOGGER.info(paymentOptionTransactionModels);
938
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoId, referenceId);
939
        LOGGER.info("sdssd" + fofoOrder);
940
        fofoOrder.setTotalAmount(totalAmount);
941
        List<FofoItemIdAmountModel> fofoItemIdAmountModel = partnerOptionsAndItemAmountModel.getItemAmountModel();
942
        for (FofoItemIdAmountModel fim : fofoItemIdAmountModel) {
943
            LOGGER.info("fim" + fim.getFofoItemId());
23973 govind 944
 
33213 tejus.loha 945
            LOGGER.info("fimAmount" + fim.getAmount());
946
            Item item = itemRepository.selectById(fim.getItemId());
947
            TagListing tagListing = tagListingRepository.selectByItemId(item.getId());
948
            FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectById(fim.getFofoItemId());
949
            LOGGER.info("category" + item.getCategoryId());
950
            if (item.getCategoryId() == ProfitMandiConstants.MOBILE_CATEGORY_ID) {
951
                if (fofoOrderItem.getMop() <= fim.getAmount()) {
23973 govind 952
 
33213 tejus.loha 953
                    if (fim.getAmount() <= tagListing.getMrp()) {
954
                        fofoOrderItem.setSellingPrice(fim.getAmount());
955
                    } else {
956
                        throw new ProfitMandiBusinessException("Amount", fim.getAmount(),
957
                                "Sum of amount is not less than  to MRP");
958
                    }
23973 govind 959
 
33213 tejus.loha 960
                    LOGGER.info("fofoOrderItem2" + fofoOrderItem);
23973 govind 961
 
33213 tejus.loha 962
                } else {
963
                    // TODO below mop condition need to added added
964
                    fofoOrderItem.setSellingPrice(fim.getAmount());
965
                }
23973 govind 966
 
33213 tejus.loha 967
            } else {
968
                fofoOrderItem.setSellingPrice(fim.getAmount());
969
                LOGGER.info("fofoOrderItem1" + fofoOrderItem);
27819 tejbeer 970
 
33213 tejus.loha 971
            }
972
            LOGGER.info("fofoOrderItem" + fofoOrderItem);
23973 govind 973
 
33213 tejus.loha 974
        }
23973 govind 975
 
33213 tejus.loha 976
        /*
977
         * for (PaymentOptionTransactionModel paymentOptionTransactionModel :
978
         * paymentOptionTransactionModels) { amount = amount +
979
         * paymentOptionTransactionModel.getAmount(); } LOGGER.info("FofoOrder amount" +
980
         * fofoOrder.getUnitPrice() + "amount" + amount); if (amount ==
981
         * fofoOrder.getUnitPrice()) {
982
         */
983
        if (paymentOptionTransactionModels.size() > 0) {
984
            List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
985
                    .selectByReferenceIdAndType(referenceId, PaymentOptionReferenceType.ORDER);
986
            Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
987
                    .paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
988
            LOGGER.info(
989
                    "paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
990
            for (PaymentOptionTransactionModel paymentOptionTransactionModel : paymentOptionTransactionModels) {
991
                if (paymentOptionIdPaymentOptionTransactionMap
992
                        .containsKey(paymentOptionTransactionModel.getPaymentOptionId())) {
23973 govind 993
 
33213 tejus.loha 994
                    PaymentOptionTransaction paymentOptionTransaction = paymentOptionIdPaymentOptionTransactionMap
995
                            .get(paymentOptionTransactionModel.getPaymentOptionId());
31739 amit.gupta 996
 
33213 tejus.loha 997
                    if (paymentOptionTransactionModel.getAmount() == 0) {
998
                        paymentOptionTransactionRepository.delete(paymentOptionTransaction);
999
                        LOGGER.info("deleted successfully");
1000
                    } else {
24844 amit.gupta 1001
 
33213 tejus.loha 1002
                        paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
1003
                        paymentOptionTransactionRepository.persist(paymentOptionTransaction);
1004
                        LOGGER.info("updated successfully");
24281 amit.gupta 1005
 
33213 tejus.loha 1006
                    }
1007
                } else {
1008
                    if (paymentOptionTransactionModel.getAmount() > 0) {
1009
                        PaymentOptionTransaction paymentOptionTransaction = new PaymentOptionTransaction();
1010
                        paymentOptionTransaction.setReferenceId(referenceId);
1011
                        paymentOptionTransaction.setReferenceType(PaymentOptionReferenceType.ORDER);
1012
                        paymentOptionTransaction.setPaymentOptionId(paymentOptionTransactionModel.getPaymentOptionId());
1013
                        paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
1014
                        paymentOptionTransaction.setFofoId(fofoId);
1015
                        paymentOptionTransaction.setCreateTimestamp(fofoOrder.getCreateTimestamp());
1016
                        paymentOptionTransactionRepository.persist(paymentOptionTransaction);
1017
                        LOGGER.info("inserted successfully");
1018
                    }
1019
                }
24281 amit.gupta 1020
 
33213 tejus.loha 1021
            }
24281 amit.gupta 1022
 
33213 tejus.loha 1023
            model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1024
        }
1025
        /*
1026
         * else
1027
         *
1028
         * { throw new ProfitMandiBusinessException("Amount", amount,
1029
         * "Sum of amount is not equal to total amount"); }
1030
         */
23973 govind 1031
 
33213 tejus.loha 1032
        return "response";
23973 govind 1033
 
33213 tejus.loha 1034
    }
24105 govind 1035
 
33437 ranu 1036
    @RequestMapping(value = "/order")
1037
    public String orderIndex(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
33213 tejus.loha 1038
            throws ProfitMandiBusinessException {
33437 ranu 1039
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1040
 
1041
        int addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(loginDetails.getFofoId());
1042
        Address address = addressRepository.selectById(addressId);
1043
 
1044
        List<CartFofo> cartItems = orderService.cartCheckout(cartData);
1045
        Set<Integer> itemIds = new HashSet<>();
1046
        List<Integer> poIds = new ArrayList<>();
1047
        List<Integer> poItemIds = new ArrayList<>();
1048
        for (CartFofo cartFofo : cartItems) {
1049
            itemIds.add(cartFofo.getItemId());
1050
            if (cartFofo.getPoId() != 0) {
1051
                poIds.add(cartFofo.getPoId());
1052
                poItemIds.add(cartFofo.getPoItemId());
1053
            }
1054
        }
1055
 
1056
        PendingOrder po = null;
1057
        Customer customer = null;
1058
        PendingOrderItem poi = null;
1059
        Map<Integer, PriceModel> mopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIds,
1060
                loginDetails.getFofoId());
1061
        List<Integer> paymentOptionIds = fofoPartnerPaymentOptionRepository
1062
                .selectPaymentOptionIdsByFofoId(loginDetails.getFofoId());
1063
 
1064
        if (!poIds.isEmpty()) {
1065
            po = pendingOrderRepository.selectById(poIds.get(0));
1066
            customer = customerRepository.selectById(po.getCustomerId());
1067
            if (!offlineOrders.contains(po.getPayMethod())) {
1068
                paymentOptionIds.add(23);
1069
            }
1070
        }
1071
 
1072
        if (!poItemIds.isEmpty()) {
1073
            poi = pendingOrderItemRepository.selectById(poItemIds.get(0));
1074
        }
1075
 
1076
        // List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(new
1077
        // HashSet<>(paymentOptionIds));
1078
 
1079
        List<PaymentOption> paymentOptions = paymentOptionRepository.selectActiveOption();
1080
 
1081
        LOGGER.info("pendingOrder" + po);
1082
        LOGGER.info("pendingOrderItem" + poi);
1083
 
1084
        int onlineSellingPrice = 0;
1085
        Map<Integer, PendingOrderItem> itemIdAndPoiMap = new HashMap<>();
1086
 
1087
        if (po != null) {
1088
            List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(po.getId());
1089
            if (!(po.getPayMethod().equals("EMIOD") || po.getPayMethod().equals("POD"))) {
1090
                for (CartFofo cartItem : cartItems) {
1091
                    PendingOrderItem pendingOItem = pendingOrderItemRepository.selectById(cartItem.getPoItemId());
1092
                    PendingOrderPlan pendingOrderPlan = pendingOrderPlanRepository.selectByPoid(cartItem.getPoItemId());
1093
                    if (pendingOrderPlan != null) {
1094
                        onlineSellingPrice += pendingOItem.getSellingPrice() * pendingOItem.getQuantity() + pendingOrderPlan.getPremiumPrice() * pendingOItem.getQuantity();
1095
                    } else {
1096
                        onlineSellingPrice += pendingOItem.getSellingPrice() * pendingOItem.getQuantity();
1097
                    }
1098
                }
1099
            }
1100
 
1101
            itemIdAndPoiMap = pendingOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> pendingOrderItemRepository.selectById(x.getId())));
1102
        }
1103
 
33795 ranu 1104
 
1105
//        get the list of customer item for every item code start here
1106
//        ...............................................................
1107
 
1108
        LocalDateTime todayDate = LocalDateTime.now();
1109
        LocalDate todayDate2 = LocalDate.now();
1110
 
1111
        Map<Integer, List<CustomerOfferItem>> offerItemMap = new HashMap<>();
1112
        Map<Integer, List<WebOffer>> webOfferMap = new HashMap<>();
1113
 
1114
        List<CustomerOffer> customerOffers = customerOfferRepository.selectOffersByDate(todayDate);
1115
        List<Integer> customerOfferIds = customerOffers.stream().map(x -> x.getId()).distinct().collect(Collectors.toList());
34788 ranu 1116
        /*for (CartFofo cartItem : cartItems) {
33795 ranu 1117
            Item item = itemRepository.selectById(cartItem.getItemId());
33907 amit.gupta 1118
            if (customerOfferIds.size() > 0) {
33795 ranu 1119
 
33907 amit.gupta 1120
                List<CustomerOfferItem> customerOfferItems = customerOfferItemRepository.selectByOfferIds(customerOfferIds, item.getCatalogItemId(), todayDate2);
33795 ranu 1121
 
33907 amit.gupta 1122
                List<CustomerOfferItem> filteredCustomerOfferItems = customerOfferItems.stream()
1123
                        .filter(x -> x.getEndDate() != null && !x.getEndDate().isBefore(todayDate2))
1124
                        .collect(Collectors.toList());
33795 ranu 1125
 
33907 amit.gupta 1126
                offerItemMap.put(item.getId(), filteredCustomerOfferItems);
1127
            }
33818 ranu 1128
 
33907 amit.gupta 1129
 
33795 ranu 1130
            List<WebOffer> webOffers = webOfferRepository.selectAllActiveOffers().get(item.getCatalogItemId());
1131
            webOfferMap.put(item.getId(), webOffers);
34788 ranu 1132
        }*/
1133
 
1134
 
1135
        Map<Integer, ItemWiseCustomerOfferSummaryModel> offerItemSummaryMap = new HashMap<>();
1136
 
1137
        for (CartFofo cartItem : cartItems) {
1138
            Item item = itemRepository.selectById(cartItem.getItemId());
34838 amit 1139
            List<CustomerOfferItem> customerOfferItems = null;
1140
            if (customerOfferIds.size() > 0) {
1141
                customerOfferItems = customerOfferItemRepository
1142
                        .selectByOfferIds(customerOfferIds, item.getCatalogItemId(), todayDate2)
1143
                        .stream()
1144
                        .filter(x -> x.getEndDate() != null && !x.getEndDate().isBefore(todayDate2))
1145
                        .collect(Collectors.toList());
1146
            }
34788 ranu 1147
 
1148
 
1149
            ItemWiseCustomerOfferSummaryModel summary = new ItemWiseCustomerOfferSummaryModel();
1150
            summary.setItemId(item.getId());
1151
            summary.setCatalogId(item.getCatalogItemId());
1152
 
34838 amit 1153
            if (customerOfferItems != null) {
1154
                for (CustomerOfferItem coi : customerOfferItems) {
1155
                    String key = coi.getOfferType().name() + "-" + coi.getCustomerOfferId();
34788 ranu 1156
 
34838 amit 1157
                    ItemWiseCustomerOfferSummaryModel.OfferTypeSummary typeSummary =
1158
                            summary.getOfferTypeMap().computeIfAbsent(key, k -> {
1159
                                ItemWiseCustomerOfferSummaryModel.OfferTypeSummary ts = new ItemWiseCustomerOfferSummaryModel.OfferTypeSummary();
1160
                                ts.setOfferType(coi.getOfferType());
1161
                                ts.setCustomerOfferId(coi.getCustomerOfferId());
1162
                                return ts;
1163
                            });
34788 ranu 1164
 
34838 amit 1165
                    typeSummary.setTotalSchemePayout(typeSummary.getTotalSchemePayout() + coi.getSchemePayout());
1166
                    typeSummary.setTotalDealerPayout(typeSummary.getTotalDealerPayout() + coi.getDealerPayout());
1167
                    typeSummary.getDescriptions().add(coi.getAdditionalInfo());
1168
                    typeSummary.getOfferItemIds().add(coi.getId());
1169
                }
34788 ranu 1170
            }
1171
 
1172
            offerItemSummaryMap.put(item.getId(), summary);
33795 ranu 1173
        }
1174
 
34788 ranu 1175
 
33795 ranu 1176
//        get the list of customer item for every item code end here
1177
//        ...............................................................
1178
 
33437 ranu 1179
        LOGGER.info("itemIdAndPoiMap {}", itemIdAndPoiMap);
1180
        LOGGER.info("mopPriceMap {}", mopPriceMap);
1181
        model.addAttribute("stateNames",
1182
                stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
1183
        model.addAttribute("retailerStateName", address.getState());
1184
        model.addAttribute("pendingPOCustomer", gson.toJson(customer));
1185
        model.addAttribute("pendingPO", gson.toJson(po));
1186
 
1187
        model.addAttribute("cartItems", cartItems);
1188
        model.addAttribute("pendingOrder", po);
1189
        model.addAttribute("pendingOrderItem", poi);
1190
        model.addAttribute("itemIdAndPoiMap", itemIdAndPoiMap);
1191
        model.addAttribute("onlineSellingPrice", onlineSellingPrice);
1192
 
1193
        model.addAttribute("mopPriceMap", mopPriceMap);
1194
        model.addAttribute("paymentOptions", paymentOptions);
1195
        model.addAttribute("accessoriesDeals", accessoriesDeals);
33795 ranu 1196
        model.addAttribute("webOfferMap", webOfferMap);
34788 ranu 1197
        model.addAttribute("offerItemSummaryMap", offerItemSummaryMap);
33437 ranu 1198
        return "order-index";
1199
    }
1200
 
1201
    private Map<String, List<MobileInsurancePlan>> getPlans(float sellingPrice, int itemId, int poiId)
1202
            throws ProfitMandiBusinessException {
33213 tejus.loha 1203
        try {
33437 ranu 1204
            Map<String, List<MobileInsurancePlan>> productDurationPlans = new HashMap<>();
1205
            PendingOrderPlan pendingOrderPlan = null;
1206
            if (poiId > 0) {
1207
                pendingOrderPlan = pendingOrderPlanRepository.selectByPoid(poiId);
1208
            }
1209
            if (pendingOrderPlan != null) {
33715 ranu 1210
                MobileInsurancePlan productDurationPlan = insuranceService.getPlanById(String.valueOf(pendingOrderPlan.getPlanId()), sellingPrice);
33437 ranu 1211
                productDurationPlans.put(pendingOrderPlan.getPlanName(), Collections.singletonList(productDurationPlan));
1212
 
1213
            } else {
1214
                productDurationPlans = insuranceService.getAllPlans(itemId,
1215
                        sellingPrice, false);
1216
            }
1217
 
33213 tejus.loha 1218
            return productDurationPlans;
1219
        } catch (Exception e) {
1220
            LOGGER.info(e, e);
1221
            throw new ProfitMandiBusinessException("Fetch Insurance Plans", "Insurance",
1222
                    "Could not fetch insurance Plans");
1223
        }
24105 govind 1224
 
33213 tejus.loha 1225
    }
23973 govind 1226
 
33795 ranu 1227
 
1228
    @GetMapping("/getItemWiseUpgradeOffer")
1229
    public String getItemWiseUpgradeOffer(HttpServletRequest request, @RequestParam int itemId, Model model)
1230
            throws ProfitMandiBusinessException {
1231
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1232
 
1233
        Item item = itemRepository.selectById(itemId);
1234
 
1235
        LocalDateTime todayDate = LocalDateTime.now();
1236
        LocalDate todayDate2 = LocalDate.now();
1237
 
1238
        List<CustomerOffer> customerOffers = customerOfferRepository.selectOffersByDate(todayDate);
1239
        Map<Integer, CustomerOffer> customerOfferMap = customerOffers.stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
1240
        List<Integer> customerOfferIds = customerOffers.stream().map(x -> x.getId()).distinct().collect(Collectors.toList());
1241
        List<CustomerOfferItem> customerOfferItems = customerOfferItemRepository.selectByOfferIds(customerOfferIds, item.getCatalogItemId(), todayDate2);
1242
 
33818 ranu 1243
        List<CustomerOfferItem> filteredCustomerOfferItems = customerOfferItems.stream()
33822 ranu 1244
                .filter(x -> x.getEndDate() != null && !x.getEndDate().isBefore(todayDate2))
33818 ranu 1245
                .collect(Collectors.toList());
1246
 
33795 ranu 1247
        List<WebOffer> webOffers = webOfferRepository.selectAllActiveOffers().get(item.getCatalogItemId());
1248
 
1249
        model.addAttribute("webOffers", webOffers);
1250
        model.addAttribute("customerOfferMap", customerOfferMap);
33818 ranu 1251
        model.addAttribute("customerOfferItems", filteredCustomerOfferItems);
33795 ranu 1252
 
1253
        return "upgrade-customer-offer-model";
1254
    }
1255
 
33213 tejus.loha 1256
    @GetMapping("/insuranceDetails")
1257
    public String getInsuranceDetails(HttpServletRequest request,
1258
                                      @RequestParam(name = "offset", defaultValue = "0") int offset,
1259
                                      @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
1260
            throws ProfitMandiBusinessException {
1261
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1262
        long size = 0;
1263
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
1264
                offset, limit);
1265
        size = insurancePolicyRepository.selectCountByRetailerId(loginDetails.getFofoId());
1266
        Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
1267
                .selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
1268
                .stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
1269
        if (size < limit) {
1270
            model.addAttribute("end", offset + size);
1271
        } else {
1272
            model.addAttribute("end", offset + limit);
1273
        }
1274
        model.addAttribute("start", offset + 1);
1275
        model.addAttribute("size", size);
1276
        model.addAttribute("insurancePolicies", insurancePolicies);
1277
        model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
1278
        return "insurance-details";
1279
    }
28339 tejbeer 1280
 
33213 tejus.loha 1281
    @GetMapping("/insuranceDetailsPaginated")
1282
    public String getInsuranceDetailsPaginated(HttpServletRequest request,
1283
                                               @RequestParam(name = "offset", defaultValue = "0") int offset,
1284
                                               @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
1285
            throws ProfitMandiBusinessException {
1286
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1287
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
1288
                offset, limit);
1289
        Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
1290
                .selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
1291
                .stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
1292
        model.addAttribute("insurancePolicies", insurancePolicies);
1293
        model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
1294
        return "insurance-details-paginated";
1295
    }
23973 govind 1296
 
33213 tejus.loha 1297
    @GetMapping("/getMouForm")
1298
    public String getMouForm(HttpServletRequest request, Model model) throws Exception {
1299
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
21985 kshitij.so 1300
 
33213 tejus.loha 1301
        Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
1302
        if (mou != null) {
1303
            if (mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
1304
                model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1305
            } else {
1306
                model.addAttribute("response1", mvcResponseSender.createResponseString(false));
1307
            }
32238 amit.gupta 1308
 
33213 tejus.loha 1309
        } else {
1310
            model.addAttribute("response1", mvcResponseSender.createResponseString(false));
32238 amit.gupta 1311
 
33213 tejus.loha 1312
        }
1313
        return "response";
32238 amit.gupta 1314
 
33213 tejus.loha 1315
    }
23973 govind 1316
 
33213 tejus.loha 1317
    @GetMapping("/pendingOrders")
1318
    public String getPendingOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1319
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1320
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1321
        Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
1322
        if (mou == null) {
1323
            mou = new Mou();
1324
            mou.setFofoId(loginDetails.getFofoId());
1325
            mou.setCreateTimestamp(LocalDateTime.now());
1326
            mou.setUpdateTimestamp(LocalDateTime.now());
1327
            mouRepository.persist(mou);
1328
        } else if (!mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
1329
            mou.setUpdateTimestamp(LocalDateTime.now());
1330
        }
24844 amit.gupta 1331
 
33213 tejus.loha 1332
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.PROCESSING,
1333
                loginDetails.getFofoId());
23973 govind 1334
 
34387 vikas.jang 1335
        Map<String, List<PendingOrderPlan>> pendingOrderPlansMap = pendingOrderPlanRepository.selectAll().stream()
1336
                .collect(Collectors.groupingBy(PendingOrderPlan::getPlanId));
33213 tejus.loha 1337
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, loginDetails.getFofoId());
1338
        model.addAttribute("inventoryMap", map.get("inventoryMap"));
33437 ranu 1339
        model.addAttribute("pendingOrderPlansMap", pendingOrderPlansMap);
33213 tejus.loha 1340
        model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
23973 govind 1341
 
33213 tejus.loha 1342
        model.addAttribute("isAdmin", isAdmin);
1343
        return "pending_fofo_order";
25092 amit.gupta 1344
 
33213 tejus.loha 1345
    }
25092 amit.gupta 1346
 
33400 ranu 1347
    @RequestMapping(value = "/create-order", method = RequestMethod.POST)
1348
    public String createOrder(HttpServletRequest request, @RequestBody CreateOrderRequest createOrderRequest,
34194 ranu 1349
                              Model model) throws Exception {
33400 ranu 1350
        // throw new ProfitMandiBusinessException("Billing is on hold temporarily",
1351
        // "Billing is on hold temporarily", "Billing is on hold temporarily");
1352
        LOGGER.info("request at uri {}", request.getRequestURI());
1353
        LOGGER.info("request body {}", createOrderRequest);
1354
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1355
        int fofoOrderId = orderService.createOrder(createOrderRequest, fofoDetails.getFofoId(), accessoriesDeals);
35066 amit 1356
        /*try {
35064 aman 1357
            Set<Integer> fofoOrderItemIds = createOrderRequest.getFofoOrderItems()
1358
                    .stream().map(CustomFofoOrderItem::getItemId).collect(Collectors.toSet());
1359
            scratchService.processScratchOffer(fofoOrderId, createOrderRequest.getPaymentOptions(), fofoOrderItemIds);
1360
        } catch (Exception e) {
1361
            LOGGER.info("Exception during processScratchOffer - " + e.getMessage());
35066 amit 1362
        }*/
34479 tejus.loha 1363
 
34179 tejus.loha 1364
        LOGGER.info("Order has been created successfully...");
33400 ranu 1365
        return "redirect:/get-order/?orderId=" + fofoOrderId;
1366
    }
1367
 
33213 tejus.loha 1368
    @GetMapping("/billedOrders")
1369
    public String getBilledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1370
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1371
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
25092 amit.gupta 1372
 
33400 ranu 1373
        List<PendingOrderItem> pendingOrderItems;
23973 govind 1374
 
33213 tejus.loha 1375
        if (isAdmin) {
27861 tejbeer 1376
 
33400 ranu 1377
            pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.BILLED);
27861 tejbeer 1378
 
33213 tejus.loha 1379
        } else {
33400 ranu 1380
            pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.BILLED,
33213 tejus.loha 1381
                    loginDetails.getFofoId());
33400 ranu 1382
 
1383
 
33213 tejus.loha 1384
        }
27861 tejbeer 1385
 
33400 ranu 1386
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, loginDetails.getFofoId());
1387
        model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
27861 tejbeer 1388
 
33213 tejus.loha 1389
        model.addAttribute("isAdmin", isAdmin);
1390
        return "billed_order_item";
1391
    }
27861 tejbeer 1392
 
33213 tejus.loha 1393
    @GetMapping("/settledOrders")
1394
    public String getSettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1395
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1396
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
27861 tejbeer 1397
 
33213 tejus.loha 1398
        List<PendingOrderItem> pendingOrderItem = null;
27861 tejbeer 1399
 
33213 tejus.loha 1400
        if (isAdmin) {
24105 govind 1401
 
33213 tejus.loha 1402
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.SETTLED);
24105 govind 1403
 
33213 tejus.loha 1404
        } else {
1405
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.SETTLED,
1406
                    loginDetails.getFofoId());
1407
        }
24105 govind 1408
 
33213 tejus.loha 1409
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
24105 govind 1410
 
33400 ranu 1411
        model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
33213 tejus.loha 1412
        model.addAttribute("isAdmin", isAdmin);
1413
        return "settled_order_item";
1414
    }
27861 tejbeer 1415
 
33213 tejus.loha 1416
    @GetMapping("/unsettledOrders")
1417
    public String getunsettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1418
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1419
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
24105 govind 1420
 
33213 tejus.loha 1421
        List<PendingOrderItem> pendingOrderItem = null;
27861 tejbeer 1422
 
33213 tejus.loha 1423
        if (isAdmin) {
24105 govind 1424
 
33213 tejus.loha 1425
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.UNSETTLED);
27861 tejbeer 1426
 
33213 tejus.loha 1427
        } else {
1428
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.UNSETTLED,
1429
                    loginDetails.getFofoId());
1430
        }
24440 amit.gupta 1431
 
33213 tejus.loha 1432
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
25726 amit.gupta 1433
 
33400 ranu 1434
        model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
33213 tejus.loha 1435
        model.addAttribute("isAdmin", isAdmin);
1436
        return "unsettled_order_item";
1437
    }
24880 govind 1438
 
33213 tejus.loha 1439
    @GetMapping("/getPendingOrderItem")
1440
    public String getPendingOrderItem(HttpServletRequest request, @RequestParam int orderId, Model model)
1441
            throws ProfitMandiBusinessException {
1442
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1443
        Map<Integer, Item> itemMap = new HashMap<>();
1444
        Map<Integer, CurrentInventorySnapshot> inventoryMap = new HashMap<>();
1445
        PendingOrder pendingPO = pendingOrderRepository.selectById(orderId);
1446
        Customer customer = customerRepository.selectById(pendingPO.getCustomerId());
1447
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(orderId);
1448
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
1449
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1450
            CurrentInventorySnapshot cis = currentInventorySnapshotRepository
1451
                    .selectByItemAndFofoId(pendingOrderItem.getItemId(), pendingPO.getFofoId());
1452
            itemMap.put(pendingOrderItem.getItemId(), item);
1453
            LOGGER.info("cis" + cis);
1454
            inventoryMap.put(pendingOrderItem.getItemId(), cis);
1455
        }
28339 tejbeer 1456
 
33213 tejus.loha 1457
        LOGGER.info("inventoryMap" + inventoryMap);
1458
        model.addAttribute("pendingOrderItems", pendingOrderItems);
1459
        model.addAttribute("itemMap", itemMap);
1460
        model.addAttribute("inventoryMap", inventoryMap);
1461
        model.addAttribute("pendingPO", gson.toJson(pendingPO));
1462
        model.addAttribute("pendingPOCustomer", gson.toJson(customer));
1463
        model.addAttribute("isAdmin", roleManager.isAdmin(loginDetails.getRoleIds()));
1464
        return "pending-order-item";
1465
    }
28339 tejbeer 1466
 
33213 tejus.loha 1467
    @RequestMapping(value = "/getPendingOrderItemById", method = RequestMethod.GET)
1468
    public String getPendingOrderItemById(HttpServletRequest request, @RequestParam int id, Model model)
1469
            throws Exception {
27046 tejbeer 1470
 
33213 tejus.loha 1471
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1472
        model.addAttribute("pendingOrderItem", pendingOrderItem);
1473
        return "cancel-pending-order";
1474
    }
27046 tejbeer 1475
 
33213 tejus.loha 1476
    @RequestMapping(value = "/getPendingOrderChangePartnerById", method = RequestMethod.GET)
33367 ranu 1477
    public String getPendingOrderChangePartnerById(HttpServletRequest request, @RequestParam int id, @RequestParam String pinCode, Model model)
33213 tejus.loha 1478
            throws Exception {
28350 tejbeer 1479
 
33213 tejus.loha 1480
        PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
33374 ranu 1481
        Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(true);
33213 tejus.loha 1482
        model.addAttribute("customRetailersMap", customRetailersMap);
1483
        model.addAttribute("pendingOrder", pendingOrder);
1484
        return "change-partner-po";
1485
    }
28358 tejbeer 1486
 
33213 tejus.loha 1487
    @RequestMapping(value = "/changePendingOrderPartner", method = RequestMethod.POST)
1488
    public String changePendingOrderPartner(HttpServletRequest request, @RequestParam int id, @RequestParam int fofoId,
1489
                                            Model model) throws Exception {
28350 tejbeer 1490
 
33213 tejus.loha 1491
        PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
1492
        pendingOrder.setFofoId(fofoId);
1493
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28339 tejbeer 1494
 
33213 tejus.loha 1495
        return "response";
1496
    }
28339 tejbeer 1497
 
33213 tejus.loha 1498
    @RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
1499
    public String cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id, @RequestParam String reason,
1500
                                         Model model) throws Exception {
28339 tejbeer 1501
 
33213 tejus.loha 1502
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1503
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
28339 tejbeer 1504
 
33213 tejus.loha 1505
        pendingOrderItem.setStatus(OrderStatus.CANCELLED);
1506
        pendingOrderItem.setStatusDescription(loginDetails.getEmailId());
1507
        pendingOrderItem.setRemark(reason);
1508
        pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
1509
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
27046 tejbeer 1510
 
33213 tejus.loha 1511
        List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
1512
                .map(x -> x.getStatus()).collect(Collectors.toList());
28339 tejbeer 1513
 
33213 tejus.loha 1514
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
26647 tejbeer 1515
 
33213 tejus.loha 1516
        List<Integer> catalogIds = new ArrayList<>();
28339 tejbeer 1517
 
33213 tejus.loha 1518
        Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1519
        pendingOrderItem.setItemName(item.getItemDescription());
1520
        catalogIds.add(item.getCatalogItemId());
28339 tejbeer 1521
 
33213 tejus.loha 1522
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1523
        JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1524
        pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1525
        pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1526
        CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
28339 tejbeer 1527
 
33213 tejus.loha 1528
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
28339 tejbeer 1529
 
33213 tejus.loha 1530
        Map<String, Object> emailModel = new HashMap<>();
1531
        emailModel.put("customer", customerAddress);
1532
        emailModel.put("pendingOrder", pendingOrder);
1533
        emailModel.put("date", dateTimeFormatter);
1534
        LOGGER.info("emal" + customer.getEmailId());
1535
        String[] customerEmail = null;
1536
        if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
1537
            customerEmail = new String[]{customer.getEmailId()};
28339 tejbeer 1538
 
34211 vikas.jang 1539
            List<String> bccTo = Arrays.asList("vikas.jangra@smartdukaan.com");
28339 tejbeer 1540
 
33213 tejus.loha 1541
            emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel,
1542
                    customerEmail, null, bccTo.toArray(new String[0]));
28339 tejbeer 1543
 
33213 tejus.loha 1544
        }
28339 tejbeer 1545
 
33213 tejus.loha 1546
        if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1547
                && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1548
                && !status.contains(OrderStatus.CLAIMED)) {
1549
            pendingOrder.setStatus(OrderStatus.CLOSED);
1550
        }
1551
        pendingOrderItemRepository.persist(pendingOrderItem);
28339 tejbeer 1552
 
33213 tejus.loha 1553
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28339 tejbeer 1554
 
33213 tejus.loha 1555
        return "response";
1556
    }
28339 tejbeer 1557
 
33400 ranu 1558
    @GetMapping("/claimedOrders")
1559
    public String getclaimedOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
33213 tejus.loha 1560
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
33400 ranu 1561
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1562
        List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1563
                .collect(Collectors.toList());
28339 tejbeer 1564
 
33400 ranu 1565
        List<PendingOrderItem> pendingOrderItem = null;
28339 tejbeer 1566
 
33400 ranu 1567
        if (isAdmin) {
28339 tejbeer 1568
 
33400 ranu 1569
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.CLAIMED);
1570
            Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
28339 tejbeer 1571
 
33400 ranu 1572
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1573
                    .filter(x -> x != null).collect(Collectors.toList()).stream()
1574
                    .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1575
            model.addAttribute("customRetailersMap", customRetailersMap);
28339 tejbeer 1576
 
33400 ranu 1577
        } else {
1578
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.CLAIMED,
1579
                    loginDetails.getFofoId());
1580
        }
30426 tejbeer 1581
 
33400 ranu 1582
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
28339 tejbeer 1583
 
33400 ranu 1584
        model.addAttribute("pendingOrderItems", map.get("pendingOrderItems"));
1585
        model.addAttribute("isAdmin", isAdmin);
1586
        return "claim_raised_order_item";
33213 tejus.loha 1587
    }
27046 tejbeer 1588
 
33213 tejus.loha 1589
    @RequestMapping(value = "/raiseClaimOrderItem", method = RequestMethod.POST)
1590
    public String raiseClaimOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
28352 tejbeer 1591
 
33213 tejus.loha 1592
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1593
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1594
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
28437 tejbeer 1595
 
33213 tejus.loha 1596
        if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
1597
            pendingOrderItem.setStatus(OrderStatus.CLAIMED);
1598
            pendingOrderItem.setClaimedTimestamp(LocalDateTime.now());
28437 tejbeer 1599
 
33213 tejus.loha 1600
        }
1601
        pendingOrderItemRepository.persist(pendingOrderItem);
1602
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28437 tejbeer 1603
 
33213 tejus.loha 1604
        return "response";
1605
    }
28437 tejbeer 1606
 
33213 tejus.loha 1607
    @RequestMapping(value = "/verifyOrderItem", method = RequestMethod.POST)
1608
    public String verifyOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
28437 tejbeer 1609
 
33213 tejus.loha 1610
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1611
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1612
        pendingOrderItem.setVerifiedTimestamp(LocalDateTime.now());
28352 tejbeer 1613
 
33213 tejus.loha 1614
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
26721 tejbeer 1615
 
33213 tejus.loha 1616
        return "response";
1617
    }
26721 tejbeer 1618
 
33213 tejus.loha 1619
    @RequestMapping(value = "/cancelOrderByInvoice", method = RequestMethod.POST)
1620
    public String cancelOrder(HttpServletRequest request, @RequestParam List<String> invoiceNumbers, Model model)
1621
            throws Exception {
1622
        orderService.cancelOrder(invoiceNumbers);
1623
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
26721 tejbeer 1624
 
33213 tejus.loha 1625
        return "response";
1626
    }
28352 tejbeer 1627
 
33213 tejus.loha 1628
    @RequestMapping(value = "/getOnlineOrder", method = RequestMethod.GET)
1629
    public String cancelOrder(HttpServletRequest request, Model model) throws Exception {
1630
        return "online-order";
1631
    }
28352 tejbeer 1632
 
33400 ranu 1633
    @RequestMapping(value = "/deliveredPendingOrderItem", method = RequestMethod.POST)
1634
    public String deliveredPendingOrderItem(HttpServletRequest request, @RequestParam(name = "id") int pendingOrderItemId, Model model)
1635
            throws Exception {
1636
 
1637
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1638
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(pendingOrderItemId);
1639
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1640
 
1641
        //Prepaid payment successful
1642
        if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
1643
            //pendingOrderItem.setStatus(OrderStatus.UNSETTLED);
1644
//            pendingOrderItem.setSettled(false);
1645
            pendingOrderItem.setStatus(OrderStatus.CLAIMED);
1646
            pendingOrderItem.setClaimedTimestamp(LocalDateTime.now());
1647
        } else {
1648
            pendingOrderItem.setStatus(OrderStatus.SETTLED);
1649
        }
1650
        pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
1651
 
1652
        List<OrderStatus> pendingOrderItemStatusList = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
1653
                .map(x -> x.getStatus()).collect(Collectors.toList());
1654
 
1655
        List<Integer> catalogIds = new ArrayList<>();
1656
 
1657
        Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1658
        pendingOrderItem.setItemName(item.getItemDescription());
1659
        catalogIds.add(item.getCatalogItemId());
1660
 
1661
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1662
        JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1663
        pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1664
        pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1665
        CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
1666
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
1667
        Map<String, Object> emailModel = new HashMap<>();
1668
        emailModel.put("customer", customerAddress);
1669
        emailModel.put("pendingOrder", pendingOrder);
1670
        emailModel.put("date", dateTimeFormatter);
1671
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1672
        String[] customerEmail = null;
1673
        if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
1674
            customerEmail = new String[]{customer.getEmailId()};
34211 vikas.jang 1675
            List<String> bccTo = Arrays.asList("vikas.jangra@smartdukaan.com");
33400 ranu 1676
 
1677
            emailService.sendMailWithAttachments("Order Delivered with SmartDukaan", "order-delivered.vm", emailModel,
1678
                    customerEmail, null, bccTo.toArray(new String[0]));
1679
 
1680
        }
1681
        if (!pendingOrderItemStatusList.contains(OrderStatus.PENDING) && !pendingOrderItemStatusList.contains(OrderStatus.PROCESSING)
1682
                && !pendingOrderItemStatusList.contains(OrderStatus.BILLED) && !pendingOrderItemStatusList.contains(OrderStatus.UNSETTLED)
1683
                && !pendingOrderItemStatusList.contains(OrderStatus.CLAIMED)) {
1684
            pendingOrder.setStatus(OrderStatus.CLOSED);
1685
        }
1686
        pendingOrderItemRepository.persist(pendingOrderItem);
1687
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1688
 
1689
        return "response";
1690
    }
1691
 
33213 tejus.loha 1692
    @GetMapping("/getAllOrdersByStatus")
1693
    public String getAllOrdersByStatus(HttpServletRequest request, @RequestParam OrderStatus status,
1694
                                       @RequestParam(required = false) LocalDateTime startTime,
1695
                                       @RequestParam(required = false) LocalDateTime endTime, Model model) throws ProfitMandiBusinessException {
1696
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1697
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
33437 ranu 1698
        boolean isAccountsL2AndL3 = false;
33400 ranu 1699
        if (isAdmin) {
1700
            AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
1701
            List<Position> positions = positionRepository.selectPositionByAuthId(authUser.getId());
1702
            for (Position position : positions) {
33437 ranu 1703
                if (((position.getEscalationType().equals(EscalationType.L2) || position.getEscalationType().equals(EscalationType.L3))
33400 ranu 1704
                        && position.getCategoryId() == ProfitMandiConstants.TICKET_CATEGORY_ACCOUNTS)) {
33437 ranu 1705
                    isAccountsL2AndL3 = true;
33400 ranu 1706
                    break;
1707
                }
1708
            }
1709
        }
1710
 
33213 tejus.loha 1711
        LOGGER.info("startTime {}", startTime);
1712
        LOGGER.info("endTime {}", endTime);
28352 tejbeer 1713
 
33213 tejus.loha 1714
        List<PendingOrderItem> pendingOrderItems;
1715
        if (startTime == null) {
33367 ranu 1716
            LocalDate date = LocalDate.now().minusDays(15);
1717
            if (status.equals(OrderStatus.PENDING)) {
1718
                pendingOrderItems = pendingOrderItemRepository.selectByStatusAndCreateTimestamp(Collections.singletonList(status), date.atStartOfDay(), LocalDateTime.now());
1719
            } else {
1720
                pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatus(status);
1721
            }
1722
 
33213 tejus.loha 1723
        } else {
1724
            List<OrderStatus> statusList = new ArrayList<>();
1725
            if (status.equals(OrderStatus.DELIVERED)) {
1726
                statusList.add(OrderStatus.SETTLED);
1727
                statusList.add(OrderStatus.UNSETTLED);
1728
            } else {
1729
                statusList.add(status);
1730
            }
1731
            pendingOrderItems = pendingOrderItemRepository.selectByStatusAndCreateTimestamp(statusList,
1732
                    startTime.toLocalDate().atStartOfDay(), endTime);
1733
        }
28352 tejbeer 1734
 
33213 tejus.loha 1735
        List<Integer> pendingOrderIds = pendingOrderItems.stream().map(x -> x.getOrderId()).collect(Collectors.toList());
28352 tejbeer 1736
 
33213 tejus.loha 1737
        List<Integer> fofoIds = pendingOrderRepository.selectByIds(pendingOrderIds)
1738
                .stream().map(x -> x.getFofoId()).distinct().collect(Collectors.toList());
28356 tejbeer 1739
 
33213 tejus.loha 1740
        Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
28352 tejbeer 1741
 
33213 tejus.loha 1742
        Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1743
                .filter(x -> x != null).collect(Collectors.toList()).stream()
1744
                .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1745
        model.addAttribute("customRetailersMap", customRetailersMap);
28352 tejbeer 1746
 
33213 tejus.loha 1747
        LOGGER.info("customRetailersMap {}", customRetailersMap);
28339 tejbeer 1748
 
33213 tejus.loha 1749
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, 0);
32697 ranu 1750
 
33213 tejus.loha 1751
        model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
1752
        model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
32697 ranu 1753
 
33213 tejus.loha 1754
        model.addAttribute("isAdmin", isAdmin);
33437 ranu 1755
        model.addAttribute("isAccountsL2AndL3", isAccountsL2AndL3);
33213 tejus.loha 1756
        return "online-order-item";
1757
    }
32697 ranu 1758
 
33400 ranu 1759
    @RequestMapping(value = "/onlinePaymentAddToPartnerWallet", method = RequestMethod.POST)
1760
    public String onlinePaymentAddToPartnerWallet(HttpServletRequest request, @RequestParam int id,
1761
                                                  Model model) throws Exception {
1762
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1763
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1764
        int fofoId = pendingOrder.getFofoId();
1765
        double deductionPayment = (pendingOrderItem.getSellingPrice() * 2.36) / 100;
1766
        walletService.addAmountToWallet(fofoId, id, WalletReferenceType.ONLINE_ORDER_PAYMENT, "Online Order Payment", pendingOrderItem.getSellingPrice(), LocalDateTime.now());
1767
        walletService.consumeAmountFromWallet(fofoId, id,
1768
                WalletReferenceType.ONLINE_GATEWAY_FEE, "Payment Gatewayfee", (float) deductionPayment, LocalDateTime.now());
1769
 
1770
        pendingOrderItem.setStatus(OrderStatus.CLOSED);
1771
        pendingOrder.setStatus(OrderStatus.CLOSED);
1772
 
1773
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1774
 
1775
        return "response";
1776
    }
1777
 
33213 tejus.loha 1778
    //TODO Tejus
1779
    @RequestMapping(value = "/getBulkOrder")
33336 tejus.loha 1780
    public String getBulkOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException, MessagingException, IOException {
33213 tejus.loha 1781
        return "bulk-order";
1782
    }
32697 ranu 1783
 
33213 tejus.loha 1784
    @PostMapping(value = "/bulkOrder/upload")
1785
    public String uploadCatalog(HttpServletRequest request, @RequestPart("file") MultipartFile file, Model model)
1786
            throws Exception {
1787
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1788
        int authId = authRepository.selectByEmailOrMobile(fofoDetails.getEmailId()).getId();
1789
        LOGGER.info("authId - {}", authId);
1790
        bulkOrderService.parseBulkOrders(file, authId);
1791
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1792
        return "response";
1793
    }
32697 ranu 1794
 
33213 tejus.loha 1795
    // This method is use for sending all pending transaction to Transation Approval menu
1796
    @RequestMapping(value = "/transaction/pendingApprovals", method = RequestMethod.GET)
1797
    public String getTransactionApproval(HttpServletRequest request, Model model) throws Exception {
33219 tejus.loha 1798
        List<TransactionApproval> transactionApprovals = transactionApprovalRepository.selectAllPending();
1799
        LOGGER.info("list of Approval transaction Id " + transactionApprovals);
33336 tejus.loha 1800
        List<TransactionApprovalModel> approvalModelList = bulkOrderService.getAllPendingTransactionApproval();
33213 tejus.loha 1801
        model.addAttribute("approvalModelList", approvalModelList);
1802
        return "transaction/transaction-approvals";
1803
    }
33092 tejus.loha 1804
 
33213 tejus.loha 1805
    @RequestMapping(value = "transaction/approval", method = RequestMethod.PUT)
1806
    public String transactionApproval(HttpServletRequest request, Model model,
1807
                                      @RequestParam int transactionId,
1808
                                      @RequestParam String remark,
1809
                                      @RequestParam TransactionApprovalStatus transactionApprovalStatus
1810
    ) throws Exception {
1811
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1812
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
1813
        int approvalId = authUser.getId();
1814
        String approvedBy = authUser.getFullName();
1815
        LocalDateTime approvedOn = LocalDateTime.now();
1816
        this.updateApprovalStatus(transactionId, approvalId, approvedBy, approvedOn, remark, transactionApprovalStatus);
1817
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1818
        return "response";
1819
 
1820
    }
1821
 
33696 amit.gupta 1822
 
33213 tejus.loha 1823
    private void updateApprovalStatus(int transactionId, int approvalId, String approvedBy, LocalDateTime approvedOn, String remark, TransactionApprovalStatus transactionApprovalStatus) throws Exception {
1824
        TransactionApproval transactionApproval = transactionApprovalRepository.selectById(transactionId);
33336 tejus.loha 1825
        int retailerId = transactionRepository.selectById(transactionId).getRetailerId();
33213 tejus.loha 1826
        if (!transactionApproval.getStatus().equals(TransactionApprovalStatus.PENDING)) {
1827
            throw new ProfitMandiBusinessException("Transaction already Processed", "Transaction already Processed", "Transaction already Processed");
1828
        }
1829
        transactionApproval.setStatus(transactionApprovalStatus);
1830
        transactionApproval.setRemark(remark);
1831
        transactionApproval.setApprovalId(approvalId);
1832
        transactionApproval.setApprovedBy(approvedBy);
1833
        transactionApproval.setApprovedOn(approvedOn);
1834
        if (transactionApprovalStatus.equals(TransactionApprovalStatus.APPROVED)) {
34313 ranu 1835
            transactionService.processTransaction(transactionId, 0);
33336 tejus.loha 1836
        } else {
1837
            float totalAmount = 0;
1838
            // referense id = transaction id
1839
            // here refund the amount of an order
1840
            List<UserWalletHistory> uwhList = walletService.getAllByReference(retailerId, transactionId, WalletReferenceType.PURCHASE);
33687 amit.gupta 1841
            //Refund only if any amount is deducted from wallet for that particular Transaction
33696 amit.gupta 1842
            if (uwhList.size() > 0) {
33687 amit.gupta 1843
                totalAmount = -uwhList.get(0).getAmount();
1844
                walletService.refundToWallet(retailerId, totalAmount, transactionId, WalletReferenceType.PURCHASE, "Order canceled");
34733 amit.gupta 1845
                sdCreditService.settleBlockedLoan(transactionId, totalAmount);
33687 amit.gupta 1846
            }
33213 tejus.loha 1847
        }
1848
    }
1849
 
1850
    @RequestMapping(value = "/bulkOrderTemplate", method = RequestMethod.GET)
1851
    public ResponseEntity<?> bulkOrderTemplate() throws Exception {
1852
        List<List<?>> rows = new ArrayList<>();
1853
        rows.add(Arrays.asList("Mahaveer", "Change description for your reference", "175139287", "28264", "0", "4"));
1854
        rows.add(Arrays.asList("Mahaveer", "Price =0 means system price", "175139287", "28268", "0", "7"));
1855
        rows.add(Arrays.asList("Jas", "You give custom price also ", "171273247", "28264", "300", "3"));
1856
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
1857
                .getCSVByteStream(Arrays.asList("Partner name", "Description", "Partner Id", "Item Id", "Price", "Quantity"), rows);
1858
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Bulk order template");
1859
 
1860
        return responseEntity;
1861
 
1862
    }
34168 tejus.loha 1863
 
1864
    @Autowired
1865
    EInvoiceDetailsRepository eInvoiceDetailsRepository;
1866
 
1867
    @GetMapping("/resetIrnGeneratedPanel")
1868
    public String resetIrnGeneratedPanel() {
1869
        return "reset-irn-panel";
1870
    }
1871
 
1872
    @GetMapping("/getTransactionForIrnReset")
1873
    public String getTransactionForIrnReset(@RequestParam String invoiceNumber, Model model) throws Exception {
1874
        List<String> invoiceNumbers = Arrays.asList(invoiceNumber.split(","));
1875
        List<EInvoiceDetails> eInvoiceDetailsList = eInvoiceDetailsRepository.selectByInvoiceNumbers(invoiceNumbers);
1876
        if (invoiceNumbers.size() == eInvoiceDetailsList.size()) {
1877
            model.addAttribute("irnResetOrderModelList", new ArrayList<>());
1878
            model.addAttribute("notEligibleInvoiceNumbers", invoiceNumber);
1879
            return "eligible-irn-reset-orders";
1880
        }
1881
        Set<String> existingInvoiceInEInvoiceDtl = eInvoiceDetailsList.stream().map(x -> x.getInvoiceNumber()).collect(Collectors.toSet());
1882
        List<String> missingInvoiceInEInvoiceDtl = invoiceNumbers.stream().filter(x -> !existingInvoiceInEInvoiceDtl.contains(x)).collect(Collectors.toList());
1883
 
1884
        List<Order> orderList = orderRepository.selectByInvoiceNumbers(missingInvoiceInEInvoiceDtl).stream().filter(x -> x.getIrnGenerated() != null).collect(Collectors.toList());
1885
        Map<String, List<Order>> invoiceMap = orderList.stream().collect(Collectors.groupingBy(x -> x.getInvoiceNumber()));
1886
        Set<String> notEligibleInvoiceNumbers = new HashSet<>();
1887
        notEligibleInvoiceNumbers.addAll(existingInvoiceInEInvoiceDtl);
1888
        List<IrnResetOrderModel> irnResetOrderModelList = new ArrayList<>();
1889
        for (Map.Entry<String, List<Order>> invoiceMapEntry : invoiceMap.entrySet()) {
1890
            String invoice = invoiceMapEntry.getKey();
1891
            List<Order> orders = invoiceMapEntry.getValue();
35066 amit 1892
            LocalDate earlierDate = LocalDate.now().minusDays(5);
1893
            boolean isEligible = !orders.isEmpty() && orders.stream().allMatch(x -> x.getBillingTimestamp().toLocalDate().isAfter(earlierDate) && x.getIrnGenerated() != null);
34168 tejus.loha 1894
            if (isEligible) {
1895
                Order order = orders.get(0);
1896
                FofoStore fofoStore = fofoStoreRepository.selectByRetailerId(order.getRetailerId());
1897
 
1898
                IrnResetOrderModel irnResetOrderModel = new IrnResetOrderModel();
1899
                irnResetOrderModel.setName(partnerOnBoardingPanelRepository.selectByCode(fofoStore.getCode()).getOutLetName());
1900
                irnResetOrderModel.setInvoiceNumber(order.getInvoiceNumber());
1901
                irnResetOrderModel.setInvoiceDate(order.getBillingTimestamp());
1902
                irnResetOrderModel.setWarehouseId(ProfitMandiConstants.WAREHOUSE_MAP.get(order.getWarehouseId()));
1903
                irnResetOrderModel.setTotalOrderValue(orders.stream().mapToDouble(Order::getTotalAmount).sum());
1904
                irnResetOrderModelList.add(irnResetOrderModel);
1905
            } else {
1906
                notEligibleInvoiceNumbers.add(invoice);
1907
            }
1908
        }
1909
        model.addAttribute("irnResetOrderModelList", irnResetOrderModelList);
1910
        model.addAttribute("notEligibleInvoiceNumbers", notEligibleInvoiceNumbers.stream().collect(Collectors.joining(", ")));
1911
        return "eligible-irn-reset-orders";
1912
    }
1913
 
1914
    @PutMapping("/resetOrdersIrn")
1915
    public String resetIrn(@RequestParam String invoiceNumbers, Model model) throws Exception {
1916
        List<String> invoices = new ArrayList<>();
1917
        if (!invoiceNumbers.isEmpty()) {
1918
            invoices = Arrays.asList(invoiceNumbers.split(","));
1919
        }
1920
        List<Order> orderList = orderRepository.selectByInvoiceNumbers(invoices);
1921
        orderList.forEach(order -> {
1922
            order.setIrnGenerated(null);
1923
        });
1924
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1925
        return "response";
1926
    }
34179 tejus.loha 1927
 
34474 aman.kumar 1928
    @PutMapping(value = "/sendInvoiceOnWhatsApp")
1929
    public String sendInvoiceOnWhatsApp(HttpServletRequest request, @RequestParam int orderId, @RequestParam String whatsAppMobile, Model model) throws Exception {
1930
        boolean isSend = this.sendWhatsappInvoice(fofoOrderRepository.selectByOrderId(orderId), whatsAppMobile);
1931
        model.addAttribute("response1", isSend);
34179 tejus.loha 1932
        return "response";
1933
    }
1934
 
1935
 
32409 amit.gupta 1936
}
32405 jai.hind 1937