public void NotifyManager(Int64 bill_ID)
        {
            BillMRepository billm  = new BillMRepository(_context);
            Bill_M          bill_m = new Bill_M();

            bill_m = billm.GetByBillID(bill_ID);
            Employee emp  = null;
            Bill     bill = null;

            bill = _context.Bills.Find(bill_ID);
            emp  = _context.Employees.Find(bill.Emp_ID);
            NotificationRepository ntf  = new NotificationRepository(_context);
            Notification           _ntf = new Notification()
            {
                Emp_ID      = bill_m.Emp_ID,
                Seen        = false,
                Ntf_Body    = "New bill for review has arrived from " + emp.Emp_No + " - " + emp.Emp_Name,
                Ntf_Subject = "New Bill",
                TimeStamp   = DateTime.Now
            };

            ntf.AddNotification(_ntf);

            return;
        }
        public void CreateNewBill(string username, BillViewModel model)
        {
            //get Employee
            EmployeeRepository employeerepo = new EmployeeRepository(_context);
            var employee = employeerepo.GetByEmpNo(username);
            var empId    = employee.Emp_ID;

            //Create Bill
            BillRepository billrepo = new BillRepository(_context);
            Bill           bill     = new Bill();

            bill.Bill_Status = model.BillStatus;
            bill.Emp_ID      = empId;

            billrepo.AddBill(bill);

            //Create Bill Details
            BillDetailRepository billdetailrepo = new BillDetailRepository(_context);
            Bill_Detail          billdetail     = new Bill_Detail()
            {
                Bill_Amount        = model.BillAmount,
                Bill_Date          = model.BillDate,
                Bill_ModeOfPayment = model.ModeOfPayment,
                Bill_Type          = model.BillType,
                Bill_ID            = bill.Bill_ID,
                Bill_have_SCopy    = (model.BillSCopy != null) ? true : false,
            };

            billdetailrepo.AddBillDetail(billdetail);

            //Add Scanned Copy
            if (billdetail.Bill_have_SCopy)
            {
                BillSCopyRepository bscopyrepo = new BillSCopyRepository(_context);
                Bill_SCopy          billscopy  = new Bill_SCopy()
                {
                    Bill_ID = bill.Bill_ID,
                    SCopy   = model.BillSCopy
                };
                bscopyrepo.AddBillSCopy(billscopy);
            }

            //Add Bill Manager
            //get Manager's EmpID

            String[] emp_no_name = model.Manager.Split('-');
            var      ManagerId   = employeerepo.GetByEmpNo(emp_no_name[0]).Emp_ID;

            BillMRepository bmrepo = new BillMRepository(_context);

            Bill_M billm = new Bill_M();

            billm.Bill_ID = bill.Bill_ID;
            billm.Emp_ID  = ManagerId;

            bmrepo.AddBillM(billm);
        }
        public BillViewModel getBillDetail(Int64 id)
        {
            BillRepository       billrepo       = new BillRepository(_context);
            BillDetailRepository billdetailrepo = new BillDetailRepository(_context);
            BillMRepository      billmrepo      = new BillMRepository(_context);
            BillFMRepository     billfmrepo     = new BillFMRepository(_context);
            BillSCopyRepository  billscopyrepo  = new BillSCopyRepository(_context);
            BillViewModel        bvm            = new BillViewModel();

            Bill        bill         = billrepo.GetByBillID(id);
            Bill_Detail billdetail   = billdetailrepo.GetByBillID(id);
            Bill_M      billmanager  = billmrepo.GetByBillID(id);
            Bill_FM     billfmanager = null;
            Bill_SCopy  billscopy    = null;

            if (bill.Bill_Status == ApricotEnums.BillSatusEnum.APPROVED || bill.Bill_Status == ApricotEnums.BillSatusEnum.CLOSED)
            {
                billfmanager = billfmrepo.GetByBillId(id);
            }

            if (billdetail.Bill_have_SCopy)
            {
                billscopy = billscopyrepo.GetByBillID(id);
            }

            bvm.BillID        = bill.Bill_ID;
            bvm.BillStatus    = bill.Bill_Status;
            bvm.BillAmount    = billdetail.Bill_Amount;
            bvm.BillDate      = billdetail.Bill_Date;
            bvm.BillSCopy     = null;
            bvm.BillType      = billdetail.Bill_Type;
            bvm.FManager      = (billfmanager != null) ? billfmanager.FinanceManager.Emp_No : "Not Aviablable";
            bvm.Manager       = billmanager.Manager.Emp_Name;
            bvm.ModeOfPayment = billdetail.Bill_ModeOfPayment;

            return(bvm);
        }
        public IEnumerable <BillViewModel> getManagerBills(string username)
        {
            EmployeeRepository   employeerepo     = new EmployeeRepository(_context);
            BillMRepository      bmrepo           = new BillMRepository(_context);
            List <BillViewModel> managerBillslist = new List <BillViewModel>(0);
            var managerbills = bmrepo.GetAllByBillMID(employeerepo.GetByEmpNo(username).Emp_ID);

            foreach (var billm in managerbills)
            {
                Bill_Detail   billDetail = _context.Bill_Details.Find(billm.Bill_ID);
                BillViewModel bvm        = new BillViewModel();
                Bill          bill       = _context.Bills.Find(billm.Bill_ID);
                String        fmanager   = "Not yet Alloted";
                if (bill.Bill_Status == ApricotEnums.BillSatusEnum.CLOSED || bill.Bill_Status == ApricotEnums.BillSatusEnum.APPROVED)
                {
                    fmanager = _context.Bill_FMs.Where(bfm => bfm.Bill_ID == billDetail.Bill_ID).Select(bfmn => bfmn.FinanceManager.Emp_Name).Single();
                }
                //There will always be a Entry for a Bill. Just to double Check in case of Incosistent Data
                if (billDetail != null)
                {
                    bvm.BillID        = billm.Bill_ID;
                    bvm.BillAmount    = billDetail.Bill_Amount;
                    bvm.BillDate      = billDetail.Bill_Date;
                    bvm.BillStatus    = billm.Bill.Bill_Status;
                    bvm.BillType      = billDetail.Bill_Type;
                    bvm.ModeOfPayment = billDetail.Bill_ModeOfPayment;
                    bvm.FManager      = fmanager;
                    bvm.Manager       = billm.Manager.Emp_Name;
                    bvm.BillSCopy     = (billDetail.Bill_have_SCopy) ? _context.Bill_SCopies.Find(bill.Bill_ID).SCopy : null;
                }

                managerBillslist.Add(bvm);
            }

            return(managerBillslist);
        }