Subversion Repositories SmartDukaan

Rev

Rev 6443 | Rev 6495 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6050 anupam.sin 1
package in.shop2020.serving.controllers;
2
 
6091 anupam.sin 3
import in.shop2020.datalogger.EventType;
6050 anupam.sin 4
import in.shop2020.model.v1.order.OrderType;
5
import in.shop2020.model.v1.order.RechargeCoupon;
6
import in.shop2020.model.v1.order.RechargeOrder;
7
import in.shop2020.model.v1.order.RechargeOrderStatus;
6397 anupam.sin 8
import in.shop2020.model.v1.order.RechargePlan;
6050 anupam.sin 9
import in.shop2020.model.v1.order.RechargeType;
6057 anupam.sin 10
import in.shop2020.model.v1.order.UserWallet;
6050 anupam.sin 11
import in.shop2020.model.v1.user.User;
12
import in.shop2020.model.v1.user.UserContextException;
13
import in.shop2020.serving.utils.DesEncrypter;
14
import in.shop2020.serving.utils.Utils;
15
import in.shop2020.thrift.clients.HelperClient;
6433 anupam.sin 16
import in.shop2020.thrift.clients.PromotionClient;
6050 anupam.sin 17
import in.shop2020.thrift.clients.TransactionClient;
18
import in.shop2020.thrift.clients.UserClient;
6228 anupam.sin 19
import in.shop2020.utils.DataLogger;
6091 anupam.sin 20
import in.shop2020.utils.Mail;
6050 anupam.sin 21
 
22
import java.util.ArrayList;
6433 anupam.sin 23
import java.util.HashMap;
6050 anupam.sin 24
import java.util.List;
6433 anupam.sin 25
import java.util.Map;
6091 anupam.sin 26
import java.util.Random;
6050 anupam.sin 27
 
6249 anupam.sin 28
import nl.captcha.Captcha;
29
 
6050 anupam.sin 30
import org.apache.log4j.Logger;
31
import org.apache.struts2.convention.annotation.Result;
32
import org.apache.struts2.convention.annotation.Results;
33
import org.apache.thrift.TException;
34
import org.apache.thrift.transport.TTransportException;
35
 
36
@Results({
6228 anupam.sin 37
    @Result(name="recharge-pay-options-redirect", type="redirectAction", params = {"actionName" , "recharge-pay-options", "rechargeOrderId", "${rechargeOrderId}"}),
6103 amit.gupta 38
    @Result(name="create-recharge-redirect", type="redirectAction", params = {"actionName" , "wallet-only-payment", "rechargeOrderId", "${rechargeOrderId}"}),
6270 rajveer 39
    @Result(name="recharge-redirect", type="redirectAction", params = {"actionName" , "recharge", "error", "${errorMessage}"})
6050 anupam.sin 40
})
41
 
42
public class ConfirmController extends BaseController{
43
 
44
    /**
45
     * 
46
     */
47
    private static final long serialVersionUID = 1L;
6057 anupam.sin 48
    private long rechargeOrderId = 0;
6050 anupam.sin 49
    private String amount = "";
6086 anupam.sin 50
    private String walletAmountUsed = "0";
6050 anupam.sin 51
    private String operator = "";
52
    private String number = "";
53
    private String email = "";
54
    private String rechargeType = "";
55
    private DesEncrypter desEncrypter = new DesEncrypter("saholic");
56
    private List<String> couponIds = null;
57
    private List<RechargeCoupon> coupons = null;
6058 anupam.sin 58
    private String userId;
6057 anupam.sin 59
    private String message = "";
6249 anupam.sin 60
    private String errorMessage = "";
6070 anupam.sin 61
    private String totalAmount = "";
6178 anupam.sin 62
    private String plan = "";
6307 anupam.sin 63
    private String circleCode;
6433 anupam.sin 64
    private String couponCode = "";
65
    private String couponMessage = "";
66
    private long couponAmount = 0;
6091 anupam.sin 67
    private static final String chars = "abcdefghijklmonpqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
68
    private static final Random random = new Random();
69
    private static final int LENGTH = 10;
6050 anupam.sin 70
    private static Logger log = Logger.getLogger(Class.class);
71
 
72
    public String index() {
73
        return "index";
74
    }
75
 
76
    public String create() {
6270 rajveer 77
    	errorMessage = validateRecharge();
78
    	if(!errorMessage.equals("SUCCESS")){
6108 amar.kumar 79
    		DataLogger.logData(EventType.PROVIDER_FETCH_FAILURE, getSessionId(), userinfo.getUserId(), userinfo.getEmail(),
80
    				rechargeType.toString(), number, operator);
6103 amit.gupta 81
    		return "recharge-redirect";
82
    	}
6433 anupam.sin 83
 
6294 rajveer 84
    	setErrorMessage("");
6086 anupam.sin 85
        setTotalAmount(amount);
6433 anupam.sin 86
 
6057 anupam.sin 87
        if(userinfo.isLoggedIn()) {
6124 anupam.sin 88
            setUserId("" + userinfo.getUserId());
6433 anupam.sin 89
            calculateAmounts();
6124 anupam.sin 90
        } else {
91
            long tempUserId = createUserAndSendMail(email);
92
            if(tempUserId == -1)
93
            {
6270 rajveer 94
            	errorMessage = "Oops! There seems to be a problem. Please try after some time";
6124 anupam.sin 95
                return "recharge-redirect";
96
            } else {
97
                setUserId("" + tempUserId);
98
            }
6057 anupam.sin 99
        }
6050 anupam.sin 100
        return index();
101
    }
6433 anupam.sin 102
 
103
    private void calculateAmounts() {
104
 
105
        try {
106
            TransactionClient tc = new TransactionClient();
107
            UserWallet wallet = tc.getClient().getUserWallet(userinfo.getUserId());
108
            long amountA = 0;
109
            if(wallet.getAmount() == 0){
110
                setAmount("" + (Long.parseLong(totalAmount) - couponAmount));
111
                setMessage("");
112
            } else if ((amountA = wallet.getAmount() - (Long.parseLong(totalAmount) - couponAmount)) >= 0) {
113
                setAmount("0");
114
                setWalletAmountUsed("" + (wallet.getAmount() - amountA));
115
                setMessage("Amount used from RechargeWallet : Rs. " + walletAmountUsed
116
                        + "<br>Amount left in your RechargeWallet : Rs. " + amountA);
117
 
118
            } else {
119
                setAmount("" + (0-amountA));
120
                setWalletAmountUsed("" + wallet.getAmount());
121
                setMessage("Amount used from RechargeWallet : Rs. " + walletAmountUsed
122
                        + "<br>Amount left in your RechargeWallet : Rs.0");
123
            }
124
        } catch (Exception e) {
125
            log.error("Unable to get user wallet", e);
126
        }
127
    }
6050 anupam.sin 128
 
6270 rajveer 129
    public String validateRecharge(){
6103 amit.gupta 130
    	TransactionClient tcl;
131
    	try {
132
    		tcl = new TransactionClient();
6336 anupam.sin 133
    		return tcl.getClient().validateRecharge(RechargeType.findByValue(Integer.parseInt(this.rechargeType)), number, Long.parseLong(operator));
6103 amit.gupta 134
    	} catch (Exception e) {
135
    		log.error("Unable to get service provider for Device number " + number + " and rechargeType : " +  rechargeType, e);
136
    	}
6270 rajveer 137
    	return "Oops! There seems to be a problem. Please try after some time";
6103 amit.gupta 138
 
139
    }
140
 
6307 anupam.sin 141
    public boolean shouldPromptForWallet(){
142
        if(!isLoggedIn()) {
143
            try {
144
                TransactionClient tc = new TransactionClient();
145
                UserWallet wallet = tc.getClient().getUserWallet(Long.parseLong(userId));
146
                if(wallet.getAmount() != 0) {
147
                    return true;
148
                }
149
            } catch (Exception e) {
150
                log.error("Unable to get wallet for userId : " + userId, e);
151
            }
152
        }
153
        return false;
154
    }
155
 
6433 anupam.sin 156
    public String applyRechargeCoupon() {
157
        Map<Long, String> couponResult = null;
158
        try {
159
            PromotionClient pc = new PromotionClient();
160
            couponResult = pc.getClient().applyRechargeCoupon(couponCode, Long.parseLong(totalAmount), Long.parseLong(userId));
161
            if (couponResult != null) {
162
                for (long couponAmount : couponResult.keySet()) {
163
                    setCouponMessage(couponResult.get(couponAmount));
164
                    this.couponAmount = couponAmount;
165
                }
166
            }
6443 anupam.sin 167
 
168
            if(couponAmount == 0) {
169
                couponCode = null;
170
            }
171
 
6433 anupam.sin 172
            if(userinfo.isLoggedIn()) {
173
                calculateAmounts();
174
            } else {
175
                setAmount("" + (Long.parseLong(amount) - couponAmount));
176
            }
177
            return index();
178
        } catch (Exception e) {
179
            log.error("Unable to apply recharge coupon : " + couponCode, e);
180
            couponResult = new HashMap<Long, String>();
181
            setCouponMessage("Currently this coupon is unavailable");
182
        }
183
        return index();
184
    }
185
 
6050 anupam.sin 186
    public String createRecharge(){
6249 anupam.sin 187
        if (amount.equals("0")) {
188
            if (!verifyCaptcha()) {
189
                setErrorMessage("Invalid captcha. Try Again.");
190
                log.info("Invalid captcha error msg has been added");
191
                return index();
192
            }
193
        }
6050 anupam.sin 194
        try {
6058 anupam.sin 195
            TransactionClient tc = new TransactionClient();
6397 anupam.sin 196
            List<RechargePlan> plans = tc.getClient().getPlansForOperator(Long.parseLong(operator));
197
            List<String> planNameList = new ArrayList<String>();
198
            if (plans == null || plans.isEmpty()) {
199
                setPlan("");
200
            } else {
201
                for (RechargePlan tempPlan : plans) {
202
                    planNameList.add(tempPlan.getName());
203
                }
204
                if (!planNameList.contains(plan)) {
205
                    errorMessage = "Oops! There seems to be a problem. Please try after some time";
206
                    log.warn("OperatorId : " + operator + " and plan : " + plan + " do not match");
207
                    return "recharge-redirect";
208
                }
209
            }
210
 
6433 anupam.sin 211
            if(userinfo.isLoggedIn()) {
212
                UserWallet wallet = tc.getClient().getUserWallet(userinfo.getUserId());
213
                if(wallet.getAmount() < Long.parseLong(walletAmountUsed)) {
214
                    errorMessage = "Oops! There seems to be a problem. Please try after some time";
215
                    log.warn("WalletAmount used : " + walletAmountUsed + " is greater than wallet Balance  : " + wallet.getAmount());
216
                    return "recharge-redirect";
217
                }
218
 
219
                if (userinfo.getUserId() != Long.parseLong(userId)) {
220
                    errorMessage = "Oops! There seems to be a problem. Please try after some time";
221
                    log.warn("Logged in user : " + userinfo.getUserId() + " does not match with userId sent by user  : " +  userId);
222
                    return "recharge-redirect";
223
                }
224
            }
225
 
226
            PromotionClient pc = new PromotionClient();
227
            Map<Long, String> couponResult = null;
228
            couponResult = pc.getClient().applyRechargeCoupon(couponCode, Long.parseLong(totalAmount), Long.parseLong(userId));
229
            if(couponResult != null) {
230
                for (long couponAmount : couponResult.keySet()) {
231
                    setCouponMessage(couponResult.get(couponAmount));
232
                    this.couponAmount = couponAmount;
233
                }
234
            }
235
 
236
            if (Long.parseLong(totalAmount) != Long.parseLong(amount) + Long.parseLong(walletAmountUsed) + couponAmount){
237
                errorMessage = "Oops! There seems to be a problem. Please try after some time";
238
                log.warn("WalletAmount : " + walletAmountUsed + " plus couponAmount : " + couponAmount + " plus amount to be paid : " +
239
                        amount + "do not match with rechargeAmount : " + totalAmount);
240
                return "recharge-redirect";
241
            }
242
 
243
 
6050 anupam.sin 244
            RechargeOrder rechargeOrder = new RechargeOrder();
6249 anupam.sin 245
            rechargeOrder.setTotalAmount(Long.parseLong(totalAmount));
6050 anupam.sin 246
            rechargeOrder.setUserEmailId(email);
6058 anupam.sin 247
            rechargeOrder.setUserId(Long.parseLong(userId));
6050 anupam.sin 248
            rechargeOrder.setDeviceNumber(number);
6178 anupam.sin 249
            rechargeOrder.setPlan(plan);
6050 anupam.sin 250
            rechargeOrder.setOperatorId(Long.parseLong(operator));
6057 anupam.sin 251
            rechargeOrder.setRechargeType(RechargeType.findByValue(Integer.parseInt(rechargeType)));
6050 anupam.sin 252
            rechargeOrder.setStatus(RechargeOrderStatus.PAYMENT_PENDING);
253
            rechargeOrder.setOrderType(OrderType.B2C);
6070 anupam.sin 254
            rechargeOrder.setWalletAmount(Long.parseLong(getWalletAmountUsed()));
6433 anupam.sin 255
            rechargeOrder.setCouponAmount(couponAmount);
256
            rechargeOrder.setCouponCode(couponCode);
6397 anupam.sin 257
            TransactionClient tc1 = new TransactionClient();
258
            rechargeOrder = tc1.getClient().createRechargeOrder(rechargeOrder);
6057 anupam.sin 259
            setRechargeOrderId(rechargeOrder.getId());
6050 anupam.sin 260
 
6178 anupam.sin 261
        } catch (Exception e) {
262
            log.error("Unable to create recharge order", e);
6270 rajveer 263
            errorMessage = "Oops! There seems to be a problem. Please try after some time";
6178 anupam.sin 264
            return "recharge-redirect";
6050 anupam.sin 265
        }
266
        if(amount.equals("0")) {
267
            return "create-recharge-redirect";
268
        } else {
269
            return "recharge-pay-options-redirect";
270
        }
271
    }
272
 
6249 anupam.sin 273
    private boolean verifyCaptcha() {
274
        String cookieCaptchaAnswer = getCookie(Captcha.NAME, true, "saholic");
275
        String captchaReceived = (String) request.getParameter("captcha_response_field");
276
 
277
        if (captchaReceived.equalsIgnoreCase(cookieCaptchaAnswer)) {
278
            try {
279
                DataLogger.logData(EventType.CAPTCHA_SUCCESS, getSessionId(), userinfo.getUserId(), userinfo.getEmail());
280
            } catch (Exception e1) {
281
                log.warn("Unable to log orders through the datalogger", e1);
282
            }
283
            return true;
284
        } 
285
        else {
286
            try {
287
                DataLogger.logData(EventType.CAPTCHA_FAILED, getSessionId(), userinfo.getUserId(), userinfo.getEmail());
288
            } catch (Exception e1) {
289
                log.warn("Unable to log orders through the datalogger", e1);
290
            }
291
            return false;
292
        }
293
    }
294
 
6091 anupam.sin 295
    private static String generateNewPassword() {
296
        char[] buf = new char[LENGTH];
297
        for (int i = 0; i < buf.length; i++) {
298
            buf[i] = chars.charAt(random.nextInt(chars.length()));
299
        }
300
        return new String(buf);
301
    }
302
 
303
    private long createUserAndSendMail(String email) {
304
        User user = null;
305
        String password = null;
306
        try{
307
        UserClient ucl = new UserClient();
308
        user = ucl.getClient().getUserByEmail(email);
6124 anupam.sin 309
        if(user.getUserId() == -1) {
6091 anupam.sin 310
            user.setEmail(email);
311
            password = generateNewPassword();
312
            String encryptedPassword = desEncrypter.encrypt(password);
313
            user.setPassword(encryptedPassword);
314
            user.setCommunicationEmail(email);
315
            UserClient userContextServiceClient = new UserClient();
316
            in.shop2020.model.v1.user.UserContextService.Client userClient = userContextServiceClient.getClient();
317
            user = userClient.createUser(user);
6124 anupam.sin 318
 
319
            List<String> toList = new ArrayList<String>();
320
            toList.add(email);
321
            HelperClient helperServiceClient = null;
322
                helperServiceClient = new HelperClient();
323
                in.shop2020.utils.HelperService.Client client = helperServiceClient.getClient();
324
                Mail mail = new Mail();
6131 anupam.sin 325
                mail.setSubject("Saholic Registration successful");
6124 anupam.sin 326
                mail.setTo(toList);
327
                mail.setData("Your have successfully registered with Saholic.com. Your user name is: " + email + " and your password is: " +  password);
328
                client.sendMail(mail);
6091 anupam.sin 329
            }
330
        }catch (UserContextException ux){
331
            return -1;               
332
        } catch (TTransportException e) {
333
            return -1;
334
        } catch (TException e) {
335
            return -1;
6124 anupam.sin 336
        } catch (Exception e) {
337
            log.error("Unexpected error while mailing the new password");
338
            return -1;
6091 anupam.sin 339
        }
340
        return user.getUserId();
341
    }
342
 
6057 anupam.sin 343
    public String getOperatorName() {
6206 rajveer 344
    	String operatorName = null;
345
    	if(rechargeType.equals("1")){
346
    		operatorName = Utils.getMobileProvidersMap().get(Long.parseLong(operator));	
347
    	}
348
    	if(rechargeType.equals("2")){
349
    		operatorName = Utils.getDthProvidersMap().get(Long.parseLong(operator));	
350
    	}
351
    	if(operatorName == null){
352
    		operatorName = "N/A";	
353
    	}
354
    	return operatorName;
6057 anupam.sin 355
    }
356
 
6050 anupam.sin 357
    public String getAmount() {
358
        return amount;
359
    }
360
    public void setAmount(String amount) {
361
        this.amount = amount;
6457 rajveer 362
        this.totalAmount = amount;
6050 anupam.sin 363
    }
6073 amit.gupta 364
 
365
    public void setDthamount(String amount) {
366
    	this.amount = amount;
367
    }
6050 anupam.sin 368
    public String getOperator() {
369
        return operator;
370
    }
371
    public void setOperator(String operator) {
372
        this.operator = operator;
373
    }
374
    public String getNumber() {
375
        return number;
376
    }
377
    public void setNumber(String number) {
378
        this.number = number;
379
    }
6073 amit.gupta 380
 
381
    public void setDthnumber(String dthnumber) {
382
    	this.number = dthnumber;
383
    }
384
 
385
 
6050 anupam.sin 386
    public String getEmail() {
387
        return email;
388
    }
389
    public void setEmail(String email) {
390
        this.email = email;
391
    }
392
 
393
    public void setCouponIds(List<String> couponIds) {
394
        this.couponIds = couponIds;
395
    }
396
 
397
    public List<String> getCouponIds() {
398
        return couponIds;
399
    }
400
 
401
    public void setCoupons(List<RechargeCoupon> coupons) {
402
        this.coupons = coupons;
403
    }
404
 
405
    public List<RechargeCoupon> getCoupons() {
406
        return coupons;
407
    }
408
 
409
    public String getRechargeType() {
410
        return rechargeType;
411
    }
412
 
413
    public void setRechargeType(String rechargeType) {
414
        this.rechargeType = rechargeType;
415
    }
416
 
6058 anupam.sin 417
    public String getUserId() {
6050 anupam.sin 418
        return userId;
419
    }
420
 
6058 anupam.sin 421
    public void setUserId(String userId) {
422
        this.userId = userId;
6050 anupam.sin 423
    }
424
 
6057 anupam.sin 425
    public boolean isLoggedIn() {
426
        return userinfo.isLoggedIn();
427
    }
428
 
429
    public void setMessage(String message) {
430
        this.message = message;
431
    }
432
 
433
    public String getMessage() {
434
        return message;
435
    }
436
 
437
    public long getRechargeOrderId() {
438
        return rechargeOrderId;
439
    }
440
 
441
    public void setRechargeOrderId(long l) {
442
        this.rechargeOrderId = l;
443
    }
6070 anupam.sin 444
 
445
    public String getTotalAmount() {
446
        return totalAmount;
447
    }
6249 anupam.sin 448
 
449
    public void setTotalAmount(String amount) {
450
        this.totalAmount  = amount;
451
 
452
    }
6070 anupam.sin 453
 
454
    public String getWalletAmountUsed() {
455
        return walletAmountUsed;
456
    }
457
 
458
    public void setWalletAmountUsed(String walletAmountUsed) {
459
        this.walletAmountUsed = walletAmountUsed;
460
    }
6178 anupam.sin 461
 
462
    public String getPlan() {
463
        return plan;
464
    }
465
 
466
    public void setPlan(String plan) {
467
        this.plan = plan;
468
    }
6249 anupam.sin 469
 
470
    public String getErrorMessage() {
471
        return errorMessage;
472
    }
473
 
474
    public void setErrorMessage(String errorMessage) {
475
        this.errorMessage = errorMessage;
476
    }
6307 anupam.sin 477
 
478
    public String getCircleCode() {
479
        return circleCode;
480
    }
481
 
482
    public void setCircleCode(String circleCode) {
483
        this.circleCode = circleCode;
484
    }
6433 anupam.sin 485
 
486
    public void setDiscountCode(String discountCode) {
487
        this.couponCode = discountCode;
488
    }
6057 anupam.sin 489
 
6433 anupam.sin 490
    public String getCouponCode() {
491
        return couponCode;
492
    }
493
 
494
    public void setCouponCode(String couponCode) {
495
        this.couponCode = couponCode;
496
    }
497
 
498
    public void setCouponAmount(long couponAmount) {
499
        this.couponAmount = couponAmount;
500
    }
501
 
502
    public long getCouponAmount() {
503
        return couponAmount;
504
    }
505
 
506
    public void setCouponMessage(String couponMessage) {
507
        this.couponMessage = couponMessage;
508
    }
509
 
510
    public String getCouponMessage() {
511
        return couponMessage;
512
    }
513
 
6050 anupam.sin 514
}