Subversion Repositories SmartDukaan

Rev

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