Subversion Repositories SmartDukaan

Rev

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