Subversion Repositories SmartDukaan

Rev

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