Subversion Repositories SmartDukaan

Rev

Rev 33067 | Rev 33092 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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