private List<ContaHospitalarDTO> PreencherServicosHospitalares() { var contas = new List<ContaHospitalarDTO>(); foreach (RepeaterItem despesaOperacional in rptUtiUnidades.Items) { var rptValoresDosSetores = (Repeater)despesaOperacional.FindControl("rptValoresDosSetores"); var IdServico = (HiddenField)despesaOperacional.FindControl("IdServico"); var conta = new ContaHospitalarDTO(); conta.IdServico = Convert.ToInt32(IdServico.Value); conta.Valores = new List<ValorContaDTO>(); foreach (RepeaterItem repeaterDespesa in rptValoresDosSetores.Items) { var valorDTO = new ValorContaDTO(); var valorID = (HiddenField)repeaterDespesa.FindControl("ValorID"); var calculado = (HiddenField)repeaterDespesa.FindControl("Calculado"); var textValor = (TextBox)repeaterDespesa.FindControl("txtValor"); var mes = (HiddenField)repeaterDespesa.FindControl("Mes"); var contaId = (HiddenField)repeaterDespesa.FindControl("contaId"); valorDTO.ValorID = Convert.ToInt32(valorID.Value); valorDTO.Mes = (MesEnum)Enum.Parse(typeof(MesEnum), mes.Value); conta.ContaID = int.Parse(contaId.Value); if (!Convert.ToBoolean(calculado.Value)) { double valor = 0; if (double.TryParse(textValor.Text.Replace("%", "").Replace(".", ""), out valor)) valorDTO.Valor = valor; } else { var repositorio = new Contas(); var contaObtida = repositorio.Obter<ContaHospital>(conta.ContaID); List<int> anexos = contaObtida.ContasAnexadas.Select(c => c.Id).ToList(); IEnumerable<IEnumerable<ValorContaDTO>> valoresCalculados = (contas.Where(cs => anexos.Any(a => a == cs.ContaID)).Select( c => c.Valores.Where(v => v.Mes == (MesEnum)Enum.Parse(typeof(MesEnum), mes.Value))). Select(s => s.Select(sv => sv))); if (valoresCalculados.ToList().Count > 2) { if (valoresCalculados.ToList()[2].FirstOrDefault().Valor != 0 && valoresCalculados.ToList()[3].FirstOrDefault().Valor != 0) valorDTO.Valor = valoresCalculados.ToList()[2].FirstOrDefault().Valor / valoresCalculados.ToList()[3].FirstOrDefault().Valor; else valorDTO.Valor = 0; } else { if (valoresCalculados.FirstOrDefault().FirstOrDefault().Valor != 0 && valoresCalculados.ToList()[1].FirstOrDefault().Valor != 0) valorDTO.Valor = valoresCalculados.FirstOrDefault().FirstOrDefault().Valor / valoresCalculados.ToList()[1].FirstOrDefault().Valor; else valorDTO.Valor = 0; } } conta.Valores.Add(valorDTO); } contas.Add(conta); } return contas; }
public List<ContaHospitalarDTO> TransformarProducaoDeInsumos(List<ServicoHospitalar> servicos, List<ServicoHospitalar> Porcentagens) { Contract.Requires(servicos != null, "Orcamento não informado."); Contract.Requires(servicos != null, "Serviços não informado."); Contract.Requires(servicos.All(s => s.Valores != null && s.Valores.Count == 12), "Valores não podem ser nulos."); List<ContaHospitalarDTO> contasDTO = new List<ContaHospitalarDTO>(); foreach (var servico in servicos) { ContaHospitalarDTO conta = new ContaHospitalarDTO(); conta.Conta = servico.Conta.Nome; conta.Setor = servico.Setor.NomeSetor; conta.Subsetor = servico.SubSetor.NomeSetor; conta.IdServico = servico.Id; conta.Valores = new List<ValorContaDTO>(); conta.ContaID = servico.Conta.Id; conta.ContasAxenadas = new List<int>(); foreach (var contaAnexada in servico.Conta.ContasAnexadas) { conta.ContasAxenadas.Add(contaAnexada.Id); } foreach (var valor in servico.Valores) { var valorConta = new ValorContaDTO() { Mes = valor.Mes, Valor = valor.Valor, TipoValor = servico.Conta.TipoValorContaEnum, ValorID = valor.Id, Calculado = servico.Conta.Calculado, ContaId = servico.Conta.Id }; if (servico.Conta.Nome == "Capacidade Operacional") { var servicoPorcentagem = Porcentagens.Where(d => d.SubSetor.NomeSetor == servico.SubSetor.NomeSetor && d.Conta.TipoValorContaEnum == TipoValorContaEnum.Porcentagem).FirstOrDefault(); foreach (var valorPorcentagem in servicoPorcentagem.Valores.Where(v => v.Mes == valor.Mes).ToList()) { if (valorPorcentagem.Valor != 0 && valorPorcentagem.Valor != 100) valorConta.Valor = CalcularPorcentagem(valorConta.Valor, valorPorcentagem); else if(valorPorcentagem.Valor == 0) valorConta.Valor = 0; } valorConta.Valor = valorConta.Valor * DateTime.DaysInMonth(2014, (int)valor.Mes); conta.Conta = "Pac Dia"; } conta.Valores.Add(valorConta); } contasDTO.Add(conta); } return contasDTO; }