Subversion Repositories SmartDukaan

Rev

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