Subversion Repositories SmartDukaan

Rev

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