Beispiel #1
0
        public async Task <LeaveResult> ApproveAsync(int leaveId)
        {
            var leave = leavesRepository.GetById(leaveId);

            if (leave == null)
            {
                return(LeaveResult.ReturnNotFound());
            }
            if (leave.Status == LeaveStatus.Approved)
            {
                return(LeaveResult.Fail(
                           $"Leave id={leaveId} has already been approved"
                           ));
            }
            try
            {
                var publishContract = mapper.Map <Leave, PublishUserEventContract>(leave);
                var eventUrl        = await googleCalendarManager.PublishUserEventAsync(
                    publishContract
                    );

                leave.Status             = LeaveStatus.Approved;
                leave.GoogleCalendarLink = eventUrl;

                await leavesRepository.UpdateAsync(leave);
            }
            catch (DbUpdateConcurrencyException)
            {
                return(LeaveResult.Fail(
                           $"Leave id={leaveId} is being updated by another user"
                           ));
            }

            return(LeaveResult.Succeed());
        }
Beispiel #2
0
        public async Task <LeaveResult> DeclineAsync(int leaveId)
        {
            var leave = leavesRepository.GetById(leaveId);

            if (leave == null)
            {
                return(LeaveResult.ReturnNotFound());
            }
            if (leave.Status == LeaveStatus.Approved)
            {
                return(LeaveResult.Fail(
                           $"Cannot decline leave id={leaveId} " +
                           "that has already been approved"
                           ));
            }
            if (leave.Status == LeaveStatus.Declined)
            {
                return(LeaveResult.Fail(
                           $"Leave id={leaveId} has already been declined"
                           ));
            }
            try
            {
                leave.Status = LeaveStatus.Declined;
                await leavesRepository.UpdateAsync(leave);
            }
            catch (DbUpdateConcurrencyException)
            {
                return(LeaveResult.Fail(
                           $"Leave id={leaveId} is being updated by another user"
                           ));
            }
            return(LeaveResult.Succeed());
        }
Beispiel #3
0
        public async Task <LeaveResult> ApplyAsync(ApplyLeaveContract leaveContract)
        {
            var leave = mapper.Map <ApplyLeaveContract, Leave>(leaveContract);
            await leavesRepository.InsertAsync(leave);

            return(LeaveResult.Succeed(leave));
        }