Subversion Repositories SmartDukaan

Rev

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