public IActionResult EnterStdntInfo(FeeSubViewModel fsvm)
        {
            var c = _context.Class.ToList();

            c.Insert(0, new Class {
                ClassId = 0, ClassName = "Select Class"
            });
            ViewBag.vc = c;
            if (fsvm.classidVM == 0)
            {
                ViewBag.msg1 = "Please choose a class";
                return(View());
            }
            var s = _context.Student.Where(q => q.StudentId == fsvm.studentidVM && q.StudentClass == fsvm.classidVM).FirstOrDefault();

            if (s == null)
            {
                ViewBag.msg2 = "Enter valid student ID";
                return(View());
            }



            //first time paying fee
            var fs1 = _context.FeeSubmission.Where(q => q.StudentId == fsvm.studentidVM && q.ClassId == fsvm.classidVM).FirstOrDefault();

            if (fs1 == null)
            {
                return(RedirectToAction("ShowFeeDetailsNew", new { sid1 = fsvm.studentidVM, cid1 = fsvm.classidVM, date1 = fsvm.dateVM }));
            }

            //has due

            var fs2 = _context.FeeSubmission.Where(q => q.DueAmount == 0 && q.StudentId == fsvm.studentidVM && q.ClassId == fsvm.classidVM && q.Date.Month == fsvm.dateVM.Month && q.Date.Year == fsvm.dateVM.Year).LastOrDefault();

            if (fs2 != null)
            {
                ViewBag.msg3 = "Paid";
                return(View());
            }

            var fs3 = _context.FeeSubmission.Where(q => q.DueAmount != 0 && q.StudentId == fsvm.studentidVM && q.ClassId == fsvm.classidVM && q.Date.Month == fsvm.dateVM.Month && q.Date.Year == fsvm.dateVM.Year).LastOrDefault();

            if (fs3 != null)
            {
                return(RedirectToAction("DueForSameMonth", new { sid3 = fsvm.studentidVM, cid3 = fsvm.classidVM, date3 = fsvm.dateVM })); //only due, not next month fee
            }

            var fs4 = _context.FeeSubmission.Where(q => /*q.DueAmount != 0 &&*/ q.StudentId == fsvm.studentidVM && q.ClassId == fsvm.classidVM && q.Date.Month != fsvm.dateVM.Month /*&& q.Date.Year == fsvm.dateVM.Year*/).LastOrDefault();

            if (fs4 != null)
            {
                return(RedirectToAction("ShowFeeDetails", new { sid2 = fsvm.studentidVM, cid2 = fsvm.classidVM, date2 = fsvm.dateVM }));
            }

            return(View());
        }
        public async Task <IActionResult> SearchResult(FeeSubViewModel cid, Int64 cid2)
        {
            if (cid2 != 0)
            {
                cid.classidVM = cid2;
            }
            var i = _context.Class.ToList();

            i.Insert(0, new Class {
                ClassId = 0, ClassName = "Select the class"
            });
            ViewBag.Class = i;

            var v = await _context.FeeSubmission.AsNoTracking().Where(q => q.ClassId == cid.classidVM).ToListAsync();

            if (v == null)
            {
                return(View());
            }
            var s = await _context.Student.AsNoTracking().Where(q => q.StudentClass == cid.classidVM).ToListAsync();

            var c = await _context.Class.AsNoTracking().Where(q => q.ClassId == cid.classidVM).ToListAsync();

            var query = from vq in v
                        join sq in s on vq.ClassId equals sq.StudentClass
                        join cq in c on vq.ClassId equals cq.ClassId
                        select new
            {
                ClassName   = cq.ClassName,
                StudentName = sq.StudentName,
                StudentId   = sq.StudentId,
                Fee         = vq.TotalFee,
                Due         = vq.DueAmount
            };

            var srchlist = new List <FeeSubViewModel>();
            int count    = 1;

            foreach (var item in query)
            {
                FeeSubViewModel fsvm = new FeeSubViewModel();
                fsvm.serialnoVM    = count;
                fsvm.classnameVM   = item.ClassName;
                fsvm.studentidVM   = item.StudentId;
                fsvm.studentnameVM = item.StudentName;
                fsvm.totalfeeVM    = item.Fee;
                fsvm.dueamountVM   = item.Due;
                srchlist.Add(fsvm);
                count++;
            }

            return(View(srchlist));
        }
        public IActionResult DueForSameMonth(Int64 sid3, Int64 cid3, DateTime date3)
        {
            var ef1 = _context.ExtraFee.Where(q => q.ClassId == cid3).ToList();

            ef1.Insert(0, new ExtraFee {
                ExtraFeeAmount = 0, ExtraFeeTitle = "Select Extra Fee"
            });
            ViewBag.v = ef1;

            var g = _context.FeeSubmission.Where(a => a.StudentId == sid3 && a.ClassId == cid3).LastOrDefault();
            var j = Convert.ToInt32(date3.Month);

            ViewBag.showdate = g.Date.ToLongDateString();

            var s     = _context.Student.ToList();
            var c     = _context.Class.ToList();
            var am    = _context.AccountsManagement.ToList();
            var ef    = _context.ExtraFee.ToList();
            var fs    = _context.FeeSubmission.ToList();
            var query = (from vs in s
                         join vc in c on vs.StudentClass equals vc.ClassId
                         join vam in am on vs.StudentClass equals vam.ClassId
                         join vef in ef on vs.StudentClass equals vef.ClassId
                         join vfs in fs on vs.StudentId equals vfs.StudentId
                         where sid3 == vs.StudentId && cid3 == vc.ClassId
                         select new
            {
                name = vs.StudentName,
                id = vs.StudentId,
                cls = vc.ClassName,
                clsid = vc.ClassId,
                due = vfs.DueAmount,
                total = vfs.DueAmount
            }).LastOrDefault();
            FeeSubViewModel fsvm = new FeeSubViewModel();

            fsvm.studentidVM      = query.id;
            fsvm.studentnameVM    = query.name;
            fsvm.classnameVM      = query.cls;
            fsvm.classidVM        = query.clsid;
            fsvm.dueamountVM      = query.due;
            fsvm.totalfeeVM       = query.total;
            fsvm.dateVM           = date3;
            fsvm.ShouldtotalfeeVM = query.total;
            return(View(fsvm));
        }
        //first time paying fee method
        public IActionResult ShowFeeDetailsNew(Int64 sid1, Int64 cid1, DateTime date1)
        {
            var ef1 = _context.ExtraFee.Where(q => q.ClassId == cid1).ToList();

            ef1.Insert(0, new ExtraFee {
                ExtraFeeAmount = 0, ExtraFeeTitle = "Select Extra Fee"
            });
            ViewBag.v = ef1;

            var s     = _context.Student.ToList();
            var c     = _context.Class.ToList();
            var am    = _context.AccountsManagement.ToList();
            var ef2   = _context.ExtraFee.ToList();
            var query = (from vs in s
                         join vc in c on vs.StudentClass equals vc.ClassId
                         join vam in am on vs.StudentClass equals vam.ClassId
                         join vef in ef2 on vs.StudentClass equals vef.ClassId
                         where sid1 == vs.StudentId && cid1 == vc.ClassId
                         select new
            {
                name = vs.StudentName,
                id = vs.StudentId,
                cls = vc.ClassName,
                clsid = vc.ClassId,
                fee = vam.FeeAmount,
            }).FirstOrDefault();
            FeeSubViewModel fsvm = new FeeSubViewModel();

            fsvm.studentidVM      = query.id;
            fsvm.studentnameVM    = query.name;
            fsvm.classnameVM      = query.cls;
            fsvm.classidVM        = query.clsid;
            fsvm.feeamountVM      = query.fee;
            fsvm.totalfeeVM       = query.fee;
            fsvm.ShouldtotalfeeVM = query.fee;
            fsvm.dateVM           = date1;
            return(View(fsvm));
        }
 public IActionResult PrintInvoice(FeeSubViewModel fs)
 {
     return(View(fs));
 }
 public IActionResult InvoiceOption(FeeSubViewModel fsvm)
 {
     return(View(fsvm));
 }
        public IActionResult SubmitFee(FeeSubViewModel fsvm)
        {
            var           v  = _context.FeeSubmission.Where(q => q.StudentId == fsvm.studentidVM).LastOrDefault();
            FeeSubmission fs = new FeeSubmission();

            fs.ClassId   = fsvm.classidVM;
            fs.StudentId = fsvm.studentidVM;
            if (fsvm.totalfeeVM == 0)
            {
                ViewBag.msg4 = "You haven't entered any amount!";
                return(View());
            }
            if (v != null)
            {
                var f = Math.Abs(fsvm.ShouldtotalfeeVM - fsvm.totalfeeVM);
                if (f == 0)
                {
                    fs.DueAmount = 0;
                }
                else
                {
                    fs.DueAmount = f;
                }
            }
            else
            {
                var f = Math.Abs(fsvm.ShouldtotalfeeVM - fsvm.totalfeeVM);
                if (f == 0)
                {
                    fs.DueAmount = 0;
                }
                else
                {
                    fs.DueAmount = f;
                }
            }

            fs.TotalFee       = fsvm.totalfeeVM;
            fs.FeeAmount      = fsvm.feeamountVM;
            fs.Date           = fsvm.dateVM;
            fs.ExtraFeeAmount = fsvm.extrafeeamountVM;
            _context.FeeSubmission.Add(fs);
            _context.SaveChanges();

            ModelState.Clear();
            var d  = _context.Class.Where(q => q.ClassId == fs.ClassId).FirstOrDefault();
            var dq = _context.Student.Where(q => q.StudentId == fs.StudentId).FirstOrDefault();
            var de = _context.AccountsManagement.Where(q => q.ClassId == fs.ClassId).FirstOrDefault();
            //var ex = _context.ExtraFee.Where(q => q.ClassId == fs.ClassId).FirstOrDefault();
            var fsn = _context.FeeSubmission.Where(q => q.StudentId == fs.StudentId && q.ClassId == fs.ClassId).LastOrDefault();


            FeeSubViewModel fsvm1 = new FeeSubViewModel();

            fsvm1.studentidVM      = fsn.StudentId;
            fsvm1.classidVM        = fsn.ClassId;
            fsvm1.dt               = fsn.Date.ToLongDateString();
            fsvm1.studentnameVM    = dq.StudentName;
            fsvm1.classnameVM      = d.ClassName;
            fsvm1.feeamountVM      = de.FeeAmount;
            fsvm1.extrafeeamountVM = fsn.ExtraFeeAmount;
            fsvm1.dueamountVM      = fsn.DueAmount;
            fsvm1.totalfeeVM       = fsn.TotalFee;
            fsvm1.amountofmonth    = fsvm.amountofmonth;
            fsvm1.lastmonth        = fsvm.lastmonth;
            fsvm1.currentmonth     = fsvm.currentmonth;

            fsvm1.inwords = NumToText.ToText(Convert.ToInt32(fsvm1.totalfeeVM));

            return(RedirectToAction("InvoiceOption", new RouteValueDictionary(fsvm1)));
        }
        //has due method
        public IActionResult ShowFeeDetails(Int64 sid2, Int64 cid2, DateTime date2)
        {
            var ef1 = _context.ExtraFee.Where(q => q.ClassId == cid2).ToList();

            ef1.Insert(0, new ExtraFee {
                ExtraFeeAmount = 0, ExtraFeeTitle = "Select Extra Fee"
            });
            ViewBag.v = ef1;

            var s  = _context.Student.ToList();
            var c  = _context.Class.ToList();
            var am = _context.AccountsManagement.ToList();
            var ef = _context.ExtraFee.ToList();
            var fs = _context.FeeSubmission.ToList();
            var g  = _context.FeeSubmission.Where(a => a.StudentId == sid2 && a.ClassId == cid2).LastOrDefault();
            var h  = Convert.ToInt32(g.Date.Month); //last month from database
            var j  = Convert.ToInt32(date2.Month);  //input month
            var k  = j - h;

            ViewBag.showdate = g.Date.ToLongDateString();
            var query = (from vs in s
                         join vc in c on vs.StudentClass equals vc.ClassId
                         join vam in am on vs.StudentClass equals vam.ClassId
                         join vef in ef on vs.StudentClass equals vef.ClassId
                         join vfs in fs on vs.StudentId equals vfs.StudentId
                         where sid2 == vs.StudentId && cid2 == vc.ClassId
                         select new
            {
                name = vs.StudentName,
                id = vs.StudentId,
                cls = vc.ClassName,
                clsid = vc.ClassId,
                fee = vam.FeeAmount,
                due = vfs.DueAmount,
                total = vam.FeeAmount + vfs.DueAmount
            }).LastOrDefault();

            FeeSubViewModel fsvm = new FeeSubViewModel();

            fsvm.studentidVM   = query.id;
            fsvm.studentnameVM = query.name;
            fsvm.classnameVM   = query.cls;
            fsvm.classidVM     = query.clsid;
            fsvm.dueamountVM   = query.due;
            fsvm.amountofmonth = k;
            var e = h + 1;

            fsvm.lastmonth    = new DateTimeFormatInfo().GetMonthName(e);
            fsvm.currentmonth = new DateTimeFormatInfo().GetMonthName(j);

            if (k > 1)
            {
                fsvm.feeamountVM      = query.fee * k;
                fsvm.totalfeeVM       = query.due + fsvm.feeamountVM;
                fsvm.ShouldtotalfeeVM = query.due + fsvm.feeamountVM;
            }
            else if (k == 1)
            {
                fsvm.feeamountVM      = query.fee;
                fsvm.totalfeeVM       = query.total;
                fsvm.ShouldtotalfeeVM = query.total;
            }
            else if (k < 0)
            {
                fsvm.feeamountVM      = query.fee * (j + (12 - h));
                fsvm.totalfeeVM       = query.due + fsvm.feeamountVM;
                fsvm.ShouldtotalfeeVM = query.due + fsvm.feeamountVM;
                fsvm.amountofmonth    = j + (12 - h);
            }
            fsvm.dateVM = date2;

            return(View(fsvm));
        }