예제 #1
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);
        }
예제 #2
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);
        }