public async Task <IActionResult> Edit(int id, [Bind("Id,BranchId,Date,Amount")] CompanyMonthGain companyMonthGain)
        {
            if (id != companyMonthGain.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(companyMonthGain);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!CompanyMonthGainExists(companyMonthGain.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["BranchId"] = new SelectList(_context.Branches, "Id", "Name", companyMonthGain.BranchId);
            return(View(companyMonthGain));
        }
        public async Task <IActionResult> Create([Bind("Id,BranchId,Date,Amount")] CompanyMonthGain companyMonthGain)
        {
            if (ModelState.IsValid)
            {
                _context.Add(companyMonthGain);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["BranchId"] = new SelectList(_context.Branches, "Id", "Name", companyMonthGain.BranchId);
            return(View(companyMonthGain));
        }
        public async Task <IActionResult> Index()
        {
            var employees = await _context.Employees.Include(e => e.AppUser).Include(e => e.Attendances).Include(e => e.Bonus)
                            .Include(e => e.Penals).Include(e => e.WorkPlaces).Include("WorkPlaces.Position").Include("WorkPlaces.Position.Salaries").ToListAsync();

            foreach (var item in employees)
            {
                decimal baseamount  = item.WorkPlaces.First().Position.Salaries.First().Payment;
                decimal salary      = baseamount;
                decimal dailyamount = baseamount / 30;
                decimal bonus       = 0;
                decimal penal       = 0;
                foreach (var item1 in item.Bonus.Where(x => x.Date > DateTime.Now.AddDays(-30)))
                {
                    baseamount += item1.Amount;
                    bonus      += item1.Amount;
                }
                foreach (var item1 in item.Penals.Where(x => x.Date > DateTime.Now.AddDays(-30)))
                {
                    baseamount -= item1.Amount;
                    penal      += item1.Amount;
                }
                foreach (var item1 in item.Attendances.Where(x => x.Date > DateTime.Now.AddDays(-30) && x.Permission == Permission.Uzursuz))
                {
                    baseamount -= dailyamount;
                }

                WorkPlace workPlace = await _context.WorkPlaces.Where(w => w.EmployeeId == item.Id).FirstOrDefaultAsync();

                CompanyMonthGain gain = await _context.Gains.Where(g => g.Date.ToShortDateString() == DateTime.Now.ToShortDateString() && g.BranchId == workPlace.BranchId).FirstOrDefaultAsync();

                Campaign campaign = await _context.Campaigns.Where(g => g.Date.ToShortDateString() == DateTime.Now.ToShortDateString() && g.BranchId == workPlace.BranchId).FirstOrDefaultAsync();

                if (gain != null && campaign != null)
                {
                    if (campaign.FromAmount <= gain.Amount)
                    {
                        baseamount += campaign.Bonus;
                    }
                }

                item.finalSalary = (int)baseamount;
                Payroll payroll = new Payroll()
                {
                    Employee    = item,
                    EmployeeId  = item.Id,
                    Date        = DateTime.Now,
                    Bonus       = bonus,
                    Penal       = penal,
                    Salary      = salary,
                    TotalSalary = item.finalSalary
                };


                _context.Payrolls.Add(payroll);
                await _context.SaveChangesAsync();
            }

            ViewBag.Success = "true";
            return(RedirectToAction("Index", "Employees"));
        }