Exemplo n.º 1
0
        public async Task <Person> RequestLeave(LeaveRequest leaveRequest)
        {
            var result = _orgGroupRepository.PersonWithOrgGroupChain(leaveRequest.PersonId);

            if (result.personOnLeave?.StaffId == null)
            {
                throw new UnauthorizedAccessException("Person requesting leave must be staff");
            }
            leaveRequest.Approved     = null;
            leaveRequest.ApprovedById = null;
            leaveRequest.CreatedDate  = DateTime.Now;
            var leaveUsage = GetCurrentLeaveUseage(leaveRequest.Type, result.personOnLeave.Id);
            var isNew      = leaveRequest.IsNew();

            _entityService.Save(leaveRequest);
            try
            {
                await NotifyHr(leaveRequest, result.personOnLeave, leaveUsage);

                return(await ResolveLeaveRequestChain(leaveRequest,
                                                      result.personOnLeave,
                                                      result.department,
                                                      result.devision,
                                                      result.supervisorGroup,
                                                      leaveUsage));
            }
            catch
            {
                if (isNew)
                {
                    _entityService.Delete(leaveRequest);
                }
                throw;
            }
        }
Exemplo n.º 2
0
        public void OrgGroupChainResolvesAsExpected()
        {
            var personFaker                = _servicesFixture.PersonFaker();
            var expectedPersonOnLeave      = personFaker.Generate();
            var expectedDepartment         = AutoFaker.Generate <OrgGroup>();
            var expectedDevision           = AutoFaker.Generate <OrgGroup>();
            var expectedDevisionSupervisor = personFaker.Generate();

            expectedPersonOnLeave.Staff.OrgGroupId = expectedDepartment.Id;

            expectedDepartment.Supervisor = null;
            expectedDepartment.ParentId   = expectedDevision.Id;

            expectedDevision.Supervisor = expectedDevisionSupervisor.Id;
            expectedDevision.ParentId   = null;

            _dbConnection.Insert(expectedPersonOnLeave);
            _dbConnection.Insert(expectedPersonOnLeave.Staff);
            _dbConnection.Insert(expectedDepartment);
            _dbConnection.Insert(expectedDevision);
            _dbConnection.Insert(expectedDevisionSupervisor);
            _dbConnection.Insert(expectedDevisionSupervisor.Staff);

            //test method
            (var actualPersonOnLeave, var actualDepartment, var actualDevision, var actualSupervisorGroup) =
                _orgGroupRepository.PersonWithOrgGroupChain(expectedPersonOnLeave.Id);

            Assert.NotNull(actualPersonOnLeave);
            Assert.Equal(expectedPersonOnLeave.Id, actualPersonOnLeave.Id);
            Assert.NotNull(actualDepartment);
            Assert.Equal(expectedDepartment.Id, actualDepartment.Id);
            Assert.Null(actualDepartment.SupervisorPerson);
            Assert.NotNull(actualDevision);
            Assert.Equal(expectedDevision.Id, actualDevision.Id);
            Assert.Equal(expectedDevisionSupervisor.Id, actualDevision.SupervisorPerson.Id);
            Assert.Null(actualSupervisorGroup);
        }