Subversion Repositories SmartDukaan

Rev

Rev 32627 | Rev 32697 | 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);
28352 tejbeer 1328
 
32251 amit.gupta 1329
        LOGGER.info("endTime" + endTime);
28352 tejbeer 1330
 
32251 amit.gupta 1331
        List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1332
                .collect(Collectors.toList());
26721 tejbeer 1333
 
32251 amit.gupta 1334
        Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
27046 tejbeer 1335
 
32251 amit.gupta 1336
        Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1337
                .filter(x -> x != null).collect(Collectors.toList()).stream()
1338
                .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1339
        model.addAttribute("customRetailersMap", customRetailersMap);
28339 tejbeer 1340
 
32251 amit.gupta 1341
        List<PendingOrderItem> pendingOrderItem = null;
1342
        if (startTime == null) {
1343
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(status);
1344
        } else {
1345
            List<OrderStatus> statusList = new ArrayList<>();
1346
            if (status.equals(OrderStatus.DELIVERED)) {
1347
                statusList.add(OrderStatus.SETTLED);
1348
                statusList.add(OrderStatus.UNSETTLED);
1349
            } else {
1350
                statusList.add(status);
1351
            }
1352
            pendingOrderItem = pendingOrderItemRepository.selectByStatusAndCreateTimestamp(statusList,
1353
                    startTime.toLocalDate().atStartOfDay(), endTime);
1354
        }
1355
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, 0);
28339 tejbeer 1356
 
32251 amit.gupta 1357
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1358
        model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
28339 tejbeer 1359
 
32251 amit.gupta 1360
        model.addAttribute("isAdmin", isAdmin);
1361
        return "online-order-item";
1362
    }
28339 tejbeer 1363
 
32251 amit.gupta 1364
    @RequestMapping(value = "/franchiseeSalesReport", method = RequestMethod.GET)
1365
    public String getFranchiseeSalesReport(HttpServletRequest request, Model model)
1366
            throws ProfitMandiBusinessException {
1367
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28339 tejbeer 1368
 
32251 amit.gupta 1369
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1370
        LocalDateTime currentStartMonth = currentDate.minusDays(30).toLocalDate().atStartOfDay();
1371
        FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoDetails.getFofoId());
28339 tejbeer 1372
 
32251 amit.gupta 1373
        List<FocoSaleReportModel> focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoDetails.getFofoId(),
1374
                fs.getCode(), currentStartMonth, currentDate);
28339 tejbeer 1375
 
32251 amit.gupta 1376
        LOGGER.info("focoSaleReportList {}", focoSaleReportList);
28339 tejbeer 1377
 
32251 amit.gupta 1378
        model.addAttribute("startDate", currentDate.minusDays(30).toLocalDate());
1379
        model.addAttribute("endDate", LocalDate.now());
1380
        model.addAttribute("focoSaleReportList", focoSaleReportList);
1381
        return "foco-sale-report";
1382
    }
28339 tejbeer 1383
 
32251 amit.gupta 1384
    @RequestMapping(value = "/downloadFranchiseeSales", method = RequestMethod.GET)
1385
    public ResponseEntity<?> getdownloadFranchiseeSales(HttpServletRequest request,
1386
                                                        @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1387
                                                        @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1388
            throws Exception {
1389
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1390
        List<List<?>> rows = new ArrayList<>();
28339 tejbeer 1391
 
32251 amit.gupta 1392
        FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoDetails.getFofoId());
1393
        List<FocoSaleReportModel> focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoDetails.getFofoId(),
1394
                fs.getCode(), startDate.atStartOfDay(), endDate.atStartOfDay());
1395
        LOGGER.info("FocoSaleReportList {}", focoSaleReportList);
28339 tejbeer 1396
 
32251 amit.gupta 1397
        for (FocoSaleReportModel fsr : focoSaleReportList) {
28339 tejbeer 1398
 
32251 amit.gupta 1399
            rows.add(Arrays.asList(fsr.getCode(), fsr.getName(), fsr.getCity(), fsr.getState(), fsr.getRegion(),
1400
                    fsr.getItemId(), fsr.getBrand(), fsr.getModelName(), fsr.getModelNumber(), fsr.getColor(),
1401
                    fsr.getQuantity(), fsr.getDp(), fsr.getSellingPrice(), fsr.getMop(), fsr.getSerialNumber(),
1402
                    FormattingUtils.format(fsr.getCreateDate()), fsr.getCustomerName(), fsr.getCustomerPhone(),
1403
                    fsr.getCustomerCity(), fsr.getCustomerPincode(), fsr.getInvoiceNumber(), fsr.getPurchaseReference(),
1404
                    fsr.getCustomerGstNumber(), FormattingUtils.format(fsr.getCancelledTimestamp()),
1405
                    FormattingUtils.format(fsr.getGrnCompleteDate()), fsr.getHygieneRating(), fsr.getRating(),
1406
                    fsr.getStatus(), fsr.getRemark(), FormattingUtils.format(fsr.getCreatedTimestamp()),
1407
                    FormattingUtils.format(fsr.getDisposedTimestamp()),
1408
                    FormattingUtils.format(fsr.getNextTimestamp()),
1409
                    FormattingUtils.format(fsr.getActivationTimestamp()),
1410
                    FormattingUtils.format(fsr.getActivationTimestamp()), fsr.getLabel()));
28339 tejbeer 1411
 
32251 amit.gupta 1412
        }
28339 tejbeer 1413
 
32251 amit.gupta 1414
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1415
                Arrays.asList("Code", "Name", "City", "State", "Region", "Item Id", "Brand", "Model Name",
1416
                        "Model Number", "Color", "Quantity", "Dp", "Selling_Price", "mop", "Serial Number",
1417
                        "Create Date", "Customer Name", "Customer Phone", "Customer City", " Customer Pincode",
1418
                        "Invoice  Number", "Purchase Reference", "Customer Gst Number", " Cancelled Timestamp",
1419
                        "GRN Complete Date", "Hygiene Rating", "Rating", "Status", "Remark", "Created Timestamp",
1420
                        "Disposed Timestamp", " Next Timestamp", "Activation Timestamp", "Create Timestamp", "Label"),
1421
                rows);
28339 tejbeer 1422
 
32251 amit.gupta 1423
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Franchisee Sales Report");
28339 tejbeer 1424
 
32251 amit.gupta 1425
        return responseEntity;
28339 tejbeer 1426
 
32251 amit.gupta 1427
    }
28339 tejbeer 1428
 
32251 amit.gupta 1429
    @RequestMapping(value = "/downloadWalletSummaryReport", method = RequestMethod.GET)
1430
    public ResponseEntity<?> getDownloadWalletSummaryReport(HttpServletRequest request,
1431
                                                            @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1432
                                                            @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1433
            throws Exception {
28339 tejbeer 1434
 
32251 amit.gupta 1435
        List<List<?>> rows = new ArrayList<>();
1436
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1437
        List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository.selectWalletSummaryReport(
1438
                fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1439
        LOGGER.info("walletSummartList {}", walletSummartList);
1440
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
28339 tejbeer 1441
 
32251 amit.gupta 1442
        for (WalletSummaryReportModel walletSummary : walletSummartList) {
28344 tejbeer 1443
 
32251 amit.gupta 1444
            rows.add(Arrays.asList(walletSummary.getId(), walletSummary.getCode(), walletSummary.getName(),
1445
                    walletSummary.getEmail(), walletSummary.getPhone(), walletSummary.getAmount(),
1446
                    walletSummary.getRefundableAmount(), walletSummary.getReference(), walletSummary.getReferenceType(),
1447
                    FormattingUtils.format(walletSummary.getBusinessTimestamp())));
28350 tejbeer 1448
 
32251 amit.gupta 1449
        }
28350 tejbeer 1450
 
32251 amit.gupta 1451
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
1452
                .getCSVByteStream(Arrays.asList("Id", "Code", "Name", "Email", "Phone", "Amount", "Refundable_amount",
1453
                        "Reference", "Reference_type", "Business_timestamp", "Description"), rows);
28344 tejbeer 1454
 
32251 amit.gupta 1455
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Wallet Statement Report");
27819 tejbeer 1456
 
32251 amit.gupta 1457
        return responseEntity;
27819 tejbeer 1458
 
32251 amit.gupta 1459
    }
28358 tejbeer 1460
 
32251 amit.gupta 1461
    @RequestMapping(value = "/walletSummaryReport", method = RequestMethod.GET)
1462
    public String getWalletSummaryReport(HttpServletRequest request, Model model) throws Exception {
1463
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28358 tejbeer 1464
 
32251 amit.gupta 1465
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1466
        LocalDateTime currentStartMonth = currentDate.minusDays(30).toLocalDate().atStartOfDay();
28420 tejbeer 1467
 
32251 amit.gupta 1468
        List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository
1469
                .selectWalletSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1470
        LOGGER.info("walletSummartList {}", walletSummartList);
28420 tejbeer 1471
 
32251 amit.gupta 1472
        model.addAttribute("startDate", currentDate.minusDays(30).toLocalDate());
1473
        model.addAttribute("endDate", LocalDate.now());
1474
        model.addAttribute("walletSummartList", walletSummartList);
28358 tejbeer 1475
 
32251 amit.gupta 1476
        return "wallet-summary-report";
1477
    }
30426 tejbeer 1478
 
32251 amit.gupta 1479
    @RequestMapping(value = "/pendingIndentReport", method = RequestMethod.GET)
1480
    public String getPendingIndentReport(HttpServletRequest request, Model model) throws Exception {
1481
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28358 tejbeer 1482
 
32251 amit.gupta 1483
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1484
        LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();
28358 tejbeer 1485
 
32251 amit.gupta 1486
        List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
1487
                .selectPendingIndentReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1488
        LOGGER.info("pendingIndentReports {}", pendingIndentReports);
28358 tejbeer 1489
 
32251 amit.gupta 1490
        model.addAttribute("startDate", currentDate.minusMonths(2).toLocalDate());
1491
        model.addAttribute("endDate", LocalDate.now());
1492
        model.addAttribute("pendingIndentReports", pendingIndentReports);
30426 tejbeer 1493
 
32251 amit.gupta 1494
        return "pending-indent-report";
1495
    }
30426 tejbeer 1496
 
32251 amit.gupta 1497
    @RequestMapping(value = "/pendingIndentReportDownload", method = RequestMethod.GET)
1498
    public ResponseEntity<?> getPendingIndentReportDownload(HttpServletRequest request, Model model) throws Exception {
1499
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1500
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1501
        LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();
1502
        List<List<?>> rows = new ArrayList<>();
1503
        List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
1504
                .selectPendingIndentReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1505
        LOGGER.info("pendingIndentReports {}", pendingIndentReports);
1506
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
28377 tejbeer 1507
 
32251 amit.gupta 1508
        for (PendingIndentReportModel pir : pendingIndentReports) {
30426 tejbeer 1509
 
32251 amit.gupta 1510
            rows.add(Arrays.asList(pir.getTransactionId(), pir.getOrderId(),
1511
                    pir.getCreatTimestamp().format(dateTimeFormatter), pir.getItemId(), pir.getBrand(),
1512
                    pir.getModelName(), pir.getModelNumber(), pir.getColor(), pir.getQuantity(), pir.getUnitPrice(),
1513
                    pir.getWalletAmount(), pir.getStatus(), pir.getInvoiceNumber(),
1514
                    pir.getBillingTimestamp().format(dateTimeFormatter)));
30426 tejbeer 1515
 
32251 amit.gupta 1516
        }
30426 tejbeer 1517
 
32251 amit.gupta 1518
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList(
1519
                "Transaction Id", "Order Id", "Created_At", "Item_Id", "Brand", "Model Name", "Model Number", "Color",
1520
                "Quantity", "Unit Price", "Wallet Deduction", "Status", "Invoice Number", "Billing Timestamp"), rows);
30162 manish 1521
 
32251 amit.gupta 1522
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Order Status Summary Report");
31384 tejbeer 1523
 
32251 amit.gupta 1524
        return responseEntity;
1525
    }
30162 manish 1526
 
32251 amit.gupta 1527
    @RequestMapping(value = "/schemePayoutReport", method = RequestMethod.GET)
1528
    public String getSchemePayoutReport(HttpServletRequest request, Model model) throws Exception {
1529
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30162 manish 1530
 
32251 amit.gupta 1531
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1532
        LocalDateTime startDate = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1533
 
32251 amit.gupta 1534
        List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
1535
                .selectSchemePayoutReport(fofoDetails.getFofoId(), startDate, currentDate);
1536
        LOGGER.info("schemePayoutReports {}", schemePayoutReports);
30162 manish 1537
 
32251 amit.gupta 1538
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1539
        model.addAttribute("endDate", LocalDate.now());
1540
        model.addAttribute("schemePayoutReports", schemePayoutReports);
30162 manish 1541
 
32251 amit.gupta 1542
        return "scheme-payout-report";
1543
    }
30162 manish 1544
 
32251 amit.gupta 1545
    @RequestMapping(value = "/selectPartnerBillingSummaryReport", method = RequestMethod.GET)
1546
    public String getselectPartnerBillingSummaryReport(HttpServletRequest request, Model model) throws Exception {
1547
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1548
 
32251 amit.gupta 1549
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1550
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1551
 
32251 amit.gupta 1552
        List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
1553
                .selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1554
 
32251 amit.gupta 1555
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1556
        model.addAttribute("endDate", LocalDate.now());
1557
        model.addAttribute("partnerBillingSummaryReports", partnerBillingSummaryReports);
30162 manish 1558
 
32251 amit.gupta 1559
        return "partner-billing-summary-report";
1560
    }
30162 manish 1561
 
32251 amit.gupta 1562
    @RequestMapping(value = "/priceDropReport", method = RequestMethod.GET)
1563
    public String getSelectPriceDropReport(HttpServletRequest request, Model model) throws Exception {
1564
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30162 manish 1565
 
32251 amit.gupta 1566
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1567
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1568
 
32251 amit.gupta 1569
        List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1570
                currentStartMonth, currentDate);
30162 manish 1571
 
32251 amit.gupta 1572
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1573
        model.addAttribute("endDate", LocalDate.now());
1574
        model.addAttribute("priceDropReports", priceDropReports);
30162 manish 1575
 
32251 amit.gupta 1576
        return "price-drop-report";
1577
    }
30426 tejbeer 1578
 
32251 amit.gupta 1579
    @RequestMapping(value = "/downloadPriceDropReport", method = RequestMethod.GET)
1580
    public ResponseEntity<?> getSelectDownloadPriceDropReport(HttpServletRequest request,
1581
                                                              @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1582
                                                              @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1583
            throws Exception {
1584
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30162 manish 1585
 
32251 amit.gupta 1586
        List<List<?>> rows = new ArrayList<>();
1587
        List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1588
                startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
30426 tejbeer 1589
 
32251 amit.gupta 1590
        for (PriceDropReportModel pdr : priceDropReports) {
30426 tejbeer 1591
 
32251 amit.gupta 1592
            rows.add(Arrays.asList(pdr.getCode(), pdr.getId(), pdr.getBrand(), pdr.getModelName(), pdr.getModelNumber(),
1593
                    pdr.getAffectedOn(), pdr.getAmount(), pdr.getPartnerPayout(), pdr.getImei(), pdr.getStatus(),
1594
                    pdr.getUpdateTimestamp(), pdr.getRejectionReason()));
30426 tejbeer 1595
 
32251 amit.gupta 1596
        }
1597
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
1598
                .getCSVByteStream(Arrays.asList("code", "Price_Drop_Id", "brand", "model_name", "model_number",
1599
                        "affected_on", "amount", "partner_payout", "Imei", "status", "processed_on", "Reason"), rows);
30426 tejbeer 1600
 
32251 amit.gupta 1601
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "price drop report");
30162 manish 1602
 
32251 amit.gupta 1603
        return responseEntity;
30426 tejbeer 1604
 
32251 amit.gupta 1605
    }
30426 tejbeer 1606
 
32251 amit.gupta 1607
    @RequestMapping(value = "/downloadPartnerBillingSummaryReport", method = RequestMethod.GET)
1608
    public ResponseEntity<?> getdownloadPartnerBillingSummaryReport(HttpServletRequest request,
1609
                                                                    @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1610
                                                                    @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1611
            throws Exception {
30426 tejbeer 1612
 
32251 amit.gupta 1613
        List<List<?>> rows = new ArrayList<>();
1614
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1615
 
32251 amit.gupta 1616
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1617
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1618
 
32251 amit.gupta 1619
        List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
1620
                .selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), startDate.atStartOfDay(),
1621
                        endDate.atTime(LocalTime.MAX));
30426 tejbeer 1622
 
32251 amit.gupta 1623
        for (PartnerBillingSummaryModel pbsr : partnerBillingSummaryReports) {
30426 tejbeer 1624
 
32251 amit.gupta 1625
            rows.add(Arrays.asList(pbsr.getId(),
1626
                    FormattingUtils.format(pbsr.getCreateTimestamp()),
1627
                    FormattingUtils.format(pbsr.getBillingTimestamp()),
1628
                    FormattingUtils.format(pbsr.getDeliveryTimestamp()),
1629
                    FormattingUtils.format(pbsr.getPartnerGrnTimestamp()),
1630
                    pbsr.getTransactionId(),
1631
                    pbsr.getLogisticsTransactionId(), pbsr.getAirwayBillNumber(), pbsr.getStatusSubGroup(),
1632
                    pbsr.getStatusName(), pbsr.getRetailerId(), pbsr.getRetailerName(), pbsr.getItemId(),
1633
                    pbsr.getBrand(), pbsr.getModelName(), pbsr.getModelNumber(), pbsr.getColor(), pbsr.getUnitPrice(),
1634
                    pbsr.getQuantity(), pbsr.getTotalPrice(), pbsr.getInvoiceNumber(), pbsr.getIgstRate(),
1635
                    pbsr.getCgstRate(), pbsr.getSgstRate()));
30162 manish 1636
 
32251 amit.gupta 1637
        }
30426 tejbeer 1638
 
32251 amit.gupta 1639
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("OrderId",
1640
                "Created On", "Billed On", "Delivered On", "Grned On", "Transaction_id", "master_order_id",
1641
                "airwaybill_no", "statusSubGroupp", "statusName", "customer_id", "customer_name", "Item_Id", "brand",
1642
                "model_name", "model_number", "color", "selling_price", "Quantity", "total_price", "invoice_number",
1643
                "igstrate", "cgstrate", "sgstrate"), rows);
30426 tejbeer 1644
 
32251 amit.gupta 1645
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Billing Statement Report");
30426 tejbeer 1646
 
32251 amit.gupta 1647
        return responseEntity;
30162 manish 1648
 
32251 amit.gupta 1649
    }
30426 tejbeer 1650
 
32251 amit.gupta 1651
    @RequestMapping(value = "/invoiceSchemeOutSummaryReport", method = RequestMethod.GET)
1652
    public String getInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model) throws Exception {
1653
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1654
 
32251 amit.gupta 1655
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1656
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1657
 
32251 amit.gupta 1658
        List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
1659
                .selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1660
        LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
30426 tejbeer 1661
 
32251 amit.gupta 1662
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1663
        model.addAttribute("endDate", LocalDate.now());
1664
        model.addAttribute("focoSchemeOutReports", focoSchemeOutReports);
30426 tejbeer 1665
 
32251 amit.gupta 1666
        return "invoicewise-scheme-out-report";
1667
    }
30426 tejbeer 1668
 
32251 amit.gupta 1669
    @RequestMapping(value = "/downloadInvoiceSchemeOutSummaryReport", method = RequestMethod.GET)
1670
    public ResponseEntity<?> getDownloadInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model)
1671
            throws Exception {
1672
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1673
 
32251 amit.gupta 1674
        List<List<?>> rows = new ArrayList<>();
1675
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1676
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1677
 
32251 amit.gupta 1678
        List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
1679
                .selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1680
        LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
30426 tejbeer 1681
 
32251 amit.gupta 1682
        for (FocoSchemeOutReportModel fsor : focoSchemeOutReports) {
1683
            rows.add(Arrays.asList(fsor.getInvoiceNumber(), fsor.getQuantity(), fsor.getBrand(), fsor.getModelName(),
1684
                    fsor.getModelNumber(), fsor.getColor(), fsor.getAmount()));
30426 tejbeer 1685
 
32251 amit.gupta 1686
        }
30426 tejbeer 1687
 
32251 amit.gupta 1688
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1689
                Arrays.asList("InvoiceNumber", "Quantity", "Brand", "Model Name", "Model Number", "Color", "Amount"),
1690
                rows);
30426 tejbeer 1691
 
32251 amit.gupta 1692
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows,
1693
                "invoice wise scheme out Summary Report");
30426 tejbeer 1694
 
32251 amit.gupta 1695
        return responseEntity;
1696
    }
30426 tejbeer 1697
 
32251 amit.gupta 1698
    @RequestMapping(value = "/schemePayoutReportDownload", method = RequestMethod.GET)
1699
    public ResponseEntity<?> getSchemePayoutReportDownload(HttpServletRequest request,
1700
                                                           @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1701
                                                           @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1702
            throws Exception {
1703
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1704
 
32251 amit.gupta 1705
        List<List<?>> rows = new ArrayList<>();
1706
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1707
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1708
 
32251 amit.gupta 1709
        List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
1710
                .selectSchemePayoutReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1711
        LOGGER.info("schemePayoutReports {}", schemePayoutReports);
30426 tejbeer 1712
 
32251 amit.gupta 1713
        for (SchemePayoutReportModel spr : schemePayoutReports) {
30426 tejbeer 1714
 
32251 amit.gupta 1715
            rows.add(Arrays.asList(spr.getId(), spr.getSerialNumber(), spr.getBrand(), spr.getModelName(),
1716
                    spr.getModelNumber(), spr.getColor(), spr.getSchemeInDp(), spr.getSchemeOutDp(), spr.getSchemeId(),
1717
                    spr.getName(), spr.getType(), spr.getAmountType(), spr.getPurchaseReference(),
1718
                    spr.getInvoiceNumber(), spr.getSioAmount(), spr.getStatus(), spr.getStatusDescription(),
1719
                    spr.getCreateTimestamp(), spr.getRolledBackTimestamp()));
30162 manish 1720
 
32251 amit.gupta 1721
        }
1722
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("Item_Id",
1723
                "serial_number", "Brand", "Model Name", "Model Number", "Color", "Scheme_IN_DP", "Scheme_out_dp",
1724
                "Scheme_Id", "Name", "Type", "amount", "Purchase_Invoice", "SALE_INOVOICE", "Amount", "status",
1725
                "description", "create_timestamp", "rolled_back_timestamp"), rows);
30162 manish 1726
 
32251 amit.gupta 1727
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Scheme Payout Summary Report");
30426 tejbeer 1728
 
32251 amit.gupta 1729
        return responseEntity;
1730
    }
30426 tejbeer 1731
 
32251 amit.gupta 1732
    @GetMapping("/getAllOnlineOrder")
1733
    public String getAllOrders(HttpServletRequest request, @RequestParam(required = false) LocalDate date, Model model)
1734
            throws ProfitMandiBusinessException {
1735
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1736
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1737
        if (date == null) {
1738
            date = LocalDate.now().minusDays(3);
1739
        }
30177 manish 1740
 
32251 amit.gupta 1741
        LOGGER.info("date" + date);
1742
        List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1743
                .collect(Collectors.toList());
30426 tejbeer 1744
 
32251 amit.gupta 1745
        Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
30426 tejbeer 1746
 
32251 amit.gupta 1747
        Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1748
                .filter(x -> x != null).collect(Collectors.toList()).stream()
1749
                .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
30426 tejbeer 1750
 
32251 amit.gupta 1751
        model.addAttribute("customRetailersMap", customRetailersMap);
30177 manish 1752
 
32251 amit.gupta 1753
        List<PendingOrderItem> pendingOrderItem = null;
30426 tejbeer 1754
 
32251 amit.gupta 1755
        pendingOrderItem = pendingOrderItemRepository.selectAll(date.atStartOfDay(), LocalDateTime.now());
30177 manish 1756
 
32251 amit.gupta 1757
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, 0);
30177 manish 1758
 
32251 amit.gupta 1759
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1760
        model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
1761
        model.addAttribute("date", date);
1762
        model.addAttribute("isAdmin", isAdmin);
1763
        return "online-all-order-item";
1764
    }
32409 amit.gupta 1765
}
32405 jai.hind 1766
 
1767
 
1768
 
1769
 
1770