public override bool Execute(OrderTaskContext context) { bool result = true; foreach (Orders.OrderTransaction p in context.MTApp.OrderServices.Transactions.FindForOrder(context.Order.bvin)) { List <Orders.OrderTransaction> transactions = context.MTApp.OrderServices.Transactions.FindForOrder(context.Order.bvin); if (p.Action == MerchantTribe.Payment.ActionType.CreditCardInfo || p.Action == MerchantTribe.Payment.ActionType.CreditCardHold) { // if we already have an auth or charge on the card, skip if (p.HasSuccessfulLinkedAction(MerchantTribe.Payment.ActionType.CreditCardCharge, transactions) || p.HasSuccessfulLinkedAction(MerchantTribe.Payment.ActionType.CreditCardHold, transactions)) { continue; } try { MerchantTribe.Payment.Transaction t = context.Order.GetEmptyTransaction(); t.Card = p.CreditCard; t.Amount = p.Amount; if (p.Action == MerchantTribe.Payment.ActionType.CreditCardHold) { t.Action = MerchantTribe.Payment.ActionType.CreditCardCapture; } else { t.Action = MerchantTribe.Payment.ActionType.CreditCardCharge; } MerchantTribe.Payment.Method proc = context.MTApp.CurrentRequestContext.CurrentStore.Settings.PaymentCurrentCreditCardProcessor(); proc.ProcessTransaction(t); Orders.OrderTransaction ot = new Orders.OrderTransaction(t); ot.LinkedToTransaction = p.IdAsString; context.MTApp.OrderServices.AddPaymentTransactionToOrder(context.Order, ot, context.MTApp); if (t.Result.Succeeded == false) { result = false; } } catch (Exception ex) { context.Errors.Add(new WorkflowMessage("Exception During Complete Credit Card", ex.Message + ex.StackTrace, false)); } } Orders.OrderPaymentStatus previousPaymentStatus = context.Order.PaymentStatus; context.MTApp.OrderServices.EvaluatePaymentStatus(context.Order); context.Inputs.Add("bvsoftware", "PreviousPaymentStatus", previousPaymentStatus.ToString()); BusinessRules.Workflow.RunByName(context, WorkflowNames.PaymentChanged); } return(result); }
public Transaction ChargeCardForInvoice(Invoice inv, MerchantTribe.Payment.Method method) { Transaction t = new Transaction(); t.Action = MerchantTribe.Payment.ActionType.CreditCardCharge; if (inv != null) { BillingAccount account = Accounts.FindById(inv.AccountId); if (account != null) { if (!account.HasValidCreditCard(DateTime.Now)) { t.Messages += "Billing Account does not have a valid credit card on file."; } else { t.AccountId = inv.AccountId; t.InvoiceReference = inv.Id.ToString(); MerchantTribe.Payment.Transaction payTrans = new MerchantTribe.Payment.Transaction(); payTrans.Action = MerchantTribe.Payment.ActionType.CreditCardCharge; payTrans.Amount = inv.TotalGrand(); payTrans.Card = account.CreditCard; payTrans.Customer.PostalCode = account.BillingZipCode; payTrans.MerchantDescription = "BV Software"; payTrans.MerchantInvoiceNumber = inv.Id.ToString(); method.ProcessTransaction(payTrans); t.PopulateFromPaymentTransaction(payTrans); } } else { t.Messages += "Billing Account could not be located"; } } else { t.Messages += "Invoice was null."; } t = Transactions.CreateAndLoad(t); return(t); }
public override bool Execute(OrderTaskContext context) { bool result = true; if (context.MTApp.OrderServices.PaymentSummary(context.Order).AmountDue > 0) { foreach (Orders.OrderTransaction p in context.MTApp.OrderServices.Transactions.FindForOrder(context.Order.bvin)) { List <Orders.OrderTransaction> transactions = context.MTApp.OrderServices.Transactions.FindForOrder(context.Order.bvin); if (p.Action == MerchantTribe.Payment.ActionType.CreditCardInfo) { // if we already have an auth or charge on the card, skip if (p.HasSuccessfulLinkedAction(MerchantTribe.Payment.ActionType.CreditCardCharge, transactions) || p.HasSuccessfulLinkedAction(MerchantTribe.Payment.ActionType.CreditCardHold, transactions)) { Orders.OrderNote note = new Orders.OrderNote(); note.IsPublic = false; note.Note = "Skipping receive for credit card info because auth or charge already exists. Transaction " + p.Id; context.Order.Notes.Add(note); continue; } try { MerchantTribe.Payment.Transaction t = context.Order.GetEmptyTransaction(); t.Card = p.CreditCard; t.Amount = p.Amount; if (context.MTApp.CurrentRequestContext.CurrentStore.Settings.PaymentCreditCardAuthorizeOnly == true) { t.Action = MerchantTribe.Payment.ActionType.CreditCardHold; } else { t.Action = MerchantTribe.Payment.ActionType.CreditCardCharge; } MerchantTribe.Payment.Method proc = context.MTApp.CurrentRequestContext.CurrentStore.Settings.PaymentCurrentCreditCardProcessor(); proc.ProcessTransaction(t); Orders.OrderTransaction ot = new Orders.OrderTransaction(t); ot.LinkedToTransaction = p.IdAsString; context.MTApp.OrderServices.AddPaymentTransactionToOrder(context.Order, ot, context.MTApp); if (t.Result.Succeeded == false) { result = false; } } catch (Exception ex) { context.Errors.Add(new WorkflowMessage("Exception During Receive Credit Card", ex.Message + ex.StackTrace, false)); Orders.OrderNote note = new Orders.OrderNote(); note.IsPublic = false; note.Note = "EXCEPTION: " + ex.Message + " | " + ex.StackTrace; context.Order.Notes.Add(note); } } } // Evaluate Payment Status After Receiving Payments Orders.OrderPaymentStatus previousPaymentStatus = context.Order.PaymentStatus; context.MTApp.OrderServices.EvaluatePaymentStatus(context.Order); context.Inputs.Add("bvsoftware", "PreviousPaymentStatus", previousPaymentStatus.ToString()); BusinessRules.Workflow.RunByName(context, WorkflowNames.PaymentChanged); } else { Orders.OrderNote note = new Orders.OrderNote(); note.IsPublic = false; note.Note = "Amount due was less than zero. Skipping receive credit cards"; context.Order.Notes.Add(note); } if (result == false) { // Add Error bool throwErrors = false; throwErrors = context.MTApp.CurrentRequestContext.CurrentStore.Settings.RejectFailedCreditCardOrdersAutomatically; if (throwErrors == true) { if (result == false) { string errorString = string.Empty; // this.SettingsManager.GetSetting("CustomerErrorMessage"); if (errorString == string.Empty) { errorString = "An error occured while attempting to process your credit card. Please check your payment information and try again"; } context.Errors.Add(new WorkflowMessage("Receive Card Failed", errorString, true)); } } else { // Hide Error result = true; } // Failure Status Code bool SetStatus = false; SetStatus = true; // this.SettingsManager.GetBooleanSetting("SetStatusOnFail"); if (SetStatus == true) { string failCode = Orders.OrderStatusCode.OnHold; Orders.OrderStatusCode c = Orders.OrderStatusCode.FindByBvin(failCode); if (c != null) { context.Order.StatusCode = c.Bvin; context.Order.StatusName = c.StatusName; } } } return(result); }