Subversion Repositories SmartDukaan

Rev

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