Subversion Repositories SmartDukaan

Rev

Rev 34287 | Rev 34444 | 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());
34287 vikas.jang 662
                    FofoOrderItem fofoItem = fofoOrderItemRepository.selectByPendingOrderItemId(pendingOrderItem.getId());
663
                    if (fofoItem != null) pendingOrderItem.setFofoOrderItem(fofoItem);
32018 tejbeer 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) {
33436 ranu 670
                    PendingOrderDetail pendingOrderDetail = new PendingOrderDetail();
32018 tejbeer 671
                    Item item = itemRepository.selectById(poi.getItemId());
34287 vikas.jang 672
                    if(contentMap.containsKey(item.getCatalogItemId())) {
673
                        JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
674
                        pendingOrderDetail.setImageUrl(jsonObj.getString("imageUrl_s"));
675
                    } else {
676
                        pendingOrderDetail.setImageUrl(ProfitMandiConstants.NO_IMAGE);
677
                    }
33436 ranu 678
                    pendingOrderDetail.setBrand(item.getBrand());
679
                    pendingOrderDetail.setColor(item.getColor());
680
                    pendingOrderDetail.setPendingOrderItemId(poi.getId());
681
                    pendingOrderDetail.setId(poi.getOrderId());
34287 vikas.jang 682
                    if(poi.getFofoOrderItem() != null && poi.getFofoOrderItem().getOrderId() > 0) pendingOrderDetail.setFofoOrderId(poi.getFofoOrderItem().getOrderId());
33436 ranu 683
                    pendingOrderDetail.setItemId(poi.getItemId());
684
                    pendingOrderDetail.setModelName(item.getModelName());
685
                    pendingOrderDetail.setModelNumber(item.getModelNumber());
686
                    pendingOrderDetail.setQuantity(poi.getQuantity());
687
                    pendingOrderDetail.setBilledTimestamp(poi.getBilledTimestamp());
688
                    pendingOrderDetail.setStatus(poi.getStatus());
689
                    pendingOrderDetail.setTotalPrice(poi.getSellingPrice());
690
                    pendingOrderDetail.setPayMethod(po.getPayMethod());
691
                    pendingOrderDetail.setCreatedTimeStamp(po.getCreateTimestamp());
692
                    pendingOrderDetail.setPendingOrderPlan(pendingOrderPlanRepository.selectByPoid(poi.getId()));
693
                    pendingOrderDetails.add(pendingOrderDetail);
32018 tejbeer 694
                }
695
            }
696
        }
28566 tejbeer 697
 
33436 ranu 698
        return responseSender.ok(pendingOrderDetails);
32018 tejbeer 699
    }
28566 tejbeer 700
 
32018 tejbeer 701
    @RequestMapping(value = "/store/invoiceOrder", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
702
    public ResponseEntity<?> getOrderInvoiceDetail(HttpServletRequest request, @RequestParam(value = "id") int id, @RequestParam(name = "offset") int offset, @RequestParam(name = "limit") int limit) throws Exception {
33436 ranu 703
        List<CustomerOrderAndInsuranceDetails> customerOrderAndInsuranceDetails = new ArrayList<>();
32018 tejbeer 704
        List<Integer> catalogIds = new ArrayList<>();
705
        List<FofoOrder> fofoOrders = fofoOrderRepository.selectOrderByCustomerId(id, offset, limit);
28566 tejbeer 706
 
32018 tejbeer 707
        if (!fofoOrders.isEmpty()) {
708
            for (FofoOrder fo : fofoOrders) {
709
                List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fo.getId());
710
                for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
711
                    Item item = itemRepository.selectById(fofoOrderItem.getItemId());
712
                    fofoOrderItem.setItemName(item.getItemDescription());
713
                    catalogIds.add(item.getCatalogItemId());
714
                }
28566 tejbeer 715
 
32018 tejbeer 716
                Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
717
                for (FofoOrderItem foi : fofoOrderItems) {
33436 ranu 718
                    CustomerOrderAndInsuranceDetails customerOrderDetail = new CustomerOrderAndInsuranceDetails();
32018 tejbeer 719
                    Item item = itemRepository.selectById(foi.getItemId());
720
                    JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
721
                    customerOrderDetail.setImageUrl(jsonObj.getString("imageUrl_s"));
722
                    customerOrderDetail.setBrand(item.getBrand());
723
                    customerOrderDetail.setColor(item.getColor());
724
                    customerOrderDetail.setFofoOrderItemId(foi.getId());
725
                    customerOrderDetail.setFofoOrderId(foi.getOrderId());
726
                    customerOrderDetail.setItemId(foi.getItemId());
727
                    customerOrderDetail.setModelName(item.getModelName());
728
                    customerOrderDetail.setModelNumber(item.getModelNumber());
729
                    customerOrderDetail.setQuantity(foi.getQuantity());
730
                    customerOrderDetail.setTotalPrice(foi.getSellingPrice());
731
                    customerOrderDetail.setCreatedTimeStamp(foi.getCreateTimestamp());
732
                    customerOrderDetail.setInvoiceNumber(fo.getInvoiceNumber());
733
                    customerOrderDetail.setCancelledTimestamp(fo.getCancelledTimestamp());
33436 ranu 734
                    customerOrderDetail.setInsurancePolicies(insurancePolicyRepository.selectByRetailerIdInvoiceNumber(fo.getInvoiceNumber()));
735
                    customerOrderAndInsuranceDetails.add(customerOrderDetail);
32018 tejbeer 736
                }
33436 ranu 737
 
32018 tejbeer 738
            }
28566 tejbeer 739
 
32018 tejbeer 740
        }
33436 ranu 741
        return responseSender.ok(customerOrderAndInsuranceDetails);
32018 tejbeer 742
    }
28566 tejbeer 743
 
32018 tejbeer 744
    @RequestMapping(value = "/store/generateInvoice", method = RequestMethod.GET)
745
    public ResponseEntity<?> generateInvoice(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
746
        InvoicePdfModel pdfModel = null;
747
        FofoOrder fo = fofoOrderRepository.selectByOrderId(orderId);
748
        pdfModel = orderService.getInvoicePdfModel(fo.getFofoId(), orderId);
749
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
750
        PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
751
        try {
752
            byteArrayOutputStream.close();
753
        } catch (IOException e) {
754
            // TODO Auto-generated catch block
755
            e.printStackTrace();
756
        }
757
        final HttpHeaders headers = new HttpHeaders();
758
        headers.setContentType(MediaType.APPLICATION_PDF);
759
        // headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
26745 amit.gupta 760
 
32018 tejbeer 761
        headers.setContentType(MediaType.parseMediaType("application/pdf"));
762
        headers.set("Content-disposition", "inline; filename=invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
763
        headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
764
        headers.add("Pragma", "no-cache");
765
        headers.add("Expires", "0");
28287 amit.gupta 766
 
32018 tejbeer 767
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
768
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
769
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
770
        return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
771
        // return responseSender.ok(new
772
        // ResponseEntity<byte[]>(byteArrayOutputStream.toByteArray(),
773
        // headers,HttpStatus.OK));
774
        /*
775
         * ResponseEntity<byte[]> response = new
776
         * ResponseEntity<byte[]>(byteArrayOutputStream.toByteArray(), headers,
777
         * HttpStatus.OK); return response;
778
         */
26923 amit.gupta 779
 
32018 tejbeer 780
    }
26607 amit.gupta 781
 
32018 tejbeer 782
    @RequestMapping(value = "/store/listing", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
783
    public ResponseEntity<?> getStoresListing(HttpServletRequest request) throws Exception {
784
        List<WebListing> webListings = webListingRepository.selectAllWebListingByType(Optional.of(true), WebListingSource.store);
785
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
32546 amit.gupta 786
        for (WebListing webListing : webListings) {
787
            webListing.setFofoCatalogResponses(getDealResponses(userInfo, webListing));
788
        }
789
        return responseSender.ok(webListings);
790
    }
33399 ranu 791
 
792
    @Autowired
793
    StateRepository stateRepository;
794
 
795
    @RequestMapping(value = "/store/stateList", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
796
    public ResponseEntity<?> getStateList(HttpServletRequest request) throws Exception {
797
        List<State> states = stateRepository.selectAll();
798
        return responseSender.ok(states);
799
    }
32546 amit.gupta 800
    /*@RequestMapping(value = "/store/listing", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
801
    public ResponseEntity<?> getStoresListing(HttpServletRequest request) throws Exception {
802
        List<WebListing> webListings = webListingRepository.selectAllWebListingByType(Optional.of(true), WebListingSource.store);
803
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
32544 amit.gupta 804
        Iterator<WebListing> webListingIterator = webListings.iterator();
805
        while (webListingIterator.hasNext()) {
806
            WebListing webListing = webListingIterator.next();
807
            List<FofoCatalogResponse> catalogResponses = getDealResponses(userInfo, webListing);
808
            boolean isAvailable = catalogResponses.stream().anyMatch(x->x.getItems().stream().anyMatch(y->y.getAvailability()>0));
32545 amit.gupta 809
            webListing.setFofoCatalogResponses(catalogResponses);
32544 amit.gupta 810
            if(!isAvailable) {
811
                webListings.remove(webListing);
812
            }
32018 tejbeer 813
        }
32544 amit.gupta 814
 
32018 tejbeer 815
        return responseSender.ok(webListings);
32546 amit.gupta 816
    }*/
26607 amit.gupta 817
 
32018 tejbeer 818
    private List<FofoCatalogResponse> getDealResponses(UserInfo userInfo, WebListing webListing) throws ProfitMandiBusinessException {
819
        List<Integer> webProducts = webProductListingRepository.selectAllByWebListingId(webListing.getId()).stream().filter(x -> x.getRank() > 0).map(x -> x.getEntityId()).collect(Collectors.toList());
820
        if (webProducts.size() == 0) {
821
            return new ArrayList<>();
822
        }
823
        RestClient rc = new RestClient();
824
        Map<String, String> params = new HashMap<>();
825
        List<String> mandatoryQ = new ArrayList<>();
826
        mandatoryQ.add(String.format(
33599 amit.gupta 827
                "+{!parent which=\"catalogId_i:(" + StringUtils.join(webProducts, " ") + ")\"} tagId_i:(%s)", StringUtils.join(TAG_IDS, " ")));
32018 tejbeer 828
        params.put("q", StringUtils.join(mandatoryQ, " "));
829
        params.put("fl", "*, [child parentFilter=id:catalog*]");
830
        // params.put("sort", "create_s desc");
831
        params.put("start", String.valueOf(0));
832
        params.put("rows", String.valueOf(100));
833
        params.put("wt", "json");
834
        String response = null;
835
        try {
33487 amit.gupta 836
            response = rc.get(SchemeType.HTTP, solrUrl, 8984, "solr/demo/select", params);
32018 tejbeer 837
        } catch (HttpHostConnectException e) {
838
            throw new ProfitMandiBusinessException("", "", "Could not connect to host");
839
        }
840
        JSONObject solrResponseJSONObj = new JSONObject(response).getJSONObject("response");
841
        JSONArray docs = solrResponseJSONObj.getJSONArray("docs");
842
        List<FofoCatalogResponse> dealResponse = getCatalogResponse(docs, false, userInfo.getRetailerId());
843
        return dealResponse;
844
    }
26607 amit.gupta 845
 
32018 tejbeer 846
    @RequestMapping(value = "/store/cart", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
847
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
848
    @ApiOperation(value = "Get brand list and count for category")
849
    public ResponseEntity<?> cart(HttpServletRequest request, @RequestBody AddCartRequest cartRequest) throws Exception {
850
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
851
        Integer storeId = userInfo.getRetailerId();
852
        ValidateCartResponse vc = new ValidateCartResponse(this.validateCart(storeId, cartRequest.getCartItems()), "Success", "Items added to cart successfully");
853
        return responseSender.ok(vc);
854
    }
26607 amit.gupta 855
 
32018 tejbeer 856
    // Validate Cart for B2C Customers
857
    private CartResponse validateCart(int storeId, List<CartItem> cartItems) throws Exception {
33436 ranu 858
 
33573 amit.gupta 859
        logger.info("cartItems {}", cartItems);
32018 tejbeer 860
        cartItems = cartItems.stream().filter(x -> x.getQuantity() > 0).collect(Collectors.toList());
861
        List<Integer> itemIds = cartItems.stream().map(x -> x.getItemId()).collect(Collectors.toList());
862
        Map<Integer, AvailabilityModel> inventoryItemAvailabilityMap = inventoryService.getStoreAndOurStock(storeId, itemIds);
863
        CartResponse cartResponse = new CartResponse();
864
        List<CartItemResponseModel> cartItemResponseModels = new ArrayList<>();
865
        cartResponse.setCartItems(cartItemResponseModels);
866
        Set<Integer> itemsIdsSet = new HashSet<>(itemIds);
867
        logger.info("Store Id {}, Item Ids {}", storeId, itemsIdsSet);
26607 amit.gupta 868
 
32018 tejbeer 869
        Map<Integer, Item> itemsMap = itemRepository.selectByIds(itemsIdsSet).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
26652 amit.gupta 870
 
32018 tejbeer 871
        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 872
 
32018 tejbeer 873
        List<Integer> catalogIds = itemsMap.values().stream().map(x -> x.getCatalogItemId()).collect(Collectors.toList());
26607 amit.gupta 874
 
32018 tejbeer 875
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
27030 amit.gupta 876
 
32018 tejbeer 877
        // cartResponse.getCartItems()
878
        int cartMessageChanged = 0;
879
        int cartMessageOOS = 0;
880
        int totalAmount = 0;
881
        int totalQty = 0;
34186 vikas.jang 882
        List<CartMessage> itemMessages = new ArrayList<>();
32018 tejbeer 883
        for (CartItem cartItem : cartItems) {
884
            Item item = itemsMap.get(cartItem.getItemId());
34186 vikas.jang 885
            CartMessage itemMsg = new CartMessage();
32018 tejbeer 886
            TagListing tagListing = tagListingMap.get(cartItem.getItemId());
32977 amit.gupta 887
            int catalogId = itemsMap.get(cartItem.getItemId()).getCatalogItemId();
888
            Float cashback = schemeService.getCatalogSchemeCashBack(storeId, Arrays.asList(catalogId))
889
                    .get(itemsMap.get(cartItem.getItemId()).getCatalogItemId());
32018 tejbeer 890
            cashback = cashback == null ? 0 : cashback;
891
            float itemSellingPrice = tagListing.getMop() - cashback;
892
            CartItemResponseModel cartItemResponseModel = new CartItemResponseModel();
893
            cartItemResponseModel.setSellingPrice(cartItem.getSellingPrice());
33436 ranu 894
            cartItemResponseModel.setPendingOrderItemPolicyPlan(cartItem.getPendingOrderItemPolicyPlan());
34259 aman.kumar 895
            logger.info("itemSellingPrice: {}", itemSellingPrice);
896
            logger.info("cartItem: {}", cartItem.getSellingPrice());
897
            logger.info("cashback: {}", cashback);
32018 tejbeer 898
            if (itemSellingPrice != cartItem.getSellingPrice()) {
34186 vikas.jang 899
                itemMsg.setType("price");
34259 aman.kumar 900
                itemMsg.setMessageText("Price has changed to " + itemSellingPrice);
32018 tejbeer 901
                cartItemResponseModel.setSellingPrice(itemSellingPrice);
902
                cartMessageChanged++;
903
            }
904
            int estimate = -2;
905
            LocalDateTime promiseDeliveryTime = LocalDateTime.now();
906
            int qtyRequired = (int) cartItem.getQuantity();
907
            AvailabilityModel availabilityModel = inventoryItemAvailabilityMap.get(cartItem.getItemId());
908
            cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
909
            if (availabilityModel.getStoreAvailability() >= qtyRequired) {
34239 vikas.jang 910
                itemMsg.setType("estimate0");
34259 aman.kumar 911
                itemMsg.setMessageText("Store availability is " + availabilityModel.getStoreAvailability());
32018 tejbeer 912
                estimate = 0;
913
            } else if (availabilityModel.getWarehouseAvailability() >= qtyRequired) {
34239 vikas.jang 914
                itemMsg.setType("estimate2");
34259 aman.kumar 915
                itemMsg.setMessageText("Store availability is " + availabilityModel.getWarehouseAvailability());
32018 tejbeer 916
                estimate = 2;
917
            } else if (availabilityModel.getStoreAvailability() > 0) {
918
                estimate = 0;
919
                qtyRequired = availabilityModel.getStoreAvailability();
920
                cartMessageChanged++;
34186 vikas.jang 921
                itemMsg.setType("quantity0");
34259 aman.kumar 922
                itemMsg.setMessageText("quantity is updated " + qtyRequired);
32018 tejbeer 923
            } else if (availabilityModel.getWarehouseAvailability() > 0) {
924
                qtyRequired = availabilityModel.getWarehouseAvailability();
925
                estimate = 2;
926
                cartMessageChanged++;
34186 vikas.jang 927
                itemMsg.setType("quantity2");
34259 aman.kumar 928
                itemMsg.setMessageText("quantity is updated " + qtyRequired);
32018 tejbeer 929
            } else {
930
                qtyRequired = 0;
931
                cartMessageChanged++;
34186 vikas.jang 932
                itemMsg.setType("item");
933
                itemMsg.setMessageText(item.getItemDescriptionNoColor() + " is out of stock");
32018 tejbeer 934
            }
935
            cartItemResponseModel.setQuantity(qtyRequired);
936
            if (estimate >= 0 && LocalTime.now().isAfter(CUTOFF_TIME)) {
937
                estimate = estimate + 1;
938
                promiseDeliveryTime = promiseDeliveryTime.plusDays(3);
939
            }
940
            totalQty += qtyRequired;
33573 amit.gupta 941
            if (cartItem.getPendingOrderItemPolicyPlan() != null) {
942
                totalAmount += qtyRequired * itemSellingPrice + qtyRequired * cartItem.getPendingOrderItemPolicyPlan().getPrice();
943
            } else {
33436 ranu 944
                totalAmount += qtyRequired * itemSellingPrice;
945
            }
946
 
32018 tejbeer 947
            cartItemResponseModel.setEstimate(estimate);
948
            cartItemResponseModel.setTitle(item.getItemDescriptionNoColor());
949
            cartItemResponseModel.setItemId(cartItem.getItemId());
950
            cartItemResponseModel.setMinBuyQuantity(1);
951
            cartItemResponseModel.setQuantity(qtyRequired);
952
            cartItemResponseModel.setQuantityStep(1);
953
            cartItemResponseModel.setPromiseDelivery(promiseDeliveryTime);
954
            cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
955
            cartItemResponseModel.setCatalogItemId(item.getCatalogItemId());
956
            cartItemResponseModel.setImageUrl(contentMap.get(item.getCatalogItemId()).getString("imageUrl_s"));
957
            cartItemResponseModel.setColor(item.getColor());
958
            cartItemResponseModels.add(cartItemResponseModel);
34186 vikas.jang 959
            itemMessages.add(itemMsg);
32018 tejbeer 960
        }
961
        cartResponse.setCartItems(cartItemResponseModels);
34186 vikas.jang 962
        cartResponse.setCartMessages(itemMessages);
32018 tejbeer 963
        cartResponse.setCartMessageChanged(cartMessageChanged);
964
        cartResponse.setCartMessageOOS(cartMessageOOS);
965
        int maxEstimate = cartItemResponseModels.stream().mapToInt(x -> x.getEstimate()).max().getAsInt();
966
        cartResponse.setMaxEstimate(maxEstimate);
967
        cartResponse.setTotalAmount(totalAmount);
968
        cartResponse.setTotalQty(totalQty);
26607 amit.gupta 969
 
32018 tejbeer 970
        return cartResponse;
26923 amit.gupta 971
 
32018 tejbeer 972
    }
27069 tejbeer 973
 
32018 tejbeer 974
    @RequestMapping(value = "/store/partnerStock", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
33573 amit.gupta 975
    public ResponseEntity<?> partnerStock(HttpServletRequest request, @RequestParam(required = false, defaultValue = "3") String categoryId, @RequestParam int offset,
34259 aman.kumar 976
                                          @RequestParam int limit, @RequestParam(required = false) String sort, @RequestParam(required = false) String brand,
977
                                          @RequestParam(value = "subCategoryId", required = false) int subCategoryId, @RequestParam(required = false) String queryTerm,
978
                                          @RequestParam(required = false) String listing, @RequestParam(required = false, defaultValue = "true") boolean partnerStockOnly) throws Throwable {
32018 tejbeer 979
        List<FofoCatalogResponse> dealResponse = new ArrayList<>();
980
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
981
        FofoStore fs = fofoStoreRepository.selectByRetailerId(userInfo.getRetailerId());
982
        sort = "w" + fs.getWarehouseId() + "_i desc";
983
        dealResponse = this.getCatalogResponse(
34024 vikas.jang 984
                commonSolrService.getSolrDocs(queryTerm, categoryId, offset, limit, sort, brand, subCategoryId, false, false), false, userInfo.getRetailerId());
32018 tejbeer 985
        return responseSender.ok(dealResponse);
986
    }
26923 amit.gupta 987
 
32018 tejbeer 988
    private List<FofoCatalogResponse> getCatalogResponse(JSONArray docs, boolean hotDeal, int fofoId) throws ProfitMandiBusinessException {
989
        Map<Integer, Integer> ourItemAvailabilityMap = null;
990
        Map<Integer, Integer> partnerStockAvailabilityMap = null;
991
        List<FofoCatalogResponse> dealResponse = new ArrayList<>();
992
        List<Integer> tagIds = Arrays.asList(4);
993
        if (docs.length() > 0) {
994
            HashSet<Integer> itemsSet = new HashSet<>();
995
            for (int i = 0; i < docs.length(); i++) {
996
                JSONObject doc = docs.getJSONObject(i);
997
                if (doc.has("_childDocuments_")) {
998
                    for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
999
                        JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
1000
                        int itemId = childItem.getInt("itemId_i");
1001
                        itemsSet.add(itemId);
1002
                    }
1003
                }
1004
            }
1005
            if (itemsSet.size() == 0) {
1006
                return dealResponse;
1007
            }
1008
            if (fofoId > 0) {
1009
                partnerStockAvailabilityMap = currentInventorySnapshotRepository.selectItemsStock(fofoId).stream().collect(Collectors.toMap(x -> x.getItemId(), x -> x.getAvailability()));
1010
            }
1011
            ourItemAvailabilityMap = saholicInventoryService.getTotalAvailabilityByItemIds(new ArrayList<>(itemsSet));
1012
        }
26833 amit.gupta 1013
 
32018 tejbeer 1014
        for (int i = 0; i < docs.length(); i++) {
1015
            Map<Integer, FofoAvailabilityInfo> fofoAvailabilityInfoMap = new HashMap<>();
1016
            JSONObject doc = docs.getJSONObject(i);
1017
            FofoCatalogResponse ffdr = new FofoCatalogResponse();
1018
            ffdr.setCatalogId(doc.getInt("catalogId_i"));
1019
            ffdr.setImageUrl(doc.getString("imageUrl_s"));
1020
            ffdr.setTitle(doc.getString("title_s"));
34239 vikas.jang 1021
            ffdr.setSuperCatalogTitle(doc.getString("superCatalog_s"));
1022
            ffdr.setSuperCatalogId(doc.getInt("superCatalog_i"));
1023
            ffdr.setSuperCatalogVariants(doc.getString("superCatalogVariants_s"));
32018 tejbeer 1024
            List<WebOffer> webOffers = webOfferRepository.selectAllActiveOffers().get(ffdr.getCatalogId());
1025
            if (webOffers != null && webOffers.size() > 0) {
1026
                ffdr.setOffers(webOffers.stream().map(x -> x.getTitle()).collect(Collectors.toList()));
1027
            }
1028
            try {
1029
                ffdr.setFeature(doc.getString("feature_s"));
1030
            } catch (Exception e) {
1031
                ffdr.setFeature(null);
1032
            }
1033
            ffdr.setBrand(doc.getJSONArray("brand_ss").getString(0));
33314 ranu 1034
 
32018 tejbeer 1035
            if (doc.has("_childDocuments_")) {
1036
                for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
1037
                    JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
1038
                    int itemId = childItem.getInt("itemId_i");
33314 ranu 1039
                    ffdr.setIsSmartPhone(itemRepository.selectById(itemId).isSmartPhone());
32018 tejbeer 1040
                    float sellingPrice = (float) childItem.getDouble("sellingPrice_f");
1041
                    if (fofoAvailabilityInfoMap.containsKey(itemId)) {
1042
                        if (fofoAvailabilityInfoMap.get(itemId).getSellingPrice() > sellingPrice) {
1043
                            fofoAvailabilityInfoMap.get(itemId).setSellingPrice(sellingPrice);
1044
                            fofoAvailabilityInfoMap.get(itemId).setMop((float) childItem.getDouble("mop_f"));
1045
                        }
1046
                    } else {
1047
                        FofoAvailabilityInfo fdi = new FofoAvailabilityInfo();
1048
                        fdi.setSellingPrice(sellingPrice);
1049
                        fdi.setMrp(childItem.getDouble("mrp_f"));
1050
                        fdi.setMop((float) childItem.getDouble("mop_f"));
1051
                        fdi.setColor(childItem.has("color_s") ? childItem.getString("color_s") : "");
1052
                        fdi.setTagId(childItem.getInt("tagId_i"));
1053
                        fdi.setItem_id(itemId);
34196 ranu 1054
                        fdi.setCatalog_id(doc.getInt("catalogId_i"));
32977 amit.gupta 1055
                        Float cashBack = schemeService.getCatalogSchemeCashBack(fofoId, Arrays.asList(ffdr.getCatalogId())).get(ffdr.getCatalogId());
32018 tejbeer 1056
                        cashBack = cashBack == null ? 0 : cashBack;
1057
                        // TODO:Dont commit
1058
                        // fdi.setCashback(Math.min(100, fdi.getMop()));
1059
                        fdi.setCashback(cashBack);
1060
                        fdi.setMinBuyQuantity(1);
1061
                        int partnerAvailability = partnerStockAvailabilityMap.get(itemId) == null ? 0 : partnerStockAvailabilityMap.get(itemId);
1062
                        int ourStockAvailability = ourItemAvailabilityMap.get(itemId) == null ? 0 : Math.max(0, ourItemAvailabilityMap.get(itemId));
1063
                        fdi.setActive(partnerAvailability > 0);
1064
                        // fdi.setActive(true);
34239 vikas.jang 1065
                        fdi.setPartnerAvailability(partnerAvailability);
32018 tejbeer 1066
                        fdi.setAvailability(Math.min(5, ourStockAvailability + partnerAvailability));
1067
                        fdi.setQuantityStep(1);
1068
                        fdi.setMaxQuantity(fdi.getAvailability());
1069
                        fofoAvailabilityInfoMap.put(itemId, fdi);
1070
                    }
1071
                }
1072
            }
1073
            if (fofoAvailabilityInfoMap.values().size() > 0) {
1074
                ffdr.setItems(fofoAvailabilityInfoMap.values().stream().sorted(Comparator.comparing(FofoAvailabilityInfo::isActive, Comparator.reverseOrder()).thenComparingInt(y -> -y.getAvailability())).collect(Collectors.toList()));
1075
                dealResponse.add(ffdr);
1076
            }
1077
        }
1078
        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());
1079
    }
26857 amit.gupta 1080
 
32018 tejbeer 1081
    @GetMapping(value = "store/order-status/{pendingOrderId}")
1082
    public ResponseEntity<?> orderStatus(HttpServletRequest request, @PathVariable int pendingOrderId) throws Exception {
1083
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderId);
1084
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
1085
        List<Integer> catalogIds = new ArrayList<>();
1086
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
1087
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1088
            pendingOrderItem.setItemName(item.getItemDescription());
34186 vikas.jang 1089
            pendingOrderItem.setCatalogId(item.getCatalogItemId());
32018 tejbeer 1090
            catalogIds.add(item.getCatalogItemId());
1091
        }
1092
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1093
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
1094
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1095
            JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1096
            pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1097
        }
1098
        pendingOrder.setPendingOrderItems(pendingOrderItems);
27045 tejbeer 1099
 
32018 tejbeer 1100
        return responseSender.ok(pendingOrder);
1101
    }
28345 tejbeer 1102
 
32018 tejbeer 1103
    @RequestMapping(value = "/store/addresses/{customerId}", method = RequestMethod.GET)
1104
    public ResponseEntity<?> getAll(HttpServletRequest request, @PathVariable int customerId) throws Throwable {
1105
        return responseSender.ok(customerAddressRepository.selectByActiveCustomerId(customerId));
1106
    }
26861 tejbeer 1107
 
32018 tejbeer 1108
    @RequestMapping(value = "/store/address", method = RequestMethod.POST)
1109
    public ResponseEntity<?> addAddress(HttpServletRequest request, @RequestBody CustomerAddress customerAddress) throws Throwable {
34259 aman.kumar 1110
        List<CustomerAddress> customerAddresses = customerAddressRepository.selectByActiveCustomerId(customerAddress.getCustomerId());
1111
        if (customerAddresses.isEmpty()) {
1112
            customerAddress.setDefault(true);
1113
        } else {
1114
            customerAddress.setDefault(false);
1115
        }
32018 tejbeer 1116
        customerAddressRepository.persist(customerAddress);
1117
        return responseSender.ok(customerAddress);
1118
    }
27045 tejbeer 1119
 
32018 tejbeer 1120
    @RequestMapping(value = "/store/deactivateCustomerAddress", method = RequestMethod.POST)
1121
    public ResponseEntity<?> deactivateAddresss(HttpServletRequest request, @RequestParam int id) throws Throwable {
1122
        CustomerAddress cust = customerAddressRepository.selectById(id);
34259 aman.kumar 1123
        List<CustomerAddress> customerAddresses = customerAddressRepository.selectByCustomerId(cust.getCustomerId());
32018 tejbeer 1124
        cust.setActive(false);
34259 aman.kumar 1125
        if(cust.getDefault()){
1126
            List<CustomerAddress> activeAddresses = customerAddresses.stream()
1127
                    .filter(a -> a.getActive() && a.getId() != id)
1128
                    .sorted(Comparator.comparing(CustomerAddress::getUpdateTimestamp).reversed())
1129
                    .collect(Collectors.toList());
1130
 
1131
            if (!activeAddresses.isEmpty()) {
1132
                CustomerAddress newDefault = activeAddresses.get(0);
1133
                newDefault.setDefault(true);
1134
            }
1135
        }
32018 tejbeer 1136
        return responseSender.ok(cust);
1137
    }
27048 tejbeer 1138
 
32018 tejbeer 1139
    @RequestMapping(value = "/store/updateCustomer", method = RequestMethod.POST)
1140
    public ResponseEntity<?> updateCustomerProfile(HttpServletRequest request, @RequestBody Customer customer) throws Throwable {
1141
        Customer cust = customerRepository.selectById(customer.getId());
1142
        cust.setGender(customer.getGender());
1143
        cust.setProfileImageId(customer.getProfileImageId());
34186 vikas.jang 1144
        cust.setEmailId(customer.getEmailId());
32018 tejbeer 1145
        cust.setDob(customer.getDob());
1146
        return responseSender.ok(cust);
1147
    }
27048 tejbeer 1148
 
32018 tejbeer 1149
    @RequestMapping(value = "/stores/{state}/{city}/{storeCode}", method = RequestMethod.GET)
1150
    public void getStoreIndex(HttpServletResponse response, HttpServletRequest request, @PathVariable String state, @PathVariable String city, @PathVariable String storeCode) throws Throwable {
1151
        logger.info("Store code {}", storeCode);
1152
        Map<String, Integer> map = retailerService.getStoreCodeRetailerMap();
1153
        logger.info("retailer id {}", map.get(storeCode));
1154
        String retailerName = retailerService.getAllFofoRetailers().get(map.get(storeCode)).getBusinessName();
1155
        String html = partnerIndexService.getPartnerIndexHtml();
1156
        logger.info("html {}", html);
1157
        html = html.replace("Buy Mobiles and Accessories at exciting prices - SmartDukaan", String.format("%s is now ONLINE. Buy Mobiles, Accessories & more | SmartDukaan", retailerName));
1158
        response.getWriter().write(html);
1159
    }
27048 tejbeer 1160
 
32018 tejbeer 1161
    @RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
34186 vikas.jang 1162
    public ResponseEntity<?> cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id, @RequestParam String statusDescription, @RequestParam String reason) throws Exception {
28339 tejbeer 1163
 
32018 tejbeer 1164
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1165
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1166
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1167
        if (pendingOrderItem.getBilledTimestamp() == null) {
1168
            pendingOrderItem.setStatus(OrderStatus.CANCELLED);
1169
            pendingOrderItem.setRemark(reason);
1170
            pendingOrderItem.setStatusDescription("cancel by self");
1171
            pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
1172
            List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream().map(x -> x.getStatus()).collect(Collectors.toList());
28339 tejbeer 1173
 
32018 tejbeer 1174
            if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING) && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED) && !status.contains(OrderStatus.CLAIMED)) {
1175
                pendingOrder.setStatus(OrderStatus.CLOSED);
1176
            }
28339 tejbeer 1177
 
32018 tejbeer 1178
            pendingOrderItemRepository.persist(pendingOrderItem);
1179
            String itemDescription = itemRepository.selectById(pendingOrderItem.getItemId()).getItemDescription();
1180
            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 1181
 
32018 tejbeer 1182
            List<Integer> catalogIds = new ArrayList<>();
28339 tejbeer 1183
 
32018 tejbeer 1184
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1185
            pendingOrderItem.setItemName(item.getItemDescription());
1186
            catalogIds.add(item.getCatalogItemId());
28339 tejbeer 1187
 
32018 tejbeer 1188
            Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1189
            JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1190
            pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1191
            pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1192
            CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
28355 tejbeer 1193
 
32018 tejbeer 1194
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
28339 tejbeer 1195
 
32018 tejbeer 1196
            Map<String, Object> emailModel = new HashMap<>();
1197
            emailModel.put("customer", customerAddress);
1198
            emailModel.put("pendingOrder", pendingOrder);
1199
            emailModel.put("date", dateTimeFormatter);
27048 tejbeer 1200
 
32018 tejbeer 1201
            String[] customerEmail = null;
1202
            if (customer.getEmailId() != null) {
1203
                customerEmail = new String[]{customer.getEmailId()};
27048 tejbeer 1204
 
34186 vikas.jang 1205
                List<String> bccTo = Arrays.asList("vikas.jangra@smartdukaan.com");
29515 tejbeer 1206
 
32018 tejbeer 1207
                emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel, customerEmail, null, bccTo.toArray(new String[0]));
29515 tejbeer 1208
 
32018 tejbeer 1209
            }
1210
        }
29515 tejbeer 1211
 
32018 tejbeer 1212
        return responseSender.ok(true);
29515 tejbeer 1213
 
32018 tejbeer 1214
    }
31444 tejbeer 1215
 
32018 tejbeer 1216
    @RequestMapping(value = "/store/checkEligibilityStoreOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1217
    public ResponseEntity<?> checkEligibilityStoreOffers(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
29515 tejbeer 1218
 
32018 tejbeer 1219
        boolean eligibility = false;
29515 tejbeer 1220
 
34186 vikas.jang 1221
        List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id, ProfitMandiConstants.SCRATCH_OFFER_START_DATE, ProfitMandiConstants.SCRATCH_OFFER_END_DATE);
29515 tejbeer 1222
 
32018 tejbeer 1223
        if (!scratchOffers.isEmpty()) {
1224
            eligibility = true;
31457 tejbeer 1225
 
32018 tejbeer 1226
        }
1227
        return responseSender.ok(eligibility);
1228
    }
29515 tejbeer 1229
 
32018 tejbeer 1230
    @RequestMapping(value = "/store/ScratchOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1231
    public ResponseEntity<?> scratchOffers(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
29515 tejbeer 1232
 
34186 vikas.jang 1233
        List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id, ProfitMandiConstants.SCRATCH_OFFER_START_DATE, ProfitMandiConstants.SCRATCH_OFFER_END_DATE);
29515 tejbeer 1234
 
32218 tejbeer 1235
        logger.info("scratchOffers {}", scratchOffers);
32018 tejbeer 1236
        // List<ScratchOffer> scratchOffers =
1237
        // scratchOfferRepository.selectBycCustomerId(id);
1238
        for (ScratchOffer so : scratchOffers) {
1239
            if (LocalDateTime.now().isAfter(so.getUnlockedAt())) {
1240
                so.setUnlocked(true);
1241
            } else {
1242
                so.setUnlocked(false);
1243
            }
34371 ranu 1244
            LocalDateTime expiredTimestamp = ProfitMandiConstants.SCRATCH_OFFER_END_DATE.plusDays(0).atTime(LocalTime.MAX);
32671 ranu 1245
            so.setExpiredTimestamp(expiredTimestamp);
33573 amit.gupta 1246
            if (LocalDateTime.now().isAfter(expiredTimestamp)) {
32671 ranu 1247
                so.setExpired(true);
1248
            }
32018 tejbeer 1249
        }
29515 tejbeer 1250
 
32018 tejbeer 1251
        return responseSender.ok(scratchOffers);
1252
    }
1253
 
1254
    @RequestMapping(value = "/store/ScratchedOffer", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1255
    public ResponseEntity<?> scratchedOffer(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
1256
 
1257
        ScratchOffer scratchOffer = scratchOfferRepository.selectById(id);
1258
        scratchOffer.setScratched(true);
1259
        scratchOffer.setScracthedAt(LocalDateTime.now());
1260
 
1261
        return responseSender.ok(true);
1262
    }
1263
 
34242 tejus.loha 1264
 
1265
    @RequestMapping(value = "/store/navbar", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1266
    public ResponseEntity<?> navBars() throws Exception {
1267
        List<NavBar> navBars = navBarRepository.selectAllActive();
1268
        return responseSender.ok(navBars);
1269
    }
1270
 
1271
 
26607 amit.gupta 1272
}