Subversion Repositories SmartDukaan

Rev

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