Exemplo n.º 1
0
        public override async Task <BaseResponse> AddAsync(TeamData request, ServerCallContext context)
        {
            try
            {
                if (request is null)
                {
                    await _teamsRepository.AddAsync(null);
                }
                Team team = new()
                {
                    Name        = request.Name,
                    Description = request.Description,
                };
                int result = await _teamsRepository.AddAsync(team);

                if (result == 0)
                {
                    throw new Exception("Team has not been saved");
                }
                BaseResponse response = new()
                {
                    Code         = Code.Success,
                    ErrorMessage = string.Empty,
                    DataId       = team.Id
                };

                LogData logData = new()
                {
                    CallSide         = nameof(TeamsService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = response
                };

                _logger.AddLog(logData);

                return(response);
            }
            catch (NullReferenceException nrex)
            {
                LogData logData = new()
                {
                    CallSide         = nameof(TeamsService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = nrex
                };

                _logger.AddErrorLog(logData);
                return(new BaseResponse
                {
                    Code = Code.DataError,
                    ErrorMessage = nrex.Message
                });
            }
            catch (ArgumentException aex)
            {
                LogData logData = new()
                {
                    CallSide         = nameof(TeamsService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = aex
                };

                _logger.AddErrorLog(logData);
                return(new BaseResponse
                {
                    Code = Code.DataError,
                    ErrorMessage = aex.Message
                });
            }
            catch (DbUpdateException duex)
            {
                LogData logData = new()
                {
                    CallSide         = nameof(TeamsService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = duex
                };

                _logger.AddErrorLog(logData);
                return(new BaseResponse
                {
                    Code = Code.DbError,
                    ErrorMessage = "An error occured while saving team"
                });
            }
            catch (Exception ex)
            {
                LogData logData = new()
                {
                    CallSide         = nameof(TeamsService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = ex
                };

                _logger.AddErrorLog(logData);
                return(new BaseResponse
                {
                    Code = Code.UnknownError,
                    ErrorMessage = ex.Message
                });
            }
        }
Exemplo n.º 2
0
        public override async Task <BaseResponse> AddAsync(RoadMapData request, ServerCallContext context)
        {
            try
            {
                RoadMap roadMap = FromRpcModel(request);
                int     result  = await _roadMapRepository.AddAsync(roadMap);

                if (result == 0)
                {
                    throw new Exception("Road map was not saved");
                }
                BaseResponse response = new()
                {
                    Code         = Code.Success,
                    DataId       = roadMap.Id,
                    ErrorMessage = string.Empty
                };
                LogData log = new()
                {
                    CallSide         = nameof(RoadMapsService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = response
                };
                _logger.AddLog(log);
                return(response);
            }
            catch (ArgumentException aex)
            {
                LogData log = new()
                {
                    CallSide         = nameof(RoadMapsService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = aex
                };
                _logger.AddErrorLog(log);
                return(new BaseResponse
                {
                    Code = Code.DataError,
                    ErrorMessage = aex.Message
                });
            }
            catch (InvalidOperationException ioex)
            {
                LogData log = new()
                {
                    CallSide         = nameof(RoadMapsService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = ioex
                };
                _logger.AddErrorLog(log);
                return(new BaseResponse
                {
                    Code = Code.DataError,
                    ErrorMessage = ioex.Message
                });
            }
            catch (DbUpdateException duex)
            {
                LogData log = new()
                {
                    CallSide         = nameof(RoadMapsService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = duex
                };
                _logger.AddErrorLog(log);
                return(new BaseResponse
                {
                    Code = Code.DbError,
                    ErrorMessage = "An error occured while saving road map"
                });
            }
            catch (Exception ex)
            {
                LogData log = new()
                {
                    CallSide         = nameof(RoadMapsService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = ex
                };
                _logger.AddErrorLog(log);
                return(new BaseResponse
                {
                    Code = Code.UnknownError,
                    ErrorMessage = ex.Message
                });
            }
        }
Exemplo n.º 3
0
        public override Task <PeopleResponse> GetAll(Empty request, ServerCallContext context)
        {
            PeopleResponse response = new()
            {
                Status = new BaseResponse
                {
                    Code         = Code.Success,
                    ErrorMessage = string.Empty
                }
            };

            try
            {
                IQueryable <Person> people = _peopleRepository.GetAll();

                foreach (Person person in people)
                {
                    response.Data.Add(ToRpcModel(person));
                }

                LogData logData = new()
                {
                    CallSide         = nameof(PeopleService),
                    CallerMethodName = nameof(GetAll),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = response
                };
                _logger.AddLog(logData);
            }
            catch (Exception ex)
            {
                LogData logData = new()
                {
                    CallSide         = nameof(PeopleService),
                    CallerMethodName = nameof(GetAll),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = ex
                };
                _logger.AddErrorLog(logData);
                response.Status.Code         = Code.UnknownError;
                response.Status.ErrorMessage = "An error orccured while loading people data";
            }
            return(Task.FromResult(response));
        }
Exemplo n.º 4
0
        public override async Task <BaseResponse> AddAsync(StaffData request, ServerCallContext context)
        {
            try
            {
                if (request is null)
                {
                    await _staffRepository.AddAsync(null);
                }
                Staff staff  = FromRpcModel(request);
                int   result = await _staffRepository.AddAsync(staff);

                if (result == 0)
                {
                    throw new Exception("Staff has not been saved");
                }

                BaseResponse response = new()
                {
                    Code         = Code.Success,
                    DataId       = staff.Id,
                    ErrorMessage = string.Empty
                };
                LogData logData = new()
                {
                    CallSide         = nameof(StaffService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = response
                };
                _logger.AddLog(logData);

                return(response);
            }
            catch (NullReferenceException nrex)
            {
                LogData logData = new()
                {
                    CallSide         = nameof(StaffService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = nrex
                };
                _logger.AddErrorLog(logData);
                return(new BaseResponse
                {
                    Code = Code.DataError,
                    ErrorMessage = nrex.Message
                });
            }
            catch (ArgumentException aex)
            {
                LogData logData = new()
                {
                    CallSide         = nameof(StaffService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = aex
                };
                _logger.AddErrorLog(logData);
                return(new BaseResponse
                {
                    Code = Code.DataError,
                    ErrorMessage = aex.Message
                });
            }
            catch (DbUpdateException duex)
            {
                LogData logData = new()
                {
                    CallSide         = nameof(StaffService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = duex
                };
                _logger.AddErrorLog(logData);
                return(new BaseResponse
                {
                    Code = Code.DbError,
                    ErrorMessage = "An error occured while saving staff data"
                });
            }
            catch (Exception ex)
            {
                LogData logData = new()
                {
                    CallSide         = nameof(StaffService),
                    CallerMethodName = nameof(AddAsync),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = ex
                };
                _logger.AddErrorLog(logData);
                return(new BaseResponse
                {
                    Code = Code.UnknownError,
                    ErrorMessage = ex.Message
                });
            }
        }
Exemplo n.º 5
0
        public override Task <ISalaryResponse> GetSalary(SalaryRequest request, ServerCallContext context)
        {
            ISalaryResponse response = new()
            {
                Status = new BaseResponse {
                    Code = Code.Success, ErrorMessage = string.Empty
                }
            };

            try
            {
                IQueryable <Staff> staffs = request.ManagerId == 0 ? _staffRepository.GetAll() : _staffRepository.GetByManagerId(request.ManagerId);
                IQueryable <IGrouping <long?, Staff> > groupedStaff = staffs.Where(e => e.PersonId.HasValue)
                                                                      .GroupBy(e => e.PersonId);
                foreach (IGrouping <long?, Staff> data in groupedStaff)
                {
                    SalaryResponse salaryResponse = CalculateCurrentSalary(data, request.StartDate.ToDateTime(), request.EndDate.ToDateTime());
                    salaryResponse = CalculateOtherPayments(salaryResponse, request.StartDate.ToDateTime(), request.EndDate.ToDateTime());
                    response.SalaryResponse.Add(salaryResponse);
                }
            }
            catch (NullReferenceException nrex)
            {
                LogData logData = new()
                {
                    CallSide         = nameof(SalaryService),
                    CallerMethodName = nameof(GetSalary),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = nrex
                };

                _logger.AddErrorLog(logData);
                response.Status.ErrorMessage = $"Some data has not found (type: {nrex.GetType().Name})";
                response.Status.Code         = Code.DataError;
            }
            catch (Exception ex)
            {
                LogData logData = new()
                {
                    CallSide         = nameof(SalaryService),
                    CallerMethodName = nameof(GetSalary),
                    CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                    Request          = request,
                    Response         = ex
                };

                _logger.AddErrorLog(logData);
                response.Status.ErrorMessage = ex.Message;
                response.Status.Code         = Code.UnknownError;
            }

            LogData log = new()
            {
                CallSide         = nameof(SalaryService),
                CallerMethodName = nameof(GetSalary),
                CreatedOn        = _dateTimeUtil.GetCurrentDateTime(),
                Request          = request,
                Response         = response
            };

            _logger.AddLog(log);

            return(Task.FromResult(response));
        }

        private SalaryResponse CalculateCurrentSalary(IGrouping <long?, Staff> staff, DateTime startDate, DateTime endDate)
        {
            IQueryable <DayOff>  dayOffs  = _dayOffRepository.GetByDateRangeAndPersonId(startDate, endDate, staff.First().PersonId.Value);
            IQueryable <Holiday> holidays = _holidaysRepository.GetByDateRange(startDate, endDate);
            SalaryResponse       response = new()
            {
                StartedOn = Timestamp.FromDateTime(staff.First().CreatedOn.ToUniversalTime())
            };
            double workHours = GetWorkHours();

            for (DateTime current = startDate.Date; current.Date <= endDate.Date; current = current.AddDays(1))
            {
                bool todoDay = (current.DayOfWeek == DayOfWeek.Saturday || current.DayOfWeek == DayOfWeek.Sunday) &&
                               holidays.Any(e => e.ToDoDate.HasValue && e.ToDoDate.Value.Date == current.Date);

                bool workDay = current.DayOfWeek != DayOfWeek.Saturday &&
                               current.DayOfWeek != DayOfWeek.Sunday &&
                               !holidays.Any(e => e.HolidayDate.Date == current.Date);

                Staff currentStaff = staff.OrderByDescending(e => e.CreatedOn).FirstOrDefault(e => e.CreatedOn.Date <= current.Date);
                if (currentStaff is not null)
                {
                    Position position = _positionsRepository.Get(currentStaff.PositionId);
                    MotivationModificator modificator = null;
                    if (currentStaff.MotivationModificatorId.HasValue)
                    {
                        modificator = _motivationModificatorRepository.GetByStaffId(currentStaff.MotivationModificatorId.Value);
                    }
                    double rate = modificator != null ? position.HourRate * modificator.ModValue : position.HourRate;
                    response.CurrentPosition = position.Id;
                    response.PersonId        = currentStaff.PersonId.GetValueOrDefault();
                    if (workDay || todoDay)
                    {
                        if (!dayOffs.Any(e => e.CreatedOn.Date == current.Date))
                        {
                            response.Salary += workHours * rate;
                        }
                        else
                        {
                            DayOff dayOff = dayOffs.First(e => e.CreatedOn.Date == current.Date);
                            response.DayOffs.Add(new DayOffInfo
                            {
                                DayOffType = (int)dayOff.DayOffType,
                                Hours      = dayOff.Hours
                            });
                            if (dayOff.IsPaid)
                            {
                                if (dayOff.Hours < workHours)
                                {
                                    response.Salary += dayOff.Hours * rate + (workHours - dayOff.Hours) * rate;
                                }
                                else
                                {
                                    response.Salary += dayOff.Hours * rate;
                                }
                            }
                            else
                            {
                                response.Salary += (workHours - dayOff.Hours) * rate;
                            }
                        }
                    }
                    else if (holidays.Any(e => e.HolidayDate.Date == current.Date && !e.ToDoDate.HasValue))
                    {
                        response.Salary += workHours * rate;
                    }
                }
            }
            return(response);
        }

        private SalaryResponse CalculateOtherPayments(SalaryResponse calculatedSalary, DateTime start, DateTime end)
        {
            IQueryable <OtherPayment> otherPayments = _otherPaymentsRepository.GetByPersonIdAndDateRange(calculatedSalary.PersonId, start, end);

            foreach (OtherPayment otherPayment in otherPayments)
            {
                calculatedSalary.Salary += otherPayment.Value;
            }

            return(calculatedSalary);
        }