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;
        }