Subversion Repositories SmartDukaan

Rev

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

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