Ejemplo n.º 1
0
        public void ShouldReturnEndDate()
        {
            var options = new DbContextOptionsBuilder <YogaAshramContext>().UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()).Options;
            var context = new YogaAshramContext(options);

            Seed(context);
            var query = new ClientServices(context);

            var result = query.EndDateForClientsMembership(_date, 1, 4);

            _testOutputHelper.WriteLine(result.ToString("d"));
            Assert.Equal(new DateTime(2020, 11, 5), result.Date);
        }
        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"));
        }