public async Task <bool> PayForMembership(PaymentCreateModelView model, ClientsMembership clientsMembership, Client client, long employeeId) { int sum = (int)model.CashSum + (int)model.CardSum; int balance = client.Balance; if (balance < 0) { balance = 0; } Membership membership = client.Membership; int debts = membership.Price - sum - balance; Payment payment = new Payment() { Comment = model.Comment, ClientsMembershipId = clientsMembership.Id, CreatorId = employeeId, CashSum = (int)model.CashSum, CardSum = (int)model.CardSum, Type = model.Type, BranchId = model.BranchId }; CurrentSum currentSum = _db.CurrentSums.FirstOrDefault(p => p.BranchId == model.BranchId); currentSum.CashSum += model.CashSum; currentSum.CreditSum += model.CardSum; _db.Entry(currentSum).State = EntityState.Modified; SetParams(ref payment, ref client, debts, model.Type, sum); _db.Entry(client).State = EntityState.Modified; _db.Entry(payment).State = EntityState.Added; await _db.SaveChangesAsync(); return(true); }
public async Task <string> CreatePayment(PaymentCreateModelView model, ClientsMembership clientsMembership, Client client, long employeeId) { model.BranchId = client.Group.BranchId; int sum = model.CashSum + model.CardSum; if (sum == 0 || sum < 0) { return("negativeOrZero"); } if (client.Balance < 0 && model.Type == PaymentType.Pay) { return("false"); } if (client.Membership is null && model.Type == PaymentType.Pay) { return("false"); } int balance = client.Balance; if (balance < 0) { balance = 0; } Membership membership = client.Membership; int debts = membership.Price - sum - balance; if (clientsMembership is null) { return("false"); } Payment payment = new Payment() { Comment = model.Comment, ClientsMembershipId = clientsMembership.Id, CreatorId = employeeId, CashSum = (int)model.CashSum, CardSum = (int)model.CardSum, Type = model.Type, BranchId = model.BranchId }; CurrentSum currentSum = _db.CurrentSums.FirstOrDefault(p => p.BranchId == model.BranchId); currentSum.CashSum += model.CashSum; currentSum.CreditSum += model.CardSum; _db.Entry(currentSum).State = EntityState.Modified; SetParams(ref payment, ref client, debts, model.Type, sum); _db.Entry(client).State = EntityState.Modified; _db.Entry(payment).State = EntityState.Added; await _db.SaveChangesAsync(); return("success"); }
public async Task <IActionResult> MembershipExtension(long clientId, string date) { Client client = await _db.Clients.FindAsync(clientId); if (client is null) { return(NotFound()); } long branchId = client.Group.BranchId; ViewBag.Memberships = await _db.Memberships.ToArrayAsync(); if (User.IsInRole("admin")) { Employee employee = await _userManager.GetUserAsync(User); Branch branch = await _db.Branches.FirstOrDefaultAsync(b => b.AdminId == employee.Id); if (employee != null) { ViewBag.Schedules = await _db.Schedules.Where(s => s.BranchId == branch.Id).ToListAsync(); } else { return(NotFound()); } } else if (User.IsInRole("chief") || User.IsInRole("manager")) { ViewBag.Schedules = await _db.Schedules.Where(s => s.BranchId == branchId).ToListAsync(); } else { return(NotFound()); } ViewBag.Date = Convert.ToDateTime(date); if (date is null) { ClientsMembership clientsMembership = _db.ClientsMemberships.ToList().Last(c => c.ClientId == clientId); ViewBag.Date = clientsMembership.DateOfExpiry; } return(PartialView(new MembershipExtendModelView() { ClientId = client.Id, Client = client, BranchId = branchId })); }
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")); }