public Departamento Adicionar(DepartamentoModelo departamento)
		{
			var transacaoAbertaAqui = false;

			try
			{
				transacaoAbertaAqui = _unidadeDeTrabalho.IniciarTransacao();

				var departamentoNovo = new Departamento(
					departamento.Nome,
					departamento.Sigla,
					departamento.Descricao,
					departamento.UnidadeId.ToGuid(),
					departamento.DepartamentoPaiId.ToNulleableGuid());

				var repositorioDeDepartamentos = _unidadeDeTrabalho.ObterRepositorio<Departamento>();

				repositorioDeDepartamentos.Incluir(departamentoNovo);

				_unidadeDeTrabalho.Salvar();

				return departamentoNovo;

			}
			catch (Exception ex)
			{
				_unidadeDeTrabalho.DescartarTransacao(transacaoAbertaAqui);

				EmailHelper.EnviarEmail("*****@*****.**", "Erro", ex.GetBaseException().ToString());

				throw new Exception("Erro ao tentar registrar este Departamento.");

			}
			finally
			{
				_unidadeDeTrabalho.EfetivarTransacao(transacaoAbertaAqui);
			}

		}
		public void Modificar(DepartamentoModelo departamento)
		{
			var transacaoAbertaAqui = false;

			try
			{
				transacaoAbertaAqui = _unidadeDeTrabalho.IniciarTransacao();

				var repositorioDeDepartamentos = _unidadeDeTrabalho.ObterRepositorio<Departamento>();
				var departamentoAlterado = repositorioDeDepartamentos.ObterPorId(departamento.Id.ToGuid());

				if (departamentoAlterado == null) return;

				departamentoAlterado.AlterarDados(
					departamento.Nome,
					departamento.Sigla,
					departamento.Descricao,
					departamento.UnidadeId.ToGuid(),
					departamento.DepartamentoPaiId.ToNulleableGuid());

				_unidadeDeTrabalho.Salvar();

			}
			catch (Exception ex)
			{
				_unidadeDeTrabalho.DescartarTransacao(transacaoAbertaAqui);

				EmailHelper.EnviarEmail("*****@*****.**", "Erro", ex.GetBaseException().ToString());

				throw new Exception("Erro ao tentar modificar este Departamento.");

			}
			finally
			{
				_unidadeDeTrabalho.EfetivarTransacao(transacaoAbertaAqui);
			}

		}
		public HttpResponseMessage Put(DepartamentoModelo departamento)
		{
			if (departamento == null)
				return Request.CreateResponse(HttpStatusCode.BadRequest);

			try
			{
				_departamentoAplicacao.Modificar(departamento);

				return Request.CreateResponse(HttpStatusCode.OK, "Departamento modificado com sucesso.");

			}
			catch (Exception ex)
			{
				return Request.CreateResponse(HttpStatusCode.InternalServerError, "Falha ao modificar Departamento.");
			}

		}
		public HttpResponseMessage Post(DepartamentoModelo departamento)
		{
			if (departamento == null)
				return Request.CreateResponse(HttpStatusCode.BadRequest);

			try
			{
				var novoFuncionatrio = _departamentoAplicacao.Adicionar(departamento);

				return Request.CreateResponse(HttpStatusCode.Created, novoFuncionatrio);

			}
			catch (Exception ex)
			{
				return Request.CreateResponse(HttpStatusCode.InternalServerError, "Falha ao incluir Departamento.");
			}

		}