public LoanRecoveryEstimatedRecoveryReport(int loanRequestId,
     string CURP,
     string names,
     string lastName,
     string secondLastName,
     Address address,
     ContactInformation contactInformation,
     string trackingCode,
     UInt64 internalTrackingCode,
     int loanId,
     int interestRateId,
     AmortizationPaymentFrequencyType amortizationFrequency,
     int numberOfAmortizations,
     DateTime authorizationDate,
     int paymentNumber)
 {
     this._loanRequestId = loanRequestId;
     this._curp = CURP;
     this._names = names;
     this._lastName = lastName;
     this._secondLastName = secondLastName;
     this._address = address;
     this._contactInformation = contactInformation;
     this._trackingCode = trackingCode;
     this._internalTrackingCode = internalTrackingCode;
     this._loanId = loanId;
     this._interestRateId = interestRateId;
     this._amortizationFrequency = amortizationFrequency;
     this._numberOfAmortizations = numberOfAmortizations;
     this._authorizationDate = Convert.ToDateTime(authorizationDate);
     this._paymentNumber = paymentNumber;
 }
예제 #2
0
        /// <summary>
        /// Adds the payment dates to a given Amortization Table. This function takes
        /// into consideration the holidays of the given country as well as weekend days.
        /// </summary>
        /// <param name="amortizationTable">Amortization table to which dates will be added</param>
        /// <param name="startDate">Date from where the loan is valid. All payments will be 
        /// calculated taking this date as the base
        /// </param>
        /// <param name="frequency">Payment frequency</param>
        /// <param name="country">Country from which holidays need to be accounted for</param>
        /// <remarks>The First payment will be calculated after the StartDate from the Amortization. 
        /// The Amortization object will be modified inside this function.</remarks>
        public void AddAmortizationPaymentDates(AmortizationTable amortizationTable,
            DateTime startDate,
            AmortizationPaymentFrequencyType frequency,
            Country country)
        {
            /* Calculate the amortizations first without
            * taking into account the holidays or weekends */
            foreach (AmortizationEntry entry in amortizationTable)
            {
                entry.Date = GetPaymentDate (startDate, frequency, entry.Number);
            }

            /* Now verify all dates are working days */
            VerifyWorkingDates (amortizationTable, country);
        }
예제 #3
0
 public FlatInterestAmortization(decimal amount,
     int numberOfPayments,
     AmortizationPaymentFrequencyType frequency,
     decimal anualInterest,
     int gracePeriod,
     DateTime startDate,
     decimal tax)
     : base(amount,
         numberOfPayments,
         frequency,
         anualInterest,
         gracePeriod,
         startDate,
         tax)
 {
 }
예제 #4
0
 public Amortization(decimal amount, 
     int numberOfPayments,
     AmortizationPaymentFrequencyType frequency,
     decimal anualInterest,
     int gracePeriod,
     DateTime startDate,
     decimal tax)
 {
     this._amount = amount;
     this._numberOfPayments = numberOfPayments;
     this._paymentFrequency = frequency;
     this._anualInterest = anualInterest;
     this._gracePeriod = gracePeriod;
     this._startDate = startDate;
     this._tax = tax;
 }
예제 #5
0
 /// <summary>
 /// Creates an Amortization object depending on the passed parameter.
 /// </summary>
 /// <param name="amortizationType">Type of amortization to be created</param>
 /// <returns>Returns an Amortization object.</returns>
 public Amortization CreateAmortization(AmortizationType amortizationType,
     decimal amount,
     int numberOfPayments,
     AmortizationPaymentFrequencyType frequency,
     decimal anualInterest,
     int gracePeriod,
     DateTime startDate,
     decimal tax)
 {
     //Creates the necessary object depending on the parameter
     //Commented lines to be added in the future as soon as their
     //respective classes are created.
     switch (amortizationType)
     {
         case AmortizationType.CapitalConstante:
             return new ConstantPrincipalAmortization (amount,
                                                       numberOfPayments,
                                                       frequency,
                                                       anualInterest,
                                                       gracePeriod,
                                                       startDate,
                                                       tax);
         case AmortizationType.InteresFlat:
             return new FlatInterestAmortization (amount,
                                                  numberOfPayments,
                                                  frequency,
                                                  anualInterest,
                                                  gracePeriod,
                                                  startDate,
                                                  tax);
         case AmortizationType.Renta:
             return new RentAmortization (amount,
                                          numberOfPayments,
                                          frequency,
                                          anualInterest,
                                          gracePeriod,
                                          startDate,
                                          tax);
         default:
             return null;
     }
 }
예제 #6
0
        /// <summary>
        /// Gets the payment number date.
        /// </summary>
        /// <param name="startDate">The start date.</param>
        /// <param name="paymentNumber">The payment number.</param>
        /// <param name="frequency">The frequency.</param>
        /// <param name="country">The country.</param>
        public DateTime GetPaymentNumberDate(DateTime startDate,
            int paymentNumber,
            AmortizationPaymentFrequencyType frequency,
            Country country)
        {
            /* Date to return */
            DateTime? paymentDate = null;

            IList<AmortizationEntry> entries = new List<AmortizationEntry> ();

            /* Perform calculations for all payments before the
            * requested payment in case there was days shifted
            * before the paymentNumber required */
            for (int i = 1; i <= paymentNumber; i++)
            {
                paymentDate = GetPaymentDate (startDate, frequency, i);
                AmortizationEntry entry = new AmortizationEntry ();
                entry.Number = i;
                entry.Date = Convert.ToDateTime (paymentDate);
                entries.Add (entry);
            }

            AmortizationTable amortTable = new AmortizationTable (entries);

            /* Now verify all dates are working days */
            VerifyWorkingDates (amortTable, country);

            /* Now get the the actual date */
            foreach (AmortizationEntry entry in amortTable)
            {
                if (entry.Number == paymentNumber)
                {
                    paymentDate = entry.Date;
                    break;
                }
            }

            return Convert.ToDateTime (paymentDate);
        }
예제 #7
0
        /// <summary>
        /// Converts the Anual interest to an equivalent depending on the chosen payment frequency
        /// </summary>
        /// <param name="anualInterest">Anual interest to be converted</param>
        /// <param name="paymentFrequency">Payment frequency to be used for the conversion</param>
        /// <returns>Converted interest</returns>
        private decimal ConvertAnualInterestToCalculationInterest(
            decimal anualInterest,
            AmortizationPaymentFrequencyType paymentFrequency)
        {
            decimal convertedInterest = 0m;
            switch (paymentFrequency)
            {
                case AmortizationPaymentFrequencyType.Diario:
                    convertedInterest = anualInterest / 360;
                    break;
                case AmortizationPaymentFrequencyType.Semanal:
                    convertedInterest = anualInterest / 52;
                    break;
                case AmortizationPaymentFrequencyType.Catorcenal:
                    convertedInterest = anualInterest / 26;
                    break;
                case AmortizationPaymentFrequencyType.Quincenal:
                    convertedInterest = anualInterest / 24;
                    break;
                case AmortizationPaymentFrequencyType.VeinteDias:
                    convertedInterest = anualInterest / 18;
                    break;
                case AmortizationPaymentFrequencyType.VeintiochoDias:
                    convertedInterest = anualInterest / 13;
                    break;
                case AmortizationPaymentFrequencyType.Mensual:
                    convertedInterest = anualInterest / 12;
                    break;
                case AmortizationPaymentFrequencyType.Bimestral:
                    convertedInterest = anualInterest / 6;
                    break;
                case AmortizationPaymentFrequencyType.Trimestral:
                    convertedInterest = anualInterest / 4;
                    break;
                case AmortizationPaymentFrequencyType.Cuatrimestral:
                    convertedInterest = anualInterest / 3;
                    break;
                case AmortizationPaymentFrequencyType.Semestral:
                    convertedInterest = anualInterest / 2;
                    break;
                case AmortizationPaymentFrequencyType.Anual:
                    convertedInterest = anualInterest / 1;
                    break;
            }

            return convertedInterest;
        }
예제 #8
0
 /// <summary>
 /// Returns a number of Days that need to be added for each payment
 /// based on a given frequency.
 /// </summary>
 /// <param name="frequency">Frequency on which payments are made</param>
 /// <returns>Number of days equivalent to the payment frequency</returns>
 private int GetPaymentFrequencyEquivalentInDays(AmortizationPaymentFrequencyType frequency)
 {
     switch (frequency)
     {
         case AmortizationPaymentFrequencyType.Diario:
             return 1;
         case AmortizationPaymentFrequencyType.Semanal:
             return 7;
         case AmortizationPaymentFrequencyType.Catorcenal:
             return 14;
         case AmortizationPaymentFrequencyType.Quincenal:
             return 15;
         case AmortizationPaymentFrequencyType.VeinteDias:
             return 20;
         case AmortizationPaymentFrequencyType.VeintiochoDias:
             return 28;
         case AmortizationPaymentFrequencyType.Mensual:
             return 30;
         case AmortizationPaymentFrequencyType.Bimestral:
             return 60;
         case AmortizationPaymentFrequencyType.Trimestral:
             return 90;
         case AmortizationPaymentFrequencyType.Cuatrimestral:
             return 120;
         case AmortizationPaymentFrequencyType.Semestral:
             return 180;
         case AmortizationPaymentFrequencyType.Anual:
             return 360;
         default:
             return -1;
     }
 }
예제 #9
0
        /// <summary>
        /// Calculates the payment date based on the given parameters. 
        /// </summary>
        /// <param name="startDate">Start Date. The first payment will be calculated after this 
        /// date.</param>
        /// <param name="frequency">How often payments are made</param>
        /// <param name="paymentNumber">Payment number from which a Date is needed</param>
        /// <returns>Date in which a given payment should be made</returns>
        private DateTime GetPaymentDate(DateTime startDate,
            AmortizationPaymentFrequencyType frequency,
            int paymentNumber)
        {
            int daysToAdd = 0;

            daysToAdd = GetPaymentFrequencyEquivalentInDays (frequency);
            daysToAdd = daysToAdd * paymentNumber;

            DateTime paymentDate = startDate.AddDays (daysToAdd);

            return paymentDate;
        }