public async Task <PartialViewResult> EditTimeReport(int id)
        {
            TimeReportEntity reportEntity = await unitOfWork.TimeReportRepository.GetByID(id);

            var model = new ManageTimeReportModel
            {
                Id         = reportEntity.TimeReportId,
                SpentHours = new ReportSpentHours
                {
                    Effort   = reportEntity.Effort,
                    Overtime = reportEntity.Overtime
                },
                TimeInterval = new TimeReportInterval
                {
                    StartDate = reportEntity.StartDate,
                    EndDate   = reportEntity.EndDate
                },
                ProjectId = reportEntity.Projects?.ProjectId ?? 1000,
                TaskId    = reportEntity.TaskId,
                //Tasks = unitOfWork.TaskRepository.GetAll(), //todo: проверить чтобы таски соответствовали проекту!!!!
                Tasks = allTasks.Select(taskEntity => new TaskEntity//задачи из словаря
                {
                    TaskId = taskEntity.Key,
                    Title  = taskEntity.Value,
                }),
                Projects    = await unitOfWork.ProjectRepository.GetAll(),
                Description = reportEntity.Description
            };

            return(this.PartialView("EditableTimeReportRow", model));
        }
        public RedirectToRouteResult Save(ManageTimeReportModel postModel)
        {
            TimeReportEntity newReport = new TimeReportEntity
            {
                Id          = postModel.Id,
                Effort      = postModel.SpentHours.Effort,
                Overtime    = postModel.SpentHours.Overtime,
                StartDate   = postModel.TimeInterval.StartDate,
                EndDate     = postModel.TimeInterval.EndDate,
                Status      = ReportStatus.Open,
                Task        = tasksRepository.GetById(postModel.TaskId), //todo: if PostModel.ProjectId != Task.Project.Id => Exception - таски должны соответствовать проекту
                Description = postModel.Description
            };
            var report = reportsRepository.GetById(postModel.Id);

            if (report == null)
            {
                this.reportsRepository.Add(newReport);
            }
            else
            {
                reportsRepository.Update(newReport);
            }
            return(RedirectToAction("Index"));
        }
        public PartialViewResult CreateTimeReport()
        {
            //TODO : Таси соотв проекту
            IEnumerable <ProjectEntity> projectEntities = this.projectsRepository.GetAll();
            IEnumerable <TaskEntity>    tasksEntities   = this.tasksRepository.GetAll();

            var createModel = new ManageTimeReportModel
            {
                Tasks    = tasksEntities,
                Projects = projectEntities
            };

            return(this.PartialView("EditableTimeReportRow", createModel));
        }
        public async Task <RedirectToRouteResult> Save(ManageTimeReportModel postModel)
        {
            postModel.Projects = await unitOfWork.ProjectRepository.GetAll();

            var accounts = await unitOfWork.AccountRepository.GetAll();

            int accountId = accounts.FirstOrDefault(m => m.Login == User.Identity.Name).AccountId;

            TimeReportEntity newReport = new TimeReportEntity
            {
                TimeReportId = postModel.Id,
                ProjectId    = postModel.ProjectId,
                AccountId    = accountId,
                Effort       = postModel.SpentHours.Effort,
                Overtime     = postModel.SpentHours.Overtime,
                StartDate    = postModel.TimeInterval.StartDate,
                EndDate      = postModel.TimeInterval.EndDate,
                Status       = ReportStatus.Open,
                TaskId       = postModel.TaskId, //todo: if PostModel.ProjectId != Task.Project.Id => Exception - таски должны соответствовать проекту
                Description  = postModel.Description
            };

            var report = await unitOfWork.TimeReportRepository.GetByID(postModel.Id);

            //try
            //{
            if (report == null)
            {
                await this.reportsService.Insert(newReport);
            }
            else
            {
                await reportsService.Update(newReport);
            }
            //}
            //catch (Exception e)
            //{
            //    return new HttpStatusCodeResult(HttpStatusCode.BadRequest, e.Message);
            //}

            //return new HttpStatusCodeResult(HttpStatusCode.OK);
            return(RedirectToAction("Index"));
        }
        public async Task <PartialViewResult> CreateTimeReport()
        {
            //TODO : Таски соответствуют проекту
            //IEnumerable<TaskEntity> tasksEntities = unitOfWork.TaskRepository.GetAll();//задачи из базы данных

            IEnumerable <TimeReportEntity> allTimeReport = await unitOfWork.TimeReportRepository.GetAll();

            IEnumerable <ProjectEntity> projectEntities = await unitOfWork.ProjectRepository.GetAll();

            IEnumerable <TaskEntity> tasksEntities = allTasks.Select(taskEntity => new TaskEntity//задачи из словаря
            {
                TaskId = taskEntity.Key,
                Title  = taskEntity.Value,
            });

            var createModel = new ManageTimeReportModel
            {
                Tasks    = tasksEntities,
                Projects = projectEntities,
                Id       = allTimeReport.Last().TimeReportId + 1
            };

            return(this.PartialView("EditableTimeReportRow", createModel));
        }
        public PartialViewResult EditTimeReport(int id)
        {
            TimeReportEntity reportEntity = this.reportsRepository.GetById(id);
            var model = new ManageTimeReportModel
            {
                Id         = reportEntity.Id,
                SpentHours = new ReportSpentHours
                {
                    Effort   = reportEntity.Effort,
                    Overtime = reportEntity.Overtime
                },
                TimeInterval = new TimeReportInterval
                {
                    StartDate = reportEntity.StartDate,
                    EndDate   = reportEntity.EndDate
                },
                ProjectId   = reportEntity.Task.Project.Id,
                TaskId      = reportEntity.Task.Id,
                Tasks       = tasksRepository.GetAll(), //todo: проверить чтобы таски соответствовали проекту!!!!
                Description = reportEntity.Description
            };

            return(this.PartialView("EditableTimeReportRow", model));
        }