Subversion Repositories SmartDukaan

Rev

Rev 33010 | Rev 33091 | 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
 
32251 amit.gupta 1367
    @RequestMapping(value = "/franchiseeSalesReport", method = RequestMethod.GET)
1368
    public String getFranchiseeSalesReport(HttpServletRequest request, Model model)
1369
            throws ProfitMandiBusinessException {
1370
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28339 tejbeer 1371
 
32251 amit.gupta 1372
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1373
        LocalDateTime currentStartMonth = currentDate.minusDays(30).toLocalDate().atStartOfDay();
1374
        FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoDetails.getFofoId());
28339 tejbeer 1375
 
32251 amit.gupta 1376
        List<FocoSaleReportModel> focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoDetails.getFofoId(),
1377
                fs.getCode(), currentStartMonth, currentDate);
28339 tejbeer 1378
 
32251 amit.gupta 1379
        LOGGER.info("focoSaleReportList {}", focoSaleReportList);
28339 tejbeer 1380
 
32251 amit.gupta 1381
        model.addAttribute("startDate", currentDate.minusDays(30).toLocalDate());
1382
        model.addAttribute("endDate", LocalDate.now());
1383
        model.addAttribute("focoSaleReportList", focoSaleReportList);
1384
        return "foco-sale-report";
1385
    }
33010 shampa 1386
    @RequestMapping(value = "/franchiseeSalesFetchReportByDate", method = RequestMethod.GET)
1387
    public String getfranchiseeSalesFetchReport(HttpServletRequest request,
1388
                                                  @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1389
                                                  @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1390
            throws Exception {
1391
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28339 tejbeer 1392
 
33010 shampa 1393
        List<List<?>> rows = new ArrayList<>();
1394
 
1395
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1396
        FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoDetails.getFofoId());
1397
        List<FocoSaleReportModel> focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoDetails.getFofoId(),
1398
                fs.getCode(), startDate.atStartOfDay(), endDate.atStartOfDay());
1399
        LOGGER.info("focoSaleReportList {}", focoSaleReportList);
1400
 
33067 shampa 1401
        model.addAttribute("startDate",startDate);
33010 shampa 1402
        model.addAttribute("endDate", LocalDate.now());
1403
        model.addAttribute("focoSaleReportList", focoSaleReportList);
1404
        return "foco-sale-report";
1405
    }
1406
 
1407
 
32251 amit.gupta 1408
    @RequestMapping(value = "/downloadFranchiseeSales", method = RequestMethod.GET)
1409
    public ResponseEntity<?> getdownloadFranchiseeSales(HttpServletRequest request,
1410
                                                        @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1411
                                                        @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1412
            throws Exception {
1413
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1414
        List<List<?>> rows = new ArrayList<>();
28339 tejbeer 1415
 
32251 amit.gupta 1416
        FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoDetails.getFofoId());
1417
        List<FocoSaleReportModel> focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoDetails.getFofoId(),
1418
                fs.getCode(), startDate.atStartOfDay(), endDate.atStartOfDay());
1419
        LOGGER.info("FocoSaleReportList {}", focoSaleReportList);
28339 tejbeer 1420
 
32251 amit.gupta 1421
        for (FocoSaleReportModel fsr : focoSaleReportList) {
28339 tejbeer 1422
 
32251 amit.gupta 1423
            rows.add(Arrays.asList(fsr.getCode(), fsr.getName(), fsr.getCity(), fsr.getState(), fsr.getRegion(),
1424
                    fsr.getItemId(), fsr.getBrand(), fsr.getModelName(), fsr.getModelNumber(), fsr.getColor(),
1425
                    fsr.getQuantity(), fsr.getDp(), fsr.getSellingPrice(), fsr.getMop(), fsr.getSerialNumber(),
1426
                    FormattingUtils.format(fsr.getCreateDate()), fsr.getCustomerName(), fsr.getCustomerPhone(),
1427
                    fsr.getCustomerCity(), fsr.getCustomerPincode(), fsr.getInvoiceNumber(), fsr.getPurchaseReference(),
1428
                    fsr.getCustomerGstNumber(), FormattingUtils.format(fsr.getCancelledTimestamp()),
1429
                    FormattingUtils.format(fsr.getGrnCompleteDate()), fsr.getHygieneRating(), fsr.getRating(),
1430
                    fsr.getStatus(), fsr.getRemark(), FormattingUtils.format(fsr.getCreatedTimestamp()),
1431
                    FormattingUtils.format(fsr.getDisposedTimestamp()),
1432
                    FormattingUtils.format(fsr.getNextTimestamp()),
1433
                    FormattingUtils.format(fsr.getActivationTimestamp()),
1434
                    FormattingUtils.format(fsr.getActivationTimestamp()), fsr.getLabel()));
28339 tejbeer 1435
 
32251 amit.gupta 1436
        }
28339 tejbeer 1437
 
32251 amit.gupta 1438
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1439
                Arrays.asList("Code", "Name", "City", "State", "Region", "Item Id", "Brand", "Model Name",
1440
                        "Model Number", "Color", "Quantity", "Dp", "Selling_Price", "mop", "Serial Number",
1441
                        "Create Date", "Customer Name", "Customer Phone", "Customer City", " Customer Pincode",
1442
                        "Invoice  Number", "Purchase Reference", "Customer Gst Number", " Cancelled Timestamp",
1443
                        "GRN Complete Date", "Hygiene Rating", "Rating", "Status", "Remark", "Created Timestamp",
1444
                        "Disposed Timestamp", " Next Timestamp", "Activation Timestamp", "Create Timestamp", "Label"),
1445
                rows);
28339 tejbeer 1446
 
32251 amit.gupta 1447
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Franchisee Sales Report");
28339 tejbeer 1448
 
32251 amit.gupta 1449
        return responseEntity;
28339 tejbeer 1450
 
32251 amit.gupta 1451
    }
28339 tejbeer 1452
 
32251 amit.gupta 1453
    @RequestMapping(value = "/downloadWalletSummaryReport", method = RequestMethod.GET)
1454
    public ResponseEntity<?> getDownloadWalletSummaryReport(HttpServletRequest request,
1455
                                                            @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1456
                                                            @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1457
            throws Exception {
28339 tejbeer 1458
 
32251 amit.gupta 1459
        List<List<?>> rows = new ArrayList<>();
1460
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1461
        List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository.selectWalletSummaryReport(
1462
                fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1463
        LOGGER.info("walletSummartList {}", walletSummartList);
1464
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
28339 tejbeer 1465
 
32251 amit.gupta 1466
        for (WalletSummaryReportModel walletSummary : walletSummartList) {
28344 tejbeer 1467
 
32251 amit.gupta 1468
            rows.add(Arrays.asList(walletSummary.getId(), walletSummary.getCode(), walletSummary.getName(),
1469
                    walletSummary.getEmail(), walletSummary.getPhone(), walletSummary.getAmount(),
1470
                    walletSummary.getRefundableAmount(), walletSummary.getReference(), walletSummary.getReferenceType(),
1471
                    FormattingUtils.format(walletSummary.getBusinessTimestamp())));
28350 tejbeer 1472
 
32251 amit.gupta 1473
        }
28350 tejbeer 1474
 
32251 amit.gupta 1475
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
1476
                .getCSVByteStream(Arrays.asList("Id", "Code", "Name", "Email", "Phone", "Amount", "Refundable_amount",
1477
                        "Reference", "Reference_type", "Business_timestamp", "Description"), rows);
28344 tejbeer 1478
 
32251 amit.gupta 1479
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Wallet Statement Report");
27819 tejbeer 1480
 
32251 amit.gupta 1481
        return responseEntity;
27819 tejbeer 1482
 
32251 amit.gupta 1483
    }
33067 shampa 1484
    @RequestMapping(value = "/walletSummaryFetchReportByDate", method = RequestMethod.GET)
1485
    public String getwalletSummaryFetchReport(HttpServletRequest request,
1486
                                             @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1487
                                             @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1488
            throws Exception {
1489
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28358 tejbeer 1490
 
33067 shampa 1491
        List<List<?>> rows = new ArrayList<>();
1492
 
1493
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1494
        List<WalletSummaryReportModel> walletSummaryReports = fofoOrderRepository
1495
                .selectWalletSummaryReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1496
        LOGGER.info("walletSummaryReports {}", walletSummaryReports);
1497
 
1498
        model.addAttribute("startDate",startDate);
1499
        model.addAttribute("endDate", LocalDate.now());
1500
        model.addAttribute("walletSummaryReports", walletSummaryReports);
1501
 
1502
        return "wallet-summary-report";
1503
    }
1504
 
32251 amit.gupta 1505
    @RequestMapping(value = "/walletSummaryReport", method = RequestMethod.GET)
1506
    public String getWalletSummaryReport(HttpServletRequest request, Model model) throws Exception {
1507
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28358 tejbeer 1508
 
32251 amit.gupta 1509
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1510
        LocalDateTime currentStartMonth = currentDate.minusDays(30).toLocalDate().atStartOfDay();
28420 tejbeer 1511
 
32251 amit.gupta 1512
        List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository
1513
                .selectWalletSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1514
        LOGGER.info("walletSummartList {}", walletSummartList);
28420 tejbeer 1515
 
32251 amit.gupta 1516
        model.addAttribute("startDate", currentDate.minusDays(30).toLocalDate());
1517
        model.addAttribute("endDate", LocalDate.now());
1518
        model.addAttribute("walletSummartList", walletSummartList);
28358 tejbeer 1519
 
32251 amit.gupta 1520
        return "wallet-summary-report";
1521
    }
30426 tejbeer 1522
 
32251 amit.gupta 1523
    @RequestMapping(value = "/pendingIndentReport", method = RequestMethod.GET)
1524
    public String getPendingIndentReport(HttpServletRequest request, Model model) throws Exception {
1525
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28358 tejbeer 1526
 
32251 amit.gupta 1527
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1528
        LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();
28358 tejbeer 1529
 
32251 amit.gupta 1530
        List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
1531
                .selectPendingIndentReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1532
        LOGGER.info("pendingIndentReports {}", pendingIndentReports);
28358 tejbeer 1533
 
32251 amit.gupta 1534
        model.addAttribute("startDate", currentDate.minusMonths(2).toLocalDate());
1535
        model.addAttribute("endDate", LocalDate.now());
1536
        model.addAttribute("pendingIndentReports", pendingIndentReports);
30426 tejbeer 1537
 
32251 amit.gupta 1538
        return "pending-indent-report";
1539
    }
33067 shampa 1540
    @RequestMapping(value = "/pendingIndentFetchReportByDate", method = RequestMethod.GET)
1541
    public String getpendingIndentFetchReport(HttpServletRequest request,
1542
                                             @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1543
                                             @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1544
            throws Exception {
1545
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1546
 
33067 shampa 1547
        List<List<?>> rows = new ArrayList<>();
1548
 
1549
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1550
        List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
1551
                .selectPendingIndentReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1552
        LOGGER.info("pendingIndentReports {}", pendingIndentReports);
1553
 
1554
        model.addAttribute("startDate",startDate);
1555
        model.addAttribute("endDate", LocalDate.now());
1556
        model.addAttribute("pendingIndentReports", pendingIndentReports);
1557
 
1558
        return "pending-indent-report";
1559
    }
1560
 
1561
 
32251 amit.gupta 1562
    @RequestMapping(value = "/pendingIndentReportDownload", method = RequestMethod.GET)
33067 shampa 1563
    public ResponseEntity<?> getPendingIndentReportDownload(HttpServletRequest request,
1564
                                                            @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1565
                                                            @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1566
            throws Exception{
32251 amit.gupta 1567
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
33067 shampa 1568
        /*LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1569
        LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();*/
32251 amit.gupta 1570
        List<List<?>> rows = new ArrayList<>();
1571
        List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
33067 shampa 1572
                .selectPendingIndentReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
32251 amit.gupta 1573
        LOGGER.info("pendingIndentReports {}", pendingIndentReports);
1574
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
28377 tejbeer 1575
 
32251 amit.gupta 1576
        for (PendingIndentReportModel pir : pendingIndentReports) {
30426 tejbeer 1577
 
32251 amit.gupta 1578
            rows.add(Arrays.asList(pir.getTransactionId(), pir.getOrderId(),
1579
                    pir.getCreatTimestamp().format(dateTimeFormatter), pir.getItemId(), pir.getBrand(),
1580
                    pir.getModelName(), pir.getModelNumber(), pir.getColor(), pir.getQuantity(), pir.getUnitPrice(),
1581
                    pir.getWalletAmount(), pir.getStatus(), pir.getInvoiceNumber(),
1582
                    pir.getBillingTimestamp().format(dateTimeFormatter)));
30426 tejbeer 1583
 
32251 amit.gupta 1584
        }
30426 tejbeer 1585
 
32251 amit.gupta 1586
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList(
1587
                "Transaction Id", "Order Id", "Created_At", "Item_Id", "Brand", "Model Name", "Model Number", "Color",
1588
                "Quantity", "Unit Price", "Wallet Deduction", "Status", "Invoice Number", "Billing Timestamp"), rows);
30162 manish 1589
 
32251 amit.gupta 1590
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Order Status Summary Report");
31384 tejbeer 1591
 
32251 amit.gupta 1592
        return responseEntity;
1593
    }
30162 manish 1594
 
32251 amit.gupta 1595
    @RequestMapping(value = "/schemePayoutReport", method = RequestMethod.GET)
1596
    public String getSchemePayoutReport(HttpServletRequest request, Model model) throws Exception {
1597
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30162 manish 1598
 
32251 amit.gupta 1599
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1600
        LocalDateTime startDate = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1601
 
32251 amit.gupta 1602
        List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
1603
                .selectSchemePayoutReport(fofoDetails.getFofoId(), startDate, currentDate);
1604
        LOGGER.info("schemePayoutReports {}", schemePayoutReports);
30162 manish 1605
 
33010 shampa 1606
 
1607
 
1608
       model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1609
        model.addAttribute("endDate", LocalDate.now());
1610
        model.addAttribute("schemePayoutReports", schemePayoutReports);
1611
 
1612
        return "scheme-payout-report";
1613
    }
1614
    @RequestMapping(value = "/schemePayoutFetchReportByDate", method = RequestMethod.GET)
1615
    public String getschemePayoutFetchReport(HttpServletRequest request,
1616
                                            @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1617
                                            @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1618
            throws Exception {
1619
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1620
 
1621
        List<List<?>> rows = new ArrayList<>();
1622
 
1623
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1624
        List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
1625
                .selectSchemePayoutReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1626
        LOGGER.info("schemePayoutReports {}", schemePayoutReports);
1627
 
33067 shampa 1628
        model.addAttribute("startDate",startDate);
32251 amit.gupta 1629
        model.addAttribute("endDate", LocalDate.now());
1630
        model.addAttribute("schemePayoutReports", schemePayoutReports);
30162 manish 1631
 
32251 amit.gupta 1632
        return "scheme-payout-report";
1633
    }
30162 manish 1634
 
33010 shampa 1635
    @RequestMapping(value = "/offerPayoutReport", method = RequestMethod.GET)
1636
    public String getOfferPayoutReport(HttpServletRequest request, Model model) throws Exception {
1637
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1638
 
1639
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1640
        LocalDateTime startDate = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
1641
 
1642
        List<OfferPayoutDumpReportModel> offerPayoutDumpReports = fofoOrderRepository
1643
                .selectOfferPayoutDumpReport(fofoDetails.getFofoId(), startDate, currentDate);
1644
        LOGGER.info("offerPayoutDumpReports {}", offerPayoutDumpReports);
1645
 
1646
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1647
        model.addAttribute("endDate", LocalDate.now());
1648
        model.addAttribute("offerPayoutDumpReports", offerPayoutDumpReports);
1649
 
1650
        return "offer-payout-dump-report";
1651
    }
1652
    @RequestMapping(value = "/offerPayoutFetchReportByDate", method = RequestMethod.GET)
1653
    public String getOfferPayoutFetchReport(HttpServletRequest request,
1654
                                                       @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1655
                                                       @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1656
            throws Exception {
1657
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1658
 
1659
        List<List<?>> rows = new ArrayList<>();
1660
 
1661
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1662
        List<OfferPayoutDumpReportModel> offerPayoutDumpReports = fofoOrderRepository
1663
                .selectOfferPayoutDumpReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1664
        LOGGER.info("offerPayoutDumpReports {}", offerPayoutDumpReports);
1665
 
33067 shampa 1666
        model.addAttribute("startDate",startDate);
33010 shampa 1667
        model.addAttribute("endDate", LocalDate.now());
1668
        model.addAttribute("offerPayoutDumpReports", offerPayoutDumpReports);
1669
 
1670
 
1671
        return "offer-payout-dump-report";
1672
    }
1673
 
1674
 
32251 amit.gupta 1675
    @RequestMapping(value = "/selectPartnerBillingSummaryReport", method = RequestMethod.GET)
1676
    public String getselectPartnerBillingSummaryReport(HttpServletRequest request, Model model) throws Exception {
1677
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1678
 
32251 amit.gupta 1679
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1680
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1681
 
32251 amit.gupta 1682
        List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
1683
                .selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1684
 
32251 amit.gupta 1685
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1686
        model.addAttribute("endDate", LocalDate.now());
1687
        model.addAttribute("partnerBillingSummaryReports", partnerBillingSummaryReports);
30162 manish 1688
 
32251 amit.gupta 1689
        return "partner-billing-summary-report";
1690
    }
30162 manish 1691
 
32251 amit.gupta 1692
    @RequestMapping(value = "/priceDropReport", method = RequestMethod.GET)
1693
    public String getSelectPriceDropReport(HttpServletRequest request, Model model) throws Exception {
1694
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30162 manish 1695
 
32251 amit.gupta 1696
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1697
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1698
 
32251 amit.gupta 1699
        List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1700
                currentStartMonth, currentDate);
30162 manish 1701
 
32251 amit.gupta 1702
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1703
        model.addAttribute("endDate", LocalDate.now());
1704
        model.addAttribute("priceDropReports", priceDropReports);
30162 manish 1705
 
32251 amit.gupta 1706
        return "price-drop-report";
1707
    }
33067 shampa 1708
    @RequestMapping(value = "/priceDropFetchReportByDate", method = RequestMethod.GET)
1709
    public String getpriceDropFetchReportByDate(HttpServletRequest request,
1710
                                                @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1711
                                                @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1712
            throws Exception {
30426 tejbeer 1713
 
33067 shampa 1714
            LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1715
 
1716
            List<List<?>> rows = new ArrayList<>();
1717
            LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1718
            List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1719
                    startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1720
 
1721
                 model.addAttribute("startDate",startDate);
1722
                model.addAttribute("endDate", LocalDate.now());
1723
                model.addAttribute("priceDropReports", priceDropReports);
1724
 
1725
        return "price-drop-report";
1726
    }
1727
 
1728
 
32251 amit.gupta 1729
    @RequestMapping(value = "/downloadPriceDropReport", method = RequestMethod.GET)
1730
    public ResponseEntity<?> getSelectDownloadPriceDropReport(HttpServletRequest request,
1731
                                                              @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1732
                                                              @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1733
            throws Exception {
1734
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30162 manish 1735
 
32251 amit.gupta 1736
        List<List<?>> rows = new ArrayList<>();
1737
        List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1738
                startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
30426 tejbeer 1739
 
32251 amit.gupta 1740
        for (PriceDropReportModel pdr : priceDropReports) {
30426 tejbeer 1741
 
32251 amit.gupta 1742
            rows.add(Arrays.asList(pdr.getCode(), pdr.getId(), pdr.getBrand(), pdr.getModelName(), pdr.getModelNumber(),
1743
                    pdr.getAffectedOn(), pdr.getAmount(), pdr.getPartnerPayout(), pdr.getImei(), pdr.getStatus(),
1744
                    pdr.getUpdateTimestamp(), pdr.getRejectionReason()));
30426 tejbeer 1745
 
32251 amit.gupta 1746
        }
1747
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
1748
                .getCSVByteStream(Arrays.asList("code", "Price_Drop_Id", "brand", "model_name", "model_number",
1749
                        "affected_on", "amount", "partner_payout", "Imei", "status", "processed_on", "Reason"), rows);
30426 tejbeer 1750
 
32251 amit.gupta 1751
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "price drop report");
30162 manish 1752
 
32251 amit.gupta 1753
        return responseEntity;
30426 tejbeer 1754
 
32251 amit.gupta 1755
    }
30426 tejbeer 1756
 
32251 amit.gupta 1757
    @RequestMapping(value = "/downloadPartnerBillingSummaryReport", method = RequestMethod.GET)
1758
    public ResponseEntity<?> getdownloadPartnerBillingSummaryReport(HttpServletRequest request,
1759
                                                                    @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1760
                                                                    @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1761
            throws Exception {
30426 tejbeer 1762
 
32251 amit.gupta 1763
        List<List<?>> rows = new ArrayList<>();
1764
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1765
 
32251 amit.gupta 1766
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1767
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1768
 
32251 amit.gupta 1769
        List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
1770
                .selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), startDate.atStartOfDay(),
1771
                        endDate.atTime(LocalTime.MAX));
30426 tejbeer 1772
 
32251 amit.gupta 1773
        for (PartnerBillingSummaryModel pbsr : partnerBillingSummaryReports) {
30426 tejbeer 1774
 
32251 amit.gupta 1775
            rows.add(Arrays.asList(pbsr.getId(),
1776
                    FormattingUtils.format(pbsr.getCreateTimestamp()),
1777
                    FormattingUtils.format(pbsr.getBillingTimestamp()),
1778
                    FormattingUtils.format(pbsr.getDeliveryTimestamp()),
1779
                    FormattingUtils.format(pbsr.getPartnerGrnTimestamp()),
1780
                    pbsr.getTransactionId(),
1781
                    pbsr.getLogisticsTransactionId(), pbsr.getAirwayBillNumber(), pbsr.getStatusSubGroup(),
1782
                    pbsr.getStatusName(), pbsr.getRetailerId(), pbsr.getRetailerName(), pbsr.getItemId(),
1783
                    pbsr.getBrand(), pbsr.getModelName(), pbsr.getModelNumber(), pbsr.getColor(), pbsr.getUnitPrice(),
32908 shampa 1784
                    pbsr.getQuantity(), pbsr.getTotalPrice(), pbsr.getInvoiceNumber(),pbsr.getSellerName(),pbsr.getGstNumber(),pbsr.getHsnCode(), pbsr.getIgstRate(),
32251 amit.gupta 1785
                    pbsr.getCgstRate(), pbsr.getSgstRate()));
30162 manish 1786
 
32251 amit.gupta 1787
        }
30426 tejbeer 1788
 
32251 amit.gupta 1789
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("OrderId",
1790
                "Created On", "Billed On", "Delivered On", "Grned On", "Transaction_id", "master_order_id",
1791
                "airwaybill_no", "statusSubGroupp", "statusName", "customer_id", "customer_name", "Item_Id", "brand",
1792
                "model_name", "model_number", "color", "selling_price", "Quantity", "total_price", "invoice_number",
32908 shampa 1793
                "seller_name","gst_number","hsn_code","igstrate", "cgstrate", "sgstrate"), rows);
30426 tejbeer 1794
 
32251 amit.gupta 1795
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Billing Statement Report");
30426 tejbeer 1796
 
32251 amit.gupta 1797
        return responseEntity;
30162 manish 1798
 
33010 shampa 1799
 
32251 amit.gupta 1800
    }
30426 tejbeer 1801
 
32251 amit.gupta 1802
    @RequestMapping(value = "/invoiceSchemeOutSummaryReport", method = RequestMethod.GET)
1803
    public String getInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model) throws Exception {
1804
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1805
 
32251 amit.gupta 1806
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1807
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1808
 
32251 amit.gupta 1809
        List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
1810
                .selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1811
        LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
30426 tejbeer 1812
 
32251 amit.gupta 1813
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1814
        model.addAttribute("endDate", LocalDate.now());
1815
        model.addAttribute("focoSchemeOutReports", focoSchemeOutReports);
30426 tejbeer 1816
 
32251 amit.gupta 1817
        return "invoicewise-scheme-out-report";
1818
    }
30426 tejbeer 1819
 
32251 amit.gupta 1820
    @RequestMapping(value = "/downloadInvoiceSchemeOutSummaryReport", method = RequestMethod.GET)
1821
    public ResponseEntity<?> getDownloadInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model)
1822
            throws Exception {
1823
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1824
 
32251 amit.gupta 1825
        List<List<?>> rows = new ArrayList<>();
1826
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1827
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1828
 
32251 amit.gupta 1829
        List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
1830
                .selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1831
        LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
30426 tejbeer 1832
 
32251 amit.gupta 1833
        for (FocoSchemeOutReportModel fsor : focoSchemeOutReports) {
1834
            rows.add(Arrays.asList(fsor.getInvoiceNumber(), fsor.getQuantity(), fsor.getBrand(), fsor.getModelName(),
1835
                    fsor.getModelNumber(), fsor.getColor(), fsor.getAmount()));
30426 tejbeer 1836
 
32251 amit.gupta 1837
        }
30426 tejbeer 1838
 
32251 amit.gupta 1839
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1840
                Arrays.asList("InvoiceNumber", "Quantity", "Brand", "Model Name", "Model Number", "Color", "Amount"),
1841
                rows);
30426 tejbeer 1842
 
32251 amit.gupta 1843
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows,
1844
                "invoice wise scheme out Summary Report");
30426 tejbeer 1845
 
32251 amit.gupta 1846
        return responseEntity;
1847
    }
30426 tejbeer 1848
 
33010 shampa 1849
   @RequestMapping(value = "/schemePayoutReportDownload", method = RequestMethod.GET)
32251 amit.gupta 1850
    public ResponseEntity<?> getSchemePayoutReportDownload(HttpServletRequest request,
1851
                                                           @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1852
                                                           @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1853
            throws Exception {
1854
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1855
 
32251 amit.gupta 1856
        List<List<?>> rows = new ArrayList<>();
30162 manish 1857
 
33010 shampa 1858
 
32251 amit.gupta 1859
        List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
33010 shampa 1860
                .selectSchemePayoutReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
32251 amit.gupta 1861
        LOGGER.info("schemePayoutReports {}", schemePayoutReports);
30426 tejbeer 1862
 
32251 amit.gupta 1863
        for (SchemePayoutReportModel spr : schemePayoutReports) {
30426 tejbeer 1864
 
32251 amit.gupta 1865
            rows.add(Arrays.asList(spr.getId(), spr.getSerialNumber(), spr.getBrand(), spr.getModelName(),
1866
                    spr.getModelNumber(), spr.getColor(), spr.getSchemeInDp(), spr.getSchemeOutDp(), spr.getSchemeId(),
1867
                    spr.getName(), spr.getType(), spr.getAmountType(), spr.getPurchaseReference(),
1868
                    spr.getInvoiceNumber(), spr.getSioAmount(), spr.getStatus(), spr.getStatusDescription(),
1869
                    spr.getCreateTimestamp(), spr.getRolledBackTimestamp()));
30162 manish 1870
 
32251 amit.gupta 1871
        }
1872
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("Item_Id",
1873
                "serial_number", "Brand", "Model Name", "Model Number", "Color", "Scheme_IN_DP", "Scheme_out_dp",
1874
                "Scheme_Id", "Name", "Type", "amount", "Purchase_Invoice", "SALE_INOVOICE", "Amount", "status",
1875
                "description", "create_timestamp", "rolled_back_timestamp"), rows);
30162 manish 1876
 
32251 amit.gupta 1877
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Scheme Payout Summary Report");
30426 tejbeer 1878
 
32251 amit.gupta 1879
        return responseEntity;
1880
    }
30426 tejbeer 1881
 
33010 shampa 1882
 
1883
 
1884
    @RequestMapping(value = "/offerPayoutDumpReportDownload", method = RequestMethod.GET)
1885
    public ResponseEntity<?> getOfferPayoutDumpReportDownload(HttpServletRequest request,
1886
                                                           @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1887
                                                           @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1888
            throws Exception {
1889
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1890
 
1891
        List<List<?>> rows = new ArrayList<>();
1892
 
1893
 
1894
        List<OfferPayoutDumpReportModel> offerPayoutReports = fofoOrderRepository
1895
                .selectOfferPayoutDumpReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1896
 
1897
 
1898
        for (OfferPayoutDumpReportModel opdr : offerPayoutReports) {
1899
 
1900
            rows.add(Arrays.asList(opdr.getId(),  opdr.getBrand(), opdr.getModelName(),
1901
                    opdr.getModelNumber(), opdr.getColor(), opdr.getSerialNumber(), opdr.getOfferId(),
1902
                    opdr.getName(), opdr.getType(),
1903
                    opdr.getSlabAmount(), opdr.getAmount(),opdr.getDescription(),
1904
                    opdr.getCreateTimestamp(), opdr.getRejectTimestamp()));
1905
 
1906
        }
1907
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("Id",
1908
                "Brand", "Model Name", "Model Number", "Color","Serial number",
1909
                "Offer Id", "Name", "Type", "Slab Amount","Amount",
1910
                "Description", "Credited On", "Rejected On"), rows);
1911
 
1912
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Offer Payout Summary Report");
1913
 
1914
        return responseEntity;
1915
    }
1916
 
1917
 
1918
 
1919
 
32251 amit.gupta 1920
    @GetMapping("/getAllOnlineOrder")
1921
    public String getAllOrders(HttpServletRequest request, @RequestParam(required = false) LocalDate date, Model model)
1922
            throws ProfitMandiBusinessException {
1923
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1924
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1925
        if (date == null) {
1926
            date = LocalDate.now().minusDays(3);
1927
        }
30177 manish 1928
 
32251 amit.gupta 1929
        LOGGER.info("date" + date);
1930
        List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1931
                .collect(Collectors.toList());
30426 tejbeer 1932
 
32251 amit.gupta 1933
        Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
30426 tejbeer 1934
 
32251 amit.gupta 1935
        Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1936
                .filter(x -> x != null).collect(Collectors.toList()).stream()
1937
                .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
30426 tejbeer 1938
 
32251 amit.gupta 1939
        model.addAttribute("customRetailersMap", customRetailersMap);
30177 manish 1940
 
32251 amit.gupta 1941
        List<PendingOrderItem> pendingOrderItem = null;
30426 tejbeer 1942
 
32251 amit.gupta 1943
        pendingOrderItem = pendingOrderItemRepository.selectAll(date.atStartOfDay(), LocalDateTime.now());
30177 manish 1944
 
32251 amit.gupta 1945
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, 0);
30177 manish 1946
 
32251 amit.gupta 1947
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1948
        model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
1949
        model.addAttribute("date", date);
1950
        model.addAttribute("isAdmin", isAdmin);
1951
        return "online-all-order-item";
1952
    }
32409 amit.gupta 1953
}
32405 jai.hind 1954
 
1955
 
1956
 
1957
 
1958