Subversion Repositories SmartDukaan

Rev

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