Пример #1
0
        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());
        }
Пример #2
0
        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);
            }
        }