Subversion Repositories SmartDukaan

Rev

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