public int Adicionar(Solicitacao solicitacao, int solicitanteID)
 {
     solicitacao.SolicitanteID = solicitanteID;
     solicitacao.UsuarioID     = solicitanteID;
     solicitacao.DataDeCriacao = DateTime.Now;
     return(this.repository.Adicionar(solicitacao));
 }
        public void InserirItemTrocaDeUsuario(Solicitacao solicitacaoAtual, Solicitacao solicitacaoNova)
        {
            Usuario usuarioSolicitacaoAtual = this.usuarioRepository.ObterPorID(solicitacaoAtual.UsuarioID);
            Usuario usuarioSolicitacaoNova  = this.usuarioRepository.ObterPorID(solicitacaoNova.UsuarioID);

            string descricao = string.Format("tarefa repassada do usuário {0} para o usuário {1}", usuarioSolicitacaoAtual.Nome, usuarioSolicitacaoNova.Nome);

            var solicitacaoItem = new SolicitacaoItem(solicitacaoAtual.SolicitacaoID, descricao, solicitacaoAtual.UsuarioID);

            this.AdicionarItem(solicitacaoItem, solicitacaoAtual.UsuarioID);
        }
        public void Atualizar(Solicitacao solicitacao)
        {
            AlteracaoDeUsuario AlteracaoDeUsuario = this.TeveAlteracaoDeUsuario(solicitacao);

            if (AlteracaoDeUsuario.TeveAlteracao)
            {
                this.InserirItemTrocaDeUsuario(AlteracaoDeUsuario.Solicitacao, solicitacao);
            }

            this.repository.Atualizar(solicitacao);
            if (solicitacao.EstaFinalizada())
            {
                this.Concluir(solicitacao.SolicitacaoID);
            }
        }
        public int Adicionar(Solicitacao solicitacao)
        {
            string query = @"insert into dbo.solicitacao (DataDeCriacao, Descricao, ClienteID, DepartamentoID, UsuarioID, Status, SolicitanteID) 
                                        values (@DataDeCriacao, @Descricao, @ClienteID, @DepartamentoID, @UsuarioID, @Status, @SolicitanteID); SELECT SCOPE_IDENTITY();";

            var cmd = new SqlCommand(query, this.conexao.ObterConexao());

            cmd.Parameters.Add("@DataDeCriacao", SqlDbType.DateTime, 255).Value = solicitacao.DataDeCriacao;
            cmd.Parameters.Add("@Descricao", SqlDbType.VarChar, 8000).Value     = solicitacao.Descricao;
            cmd.Parameters.Add("@ClienteID", SqlDbType.Int).Value      = solicitacao.ClienteID;
            cmd.Parameters.Add("@DepartamentoID", SqlDbType.Int).Value = solicitacao.DepartamentoID;
            cmd.Parameters.Add("@UsuarioID", SqlDbType.Int).Value      = solicitacao.UsuarioID;
            cmd.Parameters.Add("@Status", SqlDbType.Int).Value         = StatusSolicitacao.nao_iniciado;
            cmd.Parameters.Add("@SolicitanteID", SqlDbType.Int).Value  = solicitacao.SolicitanteID;

            return(cmd.ExecuteNonQuery());
        }
        public Solicitacao ObterPorID(int solicitacaoID)
        {
            string        sql           = string.Format(@"select a.SolicitacaoID,
                                            a.DataDeCriacao,
                                            a.DataDeConclusao,
                                            a.Descricao,
                                            a.ClienteID,
                                            a.DepartamentoID,
                                            a.UsuarioID,
                                            a.SolicitanteID,
                                            a.Concluido, 
                                            a.Status,
                                            b.Nome as NomeUsuario,
                                            c.Nome as NomeCliente,
                                            d.Nome as NomeDepartamento,
                                            d.Nome as NomeSolicitante
                                        from solicitacao a
                                        inner join usuario b on (a.usuarioID = b.usuarioID)
                                        inner join cliente c on (a.clienteID = c.ClienteID)
                                        inner join departamento d on (a.departamentoID = d.departamentoID) 
                                        inner join usuario e on (a.usuarioID = e.usuarioID) where a.SolicitacaoID={0}", solicitacaoID);
            var           cmd           = new SqlCommand(sql, this.conexao.ObterConexao());
            SqlDataReader sqlDataReader = cmd.ExecuteReader();

            var solicitacao = new Solicitacao();

            while (sqlDataReader.Read())
            {
                solicitacao = new Solicitacao(Convert.ToInt32(sqlDataReader["SolicitacaoID"]),
                                              sqlDataReader["Descricao"].ToString(),
                                              Convert.ToDateTime(sqlDataReader["DataDeCriacao"]),
                                              sqlDataReader["DataDeConclusao"],
                                              Convert.ToBoolean(sqlDataReader["Concluido"]),
                                              Convert.ToInt32(sqlDataReader["ClienteID"]),
                                              Convert.ToInt32(sqlDataReader["departamentoID"]),
                                              Convert.ToInt32(sqlDataReader["UsuarioID"]),
                                              Convert.ToInt32(sqlDataReader["SolicitanteID"]),
                                              (StatusSolicitacao)Convert.ToInt32(sqlDataReader["Status"]),
                                              sqlDataReader["NomeUsuario"].ToString(),
                                              sqlDataReader["NomeCliente"].ToString(),
                                              sqlDataReader["NomeDepartamento"].ToString(),
                                              sqlDataReader["NomeSolicitante"].ToString());
            }
            return(solicitacao);
        }
        public void Atualizar(Solicitacao solicitacao)
        {
            string query = string.Format(@"update dbo.solicitacao 
                                                set Descricao=@Descricao, 
                                                    ClienteID=@ClienteID, 
                                                    DepartamentoID=@DepartamentoID ,
                                                    UsuarioID=@UsuarioID, 
                                                    Status=@Status
                                                where SolicitacaoID={0}", solicitacao.SolicitacaoID);

            var cmd = new SqlCommand(query, this.conexao.ObterConexao());

            cmd.Parameters.Add("@Descricao", SqlDbType.VarChar, 8000).Value = solicitacao.Descricao;
            cmd.Parameters.Add("@ClienteID", SqlDbType.Int).Value           = solicitacao.ClienteID;
            cmd.Parameters.Add("@DepartamentoID", SqlDbType.Int).Value      = solicitacao.DepartamentoID;
            cmd.Parameters.Add("@UsuarioID", SqlDbType.Int).Value           = solicitacao.UsuarioID;
            cmd.Parameters.Add("@Status", SqlDbType.Int).Value = (int)solicitacao.Status;
            cmd.ExecuteNonQuery();
        }
        public AlteracaoDeUsuario TeveAlteracaoDeUsuario(Solicitacao dados)
        {
            Solicitacao solicitacao = this.repository.ObterPorID(dados.SolicitacaoID);

            return(new AlteracaoDeUsuario(solicitacao.UsuarioID != dados.UsuarioID, solicitacao));
        }
 public AlteracaoDeUsuario(bool teveAlteracao, Solicitacao solicitacao)
 {
     this.TeveAlteracao = teveAlteracao;
     this.Solicitacao   = solicitacao;
 }