Subversion Repositories SmartDukaan

Rev

Rev 34196 | Rev 34242 | 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);
34239 vikas.jang 414
        logger.info("CartResponse cr {}", cr);
32018 tejbeer 415
        if (cr.getCartMessageChanged() > 0 || cr.getTotalAmount() != createPendingOrderRequest.getTotalAmount()) {
34186 vikas.jang 416
            return responseSender.badRequest(cr.getCartMessages());
32018 tejbeer 417
        }
28377 tejbeer 418
 
32018 tejbeer 419
        Map<String, String> returnMap = this.pendingOrderService.createPendingOrder(createPendingOrderRequest, cr);
28377 tejbeer 420
 
32018 tejbeer 421
        PendingOrder pendingOrder = pendingOrderRepository.selectById(Integer.parseInt(returnMap.get("poId")));
422
        if (offlineOrders.contains(pendingOrder.getPayMethod())) {
28391 tejbeer 423
 
32018 tejbeer 424
            Map<String, Object> emailModel = pendingOrderService.sendCreateOrderMail(pendingOrder);
28400 tejbeer 425
 
32018 tejbeer 426
            CustomRetailer customRetailer = retailerService.getFofoRetailer(pendingOrder.getFofoId());
427
            Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
428
            String[] customerEmail = null;
429
            if (Utils.validateEmail(customer.getEmailId())) {
430
                customerEmail = new String[]{customer.getEmailId()};
431
            }
31203 tejbeer 432
 
32616 amit.gupta 433
            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 434
 
32018 tejbeer 435
            List<String> authUserEmails = csService.getAuthUserByPartnerId(customRetailer.getPartnerId());
436
            if (authUserEmails != null) {
437
                authUserEmails = new ArrayList<>();
438
            }
439
            logger.info("authUserEmails {}", authUserEmails);
440
            authUserEmails.addAll(bccTo);
441
            StringBuffer itemBuffer = new StringBuffer();
442
            List<PendingOrderItem> orderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
443
            int totalItems = 0;
444
            String itemNoColor = null;
445
            float maxValue = 0;
446
            for (PendingOrderItem orderItem : orderItems) {
447
                if (maxValue < orderItem.getSellingPrice()) {
448
                    maxValue = orderItem.getSellingPrice();
449
                    itemNoColor = itemRepository.selectById(orderItem.getItemId()).getItemDescriptionNoColor();
450
                }
451
                totalItems += orderItem.getQuantity();
452
            }
453
            if (totalItems > 1) {
454
                itemBuffer.append(StringUtils.abbreviate(itemNoColor, 22));
455
                itemBuffer.append(" +").append(totalItems - 1).append(" items");
456
            } else {
457
                itemBuffer.append(StringUtils.abbreviate(itemNoColor, 30));
458
            }
459
            String message = String.format(OtpProcessor.TEMPLATE_ORDER_CREATED, pendingOrder.getId(), itemBuffer.toString(), pendingOrder.getTotalAmount());
460
            otpProcessor.sendSms(OtpProcessor.TEMPLATE_ORDER_CREATED_ID, message, customer.getMobileNumber());
28377 tejbeer 461
 
32018 tejbeer 462
            emailService.sendMailWithAttachments("Order Created with SmartDukaan", "order-confirm.vm", emailModel, customerEmail, null, bccTo.toArray(new String[0]));
28377 tejbeer 463
 
32018 tejbeer 464
            List<String> emailIds = csService.getAuthUserIdByPartnerId(customRetailer.getPartnerId()).stream().map(x -> x.getEmailId()).collect(Collectors.toList());
27028 tejbeer 465
 
32018 tejbeer 466
            emailIds.addAll(
467
                    csService.getAuthUserIds(ProfitMandiConstants.TICKET_CATEGORY_MARKETING, Arrays.asList(EscalationType.L1, EscalationType.L2, EscalationType.L3, EscalationType.L4)).stream().map(x -> x.getEmailId()).collect(Collectors.toList()));
468
            emailIds.add("tarun.verma@smartdukaan.com");
469
            emailIds.add("devkinandan.lal@smartdukaan.com");
34186 vikas.jang 470
            emailIds.add("vikas.jangra@smartdukaan.com");
32018 tejbeer 471
            List<User> user = dtrUserRepository.selectAllByEmailIds(emailIds);
472
            List<Integer> userIds = user.stream().map(x -> x.getId()).collect(Collectors.toList());
26630 amit.gupta 473
 
32018 tejbeer 474
            logger.info("userIds" + userIds);
475
            SendNotificationModel sendNotificationModel = new SendNotificationModel();
476
            sendNotificationModel.setCampaignName("Online Order Alert");
477
            sendNotificationModel.setTitle("Online Order Update");
478
            sendNotificationModel.setMessage(String.format(
479
                    "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."));
480
            sendNotificationModel.setType("url");
481
            sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
482
            sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
483
            sendNotificationModel.setMessageType(MessageType.notification);
484
            int userId = userAccountRepository.selectUserIdByRetailerId(pendingOrder.getFofoId());
485
            sendNotificationModel.setUserIds(Arrays.asList(userId));
486
            notificationService.sendNotification(sendNotificationModel);
26857 amit.gupta 487
 
32018 tejbeer 488
            SendNotificationModel snm = new SendNotificationModel();
489
            snm.setCampaignName("Online Order Alert");
490
            snm.setTitle("Online Order Update");
491
            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."));
492
            snm.setType("url");
493
            snm.setUrl("https://app.smartdukaan.com/pages/home/notifications");
494
            snm.setExpiresat(LocalDateTime.now().plusDays(1));
495
            snm.setMessageType(MessageType.notification);
496
            snm.setUserIds(userIds);
497
            notificationService.sendNotification(snm);
26857 amit.gupta 498
 
32018 tejbeer 499
        }
500
        return responseSender.ok(returnMap);
26857 amit.gupta 501
 
32018 tejbeer 502
    }
503
    @RequestMapping(value = "/store/address", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
504
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
505
    @ApiOperation(value = "Get brand list and count for category")
506
    public ResponseEntity<?> getAddress(HttpServletRequest request) throws Exception {
507
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
508
        Integer storeId = userInfo.getRetailerId();
509
        CustomRetailer customRetailer = retailerService.getFofoRetailer(storeId);
26923 amit.gupta 510
 
32018 tejbeer 511
        return responseSender.ok(customRetailer.getAddress());
28566 tejbeer 512
 
32018 tejbeer 513
    }
34190 aman.kumar 514
    @RequestMapping(value = "/store/address/defaultAddress/{addressId}/{customerId}", method = RequestMethod.POST)
515
    @ApiImplicitParams({
516
            @ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")
517
    })
518
    @ApiOperation(value = "Set default address for a store")
519
    public ResponseEntity<?> setDefaultAddress(HttpServletRequest request,@PathVariable int addressId, @PathVariable int customerId) throws Exception {
520
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
521
        CustomerAddress defaultAddress;
522
        try {
523
            defaultAddress = customerAddressRepository.selectById(addressId);
524
        } catch (ProfitMandiBusinessException e) {
525
            return responseSender.badRequest("Address not found.");
526
        }
527
        logger.info("CustomerID: {}", customerId);
528
        List<CustomerAddress> customerAddresses = customerAddressRepository.selectByActiveCustomerId(customerId);
529
        logger.info("customerAddresses: {}", customerAddresses);
530
        for (CustomerAddress addr : customerAddresses) {
531
            if (addr.getDefault()) {
532
                addr.setDefault(false);
533
            }
534
        }
535
        defaultAddress.setDefault(true);
536
        return responseSender.ok("Default address updated successfully.");
537
    }
28566 tejbeer 538
 
34190 aman.kumar 539
 
32018 tejbeer 540
    @RequestMapping(value = "/store/address/{pincode}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
541
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
542
    @ApiOperation(value = "Get brand list and count for category")
543
    public ResponseEntity<?> getStoresByPincode(HttpServletRequest request, @PathVariable String pincode) throws Exception {
544
        List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
545
        int fofoId = ProfitMandiConstants.DEFAULT_STORE;
546
        if (pincodePartners.size() > 0) {
547
            List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
548
            List<FofoStore> fofoStores = fofoStoreRepository.selectActivePartnersByRetailerIds(fofoIds);
549
            if (fofoStores.size() > 0) {
550
                fofoId = fofoStores.get(0).getId();
551
            }
28566 tejbeer 552
 
32018 tejbeer 553
        }
554
        return responseSender.ok(fofoStoreRepository.selectByRetailerId(fofoId).getCode());
555
    }
28566 tejbeer 556
 
32018 tejbeer 557
    @RequestMapping(value = "/store/addresses", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
558
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
559
    @ApiOperation(value = "Get brand list and count for category")
560
    public ResponseEntity<?> getStoresByPincod(HttpServletRequest request, @RequestParam String pincode, @RequestParam(name = "fofoCode", defaultValue = "", required = false) String fofoCode) throws Exception {
28566 tejbeer 561
 
32018 tejbeer 562
        List<CustomRetailer> customerRetailers = new ArrayList<>();
28566 tejbeer 563
 
32018 tejbeer 564
        logger.info("fofoCode" + fofoCode);
30426 tejbeer 565
 
32018 tejbeer 566
        if (fofoCode != null) {
567
            FofoStore fs = fofoStoreRepository.selectByStoreCode(fofoCode.toUpperCase());
568
            PincodePartner pp = pincodePartnerRepository.selectPartnerByPincode(pincode, fs.getId());
569
            if (pp != null) {
570
                return responseSender.ok(customerRetailers.add(retailerService.getFofoRetailer(pp.getFofoId())));
571
            } else {
30426 tejbeer 572
 
32018 tejbeer 573
                List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
574
                if (pincodePartners.size() > 0) {
28566 tejbeer 575
 
32018 tejbeer 576
                    List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
577
                    List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
28566 tejbeer 578
 
32018 tejbeer 579
                    Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
28566 tejbeer 580
 
32018 tejbeer 581
                    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 582
 
32018 tejbeer 583
                    customerRetailers.addAll(customerRetailerMap.values());
30426 tejbeer 584
 
32018 tejbeer 585
                }
586
                return responseSender.ok(customerRetailers);
30426 tejbeer 587
 
32018 tejbeer 588
            }
589
        } else {
28566 tejbeer 590
 
32018 tejbeer 591
            List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
592
            if (pincodePartners.size() > 0) {
593
                List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
594
                List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
28566 tejbeer 595
 
32018 tejbeer 596
                Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
28566 tejbeer 597
 
32018 tejbeer 598
                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 599
 
32018 tejbeer 600
                customerRetailers.addAll(customerRetailerMap.values());
601
            }
28298 tejbeer 602
 
32018 tejbeer 603
            return responseSender.ok(customerRetailers);
30426 tejbeer 604
 
32018 tejbeer 605
        }
30426 tejbeer 606
 
32018 tejbeer 607
    }
30426 tejbeer 608
 
32018 tejbeer 609
    @RequestMapping(value = "/store/address/detail/{pincode}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
610
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
611
    @ApiOperation(value = "Get brand list and count for category")
612
    public ResponseEntity<?> getStoresDetailsByPincode(HttpServletRequest request, @PathVariable String pincode) throws Exception {
613
        List<CustomRetailer> customerRetailers = new ArrayList<>();
614
        List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
28298 tejbeer 615
 
32018 tejbeer 616
        if (!pincodePartners.isEmpty()) {
617
            List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
618
            List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
28298 tejbeer 619
 
32018 tejbeer 620
            Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
28566 tejbeer 621
 
32018 tejbeer 622
            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 623
 
32018 tejbeer 624
            customerRetailers.addAll(customerRetailerMap.values());
625
        }
27049 tejbeer 626
 
32018 tejbeer 627
        logger.info("customerRetailers" + customerRetailers);
628
        return responseSender.ok(customerRetailers);
629
    }
26855 tejbeer 630
 
33436 ranu 631
 
32018 tejbeer 632
    @RequestMapping(value = "/store/order", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
633
    public ResponseEntity<?> getOrderDetail(HttpServletRequest request, @RequestParam(value = "id") int id, @RequestParam(name = "offset") int offset, @RequestParam(name = "limit") int limit) throws Exception {
33436 ranu 634
 
635
        List<PendingOrderDetail> pendingOrderDetails = new ArrayList<>();
32018 tejbeer 636
        List<Integer> catalogIds = new ArrayList<>();
637
        List<PendingOrder> pendingOrders = pendingOrderRepository.selectByCustomerId(id, offset, limit);
26855 tejbeer 638
 
32018 tejbeer 639
        if (!pendingOrders.isEmpty()) {
640
            for (PendingOrder po : pendingOrders) {
641
                List<PendingOrderItem> pois = pendingOrderItemRepository.selectByOrderId(po.getId());
642
                for (PendingOrderItem pendingOrderItem : pois) {
643
                    Item item = itemRepository.selectById(pendingOrderItem.getItemId());
644
                    pendingOrderItem.setItemName(item.getItemDescription());
645
                    catalogIds.add(item.getCatalogItemId());
646
                }
26855 tejbeer 647
 
32018 tejbeer 648
                Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
26855 tejbeer 649
 
32018 tejbeer 650
                for (PendingOrderItem poi : pois) {
28566 tejbeer 651
 
33436 ranu 652
                    PendingOrderDetail pendingOrderDetail = new PendingOrderDetail();
28566 tejbeer 653
 
32018 tejbeer 654
                    Item item = itemRepository.selectById(poi.getItemId());
655
                    JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
33436 ranu 656
                    pendingOrderDetail.setImageUrl(jsonObj.getString("imageUrl_s"));
657
                    pendingOrderDetail.setBrand(item.getBrand());
658
                    pendingOrderDetail.setColor(item.getColor());
659
                    pendingOrderDetail.setPendingOrderItemId(poi.getId());
660
                    pendingOrderDetail.setId(poi.getOrderId());
661
                    pendingOrderDetail.setItemId(poi.getItemId());
662
                    pendingOrderDetail.setModelName(item.getModelName());
663
                    pendingOrderDetail.setModelNumber(item.getModelNumber());
664
                    pendingOrderDetail.setQuantity(poi.getQuantity());
665
                    pendingOrderDetail.setBilledTimestamp(poi.getBilledTimestamp());
666
                    pendingOrderDetail.setStatus(poi.getStatus());
667
                    pendingOrderDetail.setTotalPrice(poi.getSellingPrice());
668
                    pendingOrderDetail.setPayMethod(po.getPayMethod());
669
                    pendingOrderDetail.setCreatedTimeStamp(po.getCreateTimestamp());
670
                    pendingOrderDetail.setPendingOrderPlan(pendingOrderPlanRepository.selectByPoid(poi.getId()));
671
                    pendingOrderDetails.add(pendingOrderDetail);
32018 tejbeer 672
                }
673
            }
674
        }
28566 tejbeer 675
 
33436 ranu 676
        return responseSender.ok(pendingOrderDetails);
32018 tejbeer 677
    }
28566 tejbeer 678
 
32018 tejbeer 679
    @RequestMapping(value = "/store/invoiceOrder", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
680
    public ResponseEntity<?> getOrderInvoiceDetail(HttpServletRequest request, @RequestParam(value = "id") int id, @RequestParam(name = "offset") int offset, @RequestParam(name = "limit") int limit) throws Exception {
33436 ranu 681
        List<CustomerOrderAndInsuranceDetails> customerOrderAndInsuranceDetails = new ArrayList<>();
32018 tejbeer 682
        List<Integer> catalogIds = new ArrayList<>();
683
        List<FofoOrder> fofoOrders = fofoOrderRepository.selectOrderByCustomerId(id, offset, limit);
28566 tejbeer 684
 
32018 tejbeer 685
        if (!fofoOrders.isEmpty()) {
686
            for (FofoOrder fo : fofoOrders) {
687
                List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fo.getId());
688
                for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
689
                    Item item = itemRepository.selectById(fofoOrderItem.getItemId());
690
                    fofoOrderItem.setItemName(item.getItemDescription());
691
                    catalogIds.add(item.getCatalogItemId());
692
                }
28566 tejbeer 693
 
32018 tejbeer 694
                Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
695
                for (FofoOrderItem foi : fofoOrderItems) {
33436 ranu 696
                    CustomerOrderAndInsuranceDetails customerOrderDetail = new CustomerOrderAndInsuranceDetails();
32018 tejbeer 697
                    Item item = itemRepository.selectById(foi.getItemId());
698
                    JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
699
                    customerOrderDetail.setImageUrl(jsonObj.getString("imageUrl_s"));
700
                    customerOrderDetail.setBrand(item.getBrand());
701
                    customerOrderDetail.setColor(item.getColor());
702
                    customerOrderDetail.setFofoOrderItemId(foi.getId());
703
                    customerOrderDetail.setFofoOrderId(foi.getOrderId());
704
                    customerOrderDetail.setItemId(foi.getItemId());
705
                    customerOrderDetail.setModelName(item.getModelName());
706
                    customerOrderDetail.setModelNumber(item.getModelNumber());
707
                    customerOrderDetail.setQuantity(foi.getQuantity());
708
                    customerOrderDetail.setTotalPrice(foi.getSellingPrice());
709
                    customerOrderDetail.setCreatedTimeStamp(foi.getCreateTimestamp());
710
                    customerOrderDetail.setInvoiceNumber(fo.getInvoiceNumber());
711
                    customerOrderDetail.setCancelledTimestamp(fo.getCancelledTimestamp());
33436 ranu 712
                    customerOrderDetail.setInsurancePolicies(insurancePolicyRepository.selectByRetailerIdInvoiceNumber(fo.getInvoiceNumber()));
713
                    customerOrderAndInsuranceDetails.add(customerOrderDetail);
32018 tejbeer 714
                }
33436 ranu 715
 
32018 tejbeer 716
            }
28566 tejbeer 717
 
32018 tejbeer 718
        }
33436 ranu 719
        return responseSender.ok(customerOrderAndInsuranceDetails);
32018 tejbeer 720
    }
28566 tejbeer 721
 
32018 tejbeer 722
    @RequestMapping(value = "/store/generateInvoice", method = RequestMethod.GET)
723
    public ResponseEntity<?> generateInvoice(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
724
        InvoicePdfModel pdfModel = null;
725
        FofoOrder fo = fofoOrderRepository.selectByOrderId(orderId);
726
        pdfModel = orderService.getInvoicePdfModel(fo.getFofoId(), orderId);
727
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
728
        PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
729
        try {
730
            byteArrayOutputStream.close();
731
        } catch (IOException e) {
732
            // TODO Auto-generated catch block
733
            e.printStackTrace();
734
        }
735
        final HttpHeaders headers = new HttpHeaders();
736
        headers.setContentType(MediaType.APPLICATION_PDF);
737
        // headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
26745 amit.gupta 738
 
32018 tejbeer 739
        headers.setContentType(MediaType.parseMediaType("application/pdf"));
740
        headers.set("Content-disposition", "inline; filename=invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
741
        headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
742
        headers.add("Pragma", "no-cache");
743
        headers.add("Expires", "0");
28287 amit.gupta 744
 
32018 tejbeer 745
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
746
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
747
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
748
        return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
749
        // return responseSender.ok(new
750
        // ResponseEntity<byte[]>(byteArrayOutputStream.toByteArray(),
751
        // headers,HttpStatus.OK));
752
        /*
753
         * ResponseEntity<byte[]> response = new
754
         * ResponseEntity<byte[]>(byteArrayOutputStream.toByteArray(), headers,
755
         * HttpStatus.OK); return response;
756
         */
26923 amit.gupta 757
 
32018 tejbeer 758
    }
26607 amit.gupta 759
 
32018 tejbeer 760
    @RequestMapping(value = "/store/listing", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
761
    public ResponseEntity<?> getStoresListing(HttpServletRequest request) throws Exception {
762
        List<WebListing> webListings = webListingRepository.selectAllWebListingByType(Optional.of(true), WebListingSource.store);
763
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
32546 amit.gupta 764
        for (WebListing webListing : webListings) {
765
            webListing.setFofoCatalogResponses(getDealResponses(userInfo, webListing));
766
        }
767
        return responseSender.ok(webListings);
768
    }
33399 ranu 769
 
770
    @Autowired
771
    StateRepository stateRepository;
772
 
773
    @RequestMapping(value = "/store/stateList", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
774
    public ResponseEntity<?> getStateList(HttpServletRequest request) throws Exception {
775
        List<State> states = stateRepository.selectAll();
776
        return responseSender.ok(states);
777
    }
32546 amit.gupta 778
    /*@RequestMapping(value = "/store/listing", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
779
    public ResponseEntity<?> getStoresListing(HttpServletRequest request) throws Exception {
780
        List<WebListing> webListings = webListingRepository.selectAllWebListingByType(Optional.of(true), WebListingSource.store);
781
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
32544 amit.gupta 782
        Iterator<WebListing> webListingIterator = webListings.iterator();
783
        while (webListingIterator.hasNext()) {
784
            WebListing webListing = webListingIterator.next();
785
            List<FofoCatalogResponse> catalogResponses = getDealResponses(userInfo, webListing);
786
            boolean isAvailable = catalogResponses.stream().anyMatch(x->x.getItems().stream().anyMatch(y->y.getAvailability()>0));
32545 amit.gupta 787
            webListing.setFofoCatalogResponses(catalogResponses);
32544 amit.gupta 788
            if(!isAvailable) {
789
                webListings.remove(webListing);
790
            }
32018 tejbeer 791
        }
32544 amit.gupta 792
 
32018 tejbeer 793
        return responseSender.ok(webListings);
32546 amit.gupta 794
    }*/
26607 amit.gupta 795
 
32018 tejbeer 796
    private List<FofoCatalogResponse> getDealResponses(UserInfo userInfo, WebListing webListing) throws ProfitMandiBusinessException {
797
        List<Integer> webProducts = webProductListingRepository.selectAllByWebListingId(webListing.getId()).stream().filter(x -> x.getRank() > 0).map(x -> x.getEntityId()).collect(Collectors.toList());
798
        if (webProducts.size() == 0) {
799
            return new ArrayList<>();
800
        }
801
        RestClient rc = new RestClient();
802
        Map<String, String> params = new HashMap<>();
803
        List<String> mandatoryQ = new ArrayList<>();
804
        mandatoryQ.add(String.format(
33599 amit.gupta 805
                "+{!parent which=\"catalogId_i:(" + StringUtils.join(webProducts, " ") + ")\"} tagId_i:(%s)", StringUtils.join(TAG_IDS, " ")));
32018 tejbeer 806
        params.put("q", StringUtils.join(mandatoryQ, " "));
807
        params.put("fl", "*, [child parentFilter=id:catalog*]");
808
        // params.put("sort", "create_s desc");
809
        params.put("start", String.valueOf(0));
810
        params.put("rows", String.valueOf(100));
811
        params.put("wt", "json");
812
        String response = null;
813
        try {
33487 amit.gupta 814
            response = rc.get(SchemeType.HTTP, solrUrl, 8984, "solr/demo/select", params);
32018 tejbeer 815
        } catch (HttpHostConnectException e) {
816
            throw new ProfitMandiBusinessException("", "", "Could not connect to host");
817
        }
818
        JSONObject solrResponseJSONObj = new JSONObject(response).getJSONObject("response");
819
        JSONArray docs = solrResponseJSONObj.getJSONArray("docs");
820
        List<FofoCatalogResponse> dealResponse = getCatalogResponse(docs, false, userInfo.getRetailerId());
821
        return dealResponse;
822
    }
26607 amit.gupta 823
 
32018 tejbeer 824
    @RequestMapping(value = "/store/cart", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
825
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
826
    @ApiOperation(value = "Get brand list and count for category")
827
    public ResponseEntity<?> cart(HttpServletRequest request, @RequestBody AddCartRequest cartRequest) throws Exception {
828
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
829
        Integer storeId = userInfo.getRetailerId();
830
        ValidateCartResponse vc = new ValidateCartResponse(this.validateCart(storeId, cartRequest.getCartItems()), "Success", "Items added to cart successfully");
831
        return responseSender.ok(vc);
832
    }
26607 amit.gupta 833
 
32018 tejbeer 834
    // Validate Cart for B2C Customers
835
    private CartResponse validateCart(int storeId, List<CartItem> cartItems) throws Exception {
33436 ranu 836
 
33573 amit.gupta 837
        logger.info("cartItems {}", cartItems);
32018 tejbeer 838
        cartItems = cartItems.stream().filter(x -> x.getQuantity() > 0).collect(Collectors.toList());
839
        List<Integer> itemIds = cartItems.stream().map(x -> x.getItemId()).collect(Collectors.toList());
840
        Map<Integer, AvailabilityModel> inventoryItemAvailabilityMap = inventoryService.getStoreAndOurStock(storeId, itemIds);
841
        CartResponse cartResponse = new CartResponse();
842
        List<CartItemResponseModel> cartItemResponseModels = new ArrayList<>();
843
        cartResponse.setCartItems(cartItemResponseModels);
844
        Set<Integer> itemsIdsSet = new HashSet<>(itemIds);
845
        logger.info("Store Id {}, Item Ids {}", storeId, itemsIdsSet);
26607 amit.gupta 846
 
32018 tejbeer 847
        Map<Integer, Item> itemsMap = itemRepository.selectByIds(itemsIdsSet).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
26652 amit.gupta 848
 
32018 tejbeer 849
        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 850
 
32018 tejbeer 851
        List<Integer> catalogIds = itemsMap.values().stream().map(x -> x.getCatalogItemId()).collect(Collectors.toList());
26607 amit.gupta 852
 
32018 tejbeer 853
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
27030 amit.gupta 854
 
32018 tejbeer 855
        // cartResponse.getCartItems()
856
        int cartMessageChanged = 0;
857
        int cartMessageOOS = 0;
858
        int totalAmount = 0;
859
        int totalQty = 0;
34186 vikas.jang 860
        List<CartMessage> itemMessages = new ArrayList<>();
32018 tejbeer 861
        for (CartItem cartItem : cartItems) {
862
            Item item = itemsMap.get(cartItem.getItemId());
34186 vikas.jang 863
            CartMessage itemMsg = new CartMessage();
32018 tejbeer 864
            TagListing tagListing = tagListingMap.get(cartItem.getItemId());
32977 amit.gupta 865
            int catalogId = itemsMap.get(cartItem.getItemId()).getCatalogItemId();
866
            Float cashback = schemeService.getCatalogSchemeCashBack(storeId, Arrays.asList(catalogId))
867
                    .get(itemsMap.get(cartItem.getItemId()).getCatalogItemId());
32018 tejbeer 868
            cashback = cashback == null ? 0 : cashback;
869
            float itemSellingPrice = tagListing.getMop() - cashback;
870
            CartItemResponseModel cartItemResponseModel = new CartItemResponseModel();
871
            cartItemResponseModel.setSellingPrice(cartItem.getSellingPrice());
33436 ranu 872
            cartItemResponseModel.setPendingOrderItemPolicyPlan(cartItem.getPendingOrderItemPolicyPlan());
34239 vikas.jang 873
            logger.info("itemSellingPrice: {}",itemSellingPrice);
874
            logger.info("cartItem: {}",cartItem.getSellingPrice());
875
            logger.info("cashback: {}",cashback);
32018 tejbeer 876
            if (itemSellingPrice != cartItem.getSellingPrice()) {
34186 vikas.jang 877
                itemMsg.setType("price");
878
                itemMsg.setMessageText("Price has changed to "+itemSellingPrice);
32018 tejbeer 879
                cartItemResponseModel.setSellingPrice(itemSellingPrice);
880
                cartMessageChanged++;
881
            }
882
            int estimate = -2;
883
            LocalDateTime promiseDeliveryTime = LocalDateTime.now();
884
            int qtyRequired = (int) cartItem.getQuantity();
885
            AvailabilityModel availabilityModel = inventoryItemAvailabilityMap.get(cartItem.getItemId());
886
            cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
887
            if (availabilityModel.getStoreAvailability() >= qtyRequired) {
34239 vikas.jang 888
                itemMsg.setType("estimate0");
34186 vikas.jang 889
                itemMsg.setMessageText("Store availability is "+ availabilityModel.getStoreAvailability());
32018 tejbeer 890
                estimate = 0;
891
            } else if (availabilityModel.getWarehouseAvailability() >= qtyRequired) {
34239 vikas.jang 892
                itemMsg.setType("estimate2");
34186 vikas.jang 893
                itemMsg.setMessageText("Store availability is "+ availabilityModel.getWarehouseAvailability());
32018 tejbeer 894
                estimate = 2;
895
            } else if (availabilityModel.getStoreAvailability() > 0) {
896
                estimate = 0;
897
                qtyRequired = availabilityModel.getStoreAvailability();
898
                cartMessageChanged++;
34186 vikas.jang 899
                itemMsg.setType("quantity0");
900
                itemMsg.setMessageText("quantity is updated "+qtyRequired);
32018 tejbeer 901
            } else if (availabilityModel.getWarehouseAvailability() > 0) {
902
                qtyRequired = availabilityModel.getWarehouseAvailability();
903
                estimate = 2;
904
                cartMessageChanged++;
34186 vikas.jang 905
                itemMsg.setType("quantity2");
906
                itemMsg.setMessageText("quantity is updated "+qtyRequired);
32018 tejbeer 907
            } else {
908
                qtyRequired = 0;
909
                cartMessageChanged++;
34186 vikas.jang 910
                itemMsg.setType("item");
911
                itemMsg.setMessageText(item.getItemDescriptionNoColor() + " is out of stock");
32018 tejbeer 912
            }
913
            cartItemResponseModel.setQuantity(qtyRequired);
914
            if (estimate >= 0 && LocalTime.now().isAfter(CUTOFF_TIME)) {
915
                estimate = estimate + 1;
916
                promiseDeliveryTime = promiseDeliveryTime.plusDays(3);
917
            }
918
            totalQty += qtyRequired;
33573 amit.gupta 919
            if (cartItem.getPendingOrderItemPolicyPlan() != null) {
920
                totalAmount += qtyRequired * itemSellingPrice + qtyRequired * cartItem.getPendingOrderItemPolicyPlan().getPrice();
921
            } else {
33436 ranu 922
                totalAmount += qtyRequired * itemSellingPrice;
923
            }
924
 
32018 tejbeer 925
            cartItemResponseModel.setEstimate(estimate);
926
            cartItemResponseModel.setTitle(item.getItemDescriptionNoColor());
927
            cartItemResponseModel.setItemId(cartItem.getItemId());
928
            cartItemResponseModel.setMinBuyQuantity(1);
929
            cartItemResponseModel.setQuantity(qtyRequired);
930
            cartItemResponseModel.setQuantityStep(1);
931
            cartItemResponseModel.setPromiseDelivery(promiseDeliveryTime);
932
            cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
933
            cartItemResponseModel.setCatalogItemId(item.getCatalogItemId());
934
            cartItemResponseModel.setImageUrl(contentMap.get(item.getCatalogItemId()).getString("imageUrl_s"));
935
            cartItemResponseModel.setColor(item.getColor());
936
            cartItemResponseModels.add(cartItemResponseModel);
34186 vikas.jang 937
            itemMessages.add(itemMsg);
32018 tejbeer 938
        }
939
        cartResponse.setCartItems(cartItemResponseModels);
34186 vikas.jang 940
        cartResponse.setCartMessages(itemMessages);
32018 tejbeer 941
        cartResponse.setCartMessageChanged(cartMessageChanged);
942
        cartResponse.setCartMessageOOS(cartMessageOOS);
943
        int maxEstimate = cartItemResponseModels.stream().mapToInt(x -> x.getEstimate()).max().getAsInt();
944
        cartResponse.setMaxEstimate(maxEstimate);
945
        cartResponse.setTotalAmount(totalAmount);
946
        cartResponse.setTotalQty(totalQty);
26607 amit.gupta 947
 
32018 tejbeer 948
        return cartResponse;
26923 amit.gupta 949
 
32018 tejbeer 950
    }
27069 tejbeer 951
 
32018 tejbeer 952
    @RequestMapping(value = "/store/partnerStock", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
33573 amit.gupta 953
    public ResponseEntity<?> partnerStock(HttpServletRequest request, @RequestParam(required = false, defaultValue = "3") String categoryId, @RequestParam int offset,
34186 vikas.jang 954
      @RequestParam int limit, @RequestParam(required = false) String sort, @RequestParam(required = false) String brand,
955
      @RequestParam(value = "subCategoryId", required = false) int subCategoryId, @RequestParam(required = false) String queryTerm,
956
      @RequestParam(required = false) String listing, @RequestParam(required = false, defaultValue = "true") boolean partnerStockOnly) throws Throwable {
32018 tejbeer 957
        List<FofoCatalogResponse> dealResponse = new ArrayList<>();
958
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
959
        FofoStore fs = fofoStoreRepository.selectByRetailerId(userInfo.getRetailerId());
960
        sort = "w" + fs.getWarehouseId() + "_i desc";
961
        dealResponse = this.getCatalogResponse(
34024 vikas.jang 962
                commonSolrService.getSolrDocs(queryTerm, categoryId, offset, limit, sort, brand, subCategoryId, false, false), false, userInfo.getRetailerId());
32018 tejbeer 963
        return responseSender.ok(dealResponse);
964
    }
26923 amit.gupta 965
 
32018 tejbeer 966
    private List<FofoCatalogResponse> getCatalogResponse(JSONArray docs, boolean hotDeal, int fofoId) throws ProfitMandiBusinessException {
967
        Map<Integer, Integer> ourItemAvailabilityMap = null;
968
        Map<Integer, Integer> partnerStockAvailabilityMap = null;
969
        List<FofoCatalogResponse> dealResponse = new ArrayList<>();
970
        List<Integer> tagIds = Arrays.asList(4);
971
        if (docs.length() > 0) {
972
            HashSet<Integer> itemsSet = new HashSet<>();
973
            for (int i = 0; i < docs.length(); i++) {
974
                JSONObject doc = docs.getJSONObject(i);
975
                if (doc.has("_childDocuments_")) {
976
                    for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
977
                        JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
978
                        int itemId = childItem.getInt("itemId_i");
979
                        itemsSet.add(itemId);
980
                    }
981
                }
982
            }
983
            if (itemsSet.size() == 0) {
984
                return dealResponse;
985
            }
986
            if (fofoId > 0) {
987
                partnerStockAvailabilityMap = currentInventorySnapshotRepository.selectItemsStock(fofoId).stream().collect(Collectors.toMap(x -> x.getItemId(), x -> x.getAvailability()));
988
            }
989
            ourItemAvailabilityMap = saholicInventoryService.getTotalAvailabilityByItemIds(new ArrayList<>(itemsSet));
990
        }
26833 amit.gupta 991
 
32018 tejbeer 992
        for (int i = 0; i < docs.length(); i++) {
993
            Map<Integer, FofoAvailabilityInfo> fofoAvailabilityInfoMap = new HashMap<>();
994
            JSONObject doc = docs.getJSONObject(i);
995
            FofoCatalogResponse ffdr = new FofoCatalogResponse();
996
            ffdr.setCatalogId(doc.getInt("catalogId_i"));
997
            ffdr.setImageUrl(doc.getString("imageUrl_s"));
998
            ffdr.setTitle(doc.getString("title_s"));
34239 vikas.jang 999
            ffdr.setSuperCatalogTitle(doc.getString("superCatalog_s"));
1000
            ffdr.setSuperCatalogId(doc.getInt("superCatalog_i"));
1001
            ffdr.setSuperCatalogVariants(doc.getString("superCatalogVariants_s"));
32018 tejbeer 1002
            List<WebOffer> webOffers = webOfferRepository.selectAllActiveOffers().get(ffdr.getCatalogId());
1003
            if (webOffers != null && webOffers.size() > 0) {
1004
                ffdr.setOffers(webOffers.stream().map(x -> x.getTitle()).collect(Collectors.toList()));
1005
            }
1006
            try {
1007
                ffdr.setFeature(doc.getString("feature_s"));
1008
            } catch (Exception e) {
1009
                ffdr.setFeature(null);
1010
            }
1011
            ffdr.setBrand(doc.getJSONArray("brand_ss").getString(0));
33314 ranu 1012
 
32018 tejbeer 1013
            if (doc.has("_childDocuments_")) {
1014
                for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
1015
                    JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
1016
                    int itemId = childItem.getInt("itemId_i");
33314 ranu 1017
                    ffdr.setIsSmartPhone(itemRepository.selectById(itemId).isSmartPhone());
32018 tejbeer 1018
                    float sellingPrice = (float) childItem.getDouble("sellingPrice_f");
1019
                    if (fofoAvailabilityInfoMap.containsKey(itemId)) {
1020
                        if (fofoAvailabilityInfoMap.get(itemId).getSellingPrice() > sellingPrice) {
1021
                            fofoAvailabilityInfoMap.get(itemId).setSellingPrice(sellingPrice);
1022
                            fofoAvailabilityInfoMap.get(itemId).setMop((float) childItem.getDouble("mop_f"));
1023
                        }
1024
                    } else {
1025
                        FofoAvailabilityInfo fdi = new FofoAvailabilityInfo();
1026
                        fdi.setSellingPrice(sellingPrice);
1027
                        fdi.setMrp(childItem.getDouble("mrp_f"));
1028
                        fdi.setMop((float) childItem.getDouble("mop_f"));
1029
                        fdi.setColor(childItem.has("color_s") ? childItem.getString("color_s") : "");
1030
                        fdi.setTagId(childItem.getInt("tagId_i"));
1031
                        fdi.setItem_id(itemId);
34196 ranu 1032
                        fdi.setCatalog_id(doc.getInt("catalogId_i"));
32977 amit.gupta 1033
                        Float cashBack = schemeService.getCatalogSchemeCashBack(fofoId, Arrays.asList(ffdr.getCatalogId())).get(ffdr.getCatalogId());
32018 tejbeer 1034
                        cashBack = cashBack == null ? 0 : cashBack;
1035
                        // TODO:Dont commit
1036
                        // fdi.setCashback(Math.min(100, fdi.getMop()));
1037
                        fdi.setCashback(cashBack);
1038
                        fdi.setMinBuyQuantity(1);
1039
                        int partnerAvailability = partnerStockAvailabilityMap.get(itemId) == null ? 0 : partnerStockAvailabilityMap.get(itemId);
1040
                        int ourStockAvailability = ourItemAvailabilityMap.get(itemId) == null ? 0 : Math.max(0, ourItemAvailabilityMap.get(itemId));
1041
                        fdi.setActive(partnerAvailability > 0);
1042
                        // fdi.setActive(true);
34239 vikas.jang 1043
                        fdi.setPartnerAvailability(partnerAvailability);
32018 tejbeer 1044
                        fdi.setAvailability(Math.min(5, ourStockAvailability + partnerAvailability));
1045
                        fdi.setQuantityStep(1);
1046
                        fdi.setMaxQuantity(fdi.getAvailability());
1047
                        fofoAvailabilityInfoMap.put(itemId, fdi);
1048
                    }
1049
                }
1050
            }
1051
            if (fofoAvailabilityInfoMap.values().size() > 0) {
1052
                ffdr.setItems(fofoAvailabilityInfoMap.values().stream().sorted(Comparator.comparing(FofoAvailabilityInfo::isActive, Comparator.reverseOrder()).thenComparingInt(y -> -y.getAvailability())).collect(Collectors.toList()));
1053
                dealResponse.add(ffdr);
1054
            }
1055
        }
1056
        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());
1057
    }
26857 amit.gupta 1058
 
32018 tejbeer 1059
    @GetMapping(value = "store/order-status/{pendingOrderId}")
1060
    public ResponseEntity<?> orderStatus(HttpServletRequest request, @PathVariable int pendingOrderId) throws Exception {
1061
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderId);
1062
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
1063
        List<Integer> catalogIds = new ArrayList<>();
1064
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
1065
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1066
            pendingOrderItem.setItemName(item.getItemDescription());
34186 vikas.jang 1067
            pendingOrderItem.setCatalogId(item.getCatalogItemId());
32018 tejbeer 1068
            catalogIds.add(item.getCatalogItemId());
1069
        }
1070
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1071
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
1072
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1073
            JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1074
            pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1075
        }
1076
        pendingOrder.setPendingOrderItems(pendingOrderItems);
27045 tejbeer 1077
 
32018 tejbeer 1078
        return responseSender.ok(pendingOrder);
1079
    }
28345 tejbeer 1080
 
32018 tejbeer 1081
    @RequestMapping(value = "/store/addresses/{customerId}", method = RequestMethod.GET)
1082
    public ResponseEntity<?> getAll(HttpServletRequest request, @PathVariable int customerId) throws Throwable {
1083
        return responseSender.ok(customerAddressRepository.selectByActiveCustomerId(customerId));
1084
    }
26861 tejbeer 1085
 
32018 tejbeer 1086
    @RequestMapping(value = "/store/address", method = RequestMethod.POST)
1087
    public ResponseEntity<?> addAddress(HttpServletRequest request, @RequestBody CustomerAddress customerAddress) throws Throwable {
1088
        customerAddressRepository.persist(customerAddress);
1089
        return responseSender.ok(customerAddress);
1090
    }
27045 tejbeer 1091
 
32018 tejbeer 1092
    @RequestMapping(value = "/store/deactivateCustomerAddress", method = RequestMethod.POST)
1093
    public ResponseEntity<?> deactivateAddresss(HttpServletRequest request, @RequestParam int id) throws Throwable {
1094
        CustomerAddress cust = customerAddressRepository.selectById(id);
1095
        cust.setActive(false);
1096
        return responseSender.ok(cust);
1097
    }
27048 tejbeer 1098
 
32018 tejbeer 1099
    @RequestMapping(value = "/store/updateCustomer", method = RequestMethod.POST)
1100
    public ResponseEntity<?> updateCustomerProfile(HttpServletRequest request, @RequestBody Customer customer) throws Throwable {
1101
        Customer cust = customerRepository.selectById(customer.getId());
1102
        cust.setGender(customer.getGender());
1103
        cust.setProfileImageId(customer.getProfileImageId());
34186 vikas.jang 1104
        cust.setEmailId(customer.getEmailId());
32018 tejbeer 1105
        cust.setDob(customer.getDob());
1106
        return responseSender.ok(cust);
1107
    }
27048 tejbeer 1108
 
32018 tejbeer 1109
    @RequestMapping(value = "/stores/{state}/{city}/{storeCode}", method = RequestMethod.GET)
1110
    public void getStoreIndex(HttpServletResponse response, HttpServletRequest request, @PathVariable String state, @PathVariable String city, @PathVariable String storeCode) throws Throwable {
1111
        logger.info("Store code {}", storeCode);
1112
        Map<String, Integer> map = retailerService.getStoreCodeRetailerMap();
1113
        logger.info("retailer id {}", map.get(storeCode));
1114
        String retailerName = retailerService.getAllFofoRetailers().get(map.get(storeCode)).getBusinessName();
1115
        String html = partnerIndexService.getPartnerIndexHtml();
1116
        logger.info("html {}", html);
1117
        html = html.replace("Buy Mobiles and Accessories at exciting prices - SmartDukaan", String.format("%s is now ONLINE. Buy Mobiles, Accessories & more | SmartDukaan", retailerName));
1118
        response.getWriter().write(html);
1119
    }
27048 tejbeer 1120
 
32018 tejbeer 1121
    @RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
34186 vikas.jang 1122
    public ResponseEntity<?> cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id, @RequestParam String statusDescription, @RequestParam String reason) throws Exception {
28339 tejbeer 1123
 
32018 tejbeer 1124
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1125
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1126
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1127
        if (pendingOrderItem.getBilledTimestamp() == null) {
1128
            pendingOrderItem.setStatus(OrderStatus.CANCELLED);
1129
            pendingOrderItem.setRemark(reason);
1130
            pendingOrderItem.setStatusDescription("cancel by self");
1131
            pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
1132
            List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream().map(x -> x.getStatus()).collect(Collectors.toList());
28339 tejbeer 1133
 
32018 tejbeer 1134
            if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING) && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED) && !status.contains(OrderStatus.CLAIMED)) {
1135
                pendingOrder.setStatus(OrderStatus.CLOSED);
1136
            }
28339 tejbeer 1137
 
32018 tejbeer 1138
            pendingOrderItemRepository.persist(pendingOrderItem);
1139
            String itemDescription = itemRepository.selectById(pendingOrderItem.getItemId()).getItemDescription();
1140
            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 1141
 
32018 tejbeer 1142
            List<Integer> catalogIds = new ArrayList<>();
28339 tejbeer 1143
 
32018 tejbeer 1144
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1145
            pendingOrderItem.setItemName(item.getItemDescription());
1146
            catalogIds.add(item.getCatalogItemId());
28339 tejbeer 1147
 
32018 tejbeer 1148
            Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1149
            JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1150
            pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1151
            pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1152
            CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
28355 tejbeer 1153
 
32018 tejbeer 1154
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
28339 tejbeer 1155
 
32018 tejbeer 1156
            Map<String, Object> emailModel = new HashMap<>();
1157
            emailModel.put("customer", customerAddress);
1158
            emailModel.put("pendingOrder", pendingOrder);
1159
            emailModel.put("date", dateTimeFormatter);
27048 tejbeer 1160
 
32018 tejbeer 1161
            String[] customerEmail = null;
1162
            if (customer.getEmailId() != null) {
1163
                customerEmail = new String[]{customer.getEmailId()};
27048 tejbeer 1164
 
34186 vikas.jang 1165
                List<String> bccTo = Arrays.asList("vikas.jangra@smartdukaan.com");
29515 tejbeer 1166
 
32018 tejbeer 1167
                emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel, customerEmail, null, bccTo.toArray(new String[0]));
29515 tejbeer 1168
 
32018 tejbeer 1169
            }
1170
        }
29515 tejbeer 1171
 
32018 tejbeer 1172
        return responseSender.ok(true);
29515 tejbeer 1173
 
32018 tejbeer 1174
    }
31444 tejbeer 1175
 
32018 tejbeer 1176
    @RequestMapping(value = "/store/checkEligibilityStoreOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1177
    public ResponseEntity<?> checkEligibilityStoreOffers(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
29515 tejbeer 1178
 
32018 tejbeer 1179
        boolean eligibility = false;
29515 tejbeer 1180
 
34186 vikas.jang 1181
        List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id, ProfitMandiConstants.SCRATCH_OFFER_START_DATE, ProfitMandiConstants.SCRATCH_OFFER_END_DATE);
29515 tejbeer 1182
 
32018 tejbeer 1183
        if (!scratchOffers.isEmpty()) {
1184
            eligibility = true;
31457 tejbeer 1185
 
32018 tejbeer 1186
        }
1187
        return responseSender.ok(eligibility);
1188
    }
29515 tejbeer 1189
 
32018 tejbeer 1190
    @RequestMapping(value = "/store/ScratchOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1191
    public ResponseEntity<?> scratchOffers(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
29515 tejbeer 1192
 
34186 vikas.jang 1193
        List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id, ProfitMandiConstants.SCRATCH_OFFER_START_DATE, ProfitMandiConstants.SCRATCH_OFFER_END_DATE);
29515 tejbeer 1194
 
32218 tejbeer 1195
        logger.info("scratchOffers {}", scratchOffers);
32018 tejbeer 1196
        // List<ScratchOffer> scratchOffers =
1197
        // scratchOfferRepository.selectBycCustomerId(id);
1198
        for (ScratchOffer so : scratchOffers) {
1199
            if (LocalDateTime.now().isAfter(so.getUnlockedAt())) {
1200
                so.setUnlocked(true);
1201
            } else {
1202
                so.setUnlocked(false);
1203
            }
33678 ranu 1204
            LocalDateTime expiredTimestamp = ProfitMandiConstants.SCRATCH_OFFER_END_DATE.plusDays(1).atTime(LocalTime.MAX);
32671 ranu 1205
            so.setExpiredTimestamp(expiredTimestamp);
33573 amit.gupta 1206
            if (LocalDateTime.now().isAfter(expiredTimestamp)) {
32671 ranu 1207
                so.setExpired(true);
1208
            }
32018 tejbeer 1209
        }
29515 tejbeer 1210
 
32018 tejbeer 1211
        return responseSender.ok(scratchOffers);
1212
    }
1213
 
1214
    @RequestMapping(value = "/store/ScratchedOffer", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1215
    public ResponseEntity<?> scratchedOffer(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
1216
 
1217
        ScratchOffer scratchOffer = scratchOfferRepository.selectById(id);
1218
        scratchOffer.setScratched(true);
1219
        scratchOffer.setScracthedAt(LocalDateTime.now());
1220
 
1221
        return responseSender.ok(true);
1222
    }
1223
 
26607 amit.gupta 1224
}