Subversion Repositories SmartDukaan

Rev

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