Subversion Repositories SmartDukaan

Rev

Rev 32908 | Rev 33067 | 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
 
1401
        model.addAttribute("startDate", currentDate.minusDays(30).toLocalDate());
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
    }
28358 tejbeer 1484
 
32251 amit.gupta 1485
    @RequestMapping(value = "/walletSummaryReport", method = RequestMethod.GET)
1486
    public String getWalletSummaryReport(HttpServletRequest request, Model model) throws Exception {
1487
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28358 tejbeer 1488
 
32251 amit.gupta 1489
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1490
        LocalDateTime currentStartMonth = currentDate.minusDays(30).toLocalDate().atStartOfDay();
28420 tejbeer 1491
 
32251 amit.gupta 1492
        List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository
1493
                .selectWalletSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1494
        LOGGER.info("walletSummartList {}", walletSummartList);
28420 tejbeer 1495
 
32251 amit.gupta 1496
        model.addAttribute("startDate", currentDate.minusDays(30).toLocalDate());
1497
        model.addAttribute("endDate", LocalDate.now());
1498
        model.addAttribute("walletSummartList", walletSummartList);
28358 tejbeer 1499
 
32251 amit.gupta 1500
        return "wallet-summary-report";
1501
    }
30426 tejbeer 1502
 
32251 amit.gupta 1503
    @RequestMapping(value = "/pendingIndentReport", method = RequestMethod.GET)
1504
    public String getPendingIndentReport(HttpServletRequest request, Model model) throws Exception {
1505
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28358 tejbeer 1506
 
32251 amit.gupta 1507
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1508
        LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();
28358 tejbeer 1509
 
32251 amit.gupta 1510
        List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
1511
                .selectPendingIndentReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1512
        LOGGER.info("pendingIndentReports {}", pendingIndentReports);
28358 tejbeer 1513
 
32251 amit.gupta 1514
        model.addAttribute("startDate", currentDate.minusMonths(2).toLocalDate());
1515
        model.addAttribute("endDate", LocalDate.now());
1516
        model.addAttribute("pendingIndentReports", pendingIndentReports);
30426 tejbeer 1517
 
32251 amit.gupta 1518
        return "pending-indent-report";
1519
    }
30426 tejbeer 1520
 
32251 amit.gupta 1521
    @RequestMapping(value = "/pendingIndentReportDownload", method = RequestMethod.GET)
1522
    public ResponseEntity<?> getPendingIndentReportDownload(HttpServletRequest request, Model model) throws Exception {
1523
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1524
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1525
        LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();
1526
        List<List<?>> rows = new ArrayList<>();
1527
        List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
1528
                .selectPendingIndentReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1529
        LOGGER.info("pendingIndentReports {}", pendingIndentReports);
1530
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
28377 tejbeer 1531
 
32251 amit.gupta 1532
        for (PendingIndentReportModel pir : pendingIndentReports) {
30426 tejbeer 1533
 
32251 amit.gupta 1534
            rows.add(Arrays.asList(pir.getTransactionId(), pir.getOrderId(),
1535
                    pir.getCreatTimestamp().format(dateTimeFormatter), pir.getItemId(), pir.getBrand(),
1536
                    pir.getModelName(), pir.getModelNumber(), pir.getColor(), pir.getQuantity(), pir.getUnitPrice(),
1537
                    pir.getWalletAmount(), pir.getStatus(), pir.getInvoiceNumber(),
1538
                    pir.getBillingTimestamp().format(dateTimeFormatter)));
30426 tejbeer 1539
 
32251 amit.gupta 1540
        }
30426 tejbeer 1541
 
32251 amit.gupta 1542
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList(
1543
                "Transaction Id", "Order Id", "Created_At", "Item_Id", "Brand", "Model Name", "Model Number", "Color",
1544
                "Quantity", "Unit Price", "Wallet Deduction", "Status", "Invoice Number", "Billing Timestamp"), rows);
30162 manish 1545
 
32251 amit.gupta 1546
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Order Status Summary Report");
31384 tejbeer 1547
 
32251 amit.gupta 1548
        return responseEntity;
1549
    }
30162 manish 1550
 
32251 amit.gupta 1551
    @RequestMapping(value = "/schemePayoutReport", method = RequestMethod.GET)
1552
    public String getSchemePayoutReport(HttpServletRequest request, Model model) throws Exception {
1553
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30162 manish 1554
 
32251 amit.gupta 1555
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1556
        LocalDateTime startDate = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1557
 
32251 amit.gupta 1558
        List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
1559
                .selectSchemePayoutReport(fofoDetails.getFofoId(), startDate, currentDate);
1560
        LOGGER.info("schemePayoutReports {}", schemePayoutReports);
30162 manish 1561
 
33010 shampa 1562
 
1563
 
1564
       model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1565
        model.addAttribute("endDate", LocalDate.now());
1566
        model.addAttribute("schemePayoutReports", schemePayoutReports);
1567
 
1568
        return "scheme-payout-report";
1569
    }
1570
    @RequestMapping(value = "/schemePayoutFetchReportByDate", method = RequestMethod.GET)
1571
    public String getschemePayoutFetchReport(HttpServletRequest request,
1572
                                            @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1573
                                            @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1574
            throws Exception {
1575
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1576
 
1577
        List<List<?>> rows = new ArrayList<>();
1578
 
1579
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1580
        List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
1581
                .selectSchemePayoutReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1582
        LOGGER.info("schemePayoutReports {}", schemePayoutReports);
1583
 
32251 amit.gupta 1584
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1585
        model.addAttribute("endDate", LocalDate.now());
1586
        model.addAttribute("schemePayoutReports", schemePayoutReports);
30162 manish 1587
 
32251 amit.gupta 1588
        return "scheme-payout-report";
1589
    }
30162 manish 1590
 
33010 shampa 1591
    @RequestMapping(value = "/offerPayoutReport", method = RequestMethod.GET)
1592
    public String getOfferPayoutReport(HttpServletRequest request, Model model) throws Exception {
1593
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1594
 
1595
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1596
        LocalDateTime startDate = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
1597
 
1598
        List<OfferPayoutDumpReportModel> offerPayoutDumpReports = fofoOrderRepository
1599
                .selectOfferPayoutDumpReport(fofoDetails.getFofoId(), startDate, currentDate);
1600
        LOGGER.info("offerPayoutDumpReports {}", offerPayoutDumpReports);
1601
 
1602
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1603
        model.addAttribute("endDate", LocalDate.now());
1604
        model.addAttribute("offerPayoutDumpReports", offerPayoutDumpReports);
1605
 
1606
        return "offer-payout-dump-report";
1607
    }
1608
    @RequestMapping(value = "/offerPayoutFetchReportByDate", method = RequestMethod.GET)
1609
    public String getOfferPayoutFetchReport(HttpServletRequest request,
1610
                                                       @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1611
                                                       @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1612
            throws Exception {
1613
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1614
 
1615
        List<List<?>> rows = new ArrayList<>();
1616
 
1617
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1618
        List<OfferPayoutDumpReportModel> offerPayoutDumpReports = fofoOrderRepository
1619
                .selectOfferPayoutDumpReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1620
        LOGGER.info("offerPayoutDumpReports {}", offerPayoutDumpReports);
1621
 
1622
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1623
        model.addAttribute("endDate", LocalDate.now());
1624
        model.addAttribute("offerPayoutDumpReports", offerPayoutDumpReports);
1625
 
1626
 
1627
        return "offer-payout-dump-report";
1628
    }
1629
 
1630
 
32251 amit.gupta 1631
    @RequestMapping(value = "/selectPartnerBillingSummaryReport", method = RequestMethod.GET)
1632
    public String getselectPartnerBillingSummaryReport(HttpServletRequest request, Model model) throws Exception {
1633
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1634
 
32251 amit.gupta 1635
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1636
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1637
 
32251 amit.gupta 1638
        List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
1639
                .selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1640
 
32251 amit.gupta 1641
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1642
        model.addAttribute("endDate", LocalDate.now());
1643
        model.addAttribute("partnerBillingSummaryReports", partnerBillingSummaryReports);
30162 manish 1644
 
32251 amit.gupta 1645
        return "partner-billing-summary-report";
1646
    }
30162 manish 1647
 
32251 amit.gupta 1648
    @RequestMapping(value = "/priceDropReport", method = RequestMethod.GET)
1649
    public String getSelectPriceDropReport(HttpServletRequest request, Model model) throws Exception {
1650
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30162 manish 1651
 
32251 amit.gupta 1652
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1653
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1654
 
32251 amit.gupta 1655
        List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1656
                currentStartMonth, currentDate);
30162 manish 1657
 
32251 amit.gupta 1658
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1659
        model.addAttribute("endDate", LocalDate.now());
1660
        model.addAttribute("priceDropReports", priceDropReports);
30162 manish 1661
 
32251 amit.gupta 1662
        return "price-drop-report";
1663
    }
30426 tejbeer 1664
 
32251 amit.gupta 1665
    @RequestMapping(value = "/downloadPriceDropReport", method = RequestMethod.GET)
1666
    public ResponseEntity<?> getSelectDownloadPriceDropReport(HttpServletRequest request,
1667
                                                              @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1668
                                                              @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1669
            throws Exception {
1670
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30162 manish 1671
 
32251 amit.gupta 1672
        List<List<?>> rows = new ArrayList<>();
1673
        List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1674
                startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
30426 tejbeer 1675
 
32251 amit.gupta 1676
        for (PriceDropReportModel pdr : priceDropReports) {
30426 tejbeer 1677
 
32251 amit.gupta 1678
            rows.add(Arrays.asList(pdr.getCode(), pdr.getId(), pdr.getBrand(), pdr.getModelName(), pdr.getModelNumber(),
1679
                    pdr.getAffectedOn(), pdr.getAmount(), pdr.getPartnerPayout(), pdr.getImei(), pdr.getStatus(),
1680
                    pdr.getUpdateTimestamp(), pdr.getRejectionReason()));
30426 tejbeer 1681
 
32251 amit.gupta 1682
        }
1683
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
1684
                .getCSVByteStream(Arrays.asList("code", "Price_Drop_Id", "brand", "model_name", "model_number",
1685
                        "affected_on", "amount", "partner_payout", "Imei", "status", "processed_on", "Reason"), rows);
30426 tejbeer 1686
 
32251 amit.gupta 1687
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "price drop report");
30162 manish 1688
 
32251 amit.gupta 1689
        return responseEntity;
30426 tejbeer 1690
 
32251 amit.gupta 1691
    }
30426 tejbeer 1692
 
32251 amit.gupta 1693
    @RequestMapping(value = "/downloadPartnerBillingSummaryReport", method = RequestMethod.GET)
1694
    public ResponseEntity<?> getdownloadPartnerBillingSummaryReport(HttpServletRequest request,
1695
                                                                    @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1696
                                                                    @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1697
            throws Exception {
30426 tejbeer 1698
 
32251 amit.gupta 1699
        List<List<?>> rows = new ArrayList<>();
1700
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1701
 
32251 amit.gupta 1702
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1703
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1704
 
32251 amit.gupta 1705
        List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
1706
                .selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), startDate.atStartOfDay(),
1707
                        endDate.atTime(LocalTime.MAX));
30426 tejbeer 1708
 
32251 amit.gupta 1709
        for (PartnerBillingSummaryModel pbsr : partnerBillingSummaryReports) {
30426 tejbeer 1710
 
32251 amit.gupta 1711
            rows.add(Arrays.asList(pbsr.getId(),
1712
                    FormattingUtils.format(pbsr.getCreateTimestamp()),
1713
                    FormattingUtils.format(pbsr.getBillingTimestamp()),
1714
                    FormattingUtils.format(pbsr.getDeliveryTimestamp()),
1715
                    FormattingUtils.format(pbsr.getPartnerGrnTimestamp()),
1716
                    pbsr.getTransactionId(),
1717
                    pbsr.getLogisticsTransactionId(), pbsr.getAirwayBillNumber(), pbsr.getStatusSubGroup(),
1718
                    pbsr.getStatusName(), pbsr.getRetailerId(), pbsr.getRetailerName(), pbsr.getItemId(),
1719
                    pbsr.getBrand(), pbsr.getModelName(), pbsr.getModelNumber(), pbsr.getColor(), pbsr.getUnitPrice(),
32908 shampa 1720
                    pbsr.getQuantity(), pbsr.getTotalPrice(), pbsr.getInvoiceNumber(),pbsr.getSellerName(),pbsr.getGstNumber(),pbsr.getHsnCode(), pbsr.getIgstRate(),
32251 amit.gupta 1721
                    pbsr.getCgstRate(), pbsr.getSgstRate()));
30162 manish 1722
 
32251 amit.gupta 1723
        }
30426 tejbeer 1724
 
32251 amit.gupta 1725
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("OrderId",
1726
                "Created On", "Billed On", "Delivered On", "Grned On", "Transaction_id", "master_order_id",
1727
                "airwaybill_no", "statusSubGroupp", "statusName", "customer_id", "customer_name", "Item_Id", "brand",
1728
                "model_name", "model_number", "color", "selling_price", "Quantity", "total_price", "invoice_number",
32908 shampa 1729
                "seller_name","gst_number","hsn_code","igstrate", "cgstrate", "sgstrate"), rows);
30426 tejbeer 1730
 
32251 amit.gupta 1731
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Billing Statement Report");
30426 tejbeer 1732
 
32251 amit.gupta 1733
        return responseEntity;
30162 manish 1734
 
33010 shampa 1735
 
32251 amit.gupta 1736
    }
30426 tejbeer 1737
 
32251 amit.gupta 1738
    @RequestMapping(value = "/invoiceSchemeOutSummaryReport", method = RequestMethod.GET)
1739
    public String getInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model) throws Exception {
1740
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1741
 
32251 amit.gupta 1742
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1743
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1744
 
32251 amit.gupta 1745
        List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
1746
                .selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1747
        LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
30426 tejbeer 1748
 
32251 amit.gupta 1749
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1750
        model.addAttribute("endDate", LocalDate.now());
1751
        model.addAttribute("focoSchemeOutReports", focoSchemeOutReports);
30426 tejbeer 1752
 
32251 amit.gupta 1753
        return "invoicewise-scheme-out-report";
1754
    }
30426 tejbeer 1755
 
32251 amit.gupta 1756
    @RequestMapping(value = "/downloadInvoiceSchemeOutSummaryReport", method = RequestMethod.GET)
1757
    public ResponseEntity<?> getDownloadInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model)
1758
            throws Exception {
1759
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1760
 
32251 amit.gupta 1761
        List<List<?>> rows = new ArrayList<>();
1762
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1763
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1764
 
32251 amit.gupta 1765
        List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
1766
                .selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1767
        LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
30426 tejbeer 1768
 
32251 amit.gupta 1769
        for (FocoSchemeOutReportModel fsor : focoSchemeOutReports) {
1770
            rows.add(Arrays.asList(fsor.getInvoiceNumber(), fsor.getQuantity(), fsor.getBrand(), fsor.getModelName(),
1771
                    fsor.getModelNumber(), fsor.getColor(), fsor.getAmount()));
30426 tejbeer 1772
 
32251 amit.gupta 1773
        }
30426 tejbeer 1774
 
32251 amit.gupta 1775
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1776
                Arrays.asList("InvoiceNumber", "Quantity", "Brand", "Model Name", "Model Number", "Color", "Amount"),
1777
                rows);
30426 tejbeer 1778
 
32251 amit.gupta 1779
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows,
1780
                "invoice wise scheme out Summary Report");
30426 tejbeer 1781
 
32251 amit.gupta 1782
        return responseEntity;
1783
    }
30426 tejbeer 1784
 
33010 shampa 1785
   @RequestMapping(value = "/schemePayoutReportDownload", method = RequestMethod.GET)
32251 amit.gupta 1786
    public ResponseEntity<?> getSchemePayoutReportDownload(HttpServletRequest request,
1787
                                                           @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1788
                                                           @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1789
            throws Exception {
1790
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1791
 
32251 amit.gupta 1792
        List<List<?>> rows = new ArrayList<>();
30162 manish 1793
 
33010 shampa 1794
 
32251 amit.gupta 1795
        List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
33010 shampa 1796
                .selectSchemePayoutReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
32251 amit.gupta 1797
        LOGGER.info("schemePayoutReports {}", schemePayoutReports);
30426 tejbeer 1798
 
32251 amit.gupta 1799
        for (SchemePayoutReportModel spr : schemePayoutReports) {
30426 tejbeer 1800
 
32251 amit.gupta 1801
            rows.add(Arrays.asList(spr.getId(), spr.getSerialNumber(), spr.getBrand(), spr.getModelName(),
1802
                    spr.getModelNumber(), spr.getColor(), spr.getSchemeInDp(), spr.getSchemeOutDp(), spr.getSchemeId(),
1803
                    spr.getName(), spr.getType(), spr.getAmountType(), spr.getPurchaseReference(),
1804
                    spr.getInvoiceNumber(), spr.getSioAmount(), spr.getStatus(), spr.getStatusDescription(),
1805
                    spr.getCreateTimestamp(), spr.getRolledBackTimestamp()));
30162 manish 1806
 
32251 amit.gupta 1807
        }
1808
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("Item_Id",
1809
                "serial_number", "Brand", "Model Name", "Model Number", "Color", "Scheme_IN_DP", "Scheme_out_dp",
1810
                "Scheme_Id", "Name", "Type", "amount", "Purchase_Invoice", "SALE_INOVOICE", "Amount", "status",
1811
                "description", "create_timestamp", "rolled_back_timestamp"), rows);
30162 manish 1812
 
32251 amit.gupta 1813
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Scheme Payout Summary Report");
30426 tejbeer 1814
 
32251 amit.gupta 1815
        return responseEntity;
1816
    }
30426 tejbeer 1817
 
33010 shampa 1818
 
1819
 
1820
    @RequestMapping(value = "/offerPayoutDumpReportDownload", method = RequestMethod.GET)
1821
    public ResponseEntity<?> getOfferPayoutDumpReportDownload(HttpServletRequest request,
1822
                                                           @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1823
                                                           @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1824
            throws Exception {
1825
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1826
 
1827
        List<List<?>> rows = new ArrayList<>();
1828
 
1829
 
1830
        List<OfferPayoutDumpReportModel> offerPayoutReports = fofoOrderRepository
1831
                .selectOfferPayoutDumpReport(fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1832
 
1833
 
1834
        for (OfferPayoutDumpReportModel opdr : offerPayoutReports) {
1835
 
1836
            rows.add(Arrays.asList(opdr.getId(),  opdr.getBrand(), opdr.getModelName(),
1837
                    opdr.getModelNumber(), opdr.getColor(), opdr.getSerialNumber(), opdr.getOfferId(),
1838
                    opdr.getName(), opdr.getType(),
1839
                    opdr.getSlabAmount(), opdr.getAmount(),opdr.getDescription(),
1840
                    opdr.getCreateTimestamp(), opdr.getRejectTimestamp()));
1841
 
1842
        }
1843
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("Id",
1844
                "Brand", "Model Name", "Model Number", "Color","Serial number",
1845
                "Offer Id", "Name", "Type", "Slab Amount","Amount",
1846
                "Description", "Credited On", "Rejected On"), rows);
1847
 
1848
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Offer Payout Summary Report");
1849
 
1850
        return responseEntity;
1851
    }
1852
 
1853
 
1854
 
1855
 
32251 amit.gupta 1856
    @GetMapping("/getAllOnlineOrder")
1857
    public String getAllOrders(HttpServletRequest request, @RequestParam(required = false) LocalDate date, Model model)
1858
            throws ProfitMandiBusinessException {
1859
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1860
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1861
        if (date == null) {
1862
            date = LocalDate.now().minusDays(3);
1863
        }
30177 manish 1864
 
32251 amit.gupta 1865
        LOGGER.info("date" + date);
1866
        List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1867
                .collect(Collectors.toList());
30426 tejbeer 1868
 
32251 amit.gupta 1869
        Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
30426 tejbeer 1870
 
32251 amit.gupta 1871
        Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1872
                .filter(x -> x != null).collect(Collectors.toList()).stream()
1873
                .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
30426 tejbeer 1874
 
32251 amit.gupta 1875
        model.addAttribute("customRetailersMap", customRetailersMap);
30177 manish 1876
 
32251 amit.gupta 1877
        List<PendingOrderItem> pendingOrderItem = null;
30426 tejbeer 1878
 
32251 amit.gupta 1879
        pendingOrderItem = pendingOrderItemRepository.selectAll(date.atStartOfDay(), LocalDateTime.now());
30177 manish 1880
 
32251 amit.gupta 1881
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, 0);
30177 manish 1882
 
32251 amit.gupta 1883
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1884
        model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
1885
        model.addAttribute("date", date);
1886
        model.addAttribute("isAdmin", isAdmin);
1887
        return "online-all-order-item";
1888
    }
32409 amit.gupta 1889
}
32405 jai.hind 1890
 
1891
 
1892
 
1893
 
1894