Subversion Repositories SmartDukaan

Rev

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