Subversion Repositories SmartDukaan

Rev

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