示例#1
0
        private async Task <SalaryHistory> PrepareSalaryHistory(SalaryServiceModel model)
        {
            var salaryHistoryRepo = _unitOfWork.GetRepository <SalaryHistory>();

            var lastChanged = (await salaryHistoryRepo.GetAsync(x => x.SalaryId == model.Id, x => x.OrderBy(x => x.DateChanged)))
                              .LastOrDefault();
            DateTime fromDate;

            if (lastChanged == null)
            {
                fromDate = model.Employee.HiredDate;
            }
            else
            {
                fromDate = lastChanged.ToDate;
            }

            var salaryHistory = new SalaryHistory
            {
                DateChanged = DateTime.UtcNow,
                Amount      = model.Amount,
                FromDate    = fromDate,
                ToDate      = DateTime.UtcNow,
                Employee    = _mapper.Map <Employee>(model.Employee),
                SalaryId    = model.Id
            };

            return(salaryHistory);
        }
示例#2
0
        public async Task <bool> UpdateEmployeeSalary(SalaryServiceModel model)
        {
            try
            {
                _unitOfWork.BeginTransaction();

                var updateModel = _mapper.Map <Salary>(model);
                var historyRepo = _unitOfWork.GetRepository <SalaryHistory>();

                var salaryHistory = await PrepareSalaryHistory(model);

                await _unitOfWork.GetRepository <Salary>().UpdateAsync(updateModel);

                await historyRepo.AddItemAsync(salaryHistory);


                await _unitOfWork.CommitAsync();

                return(true);
            }
            catch
            {
                await _unitOfWork.RollbackAsync();

                throw;
            }
        }
示例#3
0
        public async Task <IActionResult> ChangeJob(UpdateEmployeeJobViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var salId             = (await _managerService.GetEmployeeSalary(model.EmployeeEmail)).Id;
            var salaryUpdateModel = new SalaryServiceModel
            {
                Amount     = model.Amount,
                Currency   = await _nomenclatureService.GetCurrency(model.CurrencyId),
                SalaryType = await _nomenclatureService.GetSalaryType(model.SalaryTypeId),
                Employee   = await _accountManageService.GetEmployeeByEmailAsync(model.EmployeeEmail),
                Id         = salId
            };

            var jobModel = await _adminService.GetJobById(model.JobId);

            await _managerService.UpdateEmployeeJob(jobModel, salaryUpdateModel);

            StatusMessage = $"Successfuly updated job for employee with email {model.EmployeeEmail}";

            return(RedirectToAction(nameof(ChangeJob), routeValues: new { email = model.EmployeeEmail }));
        }
示例#4
0
        public async Task <bool> UpdateEmployeeJob(JobServiceModel job, SalaryServiceModel model)
        {
            try
            {
                _unitOfWork.BeginTransaction();

                var jobModel    = _mapper.Map <Job>(job);
                var updateModel = _mapper.Map <Salary>(model);

                var salaryHistoryRepo = _unitOfWork.GetRepository <SalaryHistory>();
                var employeeRepo      = _unitOfWork.GetRepository <Employee>();

                var employee = employeeRepo.GetById(updateModel.Employee.Id);
                employee.Job = jobModel;

                var salaryHistory = await PrepareSalaryHistory(model);

                var jobHistory = new JobHistory
                {
                    DateChanged     = salaryHistory.DateChanged,
                    EmployeeId      = employee.Id,
                    FromDate        = salaryHistory.FromDate,
                    ToDate          = salaryHistory.ToDate,
                    Job             = jobModel,
                    SalaryHistoryId = salaryHistory.SalaryId
                };

                await _unitOfWork.GetRepository <Salary>().UpdateAsync(updateModel);

                await salaryHistoryRepo.AddItemAsync(salaryHistory);

                await employeeRepo.UpdateAsync(employee);

                await _unitOfWork.GetRepository <JobHistory>().AddItemAsync(jobHistory);

                await _unitOfWork.CommitAsync();

                return(true);
            }
            catch
            {
                await _unitOfWork.RollbackAsync();

                throw;
            }
        }