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")); }