Subversion Repositories SmartDukaan

Rev

Rev 33314 | Rev 33436 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
26607 amit.gupta 1
package com.spice.profitmandi.web.controller;
2
 
3
import com.eclipsesource.json.JsonObject;
4
import com.google.gson.Gson;
5
import com.google.gson.reflect.TypeToken;
28377 tejbeer 6
import com.spice.profitmandi.common.enumuration.MessageType;
26607 amit.gupta 7
import com.spice.profitmandi.common.enumuration.SchemeType;
8
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
30123 amit.gupta 9
import com.spice.profitmandi.common.model.*;
26607 amit.gupta 10
import com.spice.profitmandi.common.solr.SolrService;
28304 amit.gupta 11
import com.spice.profitmandi.common.util.FormattingUtils;
28566 tejbeer 12
import com.spice.profitmandi.common.util.PdfUtils;
28405 amit.gupta 13
import com.spice.profitmandi.common.util.Utils;
26607 amit.gupta 14
import com.spice.profitmandi.common.web.client.RestClient;
15
import com.spice.profitmandi.common.web.util.ResponseSender;
16
import com.spice.profitmandi.dao.entity.catalog.Item;
17
import com.spice.profitmandi.dao.entity.catalog.TagListing;
29515 tejbeer 18
import com.spice.profitmandi.dao.entity.dtr.ScratchOffer;
28377 tejbeer 19
import com.spice.profitmandi.dao.entity.dtr.User;
26745 amit.gupta 20
import com.spice.profitmandi.dao.entity.dtr.WebListing;
28374 amit.gupta 21
import com.spice.profitmandi.dao.entity.dtr.WebOffer;
30123 amit.gupta 22
import com.spice.profitmandi.dao.entity.fofo.*;
33399 ranu 23
import com.spice.profitmandi.dao.entity.inventory.State;
31203 tejbeer 24
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
26630 amit.gupta 25
import com.spice.profitmandi.dao.enumuration.dtr.OtpType;
31573 tejbeer 26
import com.spice.profitmandi.dao.enumuration.dtr.WebListingSource;
29515 tejbeer 27
import com.spice.profitmandi.dao.enumuration.inventory.ScratchedGift;
27045 tejbeer 28
import com.spice.profitmandi.dao.enumuration.transaction.OrderStatus;
30123 amit.gupta 29
import com.spice.profitmandi.dao.model.*;
26607 amit.gupta 30
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
31
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
28290 tejbeer 32
import com.spice.profitmandi.dao.repository.cs.CsService;
30123 amit.gupta 33
import com.spice.profitmandi.dao.repository.dtr.*;
34
import com.spice.profitmandi.dao.repository.fofo.*;
26607 amit.gupta 35
import com.spice.profitmandi.dao.repository.inventory.ItemAvailabilityCacheRepository;
33399 ranu 36
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
28582 amit.gupta 37
import com.spice.profitmandi.dao.repository.user.UserRepository;
26784 amit.gupta 38
import com.spice.profitmandi.service.CustomerService;
28377 tejbeer 39
import com.spice.profitmandi.service.EmailService;
40
import com.spice.profitmandi.service.NotificationService;
26607 amit.gupta 41
import com.spice.profitmandi.service.authentication.RoleManager;
33399 ranu 42
import com.spice.profitmandi.service.integrations.zest.InsuranceService;
43
import com.spice.profitmandi.service.integrations.zest.MobileInsurancePlan;
30123 amit.gupta 44
import com.spice.profitmandi.service.inventory.*;
28566 tejbeer 45
import com.spice.profitmandi.service.order.OrderService;
26683 amit.gupta 46
import com.spice.profitmandi.service.scheme.SchemeService;
26651 amit.gupta 47
import com.spice.profitmandi.service.user.RetailerService;
26630 amit.gupta 48
import com.spice.profitmandi.web.processor.OtpProcessor;
26607 amit.gupta 49
import com.spice.profitmandi.web.res.DealBrands;
50
import com.spice.profitmandi.web.res.DealObjectResponse;
51
import com.spice.profitmandi.web.res.DealsResponse;
52
import com.spice.profitmandi.web.res.ValidateCartResponse;
28322 amit.gupta 53
import com.spice.profitmandi.web.services.PartnerIndexService;
26607 amit.gupta 54
import io.swagger.annotations.ApiImplicitParam;
55
import io.swagger.annotations.ApiImplicitParams;
56
import io.swagger.annotations.ApiOperation;
30123 amit.gupta 57
import org.apache.commons.lang3.StringUtils;
58
import org.apache.http.conn.HttpHostConnectException;
59
import org.apache.logging.log4j.LogManager;
60
import org.apache.logging.log4j.Logger;
61
import org.json.JSONArray;
62
import org.json.JSONObject;
63
import org.springframework.beans.factory.annotation.Autowired;
64
import org.springframework.beans.factory.annotation.Value;
65
import org.springframework.core.io.InputStreamResource;
66
import org.springframework.http.HttpHeaders;
67
import org.springframework.http.HttpStatus;
68
import org.springframework.http.MediaType;
69
import org.springframework.http.ResponseEntity;
70
import org.springframework.stereotype.Controller;
71
import org.springframework.transaction.annotation.Transactional;
33399 ranu 72
import org.springframework.ui.Model;
30123 amit.gupta 73
import org.springframework.web.bind.annotation.*;
26607 amit.gupta 74
 
30123 amit.gupta 75
import javax.servlet.http.HttpServletRequest;
76
import javax.servlet.http.HttpServletResponse;
77
import java.io.ByteArrayInputStream;
78
import java.io.ByteArrayOutputStream;
79
import java.io.IOException;
80
import java.io.InputStream;
31445 tejbeer 81
import java.time.LocalDate;
30123 amit.gupta 82
import java.time.LocalDateTime;
83
import java.time.LocalTime;
84
import java.time.format.DateTimeFormatter;
85
import java.util.*;
86
import java.util.stream.Collectors;
87
 
26607 amit.gupta 88
@Controller
89
@Transactional(rollbackFor = Throwable.class)
90
public class StoreController {
91
 
32018 tejbeer 92
    private static final Logger logger = LogManager.getLogger(StoreController.class);
26630 amit.gupta 93
 
32018 tejbeer 94
    private static final LocalTime CUTOFF_TIME = LocalTime.of(15, 0);
26745 amit.gupta 95
 
32018 tejbeer 96
    private static final List<Integer> TAG_IDS = Arrays.asList(4);
26745 amit.gupta 97
 
32018 tejbeer 98
    @Autowired
99
    CustomerAddressRepository customerAddressRepository;
28392 tejbeer 100
 
32018 tejbeer 101
    @Autowired
102
    WebOfferRepository webOfferRepository;
26607 amit.gupta 103
 
32018 tejbeer 104
    @Value("${new.solr.url}")
105
    private String solrUrl;
28345 tejbeer 106
 
32018 tejbeer 107
    @Autowired
108
    private PartnerIndexService partnerIndexService;
28345 tejbeer 109
 
32018 tejbeer 110
    @Autowired
111
    InventoryService inventoryService;
27045 tejbeer 112
 
32018 tejbeer 113
    @Autowired
114
    UserAccountRepository userAccountRepository;
26923 amit.gupta 115
 
32018 tejbeer 116
    @Value("${python.api.host}")
117
    private String host;
26833 amit.gupta 118
 
32018 tejbeer 119
    @Autowired
120
    CustomerService customerService;
26607 amit.gupta 121
 
32018 tejbeer 122
    @Value("${python.api.port}")
123
    private int port;
26923 amit.gupta 124
 
32018 tejbeer 125
    @Autowired
126
    private SaholicInventoryService saholicInventoryService;
26607 amit.gupta 127
 
32018 tejbeer 128
    @Autowired
129
    private PincodePartnerRepository pincodePartnerRepository;
26715 amit.gupta 130
 
32018 tejbeer 131
    @Autowired
132
    private FofoStoreRepository fofoStoreRepository;
26745 amit.gupta 133
 
32018 tejbeer 134
    @Autowired
135
    private RetailerService retailerService;
26861 tejbeer 136
 
32018 tejbeer 137
    @Autowired
138
    private PendingOrderRepository pendingOrderRepository;
26861 tejbeer 139
 
32018 tejbeer 140
    @Autowired
141
    private PendingOrderItemRepository pendingOrderItemRepository;
26652 amit.gupta 142
 
32018 tejbeer 143
    @Autowired
144
    private PendingOrderService pendingOrderService;
26648 amit.gupta 145
 
32018 tejbeer 146
    @Autowired
147
    private CustomerRepository customerRepository;
26774 amit.gupta 148
 
32018 tejbeer 149
    @Autowired
150
    private SolrService commonSolrService;
26607 amit.gupta 151
 
32018 tejbeer 152
    @Autowired
153
    private OtpProcessor otpProcessor;
26630 amit.gupta 154
 
32018 tejbeer 155
    @Autowired
156
    private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
26607 amit.gupta 157
 
32018 tejbeer 158
    @Autowired
159
    private ResponseSender<?> responseSender;
26607 amit.gupta 160
 
32018 tejbeer 161
    @Autowired
162
    private TagListingRepository tagListingRepository;
26607 amit.gupta 163
 
32018 tejbeer 164
    @Autowired
165
    private ItemRepository itemRepository;
26701 amit.gupta 166
 
32018 tejbeer 167
    @Autowired
168
    private SchemeService schemeService;
26607 amit.gupta 169
 
32018 tejbeer 170
    @Autowired
171
    private UserRepository userRepository;
28566 tejbeer 172
 
32018 tejbeer 173
    @Autowired
174
    private ItemAvailabilityCacheRepository itemAvailabilityCacheRepository;
26607 amit.gupta 175
 
32018 tejbeer 176
    @Autowired
177
    private WebListingRepository webListingRepository;
26745 amit.gupta 178
 
32018 tejbeer 179
    @Autowired
180
    private WebProductListingRepository webProductListingRepository;
26745 amit.gupta 181
 
32018 tejbeer 182
    @Autowired
183
    private RoleManager roleManagerService;
26607 amit.gupta 184
 
32018 tejbeer 185
    @Autowired
186
    EmailService emailService;
27028 tejbeer 187
 
32018 tejbeer 188
    @Autowired
189
    CsService csService;
28339 tejbeer 190
 
32018 tejbeer 191
    @Autowired
192
    private NotificationService notificationService;
28377 tejbeer 193
 
32018 tejbeer 194
    @Autowired
195
    private com.spice.profitmandi.dao.repository.dtr.UserRepository dtrUserRepository;
28377 tejbeer 196
 
32018 tejbeer 197
    @Autowired
198
    private FofoOrderRepository fofoOrderRepository;
28566 tejbeer 199
 
32018 tejbeer 200
    @Autowired
201
    private FofoOrderItemRepository fofoOrderItemRepository;
28566 tejbeer 202
 
32018 tejbeer 203
    @Autowired
204
    private OrderService orderService;
29515 tejbeer 205
 
32018 tejbeer 206
    @Autowired
207
    private ScratchOfferRepository scratchOfferRepository;
208
    private static final List<String> offlineOrders = Arrays.asList("EMIOD", "POD");
28339 tejbeer 209
 
32018 tejbeer 210
    List<String> filterableParams = Arrays.asList("brand");
26607 amit.gupta 211
 
32018 tejbeer 212
    @RequestMapping(value = "/store/entity/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
213
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
214
    @ApiOperation(value = "Get unit deal object")
215
    public ResponseEntity<?> getUnitFocoDeal(HttpServletRequest request, @PathVariable(value = "id") long id) throws ProfitMandiBusinessException {
216
        List<FofoCatalogResponse> dealResponses = new ArrayList<>();
217
        List<Integer> tagIds = Arrays.asList(4);
218
        FofoCatalogResponse fofoCatalogResponse = null;
219
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
220
        if (roleManagerService.isPartner(userInfo.getRoleIds())) {
221
            String categoryId = "(3 OR 6)";
26745 amit.gupta 222
 
32018 tejbeer 223
            RestClient rc = new RestClient();
224
            Map<String, String> params = new HashMap<>();
225
            List<String> mandatoryQ = new ArrayList<>();
226
            String catalogString = "catalog" + id;
26607 amit.gupta 227
 
32018 tejbeer 228
            mandatoryQ.add(String.format("+(categoryId_i:%s) +(id:%s) +{!parent which=\"id:%s\"} tagId_i:(%s)", categoryId, catalogString, catalogString, StringUtils.join(tagIds, " ")));
26668 amit.gupta 229
 
32018 tejbeer 230
            params.put("q", StringUtils.join(mandatoryQ, " "));
231
            params.put("fl", "*, [child parentFilter=id:catalog*]");
232
            params.put("sort", "rank_i asc, create_s desc");
233
            params.put("wt", "json");
234
            String response = null;
235
            try {
236
                response = rc.get(SchemeType.HTTP, solrUrl, 8984, "solr/demo/select", params);
237
            } catch (HttpHostConnectException e) {
238
                throw new ProfitMandiBusinessException("", "", "Could not connect to host");
239
            }
240
            JSONObject solrResponseJSONObj = new JSONObject(response).getJSONObject("response");
241
            JSONArray docs = solrResponseJSONObj.getJSONArray("docs");
242
            dealResponses = getCatalogResponse(docs, false, userInfo.getRetailerId());
243
            fofoCatalogResponse = dealResponses.get(0);
244
            fofoCatalogResponse.setWebOffers(webOfferRepository.selectAllActiveOffers().get(fofoCatalogResponse.getCatalogId()));
28467 tejbeer 245
 
32018 tejbeer 246
        } else {
247
            return responseSender.badRequest(
248
                    new ProfitMandiBusinessException("Retailer id", userInfo.getUserId(), "NOT_FOFO_RETAILER"));
249
        }
250
        return responseSender.ok(dealResponses.get(0));
251
    }
26668 amit.gupta 252
 
32018 tejbeer 253
    private Object toDealObject(JsonObject jsonObject) {
254
        if (jsonObject.get("dealObject") != null && jsonObject.get("dealObject").asInt() == 1) {
255
            return new Gson().fromJson(jsonObject.toString(), DealObjectResponse.class);
256
        }
257
        return new Gson().fromJson(jsonObject.toString(), DealsResponse.class);
258
    }
26607 amit.gupta 259
 
32018 tejbeer 260
    @RequestMapping(value = "/store/brands", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
261
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
262
    @ApiOperation(value = "Get brand list and count for category")
263
    public ResponseEntity<?> getBrands(HttpServletRequest request, @RequestParam(value = "category_id") String category_id) throws ProfitMandiBusinessException {
264
        logger.info("Request " + request.getParameterMap());
265
        String response = null;
266
        // TODO: move to properties
267
        String uri = ProfitMandiConstants.URL_BRANDS;
268
        RestClient rc = new RestClient();
269
        Map<String, String> params = new HashMap<>();
270
        params.put("category_id", category_id);
271
        List<DealBrands> dealBrandsResponse = null;
272
        try {
273
            response = rc.get(SchemeType.HTTP, host, port, uri, params);
274
        } catch (HttpHostConnectException e) {
275
            throw new ProfitMandiBusinessException("", "", "Could not connect to host");
276
        }
26607 amit.gupta 277
 
32018 tejbeer 278
        dealBrandsResponse = new Gson().fromJson(response, new TypeToken<List<DealBrands>>() {
279
        }.getType());
26607 amit.gupta 280
 
32018 tejbeer 281
        return responseSender.ok(dealBrandsResponse);
282
    }
26607 amit.gupta 283
 
32018 tejbeer 284
    @RequestMapping(value = "/store/listing/{listingUrl}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
285
    public ResponseEntity<?> bestSellers(HttpServletRequest request, @PathVariable String listingUrl) throws Exception {
286
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
287
        WebListing webListing = webListingRepository.selectByUrl(listingUrl);
288
        webListing.setFofoCatalogResponses(getDealResponses(userInfo, webListing));
289
        return responseSender.ok(webListing);
290
    }
26654 amit.gupta 291
 
32018 tejbeer 292
    @RequestMapping(value = "/store/otp/generateOTP", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
293
    public ResponseEntity<?> generateOtp(HttpServletRequest request, @RequestParam String mobile) throws Exception {
26630 amit.gupta 294
 
32018 tejbeer 295
        return responseSender.ok(otpProcessor.generateOtp(mobile, OtpType.REGISTRATION));
26630 amit.gupta 296
 
32018 tejbeer 297
    }
26652 amit.gupta 298
 
32018 tejbeer 299
    @RequestMapping(value = "/store/checkmobile/{mobile}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
300
    public ResponseEntity<?> checkRegistrationUsingMobile(HttpServletRequest request, @PathVariable String mobile) throws Exception {
301
        try {
302
            Customer customer = customerRepository.selectByMobileNumber(mobile);
303
            customer.setPasswordExist(StringUtils.isNotEmpty(customer.getPassword()));
304
            return responseSender.ok(new CustomerModel(true, customer));
305
        } catch (Exception e) {
306
            return responseSender.ok(new CustomerModel(false, null));
307
        }
308
    }
26833 amit.gupta 309
 
26923 amit.gupta 310
 
32019 tejbeer 311
    @RequestMapping(value = "/store/getCustomerById/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
32018 tejbeer 312
    public ResponseEntity<?> getCustomerById(HttpServletRequest request, @PathVariable int id) throws Exception {
26774 amit.gupta 313
 
32018 tejbeer 314
        Customer customer = customerRepository.selectById(id);
315
        customer.setPasswordExist(StringUtils.isNotEmpty(customer.getPassword()));
32218 tejbeer 316
 
32018 tejbeer 317
        return responseSender.ok(customer);
26857 amit.gupta 318
 
32018 tejbeer 319
    }
26652 amit.gupta 320
 
32018 tejbeer 321
    @RequestMapping(value = "/store/signin", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
322
    public ResponseEntity<?> signIn(HttpServletRequest request, @RequestBody UserModel userModel) throws Exception {
323
        if (customerService.authenticate(userModel.getMobile(), userModel.getPassword())) {
324
            return responseSender.ok(true);
325
        } else {
326
            return responseSender.ok(false);
327
        }
328
    }
27028 tejbeer 329
 
32018 tejbeer 330
    @RequestMapping(value = "/store/resetPassword", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
331
    public ResponseEntity<?> resetPassword(HttpServletRequest request, @RequestBody UserModel userModel) throws Exception {
332
        customerService.changePassword(userModel.getMobile(), userModel.getPassword());
333
        return responseSender.ok(true);
334
    }
28339 tejbeer 335
 
32018 tejbeer 336
    @RequestMapping(value = "/store/register", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
337
    public ResponseEntity<?> register(HttpServletRequest request, @RequestBody UserModel userModel) throws Exception {
338
        Customer customer = new Customer();
339
        customer.setPassword(userModel.getPassword());
340
        customer.setEmailId(userModel.getEmail());
341
        customer.setFirstName(userModel.getFirstName());
342
        customer.setLastName(userModel.getLastName());
343
        customer.setMobileNumber(userModel.getMobile());
344
        return responseSender.ok(customerService.addCustomer(customer));
345
    }
28339 tejbeer 346
 
33399 ranu 347
    @RequestMapping(value = "/checkplans", method = RequestMethod.GET)
348
    public String getInsurancePrices(HttpServletRequest request, @RequestParam float price, Model model,
349
                                     @RequestParam int itemId) throws ProfitMandiBusinessException {
350
        logger.info("Request received at url : {}", request.getRequestURI());
351
 
352
        try {
353
            String response = String.valueOf(responseSender.ok(this.getPlans(price, itemId)));
354
            return response;
355
        } catch (Exception e) {
356
            logger.info(e.getMessage(), e);
357
            throw new ProfitMandiBusinessException("Plans", "Plans API", "Error formatting insurance plans");
358
        }
359
 
360
 
361
    }
362
 
363
    @Autowired
364
    InsuranceService insuranceService;
365
 
366
    private Map<String, List<MobileInsurancePlan>> getPlans(float sellingPrice, int itemId)
367
            throws ProfitMandiBusinessException {
368
        try {
369
            Map<String, List<MobileInsurancePlan>> productDurationPlans = insuranceService.getAllPlans(itemId,
370
                    sellingPrice);
371
            return productDurationPlans;
372
        } catch (Exception e) {
373
            logger.info(e, e);
374
            throw new ProfitMandiBusinessException("Fetch Insurance Plans", "Insurance",
375
                    "Could not fetch insurance Plans");
376
        }
377
 
378
    }
379
 
32018 tejbeer 380
    @RequestMapping(value = "/store/confirmOrder", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
381
    public ResponseEntity<?> confirmOrder(HttpServletRequest request, @RequestBody CreatePendingOrderRequest createPendingOrderRequest) throws Exception {
382
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
383
        Integer storeId = userInfo.getRetailerId();
384
        createPendingOrderRequest.setFofoId(storeId);
385
        List<CreatePendingOrderItem> pendingOrderItems = createPendingOrderRequest.getCreatePendingOrderItem();
386
        List<CartItem> cartItems = new ArrayList<>();
387
        pendingOrderItems.stream().forEach(x -> {
388
            CartItem ci = new CartItem();
389
            ci.setItemId(x.getItemId());
390
            ci.setQuantity(x.getQuantity());
391
            ci.setSellingPrice(x.getSellingPrice());
33399 ranu 392
            ci.setExtendedWarrantyPrice(x.getExtendedWarrantyPrice());
32018 tejbeer 393
            cartItems.add(ci);
394
        });
33399 ranu 395
        logger.info("cartItems {}",cartItems);
32018 tejbeer 396
        CartResponse cr = this.validateCart(storeId, cartItems);
397
        if (cr.getCartMessageChanged() > 0 || cr.getTotalAmount() != createPendingOrderRequest.getTotalAmount()) {
398
            return responseSender.badRequest("Invalid request");
399
        }
28377 tejbeer 400
 
32018 tejbeer 401
        Map<String, String> returnMap = this.pendingOrderService.createPendingOrder(createPendingOrderRequest, cr);
28377 tejbeer 402
 
32018 tejbeer 403
        PendingOrder pendingOrder = pendingOrderRepository.selectById(Integer.parseInt(returnMap.get("poId")));
404
        if (offlineOrders.contains(pendingOrder.getPayMethod())) {
28391 tejbeer 405
 
32018 tejbeer 406
            Map<String, Object> emailModel = pendingOrderService.sendCreateOrderMail(pendingOrder);
28400 tejbeer 407
 
32018 tejbeer 408
            CustomRetailer customRetailer = retailerService.getFofoRetailer(pendingOrder.getFofoId());
409
            Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
410
            String[] customerEmail = null;
411
            if (Utils.validateEmail(customer.getEmailId())) {
412
                customerEmail = new String[]{customer.getEmailId()};
413
            }
31203 tejbeer 414
 
32616 amit.gupta 415
            List<String> bccTo = Arrays.asList("kamini.sharma@smartdukaan.com", "tarun.verma@smartdukaan.com", "niranjan.kala@smartdukaan.com", "sm@smartdukaan.com", "ranu.rajput@smartdukaan.com", "devkinandan.lal@smartdukaan.com", customRetailer.getEmail());
28394 tejbeer 416
 
32018 tejbeer 417
            List<String> authUserEmails = csService.getAuthUserByPartnerId(customRetailer.getPartnerId());
418
            if (authUserEmails != null) {
419
                authUserEmails = new ArrayList<>();
420
            }
421
            logger.info("authUserEmails {}", authUserEmails);
422
            authUserEmails.addAll(bccTo);
423
            StringBuffer itemBuffer = new StringBuffer();
424
            List<PendingOrderItem> orderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
425
            int totalItems = 0;
426
            String itemNoColor = null;
427
            float maxValue = 0;
428
            for (PendingOrderItem orderItem : orderItems) {
429
                if (maxValue < orderItem.getSellingPrice()) {
430
                    maxValue = orderItem.getSellingPrice();
431
                    itemNoColor = itemRepository.selectById(orderItem.getItemId()).getItemDescriptionNoColor();
432
                }
433
                totalItems += orderItem.getQuantity();
434
            }
435
            if (totalItems > 1) {
436
                itemBuffer.append(StringUtils.abbreviate(itemNoColor, 22));
437
                itemBuffer.append(" +").append(totalItems - 1).append(" items");
438
            } else {
439
                itemBuffer.append(StringUtils.abbreviate(itemNoColor, 30));
440
            }
441
            String message = String.format(OtpProcessor.TEMPLATE_ORDER_CREATED, pendingOrder.getId(), itemBuffer.toString(), pendingOrder.getTotalAmount());
442
            otpProcessor.sendSms(OtpProcessor.TEMPLATE_ORDER_CREATED_ID, message, customer.getMobileNumber());
28377 tejbeer 443
 
32018 tejbeer 444
            emailService.sendMailWithAttachments("Order Created with SmartDukaan", "order-confirm.vm", emailModel, customerEmail, null, bccTo.toArray(new String[0]));
28377 tejbeer 445
 
32018 tejbeer 446
            List<String> emailIds = csService.getAuthUserIdByPartnerId(customRetailer.getPartnerId()).stream().map(x -> x.getEmailId()).collect(Collectors.toList());
27028 tejbeer 447
 
32018 tejbeer 448
            emailIds.addAll(
449
                    csService.getAuthUserIds(ProfitMandiConstants.TICKET_CATEGORY_MARKETING, Arrays.asList(EscalationType.L1, EscalationType.L2, EscalationType.L3, EscalationType.L4)).stream().map(x -> x.getEmailId()).collect(Collectors.toList()));
450
            emailIds.add("tarun.verma@smartdukaan.com");
451
            emailIds.add("devkinandan.lal@smartdukaan.com");
452
            emailIds.add("tejbeer.kaur@shop2020.in");
453
            List<User> user = dtrUserRepository.selectAllByEmailIds(emailIds);
454
            List<Integer> userIds = user.stream().map(x -> x.getId()).collect(Collectors.toList());
26630 amit.gupta 455
 
32018 tejbeer 456
            logger.info("userIds" + userIds);
457
            SendNotificationModel sendNotificationModel = new SendNotificationModel();
458
            sendNotificationModel.setCampaignName("Online Order Alert");
459
            sendNotificationModel.setTitle("Online Order Update");
460
            sendNotificationModel.setMessage(String.format(
461
                    "You have new Online Order. Please check your Dashboard. In case of an activation scheme pls ensure the handset is activated, payout will be processed as per brand's activation report."));
462
            sendNotificationModel.setType("url");
463
            sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
464
            sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
465
            sendNotificationModel.setMessageType(MessageType.notification);
466
            int userId = userAccountRepository.selectUserIdByRetailerId(pendingOrder.getFofoId());
467
            sendNotificationModel.setUserIds(Arrays.asList(userId));
468
            notificationService.sendNotification(sendNotificationModel);
26857 amit.gupta 469
 
32018 tejbeer 470
            SendNotificationModel snm = new SendNotificationModel();
471
            snm.setCampaignName("Online Order Alert");
472
            snm.setTitle("Online Order Update");
473
            snm.setMessage(String.format("Your Partner " + customRetailer.getBusinessName() + " have new Online Order. Please inform your partner. In case of an activation scheme pls ensure the handset is activated, payout will be processed as per brand's activation report."));
474
            snm.setType("url");
475
            snm.setUrl("https://app.smartdukaan.com/pages/home/notifications");
476
            snm.setExpiresat(LocalDateTime.now().plusDays(1));
477
            snm.setMessageType(MessageType.notification);
478
            snm.setUserIds(userIds);
479
            notificationService.sendNotification(snm);
26857 amit.gupta 480
 
32018 tejbeer 481
        }
482
        return responseSender.ok(returnMap);
26857 amit.gupta 483
 
32018 tejbeer 484
    }
28287 amit.gupta 485
 
32018 tejbeer 486
    @RequestMapping(value = "/store/address", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
487
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
488
    @ApiOperation(value = "Get brand list and count for category")
489
    public ResponseEntity<?> getAddress(HttpServletRequest request) throws Exception {
490
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
491
        Integer storeId = userInfo.getRetailerId();
492
        CustomRetailer customRetailer = retailerService.getFofoRetailer(storeId);
26923 amit.gupta 493
 
32018 tejbeer 494
        return responseSender.ok(customRetailer.getAddress());
28566 tejbeer 495
 
32018 tejbeer 496
    }
28566 tejbeer 497
 
32018 tejbeer 498
    @RequestMapping(value = "/store/address/{pincode}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
499
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
500
    @ApiOperation(value = "Get brand list and count for category")
501
    public ResponseEntity<?> getStoresByPincode(HttpServletRequest request, @PathVariable String pincode) throws Exception {
502
        List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
503
        int fofoId = ProfitMandiConstants.DEFAULT_STORE;
504
        if (pincodePartners.size() > 0) {
505
            List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
506
            List<FofoStore> fofoStores = fofoStoreRepository.selectActivePartnersByRetailerIds(fofoIds);
507
            if (fofoStores.size() > 0) {
508
                fofoId = fofoStores.get(0).getId();
509
            }
28566 tejbeer 510
 
32018 tejbeer 511
        }
512
        return responseSender.ok(fofoStoreRepository.selectByRetailerId(fofoId).getCode());
513
    }
28566 tejbeer 514
 
32018 tejbeer 515
    @RequestMapping(value = "/store/addresses", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
516
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
517
    @ApiOperation(value = "Get brand list and count for category")
518
    public ResponseEntity<?> getStoresByPincod(HttpServletRequest request, @RequestParam String pincode, @RequestParam(name = "fofoCode", defaultValue = "", required = false) String fofoCode) throws Exception {
28566 tejbeer 519
 
32018 tejbeer 520
        List<CustomRetailer> customerRetailers = new ArrayList<>();
28566 tejbeer 521
 
32018 tejbeer 522
        logger.info("fofoCode" + fofoCode);
30426 tejbeer 523
 
32018 tejbeer 524
        if (fofoCode != null) {
525
            FofoStore fs = fofoStoreRepository.selectByStoreCode(fofoCode.toUpperCase());
526
            PincodePartner pp = pincodePartnerRepository.selectPartnerByPincode(pincode, fs.getId());
527
            if (pp != null) {
528
                return responseSender.ok(customerRetailers.add(retailerService.getFofoRetailer(pp.getFofoId())));
529
            } else {
30426 tejbeer 530
 
32018 tejbeer 531
                List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
532
                if (pincodePartners.size() > 0) {
28566 tejbeer 533
 
32018 tejbeer 534
                    List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
535
                    List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
28566 tejbeer 536
 
32018 tejbeer 537
                    Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
28566 tejbeer 538
 
32018 tejbeer 539
                    Map<Integer, CustomRetailer> customerRetailerMap = activefofoIds.stream().map(x -> customRetailerMap.get(x)).filter(x -> x != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
28566 tejbeer 540
 
32018 tejbeer 541
                    customerRetailers.addAll(customerRetailerMap.values());
30426 tejbeer 542
 
32018 tejbeer 543
                }
544
                return responseSender.ok(customerRetailers);
30426 tejbeer 545
 
32018 tejbeer 546
            }
547
        } else {
28566 tejbeer 548
 
32018 tejbeer 549
            List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
550
            if (pincodePartners.size() > 0) {
551
                List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
552
                List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
28566 tejbeer 553
 
32018 tejbeer 554
                Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
28566 tejbeer 555
 
32018 tejbeer 556
                Map<Integer, CustomRetailer> customerRetailerMap = activefofoIds.stream().map(x -> customRetailerMap.get(x)).filter(x -> x != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
28566 tejbeer 557
 
32018 tejbeer 558
                customerRetailers.addAll(customerRetailerMap.values());
559
            }
28298 tejbeer 560
 
32018 tejbeer 561
            return responseSender.ok(customerRetailers);
30426 tejbeer 562
 
32018 tejbeer 563
        }
30426 tejbeer 564
 
32018 tejbeer 565
    }
30426 tejbeer 566
 
32018 tejbeer 567
    @RequestMapping(value = "/store/address/detail/{pincode}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
568
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
569
    @ApiOperation(value = "Get brand list and count for category")
570
    public ResponseEntity<?> getStoresDetailsByPincode(HttpServletRequest request, @PathVariable String pincode) throws Exception {
571
        List<CustomRetailer> customerRetailers = new ArrayList<>();
572
        List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
28298 tejbeer 573
 
32018 tejbeer 574
        if (!pincodePartners.isEmpty()) {
575
            List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
576
            List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
28298 tejbeer 577
 
32018 tejbeer 578
            Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
28566 tejbeer 579
 
32018 tejbeer 580
            Map<Integer, CustomRetailer> customerRetailerMap = activefofoIds.stream().map(x -> customRetailerMap.get(x)).filter(x -> x != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
27049 tejbeer 581
 
32018 tejbeer 582
            customerRetailers.addAll(customerRetailerMap.values());
583
        }
27049 tejbeer 584
 
32018 tejbeer 585
        logger.info("customerRetailers" + customerRetailers);
586
        return responseSender.ok(customerRetailers);
587
    }
26855 tejbeer 588
 
32018 tejbeer 589
    @RequestMapping(value = "/store/order", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
590
    public ResponseEntity<?> getOrderDetail(HttpServletRequest request, @RequestParam(value = "id") int id, @RequestParam(name = "offset") int offset, @RequestParam(name = "limit") int limit) throws Exception {
591
        List<CustomerOrderDetail> customerOrderDetails = new ArrayList<>();
592
        List<Integer> catalogIds = new ArrayList<>();
593
        List<PendingOrder> pendingOrders = pendingOrderRepository.selectByCustomerId(id, offset, limit);
26855 tejbeer 594
 
32018 tejbeer 595
        if (!pendingOrders.isEmpty()) {
596
            for (PendingOrder po : pendingOrders) {
597
                List<PendingOrderItem> pois = pendingOrderItemRepository.selectByOrderId(po.getId());
598
                for (PendingOrderItem pendingOrderItem : pois) {
599
                    Item item = itemRepository.selectById(pendingOrderItem.getItemId());
600
                    pendingOrderItem.setItemName(item.getItemDescription());
601
                    catalogIds.add(item.getCatalogItemId());
602
                }
26855 tejbeer 603
 
32018 tejbeer 604
                Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
26855 tejbeer 605
 
32018 tejbeer 606
                for (PendingOrderItem poi : pois) {
28566 tejbeer 607
 
32018 tejbeer 608
                    CustomerOrderDetail customerOrderDetail = new CustomerOrderDetail();
28566 tejbeer 609
 
32018 tejbeer 610
                    Item item = itemRepository.selectById(poi.getItemId());
611
                    JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
612
                    customerOrderDetail.setImageUrl(jsonObj.getString("imageUrl_s"));
613
                    customerOrderDetail.setBrand(item.getBrand());
614
                    customerOrderDetail.setColor(item.getColor());
615
                    customerOrderDetail.setPendingOrderItemId(poi.getId());
616
                    customerOrderDetail.setId(poi.getOrderId());
617
                    customerOrderDetail.setItemId(poi.getItemId());
618
                    customerOrderDetail.setModelName(item.getModelName());
619
                    customerOrderDetail.setModelNumber(item.getModelNumber());
620
                    customerOrderDetail.setQuantity(poi.getQuantity());
621
                    customerOrderDetail.setBilledTimestamp(poi.getBilledTimestamp());
622
                    customerOrderDetail.setStatus(poi.getStatus());
623
                    customerOrderDetail.setTotalPrice(poi.getSellingPrice());
624
                    customerOrderDetail.setPayMethod(po.getPayMethod());
625
                    customerOrderDetail.setCreatedTimeStamp(po.getCreateTimestamp());
626
                    customerOrderDetails.add(customerOrderDetail);
627
                }
628
            }
629
        }
28566 tejbeer 630
 
32018 tejbeer 631
        return responseSender.ok(customerOrderDetails);
632
    }
28566 tejbeer 633
 
32018 tejbeer 634
    @RequestMapping(value = "/store/invoiceOrder", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
635
    public ResponseEntity<?> getOrderInvoiceDetail(HttpServletRequest request, @RequestParam(value = "id") int id, @RequestParam(name = "offset") int offset, @RequestParam(name = "limit") int limit) throws Exception {
636
        List<CustomerOrderDetail> customerOrderDetails = new ArrayList<>();
637
        List<Integer> catalogIds = new ArrayList<>();
638
        List<FofoOrder> fofoOrders = fofoOrderRepository.selectOrderByCustomerId(id, offset, limit);
28566 tejbeer 639
 
32018 tejbeer 640
        if (!fofoOrders.isEmpty()) {
641
            for (FofoOrder fo : fofoOrders) {
642
                List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fo.getId());
643
                for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
644
                    Item item = itemRepository.selectById(fofoOrderItem.getItemId());
645
                    fofoOrderItem.setItemName(item.getItemDescription());
646
                    catalogIds.add(item.getCatalogItemId());
647
                }
28566 tejbeer 648
 
32018 tejbeer 649
                Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
650
                for (FofoOrderItem foi : fofoOrderItems) {
28566 tejbeer 651
 
32018 tejbeer 652
                    CustomerOrderDetail customerOrderDetail = new CustomerOrderDetail();
28566 tejbeer 653
 
32018 tejbeer 654
                    Item item = itemRepository.selectById(foi.getItemId());
655
                    JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
656
                    customerOrderDetail.setImageUrl(jsonObj.getString("imageUrl_s"));
657
                    customerOrderDetail.setBrand(item.getBrand());
658
                    customerOrderDetail.setColor(item.getColor());
659
                    customerOrderDetail.setFofoOrderItemId(foi.getId());
660
                    customerOrderDetail.setFofoOrderId(foi.getOrderId());
661
                    customerOrderDetail.setItemId(foi.getItemId());
662
                    customerOrderDetail.setModelName(item.getModelName());
663
                    customerOrderDetail.setModelNumber(item.getModelNumber());
664
                    customerOrderDetail.setQuantity(foi.getQuantity());
665
                    customerOrderDetail.setTotalPrice(foi.getSellingPrice());
666
                    customerOrderDetail.setCreatedTimeStamp(foi.getCreateTimestamp());
667
                    customerOrderDetail.setInvoiceNumber(fo.getInvoiceNumber());
668
                    customerOrderDetail.setCancelledTimestamp(fo.getCancelledTimestamp());
669
                    customerOrderDetails.add(customerOrderDetail);
670
                }
671
            }
28566 tejbeer 672
 
32018 tejbeer 673
        }
674
        return responseSender.ok(customerOrderDetails);
675
    }
28566 tejbeer 676
 
32018 tejbeer 677
    @RequestMapping(value = "/store/generateInvoice", method = RequestMethod.GET)
678
    public ResponseEntity<?> generateInvoice(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
679
        InvoicePdfModel pdfModel = null;
680
        FofoOrder fo = fofoOrderRepository.selectByOrderId(orderId);
681
        pdfModel = orderService.getInvoicePdfModel(fo.getFofoId(), orderId);
682
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
683
        PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
684
        try {
685
            byteArrayOutputStream.close();
686
        } catch (IOException e) {
687
            // TODO Auto-generated catch block
688
            e.printStackTrace();
689
        }
690
        final HttpHeaders headers = new HttpHeaders();
691
        headers.setContentType(MediaType.APPLICATION_PDF);
692
        // headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
26745 amit.gupta 693
 
32018 tejbeer 694
        headers.setContentType(MediaType.parseMediaType("application/pdf"));
695
        headers.set("Content-disposition", "inline; filename=invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
696
        headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
697
        headers.add("Pragma", "no-cache");
698
        headers.add("Expires", "0");
28287 amit.gupta 699
 
32018 tejbeer 700
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
701
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
702
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
703
        return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
704
        // return responseSender.ok(new
705
        // ResponseEntity<byte[]>(byteArrayOutputStream.toByteArray(),
706
        // headers,HttpStatus.OK));
707
        /*
708
         * ResponseEntity<byte[]> response = new
709
         * ResponseEntity<byte[]>(byteArrayOutputStream.toByteArray(), headers,
710
         * HttpStatus.OK); return response;
711
         */
26923 amit.gupta 712
 
32018 tejbeer 713
    }
26607 amit.gupta 714
 
32018 tejbeer 715
    @RequestMapping(value = "/store/listing", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
716
    public ResponseEntity<?> getStoresListing(HttpServletRequest request) throws Exception {
717
        List<WebListing> webListings = webListingRepository.selectAllWebListingByType(Optional.of(true), WebListingSource.store);
718
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
32546 amit.gupta 719
        for (WebListing webListing : webListings) {
720
            webListing.setFofoCatalogResponses(getDealResponses(userInfo, webListing));
721
        }
722
        return responseSender.ok(webListings);
723
    }
33399 ranu 724
 
725
    @Autowired
726
    StateRepository stateRepository;
727
 
728
    @RequestMapping(value = "/store/stateList", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
729
    public ResponseEntity<?> getStateList(HttpServletRequest request) throws Exception {
730
        List<State> states = stateRepository.selectAll();
731
        return responseSender.ok(states);
732
    }
32546 amit.gupta 733
    /*@RequestMapping(value = "/store/listing", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
734
    public ResponseEntity<?> getStoresListing(HttpServletRequest request) throws Exception {
735
        List<WebListing> webListings = webListingRepository.selectAllWebListingByType(Optional.of(true), WebListingSource.store);
736
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
32544 amit.gupta 737
        Iterator<WebListing> webListingIterator = webListings.iterator();
738
        while (webListingIterator.hasNext()) {
739
            WebListing webListing = webListingIterator.next();
740
            List<FofoCatalogResponse> catalogResponses = getDealResponses(userInfo, webListing);
741
            boolean isAvailable = catalogResponses.stream().anyMatch(x->x.getItems().stream().anyMatch(y->y.getAvailability()>0));
32545 amit.gupta 742
            webListing.setFofoCatalogResponses(catalogResponses);
32544 amit.gupta 743
            if(!isAvailable) {
744
                webListings.remove(webListing);
745
            }
32018 tejbeer 746
        }
32544 amit.gupta 747
 
32018 tejbeer 748
        return responseSender.ok(webListings);
32546 amit.gupta 749
    }*/
26607 amit.gupta 750
 
32018 tejbeer 751
    private List<FofoCatalogResponse> getDealResponses(UserInfo userInfo, WebListing webListing) throws ProfitMandiBusinessException {
752
        List<Integer> webProducts = webProductListingRepository.selectAllByWebListingId(webListing.getId()).stream().filter(x -> x.getRank() > 0).map(x -> x.getEntityId()).collect(Collectors.toList());
753
        if (webProducts.size() == 0) {
754
            return new ArrayList<>();
755
        }
756
        RestClient rc = new RestClient();
757
        Map<String, String> params = new HashMap<>();
758
        List<String> mandatoryQ = new ArrayList<>();
759
        mandatoryQ.add(String.format(
760
                "+{!parent which=\"catalogId_i:" + StringUtils.join(webProducts, " ") + "\"} tagId_i:(%s)", StringUtils.join(TAG_IDS, " ")));
761
        params.put("q", StringUtils.join(mandatoryQ, " "));
762
        params.put("fl", "*, [child parentFilter=id:catalog*]");
763
        // params.put("sort", "create_s desc");
764
        params.put("start", String.valueOf(0));
765
        params.put("rows", String.valueOf(100));
766
        params.put("wt", "json");
767
        String response = null;
768
        try {
769
            response = rc.get(SchemeType.HTTP, "50.116.10.120", 8984, "solr/demo/select", params);
770
        } catch (HttpHostConnectException e) {
771
            throw new ProfitMandiBusinessException("", "", "Could not connect to host");
772
        }
773
        JSONObject solrResponseJSONObj = new JSONObject(response).getJSONObject("response");
774
        JSONArray docs = solrResponseJSONObj.getJSONArray("docs");
775
        List<FofoCatalogResponse> dealResponse = getCatalogResponse(docs, false, userInfo.getRetailerId());
776
        return dealResponse;
777
    }
26607 amit.gupta 778
 
32018 tejbeer 779
    @RequestMapping(value = "/store/cart", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
780
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
781
    @ApiOperation(value = "Get brand list and count for category")
782
    public ResponseEntity<?> cart(HttpServletRequest request, @RequestBody AddCartRequest cartRequest) throws Exception {
783
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
784
        Integer storeId = userInfo.getRetailerId();
785
        ValidateCartResponse vc = new ValidateCartResponse(this.validateCart(storeId, cartRequest.getCartItems()), "Success", "Items added to cart successfully");
786
        return responseSender.ok(vc);
787
    }
26607 amit.gupta 788
 
32018 tejbeer 789
    // Validate Cart for B2C Customers
790
    private CartResponse validateCart(int storeId, List<CartItem> cartItems) throws Exception {
791
        cartItems = cartItems.stream().filter(x -> x.getQuantity() > 0).collect(Collectors.toList());
792
        List<Integer> itemIds = cartItems.stream().map(x -> x.getItemId()).collect(Collectors.toList());
793
        Map<Integer, AvailabilityModel> inventoryItemAvailabilityMap = inventoryService.getStoreAndOurStock(storeId, itemIds);
794
        CartResponse cartResponse = new CartResponse();
795
        List<CartItemResponseModel> cartItemResponseModels = new ArrayList<>();
796
        cartResponse.setCartItems(cartItemResponseModels);
797
        Set<Integer> itemsIdsSet = new HashSet<>(itemIds);
798
        logger.info("Store Id {}, Item Ids {}", storeId, itemsIdsSet);
26607 amit.gupta 799
 
32018 tejbeer 800
        Map<Integer, Item> itemsMap = itemRepository.selectByIds(itemsIdsSet).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
26652 amit.gupta 801
 
32018 tejbeer 802
        Map<Integer, TagListing> tagListingMap = tagListingRepository.selectByItemIdsAndTagIds(new HashSet<>(itemIds), new HashSet<>(Arrays.asList(4))).stream().collect(Collectors.toMap(x -> x.getItemId(), x -> x));
26923 amit.gupta 803
 
32018 tejbeer 804
        List<Integer> catalogIds = itemsMap.values().stream().map(x -> x.getCatalogItemId()).collect(Collectors.toList());
26607 amit.gupta 805
 
32018 tejbeer 806
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
27030 amit.gupta 807
 
32018 tejbeer 808
        // cartResponse.getCartItems()
809
        int cartMessageChanged = 0;
810
        int cartMessageOOS = 0;
811
        int totalAmount = 0;
812
        int totalQty = 0;
813
        for (CartItem cartItem : cartItems) {
814
            Item item = itemsMap.get(cartItem.getItemId());
815
            TagListing tagListing = tagListingMap.get(cartItem.getItemId());
32977 amit.gupta 816
            int catalogId = itemsMap.get(cartItem.getItemId()).getCatalogItemId();
817
            Float cashback = schemeService.getCatalogSchemeCashBack(storeId, Arrays.asList(catalogId))
818
                    .get(itemsMap.get(cartItem.getItemId()).getCatalogItemId());
32018 tejbeer 819
            cashback = cashback == null ? 0 : cashback;
820
            float itemSellingPrice = tagListing.getMop() - cashback;
821
            CartItemResponseModel cartItemResponseModel = new CartItemResponseModel();
822
            cartItemResponseModel.setSellingPrice(cartItem.getSellingPrice());
33399 ranu 823
            cartItemResponseModel.setExtendedWarrantyPrice(cartItem.getExtendedWarrantyPrice());
32018 tejbeer 824
            if (itemSellingPrice != cartItem.getSellingPrice()) {
825
                cartItemResponseModel.setSellingPrice(itemSellingPrice);
826
                cartMessageChanged++;
827
            }
828
            int estimate = -2;
829
            LocalDateTime promiseDeliveryTime = LocalDateTime.now();
830
            int qtyRequired = (int) cartItem.getQuantity();
831
            AvailabilityModel availabilityModel = inventoryItemAvailabilityMap.get(cartItem.getItemId());
832
            cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
833
            if (availabilityModel.getStoreAvailability() >= qtyRequired) {
834
                estimate = 0;
835
            } else if (availabilityModel.getWarehouseAvailability() >= qtyRequired) {
836
                estimate = 2;
837
            } else if (availabilityModel.getStoreAvailability() > 0) {
838
                estimate = 0;
839
                qtyRequired = availabilityModel.getStoreAvailability();
840
                cartMessageChanged++;
841
            } else if (availabilityModel.getWarehouseAvailability() > 0) {
842
                qtyRequired = availabilityModel.getWarehouseAvailability();
843
                estimate = 2;
844
                cartMessageChanged++;
845
            } else {
846
                qtyRequired = 0;
847
                cartMessageChanged++;
848
            }
849
            cartItemResponseModel.setQuantity(qtyRequired);
850
            if (estimate >= 0 && LocalTime.now().isAfter(CUTOFF_TIME)) {
851
                estimate = estimate + 1;
852
                promiseDeliveryTime = promiseDeliveryTime.plusDays(3);
853
            }
854
            totalQty += qtyRequired;
33399 ranu 855
            totalAmount += qtyRequired * itemSellingPrice + cartItem.getExtendedWarrantyPrice() ;
32018 tejbeer 856
            cartItemResponseModel.setEstimate(estimate);
857
            cartItemResponseModel.setTitle(item.getItemDescriptionNoColor());
858
            cartItemResponseModel.setItemId(cartItem.getItemId());
859
            cartItemResponseModel.setMinBuyQuantity(1);
860
            cartItemResponseModel.setQuantity(qtyRequired);
861
            cartItemResponseModel.setQuantityStep(1);
862
            cartItemResponseModel.setPromiseDelivery(promiseDeliveryTime);
863
            cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
864
            cartItemResponseModel.setCatalogItemId(item.getCatalogItemId());
865
            cartItemResponseModel.setImageUrl(contentMap.get(item.getCatalogItemId()).getString("imageUrl_s"));
866
            cartItemResponseModel.setColor(item.getColor());
867
            cartItemResponseModels.add(cartItemResponseModel);
868
        }
869
        cartResponse.setCartItems(cartItemResponseModels);
870
        cartResponse.setCartMessageChanged(cartMessageChanged);
871
        cartResponse.setCartMessageOOS(cartMessageOOS);
872
        int maxEstimate = cartItemResponseModels.stream().mapToInt(x -> x.getEstimate()).max().getAsInt();
873
        cartResponse.setMaxEstimate(maxEstimate);
874
        cartResponse.setTotalAmount(totalAmount);
875
        cartResponse.setTotalQty(totalQty);
26607 amit.gupta 876
 
32018 tejbeer 877
        return cartResponse;
26923 amit.gupta 878
 
32018 tejbeer 879
    }
27069 tejbeer 880
 
32018 tejbeer 881
    @RequestMapping(value = "/store/partnerStock", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
882
    public ResponseEntity<?> partnerStock(HttpServletRequest request, @RequestParam(value = "categoryId", required = false, defaultValue = "3") String categoryId, @RequestParam(value = "offset") String offset, @RequestParam(value = "limit") String limit, @RequestParam(value = "sort", required = false) String sort, @RequestParam(value = "brand", required = false) String brand, @RequestParam(value = "subCategoryId", required = false) int subCategoryId, @RequestParam(value = "q", required = false) String queryTerm, @RequestParam(required = false) String listing, @RequestParam(required = false, defaultValue = "true") boolean partnerStockOnly) throws Throwable {
883
        List<FofoCatalogResponse> dealResponse = new ArrayList<>();
884
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
885
        FofoStore fs = fofoStoreRepository.selectByRetailerId(userInfo.getRetailerId());
886
        sort = "w" + fs.getWarehouseId() + "_i desc";
887
        dealResponse = this.getCatalogResponse(
888
                commonSolrService.getSolrDocs(queryTerm, categoryId, offset, limit, sort, brand, subCategoryId, false), false, userInfo.getRetailerId());
889
        return responseSender.ok(dealResponse);
890
    }
26923 amit.gupta 891
 
32018 tejbeer 892
    private List<FofoCatalogResponse> getCatalogResponse(JSONArray docs, boolean hotDeal, int fofoId) throws ProfitMandiBusinessException {
893
        Map<Integer, Integer> ourItemAvailabilityMap = null;
894
        Map<Integer, Integer> partnerStockAvailabilityMap = null;
895
        List<FofoCatalogResponse> dealResponse = new ArrayList<>();
896
        List<Integer> tagIds = Arrays.asList(4);
897
        if (docs.length() > 0) {
898
            HashSet<Integer> itemsSet = new HashSet<>();
899
            for (int i = 0; i < docs.length(); i++) {
900
                JSONObject doc = docs.getJSONObject(i);
901
                if (doc.has("_childDocuments_")) {
902
                    for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
903
                        JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
904
                        int itemId = childItem.getInt("itemId_i");
905
                        itemsSet.add(itemId);
906
                    }
907
                }
908
            }
909
            if (itemsSet.size() == 0) {
910
                return dealResponse;
911
            }
912
            if (fofoId > 0) {
913
                partnerStockAvailabilityMap = currentInventorySnapshotRepository.selectItemsStock(fofoId).stream().collect(Collectors.toMap(x -> x.getItemId(), x -> x.getAvailability()));
914
            }
915
            ourItemAvailabilityMap = saholicInventoryService.getTotalAvailabilityByItemIds(new ArrayList<>(itemsSet));
916
        }
26833 amit.gupta 917
 
32018 tejbeer 918
        for (int i = 0; i < docs.length(); i++) {
919
            Map<Integer, FofoAvailabilityInfo> fofoAvailabilityInfoMap = new HashMap<>();
920
            JSONObject doc = docs.getJSONObject(i);
921
            FofoCatalogResponse ffdr = new FofoCatalogResponse();
922
            ffdr.setCatalogId(doc.getInt("catalogId_i"));
923
            ffdr.setImageUrl(doc.getString("imageUrl_s"));
924
            ffdr.setTitle(doc.getString("title_s"));
925
            List<WebOffer> webOffers = webOfferRepository.selectAllActiveOffers().get(ffdr.getCatalogId());
926
            if (webOffers != null && webOffers.size() > 0) {
927
                ffdr.setOffers(webOffers.stream().map(x -> x.getTitle()).collect(Collectors.toList()));
928
            }
929
            try {
930
                ffdr.setFeature(doc.getString("feature_s"));
931
            } catch (Exception e) {
932
                ffdr.setFeature(null);
933
            }
934
            ffdr.setBrand(doc.getJSONArray("brand_ss").getString(0));
33314 ranu 935
 
32018 tejbeer 936
            if (doc.has("_childDocuments_")) {
937
                for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
938
                    JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
939
                    int itemId = childItem.getInt("itemId_i");
33314 ranu 940
                    ffdr.setIsSmartPhone(itemRepository.selectById(itemId).isSmartPhone());
32018 tejbeer 941
                    float sellingPrice = (float) childItem.getDouble("sellingPrice_f");
942
                    if (fofoAvailabilityInfoMap.containsKey(itemId)) {
943
                        if (fofoAvailabilityInfoMap.get(itemId).getSellingPrice() > sellingPrice) {
944
                            fofoAvailabilityInfoMap.get(itemId).setSellingPrice(sellingPrice);
945
                            fofoAvailabilityInfoMap.get(itemId).setMop((float) childItem.getDouble("mop_f"));
946
                        }
947
                    } else {
948
                        FofoAvailabilityInfo fdi = new FofoAvailabilityInfo();
949
                        fdi.setSellingPrice(sellingPrice);
950
                        fdi.setMrp(childItem.getDouble("mrp_f"));
951
                        fdi.setMop((float) childItem.getDouble("mop_f"));
952
                        fdi.setColor(childItem.has("color_s") ? childItem.getString("color_s") : "");
953
                        fdi.setTagId(childItem.getInt("tagId_i"));
954
                        fdi.setItem_id(itemId);
32977 amit.gupta 955
                        Float cashBack = schemeService.getCatalogSchemeCashBack(fofoId, Arrays.asList(ffdr.getCatalogId())).get(ffdr.getCatalogId());
32018 tejbeer 956
                        cashBack = cashBack == null ? 0 : cashBack;
957
                        // TODO:Dont commit
958
                        // fdi.setCashback(Math.min(100, fdi.getMop()));
959
                        fdi.setCashback(cashBack);
960
                        fdi.setMinBuyQuantity(1);
961
                        int partnerAvailability = partnerStockAvailabilityMap.get(itemId) == null ? 0 : partnerStockAvailabilityMap.get(itemId);
962
                        int ourStockAvailability = ourItemAvailabilityMap.get(itemId) == null ? 0 : Math.max(0, ourItemAvailabilityMap.get(itemId));
963
                        fdi.setActive(partnerAvailability > 0);
964
                        // fdi.setActive(true);
965
                        fdi.setAvailability(Math.min(5, ourStockAvailability + partnerAvailability));
966
                        fdi.setQuantityStep(1);
967
                        fdi.setMaxQuantity(fdi.getAvailability());
968
                        fofoAvailabilityInfoMap.put(itemId, fdi);
969
                    }
970
                }
971
            }
972
            if (fofoAvailabilityInfoMap.values().size() > 0) {
973
                ffdr.setItems(fofoAvailabilityInfoMap.values().stream().sorted(Comparator.comparing(FofoAvailabilityInfo::isActive, Comparator.reverseOrder()).thenComparingInt(y -> -y.getAvailability())).collect(Collectors.toList()));
974
                dealResponse.add(ffdr);
975
            }
976
        }
977
        return dealResponse.stream().sorted(Comparator.comparing(FofoCatalogResponse::getItems, (s1, s2) -> (s2.get(0).isActive() ? 1 : 0) - (s1.get(0).isActive() ? 1 : 0)).thenComparing(FofoCatalogResponse::getItems, (x, y) -> y.get(0).getAvailability() - x.get(0).getAvailability())).collect(Collectors.toList());
978
    }
26857 amit.gupta 979
 
32018 tejbeer 980
    @GetMapping(value = "store/order-status/{pendingOrderId}")
981
    public ResponseEntity<?> orderStatus(HttpServletRequest request, @PathVariable int pendingOrderId) throws Exception {
982
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderId);
983
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
984
        List<Integer> catalogIds = new ArrayList<>();
985
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
986
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
987
            pendingOrderItem.setItemName(item.getItemDescription());
988
            catalogIds.add(item.getCatalogItemId());
989
        }
990
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
991
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
992
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
993
            JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
994
            pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
995
        }
996
        pendingOrder.setPendingOrderItems(pendingOrderItems);
27045 tejbeer 997
 
32018 tejbeer 998
        return responseSender.ok(pendingOrder);
999
    }
28345 tejbeer 1000
 
32018 tejbeer 1001
    @RequestMapping(value = "/store/addresses/{customerId}", method = RequestMethod.GET)
1002
    public ResponseEntity<?> getAll(HttpServletRequest request, @PathVariable int customerId) throws Throwable {
1003
        return responseSender.ok(customerAddressRepository.selectByActiveCustomerId(customerId));
1004
    }
26861 tejbeer 1005
 
32018 tejbeer 1006
    @RequestMapping(value = "/store/address", method = RequestMethod.POST)
1007
    public ResponseEntity<?> addAddress(HttpServletRequest request, @RequestBody CustomerAddress customerAddress) throws Throwable {
1008
        customerAddressRepository.persist(customerAddress);
1009
        return responseSender.ok(customerAddress);
1010
    }
27045 tejbeer 1011
 
32018 tejbeer 1012
    @RequestMapping(value = "/store/deactivateCustomerAddress", method = RequestMethod.POST)
1013
    public ResponseEntity<?> deactivateAddresss(HttpServletRequest request, @RequestParam int id) throws Throwable {
1014
        CustomerAddress cust = customerAddressRepository.selectById(id);
1015
        cust.setActive(false);
1016
        return responseSender.ok(cust);
1017
    }
27048 tejbeer 1018
 
32018 tejbeer 1019
    @RequestMapping(value = "/store/updateCustomer", method = RequestMethod.POST)
1020
    public ResponseEntity<?> updateCustomerProfile(HttpServletRequest request, @RequestBody Customer customer) throws Throwable {
1021
        Customer cust = customerRepository.selectById(customer.getId());
1022
        cust.setGender(customer.getGender());
1023
        cust.setProfileImageId(customer.getProfileImageId());
1024
        cust.setDob(customer.getDob());
1025
        return responseSender.ok(cust);
1026
    }
27048 tejbeer 1027
 
32018 tejbeer 1028
    @RequestMapping(value = "/stores/{state}/{city}/{storeCode}", method = RequestMethod.GET)
1029
    public void getStoreIndex(HttpServletResponse response, HttpServletRequest request, @PathVariable String state, @PathVariable String city, @PathVariable String storeCode) throws Throwable {
1030
        logger.info("Store code {}", storeCode);
1031
        Map<String, Integer> map = retailerService.getStoreCodeRetailerMap();
1032
        logger.info("retailer id {}", map.get(storeCode));
1033
        String retailerName = retailerService.getAllFofoRetailers().get(map.get(storeCode)).getBusinessName();
1034
        String html = partnerIndexService.getPartnerIndexHtml();
1035
        logger.info("html {}", html);
1036
        html = html.replace("Buy Mobiles and Accessories at exciting prices - SmartDukaan", String.format("%s is now ONLINE. Buy Mobiles, Accessories & more | SmartDukaan", retailerName));
1037
        response.getWriter().write(html);
1038
    }
27048 tejbeer 1039
 
32018 tejbeer 1040
    @RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
1041
    public ResponseEntity<?> cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id,
28339 tejbeer 1042
 
32018 tejbeer 1043
                                                    @RequestParam String statusDescription, @RequestParam String reason) throws Exception {
28339 tejbeer 1044
 
32018 tejbeer 1045
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1046
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1047
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1048
        if (pendingOrderItem.getBilledTimestamp() == null) {
1049
            pendingOrderItem.setStatus(OrderStatus.CANCELLED);
1050
            pendingOrderItem.setRemark(reason);
1051
            pendingOrderItem.setStatusDescription("cancel by self");
1052
            pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
1053
            List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream().map(x -> x.getStatus()).collect(Collectors.toList());
28339 tejbeer 1054
 
32018 tejbeer 1055
            if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING) && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED) && !status.contains(OrderStatus.CLAIMED)) {
1056
                pendingOrder.setStatus(OrderStatus.CLOSED);
1057
            }
28339 tejbeer 1058
 
32018 tejbeer 1059
            pendingOrderItemRepository.persist(pendingOrderItem);
1060
            String itemDescription = itemRepository.selectById(pendingOrderItem.getItemId()).getItemDescription();
1061
            otpProcessor.sendSms(OtpProcessor.SELF_CANCELLED_TEMPLATE_ID, String.format(OtpProcessor.SELF_CANCELLED_TEMPLATE, pendingOrder.getId(), StringUtils.abbreviate(itemDescription, 30), FormattingUtils.format(pendingOrderItem.getCancelledTimestamp())), customer.getMobileNumber());
28339 tejbeer 1062
 
32018 tejbeer 1063
            List<Integer> catalogIds = new ArrayList<>();
28339 tejbeer 1064
 
32018 tejbeer 1065
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1066
            pendingOrderItem.setItemName(item.getItemDescription());
1067
            catalogIds.add(item.getCatalogItemId());
28339 tejbeer 1068
 
32018 tejbeer 1069
            Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1070
            JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1071
            pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1072
            pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1073
            CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
28355 tejbeer 1074
 
32018 tejbeer 1075
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
28339 tejbeer 1076
 
32018 tejbeer 1077
            Map<String, Object> emailModel = new HashMap<>();
1078
            emailModel.put("customer", customerAddress);
1079
            emailModel.put("pendingOrder", pendingOrder);
1080
            emailModel.put("date", dateTimeFormatter);
27048 tejbeer 1081
 
32018 tejbeer 1082
            String[] customerEmail = null;
1083
            if (customer.getEmailId() != null) {
1084
                customerEmail = new String[]{customer.getEmailId()};
27048 tejbeer 1085
 
32018 tejbeer 1086
                List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
29515 tejbeer 1087
 
32018 tejbeer 1088
                emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel, customerEmail, null, bccTo.toArray(new String[0]));
29515 tejbeer 1089
 
32018 tejbeer 1090
            }
1091
        }
29515 tejbeer 1092
 
32018 tejbeer 1093
        return responseSender.ok(true);
29515 tejbeer 1094
 
32018 tejbeer 1095
    }
31444 tejbeer 1096
 
32018 tejbeer 1097
    @RequestMapping(value = "/store/checkEligibilityStoreOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1098
    public ResponseEntity<?> checkEligibilityStoreOffers(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
29515 tejbeer 1099
 
32018 tejbeer 1100
        boolean eligibility = false;
29515 tejbeer 1101
 
1102
 
32586 ranu 1103
        List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id,
1104
                ProfitMandiConstants.SCRATCH_OFFER_START_DATE, ProfitMandiConstants.SCRATCH_OFFER_END_DATE);
29515 tejbeer 1105
 
32018 tejbeer 1106
        if (!scratchOffers.isEmpty()) {
1107
            eligibility = true;
31457 tejbeer 1108
 
32018 tejbeer 1109
        }
1110
        return responseSender.ok(eligibility);
1111
    }
29515 tejbeer 1112
 
32018 tejbeer 1113
    @RequestMapping(value = "/store/ScratchOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1114
    public ResponseEntity<?> scratchOffers(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
29515 tejbeer 1115
 
32586 ranu 1116
        List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id,
1117
                ProfitMandiConstants.SCRATCH_OFFER_START_DATE, ProfitMandiConstants.SCRATCH_OFFER_END_DATE);
29515 tejbeer 1118
 
32218 tejbeer 1119
        logger.info("scratchOffers {}", scratchOffers);
32018 tejbeer 1120
        // List<ScratchOffer> scratchOffers =
1121
        // scratchOfferRepository.selectBycCustomerId(id);
1122
        for (ScratchOffer so : scratchOffers) {
1123
            if (LocalDateTime.now().isAfter(so.getUnlockedAt())) {
1124
                so.setUnlocked(true);
1125
            } else {
1126
                so.setUnlocked(false);
1127
            }
33151 ranu 1128
            LocalDateTime expiredTimestamp = ProfitMandiConstants.SCRATCH_OFFER_END_DATE.plusDays(1).atTime(LocalTime.MAX);
32671 ranu 1129
            so.setExpiredTimestamp(expiredTimestamp);
1130
            if(LocalDateTime.now().isAfter(expiredTimestamp)) {
1131
                so.setExpired(true);
1132
            }
32018 tejbeer 1133
        }
29515 tejbeer 1134
 
32018 tejbeer 1135
        return responseSender.ok(scratchOffers);
1136
    }
1137
 
1138
    @RequestMapping(value = "/store/ScratchedOffer", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1139
    public ResponseEntity<?> scratchedOffer(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
1140
 
1141
        ScratchOffer scratchOffer = scratchOfferRepository.selectById(id);
1142
        scratchOffer.setScratched(true);
1143
        scratchOffer.setScracthedAt(LocalDateTime.now());
1144
 
1145
        return responseSender.ok(true);
1146
    }
1147
 
26607 amit.gupta 1148
}