public async Task PutAsync(EmployeeDto employeeDto, ClaimsPrincipal admin)
        {
            var employee = await _context.Employee.FindAsync(employeeDto.EmployeeId);

            if (employee == null)
            {
                throw new InvalidOperationException();
            }

            var user = await _usersService.FindByEmailAsync(employee.WorkEmail);

            if (user == null)
            {
                throw new InvalidOperationException();
            }

            _context.Entry(employee).State = EntityState.Detached;

            var newBalance = (employeeDto.Balance ?? CulcBalance()) - employee.Balance;

            var newEmployee = _mapper.Map <EmployeeDto, Employee>(employeeDto);

            newEmployee.Balance = employeeDto.Balance ?? CulcBalance();

            newEmployee.ImgUrl = await _imagesService.GetUrlAsync(employeeDto.ImgUrl);

            using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                _context.Employee.Update(newEmployee);

                user.UserName = employeeDto.WorkEmail;

                user.Email = employeeDto.WorkEmail;

                await _transactionService.CreateTransactionByAdminAsync(newEmployee.EmployeeId, newBalance, admin);

                await _usersService.UpdateUser(user);

                await _usersService.UpdateUserRole(user, employeeDto.RoleId);

                await _context.SaveChangesAsync();

                scope.Complete();
            }
        }