Subversion Repositories SmartDukaan

Rev

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