Subversion Repositories SmartDukaan

Rev

Rev 32765 | Rev 33151 | 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));
885
            if (doc.has("_childDocuments_")) {
886
                for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
887
                    JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
888
                    int itemId = childItem.getInt("itemId_i");
889
                    float sellingPrice = (float) childItem.getDouble("sellingPrice_f");
890
                    if (fofoAvailabilityInfoMap.containsKey(itemId)) {
891
                        if (fofoAvailabilityInfoMap.get(itemId).getSellingPrice() > sellingPrice) {
892
                            fofoAvailabilityInfoMap.get(itemId).setSellingPrice(sellingPrice);
893
                            fofoAvailabilityInfoMap.get(itemId).setMop((float) childItem.getDouble("mop_f"));
894
                        }
895
                    } else {
896
                        FofoAvailabilityInfo fdi = new FofoAvailabilityInfo();
897
                        fdi.setSellingPrice(sellingPrice);
898
                        fdi.setMrp(childItem.getDouble("mrp_f"));
899
                        fdi.setMop((float) childItem.getDouble("mop_f"));
900
                        fdi.setColor(childItem.has("color_s") ? childItem.getString("color_s") : "");
901
                        fdi.setTagId(childItem.getInt("tagId_i"));
902
                        fdi.setItem_id(itemId);
32977 amit.gupta 903
                        Float cashBack = schemeService.getCatalogSchemeCashBack(fofoId, Arrays.asList(ffdr.getCatalogId())).get(ffdr.getCatalogId());
32018 tejbeer 904
                        cashBack = cashBack == null ? 0 : cashBack;
905
                        // TODO:Dont commit
906
                        // fdi.setCashback(Math.min(100, fdi.getMop()));
907
                        fdi.setCashback(cashBack);
908
                        fdi.setMinBuyQuantity(1);
909
                        int partnerAvailability = partnerStockAvailabilityMap.get(itemId) == null ? 0 : partnerStockAvailabilityMap.get(itemId);
910
                        int ourStockAvailability = ourItemAvailabilityMap.get(itemId) == null ? 0 : Math.max(0, ourItemAvailabilityMap.get(itemId));
911
                        fdi.setActive(partnerAvailability > 0);
912
                        // fdi.setActive(true);
913
                        fdi.setAvailability(Math.min(5, ourStockAvailability + partnerAvailability));
914
                        fdi.setQuantityStep(1);
915
                        fdi.setMaxQuantity(fdi.getAvailability());
916
                        fofoAvailabilityInfoMap.put(itemId, fdi);
917
                    }
918
                }
919
            }
920
            if (fofoAvailabilityInfoMap.values().size() > 0) {
921
                ffdr.setItems(fofoAvailabilityInfoMap.values().stream().sorted(Comparator.comparing(FofoAvailabilityInfo::isActive, Comparator.reverseOrder()).thenComparingInt(y -> -y.getAvailability())).collect(Collectors.toList()));
922
                dealResponse.add(ffdr);
923
            }
924
        }
925
        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());
926
    }
26857 amit.gupta 927
 
32018 tejbeer 928
    @GetMapping(value = "store/order-status/{pendingOrderId}")
929
    public ResponseEntity<?> orderStatus(HttpServletRequest request, @PathVariable int pendingOrderId) throws Exception {
930
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderId);
931
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
932
        List<Integer> catalogIds = new ArrayList<>();
933
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
934
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
935
            pendingOrderItem.setItemName(item.getItemDescription());
936
            catalogIds.add(item.getCatalogItemId());
937
        }
938
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
939
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
940
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
941
            JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
942
            pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
943
        }
944
        pendingOrder.setPendingOrderItems(pendingOrderItems);
27045 tejbeer 945
 
32018 tejbeer 946
        return responseSender.ok(pendingOrder);
947
    }
28345 tejbeer 948
 
32018 tejbeer 949
    @RequestMapping(value = "/store/addresses/{customerId}", method = RequestMethod.GET)
950
    public ResponseEntity<?> getAll(HttpServletRequest request, @PathVariable int customerId) throws Throwable {
951
        return responseSender.ok(customerAddressRepository.selectByActiveCustomerId(customerId));
952
    }
26861 tejbeer 953
 
32018 tejbeer 954
    @RequestMapping(value = "/store/address", method = RequestMethod.POST)
955
    public ResponseEntity<?> addAddress(HttpServletRequest request, @RequestBody CustomerAddress customerAddress) throws Throwable {
956
        customerAddressRepository.persist(customerAddress);
957
        return responseSender.ok(customerAddress);
958
    }
27045 tejbeer 959
 
32018 tejbeer 960
    @RequestMapping(value = "/store/deactivateCustomerAddress", method = RequestMethod.POST)
961
    public ResponseEntity<?> deactivateAddresss(HttpServletRequest request, @RequestParam int id) throws Throwable {
962
        CustomerAddress cust = customerAddressRepository.selectById(id);
963
        cust.setActive(false);
964
        return responseSender.ok(cust);
965
    }
27048 tejbeer 966
 
32018 tejbeer 967
    @RequestMapping(value = "/store/updateCustomer", method = RequestMethod.POST)
968
    public ResponseEntity<?> updateCustomerProfile(HttpServletRequest request, @RequestBody Customer customer) throws Throwable {
969
        Customer cust = customerRepository.selectById(customer.getId());
970
        cust.setGender(customer.getGender());
971
        cust.setProfileImageId(customer.getProfileImageId());
972
        cust.setDob(customer.getDob());
973
        return responseSender.ok(cust);
974
    }
27048 tejbeer 975
 
32018 tejbeer 976
    @RequestMapping(value = "/stores/{state}/{city}/{storeCode}", method = RequestMethod.GET)
977
    public void getStoreIndex(HttpServletResponse response, HttpServletRequest request, @PathVariable String state, @PathVariable String city, @PathVariable String storeCode) throws Throwable {
978
        logger.info("Store code {}", storeCode);
979
        Map<String, Integer> map = retailerService.getStoreCodeRetailerMap();
980
        logger.info("retailer id {}", map.get(storeCode));
981
        String retailerName = retailerService.getAllFofoRetailers().get(map.get(storeCode)).getBusinessName();
982
        String html = partnerIndexService.getPartnerIndexHtml();
983
        logger.info("html {}", html);
984
        html = html.replace("Buy Mobiles and Accessories at exciting prices - SmartDukaan", String.format("%s is now ONLINE. Buy Mobiles, Accessories & more | SmartDukaan", retailerName));
985
        response.getWriter().write(html);
986
    }
27048 tejbeer 987
 
32018 tejbeer 988
    @RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
989
    public ResponseEntity<?> cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id,
28339 tejbeer 990
 
32018 tejbeer 991
                                                    @RequestParam String statusDescription, @RequestParam String reason) throws Exception {
28339 tejbeer 992
 
32018 tejbeer 993
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
994
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
995
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
996
        if (pendingOrderItem.getBilledTimestamp() == null) {
997
            pendingOrderItem.setStatus(OrderStatus.CANCELLED);
998
            pendingOrderItem.setRemark(reason);
999
            pendingOrderItem.setStatusDescription("cancel by self");
1000
            pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
1001
            List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream().map(x -> x.getStatus()).collect(Collectors.toList());
28339 tejbeer 1002
 
32018 tejbeer 1003
            if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING) && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED) && !status.contains(OrderStatus.CLAIMED)) {
1004
                pendingOrder.setStatus(OrderStatus.CLOSED);
1005
            }
28339 tejbeer 1006
 
32018 tejbeer 1007
            pendingOrderItemRepository.persist(pendingOrderItem);
1008
            String itemDescription = itemRepository.selectById(pendingOrderItem.getItemId()).getItemDescription();
1009
            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 1010
 
32018 tejbeer 1011
            List<Integer> catalogIds = new ArrayList<>();
28339 tejbeer 1012
 
32018 tejbeer 1013
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1014
            pendingOrderItem.setItemName(item.getItemDescription());
1015
            catalogIds.add(item.getCatalogItemId());
28339 tejbeer 1016
 
32018 tejbeer 1017
            Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1018
            JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1019
            pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1020
            pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1021
            CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
28355 tejbeer 1022
 
32018 tejbeer 1023
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
28339 tejbeer 1024
 
32018 tejbeer 1025
            Map<String, Object> emailModel = new HashMap<>();
1026
            emailModel.put("customer", customerAddress);
1027
            emailModel.put("pendingOrder", pendingOrder);
1028
            emailModel.put("date", dateTimeFormatter);
27048 tejbeer 1029
 
32018 tejbeer 1030
            String[] customerEmail = null;
1031
            if (customer.getEmailId() != null) {
1032
                customerEmail = new String[]{customer.getEmailId()};
27048 tejbeer 1033
 
32018 tejbeer 1034
                List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
29515 tejbeer 1035
 
32018 tejbeer 1036
                emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel, customerEmail, null, bccTo.toArray(new String[0]));
29515 tejbeer 1037
 
32018 tejbeer 1038
            }
1039
        }
29515 tejbeer 1040
 
32018 tejbeer 1041
        return responseSender.ok(true);
29515 tejbeer 1042
 
32018 tejbeer 1043
    }
31444 tejbeer 1044
 
32018 tejbeer 1045
    @RequestMapping(value = "/store/checkEligibilityStoreOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1046
    public ResponseEntity<?> checkEligibilityStoreOffers(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
29515 tejbeer 1047
 
32018 tejbeer 1048
        boolean eligibility = false;
29515 tejbeer 1049
 
1050
 
32586 ranu 1051
        List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id,
1052
                ProfitMandiConstants.SCRATCH_OFFER_START_DATE, ProfitMandiConstants.SCRATCH_OFFER_END_DATE);
29515 tejbeer 1053
 
32018 tejbeer 1054
        if (!scratchOffers.isEmpty()) {
1055
            eligibility = true;
31457 tejbeer 1056
 
32018 tejbeer 1057
        }
1058
        return responseSender.ok(eligibility);
1059
    }
29515 tejbeer 1060
 
32018 tejbeer 1061
    @RequestMapping(value = "/store/ScratchOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1062
    public ResponseEntity<?> scratchOffers(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
29515 tejbeer 1063
 
32586 ranu 1064
        List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id,
1065
                ProfitMandiConstants.SCRATCH_OFFER_START_DATE, ProfitMandiConstants.SCRATCH_OFFER_END_DATE);
29515 tejbeer 1066
 
32218 tejbeer 1067
        logger.info("scratchOffers {}", scratchOffers);
32018 tejbeer 1068
        // List<ScratchOffer> scratchOffers =
1069
        // scratchOfferRepository.selectBycCustomerId(id);
1070
        for (ScratchOffer so : scratchOffers) {
1071
            if (LocalDateTime.now().isAfter(so.getUnlockedAt())) {
1072
                so.setUnlocked(true);
1073
            } else {
1074
                so.setUnlocked(false);
1075
            }
32765 ranu 1076
            LocalDateTime expiredTimestamp = ProfitMandiConstants.SCRATCH_OFFER_END_DATE.plusDays(3).atTime(LocalTime.MAX);
32671 ranu 1077
            so.setExpiredTimestamp(expiredTimestamp);
1078
            if(LocalDateTime.now().isAfter(expiredTimestamp)) {
1079
                so.setExpired(true);
1080
            }
32018 tejbeer 1081
        }
29515 tejbeer 1082
 
32018 tejbeer 1083
        return responseSender.ok(scratchOffers);
1084
    }
1085
 
1086
    @RequestMapping(value = "/store/ScratchedOffer", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1087
    public ResponseEntity<?> scratchedOffer(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
1088
 
1089
        ScratchOffer scratchOffer = scratchOfferRepository.selectById(id);
1090
        scratchOffer.setScratched(true);
1091
        scratchOffer.setScracthedAt(LocalDateTime.now());
1092
 
1093
        return responseSender.ok(true);
1094
    }
1095
 
26607 amit.gupta 1096
}