Subversion Repositories SmartDukaan

Rev

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