public async Task <IActionResult> BuyMembership(long clientId, long membershipId, long groupId, string firstDay)
        {
            Client client = _db.Clients.FirstOrDefault(p => p.Id == clientId);

            if (clientId != 0 && membershipId != 0 && groupId != 0 && firstDay != null)
            {
                Console.WriteLine(groupId);
                DateTime startDate = DateTime.Parse(firstDay).Date;
                Console.WriteLine(startDate);

                client.Paid          = Paid.Есть_долг;
                client.GroupId       = groupId;
                client.MembershipId  = membershipId;
                client.ClientType    = ClientType.AreEngaged;
                client.CreatorId     = GetUserId.GetCurrentUserId(this.HttpContext);
                client.HasMembership = true;
                Models.Group group = _db.Groups.FirstOrDefault(g => g.Id == groupId);
                if (group != null && group.Clients.Count == 0)
                {
                    group.Clients = new List <Client>()
                    {
                        client
                    }
                }
                ;
                else
                {
                    group?.Clients.Add(client);
                }

                Membership membership = _db.Memberships.FirstOrDefault(m => m.Id == membershipId);
                client.Balance = -membership.Price;
                DateTime endDate = _clientServices.EndDateForClientsMembership(
                    startDate,
                    group.Id,
                    membership.AttendanceDays);

                Console.WriteLine(endDate);

                ClientsMembership clientsMembership = new ClientsMembership()
                {
                    Client            = client,
                    MembershipId      = membership.Id,
                    DateOfPurchase    = DateTime.Now,
                    DateOfExpiry      = endDate,
                    FirstDateOfLesson = startDate
                };

                _db.Entry(clientsMembership).State = EntityState.Added;
                int daysFrozen = 0;
                if (membership.AttendanceDays == 12)
                {
                    daysFrozen = 3;
                }
                else if (membership.AttendanceDays == 8)
                {
                    daysFrozen = 2;
                }
                else
                {
                    daysFrozen = 0;
                }
                var datesOfAttendance = _clientServices.DatesForAttendance(
                    startDate, groupId,
                    membership.AttendanceDays + daysFrozen);
                AttendanceCount attendanceCount = new AttendanceCount()
                {
                    AttendingTimes = membership.AttendanceDays,
                    AbsenceTimes   = 0,
                    FrozenTimes    = daysFrozen
                };
                _db.Entry(attendanceCount).State = EntityState.Added;
                for (int i = 0; i < membership?.AttendanceDays; i++)
                {
                    Attendance attendance = new Attendance()
                    {
                        Client            = client,
                        MembershipId      = membership.Id,
                        Date              = datesOfAttendance[i],
                        AttendanceState   = AttendanceState.notcheked,
                        GroupId           = groupId,
                        AttendanceCount   = attendanceCount,
                        ClientsMembership = clientsMembership
                    };
                    _db.Entry(attendance).State = EntityState.Added;
                }

                _db.Entry(client).State = EntityState.Modified;
                _db.Entry(group).State  = EntityState.Modified;
                await _db.SaveChangesAsync();

                await Task.Delay(500);

                return(RedirectToAction("RegularClients", "Clients", new { branchId = client.Group.BranchId }));
            }
            else
            {
                Console.WriteLine("");
            }

            await Task.Delay(500);

            return(RedirectToAction("RegularClients", "Clients", new { branchId = client.Group.BranchId }));
        }
        public async Task <IActionResult> ExtendAjax(MembershipExtendModelView model)
        {
            Client client = await _db.Clients.FirstOrDefaultAsync(p => p.Id == model.ClientId);

            Membership membership = await _db.Memberships.FirstOrDefaultAsync(p => p.Id == model.MembershipId);

            if (-client.Balance > model.CashSum + model.CardSum)
            {
                return(Content("errorNotEnoughSum"));
            }
            foreach (var attendanceUnActive in _db.Attendances.Where(a => a.ClientId == model.ClientId))
            {
                attendanceUnActive.IsNotActive = true;
            }
            int daysFrozen = 0;

            if (membership.AttendanceDays == 12)
            {
                daysFrozen = 3;
            }
            else if (membership.AttendanceDays == 8)
            {
                daysFrozen = 2;
            }
            else
            {
                daysFrozen = 0;
            }

            List <DateTime> datesOfAttendance = _clientServices.DatesForAttendance(
                model.Date, model.GroupId,
                membership.AttendanceDays);

            AttendanceCount attendanceCount = new AttendanceCount()
            {
                AttendingTimes = membership.AttendanceDays,
                AbsenceTimes   = 0,
                FrozenTimes    = daysFrozen
            };

            _db.Entry(attendanceCount).State = EntityState.Added;

            client.MembershipId     = membership.Id;
            client.GroupId          = model.GroupId;
            client.Membership       = membership;
            client.LessonNumbers    = membership.AttendanceDays;
            client.HasMembership    = true;
            _db.Entry(client).State = EntityState.Modified;

            DateTime endDate = _clientServices.EndDateForClientsMembership(
                model.Date, model.GroupId,
                membership.AttendanceDays);
            ClientsMembership clientsMembership = new ClientsMembership()
            {
                ClientId          = client.Id,
                MembershipId      = membership.Id,
                DateOfPurchase    = DateTime.Now,
                DateOfExpiry      = endDate,
                FirstDateOfLesson = model.Date
            };

            _db.Entry(clientsMembership).State = EntityState.Added;
            foreach (var date in datesOfAttendance)
            {
                Attendance attendance = new Attendance()
                {
                    ClientId          = client.Id,
                    MembershipId      = membership.Id,
                    Date              = date,
                    AttendanceState   = AttendanceState.notcheked,
                    GroupId           = model.GroupId,
                    AttendanceCount   = attendanceCount,
                    ClientsMembership = clientsMembership
                };
                _db.Entry(attendance).State = EntityState.Added;
            }
            Employee employee = await _userManager.GetUserAsync(User);

            await _db.SaveChangesAsync();

            model.BranchId = client.Group.BranchId;
            bool check = await _paymentsService.PayForMembership(model, clientsMembership, client, employee.Id);

            if (!check)
            {
                return(Content("error"));
            }
            return(Content("success"));
        }