Subversion Repositories SmartDukaan

Rev

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