public ActionResult <List <DtoLigacao> > ConsulteLigacoes([FromBody] DtoConsultaLigacoes filtro) { using (var servico = new ServicoDeLigacoes()) { return(Ok(servico.ObtenhaLigacoes(filtro))); } }
public List <DtoLigacao> ObtenhaLigacoes(DtoConsultaLigacoes filtro) { var filtros = new List <string>(); var dataHoraInicio = !string.IsNullOrEmpty(filtro.DataInicio + filtro.HoraInicio) ? $"{filtro.DataInicio} {filtro.HoraInicio}" : string.Empty; var dataHoraFim = !string.IsNullOrEmpty(filtro.DataFim + filtro.HoraFim) ? $"{filtro.DataFim} {filtro.HoraFim}" : string.Empty; if (!string.IsNullOrEmpty(dataHoraInicio)) { filtros.Add($"calldate >= '{dataHoraInicio.ConvertaStringDateTimePtBrParaEnUs()}'"); } if (!string.IsNullOrEmpty(dataHoraFim)) { filtros.Add($"calldate <= '{dataHoraFim.ConvertaStringDateTimePtBrParaEnUs()}'"); } var filtroFinal = string.Join(" AND ", filtros); var query = $"SELECT src, dst, calldate, uniqueid, duration " + $"FROM cdr "; if (!string.IsNullOrEmpty(filtroFinal)) { query += $"WHERE {filtroFinal};"; } var dataTable = PersistenciaMySql.ExecuteConsulta(query); var ligacoes = dataTable.Rows.OfType <DataRow>().Select(MonteObjeto).ToList(); ligacoes.ForEach(x => { x.Tipo = x.Origem.Length > 4 ? "Recebida" : "Originada"; }); var dtos = ligacoes.Select(ConvertaParaDto); var dtoLigacoes = dtos.ToList(); var novasLigacoes = dtoLigacoes .Where(dtoLigacao => dtoLigacao.Tipo == "Originada" && dtoLigacao.Numero.Length <= 4) .Select(dtoLigacao => dtoLigacao.CloneObjeto(x => { var rml = x.Ramal; x.Ramal = x.Numero; x.Numero = rml; x.Tipo = "Recebida"; })).ToList(); dtoLigacoes.AddRange(novasLigacoes); dtos = dtoLigacoes; if (!string.IsNullOrEmpty(filtro.Tipo)) { dtos = dtoLigacoes.Where(x => x.Tipo == filtro.Tipo); } if (!string.IsNullOrEmpty(filtro.Numero)) { dtos = dtoLigacoes.Where(x => x.Numero.Contains(filtro.Numero)); } if (!string.IsNullOrEmpty(filtro.Ramal)) { dtos = dtoLigacoes.Where(x => x.Ramal == filtro.Ramal); } int i = 1; return(dtos.OrderByDescending(x => x.DataHora).Select(x => { x.position = i++.ToString(); return x; }).ToList()); }