public bool ProcessDisbursement(DisbursementRequest disReq)
    {
        List <Tuple <int, int> > items = new List <Tuple <int, int> >();

        disReq.Items.ForEach(val => items.Add(new Tuple <int, int>(val.ItemId, val.DisbursedQty)));
        return(new DisbursementController().ProcessDisbursement(disReq.DisbId, disReq.Key, disReq.ReceivedBy, items));
    }
예제 #2
0
        public async Task <IActionResult> EquatedMonthlyInstallment(DisbursementRequest disbursement)
        {
            if (!ModelState.IsValid)
            {
                return(View());
            }

            await _business.SaveDistursement(disbursement);

            return(View(disbursement));
        }
예제 #3
0
        /// <summary>
        /// passes Disbursement details to repository to save
        /// </summary>
        /// <param name="disbursement"></param>
        /// <returns>number of roles affected</returns>
        public async Task <int> SaveDistursement(DisbursementRequest disbursement)
        {
            var code = await _disbursementRepository.GetCustomerCodeAsync();

            // compute/generate Customer Code
            var cus_Code = code >= 1 ? code + 1 : 1;

            var entity = new Disbursement_Dtl
            {
                Cust_Code   = cus_Code,
                Cust_Name   = disbursement.Cust_Name,
                Disb_Date   = disbursement.Disb_Date,
                Disb_Amount = disbursement.Disb_Amount,
                Int_Rate    = disbursement.Int_Rate,
                Months      = disbursement.Months,
                EMS_St_Date = disbursement.EMS_St_Date
            };

            return(await _disbursementRepository.AddDisbursementAsync(entity));
        }
예제 #4
0
        /// <summary>
        /// Generate schedule
        /// </summary>
        /// <param name="disbursement"></param>
        /// <returns>List of schedules</returns>
        public async Task <IList <ScheduleResponse> > GenerateSchechule(DisbursementRequest disbursement)
        {
            var schedules = new List <ScheduleResponse>();

            if (disbursement == null)
            {
                return(schedules);
            }

            var Cust_Code = await _disbursementRepository.GetCustomerCodeAsync();

            for (var i = 1; i <= disbursement.Months; i++)
            {
                var schedule = new ScheduleResponse();
                //compute SL_NO
                var sNo            = Cust_Code + i;
                var currentBalance = 0F;

                schedule.Cust_Code = Cust_Code;
                schedule.EMI_Date  = disbursement.EMS_St_Date;

                schedule.Total_Amount = schedules.Count == 0 ? disbursement.Disb_Amount : schedules.Sum(x => x.Total_Amount);

                if (schedules.Count > 0)
                {
                    currentBalance = (float)PrincipalAmount(schedules, sNo).Item2;
                }

                schedule.Balance    = currentBalance == 0 ? disbursement.Disb_Amount : currentBalance;
                schedule.Prn_Amount = currentBalance == 0 ? disbursement.Disb_Amount : (float)PrincipalAmount(schedules, sNo).Item1;
                schedule.Int_Amount = i == 1 ? (float)InsterestCalculator(disbursement)
                                    : (float)SecondMonthInterestCalculator(disbursement, currentBalance);
                schedule.EMS_St_Date = DateTime.Now;
                schedule.SL_NO       = sNo;


                schedules.Add(schedule);
            }

            return(schedules);
        }
예제 #5
0
 public async Task <IViewComponentResult> InvokeAsync(DisbursementRequest disbursement)
 {
     return(View(await GenerateSchechule(disbursement)));
 }
예제 #6
0
 public async Task <IList <ScheduleResponse> > GenerateSchechule(DisbursementRequest disbursement)
 {
     return(await Task.FromResult(await _schedule.GenerateSchechule(disbursement)));
 }
예제 #7
0
 /// <summary>
 /// Compute the second month interest
 /// </summary>
 /// <param name="disbursement"></param>
 /// <returns>interest amount</returns>
 private double SecondMonthInterestCalculator(DisbursementRequest disbursement, float balance)
 => balance * disbursement.Int_Rate * (NumberOfDaysBetweentwoDates(disbursement.Disb_Date, disbursement.EMS_St_Date) / 365);
예제 #8
0
 /// <summary>
 /// Compute the first month interest
 /// </summary>
 /// <param name="disbursement"></param>
 /// <returns>interest amount</returns>
 private double InsterestCalculator(DisbursementRequest disbursement)
 => disbursement.Disb_Amount * disbursement.Int_Rate * (NumberOfDaysBetweentwoDates(disbursement.Disb_Date, disbursement.EMS_St_Date) / 365);