Subversion Repositories SmartDukaan

Rev

Rev 32671 | Rev 32977 | 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());
767
            Float cashback = schemeService.getCatalogSchemeCashBack().get(itemsMap.get(cartItem.getItemId()).getCatalogItemId());
768
            cashback = cashback == null ? 0 : cashback;
769
            float itemSellingPrice = tagListing.getMop() - cashback;
770
            CartItemResponseModel cartItemResponseModel = new CartItemResponseModel();
771
            cartItemResponseModel.setSellingPrice(cartItem.getSellingPrice());
772
            if (itemSellingPrice != cartItem.getSellingPrice()) {
773
                cartItemResponseModel.setSellingPrice(itemSellingPrice);
774
                cartMessageChanged++;
775
            }
776
            int estimate = -2;
777
            LocalDateTime promiseDeliveryTime = LocalDateTime.now();
778
            int qtyRequired = (int) cartItem.getQuantity();
779
            AvailabilityModel availabilityModel = inventoryItemAvailabilityMap.get(cartItem.getItemId());
780
            cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
781
            if (availabilityModel.getStoreAvailability() >= qtyRequired) {
782
                estimate = 0;
783
            } else if (availabilityModel.getWarehouseAvailability() >= qtyRequired) {
784
                estimate = 2;
785
            } else if (availabilityModel.getStoreAvailability() > 0) {
786
                estimate = 0;
787
                qtyRequired = availabilityModel.getStoreAvailability();
788
                cartMessageChanged++;
789
            } else if (availabilityModel.getWarehouseAvailability() > 0) {
790
                qtyRequired = availabilityModel.getWarehouseAvailability();
791
                estimate = 2;
792
                cartMessageChanged++;
793
            } else {
794
                qtyRequired = 0;
795
                cartMessageChanged++;
796
            }
797
            cartItemResponseModel.setQuantity(qtyRequired);
798
            if (estimate >= 0 && LocalTime.now().isAfter(CUTOFF_TIME)) {
799
                estimate = estimate + 1;
800
                promiseDeliveryTime = promiseDeliveryTime.plusDays(3);
801
            }
802
            totalQty += qtyRequired;
803
            totalAmount += qtyRequired * itemSellingPrice;
804
            cartItemResponseModel.setEstimate(estimate);
805
            cartItemResponseModel.setTitle(item.getItemDescriptionNoColor());
806
            cartItemResponseModel.setItemId(cartItem.getItemId());
807
            cartItemResponseModel.setMinBuyQuantity(1);
808
            cartItemResponseModel.setQuantity(qtyRequired);
809
            cartItemResponseModel.setQuantityStep(1);
810
            cartItemResponseModel.setPromiseDelivery(promiseDeliveryTime);
811
            cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
812
            cartItemResponseModel.setCatalogItemId(item.getCatalogItemId());
813
            cartItemResponseModel.setImageUrl(contentMap.get(item.getCatalogItemId()).getString("imageUrl_s"));
814
            cartItemResponseModel.setColor(item.getColor());
815
            cartItemResponseModels.add(cartItemResponseModel);
816
        }
817
        cartResponse.setCartItems(cartItemResponseModels);
818
        cartResponse.setCartMessageChanged(cartMessageChanged);
819
        cartResponse.setCartMessageOOS(cartMessageOOS);
820
        int maxEstimate = cartItemResponseModels.stream().mapToInt(x -> x.getEstimate()).max().getAsInt();
821
        cartResponse.setMaxEstimate(maxEstimate);
822
        cartResponse.setTotalAmount(totalAmount);
823
        cartResponse.setTotalQty(totalQty);
26607 amit.gupta 824
 
32018 tejbeer 825
        return cartResponse;
26923 amit.gupta 826
 
32018 tejbeer 827
    }
27069 tejbeer 828
 
32018 tejbeer 829
    @RequestMapping(value = "/store/partnerStock", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
830
    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 {
831
        List<FofoCatalogResponse> dealResponse = new ArrayList<>();
832
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
833
        FofoStore fs = fofoStoreRepository.selectByRetailerId(userInfo.getRetailerId());
834
        sort = "w" + fs.getWarehouseId() + "_i desc";
835
        dealResponse = this.getCatalogResponse(
836
                commonSolrService.getSolrDocs(queryTerm, categoryId, offset, limit, sort, brand, subCategoryId, false), false, userInfo.getRetailerId());
837
        return responseSender.ok(dealResponse);
838
    }
26923 amit.gupta 839
 
32018 tejbeer 840
    private List<FofoCatalogResponse> getCatalogResponse(JSONArray docs, boolean hotDeal, int fofoId) throws ProfitMandiBusinessException {
841
        Map<Integer, Integer> ourItemAvailabilityMap = null;
842
        Map<Integer, Integer> partnerStockAvailabilityMap = null;
843
        List<FofoCatalogResponse> dealResponse = new ArrayList<>();
844
        List<Integer> tagIds = Arrays.asList(4);
845
        if (docs.length() > 0) {
846
            HashSet<Integer> itemsSet = new HashSet<>();
847
            for (int i = 0; i < docs.length(); i++) {
848
                JSONObject doc = docs.getJSONObject(i);
849
                if (doc.has("_childDocuments_")) {
850
                    for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
851
                        JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
852
                        int itemId = childItem.getInt("itemId_i");
853
                        itemsSet.add(itemId);
854
                    }
855
                }
856
            }
857
            if (itemsSet.size() == 0) {
858
                return dealResponse;
859
            }
860
            if (fofoId > 0) {
861
                partnerStockAvailabilityMap = currentInventorySnapshotRepository.selectItemsStock(fofoId).stream().collect(Collectors.toMap(x -> x.getItemId(), x -> x.getAvailability()));
862
            }
863
            ourItemAvailabilityMap = saholicInventoryService.getTotalAvailabilityByItemIds(new ArrayList<>(itemsSet));
864
        }
26833 amit.gupta 865
 
32018 tejbeer 866
        for (int i = 0; i < docs.length(); i++) {
867
            Map<Integer, FofoAvailabilityInfo> fofoAvailabilityInfoMap = new HashMap<>();
868
            JSONObject doc = docs.getJSONObject(i);
869
            FofoCatalogResponse ffdr = new FofoCatalogResponse();
870
            ffdr.setCatalogId(doc.getInt("catalogId_i"));
871
            ffdr.setImageUrl(doc.getString("imageUrl_s"));
872
            ffdr.setTitle(doc.getString("title_s"));
873
            List<WebOffer> webOffers = webOfferRepository.selectAllActiveOffers().get(ffdr.getCatalogId());
874
            if (webOffers != null && webOffers.size() > 0) {
875
                ffdr.setOffers(webOffers.stream().map(x -> x.getTitle()).collect(Collectors.toList()));
876
            }
877
            try {
878
                ffdr.setFeature(doc.getString("feature_s"));
879
            } catch (Exception e) {
880
                ffdr.setFeature(null);
881
            }
882
            ffdr.setBrand(doc.getJSONArray("brand_ss").getString(0));
883
            if (doc.has("_childDocuments_")) {
884
                for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
885
                    JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
886
                    int itemId = childItem.getInt("itemId_i");
887
                    float sellingPrice = (float) childItem.getDouble("sellingPrice_f");
888
                    if (fofoAvailabilityInfoMap.containsKey(itemId)) {
889
                        if (fofoAvailabilityInfoMap.get(itemId).getSellingPrice() > sellingPrice) {
890
                            fofoAvailabilityInfoMap.get(itemId).setSellingPrice(sellingPrice);
891
                            fofoAvailabilityInfoMap.get(itemId).setMop((float) childItem.getDouble("mop_f"));
892
                        }
893
                    } else {
894
                        FofoAvailabilityInfo fdi = new FofoAvailabilityInfo();
895
                        fdi.setSellingPrice(sellingPrice);
896
                        fdi.setMrp(childItem.getDouble("mrp_f"));
897
                        fdi.setMop((float) childItem.getDouble("mop_f"));
898
                        fdi.setColor(childItem.has("color_s") ? childItem.getString("color_s") : "");
899
                        fdi.setTagId(childItem.getInt("tagId_i"));
900
                        fdi.setItem_id(itemId);
901
                        Float cashBack = schemeService.getCatalogSchemeCashBack().get(ffdr.getCatalogId());
902
                        cashBack = cashBack == null ? 0 : cashBack;
903
                        // TODO:Dont commit
904
                        // fdi.setCashback(Math.min(100, fdi.getMop()));
905
                        fdi.setCashback(cashBack);
906
                        fdi.setMinBuyQuantity(1);
907
                        int partnerAvailability = partnerStockAvailabilityMap.get(itemId) == null ? 0 : partnerStockAvailabilityMap.get(itemId);
908
                        int ourStockAvailability = ourItemAvailabilityMap.get(itemId) == null ? 0 : Math.max(0, ourItemAvailabilityMap.get(itemId));
909
                        fdi.setActive(partnerAvailability > 0);
910
                        // fdi.setActive(true);
911
                        fdi.setAvailability(Math.min(5, ourStockAvailability + partnerAvailability));
912
                        fdi.setQuantityStep(1);
913
                        fdi.setMaxQuantity(fdi.getAvailability());
914
                        fofoAvailabilityInfoMap.put(itemId, fdi);
915
                    }
916
                }
917
            }
918
            if (fofoAvailabilityInfoMap.values().size() > 0) {
919
                ffdr.setItems(fofoAvailabilityInfoMap.values().stream().sorted(Comparator.comparing(FofoAvailabilityInfo::isActive, Comparator.reverseOrder()).thenComparingInt(y -> -y.getAvailability())).collect(Collectors.toList()));
920
                dealResponse.add(ffdr);
921
            }
922
        }
923
        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());
924
    }
26857 amit.gupta 925
 
32018 tejbeer 926
    @GetMapping(value = "store/order-status/{pendingOrderId}")
927
    public ResponseEntity<?> orderStatus(HttpServletRequest request, @PathVariable int pendingOrderId) throws Exception {
928
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderId);
929
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
930
        List<Integer> catalogIds = new ArrayList<>();
931
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
932
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
933
            pendingOrderItem.setItemName(item.getItemDescription());
934
            catalogIds.add(item.getCatalogItemId());
935
        }
936
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
937
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
938
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
939
            JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
940
            pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
941
        }
942
        pendingOrder.setPendingOrderItems(pendingOrderItems);
27045 tejbeer 943
 
32018 tejbeer 944
        return responseSender.ok(pendingOrder);
945
    }
28345 tejbeer 946
 
32018 tejbeer 947
    @RequestMapping(value = "/store/addresses/{customerId}", method = RequestMethod.GET)
948
    public ResponseEntity<?> getAll(HttpServletRequest request, @PathVariable int customerId) throws Throwable {
949
        return responseSender.ok(customerAddressRepository.selectByActiveCustomerId(customerId));
950
    }
26861 tejbeer 951
 
32018 tejbeer 952
    @RequestMapping(value = "/store/address", method = RequestMethod.POST)
953
    public ResponseEntity<?> addAddress(HttpServletRequest request, @RequestBody CustomerAddress customerAddress) throws Throwable {
954
        customerAddressRepository.persist(customerAddress);
955
        return responseSender.ok(customerAddress);
956
    }
27045 tejbeer 957
 
32018 tejbeer 958
    @RequestMapping(value = "/store/deactivateCustomerAddress", method = RequestMethod.POST)
959
    public ResponseEntity<?> deactivateAddresss(HttpServletRequest request, @RequestParam int id) throws Throwable {
960
        CustomerAddress cust = customerAddressRepository.selectById(id);
961
        cust.setActive(false);
962
        return responseSender.ok(cust);
963
    }
27048 tejbeer 964
 
32018 tejbeer 965
    @RequestMapping(value = "/store/updateCustomer", method = RequestMethod.POST)
966
    public ResponseEntity<?> updateCustomerProfile(HttpServletRequest request, @RequestBody Customer customer) throws Throwable {
967
        Customer cust = customerRepository.selectById(customer.getId());
968
        cust.setGender(customer.getGender());
969
        cust.setProfileImageId(customer.getProfileImageId());
970
        cust.setDob(customer.getDob());
971
        return responseSender.ok(cust);
972
    }
27048 tejbeer 973
 
32018 tejbeer 974
    @RequestMapping(value = "/stores/{state}/{city}/{storeCode}", method = RequestMethod.GET)
975
    public void getStoreIndex(HttpServletResponse response, HttpServletRequest request, @PathVariable String state, @PathVariable String city, @PathVariable String storeCode) throws Throwable {
976
        logger.info("Store code {}", storeCode);
977
        Map<String, Integer> map = retailerService.getStoreCodeRetailerMap();
978
        logger.info("retailer id {}", map.get(storeCode));
979
        String retailerName = retailerService.getAllFofoRetailers().get(map.get(storeCode)).getBusinessName();
980
        String html = partnerIndexService.getPartnerIndexHtml();
981
        logger.info("html {}", html);
982
        html = html.replace("Buy Mobiles and Accessories at exciting prices - SmartDukaan", String.format("%s is now ONLINE. Buy Mobiles, Accessories & more | SmartDukaan", retailerName));
983
        response.getWriter().write(html);
984
    }
27048 tejbeer 985
 
32018 tejbeer 986
    @RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
987
    public ResponseEntity<?> cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id,
28339 tejbeer 988
 
32018 tejbeer 989
                                                    @RequestParam String statusDescription, @RequestParam String reason) throws Exception {
28339 tejbeer 990
 
32018 tejbeer 991
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
992
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
993
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
994
        if (pendingOrderItem.getBilledTimestamp() == null) {
995
            pendingOrderItem.setStatus(OrderStatus.CANCELLED);
996
            pendingOrderItem.setRemark(reason);
997
            pendingOrderItem.setStatusDescription("cancel by self");
998
            pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
999
            List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream().map(x -> x.getStatus()).collect(Collectors.toList());
28339 tejbeer 1000
 
32018 tejbeer 1001
            if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING) && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED) && !status.contains(OrderStatus.CLAIMED)) {
1002
                pendingOrder.setStatus(OrderStatus.CLOSED);
1003
            }
28339 tejbeer 1004
 
32018 tejbeer 1005
            pendingOrderItemRepository.persist(pendingOrderItem);
1006
            String itemDescription = itemRepository.selectById(pendingOrderItem.getItemId()).getItemDescription();
1007
            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 1008
 
32018 tejbeer 1009
            List<Integer> catalogIds = new ArrayList<>();
28339 tejbeer 1010
 
32018 tejbeer 1011
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1012
            pendingOrderItem.setItemName(item.getItemDescription());
1013
            catalogIds.add(item.getCatalogItemId());
28339 tejbeer 1014
 
32018 tejbeer 1015
            Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1016
            JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1017
            pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1018
            pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1019
            CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
28355 tejbeer 1020
 
32018 tejbeer 1021
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
28339 tejbeer 1022
 
32018 tejbeer 1023
            Map<String, Object> emailModel = new HashMap<>();
1024
            emailModel.put("customer", customerAddress);
1025
            emailModel.put("pendingOrder", pendingOrder);
1026
            emailModel.put("date", dateTimeFormatter);
27048 tejbeer 1027
 
32018 tejbeer 1028
            String[] customerEmail = null;
1029
            if (customer.getEmailId() != null) {
1030
                customerEmail = new String[]{customer.getEmailId()};
27048 tejbeer 1031
 
32018 tejbeer 1032
                List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
29515 tejbeer 1033
 
32018 tejbeer 1034
                emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel, customerEmail, null, bccTo.toArray(new String[0]));
29515 tejbeer 1035
 
32018 tejbeer 1036
            }
1037
        }
29515 tejbeer 1038
 
32018 tejbeer 1039
        return responseSender.ok(true);
29515 tejbeer 1040
 
32018 tejbeer 1041
    }
31444 tejbeer 1042
 
32018 tejbeer 1043
    @RequestMapping(value = "/store/checkEligibilityStoreOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1044
    public ResponseEntity<?> checkEligibilityStoreOffers(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
29515 tejbeer 1045
 
32018 tejbeer 1046
        boolean eligibility = false;
29515 tejbeer 1047
 
1048
 
32586 ranu 1049
        List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id,
1050
                ProfitMandiConstants.SCRATCH_OFFER_START_DATE, ProfitMandiConstants.SCRATCH_OFFER_END_DATE);
29515 tejbeer 1051
 
32018 tejbeer 1052
        if (!scratchOffers.isEmpty()) {
1053
            eligibility = true;
31457 tejbeer 1054
 
32018 tejbeer 1055
        }
1056
        return responseSender.ok(eligibility);
1057
    }
29515 tejbeer 1058
 
32018 tejbeer 1059
    @RequestMapping(value = "/store/ScratchOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1060
    public ResponseEntity<?> scratchOffers(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
29515 tejbeer 1061
 
32586 ranu 1062
        List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id,
1063
                ProfitMandiConstants.SCRATCH_OFFER_START_DATE, ProfitMandiConstants.SCRATCH_OFFER_END_DATE);
29515 tejbeer 1064
 
32218 tejbeer 1065
        logger.info("scratchOffers {}", scratchOffers);
32018 tejbeer 1066
        // List<ScratchOffer> scratchOffers =
1067
        // scratchOfferRepository.selectBycCustomerId(id);
1068
        for (ScratchOffer so : scratchOffers) {
1069
            if (LocalDateTime.now().isAfter(so.getUnlockedAt())) {
1070
                so.setUnlocked(true);
1071
            } else {
1072
                so.setUnlocked(false);
1073
            }
32765 ranu 1074
            LocalDateTime expiredTimestamp = ProfitMandiConstants.SCRATCH_OFFER_END_DATE.plusDays(3).atTime(LocalTime.MAX);
32671 ranu 1075
            so.setExpiredTimestamp(expiredTimestamp);
1076
            if(LocalDateTime.now().isAfter(expiredTimestamp)) {
1077
                so.setExpired(true);
1078
            }
32018 tejbeer 1079
        }
29515 tejbeer 1080
 
32018 tejbeer 1081
        return responseSender.ok(scratchOffers);
1082
    }
1083
 
1084
    @RequestMapping(value = "/store/ScratchedOffer", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1085
    public ResponseEntity<?> scratchedOffer(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
1086
 
1087
        ScratchOffer scratchOffer = scratchOfferRepository.selectById(id);
1088
        scratchOffer.setScratched(true);
1089
        scratchOffer.setScracthedAt(LocalDateTime.now());
1090
 
1091
        return responseSender.ok(true);
1092
    }
1093
 
26607 amit.gupta 1094
}