Subversion Repositories SmartDukaan

Rev

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