Subversion Repositories SmartDukaan

Rev

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