Ejemplo n.º 1
0
        /// <summary>Define o status de um determinado item</sumary>
        public ObjResult SetStatus(int item_id, string status_name)
        {
            connection = db.GetCon();
            connection.Open();

            NpgsqlTransaction transaction = connection.BeginTransaction();
            RequestItemDao    dao         = new RequestItemDao(connection, transaction);
            ObjResult         result      = new ObjResult();

            try
            {
                item_id = dao.SetStatus(item_id, status_name);
                transaction.Commit();
                result.Success();
                result.SetData(item_id);
            }
            catch (Exception e)
            {
                transaction.Rollback();
                throw new Exception(e.ToString());
            }
            finally
            {
                connection.Close();
                db.Close();
            }

            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>Exclui uma determinada requisição</sumary>
        public ObjResult Delete(int request_id)
        {
            connection = db.GetCon();
            connection.Open();
            ObjResult          result   = new ObjResult();
            List <RequestItem> items    = new List <RequestItem>();
            List <Message>     messages = new List <Message>();

            // Excluir a requisição
            NpgsqlTransaction transaction = connection.BeginTransaction();
            RequestDao        dao         = new RequestDao(connection, transaction);
            RequestItemDao    itemDao     = new RequestItemDao(connection, transaction);
            MessageDao        messageDao  = new MessageDao(connection, transaction);

            try
            {
                // Verifica se a requisição possui itens
                items = itemDao.GetItemsByRequest(request_id);
                if (items.Count > 0)
                {
                    // Exclui todos os itens que pertencem à requisição
                    foreach (RequestItem item in items)
                    {
                        itemDao.Delete(item.itm_id);
                    }
                }

                // Verifica se a requisição possui mensagens
                messages = messageDao.GetMessagesBySourceKey(request_id);
                if (messages.Count > 0)
                {
                    // Exclui todas as mensagens associadas à requisição
                    foreach (Message msg in messages)
                    {
                        messageDao.Delete(msg.msg_id);
                    }
                }

                request_id = dao.Delete(request_id);
                result.SetData(request_id);
                result.Success();
                transaction.Commit();
            }
            catch (Exception e)
            {
                transaction.Rollback();
                throw new Exception(e.ToString());
            }
            finally
            {
                connection.Close();
            }

            return(result);
        }
Ejemplo n.º 3
0
        /// <summary>Atualiza um item</sumary>
        public ObjResult Update(int item_id, RequestItem item, int user_id, string action)
        {
            connection = db.GetCon();
            connection.Open();

            RequestItemBusiness business      = new RequestItemBusiness(connection, null);
            List <string>       messages_list = new List <string>();
            ObjResult           result        = new ObjResult();

            try
            {
                item.SetId(item_id); // <-- Assegura que o item possua um id para atualização
                messages_list = business.Validate(item, user_id, action);
                if (messages_list.Count > 0)
                {
                    result.resultStatus   = "error";
                    result.resultMessages = messages_list;
                    connection.Close();
                    return(result);
                }
            }
            finally
            {
                connection.Close();
            }

            connection.Open();
            NpgsqlTransaction transaction = connection.BeginTransaction();
            RequestItemDao    dao         = new RequestItemDao(connection, transaction);

            try
            {
                item_id = dao.Update(item_id, item);
                transaction.Commit();
                result.Success();
                result.SetData(item_id);
            }
            catch (Exception e)
            {
                transaction.Rollback();
                throw new Exception(e.ToString());
            }
            finally
            {
                connection.Close();
                db.Close();
            }

            return(result);
        }
Ejemplo n.º 4
0
        public List <string> Validate(RequestItem obj, int user_id, string action)
        {
            Request        request        = new Request();
            RequestDao     requestDao     = new RequestDao(conn, tran);
            RequestItemDao requestItemDao = new RequestItemDao(conn, tran);
            UserDao        userDao        = new UserDao(conn, tran);

            List <string> list_erros = new List <string>();

            // Verificar permissão do usuário para realizar a operação
            if (!userDao.GetPermission(user_id, "purchase", action))
            {
                list_erros.Add("Permissão Negada.");
                return(list_erros);
            }

            // Verificar se a ação for criar, atualizar ou deletar, buscar a requisição referente ao item
            if (action == "create" || action == "update" || action == "delete")
            {
                request = requestDao.GetById(obj.itm_request_id);

                if (request.req_status != "E")
                {
                    list_erros.Add("Não é possível efetuar a ação, pois o status da requisição não permite.");
                }
            }

            // Verificar se a atualização ou exclusão é possível para o item
            if (action == "update" || action == "delete")
            {
                // É um novo registro
                if (obj.itm_id == 0)
                {
                    list_erros.Add("O objeto informado se refere a um novo registro.");
                    return(list_erros);
                }
                // Não foi encontrado o registro
                if (requestItemDao.GetById((int)obj.itm_id).itm_id == 0)
                {
                    list_erros.Add("Registro não encontrado.");
                    return(list_erros);
                }
            }

            return(list_erros);
        }
Ejemplo n.º 5
0
        /// <summary>Retorna os itens que estão associados à uma determinada requisição</sumary>
        public List <RequestItem> GetItemsByRequest(int request_id)
        {
            connection = db.GetCon();
            connection.Open();

            List <RequestItem> items = new List <RequestItem>();
            RequestItemDao     dao   = new RequestItemDao(connection, null);

            try
            {
                items = dao.GetItemsByRequest(request_id);
            }
            finally
            {
                connection.Close();
                db.Close();
            }

            return(items);
        }
Ejemplo n.º 6
0
        /// <summary>Faz a listagem dos itens</sumary>
        public PaginationResult List(string param)
        {
            connection = db.GetCon();
            connection.Open();

            PaginationResult pagination = new PaginationResult();
            RequestItemDao   dao        = new RequestItemDao(connection, null);

            try
            {
                pagination = dao.List(param);
            }
            finally
            {
                connection.Close();
                db.Close();
            }

            return(pagination);
        }
Ejemplo n.º 7
0
        /// <summary>Exclui uma determinada requisição</sumary>
        public ObjResult Delete(int item_id)
        {
            connection = db.GetCon();
            connection.Open();

            RequestItemDao dao    = new RequestItemDao(connection, null);
            ObjResult      result = new ObjResult();

            try
            {
                item_id = dao.Delete(item_id);
                result.SetData(item_id);
                result.Success();
            }
            finally
            {
                connection.Close();
                db.Close();
            }

            return(result);
        }
Ejemplo n.º 8
0
        /// <summary>Retorna as dependências de que existem do item para com a requisição</sumary>
        /// <values>A prioridade, a data limite e a aplicação</values>
        public ObjResult GetRequestDependencies(int request_id)
        {
            connection = db.GetCon();
            connection.Open();

            Request        request = new Request();
            ObjResult      result  = new ObjResult();
            RequestItemDao dao     = new RequestItemDao(connection, null);

            try
            {
                request = dao.GetRequestDependencies(request_id);
                result.SetData(request);
                result.Success();
            }
            finally
            {
                connection.Close();
                db.Close();
            }

            return(result);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Reabre uma determinada requisição
        /// </summary>
        /// <param name="request_id">É o id da requisição</param>
        /// <param name="user_id">É o id do usuário que está solicitando a reabertura da requisição</param>
        /// <param name="action">É o tipo de ação que está sendo feita pelo usuário</param>
        /// <returns></returns>
        public ObjResult ReopenRequest(int request_id, int user_id, string action)
        {
            connection = db.GetCon();
            connection.Open();

            ObjResult     result        = new ObjResult();
            List <string> messages_list = new List <string>();
            Request       request       = new Request();

            RequestDao      dao      = new RequestDao(connection, null);
            RequestBusiness business = new RequestBusiness(connection, null);
            RequestItemDao  item_dao = new RequestItemDao(connection, null);

            // Fazer a validação primeiro da requisição, se pode ser revertida, se o usuário tem autorização para realizar essa ação etc.
            try
            {
                request       = dao.GetById(request_id);
                messages_list = business.Validate(request, user_id, action);

                if (messages_list.Count > 0)
                {
                    result.resultStatus   = "error";
                    result.resultMessages = messages_list;
                    connection.Close();
                    return(result);
                }
            }
            finally
            {
                connection.Close();
            }

            // Agora vem a ação de reabrir a requisição
            // Obs.: As transações são feitas separadamente para cada serviço chamado.
            try
            {
                // Excluir as mensagens que estiverem associadas à requisição
                MessageService msg_service = new MessageService();
                List <Message> messages    = new List <Message>();
                messages = msg_service.GetMessagesBySourceKey(request_id);

                if (messages.Count != 0)
                {
                    foreach (Message msg in messages)
                    {
                        msg_service.DeleteMessage(msg.msg_id);
                    }
                }

                // Alterar o status de todos os itens da requisição para 1 <ED>
                foreach (RequestItem item in item_dao.GetItemsByRequest(request_id))
                {
                    item_dao.SetStatus(item.itm_id, "ED");
                }

                // Altera o status da requisição para 'E' (Em digitação).
                request_id          = ChangeStatus(request_id, 'E');
                result.resultStatus = "success";
                result.data         = request_id;
            }
            catch (Exception e)
            {
                throw new Exception(e.ToString());
            }

            return(result);
        }
Ejemplo n.º 10
0
        /// <summary>Faz a publicação de uma determinada requisição</sumary>
        public ObjResult Send(int request_id, int user_id, string action, Message msg)
        {
            connection = db.GetCon();
            connection.Open();

            Request         request       = new Request();
            ObjResult       result        = new ObjResult();
            List <string>   messages_list = new List <string>();
            RequestDao      requestDao    = new RequestDao(connection, null);
            RequestBusiness business      = new RequestBusiness(connection, null);

            try
            {
                // Validar requisição
                request = requestDao.GetById(request_id);
                Console.WriteLine("Status da requisição: " + request.req_status);
                messages_list = business.Validate(request, user_id, action);
                if (messages_list.Count > 0)
                {
                    result.resultStatus   = "error";
                    result.resultMessages = messages_list;
                    connection.Close();
                    return(result);
                }
            }
            finally
            {
                connection.Close();
            }

            connection.Open();
            NpgsqlTransaction transaction = connection.BeginTransaction();
            RequestItemDao    itemDao     = new RequestItemDao(connection, transaction);
            MessageDao        messageDao  = new MessageDao(connection, transaction);
            RequestDao        r_dao       = new RequestDao(connection, transaction);

            try
            {
                // Altera o status da requisição para ativa
                request_id = r_dao.ChangeStatus(request_id, 'A');

                // Altera o status de todos os itens para <AAT> Aguardando Aprovação Técnica
                foreach (RequestItem item in itemDao.GetItemsByRequest(request_id))
                {
                    itemDao.SetStatus(item.itm_id, "AAT");
                }

                // Envia mensagem e informa que foi gerada por meio de uma requisição de compra
                msg.SetSourceKey(request_id);
                msg.SetSourceType("request");
                messageDao.Post(msg);

                // Adiciona o status de sucesso e data
                result.Success();
                result.SetData(request_id);

                // Comita as alterações
                transaction.Commit();
            }
            catch (Exception e)
            {
                transaction.Rollback();
                throw new Exception(e.ToString());
            }
            finally
            {
                connection.Close();
            }

            return(result);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Diz se uma requisição é vazia, ou seja, se não há itens adicionados
        /// </summary>
        /// <param name="request_id"></param>
        /// <returns></returns>
        private bool RequestIsEmpty(int request_id)
        {
            RequestItemDao item_dao = new RequestItemDao(conn, null);

            return(item_dao.GetItemsByRequest(request_id).Count == 0);
        }
Ejemplo n.º 12
0
        public ObjResult TechnicalRejection(int request_id, RequestItem[] items, int user_id, string action)
        {
            connection = db.GetCon();
            connection.Open();

            RejectionBusiness rejectionBusiness = new RejectionBusiness(connection);
            List <string>     messages_list     = new List <string>();
            ObjResult         result            = new ObjResult();

            // Validar processo de rejeição
            try
            {
                messages_list = rejectionBusiness.Validate(items, user_id, action);
                if (messages_list.Count > 0)
                {
                    result.resultStatus   = "error";
                    result.resultMessages = messages_list;
                    connection.Close();
                    return(result);
                }
            }
            finally
            {
                connection.Close();
            }

            connection.Open();
            NpgsqlTransaction transaction_01 = connection.BeginTransaction();
            ItemStatusDao     status_dao     = new ItemStatusDao(connection, transaction_01);
            RequestItemDao    item_dao       = new RequestItemDao(connection, transaction_01);
            RequestDao        request_dao    = new RequestDao(connection, transaction_01);

            // Iniciar processo de aprovação
            try
            {
                // Rejeitar item por item
                foreach (RequestItem item in items)
                {
                    // Alterar o status para 3 (Aprovação Técnica Negada - ATN)
                    status_dao.ChangeStatus(item.itm_id, 3);
                }

                result.resultStatus = "success";
                result.data         = request_id;
                transaction_01.Commit();
            }
            catch (Exception e)
            {
                transaction_01.Rollback();
                throw new Exception(e.ToString());
            }
            finally
            {
                connection.Close();
            }

            connection.Open();
            NpgsqlTransaction transaction_02 = connection.BeginTransaction();
            RequestItemDao    item_dao_02    = new RequestItemDao(connection, transaction_02);
            RequestDao        requestDao     = new RequestDao(connection, transaction_02);

            try
            {
                // Verificar se todos os itens da requisição já passaram por aprovação ou rejeição
                if (item_dao_02.TechnicalApprovalIsFinished(request_id))
                {
                    if (item_dao_02.NotApproved(request_id))
                    {
                        Console.WriteLine("Aprovação negada...");
                        requestDao.ChangeStatus(request_id, 'N');
                    }

                    if (item_dao_02.PartiallyApproved(request_id))
                    {
                        Console.WriteLine("Aprovação parcial...");
                        requestDao.ChangeStatus(request_id, 'P');
                    }
                }

                result.resultStatus = "success";
                result.data         = request_id;
                transaction_02.Commit();
            }
            catch (Exception e)
            {
                transaction_02.Rollback();
                throw new Exception(e.ToString());
            }
            finally
            {
                connection.Close();
            }

            return(result);
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Faz a aprovação de uma requisição e seus itens
        /// </summary>
        /// <param name="request_id">É o id da requisição</param>
        /// <param name="items">É o array de itens da requisição</param>
        /// <param name="user_id">É o id do usuário que está realizando a operação</param>
        /// <param name="action">É o tipo de ação que está sendo executada</param>
        /// <returns></returns>
        public ObjResult TechnicalApproval(int request_id, RequestItem[] items, int user_id, string action)
        {
            connection = db.GetCon();
            connection.Open();

            ApprovalBusiness approvalBusiness = new ApprovalBusiness(connection);
            List <string>    messages_list    = new List <string>();
            ObjResult        result           = new ObjResult();

            // Validar processo de aprovação
            try
            {
                messages_list = approvalBusiness.Validate(items, user_id, action);
                if (messages_list.Count > 0)
                {
                    result.resultStatus   = "error";
                    result.resultMessages = messages_list;
                    connection.Close();
                    return(result);
                }
            }
            finally
            {
                connection.Close();
            }

            connection.Open();
            NpgsqlTransaction transaction_01 = connection.BeginTransaction();
            ItemStatusDao     statusDao      = new ItemStatusDao(connection, transaction_01);
            RequestItemDao    item_dao_01    = new RequestItemDao(connection, transaction_01);

            // Inciar processo de aprovação
            try
            {
                // Aprovar item por item
                foreach (RequestItem item in items)
                {
                    // Alterar o status para 4 (Aprovação Técnica Concedida - ATC)
                    statusDao.ChangeStatus(item.itm_id, 4);
                    // Se a quantidade solicitada for diferente da quantidade aprovada, atualizar item
                    if (item.itm_quantity != item.itm_approved_quantity)
                    {
                        Console.WriteLine("A quantidade aprovada é diferente da quantidade solicitada!");
                        item_dao_01.SetApprovedQuantity(item.itm_id, item.itm_approved_quantity);
                    }
                }

                result.resultStatus = "success";
                result.data         = request_id;
                transaction_01.Commit();
            }
            catch (Exception e)
            {
                transaction_01.Rollback();
                throw new Exception(e.ToString());
            }
            finally
            {
                connection.Close();
            }

            connection.Open();
            NpgsqlTransaction transaction_02 = connection.BeginTransaction();
            RequestItemDao    item_dao_02    = new RequestItemDao(connection, transaction_02);
            RequestDao        requestDao     = new RequestDao(connection, transaction_02);

            try
            {
                // Verificar se todos os itens da requisição já passaram por aprovação
                if (item_dao_02.TechnicalApprovalIsFinished(request_id))
                {
                    Console.WriteLine("Todos os itens já passaram por aprovação...");

                    // Alterar o status da requisição para
                    if (item_dao_02.FullApproved(request_id))
                    {
                        Console.WriteLine("Aprovação completa...");
                        requestDao.ChangeStatus(request_id, 'C');
                    }

                    if (item_dao_02.PartiallyApproved(request_id))
                    {
                        Console.WriteLine("Aprovação parcial...");
                        requestDao.ChangeStatus(request_id, 'P');
                    }
                }

                result.resultStatus = "success";
                result.data         = request_id;
                transaction_02.Commit();
            }
            catch (Exception e)
            {
                transaction_02.Rollback();
                throw new Exception(e.ToString());
            }
            finally
            {
                connection.Close();
            }

            return(result);
        }