Subversion Repositories SmartDukaan

Rev

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