Subversion Repositories SmartDukaan

Rev

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