private bool ValidarFiltroRelOrcamento(RelOrcamentoFiltro filtro) { if ((!filtro.Orcamento.Id.HasValue) || (filtro.Orcamento.Id.HasValue) && (filtro.Orcamento.Id == 0)) { messageQueue.Add("Selecione o orçamento", TypeMessage.Warning); return(false); } if ((filtro.EhValorCorrigido) && ((!filtro.IndiceId.HasValue) || (filtro.IndiceId.HasValue) && (filtro.IndiceId == 0))) { messageQueue.Add("Informe o índice", TypeMessage.Warning); return(false); } return(true); }
public RelOrcamentoListaViewModel() { Classe = new ClasseDTO(); Filtro = new RelOrcamentoFiltro(); Filtro.Orcamento = new OrcamentoDTO(); }
public FileDownloadDTO ExportarRelOrcamento(RelOrcamentoFiltro filtro, OrcamentoDTO orcamentoDTO, FormatoExportacaoArquivo formato) { DataTable dtaRelatorio = new DataTable(); FileDownloadDTO arquivo = new FileDownloadDTO("Rel. Orçamento ", new System.IO.MemoryStream(), formato); if (orcamentoDTO == null) { return(arquivo); } ParametrosOrcamento parametros = parametrosOrcamentoRepository.Obter(); var centroCusto = centroCustoRepository.ObterPeloCodigo(orcamentoDTO.Obra.CentroCusto.Codigo, l => l.ListaCentroCustoEmpresa); var caminhoImagem = PrepararIconeRelatorio(centroCusto, parametros); var nomeEmpresa = ObterNomeEmpresa(centroCusto, parametros); if (!filtro.EhClasse) { relOrcamento objRelOrcamento = new relOrcamento(); dtaRelatorio = RelOrcamentoToDataTable(orcamentoDTO, false); objRelOrcamento.SetDataSource(dtaRelatorio); objRelOrcamento.SetParameterValue("ComBDI", filtro.EhBDI); objRelOrcamento.SetParameterValue("SemDetalhamento", filtro.EhSemDetalhamento); objRelOrcamento.SetParameterValue("TotalBDI", filtro.BDITotal); objRelOrcamento.SetParameterValue("ValorTotal", filtro.PrecoTotal); objRelOrcamento.SetParameterValue("NomeIndice", filtro.NomeIndice); objRelOrcamento.SetParameterValue("Defasagem", filtro.Defasagem); objRelOrcamento.SetParameterValue("DataBase", filtro.DataBase); objRelOrcamento.SetParameterValue("CotacaoBase", filtro.CotacaoBase); objRelOrcamento.SetParameterValue("DataAtual", filtro.DataAtual); objRelOrcamento.SetParameterValue("CotacaoAtual", filtro.CotacaoAtual); objRelOrcamento.SetParameterValue("ValorCorrigido", filtro.EhValorCorrigido); objRelOrcamento.SetParameterValue("AreaConstrucaoAreaReal", filtro.AreaConstrucaoAreaReal); objRelOrcamento.SetParameterValue("AreaConstrucaoAreaEquivalente", filtro.AreaConstrucaoAreaEquivalente); objRelOrcamento.SetParameterValue("caminhoImagem", caminhoImagem); arquivo = new FileDownloadDTO("Rel. Orçamento", objRelOrcamento.ExportToStream((ExportFormatType)formato), formato); } else { relOrcamentoClasse objRelOrcamentoClasse = new relOrcamentoClasse(); dtaRelatorio = RelOrcamentoToDataTable(orcamentoDTO, true); objRelOrcamentoClasse.SetDataSource(dtaRelatorio); objRelOrcamentoClasse.SetParameterValue("ComBDI", filtro.EhBDI); objRelOrcamentoClasse.SetParameterValue("SemDetalhamento", filtro.EhSemDetalhamento); objRelOrcamentoClasse.SetParameterValue("TotalBDI", filtro.BDITotal); objRelOrcamentoClasse.SetParameterValue("ValorTotal", filtro.PrecoTotal); objRelOrcamentoClasse.SetParameterValue("NomeIndice", filtro.NomeIndice); objRelOrcamentoClasse.SetParameterValue("Defasagem", filtro.Defasagem); objRelOrcamentoClasse.SetParameterValue("DataBase", filtro.DataBase); objRelOrcamentoClasse.SetParameterValue("CotacaoBase", filtro.CotacaoBase); objRelOrcamentoClasse.SetParameterValue("DataAtual", filtro.DataAtual); objRelOrcamentoClasse.SetParameterValue("CotacaoAtual", filtro.CotacaoAtual); objRelOrcamentoClasse.SetParameterValue("ValorCorrigido", filtro.EhValorCorrigido); objRelOrcamentoClasse.SetParameterValue("AreaConstrucaoAreaReal", filtro.AreaConstrucaoAreaReal); objRelOrcamentoClasse.SetParameterValue("AreaConstrucaoAreaEquivalente", filtro.AreaConstrucaoAreaEquivalente); objRelOrcamentoClasse.SetParameterValue("caminhoImagem", caminhoImagem); arquivo = new FileDownloadDTO("Rel. Orçamento Classe", objRelOrcamentoClasse.ExportToStream((ExportFormatType)formato), formato); } if (System.IO.File.Exists(caminhoImagem)) { System.IO.File.Delete(caminhoImagem); } return(arquivo); }
public OrcamentoDTO GerarRelatorioOrcamento(RelOrcamentoFiltro filtro) { if (!EhPermitidoImprimirRelOrcamento()) { messageQueue.Add(Resource.Sigim.ErrorMessages.PrivilegiosInsuficientes, TypeMessage.Error); return(null); } if (!ValidarFiltroRelOrcamento(filtro)) { return(null); } OrcamentoDTO orcamentoDTO = null; GIR.Sigim.Domain.Entity.Orcamento.Orcamento orcamento = orcamentoRepository.ObterPeloId(filtro.Orcamento.Id.Value, l => l.Empresa.ClienteFornecedor, l => l.Obra.CentroCusto, l => l.ListaOrcamentoComposicao.Select(c => c.Composicao)); if (orcamento != null) { decimal percentualBDI = orcamento.Obra.BDIPercentual.HasValue ? orcamento.Obra.BDIPercentual.Value : 0; percentualBDI = percentualBDI / 100; decimal valorCotacao = 1; decimal valorCotacaoAtual = 1; decimal preco = 0; decimal quantidade = 0; decimal BDI = 0; decimal precoSemBDI = 0; decimal precoTotal = 0; decimal precoTotalSemBDI = 0; decimal BDITotal = 0; int defasagem = filtro.Defasagem.HasValue ? filtro.Defasagem.Value : 0; DateTime dataBase = orcamento.Data.HasValue ? orcamento.Data.Value : new DateTime(1990, 1, 1); dataBase = dataBase.Date.AddMonths(-1 * defasagem); DateTime dataAtual = DateTime.Now.Date; dataAtual = dataAtual.Date.AddMonths(-1 * defasagem); string nomeIndice = "Não informado"; if (filtro.IndiceId.HasValue) { IndiceFinanceiro indiceFinanceiro = indiceFinanceiroRepository.ObterPeloId(filtro.IndiceId.Value); nomeIndice = indiceFinanceiro.Descricao; CotacaoValores cotacao = cotacaoValoresRepository.ObtemCotacao(filtro.IndiceId.Value, dataBase.Date); if (cotacao != null) { valorCotacao = cotacao.Valor.Value; dataBase = cotacao.Data.Value; } if (filtro.EhValorCorrigido) { CotacaoValores cotacaoAtual = cotacaoValoresRepository.ObtemCotacao(filtro.IndiceId.Value, dataAtual.Date); valorCotacaoAtual = cotacaoAtual.Valor.Value; dataAtual = cotacaoAtual.Data.Value; } } List <OrcamentoComposicao> listaOrcamentoComposicao = new List <OrcamentoComposicao>(); List <OrcamentoComposicao> listaClassePaiOrcamentoComposicao = new List <OrcamentoComposicao>(); listaOrcamentoComposicao = orcamento.ListaOrcamentoComposicao.ToList <OrcamentoComposicao>(); if (filtro.EhClasse) { if (filtro.ListaClasse.Count > 0) { listaOrcamentoComposicao = orcamento.ListaOrcamentoComposicao.Where(l => filtro.ListaClasse.Any(lc => lc.Codigo.Contains(l.CodigoClasse))).ToList <OrcamentoComposicao>(); } } for (var i = 0; i < listaOrcamentoComposicao.Count; i++) { OrcamentoComposicao orcamentoComposicao = listaOrcamentoComposicao.ElementAt(i); preco = orcamentoComposicao.Preco.HasValue ? orcamentoComposicao.Preco.Value : 0; quantidade = orcamentoComposicao.Quantidade.HasValue ? orcamentoComposicao.Quantidade.Value : 0; if (valorCotacao != 0) { preco = preco / valorCotacao; } if (valorCotacaoAtual != 0) { preco = preco * valorCotacaoAtual; } preco = Math.Round(preco, 5); BDI = preco * percentualBDI; BDI = Math.Round(BDI, 4); precoSemBDI = preco; if (filtro.EhBDI) { preco += BDI; } orcamentoComposicao.Preco = preco; precoTotal = precoTotal + Math.Round((preco * quantidade), 5); precoTotalSemBDI = precoTotalSemBDI + Math.Round((precoSemBDI * quantidade), 5); if (filtro.EhClasse) { AdicionaOrcamentoComposicaoClassePai(orcamentoComposicao, listaClassePaiOrcamentoComposicao, preco); } } if (filtro.EhClasse) { listaOrcamentoComposicao.AddRange(listaClassePaiOrcamentoComposicao); } orcamento.ListaOrcamentoComposicao = listaOrcamentoComposicao.OrderBy(l => l.CodigoClasse).ToList <OrcamentoComposicao>(); BDITotal = precoTotalSemBDI * percentualBDI; filtro.BDITotal = Math.Round(BDITotal, 4); filtro.PrecoTotal = precoTotal; filtro.NomeIndice = nomeIndice; filtro.CotacaoBase = String.Format("{0:0.00000}", Math.Round(valorCotacao, 5)); filtro.CotacaoAtual = String.Format("{0:0.00000}", Math.Round(valorCotacaoAtual, 5)); filtro.Defasagem = defasagem; filtro.DataBase = dataBase; filtro.DataAtual = dataAtual; filtro.AreaConstrucaoAreaReal = orcamento.Obra.AreaConstrucaoAreaReal.HasValue ? orcamento.Obra.AreaConstrucaoAreaReal.Value : 0; filtro.AreaConstrucaoAreaEquivalente = orcamento.Obra.AreaConstrucaoAreaEquivalente.HasValue ? orcamento.Obra.AreaConstrucaoAreaEquivalente.Value : 0; orcamentoDTO = orcamento.To <OrcamentoDTO>(); } return(orcamentoDTO); }