Esempio n. 1
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);
        }
Esempio n. 2
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);
        }