Subversion Repositories SmartDukaan

Rev

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