Subversion Repositories SmartDukaan

Rev

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