Subversion Repositories SmartDukaan

Rev

Rev 33514 | Rev 33599 | 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
 
33573 amit.gupta 349
    @RequestMapping(value = "/store/checkplans", method = RequestMethod.GET)
33436 ranu 350
    public ResponseEntity<?> getInsurancePrices(HttpServletRequest request, @RequestParam float price, Model model,
33573 amit.gupta 351
                                                @RequestParam int itemId) throws ProfitMandiBusinessException {
33399 ranu 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 {
33573 amit.gupta 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
        });
33573 amit.gupta 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
 
33573 amit.gupta 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;
33573 amit.gupta 864
            if (cartItem.getPendingOrderItemPolicyPlan() != null) {
865
                totalAmount += qtyRequired * itemSellingPrice + qtyRequired * cartItem.getPendingOrderItemPolicyPlan().getPrice();
866
            } else {
33436 ranu 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)
33573 amit.gupta 896
    public ResponseEntity<?> partnerStock(HttpServletRequest request, @RequestParam(required = false, defaultValue = "3") String categoryId, @RequestParam int offset,
897
                                          @RequestParam int limit, @RequestParam(required = false) String sort, @RequestParam(required = false) String brand,
898
                                          @RequestParam(value = "subCategoryId", required = false) int subCategoryId, @RequestParam(required = false) String queryTerm,
899
                                          @RequestParam(required = false) String listing, @RequestParam(required = false, defaultValue = "true") boolean partnerStockOnly) throws Throwable {
32018 tejbeer 900
        List<FofoCatalogResponse> dealResponse = new ArrayList<>();
901
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
902
        FofoStore fs = fofoStoreRepository.selectByRetailerId(userInfo.getRetailerId());
903
        sort = "w" + fs.getWarehouseId() + "_i desc";
904
        dealResponse = this.getCatalogResponse(
905
                commonSolrService.getSolrDocs(queryTerm, categoryId, offset, limit, sort, brand, subCategoryId, false), false, userInfo.getRetailerId());
906
        return responseSender.ok(dealResponse);
907
    }
26923 amit.gupta 908
 
32018 tejbeer 909
    private List<FofoCatalogResponse> getCatalogResponse(JSONArray docs, boolean hotDeal, int fofoId) throws ProfitMandiBusinessException {
910
        Map<Integer, Integer> ourItemAvailabilityMap = null;
911
        Map<Integer, Integer> partnerStockAvailabilityMap = null;
912
        List<FofoCatalogResponse> dealResponse = new ArrayList<>();
913
        List<Integer> tagIds = Arrays.asList(4);
914
        if (docs.length() > 0) {
915
            HashSet<Integer> itemsSet = new HashSet<>();
916
            for (int i = 0; i < docs.length(); i++) {
917
                JSONObject doc = docs.getJSONObject(i);
918
                if (doc.has("_childDocuments_")) {
919
                    for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
920
                        JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
921
                        int itemId = childItem.getInt("itemId_i");
922
                        itemsSet.add(itemId);
923
                    }
924
                }
925
            }
926
            if (itemsSet.size() == 0) {
927
                return dealResponse;
928
            }
929
            if (fofoId > 0) {
930
                partnerStockAvailabilityMap = currentInventorySnapshotRepository.selectItemsStock(fofoId).stream().collect(Collectors.toMap(x -> x.getItemId(), x -> x.getAvailability()));
931
            }
932
            ourItemAvailabilityMap = saholicInventoryService.getTotalAvailabilityByItemIds(new ArrayList<>(itemsSet));
933
        }
26833 amit.gupta 934
 
32018 tejbeer 935
        for (int i = 0; i < docs.length(); i++) {
936
            Map<Integer, FofoAvailabilityInfo> fofoAvailabilityInfoMap = new HashMap<>();
937
            JSONObject doc = docs.getJSONObject(i);
938
            FofoCatalogResponse ffdr = new FofoCatalogResponse();
939
            ffdr.setCatalogId(doc.getInt("catalogId_i"));
940
            ffdr.setImageUrl(doc.getString("imageUrl_s"));
941
            ffdr.setTitle(doc.getString("title_s"));
942
            List<WebOffer> webOffers = webOfferRepository.selectAllActiveOffers().get(ffdr.getCatalogId());
943
            if (webOffers != null && webOffers.size() > 0) {
944
                ffdr.setOffers(webOffers.stream().map(x -> x.getTitle()).collect(Collectors.toList()));
945
            }
946
            try {
947
                ffdr.setFeature(doc.getString("feature_s"));
948
            } catch (Exception e) {
949
                ffdr.setFeature(null);
950
            }
951
            ffdr.setBrand(doc.getJSONArray("brand_ss").getString(0));
33314 ranu 952
 
32018 tejbeer 953
            if (doc.has("_childDocuments_")) {
954
                for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
955
                    JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
956
                    int itemId = childItem.getInt("itemId_i");
33314 ranu 957
                    ffdr.setIsSmartPhone(itemRepository.selectById(itemId).isSmartPhone());
32018 tejbeer 958
                    float sellingPrice = (float) childItem.getDouble("sellingPrice_f");
959
                    if (fofoAvailabilityInfoMap.containsKey(itemId)) {
960
                        if (fofoAvailabilityInfoMap.get(itemId).getSellingPrice() > sellingPrice) {
961
                            fofoAvailabilityInfoMap.get(itemId).setSellingPrice(sellingPrice);
962
                            fofoAvailabilityInfoMap.get(itemId).setMop((float) childItem.getDouble("mop_f"));
963
                        }
964
                    } else {
965
                        FofoAvailabilityInfo fdi = new FofoAvailabilityInfo();
966
                        fdi.setSellingPrice(sellingPrice);
967
                        fdi.setMrp(childItem.getDouble("mrp_f"));
968
                        fdi.setMop((float) childItem.getDouble("mop_f"));
969
                        fdi.setColor(childItem.has("color_s") ? childItem.getString("color_s") : "");
970
                        fdi.setTagId(childItem.getInt("tagId_i"));
971
                        fdi.setItem_id(itemId);
32977 amit.gupta 972
                        Float cashBack = schemeService.getCatalogSchemeCashBack(fofoId, Arrays.asList(ffdr.getCatalogId())).get(ffdr.getCatalogId());
32018 tejbeer 973
                        cashBack = cashBack == null ? 0 : cashBack;
974
                        // TODO:Dont commit
975
                        // fdi.setCashback(Math.min(100, fdi.getMop()));
976
                        fdi.setCashback(cashBack);
977
                        fdi.setMinBuyQuantity(1);
978
                        int partnerAvailability = partnerStockAvailabilityMap.get(itemId) == null ? 0 : partnerStockAvailabilityMap.get(itemId);
979
                        int ourStockAvailability = ourItemAvailabilityMap.get(itemId) == null ? 0 : Math.max(0, ourItemAvailabilityMap.get(itemId));
980
                        fdi.setActive(partnerAvailability > 0);
981
                        // fdi.setActive(true);
982
                        fdi.setAvailability(Math.min(5, ourStockAvailability + partnerAvailability));
983
                        fdi.setQuantityStep(1);
984
                        fdi.setMaxQuantity(fdi.getAvailability());
985
                        fofoAvailabilityInfoMap.put(itemId, fdi);
986
                    }
987
                }
988
            }
989
            if (fofoAvailabilityInfoMap.values().size() > 0) {
990
                ffdr.setItems(fofoAvailabilityInfoMap.values().stream().sorted(Comparator.comparing(FofoAvailabilityInfo::isActive, Comparator.reverseOrder()).thenComparingInt(y -> -y.getAvailability())).collect(Collectors.toList()));
991
                dealResponse.add(ffdr);
992
            }
993
        }
994
        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());
995
    }
26857 amit.gupta 996
 
32018 tejbeer 997
    @GetMapping(value = "store/order-status/{pendingOrderId}")
998
    public ResponseEntity<?> orderStatus(HttpServletRequest request, @PathVariable int pendingOrderId) throws Exception {
999
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderId);
1000
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
1001
        List<Integer> catalogIds = new ArrayList<>();
1002
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
1003
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1004
            pendingOrderItem.setItemName(item.getItemDescription());
1005
            catalogIds.add(item.getCatalogItemId());
1006
        }
1007
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1008
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
1009
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1010
            JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1011
            pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1012
        }
1013
        pendingOrder.setPendingOrderItems(pendingOrderItems);
27045 tejbeer 1014
 
32018 tejbeer 1015
        return responseSender.ok(pendingOrder);
1016
    }
28345 tejbeer 1017
 
32018 tejbeer 1018
    @RequestMapping(value = "/store/addresses/{customerId}", method = RequestMethod.GET)
1019
    public ResponseEntity<?> getAll(HttpServletRequest request, @PathVariable int customerId) throws Throwable {
1020
        return responseSender.ok(customerAddressRepository.selectByActiveCustomerId(customerId));
1021
    }
26861 tejbeer 1022
 
32018 tejbeer 1023
    @RequestMapping(value = "/store/address", method = RequestMethod.POST)
1024
    public ResponseEntity<?> addAddress(HttpServletRequest request, @RequestBody CustomerAddress customerAddress) throws Throwable {
1025
        customerAddressRepository.persist(customerAddress);
1026
        return responseSender.ok(customerAddress);
1027
    }
27045 tejbeer 1028
 
32018 tejbeer 1029
    @RequestMapping(value = "/store/deactivateCustomerAddress", method = RequestMethod.POST)
1030
    public ResponseEntity<?> deactivateAddresss(HttpServletRequest request, @RequestParam int id) throws Throwable {
1031
        CustomerAddress cust = customerAddressRepository.selectById(id);
1032
        cust.setActive(false);
1033
        return responseSender.ok(cust);
1034
    }
27048 tejbeer 1035
 
32018 tejbeer 1036
    @RequestMapping(value = "/store/updateCustomer", method = RequestMethod.POST)
1037
    public ResponseEntity<?> updateCustomerProfile(HttpServletRequest request, @RequestBody Customer customer) throws Throwable {
1038
        Customer cust = customerRepository.selectById(customer.getId());
1039
        cust.setGender(customer.getGender());
1040
        cust.setProfileImageId(customer.getProfileImageId());
1041
        cust.setDob(customer.getDob());
1042
        return responseSender.ok(cust);
1043
    }
27048 tejbeer 1044
 
32018 tejbeer 1045
    @RequestMapping(value = "/stores/{state}/{city}/{storeCode}", method = RequestMethod.GET)
1046
    public void getStoreIndex(HttpServletResponse response, HttpServletRequest request, @PathVariable String state, @PathVariable String city, @PathVariable String storeCode) throws Throwable {
1047
        logger.info("Store code {}", storeCode);
1048
        Map<String, Integer> map = retailerService.getStoreCodeRetailerMap();
1049
        logger.info("retailer id {}", map.get(storeCode));
1050
        String retailerName = retailerService.getAllFofoRetailers().get(map.get(storeCode)).getBusinessName();
1051
        String html = partnerIndexService.getPartnerIndexHtml();
1052
        logger.info("html {}", html);
1053
        html = html.replace("Buy Mobiles and Accessories at exciting prices - SmartDukaan", String.format("%s is now ONLINE. Buy Mobiles, Accessories & more | SmartDukaan", retailerName));
1054
        response.getWriter().write(html);
1055
    }
27048 tejbeer 1056
 
32018 tejbeer 1057
    @RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
1058
    public ResponseEntity<?> cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id,
28339 tejbeer 1059
 
32018 tejbeer 1060
                                                    @RequestParam String statusDescription, @RequestParam String reason) throws Exception {
28339 tejbeer 1061
 
32018 tejbeer 1062
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1063
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1064
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1065
        if (pendingOrderItem.getBilledTimestamp() == null) {
1066
            pendingOrderItem.setStatus(OrderStatus.CANCELLED);
1067
            pendingOrderItem.setRemark(reason);
1068
            pendingOrderItem.setStatusDescription("cancel by self");
1069
            pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
1070
            List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream().map(x -> x.getStatus()).collect(Collectors.toList());
28339 tejbeer 1071
 
32018 tejbeer 1072
            if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING) && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED) && !status.contains(OrderStatus.CLAIMED)) {
1073
                pendingOrder.setStatus(OrderStatus.CLOSED);
1074
            }
28339 tejbeer 1075
 
32018 tejbeer 1076
            pendingOrderItemRepository.persist(pendingOrderItem);
1077
            String itemDescription = itemRepository.selectById(pendingOrderItem.getItemId()).getItemDescription();
1078
            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 1079
 
32018 tejbeer 1080
            List<Integer> catalogIds = new ArrayList<>();
28339 tejbeer 1081
 
32018 tejbeer 1082
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1083
            pendingOrderItem.setItemName(item.getItemDescription());
1084
            catalogIds.add(item.getCatalogItemId());
28339 tejbeer 1085
 
32018 tejbeer 1086
            Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1087
            JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1088
            pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1089
            pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1090
            CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
28355 tejbeer 1091
 
32018 tejbeer 1092
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
28339 tejbeer 1093
 
32018 tejbeer 1094
            Map<String, Object> emailModel = new HashMap<>();
1095
            emailModel.put("customer", customerAddress);
1096
            emailModel.put("pendingOrder", pendingOrder);
1097
            emailModel.put("date", dateTimeFormatter);
27048 tejbeer 1098
 
32018 tejbeer 1099
            String[] customerEmail = null;
1100
            if (customer.getEmailId() != null) {
1101
                customerEmail = new String[]{customer.getEmailId()};
27048 tejbeer 1102
 
32018 tejbeer 1103
                List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
29515 tejbeer 1104
 
32018 tejbeer 1105
                emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel, customerEmail, null, bccTo.toArray(new String[0]));
29515 tejbeer 1106
 
32018 tejbeer 1107
            }
1108
        }
29515 tejbeer 1109
 
32018 tejbeer 1110
        return responseSender.ok(true);
29515 tejbeer 1111
 
32018 tejbeer 1112
    }
31444 tejbeer 1113
 
32018 tejbeer 1114
    @RequestMapping(value = "/store/checkEligibilityStoreOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1115
    public ResponseEntity<?> checkEligibilityStoreOffers(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
29515 tejbeer 1116
 
32018 tejbeer 1117
        boolean eligibility = false;
29515 tejbeer 1118
 
1119
 
32586 ranu 1120
        List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id,
1121
                ProfitMandiConstants.SCRATCH_OFFER_START_DATE, ProfitMandiConstants.SCRATCH_OFFER_END_DATE);
29515 tejbeer 1122
 
32018 tejbeer 1123
        if (!scratchOffers.isEmpty()) {
1124
            eligibility = true;
31457 tejbeer 1125
 
32018 tejbeer 1126
        }
1127
        return responseSender.ok(eligibility);
1128
    }
29515 tejbeer 1129
 
32018 tejbeer 1130
    @RequestMapping(value = "/store/ScratchOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1131
    public ResponseEntity<?> scratchOffers(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
29515 tejbeer 1132
 
32586 ranu 1133
        List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id,
1134
                ProfitMandiConstants.SCRATCH_OFFER_START_DATE, ProfitMandiConstants.SCRATCH_OFFER_END_DATE);
29515 tejbeer 1135
 
32218 tejbeer 1136
        logger.info("scratchOffers {}", scratchOffers);
32018 tejbeer 1137
        // List<ScratchOffer> scratchOffers =
1138
        // scratchOfferRepository.selectBycCustomerId(id);
1139
        for (ScratchOffer so : scratchOffers) {
1140
            if (LocalDateTime.now().isAfter(so.getUnlockedAt())) {
1141
                so.setUnlocked(true);
1142
            } else {
1143
                so.setUnlocked(false);
1144
            }
33151 ranu 1145
            LocalDateTime expiredTimestamp = ProfitMandiConstants.SCRATCH_OFFER_END_DATE.plusDays(1).atTime(LocalTime.MAX);
32671 ranu 1146
            so.setExpiredTimestamp(expiredTimestamp);
33573 amit.gupta 1147
            if (LocalDateTime.now().isAfter(expiredTimestamp)) {
32671 ranu 1148
                so.setExpired(true);
1149
            }
32018 tejbeer 1150
        }
29515 tejbeer 1151
 
32018 tejbeer 1152
        return responseSender.ok(scratchOffers);
1153
    }
1154
 
1155
    @RequestMapping(value = "/store/ScratchedOffer", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1156
    public ResponseEntity<?> scratchedOffer(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
1157
 
1158
        ScratchOffer scratchOffer = scratchOfferRepository.selectById(id);
1159
        scratchOffer.setScratched(true);
1160
        scratchOffer.setScracthedAt(LocalDateTime.now());
1161
 
1162
        return responseSender.ok(true);
1163
    }
1164
 
26607 amit.gupta 1165
}