Subversion Repositories SmartDukaan

Rev

Rev 33219 | Rev 33336 | 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;
33213 tejus.loha 8
import com.spice.profitmandi.common.util.FileUtil;
21689 ashik.ali 9
import com.spice.profitmandi.common.util.PdfUtils;
23638 amit.gupta 10
import com.spice.profitmandi.common.util.StringUtils;
22244 ashik.ali 11
import com.spice.profitmandi.common.web.util.ResponseSender;
33213 tejus.loha 12
import com.spice.profitmandi.dao.entity.auth.AuthUser;
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.*;
33213 tejus.loha 19
import com.spice.profitmandi.dao.entity.transaction.LineItem;
20
import com.spice.profitmandi.dao.entity.transaction.Order;
21
import com.spice.profitmandi.dao.entity.transaction.Transaction;
22
import com.spice.profitmandi.dao.entity.transaction.TransactionApproval;
23298 ashik.ali 23
import com.spice.profitmandi.dao.entity.user.Address;
23548 ashik.ali 24
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
27046 tejbeer 25
import com.spice.profitmandi.dao.enumuration.transaction.OrderStatus;
33213 tejus.loha 26
import com.spice.profitmandi.dao.enumuration.transaction.TransactionApprovalStatus;
27
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
23638 amit.gupta 28
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
27861 tejbeer 29
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
30322 amit.gupta 30
import com.spice.profitmandi.dao.repository.dtr.*;
31
import com.spice.profitmandi.dao.repository.fofo.*;
24440 amit.gupta 32
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
33213 tejus.loha 33
import com.spice.profitmandi.dao.repository.transaction.LineItemRepository;
30162 manish 34
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
33213 tejus.loha 35
import com.spice.profitmandi.dao.repository.transaction.TransactionApprovalRepository;
36
import com.spice.profitmandi.dao.repository.transaction.TransactionRepository;
23298 ashik.ali 37
import com.spice.profitmandi.dao.repository.user.AddressRepository;
28377 tejbeer 38
import com.spice.profitmandi.service.EmailService;
32251 amit.gupta 39
import com.spice.profitmandi.service.NotificationService;
23798 amit.gupta 40
import com.spice.profitmandi.service.authentication.RoleManager;
25726 amit.gupta 41
import com.spice.profitmandi.service.integrations.zest.InsuranceService;
24440 amit.gupta 42
import com.spice.profitmandi.service.integrations.zest.MobileInsurancePlan;
33172 tejus.loha 43
import com.spice.profitmandi.service.order.BulkOrderService;
23366 ashik.ali 44
import com.spice.profitmandi.service.order.OrderService;
22069 ashik.ali 45
import com.spice.profitmandi.service.pricing.PricingService;
33213 tejus.loha 46
import com.spice.profitmandi.service.transaction.TransactionService;
26647 tejbeer 47
import com.spice.profitmandi.service.user.RetailerService;
32405 jai.hind 48
import com.spice.profitmandi.service.whatsapp.WhatsappMessageService;
32855 amit.gupta 49
import com.spice.profitmandi.service.whatsapp.WhatsappMessageType;
22139 amit.gupta 50
import com.spice.profitmandi.web.model.LoginDetails;
22069 ashik.ali 51
import com.spice.profitmandi.web.util.CookiesProcessor;
24105 govind 52
import com.spice.profitmandi.web.util.MVCResponseSender;
30148 amit.gupta 53
import org.apache.logging.log4j.LogManager;
54
import org.apache.logging.log4j.Logger;
32405 jai.hind 55
import org.json.JSONArray;
30148 amit.gupta 56
import org.json.JSONObject;
57
import org.springframework.beans.factory.annotation.Autowired;
58
import org.springframework.core.io.InputStreamResource;
59
import org.springframework.http.HttpHeaders;
60
import org.springframework.http.HttpStatus;
61
import org.springframework.http.MediaType;
62
import org.springframework.http.ResponseEntity;
63
import org.springframework.stereotype.Controller;
64
import org.springframework.transaction.annotation.Transactional;
65
import org.springframework.ui.Model;
66
import org.springframework.web.bind.annotation.*;
33172 tejus.loha 67
import org.springframework.web.multipart.MultipartFile;
21612 ashik.ali 68
 
30148 amit.gupta 69
import javax.servlet.http.HttpServletRequest;
70
import javax.servlet.http.HttpServletResponse;
32409 amit.gupta 71
import java.io.ByteArrayInputStream;
72
import java.io.ByteArrayOutputStream;
73
import java.io.InputStream;
32271 amit.gupta 74
import java.nio.charset.StandardCharsets;
30148 amit.gupta 75
import java.time.LocalDateTime;
76
import java.time.format.DateTimeFormatter;
77
import java.time.temporal.ChronoUnit;
78
import java.util.*;
79
import java.util.stream.Collectors;
80
 
21612 ashik.ali 81
@Controller
23973 govind 82
@Transactional(rollbackFor = Throwable.class)
21612 ashik.ali 83
public class OrderController {
84
 
33213 tejus.loha 85
    private static final Logger LOGGER = LogManager.getLogger(OrderController.class);
21985 kshitij.so 86
 
33213 tejus.loha 87
    private static final List<String> offlineOrders = Arrays.asList("EMIOD", "POD");
88
    private static final List<String> allowedDoaImeis = Arrays.asList("863903054378477");
89
    @Autowired
90
    NotificationService notificationService;
91
    @Autowired
92
    TransactionApprovalRepository transactionApprovalRepository;
93
    @Autowired
94
    LineItemRepository lineItemRepository;
95
    @Autowired
96
    AuthRepository authRepository;
97
    @Autowired
98
    TransactionService transactionService;
99
    @Autowired
100
    BulkOrderService bulkOrderService;
101
    @Autowired
102
    private CustomerRepository customerRepository;
103
    private boolean accessoriesDeals = true;
104
    @Autowired
105
    private RoleManager roleManager;
106
    @Autowired
107
    private Gson gson;
108
    @Autowired
109
    private CustomerReturnItemRepository customerReturnItemRepository;
110
    @Autowired
111
    private FofoOrderItemRepository fofoOrderItemRepository;
112
    @Autowired
113
    private PaymentOptionRepository paymentOptionRepository;
114
    @Autowired
115
    private StateRepository stateRepository;
116
    @Autowired
117
    private ItemRepository itemRepository;
118
    @Autowired
119
    private MVCResponseSender mvcResponseSender;
120
    @Autowired
121
    private InsuranceService insuranceService;
122
    @Autowired
123
    private FofoOrderRepository fofoOrderRepository;
124
    @Autowired
125
    private CustomerAddressRepository customerAddressRepository;
126
    @Autowired
127
    private InsurancePolicyRepository insurancePolicyRepository;
128
    @Autowired
129
    private InsuranceProviderRepository insuranceProviderRepository;
130
    @Autowired
131
    private CookiesProcessor cookiesProcessor;
132
    @Autowired
133
    private PricingService pricingService;
134
    @Autowired
135
    private OrderService orderService;
136
    @Autowired
137
    private RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
138
    @Autowired
139
    private AddressRepository addressRepository;
140
    @Autowired
141
    private PaymentOptionTransactionRepository paymentOptionTransactionRepository;
142
    @Autowired
143
    private FofoPartnerPaymentOptionRepository fofoPartnerPaymentOptionRepository;
144
    @Autowired
145
    private ResponseSender<?> responseSender;
146
    @Autowired
147
    private PendingOrderRepository pendingOrderRepository;
148
    @Autowired
149
    private OrderRepository orderRepository;
150
    @Autowired
151
    private PendingOrderItemRepository pendingOrderItemRepository;
152
    @Autowired
153
    private FofoStoreRepository fofoStoreRepository;
154
    @Autowired
155
    private RetailerService retailerService;
156
    @Autowired
157
    private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
158
    @Autowired
159
    private TagListingRepository tagListingRepository;
160
    @Autowired
161
    private PendingOrderService pendingOrderService;
162
    @Autowired
163
    private EmailService emailService;
164
    @Autowired
165
    private SolrService commonSolrService;
166
    @Autowired
167
    private MouRepository mouRepository;
168
    @Autowired
169
    private WhatsappMessageService whatsappMessageService;
170
    @Autowired
171
    private TransactionRepository transactionRepository;
28339 tejbeer 172
 
33213 tejus.loha 173
    @RequestMapping(value = "/order")
174
    public String orderIndex(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
175
            throws ProfitMandiBusinessException {
176
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
32405 jai.hind 177
 
33213 tejus.loha 178
        int addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(loginDetails.getFofoId());
179
        Address address = addressRepository.selectById(addressId);
23973 govind 180
 
33213 tejus.loha 181
        List<CartFofo> cartItems = orderService.cartCheckout(cartData);
182
        Set<Integer> itemIds = new HashSet<>();
183
        List<Integer> poIds = new ArrayList<>();
184
        List<Integer> poItemIds = new ArrayList<>();
185
        for (CartFofo cartFofo : cartItems) {
186
            itemIds.add(cartFofo.getItemId());
187
            if (cartFofo.getPoId() != 0) {
188
                poIds.add(cartFofo.getPoId());
189
                poItemIds.add(cartFofo.getPoItemId());
190
            }
191
        }
21985 kshitij.so 192
 
33213 tejus.loha 193
        PendingOrder po = null;
194
        Customer customer = null;
195
        PendingOrderItem poi = null;
196
        Map<Integer, PriceModel> mopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIds,
197
                loginDetails.getFofoId());
198
        List<Integer> paymentOptionIds = fofoPartnerPaymentOptionRepository
199
                .selectPaymentOptionIdsByFofoId(loginDetails.getFofoId());
23973 govind 200
 
33213 tejus.loha 201
        if (!poIds.isEmpty()) {
202
            po = pendingOrderRepository.selectById(poIds.get(0));
203
            customer = customerRepository.selectById(po.getCustomerId());
204
            if (!offlineOrders.contains(po.getPayMethod())) {
205
                paymentOptionIds.add(23);
206
            }
207
        }
27046 tejbeer 208
 
33213 tejus.loha 209
        if (!poItemIds.isEmpty()) {
210
            poi = pendingOrderItemRepository.selectById(poItemIds.get(0));
211
        }
23973 govind 212
 
33213 tejus.loha 213
        // List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(new
214
        // HashSet<>(paymentOptionIds));
21985 kshitij.so 215
 
33213 tejus.loha 216
        List<PaymentOption> paymentOptions = paymentOptionRepository.selectActiveOption();
29642 amit.gupta 217
 
33213 tejus.loha 218
        LOGGER.info("pendingOrder" + po);
219
        LOGGER.info("pendingOrderItem" + poi);
24844 amit.gupta 220
 
33213 tejus.loha 221
        LOGGER.info("mopPriceMap {}", mopPriceMap);
222
        model.addAttribute("stateNames",
223
                stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
224
        model.addAttribute("retailerStateName", address.getState());
225
        model.addAttribute("pendingPOCustomer", gson.toJson(customer));
226
        model.addAttribute("pendingPO", gson.toJson(po));
23973 govind 227
 
33213 tejus.loha 228
        model.addAttribute("cartItems", cartItems);
229
        model.addAttribute("pendingOrder", po);
230
        model.addAttribute("pendingOrderItem", poi);
21985 kshitij.so 231
 
33213 tejus.loha 232
        model.addAttribute("mopPriceMap", mopPriceMap);
233
        model.addAttribute("paymentOptions", paymentOptions);
234
        model.addAttribute("accessoriesDeals", accessoriesDeals);
235
        return "order-index";
236
    }
24844 amit.gupta 237
 
33213 tejus.loha 238
    @RequestMapping(value = "/checkplans", method = RequestMethod.GET)
239
    public String getInsurancePrices(HttpServletRequest request, @RequestParam float price, Model model,
240
                                     @RequestParam int itemId) throws ProfitMandiBusinessException {
241
        LOGGER.info("Request received at url : {}", request.getRequestURI());
24105 govind 242
 
33213 tejus.loha 243
        try {
244
            String response = mvcResponseSender.createResponseString(this.getPlans(price, itemId));
245
            model.addAttribute("response1", response);
246
        } catch (Exception e) {
247
            // TODO Auto-generated catch block
248
            LOGGER.info(e.getMessage(), e);
249
            throw new ProfitMandiBusinessException("Plans", "Plans API", "Error formatting insurance plans");
250
        }
21985 kshitij.so 251
 
33213 tejus.loha 252
        return "response";
253
    }
23973 govind 254
 
33213 tejus.loha 255
    @RequestMapping(value = "/get-order", method = RequestMethod.GET)
256
    public String getOrder(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId,
257
                           Model model) throws ProfitMandiBusinessException {
258
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
259
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
260
        List<FofoOrderItem> fofoLineItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
261
        CustomerAddress customerAddress = null;
262
        if (fofoOrder.getCustomerAddressId() != 0) {
263
            customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
264
        }
23973 govind 265
 
33213 tejus.loha 266
        Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
267
        if (customerAddress != null) {
268
            customerAddress.setPhoneNumber(customer.getMobileNumber());
269
        }
270
        LOGGER.info("Added to get invoice - {}, {}", customer, 123);
271
        List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
272
                .selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
273
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
274
                .paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
275
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
276
                .selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
277
        this.addInsuranceProvider(insurancePolicies);
32627 ranu 278
 
33213 tejus.loha 279
        model.addAttribute("fofoOrder", fofoOrder);
280
        model.addAttribute("fofoLineItems", fofoLineItems);
281
        if (customerAddress != null) {
282
            model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
283
        } else {
284
            model.addAttribute("customerBillingAddress", "");
21985 kshitij.so 285
 
33213 tejus.loha 286
        }
287
        model.addAttribute("customerBillingAddressObj", customerAddress);
288
        model.addAttribute("customerDetailsObj", customer);
289
        model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
290
        model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
291
        model.addAttribute("insurancePolicies", insurancePolicies);
292
        return "order-details";
293
    }
32637 amit.gupta 294
 
33213 tejus.loha 295
    private Map<Integer, InsuranceProvider> toInsuranceProviderIdInsuranceProvider(
296
            List<InsuranceProvider> insuranceProviders) {
297
        Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = new HashMap<>();
298
        for (InsuranceProvider insuranceProvider : insuranceProviders) {
299
            insuranceProviderIdInsuranceProviderMap.put(insuranceProvider.getId(), insuranceProvider);
300
        }
301
        return insuranceProviderIdInsuranceProviderMap;
302
    }
23973 govind 303
 
33247 ranu 304
    private void addInsuranceProvider(List<InsurancePolicy> insurancePolicies) throws ProfitMandiBusinessException {
33213 tejus.loha 305
        if (insurancePolicies.isEmpty()) {
306
            return;
307
        }
308
        Set<Integer> insuranceProviderIds = new HashSet<>();
309
        for (InsurancePolicy insurancePolicy : insurancePolicies) {
310
            insuranceProviderIds.add(insurancePolicy.getProviderId());
311
        }
312
        LOGGER.info("insuranceProviderIds {}", insuranceProviderIds);
313
        List<InsuranceProvider> insuranceProviders = insuranceProviderRepository.selectByIds(insuranceProviderIds);
314
        Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = this
315
                .toInsuranceProviderIdInsuranceProvider(insuranceProviders);
316
        for (InsurancePolicy insurancePolicy : insurancePolicies) {
317
            insurancePolicy
318
                    .setInsuranceProvider(insuranceProviderIdInsuranceProviderMap.get(insurancePolicy.getProviderId()));
319
        }
320
    }
23973 govind 321
 
33213 tejus.loha 322
    @RequestMapping(value = "/saleDetails", method = RequestMethod.GET)
323
    public String getSaleDetails(HttpServletRequest request,
324
                                 @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) throws Exception {
325
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
326
        boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
327
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
328
        List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
329
        CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
330
        List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
331
                .selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
23973 govind 332
 
33213 tejus.loha 333
        // Added Migration info as we lost it.
334
        if (paymentOptionTransactions == null || paymentOptionTransactions.size() == 0) {
335
            PaymentOptionTransaction pot = new PaymentOptionTransaction();
336
            pot.setAmount(fofoOrder.getTotalAmount());
337
            pot.setCreateTimestamp(fofoOrder.getCreateTimestamp());
338
            // Mark it paid through cash
339
            pot.setPaymentOptionId(1);
340
            pot.setReferenceType(PaymentOptionReferenceType.ORDER);
341
            paymentOptionTransactionRepository.persist(pot);
342
            paymentOptionTransactions.add(pot);
343
            LOGGER.info("Added to get invoice");
344
        }
345
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
346
                .paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
347
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
348
                .selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
349
        this.addInsuranceProvider(insurancePolicies);
350
        Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
351
            try {
352
                return itemRepository.selectById(x.getItemId());
353
            } catch (ProfitMandiBusinessException e) {
354
                // TODO Auto-generated catch block
355
                return null;
356
            }
357
        }));
358
        Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
359
                .collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
23973 govind 360
 
33213 tejus.loha 361
        Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
362
                .collect(Collectors.toMap(foi -> foi.getId(),
363
                        foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
23973 govind 364
 
33213 tejus.loha 365
        Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
23973 govind 366
 
33213 tejus.loha 367
        for (FofoOrderItem foi : fofoOrderItems) {
368
            for (FofoLineItem fli : foi.getFofoLineItems()) {
369
                inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
370
            }
371
            List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
372
                    .selectAllByOrderItemId(foi.getId());
373
            this.markDoa(fofoOrder, foi, isAdmin);
374
            for (CustomerReturnItem customerReturnItem : customerReturnItems) {
375
                inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
376
                        inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
377
            }
378
        }
23973 govind 379
 
33213 tejus.loha 380
        LOGGER.info("fofoOrderItemIdLineItemMap {}", fofoOrderItemIdLineItemMap);
381
        model.addAttribute("fofoOrder", fofoOrder);
382
        model.addAttribute("itemsMap", itemsMap);
383
        model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
384
        model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
385
                StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
386
        model.addAttribute("fofoOrderItemIdLineItemMap", fofoOrderItemIdLineItemMap);
23973 govind 387
 
33213 tejus.loha 388
        model.addAttribute("fofoOrderItems", fofoOrderItems);
389
        model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
390
        if (customerAddress != null) {
30426 tejbeer 391
 
33213 tejus.loha 392
            model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
393
        } else {
394
            model.addAttribute("customerBillingAddress", "");
32637 amit.gupta 395
 
33213 tejus.loha 396
        }
397
        model.addAttribute("customerBillingAddressObj", customerAddress);
398
        model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
399
        model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
400
        model.addAttribute("insurancePolicies", insurancePolicies);
401
        model.addAttribute("markDefective", this.markDefective(fofoOrder));
402
        return "sale-details";
403
    }
32637 amit.gupta 404
 
33213 tejus.loha 405
    private void markDoa(FofoOrder fofoOrder, FofoOrderItem foi, boolean isAdmin) {
406
        if (isAdmin) {
407
            foi.setDoa(true);
408
            return;
409
        }
410
        boolean isImei = foi.getFofoLineItems().stream()
411
                .anyMatch(x -> org.apache.commons.lang3.StringUtils.isNotEmpty(x.getSerialNumber())
412
                        && allowedDoaImeis.contains(x.getSerialNumber()));
413
        LocalDateTime buyDate = fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS);
414
        LocalDateTime curDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
415
        if (buyDate.isAfter(curDate.minusDays(45)) || isImei) {
416
            foi.setDoa(true);
417
        } else
418
            foi.setDoa(
419
                    foi.getBrand().equals("Nokia") && foi.getCost() < 4990 && buyDate.isAfter(curDate.minusYears(1)));
420
    }
30426 tejbeer 421
 
33213 tejus.loha 422
    private boolean markDefective(FofoOrder fofoOrder) {
423
        return fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS).plusDays(180)
424
                .isAfter(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));
26647 tejbeer 425
 
33213 tejus.loha 426
    }
26647 tejbeer 427
 
33213 tejus.loha 428
    @RequestMapping(value = "/getSearchOrder")
429
    public String getSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
430
        return "search-order";
431
    }
26647 tejbeer 432
 
33213 tejus.loha 433
    @RequestMapping(value = "/getInvoiceSearchOrder")
434
    public String getInvoiceSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
435
        return "invoices-cancel";
436
    }
33172 tejus.loha 437
 
33213 tejus.loha 438
    @RequestMapping(value = "/customerDetails", method = RequestMethod.PUT)
439
    public String updateCustomerDetails(HttpServletRequest request, @RequestBody CustomCustomer customCustomer,
440
                                        @RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
441
            throws Exception {
33172 tejus.loha 442
 
33213 tejus.loha 443
        orderService.updateCustomerDetails(customCustomer, invoiceNumber);
444
        return this.getSearchOrderDetails(request, invoiceNumber, model);
445
    }
33172 tejus.loha 446
 
33213 tejus.loha 447
    @RequestMapping(value = "/searchOrderDetails", method = RequestMethod.GET)
448
    public String getSearchOrderDetails(HttpServletRequest request,
449
                                        @RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
450
            throws Exception {
33172 tejus.loha 451
 
33213 tejus.loha 452
        FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
453
        List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
454
        Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
455
        CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
456
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = paymentOptionRepository.selectActiveOption().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
457
        List<Integer> fofoPartnerPaymentOptions = new ArrayList<>(paymentOptionIdPaymentOptionMap.keySet());
458
        Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
459
            try {
460
                return itemRepository.selectById(x.getItemId());
461
            } catch (ProfitMandiBusinessException e) {
462
                // TODO Auto-generated catch block
463
                return null;
464
            }
465
        }));
466
        LOGGER.info("fofoPartnerPaymentOptions" + fofoPartnerPaymentOptions);
467
        List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
468
                .selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
469
        LOGGER.info("paymentOptionTransactions" + paymentOptionTransactions);
26647 tejbeer 470
 
33213 tejus.loha 471
        Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
472
                .paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
473
        LOGGER.info("paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
474
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
475
                .selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
476
        this.addInsuranceProvider(insurancePolicies);
477
        model.addAttribute("fofoOrder", fofoOrder);
478
        for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
479
            fofoOrderItem.setDoa(true);
480
        }
27861 tejbeer 481
 
33213 tejus.loha 482
        Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
483
                .collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
28339 tejbeer 484
 
33213 tejus.loha 485
        Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
486
                .collect(Collectors.toMap(foi -> foi.getId(),
487
                        foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
28339 tejbeer 488
 
33213 tejus.loha 489
        Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
28339 tejbeer 490
 
33213 tejus.loha 491
        for (FofoOrderItem foi : fofoOrderItems) {
492
            for (FofoLineItem fli : foi.getFofoLineItems()) {
493
                inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
494
            }
495
            List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
496
                    .selectAllByOrderItemId(foi.getId());
497
            for (CustomerReturnItem customerReturnItem : customerReturnItems) {
498
                inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
499
                        inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
500
            }
501
        }
502
        model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
503
                StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
504
        model.addAttribute("fofoOrderItems", fofoOrderItems);
505
        model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
506
        model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
507
        model.addAttribute("itemsMap", itemsMap);
508
        model.addAttribute("markDefective", true);
509
        model.addAttribute("customer", customer);
510
        model.addAttribute("customerAddress", customerAddress);
511
        model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
512
        model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
513
        model.addAttribute("paymentOptionIdPaymentOptionTransactionMap", paymentOptionIdPaymentOptionTransactionMap);
514
        model.addAttribute("insurancePolicies", insurancePolicies);
515
        model.addAttribute("fofoPartnerPaymentOptions", fofoPartnerPaymentOptions);
516
        model.addAttribute("totalNumberOfPaymentOptionId", fofoPartnerPaymentOptions.size());
517
        model.addAttribute("stateNames",
518
                stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
519
        return "search-order-details";
520
    }
28420 tejbeer 521
 
33213 tejus.loha 522
    private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap(
33247 ranu 523
            List<PaymentOptionTransaction> paymentOptionTransactions) throws ProfitMandiBusinessException {
33213 tejus.loha 524
        Set<Integer> paymentOptionIds = new HashSet<>();
525
        for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
526
            paymentOptionIds.add(paymentOptionTransaction.getPaymentOptionId());
527
        }
528
        List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(paymentOptionIds);
529
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
530
        for (PaymentOption paymentOption : paymentOptions) {
531
            paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
532
        }
533
        return paymentOptionIdPaymentOptionMap;
534
    }
23973 govind 535
 
33213 tejus.loha 536
    private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMapUsingPaymentOptions(
33247 ranu 537
            List<Integer> fofoPartnerPaymentOptions) throws ProfitMandiBusinessException {
33213 tejus.loha 538
        List<PaymentOption> paymentOptions = paymentOptionRepository
539
                .selectByIds(new HashSet<>(fofoPartnerPaymentOptions));
540
        Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
541
        for (PaymentOption paymentOption : paymentOptions) {
542
            paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
543
        }
544
        return paymentOptionIdPaymentOptionMap;
545
    }
23973 govind 546
 
33213 tejus.loha 547
    private Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap(
548
            List<PaymentOptionTransaction> paymentOptionTransactions) {
549
        Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = new HashMap<>();
550
        for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
551
            paymentOptionIdPaymentOptionTransactionMap.put(paymentOptionTransaction.getPaymentOptionId(),
552
                    paymentOptionTransaction);
553
        }
554
        return paymentOptionIdPaymentOptionTransactionMap;
555
    }
28339 tejbeer 556
 
33213 tejus.loha 557
    @RequestMapping(value = "/create-order", method = RequestMethod.POST)
558
    public String createOrder(HttpServletRequest request, @RequestBody CreateOrderRequest createOrderRequest,
559
                              Model model) throws ProfitMandiBusinessException {
560
        // throw new ProfitMandiBusinessException("Billing is on hold temporarily",
561
        // "Billing is on hold temporarily", "Billing is on hold temporarily");
562
        LOGGER.info("request at uri {} body {}", request.getRequestURI(), createOrderRequest);
563
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28339 tejbeer 564
 
33213 tejus.loha 565
        int fofoOrderId = orderService.createOrder(createOrderRequest, fofoDetails.getFofoId(), accessoriesDeals);
28339 tejbeer 566
 
33213 tejus.loha 567
        LOGGER.info("Order has been created successfully...");
568
        try {
569
            this.sendWhatsappInvoice(fofoOrderRepository.selectByOrderId(fofoOrderId));
570
        } catch (Exception e) {
571
            LOGGER.info("Could not send whatsapp message");
572
            e.printStackTrace();
573
        }
574
        return "redirect:/get-order/?orderId=" + fofoOrderId;
575
    }
28339 tejbeer 576
 
33213 tejus.loha 577
    private void sendWhatsappInvoice(FofoOrder fofoOrder) throws Exception {
578
        Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
579
        CustomRetailer retailer = retailerService.getFofoRetailer(fofoOrder.getFofoId());
580
        String message = String.format("Dear %s,\n" +
581
                "Thank you for your purchase from SmartDukaan store - %s, %s.\n" +
582
                "Your purchase invoice is attached for your reference.\n" +
583
                "\n" +
584
                "Download our app for offers and updates on new products.\n" +
585
                "https://www.smartdukaan.com/b2c\n" +
586
                "\n" +
587
                "Best Regards\n" +
588
                "SmartDukaan", customer.getFirstName(), retailer.getBusinessName(), retailer.getAddress().getCity());
589
        boolean sentMessage = notificationService.isWhatMessageSend(customer.getMobileNumber());
590
        if (sentMessage) {
591
            notificationService.sendWhatsappMediaMessage(message, customer.getMobileNumber(), this.getPublicInvoiceUrl(fofoOrder.getInvoiceNumber()),
592
                    this.getFileName(fofoOrder.getInvoiceNumber()), WhatsappMessageType.DOCUMENT);
593
        }
594
    }
28339 tejbeer 595
 
33213 tejus.loha 596
    private String getFileName(String invoiceNumber) {
597
        return "INV-" + invoiceNumber.replace("/", "-") + ".pdf";
598
    }
31375 tejbeer 599
 
33213 tejus.loha 600
    private String getPublicInvoiceUrl(String invoiceNumber) {
601
        String base64Encoded = Base64.getMimeEncoder().encodeToString(invoiceNumber.getBytes(StandardCharsets.UTF_8));
602
        String publicUrl = "https://partners.smartdukaan.com/wa-invoice-send/" + base64Encoded + ".pdf";
603
        LOGGER.info("Public Whatsapp Url for Invoice Message - {}", publicUrl);
604
        return publicUrl;
605
    }
28339 tejbeer 606
 
33213 tejus.loha 607
    @RequestMapping(value = "/order/bad_return", method = RequestMethod.POST)
608
    public ResponseEntity<?> badReturn(HttpServletRequest request, @RequestBody FoiBadReturnRequest foiBadReturnRequest,
609
                                       Model model) throws ProfitMandiBusinessException {
610
        LOGGER.info("request at uri {} body {}", request.getRequestURI(), foiBadReturnRequest);
611
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
612
        CustomerCreditNote custmoerCreditNote;
613
        if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
614
            FofoOrderItem foi = fofoOrderItemRepository.selectById(foiBadReturnRequest.getFofoOrderItemId());
615
            FofoOrder fo = fofoOrderRepository.selectByOrderId(foi.getOrderId());
616
            custmoerCreditNote = orderService.badReturn(fo.getFofoId(), foiBadReturnRequest);
617
        } else {
618
            custmoerCreditNote = orderService.badReturn(fofoDetails.getFofoId(), foiBadReturnRequest);
619
        }
620
        return responseSender.ok(custmoerCreditNote.getId());
621
    }
28339 tejbeer 622
 
33213 tejus.loha 623
    @GetMapping(value = "/wa-invoice-send/{invoiceHash}")
624
    public ResponseEntity<?> generateInvoice(@PathVariable String invoiceHash) throws ProfitMandiBusinessException {
625
        String decodedInvoiceNumber = new String(Base64.getMimeDecoder().decode(invoiceHash));
626
        LOGGER.info("Invoice Hash {}", invoiceHash);
28339 tejbeer 627
 
23973 govind 628
 
33213 tejus.loha 629
        FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(decodedInvoiceNumber);
24844 amit.gupta 630
 
33213 tejus.loha 631
        InvoicePdfModel pdfModel = orderService.getInvoicePdfModel(fofoOrder.getId());
24844 amit.gupta 632
 
33213 tejus.loha 633
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
634
        PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
635
        final HttpHeaders headers = new HttpHeaders();
636
        //headers.setContentDispositionFormData("inline", number + ".pdf");
637
        headers.add(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=" + pdfModel.getInvoiceNumber() + ".pdf");
638
        int contentLength = byteArrayOutputStream.toByteArray().length;
639
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
640
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
641
        return ResponseEntity.ok()
642
                .headers(headers)
643
                .contentLength(contentLength)
644
                .contentType(MediaType.parseMediaType("application/pdf"))
645
                .body(inputStreamResource);
646
    }
23973 govind 647
 
33213 tejus.loha 648
    @RequestMapping(value = "/wa-listen", method = RequestMethod.POST)
649
    public ResponseEntity<?> listenWhatsappStatus(@RequestBody String whatsappJsonResponse) {
650
        LOGGER.info("whatsappJsonResponse {}", whatsappJsonResponse);
651
        //jaihind
652
        //  String jsonString = "[{\"srcAddr\":\"TESTSM\",\"channel\":\"WHATSAPP\",\"externalId\":\"4977024756456780043-180044363908187691\",\"cause\":\"SUCCESS\",\"errorCode\":\"000\",\"destAddr\":\"919813272029\",\"eventType\":\"DELIVERED\",\"eventTs\":1692848106000}]";
653
        JSONArray jsonArray = new JSONArray(whatsappJsonResponse);
654
        for (int i = 0; i < jsonArray.length(); i++) {
32711 amit.gupta 655
 
33213 tejus.loha 656
            JSONObject jsonObject = jsonArray.getJSONObject(i);
657
            String externalId = jsonObject.getString("externalId");
658
            String destAddr = jsonObject.getString("destAddr");
659
            String eventType = jsonObject.getString("eventType");
660
            whatsappMessageService.setWhatsappResponse(externalId, destAddr, eventType);
661
        }
662
        //jaihind
663
        return responseSender.ok("Success");
32711 amit.gupta 664
 
33213 tejus.loha 665
    }
32271 amit.gupta 666
 
33213 tejus.loha 667
    @RequestMapping(value = "/generateInvoice")
668
    public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
669
                                             @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
670
        LOGGER.info("Request received at url {} with params [{}={}] ", request.getRequestURI(),
671
                ProfitMandiConstants.ORDER_ID, orderId);
672
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
673
        InvoicePdfModel pdfModel = null;
674
        if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
675
            pdfModel = orderService.getInvoicePdfModel(orderId);
676
        } else {
677
            pdfModel = orderService.getInvoicePdfModel(fofoDetails.getFofoId(), orderId);
678
        }
679
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
680
        PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
681
        LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
682
        final HttpHeaders headers = new HttpHeaders();
683
        headers.setContentType(MediaType.APPLICATION_PDF);
684
        headers.setContentDispositionFormData("inline", "invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
685
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
686
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
687
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
688
        return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
689
    }
24087 amit.gupta 690
 
33213 tejus.loha 691
    @RequestMapping(value = "/generateInvoices")
692
    public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
693
                                             @RequestParam LocalDateTime startDate, @RequestParam LocalDateTime endDate, @RequestParam int partnerId)
694
            throws ProfitMandiBusinessException {
695
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
696
        List<InvoicePdfModel> pdfModels = new ArrayList<>();
697
        if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
698
            List<Integer> orderIds = fofoOrderRepository.selectByFofoId(partnerId, startDate, endDate, 0, 0).stream()
699
                    .map(x -> x.getId()).collect(Collectors.toList());
700
            for (int orderId : orderIds) {
701
                pdfModels.add(orderService.getInvoicePdfModel(orderId));
702
            }
703
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
704
            PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
705
            LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
706
            final HttpHeaders headers = new HttpHeaders();
707
            headers.setContentType(MediaType.APPLICATION_PDF);
708
            headers.set("Content-disposition", "inline; filename=invoice-" + partnerId + ".pdf");
709
            headers.setContentLength(byteArrayOutputStream.toByteArray().length);
710
            final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
711
            final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
712
            return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
713
        } else {
714
            throw new ProfitMandiBusinessException("Auth", fofoDetails.getEmailId(), "Unauthorised access");
715
        }
716
    }
23973 govind 717
 
33213 tejus.loha 718
    @RequestMapping(value = "/saleHistory")
719
    public String saleHistory(HttpServletRequest request,
720
                              @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
721
                              @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
722
                              @RequestParam(required = false) LocalDateTime startTime,
723
                              @RequestParam(required = false) LocalDateTime endTime,
724
                              @RequestParam(name = "offset", defaultValue = "0") int offset,
725
                              @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
726
            throws ProfitMandiBusinessException {
727
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
32405 jai.hind 728
 
33213 tejus.loha 729
        Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
730
                startTime, endTime, offset, limit);
731
        model.addAllAttributes(map);
732
        return "sale-history";
733
    }
32405 jai.hind 734
 
33213 tejus.loha 735
    @RequestMapping(value = "/downloadInvoices")
736
    public ResponseEntity<?> downloadInvoices(HttpServletRequest request,
737
                                              @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
738
                                              @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
739
                                              @RequestParam(required = false) LocalDateTime startTime,
740
                                              @RequestParam(required = false) LocalDateTime endTime,
741
                                              @RequestParam(name = "offset", defaultValue = "0") int offset,
742
                                              @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
743
            throws ProfitMandiBusinessException {
744
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
32409 amit.gupta 745
 
33213 tejus.loha 746
        Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
747
                startTime, endTime, offset, 100);
748
        List<FofoOrder> fofoOrders = (List<FofoOrder>) map.get("saleHistories");
23973 govind 749
 
33213 tejus.loha 750
        if (fofoOrders.size() == 0) {
751
            throw new ProfitMandiBusinessException("Search criteria", "", "No orders found for criteria");
752
        }
23654 amit.gupta 753
 
33213 tejus.loha 754
        final HttpHeaders headers = new HttpHeaders();
755
        headers.setContentType(MediaType.APPLICATION_PDF);
756
        headers.set("Content-disposition", "inline; filename=invoices.pdf");
757
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
758
        List<InvoicePdfModel> pdfModels = new ArrayList<>();
759
        for (FofoOrder fofoOrder : fofoOrders) {
760
            try {
761
                pdfModels.add(orderService.getInvoicePdfModel(fofoOrder.getId()));
762
            } catch (Exception e) {
763
                LOGGER.info("could not create invoice for {}, invoice number {}", fofoOrder.getId(),
764
                        fofoOrder.getInvoiceNumber());
765
            }
766
        }
767
        PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
768
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
769
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
770
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
771
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
772
    }
23654 amit.gupta 773
 
33213 tejus.loha 774
    @RequestMapping(value = "/credit-note/{creditNoteId}")
775
    public ResponseEntity<?> downloadCreditNote(HttpServletRequest request, @PathVariable int creditNoteId)
776
            throws ProfitMandiBusinessException {
777
        CreditNotePdfModel creditNotePdfModel = orderService.getCreditNotePdfModel(creditNoteId);
778
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
779
        PdfUtils.generateAndWriteCustomerCreditNotes(Arrays.asList(creditNotePdfModel), byteArrayOutputStream);
780
        LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
781
        final HttpHeaders headers = new HttpHeaders();
782
        headers.setContentType(MediaType.APPLICATION_PDF);
783
        headers.set("Content-disposition",
784
                "inline; filename=invoice-" + creditNotePdfModel.getCreditNoteNumber() + ".pdf");
785
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
786
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
787
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
788
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
789
    }
23973 govind 790
 
33213 tejus.loha 791
    @RequestMapping(value = "/getPaginatedSaleHistory")
792
    public String getSaleHistoryPaginated(HttpServletRequest request,
793
                                          @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
794
                                          @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
795
                                          @RequestParam(required = false) LocalDateTime startTime,
796
                                          @RequestParam(required = false) LocalDateTime endTime,
797
                                          @RequestParam(name = "offset", defaultValue = "0") int offset,
798
                                          @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
799
            throws ProfitMandiBusinessException {
800
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
801
        Map<String, Object> map = orderService.getSaleHistoryPaginated(loginDetails.getFofoId(), searchType,
802
                searchValue, startTime, endTime, offset, limit);
803
        model.addAllAttributes(map);
804
        return "sale-history-paginated";
805
    }
23973 govind 806
 
33213 tejus.loha 807
    @PutMapping(value = "/updatePaymentTransaction")
808
    public String updateTransactionDetails(HttpServletRequest request, @RequestParam String referenceType,
809
                                           @RequestParam int fofoId, @RequestParam int referenceId,
810
                                           @RequestBody PartnerOptionsAndItemAmountModel partnerOptionsAndItemAmountModel,
811
                                           @RequestParam float totalAmount, Model model) throws Exception {
29707 tejbeer 812
 
33213 tejus.loha 813
        List<PaymentOptionTransactionModel> paymentOptionTransactionModels = partnerOptionsAndItemAmountModel
814
                .getPaymentOptionTransactionModel();
815
        LOGGER.info(paymentOptionTransactionModels);
816
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoId, referenceId);
817
        LOGGER.info("sdssd" + fofoOrder);
818
        fofoOrder.setTotalAmount(totalAmount);
819
        List<FofoItemIdAmountModel> fofoItemIdAmountModel = partnerOptionsAndItemAmountModel.getItemAmountModel();
820
        for (FofoItemIdAmountModel fim : fofoItemIdAmountModel) {
821
            LOGGER.info("fim" + fim.getFofoItemId());
23973 govind 822
 
33213 tejus.loha 823
            LOGGER.info("fimAmount" + fim.getAmount());
824
            Item item = itemRepository.selectById(fim.getItemId());
825
            TagListing tagListing = tagListingRepository.selectByItemId(item.getId());
826
            FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectById(fim.getFofoItemId());
827
            LOGGER.info("category" + item.getCategoryId());
828
            if (item.getCategoryId() == ProfitMandiConstants.MOBILE_CATEGORY_ID) {
829
                if (fofoOrderItem.getMop() <= fim.getAmount()) {
23973 govind 830
 
33213 tejus.loha 831
                    if (fim.getAmount() <= tagListing.getMrp()) {
832
                        fofoOrderItem.setSellingPrice(fim.getAmount());
833
                    } else {
834
                        throw new ProfitMandiBusinessException("Amount", fim.getAmount(),
835
                                "Sum of amount is not less than  to MRP");
836
                    }
23973 govind 837
 
33213 tejus.loha 838
                    LOGGER.info("fofoOrderItem2" + fofoOrderItem);
23973 govind 839
 
33213 tejus.loha 840
                } else {
841
                    // TODO below mop condition need to added added
842
                    fofoOrderItem.setSellingPrice(fim.getAmount());
843
                }
23973 govind 844
 
33213 tejus.loha 845
            } else {
846
                fofoOrderItem.setSellingPrice(fim.getAmount());
847
                LOGGER.info("fofoOrderItem1" + fofoOrderItem);
27819 tejbeer 848
 
33213 tejus.loha 849
            }
850
            LOGGER.info("fofoOrderItem" + fofoOrderItem);
23973 govind 851
 
33213 tejus.loha 852
        }
23973 govind 853
 
33213 tejus.loha 854
        /*
855
         * for (PaymentOptionTransactionModel paymentOptionTransactionModel :
856
         * paymentOptionTransactionModels) { amount = amount +
857
         * paymentOptionTransactionModel.getAmount(); } LOGGER.info("FofoOrder amount" +
858
         * fofoOrder.getUnitPrice() + "amount" + amount); if (amount ==
859
         * fofoOrder.getUnitPrice()) {
860
         */
861
        if (paymentOptionTransactionModels.size() > 0) {
862
            List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
863
                    .selectByReferenceIdAndType(referenceId, PaymentOptionReferenceType.ORDER);
864
            Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
865
                    .paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
866
            LOGGER.info(
867
                    "paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
868
            for (PaymentOptionTransactionModel paymentOptionTransactionModel : paymentOptionTransactionModels) {
869
                if (paymentOptionIdPaymentOptionTransactionMap
870
                        .containsKey(paymentOptionTransactionModel.getPaymentOptionId())) {
23973 govind 871
 
33213 tejus.loha 872
                    PaymentOptionTransaction paymentOptionTransaction = paymentOptionIdPaymentOptionTransactionMap
873
                            .get(paymentOptionTransactionModel.getPaymentOptionId());
31739 amit.gupta 874
 
33213 tejus.loha 875
                    if (paymentOptionTransactionModel.getAmount() == 0) {
876
                        paymentOptionTransactionRepository.delete(paymentOptionTransaction);
877
                        LOGGER.info("deleted successfully");
878
                    } else {
24844 amit.gupta 879
 
33213 tejus.loha 880
                        paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
881
                        paymentOptionTransactionRepository.persist(paymentOptionTransaction);
882
                        LOGGER.info("updated successfully");
24281 amit.gupta 883
 
33213 tejus.loha 884
                    }
885
                } else {
886
                    if (paymentOptionTransactionModel.getAmount() > 0) {
887
                        PaymentOptionTransaction paymentOptionTransaction = new PaymentOptionTransaction();
888
                        paymentOptionTransaction.setReferenceId(referenceId);
889
                        paymentOptionTransaction.setReferenceType(PaymentOptionReferenceType.ORDER);
890
                        paymentOptionTransaction.setPaymentOptionId(paymentOptionTransactionModel.getPaymentOptionId());
891
                        paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
892
                        paymentOptionTransaction.setFofoId(fofoId);
893
                        paymentOptionTransaction.setCreateTimestamp(fofoOrder.getCreateTimestamp());
894
                        paymentOptionTransactionRepository.persist(paymentOptionTransaction);
895
                        LOGGER.info("inserted successfully");
896
                    }
897
                }
24281 amit.gupta 898
 
33213 tejus.loha 899
            }
24281 amit.gupta 900
 
33213 tejus.loha 901
            model.addAttribute("response1", mvcResponseSender.createResponseString(true));
902
        }
903
        /*
904
         * else
905
         *
906
         * { throw new ProfitMandiBusinessException("Amount", amount,
907
         * "Sum of amount is not equal to total amount"); }
908
         */
23973 govind 909
 
33213 tejus.loha 910
        return "response";
23973 govind 911
 
33213 tejus.loha 912
    }
24105 govind 913
 
33213 tejus.loha 914
    private Map<String, List<MobileInsurancePlan>> getPlans(float sellingPrice, int itemId)
915
            throws ProfitMandiBusinessException {
916
        try {
917
            Map<String, List<MobileInsurancePlan>> productDurationPlans = insuranceService.getAllPlans(itemId,
918
                    sellingPrice);
919
            return productDurationPlans;
920
        } catch (Exception e) {
921
            LOGGER.info(e, e);
922
            throw new ProfitMandiBusinessException("Fetch Insurance Plans", "Insurance",
923
                    "Could not fetch insurance Plans");
924
        }
24105 govind 925
 
33213 tejus.loha 926
    }
23973 govind 927
 
33213 tejus.loha 928
    @GetMapping("/insuranceDetails")
929
    public String getInsuranceDetails(HttpServletRequest request,
930
                                      @RequestParam(name = "offset", defaultValue = "0") int offset,
931
                                      @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
932
            throws ProfitMandiBusinessException {
933
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
934
        long size = 0;
935
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
936
                offset, limit);
937
        size = insurancePolicyRepository.selectCountByRetailerId(loginDetails.getFofoId());
938
        Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
939
                .selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
940
                .stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
941
        if (size < limit) {
942
            model.addAttribute("end", offset + size);
943
        } else {
944
            model.addAttribute("end", offset + limit);
945
        }
946
        model.addAttribute("start", offset + 1);
947
        model.addAttribute("size", size);
948
        model.addAttribute("insurancePolicies", insurancePolicies);
949
        model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
950
        return "insurance-details";
951
    }
28339 tejbeer 952
 
33213 tejus.loha 953
    @GetMapping("/insuranceDetailsPaginated")
954
    public String getInsuranceDetailsPaginated(HttpServletRequest request,
955
                                               @RequestParam(name = "offset", defaultValue = "0") int offset,
956
                                               @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
957
            throws ProfitMandiBusinessException {
958
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
959
        List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
960
                offset, limit);
961
        Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
962
                .selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
963
                .stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
964
        model.addAttribute("insurancePolicies", insurancePolicies);
965
        model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
966
        return "insurance-details-paginated";
967
    }
23973 govind 968
 
33213 tejus.loha 969
    @GetMapping("/getMouForm")
970
    public String getMouForm(HttpServletRequest request, Model model) throws Exception {
971
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
21985 kshitij.so 972
 
33213 tejus.loha 973
        Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
974
        if (mou != null) {
975
            if (mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
976
                model.addAttribute("response1", mvcResponseSender.createResponseString(true));
977
            } else {
978
                model.addAttribute("response1", mvcResponseSender.createResponseString(false));
979
            }
32238 amit.gupta 980
 
33213 tejus.loha 981
        } else {
982
            model.addAttribute("response1", mvcResponseSender.createResponseString(false));
32238 amit.gupta 983
 
33213 tejus.loha 984
        }
985
        return "response";
32238 amit.gupta 986
 
33213 tejus.loha 987
    }
23973 govind 988
 
33213 tejus.loha 989
    @GetMapping("/pendingOrders")
990
    public String getPendingOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
991
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
992
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
993
        Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
994
        if (mou == null) {
995
            mou = new Mou();
996
            mou.setFofoId(loginDetails.getFofoId());
997
            mou.setCreateTimestamp(LocalDateTime.now());
998
            mou.setUpdateTimestamp(LocalDateTime.now());
999
            mouRepository.persist(mou);
1000
        } else if (!mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
1001
            mou.setUpdateTimestamp(LocalDateTime.now());
1002
        }
24844 amit.gupta 1003
 
33213 tejus.loha 1004
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.PROCESSING,
1005
                loginDetails.getFofoId());
23973 govind 1006
 
33213 tejus.loha 1007
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, loginDetails.getFofoId());
1008
        model.addAttribute("inventoryMap", map.get("inventoryMap"));
1009
        model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
23973 govind 1010
 
33213 tejus.loha 1011
        model.addAttribute("isAdmin", isAdmin);
1012
        return "pending_fofo_order";
25092 amit.gupta 1013
 
33213 tejus.loha 1014
    }
25092 amit.gupta 1015
 
33213 tejus.loha 1016
    @GetMapping("/billedOrders")
1017
    public String getBilledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1018
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1019
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
25092 amit.gupta 1020
 
33213 tejus.loha 1021
        List<PendingOrderItem> pendingOrderItem;
23973 govind 1022
 
33213 tejus.loha 1023
        if (isAdmin) {
27861 tejbeer 1024
 
33213 tejus.loha 1025
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.BILLED);
27861 tejbeer 1026
 
33213 tejus.loha 1027
        } else {
1028
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.BILLED,
1029
                    loginDetails.getFofoId());
1030
        }
27861 tejbeer 1031
 
33213 tejus.loha 1032
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
27861 tejbeer 1033
 
33213 tejus.loha 1034
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1035
        model.addAttribute("isAdmin", isAdmin);
1036
        return "billed_order_item";
1037
    }
27861 tejbeer 1038
 
33213 tejus.loha 1039
    @GetMapping("/settledOrders")
1040
    public String getSettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1041
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1042
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
27861 tejbeer 1043
 
33213 tejus.loha 1044
        List<PendingOrderItem> pendingOrderItem = null;
27861 tejbeer 1045
 
33213 tejus.loha 1046
        if (isAdmin) {
24105 govind 1047
 
33213 tejus.loha 1048
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.SETTLED);
24105 govind 1049
 
33213 tejus.loha 1050
        } else {
1051
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.SETTLED,
1052
                    loginDetails.getFofoId());
1053
        }
24105 govind 1054
 
33213 tejus.loha 1055
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
24105 govind 1056
 
33213 tejus.loha 1057
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1058
        model.addAttribute("isAdmin", isAdmin);
1059
        return "settled_order_item";
1060
    }
27861 tejbeer 1061
 
33213 tejus.loha 1062
    @GetMapping("/unsettledOrders")
1063
    public String getunsettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1064
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1065
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
24105 govind 1066
 
33213 tejus.loha 1067
        List<PendingOrderItem> pendingOrderItem = null;
27861 tejbeer 1068
 
33213 tejus.loha 1069
        if (isAdmin) {
24105 govind 1070
 
33213 tejus.loha 1071
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.UNSETTLED);
27861 tejbeer 1072
 
33213 tejus.loha 1073
        } else {
1074
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.UNSETTLED,
1075
                    loginDetails.getFofoId());
1076
        }
24440 amit.gupta 1077
 
33213 tejus.loha 1078
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
25726 amit.gupta 1079
 
33213 tejus.loha 1080
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1081
        model.addAttribute("isAdmin", isAdmin);
1082
        return "unsettled_order_item";
1083
    }
24880 govind 1084
 
33213 tejus.loha 1085
    @GetMapping("/claimedOrders")
1086
    public String getclaimedOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1087
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1088
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1089
        List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1090
                .collect(Collectors.toList());
25092 amit.gupta 1091
 
33213 tejus.loha 1092
        List<PendingOrderItem> pendingOrderItem = null;
26647 tejbeer 1093
 
33213 tejus.loha 1094
        if (isAdmin) {
28420 tejbeer 1095
 
33213 tejus.loha 1096
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.CLAIMED);
1097
            Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
28425 tejbeer 1098
 
33213 tejus.loha 1099
            Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1100
                    .filter(x -> x != null).collect(Collectors.toList()).stream()
1101
                    .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1102
            model.addAttribute("customRetailersMap", customRetailersMap);
28420 tejbeer 1103
 
33213 tejus.loha 1104
        } else {
1105
            pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.CLAIMED,
1106
                    loginDetails.getFofoId());
1107
        }
28420 tejbeer 1108
 
33213 tejus.loha 1109
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
28420 tejbeer 1110
 
33213 tejus.loha 1111
        model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1112
        model.addAttribute("isAdmin", isAdmin);
1113
        return "claim_raised_order_item";
1114
    }
26647 tejbeer 1115
 
33213 tejus.loha 1116
    @GetMapping("/getPendingOrderItem")
1117
    public String getPendingOrderItem(HttpServletRequest request, @RequestParam int orderId, Model model)
1118
            throws ProfitMandiBusinessException {
1119
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1120
        Map<Integer, Item> itemMap = new HashMap<>();
1121
        Map<Integer, CurrentInventorySnapshot> inventoryMap = new HashMap<>();
1122
        PendingOrder pendingPO = pendingOrderRepository.selectById(orderId);
1123
        Customer customer = customerRepository.selectById(pendingPO.getCustomerId());
1124
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(orderId);
1125
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
1126
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1127
            CurrentInventorySnapshot cis = currentInventorySnapshotRepository
1128
                    .selectByItemAndFofoId(pendingOrderItem.getItemId(), pendingPO.getFofoId());
1129
            itemMap.put(pendingOrderItem.getItemId(), item);
1130
            LOGGER.info("cis" + cis);
1131
            inventoryMap.put(pendingOrderItem.getItemId(), cis);
1132
        }
28339 tejbeer 1133
 
33213 tejus.loha 1134
        LOGGER.info("inventoryMap" + inventoryMap);
1135
        model.addAttribute("pendingOrderItems", pendingOrderItems);
1136
        model.addAttribute("itemMap", itemMap);
1137
        model.addAttribute("inventoryMap", inventoryMap);
1138
        model.addAttribute("pendingPO", gson.toJson(pendingPO));
1139
        model.addAttribute("pendingPOCustomer", gson.toJson(customer));
1140
        model.addAttribute("isAdmin", roleManager.isAdmin(loginDetails.getRoleIds()));
1141
        return "pending-order-item";
1142
    }
28339 tejbeer 1143
 
33213 tejus.loha 1144
    @RequestMapping(value = "/getPendingOrderItemById", method = RequestMethod.GET)
1145
    public String getPendingOrderItemById(HttpServletRequest request, @RequestParam int id, Model model)
1146
            throws Exception {
27046 tejbeer 1147
 
33213 tejus.loha 1148
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1149
        model.addAttribute("pendingOrderItem", pendingOrderItem);
1150
        return "cancel-pending-order";
1151
    }
27046 tejbeer 1152
 
33213 tejus.loha 1153
    @RequestMapping(value = "/getPendingOrderChangePartnerById", method = RequestMethod.GET)
1154
    public String getPendingOrderChangePartnerById(HttpServletRequest request, @RequestParam int id, Model model)
1155
            throws Exception {
28350 tejbeer 1156
 
33213 tejus.loha 1157
        PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
1158
        Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(true);
1159
        model.addAttribute("customRetailersMap", customRetailersMap);
1160
        model.addAttribute("pendingOrder", pendingOrder);
1161
        return "change-partner-po";
1162
    }
28358 tejbeer 1163
 
33213 tejus.loha 1164
    @RequestMapping(value = "/changePendingOrderPartner", method = RequestMethod.POST)
1165
    public String changePendingOrderPartner(HttpServletRequest request, @RequestParam int id, @RequestParam int fofoId,
1166
                                            Model model) throws Exception {
28350 tejbeer 1167
 
33213 tejus.loha 1168
        PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
1169
        pendingOrder.setFofoId(fofoId);
1170
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28339 tejbeer 1171
 
33213 tejus.loha 1172
        return "response";
1173
    }
28339 tejbeer 1174
 
33213 tejus.loha 1175
    @RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
1176
    public String cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id, @RequestParam String reason,
1177
                                         Model model) throws Exception {
28339 tejbeer 1178
 
33213 tejus.loha 1179
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1180
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
28339 tejbeer 1181
 
33213 tejus.loha 1182
        pendingOrderItem.setStatus(OrderStatus.CANCELLED);
1183
        pendingOrderItem.setStatusDescription(loginDetails.getEmailId());
1184
        pendingOrderItem.setRemark(reason);
1185
        pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
1186
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
27046 tejbeer 1187
 
33213 tejus.loha 1188
        List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
1189
                .map(x -> x.getStatus()).collect(Collectors.toList());
28339 tejbeer 1190
 
33213 tejus.loha 1191
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
26647 tejbeer 1192
 
33213 tejus.loha 1193
        List<Integer> catalogIds = new ArrayList<>();
28339 tejbeer 1194
 
33213 tejus.loha 1195
        Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1196
        pendingOrderItem.setItemName(item.getItemDescription());
1197
        catalogIds.add(item.getCatalogItemId());
28339 tejbeer 1198
 
33213 tejus.loha 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());
28339 tejbeer 1204
 
33213 tejus.loha 1205
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
28339 tejbeer 1206
 
33213 tejus.loha 1207
        Map<String, Object> emailModel = new HashMap<>();
1208
        emailModel.put("customer", customerAddress);
1209
        emailModel.put("pendingOrder", pendingOrder);
1210
        emailModel.put("date", dateTimeFormatter);
1211
        LOGGER.info("emal" + customer.getEmailId());
1212
        String[] customerEmail = null;
1213
        if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
1214
            customerEmail = new String[]{customer.getEmailId()};
28339 tejbeer 1215
 
33213 tejus.loha 1216
            List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
28339 tejbeer 1217
 
33213 tejus.loha 1218
            emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel,
1219
                    customerEmail, null, bccTo.toArray(new String[0]));
28339 tejbeer 1220
 
33213 tejus.loha 1221
        }
28339 tejbeer 1222
 
33213 tejus.loha 1223
        if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1224
                && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1225
                && !status.contains(OrderStatus.CLAIMED)) {
1226
            pendingOrder.setStatus(OrderStatus.CLOSED);
1227
        }
1228
        pendingOrderItemRepository.persist(pendingOrderItem);
28339 tejbeer 1229
 
33213 tejus.loha 1230
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28339 tejbeer 1231
 
33213 tejus.loha 1232
        return "response";
1233
    }
28339 tejbeer 1234
 
33213 tejus.loha 1235
    @RequestMapping(value = "/deliveredPendingOrderItem", method = RequestMethod.POST)
1236
    public String deliveredPendingOrderItem(HttpServletRequest request, @RequestParam int id, Model model)
1237
            throws Exception {
28339 tejbeer 1238
 
33213 tejus.loha 1239
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1240
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1241
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
28339 tejbeer 1242
 
33213 tejus.loha 1243
        if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
1244
            pendingOrderItem.setStatus(OrderStatus.UNSETTLED);
1245
            pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
28339 tejbeer 1246
 
33213 tejus.loha 1247
        } else {
1248
            pendingOrderItem.setStatus(OrderStatus.SETTLED);
1249
            pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
28339 tejbeer 1250
 
33213 tejus.loha 1251
        }
28339 tejbeer 1252
 
33213 tejus.loha 1253
        List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
1254
                .map(x -> x.getStatus()).collect(Collectors.toList());
28339 tejbeer 1255
 
33213 tejus.loha 1256
        List<Integer> catalogIds = new ArrayList<>();
30426 tejbeer 1257
 
33213 tejus.loha 1258
        Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1259
        pendingOrderItem.setItemName(item.getItemDescription());
1260
        catalogIds.add(item.getCatalogItemId());
28339 tejbeer 1261
 
33213 tejus.loha 1262
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1263
        JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1264
        pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1265
        pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1266
        CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
28339 tejbeer 1267
 
33213 tejus.loha 1268
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
28339 tejbeer 1269
 
33213 tejus.loha 1270
        Map<String, Object> emailModel = new HashMap<>();
1271
        emailModel.put("customer", customerAddress);
1272
        emailModel.put("pendingOrder", pendingOrder);
1273
        emailModel.put("date", dateTimeFormatter);
1274
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1275
        String[] customerEmail = null;
1276
        if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
1277
            customerEmail = new String[]{customer.getEmailId()};
1278
            List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
28339 tejbeer 1279
 
33213 tejus.loha 1280
            emailService.sendMailWithAttachments("Order Delivered with SmartDukaan", "order-delivered.vm", emailModel,
1281
                    customerEmail, null, bccTo.toArray(new String[0]));
26647 tejbeer 1282
 
33213 tejus.loha 1283
        }
1284
        if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1285
                && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1286
                && !status.contains(OrderStatus.CLAIMED)) {
1287
            pendingOrder.setStatus(OrderStatus.CLOSED);
1288
        }
1289
        pendingOrderItemRepository.persist(pendingOrderItem);
1290
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
26721 tejbeer 1291
 
33213 tejus.loha 1292
        return "response";
1293
    }
27046 tejbeer 1294
 
33213 tejus.loha 1295
    @RequestMapping(value = "/raiseClaimOrderItem", method = RequestMethod.POST)
1296
    public String raiseClaimOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
28352 tejbeer 1297
 
33213 tejus.loha 1298
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1299
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1300
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
28437 tejbeer 1301
 
33213 tejus.loha 1302
        if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
1303
            pendingOrderItem.setStatus(OrderStatus.CLAIMED);
1304
            pendingOrderItem.setClaimedTimestamp(LocalDateTime.now());
28437 tejbeer 1305
 
33213 tejus.loha 1306
        }
1307
        pendingOrderItemRepository.persist(pendingOrderItem);
1308
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28437 tejbeer 1309
 
33213 tejus.loha 1310
        return "response";
1311
    }
28437 tejbeer 1312
 
33213 tejus.loha 1313
    @RequestMapping(value = "/verifyOrderItem", method = RequestMethod.POST)
1314
    public String verifyOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
28437 tejbeer 1315
 
33213 tejus.loha 1316
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1317
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1318
        pendingOrderItem.setVerifiedTimestamp(LocalDateTime.now());
28352 tejbeer 1319
 
33213 tejus.loha 1320
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
26721 tejbeer 1321
 
33213 tejus.loha 1322
        return "response";
1323
    }
26721 tejbeer 1324
 
33213 tejus.loha 1325
    @RequestMapping(value = "/cancelOrderByInvoice", method = RequestMethod.POST)
1326
    public String cancelOrder(HttpServletRequest request, @RequestParam List<String> invoiceNumbers, Model model)
1327
            throws Exception {
1328
        orderService.cancelOrder(invoiceNumbers);
1329
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
26721 tejbeer 1330
 
33213 tejus.loha 1331
        return "response";
1332
    }
28352 tejbeer 1333
 
33213 tejus.loha 1334
    @RequestMapping(value = "/getOnlineOrder", method = RequestMethod.GET)
1335
    public String cancelOrder(HttpServletRequest request, Model model) throws Exception {
1336
        return "online-order";
1337
    }
28352 tejbeer 1338
 
33213 tejus.loha 1339
    @GetMapping("/getAllOrdersByStatus")
1340
    public String getAllOrdersByStatus(HttpServletRequest request, @RequestParam OrderStatus status,
1341
                                       @RequestParam(required = false) LocalDateTime startTime,
1342
                                       @RequestParam(required = false) LocalDateTime endTime, Model model) throws ProfitMandiBusinessException {
1343
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1344
        boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
28352 tejbeer 1345
 
33213 tejus.loha 1346
        LOGGER.info("startTime {}", startTime);
1347
        LOGGER.info("endTime {}", endTime);
28352 tejbeer 1348
 
33213 tejus.loha 1349
        List<PendingOrderItem> pendingOrderItems;
1350
        if (startTime == null) {
1351
            pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatus(status);
1352
        } else {
1353
            List<OrderStatus> statusList = new ArrayList<>();
1354
            if (status.equals(OrderStatus.DELIVERED)) {
1355
                statusList.add(OrderStatus.SETTLED);
1356
                statusList.add(OrderStatus.UNSETTLED);
1357
            } else {
1358
                statusList.add(status);
1359
            }
1360
            pendingOrderItems = pendingOrderItemRepository.selectByStatusAndCreateTimestamp(statusList,
1361
                    startTime.toLocalDate().atStartOfDay(), endTime);
1362
        }
28352 tejbeer 1363
 
33213 tejus.loha 1364
        List<Integer> pendingOrderIds = pendingOrderItems.stream().map(x -> x.getOrderId()).collect(Collectors.toList());
28352 tejbeer 1365
 
33213 tejus.loha 1366
        List<Integer> fofoIds = pendingOrderRepository.selectByIds(pendingOrderIds)
1367
                .stream().map(x -> x.getFofoId()).distinct().collect(Collectors.toList());
28356 tejbeer 1368
 
33213 tejus.loha 1369
        Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
28352 tejbeer 1370
 
33213 tejus.loha 1371
        Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1372
                .filter(x -> x != null).collect(Collectors.toList()).stream()
1373
                .collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1374
        model.addAttribute("customRetailersMap", customRetailersMap);
28352 tejbeer 1375
 
33213 tejus.loha 1376
        LOGGER.info("customRetailersMap {}", customRetailersMap);
28339 tejbeer 1377
 
33213 tejus.loha 1378
        Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, 0);
32697 ranu 1379
 
33213 tejus.loha 1380
        model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
1381
        model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
32697 ranu 1382
 
33213 tejus.loha 1383
        model.addAttribute("isAdmin", isAdmin);
1384
        return "online-order-item";
1385
    }
32697 ranu 1386
 
33213 tejus.loha 1387
    //TODO Tejus
1388
    @RequestMapping(value = "/getBulkOrder")
1389
    public String getBulkOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1390
        return "bulk-order";
1391
    }
32697 ranu 1392
 
33213 tejus.loha 1393
    @PostMapping(value = "/bulkOrder/upload")
1394
    public String uploadCatalog(HttpServletRequest request, @RequestPart("file") MultipartFile file, Model model)
1395
            throws Exception {
1396
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1397
        int authId = authRepository.selectByEmailOrMobile(fofoDetails.getEmailId()).getId();
1398
        LOGGER.info("authId - {}", authId);
1399
        bulkOrderService.parseBulkOrders(file, authId);
1400
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1401
        return "response";
1402
    }
32697 ranu 1403
 
33213 tejus.loha 1404
    // This method is use for sending all pending transaction to Transation Approval menu
1405
    @RequestMapping(value = "/transaction/pendingApprovals", method = RequestMethod.GET)
1406
    public String getTransactionApproval(HttpServletRequest request, Model model) throws Exception {
33219 tejus.loha 1407
        List<TransactionApproval> transactionApprovals = transactionApprovalRepository.selectAllPending();
33213 tejus.loha 1408
        // List<Integer> transactionAppprovalIds= Arrays.asList( 1135352, 1135353, 1135354);
33219 tejus.loha 1409
        LOGGER.info("list of Approval transaction Id " + transactionApprovals);
33213 tejus.loha 1410
        List<TransctionApprovalModel> approvalModelList = new ArrayList<>();
33219 tejus.loha 1411
        for (TransactionApproval transactionApproval : transactionApprovals) {
1412
            List<Order> orderList = orderRepository.selectAllByTransactionId(transactionApproval.getId());
1413
            Transaction transaction = transactionRepository.selectById(transactionApproval.getId());
33213 tejus.loha 1414
            List<LineItemModel> lineItemModelList = new ArrayList<>();
33219 tejus.loha 1415
            for (Order order : orderList) {
1416
                LineItem lineItem = order.getLineItem();
33213 tejus.loha 1417
                LineItemModel lineItemModel = new LineItemModel();
1418
                lineItemModel.setItemId(lineItem.getItemId());
33219 tejus.loha 1419
                lineItemModel.setItemName(lineItem.getItem().getItemDescription());
33213 tejus.loha 1420
                lineItemModel.setItemQuantity(lineItem.getQuantity());
1421
                lineItemModel.setSellingPrice(lineItem.getUnitPrice());
1422
                lineItemModel.setDp(tagListingRepository.selectByItemId(lineItem.getItemId()).getSellingPrice());
1423
                lineItemModelList.add(lineItemModel);
1424
            }
1425
            AuthUser authUser = authRepository.selectById(transaction.getCreatedBy());
1426
            TransctionApprovalModel transactionApprovalModel = new TransctionApprovalModel();
1427
            String retailerName = " ";
1428
            retailerName = orderList.get(0).getRetailerName();
1429
            transactionApprovalModel.setRetailerName(retailerName);
1430
            transactionApprovalModel.setCreatedBy(authUser.getFullName());
1431
            transactionApprovalModel.setCreatedOn(transaction.getCreateTimestamp());
33219 tejus.loha 1432
            transactionApprovalModel.setTransactionId(transactionApproval.getId());
33213 tejus.loha 1433
            transactionApprovalModel.setLineItemModels(lineItemModelList);
1434
            approvalModelList.add(transactionApprovalModel);
32697 ranu 1435
 
28339 tejbeer 1436
 
33213 tejus.loha 1437
        }
28339 tejbeer 1438
 
33213 tejus.loha 1439
        model.addAttribute("approvalModelList", approvalModelList);
1440
        return "transaction/transaction-approvals";
1441
    }
33092 tejus.loha 1442
 
33213 tejus.loha 1443
    @RequestMapping(value = "transaction/approval", method = RequestMethod.PUT)
1444
    public String transactionApproval(HttpServletRequest request, Model model,
1445
                                      @RequestParam int transactionId,
1446
                                      @RequestParam String remark,
1447
                                      @RequestParam TransactionApprovalStatus transactionApprovalStatus
1448
    ) throws Exception {
1449
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1450
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
1451
        int approvalId = authUser.getId();
1452
        String approvedBy = authUser.getFullName();
1453
        LocalDateTime approvedOn = LocalDateTime.now();
1454
        this.updateApprovalStatus(transactionId, approvalId, approvedBy, approvedOn, remark, transactionApprovalStatus);
1455
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
1456
        return "response";
1457
 
1458
    }
1459
 
1460
    private void updateApprovalStatus(int transactionId, int approvalId, String approvedBy, LocalDateTime approvedOn, String remark, TransactionApprovalStatus transactionApprovalStatus) throws Exception {
1461
        TransactionApproval transactionApproval = transactionApprovalRepository.selectById(transactionId);
1462
        if (!transactionApproval.getStatus().equals(TransactionApprovalStatus.PENDING)) {
1463
            throw new ProfitMandiBusinessException("Transaction already Processed", "Transaction already Processed", "Transaction already Processed");
1464
        }
1465
        transactionApproval.setStatus(transactionApprovalStatus);
1466
        transactionApproval.setRemark(remark);
1467
        transactionApproval.setApprovalId(approvalId);
1468
        transactionApproval.setApprovedBy(approvedBy);
1469
        transactionApproval.setApprovedOn(approvedOn);
1470
        if (transactionApprovalStatus.equals(TransactionApprovalStatus.APPROVED)) {
1471
            transactionService.processTransaction(transactionId);
1472
        }
1473
    }
1474
 
1475
    @RequestMapping(value = "/bulkOrderTemplate", method = RequestMethod.GET)
1476
    public ResponseEntity<?> bulkOrderTemplate() throws Exception {
1477
        List<List<?>> rows = new ArrayList<>();
1478
        rows.add(Arrays.asList("Mahaveer", "Change description for your reference", "175139287", "28264", "0", "4"));
1479
        rows.add(Arrays.asList("Mahaveer", "Price =0 means system price", "175139287", "28268", "0", "7"));
1480
        rows.add(Arrays.asList("Jas", "You give custom price also ", "171273247", "28264", "300", "3"));
1481
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
1482
                .getCSVByteStream(Arrays.asList("Partner name", "Description", "Partner Id", "Item Id", "Price", "Quantity"), rows);
1483
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Bulk order template");
1484
 
1485
        return responseEntity;
1486
 
1487
    }
32409 amit.gupta 1488
}
32405 jai.hind 1489
 
1490
 
1491
 
1492
 
1493