Subversion Repositories SmartDukaan

Rev

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