//private void Send() //{ // //Trace.WriteLine(context.Database.Connection.ConnectionString); // try // { // var context = new IPTV2Entities(); // context.Database.Connection.ConnectionString = RoleEnvironment.GetConfigurationSettingValue("Iptv2Entities"); // Trace.TraceInformation("Fetching users for recurring..."); // DateTime dtRecur = registDt.Date.AddDays(Convert.ToInt32(RoleEnvironment.GetConfigurationSettingValue("numOfDaysRecurringProcess"))); // var recurringBillings = context.RecurringBillings.Where(r => r.StatusId == 1 && r.NextRun < dtRecur); // Trace.TraceInformation(String.Format("Total Users For Recurring: {0}", recurringBillings.Count())); // if (recurringBillings != null) // { // var gomsService = new GomsTfcTv(); // //Set Goms Values via Azure // gomsService.UserId = RoleEnvironment.GetConfigurationSettingValue("GomsTfcTvUserId"); // gomsService.Password = RoleEnvironment.GetConfigurationSettingValue("GomsTfcTvPassword"); // gomsService.ServiceUserId = RoleEnvironment.GetConfigurationSettingValue("GomsTfcTvServiceUserId"); // gomsService.ServicePassword = RoleEnvironment.GetConfigurationSettingValue("GomsTfcTvServicePassword"); // gomsService.ServiceUrl = RoleEnvironment.GetConfigurationSettingValue("GomsTfcTvServiceUrl"); // gomsService.ServiceId = Convert.ToInt32(RoleEnvironment.GetConfigurationSettingValue("GomsTfcTvServiceId")); // gomsService.GSapikey = RoleEnvironment.GetConfigurationSettingValue("GSapikey"); // gomsService.GSsecretkey = RoleEnvironment.GetConfigurationSettingValue("GSsecretkey"); // foreach (var i in recurringBillings) // { // Trace.TraceInformation(String.Format("Processing user {0} with productId {1}, endDate {2}", i.User.EMail, i.Product.Description, i.EndDate)); // try // { // ProductPrice priceOfProduct = i.Product.ProductPrices.FirstOrDefault(p => p.CurrencyCode == i.User.Country.CurrencyCode); // if (priceOfProduct == null) // priceOfProduct = i.Product.ProductPrices.FirstOrDefault(p => p.CurrencyCode == DefaultCurrencyCode); // Purchase purchase = CreatePurchase(registDt, "Payment via Credit Card"); // i.User.Purchases.Add(purchase); // PurchaseItem item = CreatePurchaseItem(i.UserId, i.Product, priceOfProduct); // purchase.PurchaseItems.Add(item); // var cardType = i.User.CreditCards.LastOrDefault(c => c.StatusId == 1).CardType; // CreditCardPaymentTransaction transaction = new CreditCardPaymentTransaction() // { // Amount = priceOfProduct.Amount, // Currency = priceOfProduct.CurrencyCode, // Reference = cardType.ToUpper(), // Date = registDt, // Purchase = purchase, // OfferingId = offeringId, // StatusId = 1 // }; // var response = gomsService.CreateOrderViaRecurringPayment(context, i.UserId, transaction); // if (response.IsSuccess) // { // DateTime endDate = registDt; // item.SubscriptionProduct = (SubscriptionProduct)i.Product; // if (item.SubscriptionProduct is PackageSubscriptionProduct) // { // PackageSubscriptionProduct subscription = (PackageSubscriptionProduct)i.Product; // foreach (var package in subscription.Packages) // { // string packageName = package.Package.Description; // string ProductNameBought = packageName; // PackageEntitlement currentPackage = i.User.PackageEntitlements.FirstOrDefault(p => p.PackageId == package.PackageId); // EntitlementRequest request = CreateEntitlementRequest(registDt, endDate, i.Product, String.Format("{0}-{1}", "CC", cardType), response.TransactionId.ToString(), registDt); // if (currentPackage != null) // { // request.StartDate = currentPackage.EndDate; // currentPackage.EndDate = GetEntitlementEndDate(subscription.Duration, subscription.DurationType, ((currentPackage.EndDate > registDt) ? currentPackage.EndDate : registDt)); // endDate = currentPackage.EndDate; // currentPackage.LatestEntitlementRequest = request; // request.EndDate = endDate; // } // else // { // PackageEntitlement entitlement = CreatePackageEntitlement(request, subscription, package, registDt); // request.EndDate = entitlement.EndDate; // i.User.PackageEntitlements.Add(entitlement); // } // i.User.EntitlementRequests.Add(request); // item.EntitlementRequest = request; //UPDATED: November 22, 2012 // } // i.EndDate = endDate; // i.NextRun = endDate.AddDays(-3).Date; // i.UpdatedOn = registDt; // } // } // else // throw new Exception(response.StatusMessage); // } // catch (Exception e) // { // Trace.TraceError(e.Message); // i.GomsRemarks = e.Message; // // TFCTV.Helpers.MyUtility.LogException(e, "Recurring Billing Scheduled Task"); // } // } // context.SaveChanges(); // } // } // catch (Exception e) // { // //TFCTV.Helpers.MyUtility.LogException(e); // Trace.TraceInformation("Error: " + e.Message); // Trace.TraceInformation("Inner Exception: " + e.InnerException.Message); // } //} private void Send() { //Trace.WriteLine(context.Database.Connection.ConnectionString); try { Trace.TraceInformation("Fetching users for recurring..."); DateTime dtRecur = registDt.Date.AddDays(Convert.ToInt32(RoleEnvironment.GetConfigurationSettingValue("numOfDaysRecurringProcess"))); var recurringBillings = GetUsersEligibleForRenewal(dtRecur); Trace.TraceInformation(String.Format("Total Users For Recurring: {0}", recurringBillings.Count())); if (recurringBillings != null) { using (var context = new IPTV2Entities()) { context.Database.Connection.ConnectionString = RoleEnvironment.GetConfigurationSettingValue("Iptv2Entities"); var gomsService = new GomsTfcTv(); SetGomsServiceVariables(gomsService); try { gomsService.TestConnect(); Console.WriteLine("Test Connect success"); } catch (Exception) { Console.WriteLine("Test Connect failed."); } foreach (var i in recurringBillings) { var user = context.Users.FirstOrDefault(u => u.UserId == i.UserId); var recurringBilling = context.RecurringBillings.Find(i.RecurringBillingId); var product = context.Products.Find(i.ProductId); Trace.TraceInformation(String.Format("Processing user {0} with productId {1}, endDate {2}", user.EMail, product.Description, i.EndDate)); try { ProductPrice priceOfProduct = context.ProductPrices.FirstOrDefault(p => p.CurrencyCode == user.Country.CurrencyCode && p.ProductId == product.ProductId); if (priceOfProduct == null) priceOfProduct = context.ProductPrices.FirstOrDefault(p => p.CurrencyCode == DefaultCurrencyCode && p.ProductId == product.ProductId); Purchase purchase = CreatePurchase(registDt, "Payment via Credit Card"); user.Purchases.Add(purchase); PurchaseItem item = CreatePurchaseItem(user.UserId, product, priceOfProduct); purchase.PurchaseItems.Add(item); var cardType = user.CreditCards.LastOrDefault(c => c.StatusId == 1).CardType; CreditCardPaymentTransaction transaction = new CreditCardPaymentTransaction() { Amount = priceOfProduct.Amount, Currency = priceOfProduct.CurrencyCode, Reference = cardType.ToUpper(), Date = registDt, Purchase = purchase, OfferingId = offeringId, StatusId = 1 }; var response = gomsService.CreateOrderViaRecurringPayment(context, user.UserId, transaction); if (response.IsSuccess) { DateTime endDate = registDt; item.SubscriptionProduct = (SubscriptionProduct)product; if (item.SubscriptionProduct is PackageSubscriptionProduct) { PackageSubscriptionProduct subscription = (PackageSubscriptionProduct)product; foreach (var package in subscription.Packages) { string packageName = package.Package.Description; string ProductNameBought = packageName; PackageEntitlement currentPackage = user.PackageEntitlements.FirstOrDefault(p => p.PackageId == package.PackageId); EntitlementRequest request = CreateEntitlementRequest(registDt, endDate, product, String.Format("{0}-{1}", "CC", cardType), response.TransactionId.ToString(), registDt); if (currentPackage != null) { request.StartDate = currentPackage.EndDate; currentPackage.EndDate = GetEntitlementEndDate(subscription.Duration, subscription.DurationType, ((currentPackage.EndDate > registDt) ? currentPackage.EndDate : registDt)); endDate = currentPackage.EndDate; currentPackage.LatestEntitlementRequest = request; request.EndDate = endDate; } else { PackageEntitlement entitlement = CreatePackageEntitlement(request, subscription, package, registDt); request.EndDate = entitlement.EndDate; user.PackageEntitlements.Add(entitlement); } user.EntitlementRequests.Add(request); item.EntitlementRequest = request; //UPDATED: November 22, 2012 } recurringBilling.EndDate = endDate; recurringBilling.NextRun = endDate.AddDays(-3).Date; recurringBilling.UpdatedOn = registDt; recurringBilling.GomsRemarks = String.Empty; recurringBilling.NumberOfAttempts = 0; } Trace.TraceInformation(user.EMail + ": renewal process complete!"); } else { recurringBilling.GomsRemarks = response.StatusMessage; recurringBilling.NumberOfAttempts += 1; throw new Exception(user.EMail + ": " + response.StatusMessage); } } catch (Exception e) { Trace.TraceError("INNER ERROR: " + e.Message); } if (context.SaveChanges() > 0) Trace.TraceInformation("Saving changes..."); } } } } catch (Exception e) { Trace.TraceError("ERROR: " + e.Message); } }
public RespValidateCreditCard ValidateCreditCard(IPTV2Entities context, System.Guid userId, CreditCardPaymentTransaction transaction, CreditCardInfo cardInfo, int FreeTrialConvertedDays) { RespValidateCreditCard result = null; InitializeServiceClient(); try { // validate credit card information cardInfo.Validate(); if (!cardInfo.IsValid) { throw new GomsInvalidCreditCardException(); } // Validate User GomsException validationResult = UserValidation(context, userId); if (!(validationResult is GomsSuccess)) { throw validationResult; } var user = context.Users.Find(userId); if (transaction == null) { throw new GomsInvalidTransactionException(); } else { // check purchase items if ((transaction.Purchase == null) || (transaction.Purchase.PurchaseItems.Count() <= 0)) { throw new GomsInvalidTransactionException(); } } var paymentMethod = context.GomsPaymentMethods.FirstOrDefault(p => (p.GomsSubsidiaryId == user.GomsSubsidiaryId) && (p.Name == cardInfo.CardTypeString)); if (paymentMethod == null) { throw new GomsCreditCardTypeInvalidException(); } var req = new ReqValidateCreditCard { UID = ServiceUserId, PWD = ServicePassword, Email = user.EMail, CustomerId = (int)user.GomsCustomerId, ServiceId = (int)user.GomsServiceId, SubsidiaryId = (int)user.GomsSubsidiaryId, OrderType = 2, PhoenixId = (int)(DateTime.Now.Ticks - int.MaxValue), CurrencyId = (int)context.Currencies.Find(user.Country.CurrencyCode).GomsId, CCName = cardInfo.Name, CCNumber = cardInfo.Number, CCSecurityCode = cardInfo.CardSecurityCode, CCExpiry = cardInfo.ExpiryDate, CCPostalCode = cardInfo.PostalCode, CCStreet = cardInfo.StreetAddress, PaymentMethod = paymentMethod.PaymentMethodId, CCType = GetGomsCreditCardType(cardInfo.CardType), }; // build order items OrderItem[] oi = new OrderItem[transaction.Purchase.PurchaseItems.Count()]; int i = 0; foreach (var item in transaction.Purchase.PurchaseItems) { // look for user's entitlment of purchased product Entitlement userEntitlement = Entitlement.GetUserProductEntitlement(context, userId, item.ProductId); DateTime startDate = DateTime.Now; if (userEntitlement != null) startDate = userEntitlement.EndDate > DateTime.Now ? userEntitlement.EndDate : DateTime.Now; var newEndDate = getEntitlementEndDate(item.SubscriptionProduct.Duration, item.SubscriptionProduct.DurationType, startDate); /**** EARLY BIRD ****/ if (FreeTrialConvertedDays > 0) newEndDate = newEndDate.AddDays(FreeTrialConvertedDays); oi[i] = new OrderItem { ItemId = (int)item.SubscriptionProduct.GomsProductId, Quantity = (int)item.SubscriptionProduct.GomsProductQuantity, AmountLocalCurrency = (double)item.Price, EndDate = newEndDate.ToString("MM/dd/yyyy"), StartDate = startDate.ToString("MM/dd/yyyy"), }; if (item.RecipientUserId != userId) { req.OrderType = 3; User recipient = context.Users.Find(item.RecipientUserId); if (recipient == null) { throw new GomsInvalidRecipientException(); } if (!recipient.IsGomsRegistered) { //var registerResult = RegisterUser(context, item.RecipientUserId); var registerResult = RegisterUser2(context, item.RecipientUserId); if (!registerResult.IsSuccess) { throw new GomsRegisterUserException(registerResult.StatusMessage); } } req.Recipient = (int)recipient.GomsCustomerId; req.RecipientServiceId = (int)recipient.GomsServiceId; } i++; } req.OrderItems = oi; var log = new GomsLogs() { email = user.EMail, phoenixid = req.PhoenixId }; try { // _serviceClient.InnerChannel.OperationTimeout = TimeSpan.FromMinutes(5); var startTime = DateTime.Now; result = _serviceClient.ValidateCreditCard(req); var endTime = DateTime.Now; var timeDifference = endTime - startTime; if (result.IsSuccess) { transaction.Reference += "-" + result.TransactionId.ToString(); transaction.GomsTransactionId = result.TransactionId; transaction.GomsTransactionDate = DateTime.Now; user.Transactions.Add(transaction); log.transactionid = transaction.TransactionId; log.transactiondate = transaction.GomsTransactionDate.Value.ToString("yyyy-MM-dd hh:mm:ss"); } else { log.transactionid = 0; log.transactiondate = String.Empty; //log.message = String.Format("{0} - {1}", result.IsSuccess, result.StatusMessage); } log.message = String.Format("{0} - {1}", result.IsSuccess, result.StatusMessage); log.statuscode = result.StatusCode; log.statusmessage = result.StatusMessage; log.issuccess = result.IsSuccess; log.gomstransactionid = result.TransactionId; } catch (Exception e) { log.message = e.Message; LogToGigya("glogs", log); throw new GomsServiceCallException(e.Message); } finally { LogToGigya("glogs", log); } } catch (GomsException e) { result = new RespValidateCreditCard { IsSuccess = false, StatusCode = e.StatusCode, StatusMessage = e.StatusMessage }; } return (result); }
static public void CreditCardPurchase() { var context = new IPTV2Entities(); var gomsService = new GomsTfcTv(); var user = context.Users.FirstOrDefault(u => u.EMail == "*****@*****.**"); if (user != null) { var product = (SubscriptionProduct)context.Products.Find(1); var currency = user.Country.Currency; var productPrice = product.ProductPrices.FirstOrDefault(pp => pp.CurrencyCode == user.Country.CurrencyCode); var amount = productPrice.Amount; // create purchase item var purchaseItem = new PurchaseItem { Currency = currency.Code, SubscriptionProduct = product, Price = productPrice.Amount, User = user, RecipientUserId = user.UserId }; // create purchase var purchase = new Purchase { Date = DateTime.Now, User = user, PurchaseItems = new List<PurchaseItem> { purchaseItem }, }; // create transaction var transaction = new CreditCardPaymentTransaction { Date = DateTime.Now, Purchase = purchase, Currency = currency.Code, Amount = amount, }; var resp = gomsService.CreateOrderViaCreditCard(context, user.UserId, transaction, GetCreditCard()); if (resp.IsSuccess) { // YEY } } }
private void Send() { //Trace.WriteLine(context.Database.Connection.ConnectionString); try { int successfullyProcessed = 0; int failedProcessed = 0; var failedEmails = new StringBuilder(); var emailBody = new StringBuilder(); List<Int32> listOfFailedRecurringBillingId = new List<Int32>(); emailBody.AppendLine(@"Recurring Billing Consolidated Report\r\n\r\n"); emailBody.AppendLine(String.Format(@"Current date: {0}\r\n\r\n\r\n", registDt)); Console.WriteLine("Fetching users for recurring billing..."); DateTime dtRecur = registDt.Date.AddDays(addDays); var recurringBillings = GetUsersEligibleForRenewal(dtRecur); Console.WriteLine(String.Format("Total users eligible for renewal: {0}", recurringBillings.Count())); if (recurringBillings != null) { if (recurringBillings.Count > 0) { using (var context = new IPTV2Entities()) { var gomsService = new GomsTfcTv(); try { gomsService.TestConnect(); Console.WriteLine("Test Connect success"); } catch (Exception) { Console.WriteLine("Test Connect failed."); } foreach (var i in recurringBillings) { using (var context3 = new IPTV2Entities()) { var user = context3.Users.FirstOrDefault(u => u.UserId == i.UserId); var recurringBilling = context3.RecurringBillings.Find(i.RecurringBillingId); var product = context3.Products.Find(i.ProductId); string productName = String.Empty; Console.WriteLine(String.Format("Processing user {0} with productId {1}, endDate {2}", user.EMail, product.Description, recurringBilling.EndDate)); try { ProductPrice priceOfProduct = context3.ProductPrices.FirstOrDefault(p => p.CurrencyCode == user.Country.CurrencyCode && p.ProductId == product.ProductId); if (priceOfProduct == null) priceOfProduct = context3.ProductPrices.FirstOrDefault(p => p.CurrencyCode == DefaultCurrencyCode && p.ProductId == product.ProductId); Purchase purchase = CreatePurchase(registDt, "Payment via Credit Card"); user.Purchases.Add(purchase); PurchaseItem item = CreatePurchaseItem(user.UserId, product, priceOfProduct); purchase.PurchaseItems.Add(item); var cardType = user.CreditCards.LastOrDefault(c => c.StatusId == 1).CardType; CreditCardPaymentTransaction transaction = new CreditCardPaymentTransaction() { Amount = priceOfProduct.Amount, Currency = priceOfProduct.CurrencyCode, Reference = cardType.ToUpper(), Date = registDt, Purchase = purchase, OfferingId = offeringId, StatusId = 1 }; var response = gomsService.CreateOrderViaRecurringPayment(context3, user.UserId, transaction); if (response.IsSuccess) { DateTime endDate = registDt; item.SubscriptionProduct = (SubscriptionProduct)product; if (item.SubscriptionProduct is PackageSubscriptionProduct) { PackageSubscriptionProduct subscription = (PackageSubscriptionProduct)product; foreach (var package in subscription.Packages) { string packageName = package.Package.Description; string ProductNameBought = packageName; productName = ProductNameBought; PackageEntitlement currentPackage = user.PackageEntitlements.FirstOrDefault(p => p.PackageId == package.PackageId); EntitlementRequest request = CreateEntitlementRequest(registDt, endDate, product, String.Format("{0}-{1}", "CC", cardType), response.TransactionId.ToString(), registDt); if (currentPackage != null) { request.StartDate = currentPackage.EndDate; currentPackage.EndDate = GetEntitlementEndDate(subscription.Duration, subscription.DurationType, ((currentPackage.EndDate > registDt) ? currentPackage.EndDate : registDt)); endDate = currentPackage.EndDate; currentPackage.LatestEntitlementRequest = request; request.EndDate = endDate; } else { PackageEntitlement entitlement = CreatePackageEntitlement(request, subscription, package, registDt); request.EndDate = entitlement.EndDate; user.PackageEntitlements.Add(entitlement); } user.EntitlementRequests.Add(request); item.EntitlementRequest = request; //UPDATED: November 22, 2012 } recurringBilling.EndDate = endDate; recurringBilling.NextRun = endDate.AddDays(-3).Date; recurringBilling.UpdatedOn = registDt; recurringBilling.GomsRemarks = null; recurringBilling.NumberOfAttempts = 0; } Console.WriteLine(user.EMail + ": renewal process complete!"); if (context3.SaveChanges() > 0) { successfullyProcessed += 1; Console.WriteLine("Saving changes..."); } //Send email to user; try { SendConfirmationEmails(user, user, transaction, productName, product, endDate, registDt, "Credit Card", (DateTime)endDate.AddDays(-4).Date); } catch (Exception e) { recurringBilling.GomsRemarks = e.Message; } } else { using (var context2 = new IPTV2Entities()) { var failedRecurring = context2.RecurringBillings.FirstOrDefault(r => r.RecurringBillingId == recurringBilling.RecurringBillingId); if (failedRecurring != null) { failedRecurring.GomsRemarks = response.StatusMessage; failedRecurring.NumberOfAttempts += 1; listOfFailedRecurringBillingId.Add(failedRecurring.RecurringBillingId); if (failedRecurring.NumberOfAttempts == 2) { //Send failure email try { SendConfirmationEmails(user, user, transaction, productName, product, registDt, registDt, "Credit Card", registDt, response.StatusMessage); } catch (Exception e) { failedRecurring.GomsRemarks = e.Message; } } string failedSpecificsCopy = String.Format("RBId: {0}\r\n\r\nEmail: {1}\r\n\r\nProduct: {2}\r\n\r\nError: {3}\r\n\r\n", failedRecurring.RecurringBillingId, user.EMail, product.Description, response.StatusMessage); failedEmails.AppendLine(failedSpecificsCopy); failedEmails.AppendLine("--------------------------------------------------\r\n\r\n"); failedProcessed += 1; if (context2.SaveChanges() > 0) Console.WriteLine("Saving error..."); } } throw new Exception(user.EMail + ": " + response.StatusMessage); } } catch (Exception e) { Console.WriteLine("Inner Exception: " + e.Message); } } } //if (context.SaveChanges() > 0) //{ // Console.WriteLine("Saving changes..."); Console.WriteLine("Processing of eligible users for recurring billing has completed"); //} //Finish the copy of the email emailBody.AppendLine(String.Format(@"Total number of successful transactions: {0}\r\n\r\n", successfullyProcessed)); emailBody.AppendLine(String.Format(@"Total number of failed transactions (GOMS): {0}\r\n\r\n\r\n", failedProcessed)); if (failedEmails.Length > 0) { emailBody.AppendLine(@"Specifics can be found below\r\n\r\n\r\n"); emailBody.AppendLine(String.Format(@"{0}\r\n\r\n\r\n", failedEmails.ToString())); } emailBody.AppendLine("=================================================================\r\n\r\n\r\n"); //Get total numbers of recurring billing that have reached processing threshold //var reachedThreshold = context.RecurringBillings.Where(r => r.StatusId == 1 && r.NumberOfAttempts == 3); //if (reachedThreshold != null) //{ // emailBody.AppendLine(String.Format(@"Total number of failed transactions (MAX ATTEMPT): {0}\r\n\r\n", reachedThreshold.Count())); // foreach (var item in reachedThreshold) // { // string failedSpecificsCopy = String.Format("RBId: {0}\r\n\r\nEmail: {1}\r\n\r\nProduct: {2}\r\n\r\nLast error received: {3}\r\n\r\n", item.RecurringBillingId, item.User.EMail, item.Product.Description, item.GomsRemarks); // emailBody.AppendLine(failedSpecificsCopy); // emailBody.AppendLine("--------------------------------------------------\r\n\r\n"); // } //} failedEmails.AppendLine("=================================================================\r\n\r\n\r\n"); emailBody.AppendLine("Report ends here."); var newEmailBody = new StringBuilder(); newEmailBody.AppendLine("<!DOCTYPE html><html><body style=\"font-family: \"Trebuchet MS\", Arial, sans-serif;color:#000; font-size: 14px;\">"); newEmailBody.AppendLine("<h3>Report summary</h3>"); newEmailBody.AppendLine(String.Format("DateTime of processing (UTC): {0}", UtcDt)); newEmailBody.AppendLine(String.Format("<p style=\"font-size: 16px; font-weight: bold;\">Total number of successful transactions: {0}</p>", successfullyProcessed)); newEmailBody.AppendLine(String.Format("<p style=\"font-size: 16px; font-weight: bold;\">Total number of failed transactions: {0}</p>", failedProcessed)); newEmailBody.AppendLine(CreateConsolidatedReport(1, "GOMS", listOfFailedRecurringBillingId)); newEmailBody.AppendLine("<hr />"); newEmailBody.AppendLine(CreateConsolidatedReport(3, "MAX ATTEMPT", null)); newEmailBody.AppendLine("<p style=\"font-size: 16px; font-weight: bold;\">Report ends here.</p>"); newEmailBody.AppendLine("</body></html>"); if (IsSendConsolidatedReportsEnabled) { var receivers = consolidatedReportReceivers.Split(','); try { //SendEmailViaSendGrid(null, NoReplyEmail, "TFC.tv Recurring Billing: Consolidated Report", emailBody.ToString(), MailType.TextOnly, emailBody.ToString(), receivers); //SendEmailViaSendGrid(null, NoReplyEmail, "TFC.tv Recurring Billing: Consolidated Report", newEmailBody.ToString(), MailType.HtmlOnly, newEmailBody.ToString(), receivers); SendEmailViaSendGrid(toRecipient, NoReplyEmail, "TFC.tv Recurring Billing: Consolidated Report", newEmailBody.ToString(), MailType.HtmlOnly, newEmailBody.ToString(), receivers); Console.WriteLine("Sending of consolidated report is successful!"); } catch (Exception) { Console.WriteLine("Sending of consolidated report failed!"); } } //CANCELL ALL RECURRING try { var cancellation_list = GetUsersEligibleForCancellation(dtRecur); foreach (var i in cancellation_list) { try { gomsService.CancelRecurringPayment(i.User, i.Product); } catch (Exception) { } } } catch (Exception) { } } } else Console.WriteLine("Nothing to process.."); } } catch (Exception e) { Console.WriteLine("Outer Exception: " + e.Message); } }
public static ErrorResponse PayViaCreditCardWithRecurringBilling_ValidateOnly(IPTV2Entities context, System.Guid userId, CreditCardInfo info, int productId, SubscriptionProductType subscriptionType, System.Guid recipientUserId, int? cpId, int? freeProductId) { ErrorResponse resp = new ErrorResponse(); try { int regularProductId = productId; if (freeProductId != null) productId = (int)freeProductId; bool isExtension = false; bool isGift = false; if (userId != recipientUserId) isGift = true; //email metadata string packageName = String.Empty; DateTime endDt = DateTime.Now; string ProductNameBought = String.Empty; DateTime registDt = DateTime.Now; User user = context.Users.FirstOrDefault(u => u.UserId == userId); User recipient = context.Users.FirstOrDefault(u => u.UserId == recipientUserId); //UserWallet wallet = user.UserWallets.FirstOrDefault(w => w.Currency == MyUtility.GetCurrencyOrDefault(user.CountryCode)); Offering offering = context.Offerings.FirstOrDefault(o => o.OfferingId == GlobalConfig.offeringId); Product product = context.Products.FirstOrDefault(p => p.ProductId == productId); ProductPrice priceOfProduct = product.ProductPrices.FirstOrDefault(p => p.CurrencyCode == MyUtility.GetCurrencyOrDefault(user.CountryCode)); if (priceOfProduct == null) priceOfProduct = product.ProductPrices.FirstOrDefault(p => p.CurrencyCode == GlobalConfig.DefaultCurrency); if (info == null) { } if (String.IsNullOrEmpty(info.Number)) { } if (String.IsNullOrEmpty(info.CardSecurityCode)) { } if (String.IsNullOrEmpty(info.Name)) { } if (String.IsNullOrEmpty(info.StreetAddress)) { } if (String.IsNullOrEmpty(info.PostalCode)) { } DateTime expiryDate = new DateTime(info.ExpiryYear, info.ExpiryMonth, 1); DateTime currentDate = new DateTime(registDt.Year, registDt.Month, 1); if (currentDate > expiryDate) { resp.Code = (int)ErrorCodes.IsElapsedExpiryDate; resp.Message = "Please check expiry date."; return resp; } //Check if this is an upgrade if (cpId != null && cpId != 0) { bool isUpgradeSuccess = Upgrade(context, userId, product, recipientUserId, cpId); } /***************************** Check for Early Bird Promo *******************************/ bool IsEarlyBird = false; int FreeTrialConvertedDays = 0; Product earlyBirdProduct = null; ProductPrice earlyBirdPriceOfProduct = null; //REMOVE THIS LINE ON RELEASE OF EARLY BIRD. //if (false) if (GlobalConfig.IsEarlyBirdEnabled) { if (user.IsFirstTimeSubscriber(offering, true, MyUtility.StringToIntList(GlobalConfig.FreeTrialPackageIds), context)) { FreeTrialConvertedDays = GetConvertedDaysFromFreeTrial(user); earlyBirdProduct = context.Products.FirstOrDefault(p => p.ProductId == GlobalConfig.FreeTrialEarlyBirdProductId); earlyBirdPriceOfProduct = earlyBirdProduct.ProductPrices.FirstOrDefault(p => p.CurrencyCode == GlobalConfig.TrialCurrency); Purchase earlyBirdPurchase = CreatePurchase(registDt, "Free Trial Early Bird Promo"); user.Purchases.Add(earlyBirdPurchase); PurchaseItem earlyBirdItem = CreatePurchaseItem(recipientUserId, earlyBirdProduct, earlyBirdPriceOfProduct); DateTime earlyBirdEndDate = registDt.AddDays(FreeTrialConvertedDays); EntitlementRequest earlyBirdRequest = CreateEntitlementRequest(registDt, earlyBirdEndDate, earlyBirdProduct, String.Format("EBP-{0}-{1}", "CC", info.CardTypeString.Replace('_', ' ')), String.Format("EBP-{0}", info.CardTypeString.Replace('_', ' ')), registDt); PackageSubscriptionProduct earlyBirdSubscription = (PackageSubscriptionProduct)earlyBirdProduct; var earlyBirdPackage = earlyBirdSubscription.Packages.First(); PackageEntitlement EarlyBirdEntitlement = CreatePackageEntitlement(earlyBirdRequest, earlyBirdSubscription, earlyBirdPackage, registDt); earlyBirdItem.EntitlementRequest = earlyBirdRequest; earlyBirdPurchase.PurchaseItems.Add(earlyBirdItem); recipient.EntitlementRequests.Add(earlyBirdRequest); EarlyBirdEntitlement.EndDate = earlyBirdEndDate; EarlyBirdEntitlement.LatestEntitlementRequest = earlyBirdRequest; recipient.PackageEntitlements.Add(EarlyBirdEntitlement); CreditCardPaymentTransaction earlyBirdTransaction = new CreditCardPaymentTransaction() { Amount = earlyBirdPriceOfProduct.Amount, Currency = earlyBirdPriceOfProduct.CurrencyCode, Reference = String.Format("EBP-{0}", info.CardType.ToString().Replace("_", " ").ToUpper()), Date = registDt, Purchase = earlyBirdPurchase, OfferingId = GlobalConfig.offeringId, StatusId = GlobalConfig.Visible }; earlyBirdPurchase.PaymentTransaction.Add(earlyBirdTransaction); user.Transactions.Add(earlyBirdTransaction); IsEarlyBird = true; } } /************************************ END OF EARLY BIRD PROMO *************************************/ Purchase purchase = CreatePurchase(registDt, userId != recipientUserId ? "Gift via Credit Card" : "Payment via Credit Card"); user.Purchases.Add(purchase); PurchaseItem item = CreatePurchaseItem(recipientUserId, product, priceOfProduct); purchase.PurchaseItems.Add(item); CreditCardPaymentTransaction transaction = new CreditCardPaymentTransaction() { Amount = priceOfProduct.Amount, Currency = priceOfProduct.CurrencyCode, Reference = info.CardType.ToString().Replace("_", " "), Date = registDt, Purchase = purchase, OfferingId = GlobalConfig.offeringId, StatusId = GlobalConfig.Visible }; var gomsService = new GomsTfcTv(); /*** EARLY BIRD ***/ //var response = gomsService.CreateOrderViaCreditCardWithRecurringBilling(context, userId, transaction, info); var response = gomsService.ValidateCreditCard(context, userId, transaction, info, FreeTrialConvertedDays); if (response.IsSuccess) { //transaction.Reference += "-" + response.TransactionId.ToString(); //user.Transactions.Add(transaction); item.SubscriptionProduct = (SubscriptionProduct)product; switch (subscriptionType) { case SubscriptionProductType.Show: ShowSubscriptionProduct show_subscription = (ShowSubscriptionProduct)product; ProductNameBought = show_subscription.Description; /*** JAN 09 2012****/ bool isApplicableForEarlyBird = false; if (IsEarlyBird) { var AlaCarteSubscriptionType = MyUtility.StringToIntList(GlobalConfig.FreeTrialAlaCarteSubscriptionTypes); if (show_subscription.ALaCarteSubscriptionTypeId != null) if (AlaCarteSubscriptionType.Contains((int)show_subscription.ALaCarteSubscriptionTypeId)) isApplicableForEarlyBird = true; } foreach (var show in show_subscription.Categories) { ShowEntitlement currentShow = recipient.ShowEntitlements.FirstOrDefault(s => s.CategoryId == show.CategoryId); DateTime endDate = registDt; EntitlementRequest request = CreateEntitlementRequest(registDt, endDate, product, String.Format("{0}-{1}", "CC", info.CardTypeString.Replace('_', ' ')), response.TransactionId.ToString(), registDt); if (currentShow != null) { if (currentShow.EndDate > request.StartDate) request.StartDate = currentShow.EndDate; currentShow.EndDate = MyUtility.getEntitlementEndDate(show_subscription.Duration, show_subscription.DurationType, ((currentShow.EndDate > registDt) ? currentShow.EndDate : registDt)); /** JAN 09 2012 **/ if (IsEarlyBird && isApplicableForEarlyBird) { currentShow.EndDate = currentShow.EndDate.AddDays(FreeTrialConvertedDays); } endDate = currentShow.EndDate; currentShow.LatestEntitlementRequest = request; request.EndDate = endDate; endDt = endDate; isExtension = true; } else { ShowEntitlement entitlement = CreateShowEntitlement(request, show_subscription, show, registDt); request.EndDate = entitlement.EndDate; /** JAN 09 2012 **/ if (IsEarlyBird && isApplicableForEarlyBird) { entitlement.EndDate = entitlement.EndDate.AddDays(FreeTrialConvertedDays); request.EndDate = request.EndDate.AddDays(FreeTrialConvertedDays); } recipient.ShowEntitlements.Add(entitlement); endDt = entitlement.EndDate; } recipient.EntitlementRequests.Add(request); item.EntitlementRequest = request; //UPDATED: November 22, 2012 } break; case SubscriptionProductType.Package: if (product is PackageSubscriptionProduct) { PackageSubscriptionProduct subscription = (PackageSubscriptionProduct)product; foreach (var package in subscription.Packages) { packageName = package.Package.Description; ProductNameBought = packageName; PackageEntitlement currentPackage = recipient.PackageEntitlements.FirstOrDefault(p => p.PackageId == package.PackageId); DateTime endDate = registDt; EntitlementRequest request = CreateEntitlementRequest(registDt, endDate, product, String.Format("{0}-{1}", "CC", info.CardTypeString.Replace('_', ' ')), response.TransactionId.ToString(), registDt); if (currentPackage != null) { if (currentPackage.EndDate > request.StartDate) request.StartDate = currentPackage.EndDate; currentPackage.EndDate = MyUtility.getEntitlementEndDate(subscription.Duration, subscription.DurationType, ((currentPackage.EndDate > registDt) ? currentPackage.EndDate : registDt)); /** JAN 03 2012 **/ if (IsEarlyBird) { currentPackage.EndDate = currentPackage.EndDate.AddDays(FreeTrialConvertedDays); } endDate = currentPackage.EndDate; currentPackage.LatestEntitlementRequest = request; request.EndDate = endDate; endDt = endDate; isExtension = true; } else { PackageEntitlement entitlement = CreatePackageEntitlement(request, subscription, package, registDt); request.EndDate = entitlement.EndDate; /** JAN 03 2012 **/ if (IsEarlyBird) { entitlement.EndDate = entitlement.EndDate.AddDays(FreeTrialConvertedDays); request.EndDate = request.EndDate.AddDays(FreeTrialConvertedDays); } recipient.PackageEntitlements.Add(entitlement); endDt = entitlement.EndDate; } recipient.EntitlementRequests.Add(request); item.EntitlementRequest = request; //UPDATED: November 22, 2012 } } break; case SubscriptionProductType.Episode: EpisodeSubscriptionProduct ep_subscription = (EpisodeSubscriptionProduct)product; foreach (var episode in ep_subscription.Episodes) { EpisodeEntitlement currentEpisode = recipient.EpisodeEntitlements.FirstOrDefault(e => e.EpisodeId == episode.EpisodeId); DateTime endDate = registDt; EntitlementRequest request = CreateEntitlementRequest(registDt, endDate, product, String.Format("{0}-{1}", "CC", info.CardTypeString.Replace('_', ' ')), response.TransactionId.ToString(), registDt); if (currentEpisode != null) { if (currentEpisode.EndDate > request.StartDate) request.StartDate = currentEpisode.EndDate; currentEpisode.EndDate = MyUtility.getEntitlementEndDate(ep_subscription.Duration, ep_subscription.DurationType, ((currentEpisode.EndDate > registDt) ? currentEpisode.EndDate : registDt)); endDate = currentEpisode.EndDate; currentEpisode.LatestEntitlementRequest = request; request.EndDate = endDate; endDt = endDate; isExtension = true; } else { EpisodeEntitlement entitlement = CreateEpisodeEntitlement(request, ep_subscription, episode, registDt); request.EndDate = entitlement.EndDate; recipient.EpisodeEntitlements.Add(entitlement); endDt = entitlement.EndDate; } recipient.EntitlementRequests.Add(request); item.EntitlementRequest = request; //UPDATED: November 22, 2012 } break; } if (context.SaveChanges() > 0) { if (response.IsSuccess) { EnrollCreditCard(context, offering, user, registDt, info); if (freeProductId != null) { var regularProduct = context.Products.FirstOrDefault(p => p.ProductId == regularProductId); if (regularProduct != null) AddToRecurringBilling(context, regularProduct, offering, user, registDt, info); else AddToRecurringBilling(context, product, offering, user, registDt, info); PaymentHelper.logUserPromo(context, userId, GlobalConfig.Xoom2PromoId); } else AddToRecurringBilling(context, product, offering, user, registDt, info); } else { //Check if there's a currently enrolled recurring then add //if (user.HasActiveRecurringProducts(offering)) //{ // AddToRecurringBilling(context, product, offering, user, registDt, info); // response.IsCCEnrollmentSuccess = true; //} //Check if there is an enrolled credit card //Commented out. if cc enrollment fails, everything fails. //if (HasEnrolledCreditCard(offering, user)) // AddToRecurringBilling(context, product, offering, user, registDt, info); } //SendConfirmationEmails(user, recipient, transaction, ProductNameBought, product, endDt, registDt, "Credit Card", isGift, isExtension, true, (DateTime)endDt.AddDays(-4).Date); SendConfirmationEmails(user, recipient, transaction, ProductNameBought, product, endDt, registDt, "Credit Card", isGift, isExtension, response.IsSuccess, (DateTime)endDt.AddDays(-4).Date); resp.Code = (int)ErrorCodes.Success; resp.Message = "Successful"; resp.transaction = transaction; resp.product = product; resp.price = priceOfProduct; resp.ProductType = subscriptionType == SubscriptionProductType.Package ? "Subscription" : "Retail"; if (!response.IsSuccess) { resp.Message = String.Format("{0}. {1}", resp.Message, response.StatusMessage); resp.CCEnrollmentStatusMessage = "CC Enrollment Error"; } return resp; } resp.Code = (int)ErrorCodes.EntityUpdateError; resp.Message = "Entity Update Error"; return resp; } resp.Code = Convert.ToInt32(response.StatusCode); resp.Message = response.StatusMessage; if (!response.IsSuccess) { //Include CCenrollment status message in case enrolment fails. resp.CCEnrollmentStatusMessage = response.StatusMessage; } return resp; } catch (Exception) { //Debug.WriteLine(e.InnerException); throw; } }
public ActionResult _Subscription(FormCollection f) { Dictionary<string, object> collection = new Dictionary<string, object>(); collection = MyUtility.SetError(ErrorCode.UnidentifiedError, String.Empty); var email = f["EmailAddress"]; var pId = f["Product"]; var payment_mode = f["PaymentMode"]; var reference = f["Reference"]; var amt = f["Amount"]; var currency = f["Currency"]; var edt = f["EndDate"]; var OverrideDuration = MyUtility.GetCheckBoxValue(Request, "OverrideDuration"); var isRefund = MyUtility.GetCheckBoxValue(Request, "IsRefund"); var IncludeWalletLoad = MyUtility.GetCheckBoxValue(Request, "IncludeWalletLoad"); var registDt = DateTime.Now; try { int Duration = 0; string DurationType = String.Empty; DateTime endDt = registDt; if (String.IsNullOrEmpty(email) || String.IsNullOrEmpty(pId) || String.IsNullOrEmpty(payment_mode) || String.IsNullOrEmpty(reference) || String.IsNullOrEmpty(amt) || String.IsNullOrEmpty(currency)) throw new TFCtvMissingRequiredFields(); if (isRefund && OverrideDuration) throw new TFCtvUnidentifiedError("Is this a refund & Override product's duration can't be checked at the same time."); currency = currency.ToUpper(); reference = reference.ToUpper(); var context = new IPTV2Entities(); var user = context.Users.FirstOrDefault(item => item.EMail.ToLower() == email.ToLower()); if (user == null) throw new TFCtvUserDoesNotExist(); decimal amount; bool amt_result = decimal.TryParse(amt, out amount); if (!amt_result) throw new TFCtvUnidentifiedError("Unable to convert Amount to decimal. User input was invalid."); int productId; bool pId_result = Int32.TryParse(pId, out productId); if (!pId_result) throw new TFCtvUnidentifiedError("Unable to convert ProductId to Int32. User input was invalid."); if (OverrideDuration) { DateTime overridingEndDate; bool overrideDuration_result = DateTime.TryParse(edt, out overridingEndDate); if (!overrideDuration_result) throw new TFCtvUnidentifiedError("Unable to convert End Date to DateTime. User input was invalid."); } var currency_count = context.Currencies.Count(item => item.Code.ToUpper() == currency); if (currency_count == 0) throw new TFCtvUnidentifiedError("Currency does not exist on our list. User input was invalid."); if (currency != Global.TrialCurrency) if (user.Country.CurrencyCode.ToUpper() != currency) throw new TFCtvUnidentifiedError("Currency does not match current user's currency."); var offering = context.Offerings.Find(Global.OfferingId); if (user.HasPendingGomsChangeCountryTransaction(offering)) throw new TFCtvUnidentifiedError("Change in location transaction found. Please retry later."); var product = context.Products.FirstOrDefault(item => item.ProductId == productId); if (product == null) throw new TFCtvProductDoesNotExist(); if (product is SubscriptionProduct) { bool insertTransaction = false; if (product is PackageSubscriptionProduct) { var package_subscription = (PackageSubscriptionProduct)product; Duration = package_subscription.Duration; DurationType = package_subscription.DurationType; if (isRefund) //Refunding a subscription Duration *= -1; //Get Package var package = package_subscription.Packages.FirstOrDefault(); if (package == null) throw new TFCtvObjectIsNull("Package"); PackageEntitlement entitlement = null; //Check entitlement for package var package_entitlement = user.PackageEntitlements.FirstOrDefault(item => item.PackageId == package.PackageId); if (isRefund) //Refunding a subscription registDt = package_entitlement.EndDate; endDt = MyUtility.GetEntitlementEndDate(Duration, DurationType, registDt); if (package_entitlement != null) { endDt = MyUtility.GetEntitlementEndDate(Duration, DurationType, package_entitlement.EndDate > registDt ? package_entitlement.EndDate : registDt); package_entitlement.EndDate = endDt; } else { entitlement = new PackageEntitlement() { EndDate = endDt, Package = (Package)package.Package, OfferingId = Global.OfferingId, }; user.PackageEntitlements.Add(entitlement); } EntitlementRequest request = CreateEntitlementRequest(registDt, endDt, package.Product, "cPanel Settlement", reference); if (request != null) { if (entitlement != null) entitlement.LatestEntitlementRequest = request; else user.EntitlementRequests.Add(request); insertTransaction = true; } } else if (product is ShowSubscriptionProduct) { var show_subscription = (ShowSubscriptionProduct)product; Duration = show_subscription.Duration; DurationType = show_subscription.DurationType; if (isRefund) //Refuding a subscription Duration *= -1; //Get Show var category = show_subscription.Categories.FirstOrDefault(); if (category == null) throw new TFCtvObjectIsNull("Category"); ShowEntitlement entitlement = null; //Check entitlement for Category/Show var show_entitlement = user.ShowEntitlements.FirstOrDefault(item => item.CategoryId == category.CategoryId); if (isRefund) //Refunding a subscription registDt = show_entitlement.EndDate; endDt = MyUtility.GetEntitlementEndDate(Duration, DurationType, registDt); if (show_entitlement != null) { endDt = MyUtility.GetEntitlementEndDate(Duration, DurationType, show_entitlement.EndDate > registDt ? show_entitlement.EndDate : registDt); show_entitlement.EndDate = endDt; } else { entitlement = new ShowEntitlement() { EndDate = endDt, Show = category.Show, OfferingId = Global.OfferingId, }; user.ShowEntitlements.Add(entitlement); } EntitlementRequest request = CreateEntitlementRequest(registDt, endDt, category.Product, "cPanel Settlement", reference); if (request != null) { if (entitlement != null) entitlement.LatestEntitlementRequest = request; else user.EntitlementRequests.Add(request); insertTransaction = true; } } else if (product is EpisodeSubscriptionProduct) { var episode_subscription = (EpisodeSubscriptionProduct)product; Duration = episode_subscription.Duration; DurationType = episode_subscription.DurationType; if (isRefund) //Refuding a subscription Duration *= -1; //Get Episode var episode = episode_subscription.Episodes.FirstOrDefault(); if (episode == null) throw new TFCtvObjectIsNull("Episode"); EpisodeEntitlement entitlement = null; //Check entitlement for Category/Show var episode_entitlement = user.EpisodeEntitlements.FirstOrDefault(item => item.EpisodeId == episode.EpisodeId); if (isRefund) //Refunding a subscription registDt = episode_entitlement.EndDate; endDt = MyUtility.GetEntitlementEndDate(Duration, DurationType, registDt); if (episode_entitlement != null) { endDt = MyUtility.GetEntitlementEndDate(Duration, DurationType, episode_entitlement.EndDate > registDt ? episode_entitlement.EndDate : registDt); episode_entitlement.EndDate = endDt; } else { entitlement = new EpisodeEntitlement() { EndDate = endDt, Episode = episode.Episode, OfferingId = Global.OfferingId, }; user.EpisodeEntitlements.Add(entitlement); } EntitlementRequest request = CreateEntitlementRequest(registDt, endDt, episode.Product, "cPanel Settlement", reference); if (request != null) { if (entitlement != null) entitlement.LatestEntitlementRequest = request; else user.EntitlementRequests.Add(request); insertTransaction = true; } } //Create Purchase & Purchase Items Purchase purchase = null; //CreatePurchase(registDt, "Settlement"); PurchaseItem purchase_item = null; //CreatePurchaseItem(user.UserId, product, amount, currency); //user.Purchases.Add(purchase); //user.PurchaseItems.Add(purchase_item); //Insert transaction if (insertTransaction) { switch (Convert.ToInt32(payment_mode)) { case 1: // Prepaid Card purchase = CreatePurchase(registDt, "Settlement via Prepaid Card"); user.Purchases.Add(purchase); purchase_item = CreatePurchaseItem(user.UserId, product, amount, currency); purchase.PurchaseItems.Add(purchase_item); Ppc Ppc = context.Ppcs.FirstOrDefault(item => item.SerialNumber.ToUpper() == reference); if (Ppc == null) throw new TFCtvObjectIsNull("Prepaid Card"); if (!(Ppc is SubscriptionPpc)) throw new TFCtvEntityFrameworkError("Prepaid Card is not of type: Subscription."); PpcPaymentTransaction pTransaction = new PpcPaymentTransaction() { Currency = currency, Reference = reference, Amount = Convert.ToDecimal(amount), Product = product, Purchase = purchase, SubscriptionPpc = (SubscriptionPpc)Ppc, Date = registDt, OfferingId = Global.OfferingId }; user.Transactions.Add(pTransaction); break; case 2: // E-Wallet purchase = CreatePurchase(registDt, "Settlement via Wallet"); user.Purchases.Add(purchase); purchase_item = CreatePurchaseItem(user.UserId, product, amount, currency); purchase.PurchaseItems.Add(purchase_item); var wallet = user.UserWallets.FirstOrDefault(item => item.IsActive == true); if (IncludeWalletLoad) wallet.Balance += amount; WalletPaymentTransaction wTransaction = new WalletPaymentTransaction() { Currency = currency, Reference = reference, Amount = Convert.ToDecimal(amount), Date = registDt, User = user, OfferingId = Global.OfferingId }; user.Transactions.Add(wTransaction); wallet.WalletPaymentTransactions.Add(wTransaction); break; case 3: // Credit Card purchase = CreatePurchase(registDt, "Settlement via Credit Card"); user.Purchases.Add(purchase); purchase_item = CreatePurchaseItem(user.UserId, product, Convert.ToDecimal(amount), currency); purchase.PurchaseItems.Add(purchase_item); CreditCardPaymentTransaction cTransaction = new CreditCardPaymentTransaction() { Amount = Convert.ToDecimal(amount), Currency = currency, Reference = reference, Date = registDt, Purchase = purchase, OfferingId = Global.OfferingId }; user.Transactions.Add(cTransaction); break; case 4: // Paypal purchase = CreatePurchase(registDt, "Settlement via Paypal"); user.Purchases.Add(purchase); purchase_item = CreatePurchaseItem(user.UserId, product, Convert.ToDecimal(amount), currency); purchase.PurchaseItems.Add(purchase_item); PaypalPaymentTransaction ppTransaction = new PaypalPaymentTransaction() { Currency = currency, Reference = reference, Amount = Convert.ToDecimal(amount), User = user, Date = registDt, OfferingId = Global.OfferingId }; user.Transactions.Add(ppTransaction); break; case 5: // Migration MigrationTransaction mTransaction = new MigrationTransaction() { }; user.Transactions.Add(mTransaction); break; default: break; } if (context.SaveChanges() > 0) { collection = MyUtility.SetError(ErrorCode.Success, "You have successfully settled a complaint."); // Success } } } } catch (TFCtvException e) { collection = MyUtility.SetError(e.StatusCode, e.StatusMessage); } catch (Exception e) { collection = MyUtility.SetError(ErrorCode.UnidentifiedError, e.Message); } return Content(MyUtility.BuildJSON(collection), "application/json"); }