public IActionResult DetalhesProposta(string id, string version = "") { UserAccessesViewModel UPerm = DBUserAccesses.GetByUserAreaFunctionality(User.Identity.Name, Enumerations.Features.Propostas); if (UPerm != null && UPerm.Read.Value) { Contratos cContract = null; if (version != "") { cContract = DBContracts.GetByIdAndVersion(id, int.Parse(version)); } else { cContract = DBContracts.GetByIdLastVersion(id); } if (cContract != null && cContract.Arquivado == true) { UPerm.Update = false; } ViewBag.ContractNo = id ?? ""; ViewBag.VersionNo = version ?? ""; ViewBag.UPermissions = UPerm; return(View()); } else { return(RedirectToAction("AccessDenied", "Error")); } }
public ContractViewModel UpdatePrices(UpdateContractPricesRequest updPriceRequest) { ContractViewModel contract; var tmpContract = DBContracts.GetByIdAndVersion(updPriceRequest.ContractNo, updPriceRequest.VersionNo); if (tmpContract == null) { contract = new ContractViewModel(); contract.eReasonCode = 2; contract.eMessage = "Não foi possivel obter os dados do contrato."; return(contract); } contract = ArchiveContract(DBContracts.ParseToViewModel(tmpContract, string.Empty, string.Empty)); if (contract.eReasonCode == 1) { contract.LoadLines(); contract.DueDate = updPriceRequest.DueDate; contract.ClientRequisitionNo = updPriceRequest.ClientRequisitionNo; contract.NextInvoiceDate = updPriceRequest.NextInvoiceDate; contract.ReceiptDateRequisition = updPriceRequest.RequisitionReceiveDate; contract.StartData = updPriceRequest.StartDate; using (var transaction = ctx.Database.BeginTransaction()) { try { var updatedContract = ctx.Contratos.Update(DBContracts.ParseToDB(contract)); contract.Lines.ForEach(x => { if (updPriceRequest.percentageToApllyInLines > (-100)) { x.UnitPrice = x.UnitPrice + ((updPriceRequest.percentageToApllyInLines * x.UnitPrice) / 100); ctx.LinhasContratos.Update(DBContractLines.ParseToDB(x)); } }); ctx.SaveChanges(); transaction.Commit(); contract.eReasonCode = 1; contract.eMessage = "Preços atualizados com sucesso."; } catch { contract.eReasonCode = 2; contract.eMessage = "Ocorreu um erro ao atualizar o contrato."; } } } return(contract); }
public ProjectBillingAuthorization(string projectNo, string userName, string navDatabaseName, string navCompanyName) { this.navCompanyName = navCompanyName; this.navDatabaseName = navDatabaseName; this.userName = userName; this.project = DBProjects.GetById(projectNo).ParseToViewModel(); if (project != null) { this.contract = DBContracts.ParseToViewModel(DBContracts.GetByIdLastVersion(project.ProjectNo), navDatabaseName, navCompanyName); } if (project != null) { this.Movements = GetProjectMovements(null); } LoadBillingResume(); }
public ContractViewModel SetStatus(ContractViewModel contractToUpdate) { if (contractToUpdate != null) { if (contractToUpdate.ContractType == (int)ContractType.Proposal) { Contratos updatedContract = new Contratos(); Contratos contractWithoutChanges = DBContracts.GetByIdAndVersion(contractToUpdate.ContractNo, contractToUpdate.VersionNo); if (contractWithoutChanges != null) { if (contractWithoutChanges.Estado != contractToUpdate.Status) { //handle status change switch (contractToUpdate.Status) { case 1: //Alterar para Aberta /* * Fazer arquivo * Preencher estado com ‘Aberta’ */ contractToUpdate = ArchiveContract(contractToUpdate); break; //case 2: //Alterada para enviada // /* // * Fazer arquivo // * Preencher estado com ‘Enviada’ // * Preencher ‘Data Envio’ com data indicada pelo utilizador.Deve ser criado um mecanismo tipo ‘PopUp’ para indicação dessa data. // */ case 3: //Alterada para Revista /* * Preencher estado com ‘Revista’ * Fazer arquivo * Preencher estado com ‘Aberta’ * Incrementar 1 na versão da Proposta * Limpar Data de Estado * Preencher Data alteração com data do sistema * Alterar versão nas Linhas da Proposta para versão colocada em cabeçalho */ updatedContract = DBContracts.Update(DBContracts.ParseToDB(contractToUpdate)); updatedContract.Estado = 3; updatedContract.DataEstadoProposta = null; contractToUpdate = ArchiveContract(DBContracts.ParseToViewModel(updatedContract, string.Empty, string.Empty)); break; case 4: //Alterada para Perdida /* * A pedido do António José quando se muda o Estado para Perdida * Só se atualiza-se o estado da proposta e não se cria uma nova versão de Histórico * Pedido feito em 21-01-2019 */ contractToUpdate.Status = 4; contractToUpdate.History = true; contractToUpdate.Filed = true; updatedContract = DBContracts.Update(DBContracts.ParseToDB(contractToUpdate)); break; case 5: //Alterar para Cancelada /* * A pedido do António José quando se muda o Estado para Cancelada * Só se atualiza-se o estado da proposta e não se cria uma nova versão de Histórico * Pedido feito em 21-01-2019 */ contractToUpdate.Status = 5; contractToUpdate.History = true; contractToUpdate.Filed = true; updatedContract = DBContracts.Update(DBContracts.ParseToDB(contractToUpdate)); break; case 10: //Alterar para Não Respondida /* * Fazer arquivo * Preencher a razão do Arquivo.Deve ser criado um mecanismo tipo ‘PopUp’ para indicação desta informação. * Preencher estado com ‘Oportunidade Não Respondida’ * Preencher Data Estado com data do sistema * Passar p/ Histórico */ contractToUpdate.DateProposedState = DateTime.Now.ToString(); contractToUpdate = ArchiveContract(contractToUpdate); break; default: updatedContract = DBContracts.Update(DBContracts.ParseToDB(contractToUpdate)); contractToUpdate = DBContracts.ParseToViewModel(updatedContract, string.Empty, string.Empty); break; } } //else //{ // updatedContract = DBContracts.Update(DBContracts.ParseToDB(contractToUpdate)); // contractToUpdate = DBContracts.ParseToViewModel(updatedContract, string.Empty, string.Empty); //} contractToUpdate.eReasonCode = 1; } else { contractToUpdate.eReasonCode = 2; contractToUpdate.eMessage = "Ocorreu um erro ao atualizar o contrato."; } } else { contractToUpdate.eReasonCode = 2; contractToUpdate.eMessage = "O tipo de contrato é inválido."; } } return(contractToUpdate); }
public ErrorHandler CreateProposalFromContract(string contractId, int version, decimal percentageToApllyInLines = decimal.MinValue) { ErrorHandler result = new ErrorHandler() { eReasonCode = 2, eMessage = "Não foi possivel criar a proposta", }; //Get contract data var contractDb = DBContracts.GetByIdAndVersion(contractId, version); ContractViewModel contract = DBContracts.ParseToViewModel(contractDb, string.Empty, string.Empty); contract.LoadLines(); //Get Numeration Configuração conf = DBConfigurations.GetById(1); int entityNumerationConfId = conf.NumeraçãoPropostas.Value; string proposalId = DBNumerationConfigurations.GetNextNumeration(entityNumerationConfId, true, false); if (!string.IsNullOrEmpty(proposalId) && contract != null) { contract.ContractNo = proposalId; contract.ContractType = (int)ContractType.Proposal; contract.VersionNo = 1; contract.Status = 1; contract.RelatedContract = contractId; contract.CreateDate = DateTime.Now.ToString(); contract.CreateUser = changedByUserName; contract.UpdateDate = string.Empty; contract.UpdateUser = string.Empty; //Add Proposal Header var proposal = ctx.Contratos.Add(DBContracts.ParseToDB(contract)); //Add Proposal Lines contract.Lines.ForEach(x => { x.ContractType = (int)ContractType.Proposal; x.ContractNo = proposalId; x.VersionNo = 1; x.LineNo = 0; if (percentageToApllyInLines > (-100)) { x.UnitPrice = x.UnitPrice + ((percentageToApllyInLines * x.UnitPrice) / 100); proposal.Entity.LinhasContratos.Add(DBContractLines.ParseToDB(x)); } else { proposal.Entity.LinhasContratos.Add(DBContractLines.ParseToDB(x)); } }); ctx.SaveChanges(); result.eReasonCode = 1; result.eMessage = "Foi criada a proposta " + proposalId + "."; try { //Update Last Numeration Used ConfiguraçãoNumerações configNumerations = DBNumerationConfigurations.GetById(entityNumerationConfId); if (configNumerations != null) { configNumerations.ÚltimoNºUsado = proposalId; configNumerations.UtilizadorModificação = changedByUserName; DBNumerationConfigurations.Update(configNumerations); } } catch { result.eMessage += " Ocorreu um erro ao atualizar a numeração."; } } return(result); }
public ContractViewModel ArchiveContract(ContractViewModel data) { if (data != null) { if (data.ContractType == (int)ContractType.Proposal) { Contratos contract = DBContracts.GetByIdAndVersion(data.ContractNo, data.VersionNo); if (contract != null) { try { //Create new contract and update old contract.UtilizadorModificação = changedByUserName; contract.Arquivado = true; DBContracts.Update(contract); contract = DBContracts.ParseToDB(data); contract.NºVersão = contract.NºVersão + 1; contract.UtilizadorCriação = changedByUserName; contract.UtilizadorModificação = ""; if (contract.TipoContrato == 1) { contract.NºProposta = ""; } contract.DataHoraModificação = null; List <int> finishingStates = new List <int>() { 4, 5, 10 }; if (contract.Estado.HasValue) { if (finishingStates.Contains(contract.Estado.Value)) { contract.Arquivado = true; } else { contract.Arquivado = false; } } else { contract.Arquivado = false; } //if (data.ActionCode.HasValue && data.ActionCode.Value == 2) //{ // contract.Estado = 1; // contract.DataHoraModificação = DateTime.Now; // contract.UtilizadorModificação = changedByUserName; //} DBContracts.Create(contract); //Duplicate Contract Lines List <LinhasContratos> contractLines = DBContractLines.GetAllByActiveContract(data.ContractNo, data.VersionNo); contractLines.ForEach(x => { x.NºLinha = 0; x.NºVersão = contract.NºVersão; DBContractLines.Create(x); }); //data.VersionNo = contract.NºVersão; data = DBContracts.ParseToViewModel(contract, string.Empty, string.Empty); data.eReasonCode = 1; data.eMessage = "Arquivado com sucesso."; } catch (Exception) { data.eReasonCode = 2; data.eMessage = "Ocorreu um erro ao arquivar."; } } } else { data.eReasonCode = 2; data.eMessage = "O tipo de contrato é inválido."; } } else { data.eReasonCode = 2; data.eMessage = "Ocorreu um erro ao arquivar."; } return(data); }
public static async Task <WSCreatePreInvoice.Create_Result> CreateContractInvoice(AutorizarFaturaçãoContratos CreateInvoice, NAVWSConfigurations WSConfigurations, string ContractInvoicePeriod, string InvoiceBorrowed, string CodTermosPagamento, bool PricesIncludingVAT, string Ship_to_Code) { DateTime now = DateTime.Now; string PostingNoSeries = ""; string Observacoes = ""; string Mes = InvoiceBorrowed.Substring(0, InvoiceBorrowed.IndexOf("/")); string Ano = InvoiceBorrowed.Substring(InvoiceBorrowed.IndexOf("/") + 1, 4); ConfigUtilizadores CUsers = DBUserConfigurations.GetById(CreateInvoice.UtilizadorCriação); Contratos Contrato = DBContracts.GetByIdLastVersion(CreateInvoice.NºContrato); WSCreatePreInvoice.Create_Result result = new WSCreatePreInvoice.Create_Result(); if (Contrato != null && Contrato.TipoContrato == 3 && Contrato.Tipo == 3) //Contrato Quotas { ConfiguracaoParametros Parametro = DBConfiguracaoParametros.GetByParametro("QuotasNoSeries"); if (Parametro != null && !string.IsNullOrEmpty(Parametro.Valor)) { PostingNoSeries = Parametro.Valor; } if (Contrato != null && !string.IsNullOrEmpty(Contrato.TextoFatura)) { Observacoes = Contrato.TextoFatura; Observacoes = Observacoes.Replace("<MES>", Mes); Observacoes = Observacoes.Replace("<ANO>", Ano); } } else { PostingNoSeries = !string.IsNullOrEmpty(CUsers.NumSerieFaturas) ? CUsers.NumSerieFaturas : ""; Observacoes = !string.IsNullOrEmpty(CreateInvoice.Descrição) ? CreateInvoice.Descrição : ""; } WSCreatePreInvoice.Create NAVCreate = new WSCreatePreInvoice.Create() { WSPreInvoice = new WSCreatePreInvoice.WSPreInvoice() { Sell_to_Customer_No = !string.IsNullOrEmpty(CreateInvoice.NºCliente) ? CreateInvoice.NºCliente : "", Document_Date = DateTime.Today, Document_DateSpecified = true, Shipment_Date = now, Shipment_DateSpecified = true, Shipment_Start_Time = now.AddHours(1), Shipment_Start_TimeSpecified = true, Document_Type = WSCreatePreInvoice.Document_Type.Invoice, Document_TypeSpecified = true, Posting_Date = CreateInvoice.DataDeRegisto ?? DateTime.Now, Posting_DateSpecified = true, Periodo_de_Fact_Contrato = !string.IsNullOrEmpty(ContractInvoicePeriod) ? ContractInvoicePeriod : "", Data_Serv_Prestado = !string.IsNullOrEmpty(InvoiceBorrowed) ? InvoiceBorrowed : "", Responsibility_Center = !string.IsNullOrEmpty(CUsers.CentroDeResponsabilidade) ? CUsers.CentroDeResponsabilidade : "", Posting_No_Series = PostingNoSeries, Due_Date = (DateTime)CreateInvoice.DataDeExpiração, Due_DateSpecified = true, Payment_Terms_Code = CodTermosPagamento, //Amaro Observacoes = Observacoes, Contract_No = !string.IsNullOrEmpty(CreateInvoice.NºContrato) ? CreateInvoice.NºContrato : "", Factura_CAF = true, Factura_CAFSpecified = true, Codigo_Pedido = !string.IsNullOrEmpty(CreateInvoice.NoRequisicaoDoCliente) ? CreateInvoice.NoRequisicaoDoCliente : "", No_Compromisso = !string.IsNullOrEmpty(CreateInvoice.NoCompromisso) ? CreateInvoice.NoCompromisso : "", Data_Encomenda = CreateInvoice.DataRececaoRequisicao ?? DateTime.MinValue, Data_EncomendaSpecified = true, RegionCode20 = !string.IsNullOrEmpty(CreateInvoice.CódigoRegião) ? CreateInvoice.CódigoRegião : "", FunctionAreaCode20 = !string.IsNullOrEmpty(CreateInvoice.CódigoÁreaFuncional) ? CreateInvoice.CódigoÁreaFuncional : "", ResponsabilityCenterCode20 = !string.IsNullOrEmpty(CreateInvoice.CódigoCentroResponsabilidade) ? CreateInvoice.CódigoCentroResponsabilidade : "", Prices_Including_VAT = PricesIncludingVAT, Prices_Including_VATSpecified = true, Ship_to_Code = !string.IsNullOrEmpty(Ship_to_Code) ? Ship_to_Code : "", } }; // Configure NAV Client EndpointAddress WS_URL = new EndpointAddress(WSConfigurations.WS_PreInvoice_URL.Replace("Company", WSConfigurations.WS_User_Company)); WSCreatePreInvoice.WSPreInvoice_PortClient WS_Client = new WSCreatePreInvoice.WSPreInvoice_PortClient(navWSBinding, WS_URL); WS_Client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Delegation; WS_Client.ClientCredentials.Windows.ClientCredential = new NetworkCredential(WSConfigurations.WS_User_Login, WSConfigurations.WS_User_Password, WSConfigurations.WS_User_Domain); try { result = await WS_Client.CreateAsync(NAVCreate); return(result); } catch (Exception ex) { return(null); } }
public static async Task <WSCreatePreInvoiceLine.CreateMultiple_Result> CreatePreInvoiceLineList(List <LinhasFaturaçãoContrato> LinesList, String HeaderNo, string InvoiceBorrowed, NAVWSConfigurations WSConfigurations) { int counter = 0; string TextoFatura = ""; string Mes = InvoiceBorrowed.Substring(0, InvoiceBorrowed.IndexOf("/")); string Ano = InvoiceBorrowed.Substring(InvoiceBorrowed.IndexOf("/") + 1, 4); bool ContratoQuota = false; Contratos Contrato = DBContracts.GetByIdLastVersion(LinesList.FirstOrDefault().NºContrato); if (Contrato != null && Contrato.TipoContrato == 3 && Contrato.Tipo == 3) //Contrato Quotas { ContratoQuota = true; if (Contrato != null && !string.IsNullOrEmpty(Contrato.TextoFatura)) { TextoFatura = Contrato.TextoFatura; TextoFatura = TextoFatura.Replace("<MES>", Mes); TextoFatura = TextoFatura.Replace("<ANO>", Ano); } } WSCreatePreInvoiceLine.WsPreInvoiceLine[] parsedList = LinesList.Select( x => new WSCreatePreInvoiceLine.WsPreInvoiceLine { Document_No = HeaderNo, Line_No = counter += 10000, Line_NoSpecified = true, Document_Type = WSCreatePreInvoiceLine.Document_Type.Invoice, Document_TypeSpecified = true, No = x.Código, TypeSpecified = true, Type = ConvertToSaleslineType(x.Tipo.Replace(" ", String.Empty)), Description = ContratoQuota == false ? x.Descrição != null && x.Descrição.Length > 50 ? x.Descrição.Substring(0, 50) : !string.IsNullOrEmpty(x.Descrição) ? x.Descrição : "" : !string.IsNullOrEmpty(TextoFatura) ? TextoFatura : "", Description_2 = ContratoQuota == false ? x.Descricao2 != null && x.Descricao2.Length > 50 ? x.Descricao2.Substring(0, 50) : !string.IsNullOrEmpty(x.Descricao2) ? x.Descricao2 : "" : "", Quantity = x.Quantidade.HasValue ? x.Quantidade.Value : 0, QuantitySpecified = true, Unit_of_Measure = x.CódUnidadeMedida, Unit_Price = x.PreçoUnitário.HasValue ? x.PreçoUnitário.Value : 0, Unit_PriceSpecified = true, Service_Contract_No = x.NºContrato, Contract_No = x.NºContrato, gJobDimension = x.NºContrato, RegionCode20 = x.CódigoRegião, FunctionAreaCode20 = x.CódigoÁreaFuncional, ResponsabilityCenterCode20 = x.CódigoCentroResponsabilidade, }).ToArray(); WSCreatePreInvoiceLine.CreateMultiple NAVCreate = new WSCreatePreInvoiceLine.CreateMultiple(parsedList); //Configure NAV Client EndpointAddress WS_URL = new EndpointAddress(WSConfigurations.WS_PreInvoiceLine_URL.Replace("Company", WSConfigurations.WS_User_Company)); WSCreatePreInvoiceLine.WsPreInvoiceLine_PortClient WS_Client = new WSCreatePreInvoiceLine.WsPreInvoiceLine_PortClient(navWSBinding, WS_URL); WS_Client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Delegation; WS_Client.ClientCredentials.Windows.ClientCredential = new NetworkCredential(WSConfigurations.WS_User_Login, WSConfigurations.WS_User_Password, WSConfigurations.WS_User_Domain); try { WSCreatePreInvoiceLine.CreateMultiple_Result result = await WS_Client.CreateMultipleAsync(NAVCreate); return(result); } catch (Exception ex) { throw ex; } }
public ContractViewModel ArchiveContract(ContractViewModel contractToArchive) { if (contractToArchive != null) { Contratos cContract = DBContracts.GetByIdAndVersion(contractToArchive.ContractNo, contractToArchive.VersionNo); var lastVersionContract = DBContracts.GetByIdLastVersion(contractToArchive.ContractNo); int lastVersionNumber = 0; if (lastVersionContract != null) { lastVersionNumber = lastVersionContract.NºVersão + 1; } else { lastVersionNumber = contractToArchive.VersionNo + 1; } if (cContract != null) { try { //Create new contract and update old cContract.Notas = cContract.Notas; cContract.RazãoArquivo = contractToArchive.ArchiveReason; cContract.UtilizadorModificação = changedByUserName; cContract.Arquivado = true; DBContracts.Update(cContract); //NR20181116 - Só faz se não for Oportunidade if (cContract.TipoContrato == (int)ContractType.Oportunity) { contractToArchive.eReasonCode = 1; contractToArchive.eMessage = "Arquivado com sucesso."; return(contractToArchive); } cContract.NºVersão = lastVersionNumber;// cContract.NºVersão + 1; cContract.UtilizadorCriação = changedByUserName; cContract.UtilizadorModificação = ""; if (cContract.TipoContrato == (int)ContractType.Oportunity) { cContract.NºProposta = ""; } else if (cContract.TipoContrato == (int)ContractType.Proposal) { cContract.NºContrato = ""; } cContract.DataHoraModificação = null; cContract.Arquivado = false; if (contractToArchive.ActionCode.HasValue && contractToArchive.ActionCode.Value == 2) { cContract.Estado = 1; cContract.DataHoraModificação = DateTime.Now; cContract.UtilizadorModificação = changedByUserName; } DBContracts.Create(cContract); //Duplicate Contract Lines List <LinhasContratos> ContractLines = DBContractLines.GetAllByActiveContract(contractToArchive.ContractNo, contractToArchive.VersionNo); ContractLines.ForEach(x => { x.NºVersão = lastVersionNumber;// cContract.NºVersão; DBContractLines.Create(x); }); contractToArchive.VersionNo = lastVersionNumber;// cContract.NºVersão; contractToArchive.eReasonCode = 1; contractToArchive.eMessage = "Arquivado com sucesso."; return(contractToArchive); } catch (Exception) { contractToArchive.eReasonCode = 2; contractToArchive.eMessage = "Ocorreu um erro ao arquivar."; } } } else { contractToArchive.eReasonCode = 2; contractToArchive.eMessage = "Ocorreu um erro ao arquivar."; } return(contractToArchive); }