Subversion Repositories SmartDukaan

Rev

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