Subversion Repositories SmartDukaan

Rev

Rev 32254 | Rev 32270 | 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" +
32269 amit.gupta 539
                "https://www.smartdukaan.com/b2c\n" +
32251 amit.gupta 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
 
32254 amit.gupta 592
    @RequestMapping(value = "/wa-listen", method = RequestMethod.POST)
32251 amit.gupta 593
    public ResponseEntity<?> listenWhatsappStatus(@RequestBody String whatsappJsonResponse) {
594
        LOGGER.info("whatsappJsonResponse {}", whatsappJsonResponse);
595
        return responseSender.ok("Success");
596
    }
23973 govind 597
 
32251 amit.gupta 598
    @RequestMapping(value = "/generateInvoice")
599
    public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
600
                                             @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
601
        LOGGER.info("Request received at url {} with params [{}={}] ", request.getRequestURI(),
602
                ProfitMandiConstants.ORDER_ID, orderId);
603
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
604
        InvoicePdfModel pdfModel = null;
605
        if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
606
            pdfModel = orderService.getInvoicePdfModel(orderId);
607
        } else {
608
            pdfModel = orderService.getInvoicePdfModel(fofoDetails.getFofoId(), orderId);
609
        }
610
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
611
        PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
612
        LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
613
        final HttpHeaders headers = new HttpHeaders();
614
        headers.setContentType(MediaType.APPLICATION_PDF);
615
        headers.setContentDispositionFormData("inline", "invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
616
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
617
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
618
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
619
        return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
620
    }
23973 govind 621
 
32251 amit.gupta 622
    @RequestMapping(value = "/generateInvoices")
623
    public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
624
                                             @RequestParam LocalDateTime startDate, @RequestParam LocalDateTime endDate, @RequestParam int partnerId)
625
            throws ProfitMandiBusinessException {
626
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
627
        List<InvoicePdfModel> pdfModels = new ArrayList<>();
628
        if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
629
            List<Integer> orderIds = fofoOrderRepository.selectByFofoId(partnerId, startDate, endDate, 0, 0).stream()
630
                    .map(x -> x.getId()).collect(Collectors.toList());
631
            for (int orderId : orderIds) {
632
                pdfModels.add(orderService.getInvoicePdfModel(orderId));
633
            }
634
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
635
            PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
636
            LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
637
            final HttpHeaders headers = new HttpHeaders();
638
            headers.setContentType(MediaType.APPLICATION_PDF);
639
            headers.set("Content-disposition", "inline; filename=invoice-" + partnerId + ".pdf");
640
            headers.setContentLength(byteArrayOutputStream.toByteArray().length);
641
            final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
642
            final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
643
            return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
644
        } else {
645
            throw new ProfitMandiBusinessException("Auth", fofoDetails.getEmailId(), "Unauthorised access");
646
        }
647
    }
23654 amit.gupta 648
 
32251 amit.gupta 649
    @RequestMapping(value = "/saleHistory")
650
    public String saleHistory(HttpServletRequest request,
651
                              @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
652
                              @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
653
                              @RequestParam(required = false) LocalDateTime startTime,
654
                              @RequestParam(required = false) LocalDateTime endTime,
655
                              @RequestParam(name = "offset", defaultValue = "0") int offset,
656
                              @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
657
            throws ProfitMandiBusinessException {
658
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23654 amit.gupta 659
 
32251 amit.gupta 660
        Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
661
                startTime, endTime, offset, limit);
662
        model.addAllAttributes(map);
663
        return "sale-history";
664
    }
23973 govind 665
 
32251 amit.gupta 666
    @RequestMapping(value = "/downloadInvoices")
667
    public ResponseEntity<?> downloadInvoices(HttpServletRequest request,
668
                                              @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
669
                                              @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
670
                                              @RequestParam(required = false) LocalDateTime startTime,
671
                                              @RequestParam(required = false) LocalDateTime endTime,
672
                                              @RequestParam(name = "offset", defaultValue = "0") int offset,
673
                                              @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
674
            throws ProfitMandiBusinessException {
675
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23973 govind 676
 
32251 amit.gupta 677
        Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
678
                startTime, endTime, offset, 100);
679
        List<FofoOrder> fofoOrders = (List<FofoOrder>) map.get("saleHistories");
29707 tejbeer 680
 
32251 amit.gupta 681
        if (fofoOrders.size() == 0) {
682
            throw new ProfitMandiBusinessException("Search criteria", "", "No orders found for criteria");
683
        }
23973 govind 684
 
32251 amit.gupta 685
        final HttpHeaders headers = new HttpHeaders();
686
        headers.setContentType(MediaType.APPLICATION_PDF);
687
        headers.set("Content-disposition", "inline; filename=invoices.pdf");
688
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
689
        List<InvoicePdfModel> pdfModels = new ArrayList<>();
690
        for (FofoOrder fofoOrder : fofoOrders) {
691
            try {
692
                pdfModels.add(orderService.getInvoicePdfModel(fofoOrder.getId()));
693
            } catch (Exception e) {
694
                LOGGER.info("could not create invoice for {}, invoice number {}", fofoOrder.getId(),
695
                        fofoOrder.getInvoiceNumber());
696
            }
697
        }
698
        PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
699
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
700
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
701
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
702
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
703
    }
23973 govind 704
 
32251 amit.gupta 705
    @RequestMapping(value = "/credit-note/{creditNoteId}")
706
    public ResponseEntity<?> downloadCreditNote(HttpServletRequest request, @PathVariable int creditNoteId)
707
            throws ProfitMandiBusinessException {
708
        CreditNotePdfModel creditNotePdfModel = orderService.getCreditNotePdfModel(creditNoteId);
709
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
710
        PdfUtils.generateAndWriteCustomerCreditNotes(Arrays.asList(creditNotePdfModel), byteArrayOutputStream);
711
        LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
712
        final HttpHeaders headers = new HttpHeaders();
713
        headers.setContentType(MediaType.APPLICATION_PDF);
714
        headers.set("Content-disposition",
715
                "inline; filename=invoice-" + creditNotePdfModel.getCreditNoteNumber() + ".pdf");
716
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
717
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
718
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
719
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
720
    }
23973 govind 721
 
32251 amit.gupta 722
    @RequestMapping(value = "/getPaginatedSaleHistory")
723
    public String getSaleHistoryPaginated(HttpServletRequest request,
724
                                          @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
725
                                          @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
726
                                          @RequestParam(required = false) LocalDateTime startTime,
727
                                          @RequestParam(required = false) LocalDateTime endTime,
728
                                          @RequestParam(name = "offset", defaultValue = "0") int offset,
729
                                          @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
730
            throws ProfitMandiBusinessException {
731
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
732
        Map<String, Object> map = orderService.getSaleHistoryPaginated(loginDetails.getFofoId(), searchType,
733
                searchValue, startTime, endTime, offset, limit);
734
        model.addAllAttributes(map);
735
        return "sale-history-paginated";
736
    }
23973 govind 737
 
32251 amit.gupta 738
    @PutMapping(value = "/updatePaymentTransaction")
739
    public String updateTransactionDetails(HttpServletRequest request, @RequestParam String referenceType,
740
                                           @RequestParam int fofoId, @RequestParam int referenceId,
741
                                           @RequestBody PartnerOptionsAndItemAmountModel partnerOptionsAndItemAmountModel,
742
                                           @RequestParam float totalAmount, Model model) throws Exception {
23973 govind 743
 
32251 amit.gupta 744
        List<PaymentOptionTransactionModel> paymentOptionTransactionModels = partnerOptionsAndItemAmountModel
745
                .getPaymentOptionTransactionModel();
746
        LOGGER.info(paymentOptionTransactionModels);
747
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoId, referenceId);
748
        LOGGER.info("sdssd" + fofoOrder);
749
        fofoOrder.setTotalAmount(totalAmount);
750
        List<FofoItemIdAmountModel> fofoItemIdAmountModel = partnerOptionsAndItemAmountModel.getItemAmountModel();
751
        for (FofoItemIdAmountModel fim : fofoItemIdAmountModel) {
752
            LOGGER.info("fim" + fim.getFofoItemId());
27819 tejbeer 753
 
32251 amit.gupta 754
            LOGGER.info("fimAmount" + fim.getAmount());
755
            Item item = itemRepository.selectById(fim.getItemId());
756
            TagListing tagListing = tagListingRepository.selectByItemId(item.getId());
757
            FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectById(fim.getFofoItemId());
758
            LOGGER.info("category" + item.getCategoryId());
759
            if (item.getCategoryId() == ProfitMandiConstants.MOBILE_CATEGORY_ID) {
760
                if (fofoOrderItem.getMop() <= fim.getAmount()) {
23973 govind 761
 
32251 amit.gupta 762
                    if (fim.getAmount() <= tagListing.getMrp()) {
763
                        fofoOrderItem.setSellingPrice(fim.getAmount());
764
                    } else {
765
                        throw new ProfitMandiBusinessException("Amount", fim.getAmount(),
766
                                "Sum of amount is not less than  to MRP");
767
                    }
23973 govind 768
 
32251 amit.gupta 769
                    LOGGER.info("fofoOrderItem2" + fofoOrderItem);
23973 govind 770
 
32251 amit.gupta 771
                } else {
772
                    // TODO below mop condition need to added added
773
                    fofoOrderItem.setSellingPrice(fim.getAmount());
774
                }
31739 amit.gupta 775
 
32251 amit.gupta 776
            } else {
777
                fofoOrderItem.setSellingPrice(fim.getAmount());
778
                LOGGER.info("fofoOrderItem1" + fofoOrderItem);
24844 amit.gupta 779
 
32251 amit.gupta 780
            }
781
            LOGGER.info("fofoOrderItem" + fofoOrderItem);
24281 amit.gupta 782
 
32251 amit.gupta 783
        }
24281 amit.gupta 784
 
32251 amit.gupta 785
        /*
786
         * for (PaymentOptionTransactionModel paymentOptionTransactionModel :
787
         * paymentOptionTransactionModels) { amount = amount +
788
         * paymentOptionTransactionModel.getAmount(); } LOGGER.info("FofoOrder amount" +
789
         * fofoOrder.getUnitPrice() + "amount" + amount); if (amount ==
790
         * fofoOrder.getUnitPrice()) {
791
         */
792
        if (paymentOptionTransactionModels.size() > 0) {
793
            List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
794
                    .selectByReferenceIdAndType(referenceId, PaymentOptionReferenceType.ORDER);
795
            Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
796
                    .paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
797
            LOGGER.info(
798
                    "paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
799
            for (PaymentOptionTransactionModel paymentOptionTransactionModel : paymentOptionTransactionModels) {
800
                if (paymentOptionIdPaymentOptionTransactionMap
801
                        .containsKey(paymentOptionTransactionModel.getPaymentOptionId())) {
24281 amit.gupta 802
 
32251 amit.gupta 803
                    PaymentOptionTransaction paymentOptionTransaction = paymentOptionIdPaymentOptionTransactionMap
804
                            .get(paymentOptionTransactionModel.getPaymentOptionId());
23973 govind 805
 
32251 amit.gupta 806
                    if (paymentOptionTransactionModel.getAmount() == 0) {
807
                        paymentOptionTransactionRepository.delete(paymentOptionTransaction);
808
                        LOGGER.info("deleted successfully");
809
                    } else {
23973 govind 810
 
32251 amit.gupta 811
                        paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
812
                        paymentOptionTransactionRepository.persist(paymentOptionTransaction);
813
                        LOGGER.info("updated successfully");
24105 govind 814
 
32251 amit.gupta 815
                    }
816
                } else {
817
                    if (paymentOptionTransactionModel.getAmount() > 0) {
818
                        PaymentOptionTransaction paymentOptionTransaction = new PaymentOptionTransaction();
819
                        paymentOptionTransaction.setReferenceId(referenceId);
820
                        paymentOptionTransaction.setReferenceType(PaymentOptionReferenceType.ORDER);
821
                        paymentOptionTransaction.setPaymentOptionId(paymentOptionTransactionModel.getPaymentOptionId());
822
                        paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
823
                        paymentOptionTransaction.setFofoId(fofoId);
824
                        paymentOptionTransaction.setCreateTimestamp(fofoOrder.getCreateTimestamp());
825
                        paymentOptionTransactionRepository.persist(paymentOptionTransaction);
826
                        LOGGER.info("inserted successfully");
827
                    }
828
                }
24105 govind 829
 
32251 amit.gupta 830
            }
23973 govind 831
 
32251 amit.gupta 832
            model.addAttribute("response1", mvcResponseSender.createResponseString(true));
833
        }
834
        /*
835
         * else
836
         *
837
         * { throw new ProfitMandiBusinessException("Amount", amount,
838
         * "Sum of amount is not equal to total amount"); }
839
         */
28339 tejbeer 840
 
32251 amit.gupta 841
        return "response";
23973 govind 842
 
32251 amit.gupta 843
    }
21985 kshitij.so 844
 
32251 amit.gupta 845
    private Map<String, List<MobileInsurancePlan>> getPlans(float sellingPrice, int itemId)
846
            throws ProfitMandiBusinessException {
847
        try {
848
            Map<String, List<MobileInsurancePlan>> productDurationPlans = insuranceService.getAllPlans(itemId,
849
                    sellingPrice);
850
            return productDurationPlans;
851
        } catch (Exception e) {
852
            LOGGER.info(e, e);
853
            throw new ProfitMandiBusinessException("Fetch Insurance Plans", "Insurance",
854
                    "Could not fetch insurance Plans");
855
        }
32238 amit.gupta 856
 
32251 amit.gupta 857
    }
32238 amit.gupta 858
 
32251 amit.gupta 859
    @GetMapping("/insuranceDetails")
860
    public String getInsuranceDetails(HttpServletRequest request,
861
                                      @RequestParam(name = "offset", defaultValue = "0") int offset,
862
                                      @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
863
            throws ProfitMandiBusinessException {
864
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
865
        long size = 0;
866
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
867
                offset, limit);
868
        size = insurancePolicyRepository.selectCountByRetailerId(loginDetails.getFofoId());
869
        Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
870
                .selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
871
                .stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
872
        if (size < limit) {
873
            model.addAttribute("end", offset + size);
874
        } else {
875
            model.addAttribute("end", offset + limit);
876
        }
877
        model.addAttribute("start", offset + 1);
878
        model.addAttribute("size", size);
879
        model.addAttribute("insurancePolicies", insurancePolicies);
880
        model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
881
        return "insurance-details";
882
    }
32238 amit.gupta 883
 
32251 amit.gupta 884
    @GetMapping("/insuranceDetailsPaginated")
885
    public String getInsuranceDetailsPaginated(HttpServletRequest request,
886
                                               @RequestParam(name = "offset", defaultValue = "0") int offset,
887
                                               @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
888
            throws ProfitMandiBusinessException {
889
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
890
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
891
                offset, limit);
892
        Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
893
                .selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
894
                .stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
895
        model.addAttribute("insurancePolicies", insurancePolicies);
896
        model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
897
        return "insurance-details-paginated";
898
    }
23973 govind 899
 
32251 amit.gupta 900
    @GetMapping("/getMouForm")
901
    public String getMouForm(HttpServletRequest request, Model model) throws Exception {
902
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24844 amit.gupta 903
 
32251 amit.gupta 904
        Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
905
        if (mou != null) {
906
            if (mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
907
                model.addAttribute("response1", mvcResponseSender.createResponseString(true));
908
            } else {
909
                model.addAttribute("response1", mvcResponseSender.createResponseString(false));
910
            }
23973 govind 911
 
32251 amit.gupta 912
        } else {
913
            model.addAttribute("response1", mvcResponseSender.createResponseString(false));
23973 govind 914
 
32251 amit.gupta 915
        }
916
        return "response";
25092 amit.gupta 917
 
32251 amit.gupta 918
    }
25092 amit.gupta 919
 
32251 amit.gupta 920
    @GetMapping("/pendingOrders")
921
    public String getPendingOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
922
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
923
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
924
        Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
925
        if (mou == null) {
926
            mou = new Mou();
927
            mou.setFofoId(loginDetails.getFofoId());
928
            mou.setCreateTimestamp(LocalDateTime.now());
929
            mou.setUpdateTimestamp(LocalDateTime.now());
930
            mouRepository.persist(mou);
931
        } else if (!mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
932
            mou.setUpdateTimestamp(LocalDateTime.now());
933
        }
25092 amit.gupta 934
 
32251 amit.gupta 935
        List<PendingOrderItem> pendingOrderItem = null;
25092 amit.gupta 936
 
32251 amit.gupta 937
        pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.PROCESSING,
938
                loginDetails.getFofoId());
23973 govind 939
 
32251 amit.gupta 940
        Map<String, Object> map = null;
22291 ashik.ali 941
 
32251 amit.gupta 942
        map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
943
        model.addAttribute("inventoryMap", map.get("inventoryMap"));
27861 tejbeer 944
 
32251 amit.gupta 945
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
28190 tejbeer 946
 
32251 amit.gupta 947
        LOGGER.info("partnerInventoryMap" + map.get("partnerInventoryMap"));
948
        model.addAttribute("isAdmin", isAdmin);
949
        return "pending_fofo_order";
27861 tejbeer 950
 
32251 amit.gupta 951
    }
27861 tejbeer 952
 
32251 amit.gupta 953
    @GetMapping("/billedOrders")
954
    public String getBilledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
955
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
956
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
27861 tejbeer 957
 
32251 amit.gupta 958
        List<PendingOrderItem> pendingOrderItem = null;
27861 tejbeer 959
 
32251 amit.gupta 960
        if (isAdmin) {
27861 tejbeer 961
 
32251 amit.gupta 962
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.BILLED);
27861 tejbeer 963
 
32251 amit.gupta 964
        } else {
965
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.BILLED,
966
                    loginDetails.getFofoId());
967
        }
24105 govind 968
 
32251 amit.gupta 969
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
24105 govind 970
 
32251 amit.gupta 971
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
972
        model.addAttribute("isAdmin", isAdmin);
973
        return "billed_order_item";
974
    }
24105 govind 975
 
32251 amit.gupta 976
    @GetMapping("/settledOrders")
977
    public String getSettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
978
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
979
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
24105 govind 980
 
32251 amit.gupta 981
        List<PendingOrderItem> pendingOrderItem = null;
27861 tejbeer 982
 
32251 amit.gupta 983
        if (isAdmin) {
24105 govind 984
 
32251 amit.gupta 985
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.SETTLED);
27861 tejbeer 986
 
32251 amit.gupta 987
        } else {
988
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.SETTLED,
989
                    loginDetails.getFofoId());
990
        }
24105 govind 991
 
32251 amit.gupta 992
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
27861 tejbeer 993
 
32251 amit.gupta 994
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
995
        model.addAttribute("isAdmin", isAdmin);
996
        return "settled_order_item";
997
    }
24440 amit.gupta 998
 
32251 amit.gupta 999
    @GetMapping("/unsettledOrders")
1000
    public String getunsettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1001
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1002
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
25726 amit.gupta 1003
 
32251 amit.gupta 1004
        List<PendingOrderItem> pendingOrderItem = null;
24880 govind 1005
 
32251 amit.gupta 1006
        if (isAdmin) {
25092 amit.gupta 1007
 
32251 amit.gupta 1008
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.UNSETTLED);
26647 tejbeer 1009
 
32251 amit.gupta 1010
        } else {
1011
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.UNSETTLED,
1012
                    loginDetails.getFofoId());
1013
        }
28420 tejbeer 1014
 
32251 amit.gupta 1015
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
28425 tejbeer 1016
 
32251 amit.gupta 1017
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1018
        model.addAttribute("isAdmin", isAdmin);
1019
        return "unsettled_order_item";
1020
    }
28420 tejbeer 1021
 
32251 amit.gupta 1022
    @GetMapping("/claimedOrders")
1023
    public String getclaimedOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1024
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1025
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1026
        List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1027
                .collect(Collectors.toList());
28420 tejbeer 1028
 
32251 amit.gupta 1029
        List<PendingOrderItem> pendingOrderItem = null;
28420 tejbeer 1030
 
32251 amit.gupta 1031
        if (isAdmin) {
26647 tejbeer 1032
 
32251 amit.gupta 1033
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.CLAIMED);
1034
            Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
28339 tejbeer 1035
 
32251 amit.gupta 1036
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1037
                    .filter(x -> x != null).collect(Collectors.toList()).stream()
1038
                    .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1039
            model.addAttribute("customRetailersMap", customRetailersMap);
28339 tejbeer 1040
 
32251 amit.gupta 1041
        } else {
1042
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.CLAIMED,
1043
                    loginDetails.getFofoId());
1044
        }
27046 tejbeer 1045
 
32251 amit.gupta 1046
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
27046 tejbeer 1047
 
32251 amit.gupta 1048
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1049
        model.addAttribute("isAdmin", isAdmin);
1050
        return "claim_raised_order_item";
1051
    }
28350 tejbeer 1052
 
32251 amit.gupta 1053
    @GetMapping("/getPendingOrderItem")
1054
    public String getPendingOrderItem(HttpServletRequest request, @RequestParam int orderId, Model model)
1055
            throws ProfitMandiBusinessException {
1056
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1057
        Map<Integer, Item> itemMap = new HashMap<>();
1058
        Map<Integer, CurrentInventorySnapshot> inventoryMap = new HashMap<>();
1059
        PendingOrder pendingPO = pendingOrderRepository.selectById(orderId);
1060
        Customer customer = customerRepository.selectById(pendingPO.getCustomerId());
1061
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(orderId);
1062
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
1063
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1064
            CurrentInventorySnapshot cis = currentInventorySnapshotRepository
1065
                    .selectByItemAndFofoId(pendingOrderItem.getItemId(), pendingPO.getFofoId());
1066
            itemMap.put(pendingOrderItem.getItemId(), item);
1067
            LOGGER.info("cis" + cis);
1068
            inventoryMap.put(pendingOrderItem.getItemId(), cis);
1069
        }
28358 tejbeer 1070
 
32251 amit.gupta 1071
        LOGGER.info("inventoryMap" + inventoryMap);
1072
        model.addAttribute("pendingOrderItems", pendingOrderItems);
1073
        model.addAttribute("itemMap", itemMap);
1074
        model.addAttribute("inventoryMap", inventoryMap);
1075
        model.addAttribute("pendingPO", gson.toJson(pendingPO));
1076
        model.addAttribute("pendingPOCustomer", gson.toJson(customer));
1077
        model.addAttribute("isAdmin", roleManager.isAdmin(loginDetails.getRoleIds()));
1078
        return "pending-order-item";
1079
    }
28350 tejbeer 1080
 
32251 amit.gupta 1081
    @RequestMapping(value = "/getPendingOrderItemById", method = RequestMethod.GET)
1082
    public String getPendingOrderItemById(HttpServletRequest request, @RequestParam int id, Model model)
1083
            throws Exception {
28339 tejbeer 1084
 
32251 amit.gupta 1085
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1086
        model.addAttribute("pendingOrderItem", pendingOrderItem);
1087
        return "cancel-pending-order";
1088
    }
28339 tejbeer 1089
 
32251 amit.gupta 1090
    @RequestMapping(value = "/getPendingOrderChangePartnerById", method = RequestMethod.GET)
1091
    public String getPendingOrderChangePartnerById(HttpServletRequest request, @RequestParam int id, Model model)
1092
            throws Exception {
28339 tejbeer 1093
 
32251 amit.gupta 1094
        PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
1095
        Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(true);
1096
        model.addAttribute("customRetailersMap", customRetailersMap);
1097
        model.addAttribute("pendingOrder", pendingOrder);
1098
        return "change-partner-po";
1099
    }
28339 tejbeer 1100
 
32251 amit.gupta 1101
    @RequestMapping(value = "/changePendingOrderPartner", method = RequestMethod.POST)
1102
    public String changePendingOrderPartner(HttpServletRequest request, @RequestParam int id, @RequestParam int fofoId,
1103
                                            Model model) throws Exception {
27046 tejbeer 1104
 
32251 amit.gupta 1105
        PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
1106
        pendingOrder.setFofoId(fofoId);
1107
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28339 tejbeer 1108
 
32251 amit.gupta 1109
        return "response";
1110
    }
26647 tejbeer 1111
 
32251 amit.gupta 1112
    @RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
1113
    public String cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id, @RequestParam String reason,
1114
                                         Model model) throws Exception {
28339 tejbeer 1115
 
32251 amit.gupta 1116
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1117
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
28339 tejbeer 1118
 
32251 amit.gupta 1119
        pendingOrderItem.setStatus(OrderStatus.CANCELLED);
1120
        pendingOrderItem.setStatusDescription(loginDetails.getEmailId());
1121
        pendingOrderItem.setRemark(reason);
1122
        pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
1123
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
28339 tejbeer 1124
 
32251 amit.gupta 1125
        List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
1126
                .map(x -> x.getStatus()).collect(Collectors.toList());
28339 tejbeer 1127
 
32251 amit.gupta 1128
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
28339 tejbeer 1129
 
32251 amit.gupta 1130
        List<Integer> catalogIds = new ArrayList<>();
28339 tejbeer 1131
 
32251 amit.gupta 1132
        Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1133
        pendingOrderItem.setItemName(item.getItemDescription());
1134
        catalogIds.add(item.getCatalogItemId());
28339 tejbeer 1135
 
32251 amit.gupta 1136
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1137
        JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1138
        pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1139
        pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1140
        CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
28339 tejbeer 1141
 
32251 amit.gupta 1142
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
28339 tejbeer 1143
 
32251 amit.gupta 1144
        Map<String, Object> emailModel = new HashMap<>();
1145
        emailModel.put("customer", customerAddress);
1146
        emailModel.put("pendingOrder", pendingOrder);
1147
        emailModel.put("date", dateTimeFormatter);
1148
        LOGGER.info("emal" + customer.getEmailId());
1149
        String[] customerEmail = null;
1150
        if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
1151
            customerEmail = new String[]{customer.getEmailId()};
28339 tejbeer 1152
 
32251 amit.gupta 1153
            List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
28339 tejbeer 1154
 
32251 amit.gupta 1155
            emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel,
1156
                    customerEmail, null, bccTo.toArray(new String[0]));
28339 tejbeer 1157
 
32251 amit.gupta 1158
        }
28339 tejbeer 1159
 
32251 amit.gupta 1160
        if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1161
                && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1162
                && !status.contains(OrderStatus.CLAIMED)) {
1163
            pendingOrder.setStatus(OrderStatus.CLOSED);
1164
        }
1165
        pendingOrderItemRepository.persist(pendingOrderItem);
28339 tejbeer 1166
 
32251 amit.gupta 1167
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28339 tejbeer 1168
 
32251 amit.gupta 1169
        return "response";
1170
    }
28339 tejbeer 1171
 
32251 amit.gupta 1172
    @RequestMapping(value = "/deliveredPendingOrderItem", method = RequestMethod.POST)
1173
    public String deliveredPendingOrderItem(HttpServletRequest request, @RequestParam int id, Model model)
1174
            throws Exception {
28339 tejbeer 1175
 
32251 amit.gupta 1176
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1177
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1178
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
30426 tejbeer 1179
 
32251 amit.gupta 1180
        if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
1181
            pendingOrderItem.setStatus(OrderStatus.UNSETTLED);
1182
            pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
28339 tejbeer 1183
 
32251 amit.gupta 1184
        } else {
1185
            pendingOrderItem.setStatus(OrderStatus.SETTLED);
1186
            pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
28339 tejbeer 1187
 
32251 amit.gupta 1188
        }
28339 tejbeer 1189
 
32251 amit.gupta 1190
        List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
1191
                .map(x -> x.getStatus()).collect(Collectors.toList());
28339 tejbeer 1192
 
32251 amit.gupta 1193
        List<Integer> catalogIds = new ArrayList<>();
26647 tejbeer 1194
 
32251 amit.gupta 1195
        Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1196
        pendingOrderItem.setItemName(item.getItemDescription());
1197
        catalogIds.add(item.getCatalogItemId());
26721 tejbeer 1198
 
32251 amit.gupta 1199
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1200
        JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1201
        pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1202
        pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1203
        CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
27046 tejbeer 1204
 
32251 amit.gupta 1205
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
28352 tejbeer 1206
 
32251 amit.gupta 1207
        Map<String, Object> emailModel = new HashMap<>();
1208
        emailModel.put("customer", customerAddress);
1209
        emailModel.put("pendingOrder", pendingOrder);
1210
        emailModel.put("date", dateTimeFormatter);
1211
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1212
        String[] customerEmail = null;
1213
        if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
1214
            customerEmail = new String[]{customer.getEmailId()};
1215
            List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
28437 tejbeer 1216
 
32251 amit.gupta 1217
            emailService.sendMailWithAttachments("Order Delivered with SmartDukaan", "order-delivered.vm", emailModel,
1218
                    customerEmail, null, bccTo.toArray(new String[0]));
28437 tejbeer 1219
 
32251 amit.gupta 1220
        }
1221
        if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1222
                && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1223
                && !status.contains(OrderStatus.CLAIMED)) {
1224
            pendingOrder.setStatus(OrderStatus.CLOSED);
1225
        }
1226
        pendingOrderItemRepository.persist(pendingOrderItem);
1227
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28437 tejbeer 1228
 
32251 amit.gupta 1229
        return "response";
1230
    }
28437 tejbeer 1231
 
32251 amit.gupta 1232
    @RequestMapping(value = "/raiseClaimOrderItem", method = RequestMethod.POST)
1233
    public String raiseClaimOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
28437 tejbeer 1234
 
32251 amit.gupta 1235
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1236
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1237
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
28352 tejbeer 1238
 
32251 amit.gupta 1239
        if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
1240
            pendingOrderItem.setStatus(OrderStatus.CLAIMED);
1241
            pendingOrderItem.setClaimedTimestamp(LocalDateTime.now());
26721 tejbeer 1242
 
32251 amit.gupta 1243
        }
1244
        pendingOrderItemRepository.persist(pendingOrderItem);
1245
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
26721 tejbeer 1246
 
32251 amit.gupta 1247
        return "response";
1248
    }
26721 tejbeer 1249
 
32251 amit.gupta 1250
    @RequestMapping(value = "/verifyOrderItem", method = RequestMethod.POST)
1251
    public String verifyOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
28352 tejbeer 1252
 
32251 amit.gupta 1253
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1254
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1255
        pendingOrderItem.setVerifiedTimestamp(LocalDateTime.now());
28352 tejbeer 1256
 
32251 amit.gupta 1257
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28352 tejbeer 1258
 
32251 amit.gupta 1259
        return "response";
1260
    }
28352 tejbeer 1261
 
32251 amit.gupta 1262
    @RequestMapping(value = "/cancelOrderByInvoice", method = RequestMethod.POST)
1263
    public String cancelOrder(HttpServletRequest request, @RequestParam List<String> invoiceNumbers, Model model)
1264
            throws Exception {
1265
        orderService.cancelOrder(invoiceNumbers);
1266
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28352 tejbeer 1267
 
32251 amit.gupta 1268
        return "response";
1269
    }
28352 tejbeer 1270
 
32251 amit.gupta 1271
    @RequestMapping(value = "/getOnlineOrder", method = RequestMethod.GET)
1272
    public String cancelOrder(HttpServletRequest request, Model model) throws Exception {
1273
        return "online-order";
1274
    }
28356 tejbeer 1275
 
32251 amit.gupta 1276
    @GetMapping("/getAllOrdersByStatus")
1277
    public String getAllOrdersByStatus(HttpServletRequest request, @RequestParam OrderStatus status,
1278
                                       @RequestParam(required = false) LocalDateTime startTime,
1279
                                       @RequestParam(required = false) LocalDateTime endTime, Model model) throws ProfitMandiBusinessException {
1280
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1281
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
28352 tejbeer 1282
 
32251 amit.gupta 1283
        LOGGER.info("startTime" + startTime);
28352 tejbeer 1284
 
32251 amit.gupta 1285
        LOGGER.info("endTime" + endTime);
28352 tejbeer 1286
 
32251 amit.gupta 1287
        List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1288
                .collect(Collectors.toList());
26721 tejbeer 1289
 
32251 amit.gupta 1290
        Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
27046 tejbeer 1291
 
32251 amit.gupta 1292
        Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1293
                .filter(x -> x != null).collect(Collectors.toList()).stream()
1294
                .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1295
        model.addAttribute("customRetailersMap", customRetailersMap);
28339 tejbeer 1296
 
32251 amit.gupta 1297
        List<PendingOrderItem> pendingOrderItem = null;
1298
        if (startTime == null) {
1299
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(status);
1300
        } else {
1301
            List<OrderStatus> statusList = new ArrayList<>();
1302
            if (status.equals(OrderStatus.DELIVERED)) {
1303
                statusList.add(OrderStatus.SETTLED);
1304
                statusList.add(OrderStatus.UNSETTLED);
1305
            } else {
1306
                statusList.add(status);
1307
            }
1308
            pendingOrderItem = pendingOrderItemRepository.selectByStatusAndCreateTimestamp(statusList,
1309
                    startTime.toLocalDate().atStartOfDay(), endTime);
1310
        }
1311
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, 0);
28339 tejbeer 1312
 
32251 amit.gupta 1313
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1314
        model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
28339 tejbeer 1315
 
32251 amit.gupta 1316
        model.addAttribute("isAdmin", isAdmin);
1317
        return "online-order-item";
1318
    }
28339 tejbeer 1319
 
32251 amit.gupta 1320
    @RequestMapping(value = "/franchiseeSalesReport", method = RequestMethod.GET)
1321
    public String getFranchiseeSalesReport(HttpServletRequest request, Model model)
1322
            throws ProfitMandiBusinessException {
1323
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28339 tejbeer 1324
 
32251 amit.gupta 1325
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1326
        LocalDateTime currentStartMonth = currentDate.minusDays(30).toLocalDate().atStartOfDay();
1327
        FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoDetails.getFofoId());
28339 tejbeer 1328
 
32251 amit.gupta 1329
        List<FocoSaleReportModel> focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoDetails.getFofoId(),
1330
                fs.getCode(), currentStartMonth, currentDate);
28339 tejbeer 1331
 
32251 amit.gupta 1332
        LOGGER.info("focoSaleReportList {}", focoSaleReportList);
28339 tejbeer 1333
 
32251 amit.gupta 1334
        model.addAttribute("startDate", currentDate.minusDays(30).toLocalDate());
1335
        model.addAttribute("endDate", LocalDate.now());
1336
        model.addAttribute("focoSaleReportList", focoSaleReportList);
1337
        return "foco-sale-report";
1338
    }
28339 tejbeer 1339
 
32251 amit.gupta 1340
    @RequestMapping(value = "/downloadFranchiseeSales", method = RequestMethod.GET)
1341
    public ResponseEntity<?> getdownloadFranchiseeSales(HttpServletRequest request,
1342
                                                        @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1343
                                                        @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1344
            throws Exception {
1345
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1346
        List<List<?>> rows = new ArrayList<>();
28339 tejbeer 1347
 
32251 amit.gupta 1348
        FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoDetails.getFofoId());
1349
        List<FocoSaleReportModel> focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoDetails.getFofoId(),
1350
                fs.getCode(), startDate.atStartOfDay(), endDate.atStartOfDay());
1351
        LOGGER.info("FocoSaleReportList {}", focoSaleReportList);
28339 tejbeer 1352
 
32251 amit.gupta 1353
        for (FocoSaleReportModel fsr : focoSaleReportList) {
28339 tejbeer 1354
 
32251 amit.gupta 1355
            rows.add(Arrays.asList(fsr.getCode(), fsr.getName(), fsr.getCity(), fsr.getState(), fsr.getRegion(),
1356
                    fsr.getItemId(), fsr.getBrand(), fsr.getModelName(), fsr.getModelNumber(), fsr.getColor(),
1357
                    fsr.getQuantity(), fsr.getDp(), fsr.getSellingPrice(), fsr.getMop(), fsr.getSerialNumber(),
1358
                    FormattingUtils.format(fsr.getCreateDate()), fsr.getCustomerName(), fsr.getCustomerPhone(),
1359
                    fsr.getCustomerCity(), fsr.getCustomerPincode(), fsr.getInvoiceNumber(), fsr.getPurchaseReference(),
1360
                    fsr.getCustomerGstNumber(), FormattingUtils.format(fsr.getCancelledTimestamp()),
1361
                    FormattingUtils.format(fsr.getGrnCompleteDate()), fsr.getHygieneRating(), fsr.getRating(),
1362
                    fsr.getStatus(), fsr.getRemark(), FormattingUtils.format(fsr.getCreatedTimestamp()),
1363
                    FormattingUtils.format(fsr.getDisposedTimestamp()),
1364
                    FormattingUtils.format(fsr.getNextTimestamp()),
1365
                    FormattingUtils.format(fsr.getActivationTimestamp()),
1366
                    FormattingUtils.format(fsr.getActivationTimestamp()), fsr.getLabel()));
28339 tejbeer 1367
 
32251 amit.gupta 1368
        }
28339 tejbeer 1369
 
32251 amit.gupta 1370
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1371
                Arrays.asList("Code", "Name", "City", "State", "Region", "Item Id", "Brand", "Model Name",
1372
                        "Model Number", "Color", "Quantity", "Dp", "Selling_Price", "mop", "Serial Number",
1373
                        "Create Date", "Customer Name", "Customer Phone", "Customer City", " Customer Pincode",
1374
                        "Invoice  Number", "Purchase Reference", "Customer Gst Number", " Cancelled Timestamp",
1375
                        "GRN Complete Date", "Hygiene Rating", "Rating", "Status", "Remark", "Created Timestamp",
1376
                        "Disposed Timestamp", " Next Timestamp", "Activation Timestamp", "Create Timestamp", "Label"),
1377
                rows);
28339 tejbeer 1378
 
32251 amit.gupta 1379
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Franchisee Sales Report");
28339 tejbeer 1380
 
32251 amit.gupta 1381
        return responseEntity;
28339 tejbeer 1382
 
32251 amit.gupta 1383
    }
28339 tejbeer 1384
 
32251 amit.gupta 1385
    @RequestMapping(value = "/downloadWalletSummaryReport", method = RequestMethod.GET)
1386
    public ResponseEntity<?> getDownloadWalletSummaryReport(HttpServletRequest request,
1387
                                                            @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1388
                                                            @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1389
            throws Exception {
28339 tejbeer 1390
 
32251 amit.gupta 1391
        List<List<?>> rows = new ArrayList<>();
1392
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1393
        List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository.selectWalletSummaryReport(
1394
                fofoDetails.getFofoId(), startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
1395
        LOGGER.info("walletSummartList {}", walletSummartList);
1396
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
28339 tejbeer 1397
 
32251 amit.gupta 1398
        for (WalletSummaryReportModel walletSummary : walletSummartList) {
28344 tejbeer 1399
 
32251 amit.gupta 1400
            rows.add(Arrays.asList(walletSummary.getId(), walletSummary.getCode(), walletSummary.getName(),
1401
                    walletSummary.getEmail(), walletSummary.getPhone(), walletSummary.getAmount(),
1402
                    walletSummary.getRefundableAmount(), walletSummary.getReference(), walletSummary.getReferenceType(),
1403
                    FormattingUtils.format(walletSummary.getBusinessTimestamp())));
28350 tejbeer 1404
 
32251 amit.gupta 1405
        }
28350 tejbeer 1406
 
32251 amit.gupta 1407
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
1408
                .getCSVByteStream(Arrays.asList("Id", "Code", "Name", "Email", "Phone", "Amount", "Refundable_amount",
1409
                        "Reference", "Reference_type", "Business_timestamp", "Description"), rows);
28344 tejbeer 1410
 
32251 amit.gupta 1411
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Wallet Statement Report");
27819 tejbeer 1412
 
32251 amit.gupta 1413
        return responseEntity;
27819 tejbeer 1414
 
32251 amit.gupta 1415
    }
28358 tejbeer 1416
 
32251 amit.gupta 1417
    @RequestMapping(value = "/walletSummaryReport", method = RequestMethod.GET)
1418
    public String getWalletSummaryReport(HttpServletRequest request, Model model) throws Exception {
1419
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28358 tejbeer 1420
 
32251 amit.gupta 1421
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1422
        LocalDateTime currentStartMonth = currentDate.minusDays(30).toLocalDate().atStartOfDay();
28420 tejbeer 1423
 
32251 amit.gupta 1424
        List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository
1425
                .selectWalletSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1426
        LOGGER.info("walletSummartList {}", walletSummartList);
28420 tejbeer 1427
 
32251 amit.gupta 1428
        model.addAttribute("startDate", currentDate.minusDays(30).toLocalDate());
1429
        model.addAttribute("endDate", LocalDate.now());
1430
        model.addAttribute("walletSummartList", walletSummartList);
28358 tejbeer 1431
 
32251 amit.gupta 1432
        return "wallet-summary-report";
1433
    }
30426 tejbeer 1434
 
32251 amit.gupta 1435
    @RequestMapping(value = "/pendingIndentReport", method = RequestMethod.GET)
1436
    public String getPendingIndentReport(HttpServletRequest request, Model model) throws Exception {
1437
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28358 tejbeer 1438
 
32251 amit.gupta 1439
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1440
        LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();
28358 tejbeer 1441
 
32251 amit.gupta 1442
        List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
1443
                .selectPendingIndentReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1444
        LOGGER.info("pendingIndentReports {}", pendingIndentReports);
28358 tejbeer 1445
 
32251 amit.gupta 1446
        model.addAttribute("startDate", currentDate.minusMonths(2).toLocalDate());
1447
        model.addAttribute("endDate", LocalDate.now());
1448
        model.addAttribute("pendingIndentReports", pendingIndentReports);
30426 tejbeer 1449
 
32251 amit.gupta 1450
        return "pending-indent-report";
1451
    }
30426 tejbeer 1452
 
32251 amit.gupta 1453
    @RequestMapping(value = "/pendingIndentReportDownload", method = RequestMethod.GET)
1454
    public ResponseEntity<?> getPendingIndentReportDownload(HttpServletRequest request, Model model) throws Exception {
1455
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1456
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1457
        LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();
1458
        List<List<?>> rows = new ArrayList<>();
1459
        List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
1460
                .selectPendingIndentReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1461
        LOGGER.info("pendingIndentReports {}", pendingIndentReports);
1462
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
28377 tejbeer 1463
 
32251 amit.gupta 1464
        for (PendingIndentReportModel pir : pendingIndentReports) {
30426 tejbeer 1465
 
32251 amit.gupta 1466
            rows.add(Arrays.asList(pir.getTransactionId(), pir.getOrderId(),
1467
                    pir.getCreatTimestamp().format(dateTimeFormatter), pir.getItemId(), pir.getBrand(),
1468
                    pir.getModelName(), pir.getModelNumber(), pir.getColor(), pir.getQuantity(), pir.getUnitPrice(),
1469
                    pir.getWalletAmount(), pir.getStatus(), pir.getInvoiceNumber(),
1470
                    pir.getBillingTimestamp().format(dateTimeFormatter)));
30426 tejbeer 1471
 
32251 amit.gupta 1472
        }
30426 tejbeer 1473
 
32251 amit.gupta 1474
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList(
1475
                "Transaction Id", "Order Id", "Created_At", "Item_Id", "Brand", "Model Name", "Model Number", "Color",
1476
                "Quantity", "Unit Price", "Wallet Deduction", "Status", "Invoice Number", "Billing Timestamp"), rows);
30162 manish 1477
 
32251 amit.gupta 1478
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Order Status Summary Report");
31384 tejbeer 1479
 
32251 amit.gupta 1480
        return responseEntity;
1481
    }
30162 manish 1482
 
32251 amit.gupta 1483
    @RequestMapping(value = "/schemePayoutReport", method = RequestMethod.GET)
1484
    public String getSchemePayoutReport(HttpServletRequest request, Model model) throws Exception {
1485
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30162 manish 1486
 
32251 amit.gupta 1487
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1488
        LocalDateTime startDate = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1489
 
32251 amit.gupta 1490
        List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
1491
                .selectSchemePayoutReport(fofoDetails.getFofoId(), startDate, currentDate);
1492
        LOGGER.info("schemePayoutReports {}", schemePayoutReports);
30162 manish 1493
 
32251 amit.gupta 1494
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1495
        model.addAttribute("endDate", LocalDate.now());
1496
        model.addAttribute("schemePayoutReports", schemePayoutReports);
30162 manish 1497
 
32251 amit.gupta 1498
        return "scheme-payout-report";
1499
    }
30162 manish 1500
 
32251 amit.gupta 1501
    @RequestMapping(value = "/selectPartnerBillingSummaryReport", method = RequestMethod.GET)
1502
    public String getselectPartnerBillingSummaryReport(HttpServletRequest request, Model model) throws Exception {
1503
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1504
 
32251 amit.gupta 1505
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1506
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1507
 
32251 amit.gupta 1508
        List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
1509
                .selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1510
 
32251 amit.gupta 1511
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1512
        model.addAttribute("endDate", LocalDate.now());
1513
        model.addAttribute("partnerBillingSummaryReports", partnerBillingSummaryReports);
30162 manish 1514
 
32251 amit.gupta 1515
        return "partner-billing-summary-report";
1516
    }
30162 manish 1517
 
32251 amit.gupta 1518
    @RequestMapping(value = "/priceDropReport", method = RequestMethod.GET)
1519
    public String getSelectPriceDropReport(HttpServletRequest request, Model model) throws Exception {
1520
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30162 manish 1521
 
32251 amit.gupta 1522
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1523
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1524
 
32251 amit.gupta 1525
        List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1526
                currentStartMonth, currentDate);
30162 manish 1527
 
32251 amit.gupta 1528
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1529
        model.addAttribute("endDate", LocalDate.now());
1530
        model.addAttribute("priceDropReports", priceDropReports);
30162 manish 1531
 
32251 amit.gupta 1532
        return "price-drop-report";
1533
    }
30426 tejbeer 1534
 
32251 amit.gupta 1535
    @RequestMapping(value = "/downloadPriceDropReport", method = RequestMethod.GET)
1536
    public ResponseEntity<?> getSelectDownloadPriceDropReport(HttpServletRequest request,
1537
                                                              @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1538
                                                              @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1539
            throws Exception {
1540
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30162 manish 1541
 
32251 amit.gupta 1542
        List<List<?>> rows = new ArrayList<>();
1543
        List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1544
                startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX));
30426 tejbeer 1545
 
32251 amit.gupta 1546
        for (PriceDropReportModel pdr : priceDropReports) {
30426 tejbeer 1547
 
32251 amit.gupta 1548
            rows.add(Arrays.asList(pdr.getCode(), pdr.getId(), pdr.getBrand(), pdr.getModelName(), pdr.getModelNumber(),
1549
                    pdr.getAffectedOn(), pdr.getAmount(), pdr.getPartnerPayout(), pdr.getImei(), pdr.getStatus(),
1550
                    pdr.getUpdateTimestamp(), pdr.getRejectionReason()));
30426 tejbeer 1551
 
32251 amit.gupta 1552
        }
1553
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
1554
                .getCSVByteStream(Arrays.asList("code", "Price_Drop_Id", "brand", "model_name", "model_number",
1555
                        "affected_on", "amount", "partner_payout", "Imei", "status", "processed_on", "Reason"), rows);
30426 tejbeer 1556
 
32251 amit.gupta 1557
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "price drop report");
30162 manish 1558
 
32251 amit.gupta 1559
        return responseEntity;
30426 tejbeer 1560
 
32251 amit.gupta 1561
    }
30426 tejbeer 1562
 
32251 amit.gupta 1563
    @RequestMapping(value = "/downloadPartnerBillingSummaryReport", method = RequestMethod.GET)
1564
    public ResponseEntity<?> getdownloadPartnerBillingSummaryReport(HttpServletRequest request,
1565
                                                                    @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1566
                                                                    @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1567
            throws Exception {
30426 tejbeer 1568
 
32251 amit.gupta 1569
        List<List<?>> rows = new ArrayList<>();
1570
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1571
 
32251 amit.gupta 1572
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1573
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1574
 
32251 amit.gupta 1575
        List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
1576
                .selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), startDate.atStartOfDay(),
1577
                        endDate.atTime(LocalTime.MAX));
30426 tejbeer 1578
 
32251 amit.gupta 1579
        for (PartnerBillingSummaryModel pbsr : partnerBillingSummaryReports) {
30426 tejbeer 1580
 
32251 amit.gupta 1581
            rows.add(Arrays.asList(pbsr.getId(),
1582
                    FormattingUtils.format(pbsr.getCreateTimestamp()),
1583
                    FormattingUtils.format(pbsr.getBillingTimestamp()),
1584
                    FormattingUtils.format(pbsr.getDeliveryTimestamp()),
1585
                    FormattingUtils.format(pbsr.getPartnerGrnTimestamp()),
1586
                    pbsr.getTransactionId(),
1587
                    pbsr.getLogisticsTransactionId(), pbsr.getAirwayBillNumber(), pbsr.getStatusSubGroup(),
1588
                    pbsr.getStatusName(), pbsr.getRetailerId(), pbsr.getRetailerName(), pbsr.getItemId(),
1589
                    pbsr.getBrand(), pbsr.getModelName(), pbsr.getModelNumber(), pbsr.getColor(), pbsr.getUnitPrice(),
1590
                    pbsr.getQuantity(), pbsr.getTotalPrice(), pbsr.getInvoiceNumber(), pbsr.getIgstRate(),
1591
                    pbsr.getCgstRate(), pbsr.getSgstRate()));
30162 manish 1592
 
32251 amit.gupta 1593
        }
30426 tejbeer 1594
 
32251 amit.gupta 1595
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("OrderId",
1596
                "Created On", "Billed On", "Delivered On", "Grned On", "Transaction_id", "master_order_id",
1597
                "airwaybill_no", "statusSubGroupp", "statusName", "customer_id", "customer_name", "Item_Id", "brand",
1598
                "model_name", "model_number", "color", "selling_price", "Quantity", "total_price", "invoice_number",
1599
                "igstrate", "cgstrate", "sgstrate"), rows);
30426 tejbeer 1600
 
32251 amit.gupta 1601
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Billing Statement Report");
30426 tejbeer 1602
 
32251 amit.gupta 1603
        return responseEntity;
30162 manish 1604
 
32251 amit.gupta 1605
    }
30426 tejbeer 1606
 
32251 amit.gupta 1607
    @RequestMapping(value = "/invoiceSchemeOutSummaryReport", method = RequestMethod.GET)
1608
    public String getInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model) throws Exception {
1609
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1610
 
32251 amit.gupta 1611
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1612
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1613
 
32251 amit.gupta 1614
        List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
1615
                .selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1616
        LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
30426 tejbeer 1617
 
32251 amit.gupta 1618
        model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
1619
        model.addAttribute("endDate", LocalDate.now());
1620
        model.addAttribute("focoSchemeOutReports", focoSchemeOutReports);
30426 tejbeer 1621
 
32251 amit.gupta 1622
        return "invoicewise-scheme-out-report";
1623
    }
30426 tejbeer 1624
 
32251 amit.gupta 1625
    @RequestMapping(value = "/downloadInvoiceSchemeOutSummaryReport", method = RequestMethod.GET)
1626
    public ResponseEntity<?> getDownloadInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model)
1627
            throws Exception {
1628
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1629
 
32251 amit.gupta 1630
        List<List<?>> rows = new ArrayList<>();
1631
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1632
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1633
 
32251 amit.gupta 1634
        List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
1635
                .selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1636
        LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
30426 tejbeer 1637
 
32251 amit.gupta 1638
        for (FocoSchemeOutReportModel fsor : focoSchemeOutReports) {
1639
            rows.add(Arrays.asList(fsor.getInvoiceNumber(), fsor.getQuantity(), fsor.getBrand(), fsor.getModelName(),
1640
                    fsor.getModelNumber(), fsor.getColor(), fsor.getAmount()));
30426 tejbeer 1641
 
32251 amit.gupta 1642
        }
30426 tejbeer 1643
 
32251 amit.gupta 1644
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1645
                Arrays.asList("InvoiceNumber", "Quantity", "Brand", "Model Name", "Model Number", "Color", "Amount"),
1646
                rows);
30426 tejbeer 1647
 
32251 amit.gupta 1648
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows,
1649
                "invoice wise scheme out Summary Report");
30426 tejbeer 1650
 
32251 amit.gupta 1651
        return responseEntity;
1652
    }
30426 tejbeer 1653
 
32251 amit.gupta 1654
    @RequestMapping(value = "/schemePayoutReportDownload", method = RequestMethod.GET)
1655
    public ResponseEntity<?> getSchemePayoutReportDownload(HttpServletRequest request,
1656
                                                           @RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1657
                                                           @RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1658
            throws Exception {
1659
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1660
 
32251 amit.gupta 1661
        List<List<?>> rows = new ArrayList<>();
1662
        LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1663
        LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30162 manish 1664
 
32251 amit.gupta 1665
        List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
1666
                .selectSchemePayoutReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1667
        LOGGER.info("schemePayoutReports {}", schemePayoutReports);
30426 tejbeer 1668
 
32251 amit.gupta 1669
        for (SchemePayoutReportModel spr : schemePayoutReports) {
30426 tejbeer 1670
 
32251 amit.gupta 1671
            rows.add(Arrays.asList(spr.getId(), spr.getSerialNumber(), spr.getBrand(), spr.getModelName(),
1672
                    spr.getModelNumber(), spr.getColor(), spr.getSchemeInDp(), spr.getSchemeOutDp(), spr.getSchemeId(),
1673
                    spr.getName(), spr.getType(), spr.getAmountType(), spr.getPurchaseReference(),
1674
                    spr.getInvoiceNumber(), spr.getSioAmount(), spr.getStatus(), spr.getStatusDescription(),
1675
                    spr.getCreateTimestamp(), spr.getRolledBackTimestamp()));
30162 manish 1676
 
32251 amit.gupta 1677
        }
1678
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("Item_Id",
1679
                "serial_number", "Brand", "Model Name", "Model Number", "Color", "Scheme_IN_DP", "Scheme_out_dp",
1680
                "Scheme_Id", "Name", "Type", "amount", "Purchase_Invoice", "SALE_INOVOICE", "Amount", "status",
1681
                "description", "create_timestamp", "rolled_back_timestamp"), rows);
30162 manish 1682
 
32251 amit.gupta 1683
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Scheme Payout Summary Report");
30426 tejbeer 1684
 
32251 amit.gupta 1685
        return responseEntity;
1686
    }
30426 tejbeer 1687
 
32251 amit.gupta 1688
    @GetMapping("/getAllOnlineOrder")
1689
    public String getAllOrders(HttpServletRequest request, @RequestParam(required = false) LocalDate date, Model model)
1690
            throws ProfitMandiBusinessException {
1691
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1692
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1693
        if (date == null) {
1694
            date = LocalDate.now().minusDays(3);
1695
        }
30177 manish 1696
 
32251 amit.gupta 1697
        LOGGER.info("date" + date);
1698
        List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1699
                .collect(Collectors.toList());
30426 tejbeer 1700
 
32251 amit.gupta 1701
        Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
30426 tejbeer 1702
 
32251 amit.gupta 1703
        Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1704
                .filter(x -> x != null).collect(Collectors.toList()).stream()
1705
                .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
30426 tejbeer 1706
 
32251 amit.gupta 1707
        model.addAttribute("customRetailersMap", customRetailersMap);
30177 manish 1708
 
32251 amit.gupta 1709
        List<PendingOrderItem> pendingOrderItem = null;
30426 tejbeer 1710
 
32251 amit.gupta 1711
        pendingOrderItem = pendingOrderItemRepository.selectAll(date.atStartOfDay(), LocalDateTime.now());
30177 manish 1712
 
32251 amit.gupta 1713
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, 0);
30177 manish 1714
 
32251 amit.gupta 1715
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1716
        model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
1717
        model.addAttribute("date", date);
1718
        model.addAttribute("isAdmin", isAdmin);
1719
        return "online-all-order-item";
1720
    }
21612 ashik.ali 1721
}