示例#1
0
        private ProcessingDetail GetProcessingDetail(long id)
        {
            ViewBag.id = id;
            ProcessingDetail re = new ProcessingDetail
            {
                Proc = db.Processing.Include(p => p.Queue).Where(p => p.ProcID == id).ToList()[0]
            };

            re.Rec = db.Record.Include(r => r.Processing).Include(r => r.Note).Include(r => r.StudentFile).Include(r => r.FileType).Where(r => r.RecordID == re.Proc.RecordID).ToList()[0];

            List <FileDetail> dt = new List <FileDetail>();
            var files            = db.StudentFile.Include(s => s.Record).Where(s => s.FileID == re.Rec.FileID);
            var q = from p in db.Processing
                    join r in db.Record
                    on p.RecordID equals r.RecordID
                    join t in db.FileType
                    on r.FileTypeID equals t.FileTypeID
                    join f in db.StudentFile
                    on r.FileID equals f.FileID
                    where f.FileID == re.Rec.FileID
                    orderby p.ProcID
                    select new LookUp {
                p = p, r = r, f = f, t = t
            };

            re.PreviousProcessed = q;
            re.ProcErrors        = db.ProcessingError.Include(p => p.ErrorType).Include(p => p.ErrorComplete).Where(p => p.ProcID == id);

            DirectLoanCalc(re);
            PellCalc(re);
            BudgetCalc(re);
            ViewBag.FinalLoanPeriod = (re.Rec.IsProratedLoan || ViewBag.SulaLoanPeriod == "4 Month" || ViewBag.ExistingLoanPeriod == "4 Month") ? "4 Month" : "8 Month";

            return(re);
        }
        // GET: UserQueue/Edit/5
        public ActionResult Open(long id)
        {
            ProcessingDetail re = new ProcessingDetail();

            re.Proc = db.Processing.Include(p => p.Queue).Where(p => p.ProcID == id).ToList()[0];
            re.Rec  = db.Record.Include(r => r.Processing).Include(r => r.Note).Include(r => r.StudentFile).Include(r => r.FileType).Where(r => r.RecordID == re.Proc.RecordID).ToList()[0];
            return(View(re));
        }
示例#3
0
        public ActionResult OpenAdmin(long id, string mainReturn)
        {
            if (String.IsNullOrEmpty(mainReturn))
            {
                ViewBag.mainReturn = Request.UrlReferrer;
            }
            else
            {
                ViewBag.mainReturn = mainReturn;
            }
            ViewBag.OpenReturn = Url.Action("OpenAdmin", "FileOpen", new { id, ViewBag.mainReturn });
            ProcessingDetail re = GetProcessingDetail(id);

            return(View(re));
        }
示例#4
0
        // TODO: Add CLEs for '17-'18
        private void BudgetCalc(ProcessingDetail processingDetail)
        {
            Record record = processingDetail.Rec;

            decimal Room     = 0;
            decimal Travel   = 0;
            decimal Personal = 0;
            decimal Tuition;

            decimal NumMonthsInAY = Convert.ToDecimal(record.NumMonthsInAY);

            if (!String.IsNullOrEmpty(record.StateOnISIR))
            {
                int region = RegionForState[record.StateOnISIR];

                CLE cle;
                if (record.AwardYear == "'17-'18")
                {
                    cle = (record.IsWithParents == true) ? WithParentsCLE1718[region] : OffCampusCLE1718[region];
                }
                else
                {
                    cle = (record.IsWithParents == true) ? WithParentsCLE1819[region] : OffCampusCLE1819[region];
                }

                Room     = cle.Room * NumMonthsInAY;
                Travel   = (record.IsOnlineStudent == true) ? 0 : cle.Travel * NumMonthsInAY;
                Personal = cle.Personal * NumMonthsInAY;
            }

            decimal NumEstimatedCredits = Convert.ToDecimal(record.NumEstimatedCredits);
            decimal CostPerCredit       = Convert.ToDecimal(record.CostPerCredit);

            Tuition = NumEstimatedCredits * CostPerCredit;

            // Assign to view variables
            ViewBag.Room     = String.Format(DecimalAmountFormat, Room);
            ViewBag.Travel   = String.Format(DecimalAmountFormat, Travel);
            ViewBag.Personal = String.Format(DecimalAmountFormat, Personal);
            ViewBag.Tuition  = String.Format(DecimalAmountFormat, Tuition);
        }
示例#5
0
        public ActionResult OpenFile(long id, string mainReturn)
        {
            if (String.IsNullOrEmpty(mainReturn))
            {
                ViewBag.mainReturn = Request.UrlReferrer;
            }
            else
            {
                ViewBag.mainReturn = mainReturn;
            }
            var userN = dbUser.AspNetUsers.Where(p => p.UserName == User.Identity.Name).First();

            if (userN.AspNetRoles.First().Name == "QC Officer" || userN.AspNetRoles.First().Name == "Admin")
            {
                return(Redirect(Url.Action("OpenAdmin", "FileOpen", new { id, ViewBag.mainReturn })));
            }
            ViewBag.OpenReturn = Url.Action("OpenFile", "FileOpen", new { id, ViewBag.mainReturn });
            ProcessingDetail re = GetProcessingDetail(id);

            return(View(re));
        }
示例#6
0
        public ActionResult Calculate(ProcessingDetail detail, string mainReturn)
        {
            Record record = db.Record.Find(detail.Rec.RecordID);

            record.DependencyStatus            = detail.Rec.DependencyStatus;
            record.AcademicYear                = detail.Rec.AcademicYear;
            record.SubAgg                      = detail.Rec.SubAgg;
            record.CombinedAgg                 = detail.Rec.CombinedAgg;
            record.IsProratedLoan              = detail.Rec.IsProratedLoan;
            record.NumCredits                  = detail.Rec.NumCredits;
            record.ExistingAYEndsBeforeTermTwo = detail.Rec.ExistingAYEndsBeforeTermTwo;
            record.SubAmountUsed               = detail.Rec.SubAmountUsed;
            record.UnsubAmountUsed             = detail.Rec.UnsubAmountUsed;
            record.SumUsagePeriods             = detail.Rec.SumUsagePeriods;
            record.AttendanceTermOne           = detail.Rec.AttendanceTermOne;
            record.AttendanceTermTwo           = detail.Rec.AttendanceTermTwo;
            record.NumAcademicYearsInProgram   = detail.Rec.NumAcademicYearsInProgram;
            record.AwardYear                   = detail.Rec.AwardYear;
            record.EFC                 = detail.Rec.EFC;
            record.LEU                 = detail.Rec.LEU;
            record.PercentPellUsed     = detail.Rec.PercentPellUsed;
            record.StatusTermOne       = detail.Rec.StatusTermOne;
            record.StatusTermTwo       = detail.Rec.StatusTermTwo;
            record.StatusTermThree     = detail.Rec.StatusTermThree;
            record.IsOnlineStudent     = detail.Rec.IsOnlineStudent;
            record.BudgetAwardYear     = detail.Rec.BudgetAwardYear;
            record.StateOnISIR         = detail.Rec.StateOnISIR;
            record.IsWithParents       = detail.Rec.IsWithParents;
            record.NumEstimatedCredits = detail.Rec.NumEstimatedCredits;
            record.CostPerCredit       = detail.Rec.CostPerCredit;
            record.NumMonthsInAY       = detail.Rec.NumMonthsInAY;

            db.Entry(record).State = EntityState.Modified;
            db.SaveChanges();

            return(Redirect(mainReturn));
        }
示例#7
0
        // TODO: Fix Pell Amount based on EFC range
        private void PellCalc(ProcessingDetail processingDetail)
        {
            Record  record          = processingDetail.Rec;
            decimal LEU             = Convert.ToDecimal(record.LEU);
            decimal PercentPellUsed = Convert.ToDecimal(record.PercentPellUsed) / 100;
            decimal EFC             = Convert.ToDecimal(record.EFC);
            int     AcademicYear    = Convert.ToInt32(record.AcademicYear);

            var     key  = PellByEFC.Keys.Single(efc => efc(EFC));
            var     Pell = PellByEFC[key];
            decimal MaxPellAY;

            switch (record.StatusTermOne)
            {
            case "full-time":
                MaxPellAY = Pell.FullTime;
                break;

            case "three-quarter-time":
                MaxPellAY = Pell.ThreeQuarterTime;
                break;

            case "half-time":
                MaxPellAY = Pell.HalfTime;
                break;

            case "below-half-time":
                MaxPellAY = Pell.BelowHalfTime;
                break;

            default:
                MaxPellAY = 0;
                break;
            }

            decimal AdditionalPell  = MaxPellAY / 2;
            decimal RemainingLEU    = (6 - (LEU / 100)) * 100;
            decimal MaxPellLEU      = (RemainingLEU < (decimal)1.5) ? MaxPellAY * RemainingLEU : MaxPellAY;
            decimal MaxExistingPct  = (decimal)1.5 - (PercentPellUsed);
            decimal MaxExistingPell = Math.Floor(MaxPellAY * MaxExistingPct);

            decimal FinalMaxPct = Math.Min((decimal)1.5, RemainingLEU);

            FinalMaxPct = Math.Min(FinalMaxPct, MaxExistingPct);

            decimal FinalMaxAmountTotal;

            if (record.DependencyStatus == "DependentNoParentInfo" || AcademicYear == 6)
            {
                FinalMaxAmountTotal = 0;
            }
            else
            {
                decimal temp  = (FinalMaxPct >= 1) ? MaxPellAY : FinalMaxPct * MaxPellAY;
                decimal temp2 = (1 - FinalMaxPct < 0) ? (1 - FinalMaxPct) * MaxPellAY * -1 : 0;

                FinalMaxAmountTotal = Math.Floor(temp) + Math.Floor(temp2);
            }

            string StatusTermOne   = record.StatusTermOne ?? "";
            string StatusTermTwo   = record.StatusTermTwo ?? "";
            string StatusTermThree = record.StatusTermThree ?? "";

            decimal FinalMaxAmountTerm1 = Math.Min(FinalMaxAmountTotal, Math.Ceiling(MaxPellAY * ((decimal)TermMultipliers[StatusTermOne] / 2)));
            decimal FinalMaxAmountTerm2 = Math.Min(FinalMaxAmountTotal - FinalMaxAmountTerm1, Math.Floor(MaxPellAY * ((decimal)TermMultipliers[StatusTermTwo] / 2)));
            decimal FinalMaxAmountTerm3 = Math.Min(FinalMaxAmountTotal - FinalMaxAmountTerm1 - FinalMaxAmountTerm2, Math.Floor(MaxPellAY * ((decimal)TermMultipliers[StatusTermThree] / 2)));

            decimal FinalMaxPctTerm1 = (MaxPellAY > 0) ? FinalMaxAmountTerm1 / MaxPellAY : 0;
            decimal FinalMaxPctTerm2 = (MaxPellAY > 0) ? FinalMaxAmountTerm2 / MaxPellAY : 0;
            decimal FinalMaxPctTerm3 = (MaxPellAY > 0) ? FinalMaxAmountTerm3 / MaxPellAY : 0;

            // Assign to view variables
            ViewBag.MaxPellAY           = String.Format(DecimalAmountFormat, MaxPellAY);
            ViewBag.AdditionalPell      = String.Format(DecimalAmountFormat, AdditionalPell);
            ViewBag.MaxPellLEU          = String.Format(DecimalAmountFormat, MaxPellLEU);
            ViewBag.RemainingLEU        = String.Format(DecimalPercentFormat, RemainingLEU);
            ViewBag.MaxExistingPell     = String.Format(DecimalAmountFormat, MaxExistingPell);
            ViewBag.MaxExistingPct      = String.Format(DecimalPercentFormat, MaxExistingPct * 100);
            ViewBag.FinalMaxAmount      = String.Format(DecimalAmountFormat, FinalMaxAmountTotal);
            ViewBag.FinalMaxPct         = String.Format(DecimalPercentFormat, FinalMaxPct * 100);
            ViewBag.FinalMaxAmountTerm1 = String.Format(DecimalAmountFormat, FinalMaxAmountTerm1);
            ViewBag.FinalMaxAmountTerm2 = String.Format(DecimalAmountFormat, FinalMaxAmountTerm2);
            ViewBag.FinalMaxAmountTerm3 = String.Format(DecimalAmountFormat, FinalMaxAmountTerm3);
            ViewBag.FinalMaxPctTerm1    = String.Format(DecimalPercentFormat, FinalMaxPctTerm1 * 100);
            ViewBag.FinalMaxPctTerm2    = String.Format(DecimalPercentFormat, FinalMaxPctTerm2 * 100);
            ViewBag.FinalMaxPctTerm3    = String.Format(DecimalPercentFormat, FinalMaxPctTerm3 * 100);
        }
示例#8
0
        private void DirectLoanCalc(ProcessingDetail processingDetail)
        {
            Record  record       = processingDetail.Rec;
            int     AcademicYear = Convert.ToInt32(record.AcademicYear);
            decimal NumCredits   = Convert.ToDecimal(record.NumCredits);
            decimal SubAgg       = Convert.ToDecimal(record.SubAgg);
            decimal CombineAgg   = Convert.ToDecimal(record.CombinedAgg);
            decimal SubUsed      = Convert.ToDecimal(record.SubAmountUsed);
            decimal UnsubUsed    = Convert.ToDecimal(record.UnsubAmountUsed);

            decimal StartingAYFunding1 = (record.DependencyStatus == "DependentNoParentInfo") ? 0 : SubAmounts[AcademicYear];
            decimal StartingAYFunding2 = 2000;

            if (record.DependencyStatus == "Independent" || record.DependencyStatus == "DependentOverride")
            {
                StartingAYFunding2 = UnsubAmounts[AcademicYear];
            }
            else if (AcademicYear == 6)
            {
                StartingAYFunding2 = 20500;
            }

            decimal ProratedAmount1 = (record.IsProratedLoan) ? Math.Round(NumCredits / 36 * StartingAYFunding1) : StartingAYFunding1;
            decimal ProratedAmount2 = (record.IsProratedLoan) ? Math.Round(NumCredits / 36 * StartingAYFunding2) : StartingAYFunding2;

            decimal SulaAdjustment1;
            decimal SulaAdjustment2;
            string  SulaLoanPeriod = "8 Month";

            switch (SulaCalc(record, StartingAYFunding1, StartingAYFunding2))
            {
            case "ALL":
                SulaAdjustment1 = StartingAYFunding1;
                SulaAdjustment2 = StartingAYFunding2;
                break;

            case "HALF":
                SulaAdjustment1 = StartingAYFunding1 / 2;
                SulaAdjustment2 = StartingAYFunding2 / 2;
                SulaLoanPeriod  = "4 Month";
                break;

            default:
                SulaAdjustment1 = 0;
                SulaAdjustment2 = StartingAYFunding1 = StartingAYFunding2;
                break;
            }

            decimal ProrateSulaSwitch1 = (record.IsProratedLoan) ? Math.Min(ProratedAmount1, SulaAdjustment1) : SulaAdjustment1;
            decimal ProrateSulaSwitch2 = (record.IsProratedLoan) ? Math.Min(ProratedAmount2, SulaAdjustment2) : SulaAdjustment2;

            decimal RemainingAgg1 = ((AcademicYear == 6) ? 65500 : (record.DependencyStatus == "Independent" || record.DependencyStatus == "DependentOverride") ? 23000 : 23000) - SubAgg;
            decimal RemainingAgg2 = ((AcademicYear == 6) ? 138500 : (record.DependencyStatus == "Independent" || record.DependencyStatus == "DependentOverride") ? 57500 : 31000) - CombineAgg;

            decimal SubAggRealloc1 = (RemainingAgg2 < 0) ? 0 : Math.Min(ProrateSulaSwitch1, RemainingAgg1);
            decimal SubAggRealloc2 = (SubAggRealloc1 == RemainingAgg1) ? ProrateSulaSwitch2 + (ProrateSulaSwitch1 - RemainingAgg1) : ProrateSulaSwitch2;

            decimal UnsubAggRealloc1 = SubAggRealloc1;
            decimal UnsubAggRealloc2 = Math.Min(SubAggRealloc2, RemainingAgg2 - UnsubAggRealloc1);

            decimal ExistingLoanRemaining1 = UnsubAggRealloc1 - SubUsed;
            decimal ExistingLoanRemaining2 = UnsubAggRealloc2 - UnsubUsed;

            decimal SubExistingRealloc1 = Math.Min(ExistingLoanRemaining1, UnsubAggRealloc1);
            decimal SubExistingRealloc2 = Math.Min(ExistingLoanRemaining2, UnsubAggRealloc2);

            decimal UnsubExistingRealloc1 = SubExistingRealloc1;
            decimal UnsubExistingRealloc2;

            if (UnsubAggRealloc1 - SubExistingRealloc2 > 0 && ExistingLoanRemaining2 - SubExistingRealloc2 > 0)
            {
                UnsubExistingRealloc2 = Math.Min(ExistingLoanRemaining2, UnsubAggRealloc1 - SubExistingRealloc1 + SubExistingRealloc2);
            }
            else
            {
                UnsubExistingRealloc2 = SubExistingRealloc2;
            }

            decimal FinalResult1 = Math.Max(0, UnsubExistingRealloc1);
            decimal FinalResult2 = Math.Max(0, UnsubExistingRealloc2);

            decimal StartingSub   = StartingAYFunding1;
            decimal StartingUnsub = StartingAYFunding2;

            // Now assign to the appropriate view variables
            ViewBag.StartingSub         = String.Format(DecimalAmountFormat, StartingAYFunding1);
            ViewBag.StartingUnsub       = String.Format(DecimalAmountFormat, StartingAYFunding2);
            ViewBag.AvailableAggSub     = String.Format(DecimalAmountFormat, RemainingAgg1);
            ViewBag.AvailableAggCombine = String.Format(DecimalAmountFormat, RemainingAgg2);
            ViewBag.MaxProrateSub       = String.Format(DecimalAmountFormat, ProratedAmount1);
            ViewBag.MaxProrateUnsub     = String.Format(DecimalAmountFormat, ProratedAmount2);
            ViewBag.MaxRemainingSub     = String.Format(DecimalAmountFormat, StartingSub - SubUsed);
            ViewBag.MaxRemainingUnsub   = String.Format(DecimalAmountFormat, StartingUnsub - UnsubUsed);
            ViewBag.MaxSulaSub          = String.Format(DecimalAmountFormat, SulaAdjustment1);
            ViewBag.MaxSulaUnsub        = String.Format(DecimalAmountFormat, SulaAdjustment2);
            ViewBag.ExistingLoanPeriod  = (record.ExistingAYEndsBeforeTermTwo == true) ? "4 Month" : "8 Month";
            ViewBag.SulaLoanPeriod      = SulaLoanPeriod;
            ViewBag.FinalMaxSub         = String.Format(DecimalAmountFormat, FinalResult1);
            ViewBag.FinalMaxUnsub       = String.Format(DecimalAmountFormat, FinalResult2);
        }
        public async Task <ApiResult <bool> > SplitProcess(long id)
        {
            var process = await _context.ProcessPlans
                          .Include(x => x.ProcessingDetails)
                          .Where(x => x.Id == id).FirstOrDefaultAsync();

            var listProcessingDetails = new List <ProcessingDetail>();

            foreach (var item in process.ProcessingDetails)
            {
                var amount = item.Amount - item.EnterAmount;
                if (amount > 0)
                {
                    var processingDetails = new ProcessingDetail()
                    {
                        Amount        = amount,
                        IdRecipe      = item.IdRecipe,
                        IdProcessPlan = item.IdProcessPlan,
                        Unit          = item.Unit
                    };
                    listProcessingDetails.Add(processingDetails);
                }
            }

            var stt = 1;

Location:
            string code = process.Code + "-" + stt.ToString();

            var checkCode = await _context.ProcessPlans.AnyAsync(x => x.Code == code);

            if (checkCode)
            {
                stt++;
                goto Location;
            }

            var processPlan = new ProcessPlan()
            {
                Code              = code,
                IdAuthority       = process.IdAuthority,
                IdCreator         = process.IdCreator,
                IdResponsible     = process.IdResponsible,
                Censorship        = false,
                CreatedDate       = DateTime.Now,
                ExpectedDate      = DateTime.Now,
                Name              = process.Name + " (Tách)",
                Note              = process.Note,
                Status            = StatusProcessPlan.Processing,
                ProcessingDetails = listProcessingDetails
            };

            _context.ProcessPlans.Add(processPlan);
            await _context.SaveChangesAsync();

            process.Status = StatusProcessPlan.Processed;
            var note = process.Note + " (Đã từng tách kế hoạch)";

            process.Note = note;
            _context.ProcessPlans.Update(process);
            await _context.SaveChangesAsync();

            return(new ApiSuccessResult <bool>());
        }