public static void DeleteCustomerBankAccount(int customerID, ExigoService.BankAccountType type)
        {
            // If this is a new credit card, don't delete it - we have nothing to delete
            if (type == ExigoService.BankAccountType.New) return;

            // Save the a blank copy of the bank account
            // Save the bank account
            var request = new SetAccountCheckingRequest
            {
                CustomerID = customerID,

                BankName = string.Empty,
                BankAccountNumber = string.Empty,
                BankRoutingNumber = string.Empty,
                BankAccountType = Common.Api.ExigoWebService.BankAccountType.CheckingPersonal,

                NameOnAccount = string.Empty,
                BillingAddress = string.Empty,
                BillingCity = string.Empty,
                BillingState = string.Empty,
                BillingZip = string.Empty,
                BillingCountry = string.Empty
            };
            var response = Exigo.WebService().SetAccountChecking(request);
        }
Esempio n. 2
0
        private static IEnumerable<ExigoService.CalendarEvent> GetCalendarRecurringEventInstances(List<ExigoService.CalendarEvent> instances, ExigoService.CalendarEvent recurringEvent, GetCalendarEventsRequest request, int instanceAttempts = 0)
        {
            // Set some variables for easier access
            if (recurringEvent.CalendarEventRecurrenceTypeID == null) return instances;
            var recurrenceTypeID = (int)recurringEvent.CalendarEventRecurrenceTypeID;
            var recurrenceInterval = (int)recurringEvent.CalendarEventRecurrenceInterval;

            // Before we do anything, validate that our start date is valid based on its recurrence settings
            // Weekly recurrence validations
            if (recurrenceTypeID == 2)
            {
                var indexInList = recurringEvent.WeeklyCalendarEventRecurrenceDaysInWeek.IndexOf(recurringEvent.StartDate.DayOfWeek);

                // If the start date's day of week doesn't match any of the available days in the week,
                // we need to make an adjustment to the start date and restart the method.
                if (indexInList == -1)
                {
                    instanceAttempts--;
                    var daysToAdjust = 0;

                    foreach (var day in recurringEvent.WeeklyCalendarEventRecurrenceDaysInWeek)
                    {
                        if ((int)day > (int)recurringEvent.StartDate.DayOfWeek)
                        {
                            daysToAdjust = (int)day - (int)recurringEvent.StartDate.DayOfWeek;
                            recurringEvent.StartDate = recurringEvent.StartDate.AddDays(daysToAdjust);
                            recurringEvent.EndDate = recurringEvent.EndDate.AddDays(daysToAdjust);
                            break;
                        }
                    }

                    // If we didn't find a day in the week that follows the current day, advance to the first available day in the next week
                    if (daysToAdjust == 0)
                    {
                        daysToAdjust = 7 - ((int)recurringEvent.StartDate.DayOfWeek - (int)recurringEvent.WeeklyCalendarEventRecurrenceDaysInWeek.First());
                        recurringEvent.StartDate = recurringEvent.StartDate.AddDays(daysToAdjust);
                        recurringEvent.EndDate = recurringEvent.EndDate.AddDays(daysToAdjust);
                    }
                    return GetCalendarRecurringEventInstances(instances, recurringEvent, request, instanceAttempts);
                }
            }

            // Add an instance of this recurring event if applicable
            if (recurringEvent.StartDate >= request.StartDate && recurringEvent.StartDate < request.EndDate)
            {
                // Create and add the instance
                var instance = GlobalUtilities.Extend(recurringEvent, new ExigoService.CalendarEvent());
                instance.IsRecurringEventInstance = true;
                instances.Add(instance);
            }

            // Increment the amount of instances attempted
            instanceAttempts++;

            // If we have the maximum number of instances, stop creating instances and return the collection
            if (recurringEvent.CalendarEventRecurrenceMaxInstances != null && instanceAttempts >= (int)recurringEvent.CalendarEventRecurrenceMaxInstances)
            {
                return instances;
            }

            // Increment the period of time based on the recurrence type.
            switch (recurrenceTypeID)
            {
                // Daily
                case 1:
                    recurringEvent.StartDate = recurringEvent.StartDate.AddDays(1 * recurrenceInterval);
                    recurringEvent.EndDate = recurringEvent.EndDate.AddDays(1 * recurrenceInterval);
                    break;

                // Weekly
                case 2:
                    // Determine if we are repeating this event more than once per week.
                    // If this event only occurs once per week, just add another week.
                    if (recurringEvent.WeeklyCalendarEventRecurrenceDaysInWeek.Count == 1)
                    {
                        recurringEvent.StartDate = recurringEvent.StartDate.AddDays(7 * recurrenceInterval);
                        recurringEvent.EndDate = recurringEvent.EndDate.AddDays(7 * recurrenceInterval);
                    }

                    // If this event occurs more than once in a week, let's ensure that we advance the dates appropriately.
                    else
                    {
                        var indexInList = recurringEvent.WeeklyCalendarEventRecurrenceDaysInWeek.IndexOf(recurringEvent.UtcStartDate.DayOfWeek);

                        // If we are on the last day in the list, skip ahead to the front of the list
                        var daysToAdvance = 0;
                        if (indexInList == (recurringEvent.WeeklyCalendarEventRecurrenceDaysInWeek.Count - 1))
                        {
                            daysToAdvance = (7 - ((int)recurringEvent.StartDate.DayOfWeek - (int)recurringEvent.WeeklyCalendarEventRecurrenceDaysInWeek.First())) + (7 * (recurrenceInterval - 1));
                        }
                        // Otherwise, add the number of days between the current start date and the next day in the week.
                        else
                        {
                            daysToAdvance = ((int)recurringEvent.WeeklyCalendarEventRecurrenceDaysInWeek[indexInList + 1]) - ((int)recurringEvent.WeeklyCalendarEventRecurrenceDaysInWeek[indexInList]);
                        }

                        recurringEvent.StartDate = recurringEvent.StartDate.AddDays(daysToAdvance);
                        recurringEvent.EndDate = recurringEvent.EndDate.AddDays(daysToAdvance);
                    }
                    break;

                // Monthly
                case 3:
                    var monthlyRecurringTypeID = (int)recurringEvent.MonthlyCalendarEventRecurrenceTypeID;
                    switch (monthlyRecurringTypeID)
                    {
                        // Day of the month
                        case 1:
                            recurringEvent.StartDate = recurringEvent.StartDate.AddMonths(1 * recurrenceInterval);
                            recurringEvent.EndDate = recurringEvent.EndDate.AddMonths(1 * recurrenceInterval);
                            break;

                        // Day of the week (ie. second Tuesday of the month)
                        case 2:
                            // Determine which week and day the current start date is in
                            var dayOfWeek = recurringEvent.StartDate.DayOfWeek;
                            var nthWeek = 1;
                            var checkingDate = recurringEvent.StartDate.BeginningOfMonth().Next(dayOfWeek);
                            while (recurringEvent.StartDate != checkingDate)
                            {
                                checkingDate.AddDays(7);
                                nthWeek++;
                            }

                            var nextMonth = recurringEvent.StartDate.AddMonths(1 * recurrenceInterval).BeginningOfMonth();
                            var timeDifference = recurringEvent.EndDate.Subtract(recurringEvent.StartDate);

                            recurringEvent.StartDate = GlobalUtilities.GetNthWeekofMonth(nextMonth, nthWeek, dayOfWeek);
                            recurringEvent.EndDate = recurringEvent.StartDate.Add(timeDifference);
                            break;
                    }
                    break;

                // Yearly
                case 4:
                    recurringEvent.StartDate = recurringEvent.StartDate.AddYears(1 * recurrenceInterval);
                    recurringEvent.EndDate = recurringEvent.EndDate.AddYears(1 * recurrenceInterval);
                    break;
            }

            // If we have exceeded the maximum recurrence end date, stop creating instances and return the collection
            if (recurringEvent.CalendarEventRecurrenceEndDate != null && (DateTime)recurringEvent.CalendarEventRecurrenceEndDate < recurringEvent.StartDate)
            {
                return instances;
            }

            // If our new start date has exceeded the range of the original request, stop creating instances and return the collection
            if (recurringEvent.StartDate > request.EndDate)
            {
                return instances;
            }

            return GetCalendarRecurringEventInstances(instances, recurringEvent, request, instanceAttempts);
        }
Esempio n. 3
0
        public static ExigoService.CalendarEvent SaveCalendarEvent(ExigoService.CalendarEvent model)
        {
            try
            {
                // Create our context
                var context = Exigo.ODataCalendars();

                // Convert our model to the event
                var odataCalendarEvent = (CalendarContext.CalendarEvent)model;

                // Check to see if we are creating a new event, or changing an existing
                if (odataCalendarEvent.CalendarEventID == Guid.Empty)
                {
                    odataCalendarEvent.CalendarEventID = Guid.NewGuid();
                    context.AddToCalendarEvents(odataCalendarEvent);
                }
                else
                {
                    context.AttachTo("CalendarEvents", odataCalendarEvent);
                    context.UpdateObject(odataCalendarEvent);
                }

                // Save the event
                context.SaveChanges();

                // Set the new calendar event ID
                model.CalendarEventID = odataCalendarEvent.CalendarEventID;

                return model;
            }
            catch (Exception)
            {
                throw;
            }
        }
        public ActionResult ManageBankAccount(ExigoService.BankAccountType type)
        {
            var model = Exigo.GetCustomerPaymentMethods(Identity.Customer.CustomerID)
                .Where(c => c is BankAccount && ((BankAccount)c).Type == type)
                .FirstOrDefault();

            // Clear out the account number
            ((BankAccount)model).AccountNumber = "";

            return View("ManageBankAccount", model);
        }
        public ActionResult DeleteBankAccount(ExigoService.BankAccountType type)
        {
            Exigo.DeleteCustomerBankAccount(Identity.Customer.CustomerID, type);

            return RedirectToAction("PaymentMethodList");
        }
        public static BankAccount SetCustomerBankAccount(int customerID, BankAccount account, ExigoService.BankAccountType type)
        {
            // New bank accounts
            if (type == ExigoService.BankAccountType.New)
            {
                return SaveNewCustomerBankAccount(customerID, account);
            }

            // Save the bank account
            var request = new SetAccountCheckingRequest
            {
                CustomerID = customerID,

                BankName = account.BankName,
                BankAccountNumber = account.AccountNumber,
                BankRoutingNumber = account.RoutingNumber,
                BankAccountType = Common.Api.ExigoWebService.BankAccountType.CheckingPersonal,

                NameOnAccount = account.NameOnAccount,
                BillingAddress = account.BillingAddress.AddressDisplay,
                BillingCity = account.BillingAddress.City,
                BillingState = account.BillingAddress.State,
                BillingZip = account.BillingAddress.Zip,
                BillingCountry = account.BillingAddress.Country
            };
            var response = Exigo.WebService().SetAccountChecking(request);

            return account;
        }
        public ActionResult UseBankAccountOnFile(ExigoService.BankAccountType type)
        {
            var paymentMethod = Exigo.GetCustomerPaymentMethods(new GetCustomerPaymentMethodsRequest
            {
                CustomerID = Identity.Customer.CustomerID,
                ExcludeIncompleteMethods = true,
                ExcludeInvalidMethods = true
            }).Where(c => c is BankAccount && ((BankAccount)c).Type == type).FirstOrDefault();

            return UsePaymentMethod(paymentMethod);
        }