Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
419 rajveer 1
package in.shop2020.serving.controllers;
2
 
2263 vikas 3
import in.shop2020.datalogger.EventType;
2183 vikas 4
import in.shop2020.model.v1.order.Order;
4325 mandeep.dh 5
import in.shop2020.model.v1.order.TransactionServiceException;
3063 chandransh 6
import in.shop2020.model.v1.user.Address;
894 rajveer 7
import in.shop2020.model.v1.user.ShoppingCartException;
2817 vikas 8
import in.shop2020.serving.interceptors.TrackingInterceptor;
3063 chandransh 9
import in.shop2020.serving.services.CodPaymentService;
10
import in.shop2020.serving.services.CommonPaymentService;
1905 chandransh 11
import in.shop2020.serving.services.EbsPaymentService;
3616 chandransh 12
import in.shop2020.serving.services.HdfcEmiPaymentService;
1318 rajveer 13
import in.shop2020.serving.services.HdfcPaymentService;
1905 chandransh 14
import in.shop2020.serving.services.IPaymentService;
6390 rajveer 15
import in.shop2020.serving.services.InnovitiPaymentService;
16
//import in.shop2020.serving.services.PayuPaymentService;
6050 anupam.sin 17
import in.shop2020.serving.utils.DesEncrypter;
3212 vikas 18
import in.shop2020.serving.utils.Utils;
3126 rajveer 19
import in.shop2020.thrift.clients.TransactionClient;
20
import in.shop2020.thrift.clients.UserClient;
2511 vikas 21
import in.shop2020.utils.DataLogger;
517 rajveer 22
 
3394 vikas 23
import java.util.ArrayList;
2419 vikas 24
import java.util.List;
25
 
832 rajveer 26
import org.apache.log4j.Logger;
822 vikas 27
import org.apache.struts2.convention.annotation.InterceptorRef;
28
import org.apache.struts2.convention.annotation.InterceptorRefs;
419 rajveer 29
import org.apache.struts2.convention.annotation.Result;
30
import org.apache.struts2.convention.annotation.Results;
517 rajveer 31
import org.apache.thrift.TException;
4325 mandeep.dh 32
import org.apache.thrift.transport.TTransportException;
4609 phani.kuma 33
import nl.captcha.Captcha;
419 rajveer 34
 
2159 chandransh 35
@SuppressWarnings("serial")
822 vikas 36
@InterceptorRefs({
37
    @InterceptorRef("myDefault"),
38
    @InterceptorRef("login")
39
})
40
 
419 rajveer 41
@Results({
3101 chandransh 42
    @Result(name="shipping-redirect", type="redirectAction", params = {"actionName" , "shipping"}),
5716 anupam.sin 43
    @Result(name="proceed-to-pay-redirect", type="redirectAction", params = {"actionName" , "proceed-to-pay", "deliveryLocation", "${deliveryLocation}"}),
3063 chandransh 44
	@Result(name="ebs-pay-redirect", type="redirect", location="/ebs-pay/${paymentId}"),
6060 rajveer 45
	@Result(name="payu-pay-redirect", type="redirect", location="/payu-pay/${paymentId}"),
6390 rajveer 46
	@Result(name="innoviti-pay-redirect", type="redirect", location="/innoviti-pay/${paymentId}"),
3063 chandransh 47
	@Result(name="cod-redirect", type="redirect", location="/pay-success?paymentId=${paymentId}")
419 rajveer 48
})
650 rajveer 49
public class OrderController extends BaseController {
419 rajveer 50
 
1905 chandransh 51
	public long getPaymentId() {
52
		return paymentId;
53
	}
419 rajveer 54
 
832 rajveer 55
	private static Logger log = Logger.getLogger(Class.class);
3063 chandransh 56
 
507 rajveer 57
	private String id;
712 rajveer 58
	private long txnId = 0;
650 rajveer 59
 
1905 chandransh 60
	private long paymentId;
61
 
1318 rajveer 62
	private String redirectURL;
5716 anupam.sin 63
	private String deliveryLocation = "";
681 rajveer 64
 
419 rajveer 65
	public OrderController(){
507 rajveer 66
		super();
419 rajveer 67
	}
68
 
507 rajveer 69
    // GET /order/ orderid
70
    public String show() {
71
    	log.info("id=" + id);
822 vikas 72
    	htmlSnippets.put("MYACCOUNT_HEADER", pageLoader.getMyaccountHeaderHtml());
4815 phani.kuma 73
    	htmlSnippets.put("ORDER_DETAILS", pageLoader.getOrderDetailsHtml(Long.parseLong(id), userinfo));
507 rajveer 74
    	return "show";
419 rajveer 75
    }
517 rajveer 76
 
572 chandransh 77
    // POST /order/
78
    public String create(){
786 rajveer 79
    	String addressIdString = this.request.getParameter("addressid");
80
    	if(addressIdString == null){
894 rajveer 81
    		addActionError("Please specify shipping address to continue.");
3101 chandransh 82
    		return "proceed-to-pay-redirect";
786 rajveer 83
    	}
2159 chandransh 84
 
85
    	String paymentOption = request.getParameter("payment_option");
86
    	log.info("Payment Option Selected: " + paymentOption);
87
    	if(paymentOption == null || paymentOption.equals("")){
88
    		addActionError("Please select a payment method to continue.");
3101 chandransh 89
    		return "proceed-to-pay-redirect";
2159 chandransh 90
    	}
91
 
92
 
3101 chandransh 93
    	long addressId;
94
    	try {
95
    	    addressId = Long.parseLong(addressIdString);   
96
    	} catch(NumberFormatException nfe){
97
    	    log.error("Unable to get address id", nfe);
98
    	    addActionError("Invalid address. Please add an address to the cart.");
99
    	    return "shipping-redirect";
100
    	}
101
 
572 chandransh 102
    	long currentCartId = userinfo.getCartId();
5326 rajveer 103
    	long currentUserId = userinfo.getUserId();
3063 chandransh 104
 
105
    	if(paymentOption.equals(IPaymentService.COD)){
106
    	    if(!verifyCaptcha()){
107
    	        addActionError("Invalid captcha");
4815 phani.kuma 108
    	        log.info("Invalid captcha error msg has been added");
3101 chandransh 109
    	        return "proceed-to-pay-redirect";    
3063 chandransh 110
    	    }
111
 
6353 rajveer 112
	        //Check that this address is eligible for COD shipping.
113
    	    UserClient userServiceClient = null;
114
            try {
115
                userServiceClient = new UserClient();
116
                in.shop2020.model.v1.user.UserContextService.Client userClient = userServiceClient.getClient();
117
                Address address = userClient.getAddressById(addressId);
118
 
119
                if(!userClient.showCODOption(currentCartId, sourceId, address.getPin())){
120
                    addActionError("Cash on Delivery is currently not available for this pincode. Please choose a different payment option.");
121
                    return "proceed-to-pay-redirect";    
122
                }
123
            } catch (Exception e) {
124
                log.error("Unable to talk to the user context service.", e);
125
                addActionError("We are experiencing some problems. Please try later.");
126
                return "proceed-to-pay-redirect";
127
            }
3063 chandransh 128
    	}
129
 
130
    	try {
6390 rajveer 131
    		if(!createOrders(addressId, currentCartId, currentUserId, Long.parseLong(paymentOption))) {
1128 rajveer 132
    			addActionError("We are experiencing some problems. Please try later.");
3101 chandransh 133
    			return "proceed-to-pay-redirect";
894 rajveer 134
    		}
3063 chandransh 135
    	} catch (Exception e) {
1128 rajveer 136
    		addActionError("We are experiencing some problems. Please try later.");
2296 chandransh 137
    		log.error("Exception in createOrders function. Something went wrong.", e);
3101 chandransh 138
    		return "proceed-to-pay-redirect";
693 rajveer 139
		}
2159 chandransh 140
 
6390 rajveer 141
    	int gatewayId = (int)findGatewayId(paymentOption);
142
    	switch (gatewayId) {
143
    	case 10:
144
			IPaymentService innovitiPaymentService = new InnovitiPaymentService();
145
			paymentId = innovitiPaymentService.createPayment(userinfo.getUserId(), txnId, paymentOption, gatewayId);
146
			if (paymentId == IPaymentService.PAYMENT_NOT_CREATED) {
147
				//Very unlikely. The only possible reason can be that the payment service is down.
148
				log.error("Unable to process the COD payment.");
149
				addActionError("We are experiencing some problems. Please try later.");
150
				return "proceed-to-pay-redirect";
151
			} else {
152
	            log.info("Successfully created payment for Innoviti to process. Redirecting to /innoviti-pay/" + paymentId);
153
				return "innoviti-pay-redirect";
154
			}
155
 
156
    	case 9:
157
    	case 11:
158
    	case 12:
159
    	case 13:
160
			IPaymentService hdfcEmiPaymentService = new HdfcEmiPaymentService();
161
            paymentId = hdfcEmiPaymentService.createPayment(userinfo.getUserId(), txnId, paymentOption, gatewayId);
162
            if(paymentId == IPaymentService.PAYMENT_NOT_CREATED){
163
                addActionError("We are experiencing some problems. Please try later.");
164
                log.error("Unable to process payment through HDFC EMI.");
165
                return "proceed-to-pay-redirect";
166
            } else {
167
                this.redirectURL = ((HdfcEmiPaymentService)hdfcEmiPaymentService).getRedirectUrl();
168
                log.info(this.redirectURL);
169
                return "success";
170
            }
171
 
172
    	case 3:
173
    		IPaymentService codPaymentService = new CodPaymentService();
174
    	    paymentId = codPaymentService.createPayment(userinfo.getUserId(), txnId, paymentOption, 4);
3063 chandransh 175
            if (paymentId == IPaymentService.PAYMENT_NOT_CREATED) {
176
                //Very unlikely. The only possible reason can be that the payment service is down.
177
                log.error("Unable to process the COD payment.");
178
                addActionError("We are experiencing some problems. Please try later.");
3101 chandransh 179
                return "proceed-to-pay-redirect";
3063 chandransh 180
            } else {
181
                CommonPaymentService.processCodTxn(txnId);
182
                return "cod-redirect";
183
            }
6390 rajveer 184
 
185
		default:
186
			break;
187
		}
188
 
189
 
190
		if(paymentOption.equals(IPaymentService.HDFC_MASTERCARD_CREDIT) || paymentOption.equals(IPaymentService.HDFC_MASTERCARD_DEBIT) || 
191
		        paymentOption.equals(IPaymentService.HDFC_VISA) || paymentOption.equals(IPaymentService.HDFC_VISA_ELECTRON)) {
192
            // User has selected Visa or MasterCard
193
            IPaymentService hdfcPaymentService = new HdfcPaymentService();
194
            paymentId = hdfcPaymentService.createPayment(userinfo.getUserId(), txnId, paymentOption, 1);
195
            if (paymentId == IPaymentService.PAYMENT_NOT_CREATED) {
196
                log.error("Unable to process payment through HDFC. Falling through to EBS.");
3616 chandransh 197
            } else {
6390 rajveer 198
                this.redirectURL = ((HdfcPaymentService)hdfcPaymentService).getRedirectUrl();
3616 chandransh 199
                log.info(this.redirectURL);
200
                return "success";
201
            }
6390 rajveer 202
        }
2199 chandransh 203
 
6390 rajveer 204
        if(paymentOption.equals(IPaymentService.HDFC_VISA))
205
            paymentOption = IPaymentService.EBS_VISA;
206
        else if(paymentOption.equals(IPaymentService.HDFC_MASTERCARD_DEBIT) || paymentOption.equals(IPaymentService.HDFC_MASTERCARD_CREDIT))
207
            paymentOption = IPaymentService.EBS_MASTERCARD;
208
        else if(paymentOption.equals(IPaymentService.HDFC_VISA_ELECTRON))
209
            paymentOption = null;           //Since we don't know the bank's name in this case, we'll let the user select the bank on the EBS page.
210
 
211
//        if(paymentOption.equals(IPaymentService.PAYU_CC)){
212
//        	paymentOption = IPaymentService.PAYU_CC;
213
//        	IPaymentService payuPaymentService = new PayuPaymentService();
214
//        	paymentId = payuPaymentService.createPayment(userinfo.getUserId(), txnId, paymentOption, gatewayId);
215
//        	return "payu-pay-redirect";
216
//        }
217
 
218
        IPaymentService ebsPaymentService = new EbsPaymentService();
219
        paymentId = ebsPaymentService.createPayment(userinfo.getUserId(), txnId, paymentOption, 2);
220
        if(paymentId == IPaymentService.PAYMENT_NOT_CREATED){
221
            addActionError("We are experiencing some problems. Please try later.");
222
            log.error("Unable to process payment through EBS.");
223
            return "proceed-to-pay-redirect";
224
        } else {
225
            log.info("Successfully created payment for EBS to process. Redirecting to /ebs-pay/" + paymentId);
226
            return "ebs-pay-redirect";
227
        }    	    
228
	}
229
 
230
    private long findGatewayId(String paymentOption){
231
    	long gatewayId = 0;
232
    	gatewayId = ProceedToPayController.getGatewayId(Long.parseLong(paymentOption));
233
    	if(gatewayId==0){
234
    		if(paymentOption.equals(IPaymentService.COD)){
235
    			gatewayId = 5;
236
    		}
3063 chandransh 237
    	}
6390 rajveer 238
    	return gatewayId;
572 chandransh 239
    }
6390 rajveer 240
 
3063 chandransh 241
    /**
242
     * Verifies if the recaptcha response matches the recaptcha challenge.
243
     * 
244
     * @return True if the captcha was valid, false otherwise.
245
     */
246
    private boolean verifyCaptcha() {
4609 phani.kuma 247
        String cookieCaptchaAnswer = getCookie(Captcha.NAME, true, "saholic");
248
    	String captchaReceived = (String) request.getParameter("captcha_response_field");
249
 
250
    	if (captchaReceived.equalsIgnoreCase(cookieCaptchaAnswer)) {
251
			try {
252
				DataLogger.logData(EventType.CAPTCHA_SUCCESS, getSessionId(), userinfo.getUserId(), userinfo.getEmail());
253
			} catch (Exception e1) {
254
	        	log.warn("Unable to log orders through the datalogger", e1);
255
	        }
256
			return true;
257
		} 
258
		else {
259
			try {
260
				DataLogger.logData(EventType.CAPTCHA_FAILED, getSessionId(), userinfo.getUserId(), userinfo.getEmail());
261
			} catch (Exception e1) {
262
	        	log.warn("Unable to log orders through the datalogger", e1);
263
	        }
264
			return false;
265
		}
3063 chandransh 266
    }
572 chandransh 267
 
507 rajveer 268
	public String getId(){
269
		return id;
270
	}
419 rajveer 271
 
507 rajveer 272
	public void setId(String id){
273
		this.id = id;
274
	}
419 rajveer 275
 
507 rajveer 276
	public String getMyaccountHeaderSnippet(){
277
		return htmlSnippets.get("MYACCOUNT_HEADER");
278
	}
279
 
280
	public String getOrderDetailsSnippet(){
281
		return htmlSnippets.get("ORDER_DETAILS");
282
	}
283
 
712 rajveer 284
	public long getTxn(){
285
		return this.txnId;
517 rajveer 286
	}
894 rajveer 287
 
288
	/**
289
	 * 
290
	 * @param addressId
291
	 * @param currentCartId
292
	 * @return
293
	 */
6390 rajveer 294
	private boolean createOrders(long addressId, long currentCartId, long currentUserId, long emiSchemeId){
3126 rajveer 295
		UserClient userServiceClient = null;
894 rajveer 296
		try {
3126 rajveer 297
			userServiceClient = new UserClient();
894 rajveer 298
		} catch (Exception e) {
2296 chandransh 299
			log.error("Unable to talk to the user context service.", e);
894 rajveer 300
			return false;
301
		}
302
 
303
		in.shop2020.model.v1.user.UserContextService.Client userClient = userServiceClient.getClient();
304
		try {
305
			userClient.addAddressToCart(currentCartId, addressId);
306
		} catch (ShoppingCartException e1) {
2296 chandransh 307
			log.error("Not able to set address in the cart.", e1);
894 rajveer 308
			return false;
309
		} catch (TException e1) {
2296 chandransh 310
			log.error("Thrift exception while setting address in cart.", e1);
894 rajveer 311
			return false;
312
		}
313
 
314
 
315
		try {
3561 rajveer 316
			String errorMsg = userClient.validateCart(currentCartId, sourceId); 
1466 ankur.sing 317
			if(!errorMsg.isEmpty()){
318
				addActionError(errorMsg);
894 rajveer 319
				return false;
320
			}
321
		} catch (ShoppingCartException e1) {
2296 chandransh 322
			log.error("Error while validating shopping cart.", e1);
894 rajveer 323
			return false;
324
		} catch (TException e) {
2296 chandransh 325
			log.error("Thrift exception while validating cart.", e);
894 rajveer 326
			return false;
327
		}
328
 
329
 
330
		try {
3859 vikas 331
		    String sessionSrc = getCookie(TrackingInterceptor.SESSION_SRC_COOKIE, true, TrackingInterceptor.ENCRIPTION_STRING);
332
		    String firstSrc = getCookie(TrackingInterceptor.SRC_COOKIE, true, TrackingInterceptor.ENCRIPTION_STRING);
2817 vikas 333
 
3859 vikas 334
		    long sessionTime = 0;
335
            try {
336
                sessionTime = Long.parseLong(getCookie(TrackingInterceptor.SESSION_SRC_TIME_COOKIE, false, null));
337
            } catch (Exception e) {
338
                log.warn("Unable to parse session src time cookie.", e);
2817 vikas 339
            }
3859 vikas 340
            long firstSrcTime = 0;
341
            try {
342
                firstSrcTime = Long.parseLong(getCookie(TrackingInterceptor.SRC_TIME_COOKIE, false, null));
343
            } catch (Exception e) {
344
                log.warn("Unable to parse session src time cookie.", e);
345
            }
6390 rajveer 346
            txnId = userClient.createOrders(currentCartId, sessionSrc, sessionTime, firstSrc, firstSrcTime, currentUserId, emiSchemeId);
894 rajveer 347
		} catch (ShoppingCartException e1) {
2296 chandransh 348
			log.error("Error while creating orders from cart.", e1);
894 rajveer 349
			return false;
350
		} catch (TException e) {
2296 chandransh 351
			log.error("Thrift exception while creating orders from cart.", e);
894 rajveer 352
			return false;
353
		}
354
 
3126 rajveer 355
		TransactionClient transactionServiceClient = null;
4325 mandeep.dh 356
 
2183 vikas 357
        try {
3126 rajveer 358
            transactionServiceClient = new TransactionClient();
2183 vikas 359
            List<Order> orders = transactionServiceClient.getClient().getOrdersForTransaction(txnId, userinfo.getUserId());
360
            for (Order order : orders) {
3394 vikas 361
                List<Order> tmpOrders = new ArrayList<Order>();
362
                tmpOrders.add(order);
363
                String itemIdString = Utils.getItemIdStringFromOrders(tmpOrders);
3209 vikas 364
                DataLogger.logData(EventType.ORDER_CREATION, getSessionId(), userinfo.getUserId(), userinfo.getEmail(), 
3212 vikas 365
                        Long.toString(order.getId()), Long.toString(currentCartId), itemIdString);
2183 vikas 366
            }
367
        } catch (Exception e1) {
2296 chandransh 368
        	log.warn("Unable to log orders through the datalogger", e1);
2183 vikas 369
        }
894 rajveer 370
 
371
		return true;
372
	}
4325 mandeep.dh 373
 
374
	/**
375
	 * This method updates address of a given order.
376
	 *
377
	 * @return
378
	 */
379
	public String modifyAddress() {
380
        long orderId   = Long.parseLong(request.getParameter("orderId"));
381
        long addressId = Long.valueOf(request.getParameter("addressId"));
382
 
383
		try {
384
		    TransactionClient transactionServiceClient = new TransactionClient();
385
			in.shop2020.model.v1.order.TransactionService.Client transactionClient
386
			    = transactionServiceClient.getClient();			
387
			transactionClient.updateShipmentAddress(orderId, addressId);
388
		} catch (TTransportException e) {
389
		    log.error("Could not update address: " + addressId + " for orderId: " + orderId, e);
390
		} catch (NumberFormatException e) {
391
		    log.error("Could not update address: " + addressId + " for orderId: " + orderId, e);
392
		} catch (TransactionServiceException e) {
393
		    log.error("Could not update address: " + addressId + " for orderId: " + orderId, e);
394
		} catch (TException e) {
395
		    log.error("Could not update address: " + addressId + " for orderId: " + orderId, e);
396
		}			
397
 
398
		return "index";
399
	}
400
 
1318 rajveer 401
	public String getRedirectURL(){
402
		return this.redirectURL;
403
	}
5716 anupam.sin 404
 
405
    public String getDeliveryLocation() {
406
        return deliveryLocation;
407
    }
408
 
409
    public void setDeliveryLocation(String deliveryLocation) {
410
        this.deliveryLocation = deliveryLocation;
411
    }
6050 anupam.sin 412
 
413
    public static void main(String[] args) {
414
        DesEncrypter d = new DesEncrypter("shop2020");
415
        System.out.println(d.decrypt("pmkcWEzhf4IFRLyHce89Cg"));
416
    }
419 rajveer 417
}