Subversion Repositories SmartDukaan

Rev

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