Ejemplo n.º 1
0
        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"));
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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();
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
            }
        }
Ejemplo n.º 8
0
        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;
            }
        }
Ejemplo n.º 9
0
        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);
        }