public async Task <ServiceResponse> SaveEmployeeAsync(EmployeeDto EmployeeDto) { ServiceResponse ret = new ServiceResponse(); Guid newId = Guid.Empty; try { if (EmployeeDto.Id == Guid.Empty) { newId = Guid.NewGuid(); EmployeeDto.Id = newId; } Guid existing_id = await this.employeeRepository.GetIdByName(EmployeeDto.Name); // TODO: check everything // if new record and name already exists if (existing_id != Guid.Empty && existing_id != EmployeeDto.Id) { ret.AddError(new ServiceResponseItem("EmployeeName", $"Employe with name: {EmployeeDto.Name} already exists.")); } // WorkPlace if (EmployeeDto.WorkPlace.Id == Guid.Empty) { ret.AddError(new ServiceResponseItem("WorkPlace", $"Workplace must be defined")); } // check Manager if (EmployeeDto.Manager != null && EmployeeDto.Manager.Id == Guid.Empty) { ret.AddError(new ServiceResponseItem("Manager", $"Manager must be defined")); } if (EmployeeDto.Manager == null) { ret.AddError(new ServiceResponseItem("Manager", $"Manager must be defined")); } if (EmployeeDto.Manager != null) { Manager manager = await this.managerRepository.GetById(EmployeeDto.Manager.Id); if (manager == null) { ret.AddError(new ServiceResponseItem("Manager", $"Invalid Manager specified!")); } } // other checks goes here // if any errors, return if (ret.HasErrors()) { return(ret.Get()); } // // compose new empoyee Employee employee = new Employee(EmployeeDto.Id, EmployeeDto.Name, EmployeeDto.Email); if (EmployeeDto.WorkPlace != null) { WorkPlaceDto wpDto = EmployeeDto.WorkPlace; WorkPlace wp = new WorkPlace(wpDto.Id, wpDto.Country, wpDto.City, wpDto.Name); employee.SetWorkPlace(wp); } if (EmployeeDto.Manager != null) { ManagerDto mDto = EmployeeDto.Manager; employee.SetManager(new Manager(mDto.Id, mDto.Name)); } foreach (EmployeeSkillDto sdto in EmployeeDto.Skills) { employee.AddSkill(sdto.Id, sdto.Name, MaturityEnum.High); } foreach (EmployeeRoleDto rdto in EmployeeDto.Roles) { ContributionGroup cg = new ContributionGroup(rdto.ContributionGroup.Id, rdto.ContributionGroup.Name); employee.AddRole(rdto.RoleId, rdto.Name, cg); } await this.employeeRepository.UpdateEmployeeAsync(employee); } catch (Exception ex) { ret.SetErrorMessage("Error while saving an employee occured : " + ex.Message); } return(ret.Get()); }
public async Task <Employee> GetById(Guid id) { int YearStart = DateTime.Now.Year; int MonthStart = DateTime.Now.Month; int YearEnd = DateTime.Now.AddMonths(5).Year; int MonthEnd = DateTime.Now.AddMonths(5).Month; var sql = @" select Id, Name, Email from Employees where Id = @Employeeid; select Id, Name, Maturity from EmployeeSkills es JOIN Skills s ON s.Id = es.SkillId where EmployeeId = @Employeeid; select Year, Month, Precentage, EmployeeId FROM EmployeeAvailabilities WHERE (Year * 100 + Month) BETWEEN (@YearStart * 100 + @MonthStart) AND (@YearEnd * 100 + @MonthEnd) AND EmployeeId = @Employeeid ORDER BY Year, Month; SELECT r.Id RoleId, r.Name RoleName, cg.Id ContributionGroupId, cg.Name ContributionGroupName from EmployeeRoles er JOIN Roles r ON r.Id = er.RoleId JOIN ContributionGroups cg ON cg.Id = er.ContributionGroupId WHERE EmployeeId = @Employeeid; SELECT * FROM WorkPlaces WHERE Id = (SELECT WorkPlaceId FROM Employees WHERE Id = @Employeeid); SELECT Id, Name FROM Employees Managers WHERE Id = (SELECT ManagerId FROM Employees WHERE Id = @Employeeid); "; using (var c = this.OpenConnection) { var multi = await c.QueryMultipleAsync(sql, new { EmployeeId = id, YearStart = YearStart, MonthStart = MonthStart, YearEnd = YearEnd, MonthEnd = MonthEnd }); var emp = multi.Read <Employee>().FirstOrDefault(); if (emp == null) { return(emp); } var empSkills = multi.Read <EmployeeSkill>().ToList(); empSkills.ForEach(s => { emp.AddSkill(s.Id, s.Name, s.Maturity); }); var empAvailability = multi.Read <AvailabilityEntryDto>().ToList(); empAvailability.ForEach(a => { emp.AddAvailability(a.Year, a.Month, a.Precentage); }); var empRoles = multi.Read <RoleContrinutionGroupHelperStruct>().ToList(); empRoles.ForEach(r => { var cg = new ContributionGroup(r.ContributionGroupId, r.ContributionGroupName); emp.AddRole(r.RoleId, r.RoleName, cg); }); var empWorkPlace = multi.Read <WorkPlaceDto>().ToList(); empWorkPlace.ForEach(wp => { var workPlace = new WorkPlace(wp.Id, wp.Country, wp.City, wp.Name); emp.SetWorkPlace(workPlace); }); var empManagers = multi.Read <ManagerDto>().ToList(); empManagers.ForEach(m => { var manager = new Manager(m.Id, m.Name); emp.SetManager(manager); }); return(emp); } }