/// <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); }
/// <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); }
/// <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); }
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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
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); }
/// <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); }