Subversion Repositories SmartDukaan

Rev

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