Subversion Repositories SmartDukaan

Rev

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