Subversion Repositories SmartDukaan

Rev

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