public static bool Delete(Requisição ObjectToDelete) { try { using (var ctx = new SuchDBContext()) { //if (ObjectToDelete.DiárioDeProjeto.Count() > 0) // ctx.DiárioDeProjeto.RemoveRange(ObjectToDelete.DiárioDeProjeto); //if (ObjectToDelete.LinhasPEncomendaProcedimentosCcp.Count() > 0) // ctx.LinhasPEncomendaProcedimentosCcp.RemoveRange(ObjectToDelete.LinhasPEncomendaProcedimentosCcp); if (ObjectToDelete.LinhasRequisição.Count() > 0) { ctx.LinhasRequisição.RemoveRange(ObjectToDelete.LinhasRequisição); } if (ObjectToDelete.LinhasRequisiçãoHist.Count() > 0) { ctx.LinhasRequisiçãoHist.RemoveRange(ObjectToDelete.LinhasRequisiçãoHist); } if (ObjectToDelete.LinhasRequisiçõesSimplificadas.Count() > 0) { ctx.LinhasRequisiçõesSimplificadas.RemoveRange(ObjectToDelete.LinhasRequisiçõesSimplificadas); } //if (ObjectToDelete.MovimentosDeProjeto.Count() > 0) // ctx.MovimentosDeProjeto.RemoveRange(ObjectToDelete.MovimentosDeProjeto); //if (ObjectToDelete.PréMovimentosProjeto.Count() > 0) // ctx.PréMovimentosProjeto.RemoveRange(ObjectToDelete.PréMovimentosProjeto); if (ObjectToDelete.RequisicoesRegAlteracoes.Count() > 0) { ctx.RequisicoesRegAlteracoes.RemoveRange(ObjectToDelete.RequisicoesRegAlteracoes); } ctx.Requisição.Remove(ObjectToDelete); ctx.SaveChanges(); } return(true); } catch (Exception ex) { return(false); } }
public static Requisição Create(Requisição ObjectToCreate) { try { using (var ctx = new SuchDBContext()) { ObjectToCreate.DataHoraCriação = DateTime.Now; ctx.Requisição.Add(ObjectToCreate); ctx.SaveChanges(); } return(ObjectToCreate); } catch (Exception ex) { return(null); } }
public static Requisição Create(Requisição item) { try { using (var ctx = new SuchDBContext()) { item.ModeloDeRequisição = true; item.DataHoraCriação = DateTime.Now; ctx.Requisição.Add(item); ctx.SaveChanges(); } return(item); } catch (Exception ex) { return(null); } }
public static bool Delete(Requisição item)//, bool updateLines = false) { try { using (var ctx = new SuchDBContext()) { var itemToDelete = ctx.Requisição .Include(x => x.LinhasRequisição) .FirstOrDefault(x => x.NºRequisição == item.NºRequisição); ctx.LinhasRequisição.RemoveRange(itemToDelete.LinhasRequisição); ctx.Requisição.Remove(itemToDelete); ctx.SaveChanges(); return(true); } } catch (Exception ex) { return(false); } }
public static Requisição Update(Requisição item)//, bool updateLines = false) { try { using (var ctx = new SuchDBContext()) { //if (updateLines && item.LinhasRequisição != null) // DBRequestLine.Update(item.LinhasRequisição.ToList(), ctx); item.ModeloDeRequisição = true; item.DataHoraModificação = DateTime.Now; ctx.Requisição.Update(item); ctx.SaveChanges(); } return(item); } catch (Exception ex) { return(null); } }
public static Requisição Update(Requisição objectToUpdate, bool updateLines = false, bool addLogEntry = false) { try { using (var ctx = new SuchDBContext()) { if (updateLines && objectToUpdate.LinhasRequisição != null) { DBRequestLine.Update(objectToUpdate.LinhasRequisição.ToList(), ctx); } if (addLogEntry) { var logEntry = new RequisicoesRegAlteracoes(); logEntry.ModificadoEm = DateTime.Now; logEntry.ModificadoPor = objectToUpdate.UtilizadorModificação; logEntry.NºRequisição = objectToUpdate.NºRequisição; if (objectToUpdate.Estado.HasValue) { logEntry.Estado = objectToUpdate.Estado.Value; } ctx.RequisicoesRegAlteracoes.Add(logEntry); } objectToUpdate.DataHoraModificação = DateTime.Now; ctx.Requisição.Update(objectToUpdate); ctx.SaveChanges(); objectToUpdate = GetById(objectToUpdate.NºRequisição); } return(objectToUpdate); } catch (Exception ex) { return(null); } }
public RequisitionViewModel CreateMarketConsultFor(RequisitionViewModel requisition) { try { //Verificar se pode criar uma consulta de mercado if (requisition.Lines.Where(p => p.CreateMarketSearch == true).Where(p => string.IsNullOrEmpty(p.QueryCreatedMarketNo)).Count() <= 0) { requisition.eReasonCode = -1; requisition.eMessage = "Consulta ao Mercado não pode ser criada! As linhas devem estar marcadas com 'Criar Consulta Mercado' e não ter 'Nº de Consulta Mercado Criada'"; return(requisition); } //Criar nova Consulta Mercado - Obtenção do novo NumConsultaMercado e incrementar Numerações ConsultaMercado consultaMercado = DBConsultaMercado.Create(changedByUserName); //Ir Buscar o Nº Mecanográfico do utilizado ConfigUtilizadores UC = DBUserConfigurations.GetById(changedByUserName); //Actualizar o registo com os dados possiveis consultaMercado.CodProjecto = requisition.ProjectNo == "" ? null : requisition.ProjectNo; consultaMercado.Descricao = "Consulta Mercado - " + requisition.RequisitionNo; consultaMercado.CodRegiao = requisition.RegionCode; consultaMercado.CodAreaFuncional = requisition.FunctionalAreaCode; consultaMercado.CodCentroResponsabilidade = requisition.CenterResponsibilityCode; consultaMercado.DataPedidoCotacao = DateTime.Now; consultaMercado.CodLocalizacao = requisition.LocalCode; consultaMercado.Destino = 0; consultaMercado.Estado = 0; consultaMercado.UtilizadorRequisicao = requisition.CreateUser; consultaMercado.Fase = 0; consultaMercado.Modalidade = 0; consultaMercado.PedidoCotacaoCriadoEm = DateTime.Now; consultaMercado.PedidoCotacaoCriadoPor = changedByUserName; consultaMercado.NumRequisicao = requisition.RequisitionNo; consultaMercado.Urgente = requisition.Urgent; consultaMercado.CodComprador = !string.IsNullOrEmpty(UC.EmployeeNo) ? UC.EmployeeNo : null; consultaMercado = DBConsultaMercado.Update(consultaMercado); //Para cada linha da requisição foreach (RequisitionLineViewModel requisitionLine in requisition.Lines.Where(p => p.CreateMarketSearch == true).Where(p => p.QueryCreatedMarketNo == null)) { decimal _qty = requisitionLine.QuantityToRequire != null ? requisitionLine.QuantityToRequire.Value : 0; decimal _custo = requisitionLine.UnitCost != null ? requisitionLine.UnitCost.Value : 0; decimal _custoTotalPrev = Math.Round(_qty * _custo * 100) / 100; DateTime?_dataEntrega; try { _dataEntrega = DateTime.Parse(requisitionLine.ExpectedReceivingDate); } catch { _dataEntrega = null; } //Inserir Linhas na tabela "Linhas_Consulta_Mercado" LinhasConsultaMercado linhasConsultaMercado = new LinhasConsultaMercado() { NumConsultaMercado = consultaMercado.NumConsultaMercado, CodProduto = requisitionLine.Code, Descricao = requisitionLine.Description, Descricao2 = requisitionLine.Description2, NumProjecto = requisitionLine.ProjectNo, CodRegiao = requisitionLine.RegionCode, CodAreaFuncional = requisitionLine.FunctionalAreaCode, CodCentroResponsabilidade = requisitionLine.CenterResponsibilityCode, CodLocalizacao = requisitionLine.LocalCode, Quantidade = requisitionLine.QuantityToRequire, CustoUnitarioPrevisto = requisitionLine.UnitCost, CustoTotalPrevisto = _custoTotalPrev, CodUnidadeMedida = requisitionLine.UnitMeasureCode, DataEntregaPrevista = _dataEntrega, NumRequisicao = requisition.RequisitionNo, LinhaRequisicao = requisitionLine.LineNo, CriadoEm = DateTime.Now, CriadoPor = changedByUserName }; linhasConsultaMercado = DBConsultaMercado.Create(linhasConsultaMercado); //Verificar se tem Fornecedor identificado if (requisitionLine.SupplierNo != null) { //Verificar se na tabela "Seleccao_Entidades" já temos este Fornecedor para esta Consulta Mercado SeleccaoEntidades seleccaoEntidades = DBConsultaMercado.GetSeleccaoEntidadesPorNumConsultaFornecedor(consultaMercado.NumConsultaMercado, requisitionLine.SupplierNo); if (seleccaoEntidades == null) { seleccaoEntidades = new SeleccaoEntidades() { NumConsultaMercado = consultaMercado.NumConsultaMercado, CodFornecedor = requisitionLine.SupplierNo, NomeFornecedor = !string.IsNullOrEmpty(requisitionLine.SupplierNo) ? DBNAV2017Supplier.GetAll(_config.NAVDatabaseName, _config.NAVCompanyName, requisitionLine.SupplierNo).FirstOrDefault().Name : "", Selecionado = true, Preferencial = true }; seleccaoEntidades = DBConsultaMercado.Create(seleccaoEntidades); } } requisitionLine.QueryCreatedMarketNo = consultaMercado.NumConsultaMercado; DBRequestLine.Update(DBRequestLine.ParseToDB(requisitionLine)); } requisition.MarketInquiryNo = consultaMercado.NumConsultaMercado; Requisição requisição = DBRequest.ParseToDB(requisition); DBRequest.Update(requisição); requisition = DBRequest.ParseToViewModel(requisição); requisition.eReasonCode = 1; requisition.eMessage = "Consulta ao Mercado " + consultaMercado.NumConsultaMercado + " criada com sucesso"; } catch (Exception ex) { requisition.eReasonCode = -1; requisition.eMessage = ex.Message; } return(requisition); }
public static RequisitionViewModel ParseToViewModel(this Requisição item) { if (item != null) { return(new RequisitionViewModel() { RequisitionNo = item.NºRequisição, TipoReq = item.TipoReq, Area = item.Área, State = item.Estado.HasValue && Enum.IsDefined(typeof(RequisitionStates), item.Estado.Value) ? (RequisitionStates)item.Estado.Value : (RequisitionStates?)null, ProjectNo = item.NºProjeto, RegionCode = item.CódigoRegião, FunctionalAreaCode = item.CódigoÁreaFuncional, CenterResponsibilityCode = item.CódigoCentroResponsabilidade, LocalCode = item.CódigoLocalização, EmployeeNo = item.NºFuncionário, Vehicle = item.Viatura, ReceivedDate = !item.DataReceção.HasValue ? "" : item.DataReceção.Value.ToString("yyyy-MM-dd"), ReceivedDateHour = !item.DataReceção.HasValue ? "" : item.DataReceção.Value.ToString("HH:mm"), Urgent = item.Urgente, Sample = item.Amostra, Attachment = item.Anexo, Immobilized = item.Imobilizado, BuyCash = item.CompraADinheiro, LocalCollectionCode = item.CódigoLocalRecolha, LocalDeliveryCode = item.CódigoLocalEntrega, Comments = item.Observações, NoDocumento = item.NoDocumento, RejeicaoMotivo = item.RejeicaoMotivo, RequestModel = item.ModeloDeRequisição, CreateDate = !item.DataHoraCriação.HasValue ? "" : item.DataHoraCriação.Value.ToString("yyyy-MM-dd HH:mm:ss"), CreateUser = item.UtilizadorCriação, UpdateDate = item.DataHoraModificação, UpdateUser = item.UtilizadorModificação, RelatedSearches = item.CabimentoOrçamental, Exclusive = item.Exclusivo, AlreadyPerformed = item.JáExecutado, Equipment = item.Equipamento, StockReplacement = item.ReposiçãoDeStock, Reclamation = item.Reclamação, RequestReclaimNo = item.NºRequisiçãoReclamada, ResponsibleCreation = item.ResponsávelCriação, ResponsibleApproval = item.ResponsávelAprovação, ResponsibleValidation = item.ResponsávelValidação, ResponsibleReception = item.ResponsávelReceção, ApprovalDate = item.DataAprovação, ApprovalDateText = !item.DataAprovação.HasValue ? "" : item.DataAprovação.Value.ToString("yyyy-MM-dd"), ApprovalDateHour = !item.DataAprovação.HasValue ? "" : item.DataAprovação.Value.ToString("HH:mm"), ValidationDate = item.DataValidação, ValidationDateText = !item.DataValidação.HasValue ? "" : item.DataValidação.Value.ToString("yyyy-MM-dd"), ValidationDateHour = !item.DataValidação.HasValue ? "" : item.DataValidação.Value.ToString("HH:mm"), UnitFoodProduction = item.UnidadeProdutivaAlimentação, RequestNutrition = item.RequisiçãoNutrição, RequestNutritionText = !item.RequisiçãoNutrição.HasValue ? "" : item.RequisiçãoNutrição == true ? "Sim" : "Não", RequestforDetergents = item.RequisiçãoDetergentes, ProcedureCcpNo = item.NºProcedimentoCcp, Approvers = item.Aprovadores, LocalMarket = item.MercadoLocal, LocalMarketRegion = item.RegiãoMercadoLocal, RepairWithWarranty = item.ReparaçãoComGarantia, Emm = item.Emm, WarehouseDeliveryDate = !item.DataEntregaArmazém.HasValue ? "" : item.DataEntregaArmazém.Value.ToString("yyyy-MM-dd"), LocalCollection = item.LocalDeRecolha, CollectionAddress = item.MoradaRecolha, Collection2Address = item.Morada2Recolha, CollectionPostalCode = item.CódigoPostalRecolha, CollectionLocality = item.LocalidadeRecolha, CollectionContact = item.ContatoRecolha, CollectionResponsibleReception = item.ResponsávelReceçãoRecolha, LocalDelivery = item.LocalEntrega, DeliveryAddress = item.MoradaEntrega, Delivery2Address = item.Morada2Entrega, DeliveryPostalCode = item.CódigoPostalEntrega, LocalityDelivery = item.LocalidadeEntrega, DeliveryContact = item.ContatoEntrega, ResponsibleReceptionReception = item.ResponsávelReceçãoReceção, InvoiceNo = item.NºFatura, LocalMarketDate = item.DataMercadoLocal, RequisitionDate = !item.DataRequisição.HasValue ? "" : item.DataRequisição.Value.ToString("yyyy-MM-dd"), MarketInquiryNo = item.NºConsultaMercado, OrderNo = item.NºEncomenda, Budget = item.Orçamento, EstimatedValue = item.ValorEstimado, PricesIncludingVAT = item.PrecoIvaincluido.HasValue ? item.PrecoIvaincluido.Value : false, InAdvance = item.Adiantamento.HasValue ? item.Adiantamento.Value : false, PedirOrcamento = item.PedirOrcamento, ValorTotalDocComIVA = item.ValorTotalDocComIVA, Lines = item.LinhasRequisição.ToList().ParseToViewModel(), //AROMAO 01/10/2018 ChangeLog = item.RequisicoesRegAlteracoes.ToList().ParseToViewModel() }); } return(null); }
public static Requisição UpdateHeaderAndLines(Requisição item, bool addLogEntry) { return(Update(item, true, addLogEntry)); }
public JsonResult CriarEncomendaCabimento([FromBody] List <LinhasPreEncomendaView> item) { //if (item != null) //{ // try // { // RequisitionService serv = new RequisitionService(configws, HttpContext.User.Identity.Name); // item = serv.CreatePurchaseOrderFor(item); // } // catch (Exception ex) // { // item.eReasonCode = 2; // item.eMessage = "Ocorreu um erro ao criar encomenda de compra (" + ex.Message + ")"; // } //} //else //{ // item = new LinhasPreEncomendaView() // { // eReasonCode = 3, // eMessage = "Não é possivel criar encomenda de compra. A requisição não pode ser nula." // }; //} //return Json(item); /* * 1º - filtrar os itens que chegam aqui, ficando apenas com os que são: * --> Documento a Criar = Encomenda (1) * --> Criar Documento = true * --> Nº Encomenda Aberto = '' * --> Nº Linha Encomenda Aberto = '' * 2º - Criar Encomenda * 3º - As linhas da Requisição devem ficar marcadas com o Nº da Encomenda criada (cada item tem um Nº Linha Requisição) * 4º - Colocar as linhas com Tratadas = 1 */ ErrorHandler resultado = new ErrorHandler { eReasonCode = 1, eMessage = "Criada Encomenda com sucesso." }; if (item != null) { try { List <LinhasPreEncomendaView> list = item.Where(it => it.DocumentoACriar == 1).Where(it => it.CriarDocumento == true).Where(it => it.NumEncomendaAberto == string.Empty).Where(it => !it.NumLinhaEncomendaAberto.HasValue).ToList(); List <PurchOrderDTO> purchOrders = new List <PurchOrderDTO>(); try { if (list != null && list.Count() > 0) { purchOrders = list.GroupBy(x => x.NumFornecedor, x => x, (key, items) => new PurchOrderDTO { SupplierId = key, RequisitionId = list.Where(f => f.NumFornecedor == key).FirstOrDefault().NumRequisicao, CenterResponsibilityCode = list.Where(f => f.NumFornecedor == key).FirstOrDefault().CodigoCentroResponsabilidade, FunctionalAreaCode = list.Where(f => f.NumFornecedor == key).FirstOrDefault().CodigoAreaFuncional, RegionCode = list.Where(f => f.NumFornecedor == key).FirstOrDefault().CodigoRegiao, LocalMarketRegion = list.Where(f => f.NumFornecedor == key).FirstOrDefault().CodigoLocalizacao, Lines = items.Select(line => new PurchOrderLineDTO() { LineId = line.NumLinhaPreEncomenda, Type = null, Code = line.CodigoProduto, Description = line.DescricaoProduto, ProjectNo = line.NumProjeto, QuantityRequired = line.QuantidadeDisponibilizada, UnitCost = line.CustoUnitario, LocationCode = line.CodigoLocalizacao, OpenOrderNo = line.NumEncomendaAberto, OpenOrderLineNo = line.NumLinhaEncomendaAberto, CenterResponsibilityCode = line.CodigoCentroResponsabilidade, FunctionalAreaCode = line.CodigoAreaFuncional, RegionCode = line.CodigoRegiao, UnitMeasureCode = line.CodigoUnidadeMedida, VATBusinessPostingGroup = string.Empty, VATProductPostingGroup = string.Empty, }).ToList() }).ToList(); } } catch { throw new Exception("Ocorreu um erro ao agrupar as linhas."); } if (purchOrders != null && purchOrders.Count() > 0) { purchOrders.ForEach(purchOrder => { RequisitionViewModel requisition = DBRequest.GetById(purchOrder.RequisitionId).ParseToViewModel(); try { //purchOrder.Purchaser_Code = User.Identity.Name; purchOrder.Purchaser_Code = string.IsNullOrEmpty(DBUserConfigurations.GetById(User.Identity.Name).EmployeeNo) ? "" : DBUserConfigurations.GetById(User.Identity.Name).EmployeeNo; var result = CreateNAVPurchaseOrderFor(purchOrder, Convert.ToDateTime(requisition.ReceivedDate)); if (result.CompletedSuccessfully) { foreach (PurchOrderLineDTO Linha in purchOrder.Lines) { LinhasPreEncomenda LinhaPre = DBEncomendas.GetLinhasPreEncomenda((int)Linha.LineId); if (LinhaPre != null) { string ReqNo = LinhaPre.NºRequisição; int ReqNoLinha = (int)LinhaPre.NºLinhaRequisição; Requisição Req = DBRequest.GetById(ReqNo); if (Req != null) { Req.NºEncomenda = result.ResultValue; Req.UtilizadorModificação = User.Identity.Name; Req.DataHoraModificação = DateTime.Now; if (DBRequest.Update(Req) != null) { LinhasRequisição ReqLinha = DBRequestLine.GetByRequisicaoNoAndLineNo(ReqNo, ReqNoLinha); if (ReqLinha != null) { ReqLinha.NºEncomendaCriada = result.ResultValue; ReqLinha.UtilizadorModificação = User.Identity.Name; ReqLinha.DataHoraModificação = DateTime.Now; DBRequestLine.Update(ReqLinha); } } } } } foreach (LinhasPreEncomendaView Linha in list) { if (Linha.NumFornecedor == purchOrder.SupplierId) { Linha.NumPreEncomenda = result.ResultValue; Linha.DocumentoACriar = null; Linha.CriarDocumento = false; Linha.Tratada = true; Linha.UtilizadorModificacao = User.Identity.Name; Linha.DataHoraModificacao = DateTime.Now; DBEncomendas.Update(DBEncomendas.CastLinhasPreEncomendaToDB(Linha)); } } resultado.eMessages.Add(new TraceInformation(TraceType.Success, "Criada encomenda para o fornecedor núm. " + purchOrder.SupplierId + "; ")); //Update req //requisition.OrderNo = result.ResultValue; //Update Requisition Lines //requisition.Lines.Where(x => x.LineNo == purchOrder.OpenOrderLineNo).ToList().ForEach(line => //{ // line.CreatedOrderNo = result.ResultValue; // line.UpdateUser = User.Identity.Name; // line.UpdateDateTime = DateTime.Now; //}); //Commit to DB //var updatedReq = DBRequest.Update(requisition.ParseToDB(), true); //bool linesUpdated = DBRequestLine.Update(requisition.Lines.ParseToDB()); //if (linesUpdated) //if (updatedReq != null) //{ // resultado.eMessages.Add(new TraceInformation(TraceType.Success, "Criada encomenda para o fornecedor núm. " + purchOrder.SupplierId + "; ")); //} } } catch (Exception ex) { resultado.eMessages.Add(new TraceInformation(TraceType.Error, "Ocorreu um erro ao criar encomenda para o fornecedor núm. " + purchOrder.SupplierId + "; ")); resultado.eMessages.Add(new TraceInformation(TraceType.Exception, purchOrder.SupplierId + " " + ex.Message)); } if (resultado.eMessages.Any(x => x.Type == TraceType.Error)) { resultado.eReasonCode = 2; //resultado.eMessage = "Ocorreram erros ao criar encomenda de compra."; resultado.eMessage = "Ocorreram erros ao criar encomenda de compra." + Environment.NewLine + resultado.eMessages[resultado.eMessages.Count() - 1].Message; } else { resultado.eReasonCode = 1; resultado.eMessage = "Encomenda de compra criada com sucesso."; } }); } else { resultado.eReasonCode = 3; resultado.eMessage = "Não existem linhas que cumpram os requisitos de validação do mercado local."; } } catch (Exception ex) { resultado.eReasonCode = -1; resultado.eMessage = "Erro desconhecido."; } } return(Json(resultado)); }