Subversion Repositories SmartDukaan

Rev

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