//------------------constructor public ItemComparacion(FilaExcel filaExcel, ResumenXML resumenXML) { this.FilaExcel = filaExcel; this.ResumenXML = resumenXML; this.EsIgualFechaTimbrado = false; this.EsIgualUuid = false; this.EsIgualTotal = false; this.EsIgualRfcReceptor = false; }
//------------------Methods public List <ItemComparacion> ComparaContraBD() { int numeroFilas = MyDataTableExcel.Rows.Count; //son en numero de filas que en realidad tiene el archivo de excel List <FilaExcel> listaFilasExcel = new List <FilaExcel>(); foreach (DataRow fila in myDataTableExcel.Rows) { //columna 13 tiene uuid //columna 62 tiene total neto //columna 5 tiene el rfc receptor //columna 1 tiene la fecha //columna 18 tiene version de CFDI string uuid = (string)fila[12]; decimal totalNeto = Decimal.Parse(fila[61].ToString()); string rfcReceptor = (string)fila[4]; string fecha = (string)fila[0]; string versionCFDI = (string)fila[17]; FilaExcel filaExcel = new FilaExcel(uuid, totalNeto, rfcReceptor, fecha, versionCFDI); listaFilasExcel.Add(filaExcel); } // hacer un array de UID que necesitamos buscar, var arrarUids = listaFilasExcel.Select(x => x.Uuid).ToArray(); // hacer la consulta usando el array y usando using . listaTimbrados puede ya no contener todos los UUIDs buscados desde Excel List <NOM_CFDI_Timbrado> listaDeTimbrados = new List <NOM_CFDI_Timbrado>(); using (var context = new RHEntities()) { listaDeTimbrados = (from t in context.NOM_CFDI_Timbrado where arrarUids.Contains(t.FolioFiscalUUID) select t).ToList(); } // armar la lista resumenXML List <ResumenXML> lResumenXML2 = (from item in listaDeTimbrados select new ResumenXML() { FechaTimbrado = item.FechaCertificacion.Value, RfcReceptor = item.RFCReceptor, Total = item.TotalRecibo, Uuid = item.FolioFiscalUUID }).ToList(); // No comparacion por indices, usa foreach, primero obtengo fila excel y luego busco si existe en la listaXML // si existe lo comparo, si no existe sigo con el siguiente, que no se detenga List <ItemComparacion> listaComparacion = new List <ItemComparacion>(); foreach (FilaExcel filaExcel in listaFilasExcel) { ResumenXML itemResumenXML = null; Func <ResumenXML, bool> apu = item => { if (item.Uuid == filaExcel.Uuid) { return(true); } else { return(false); } }; itemResumenXML = lResumenXML2.SingleOrDefault(apu); ItemComparacion itemComparacion = new ItemComparacion(filaExcel, itemResumenXML); itemComparacion.Comparar(); listaComparacion.Add(itemComparacion); } return(listaComparacion); }
//------------------Methods public List <ItemComparacion> ComparaContraBD() { int numeroFilas = MyDataTableExcel.Rows.Count; //son en numero de filas que en realidad tiene el archivo de excel List <FilaExcel> listaFilasExcel = (from DataRow fila in myDataTableExcel.Rows let uuid = (string)fila[12] let totalNeto = Decimal.Parse(fila[61].ToString()) let rfcReceptor = (string)fila[4] let fecha = (string)fila[0] let versionCFDI = (string)fila[17] select new FilaExcel(uuid, totalNeto, rfcReceptor, fecha, versionCFDI)).ToList(); //Recupero de la BD y hago una lista #region ALEJANDRO //List<ResumenXML> listaResumenXML = new List<ResumenXML>(); //RHEntities dContext = new RHEntities(); //foreach (var item in listaFilasExcel) //{ // string uuidBuscado = item.Uuid; // Func<NOM_CFDI_Timbrado, bool> apuBusqueda = itemComparacion => // { // if (itemComparacion.FolioFiscalUUID == uuidBuscado) // { return true; } // else { return false; } // }; // //Busca directo en tabla de BD // var registroBuscado = dContext.NOM_CFDI_Timbrado.Single(apuBusqueda); // //trabajando con datetime // ResumenXML resumenXML = new ResumenXML(registroBuscado.FechaCertificacion.Value, registroBuscado.FolioFiscalUUID, registroBuscado.TotalRecibo, registroBuscado.RFCReceptor); // listaResumenXML.Add(resumenXML); //} #endregion #region EDWIN //1 hacer un array de uuid a buscar var arrayUuiDs = listaFilasExcel.Select(x => x.Uuid).ToArray(); //2 hacer la busqueda del array usando using List <NOM_CFDI_Timbrado> listaTimbrados = new List <NOM_CFDI_Timbrado>(); using (var context = new RHEntities()) { listaTimbrados = (from t in context.NOM_CFDI_Timbrado where arrayUuiDs.Contains(t.FolioFiscalUUID) select t).ToList(); } //3 armar la lista de resumen var listaResumenXML = (from r in listaTimbrados select new ResumenXML() { FechaTimbrado = r.FechaCertificacion.Value, RfcReceptor = r.RFCReceptor, Total = r.TotalRecibo, Uuid = r.FolioFiscalUUID }).ToList(); #endregion //Recorro la lista recuperada de excel ó la recuperada de los XML // fisicos, preparo para comparar List <ItemComparacion> listaComparacion = new List <ItemComparacion>(); for (int i = 0; i < listaFilasExcel.Count; i++) { FilaExcel filaExcel = listaFilasExcel.ElementAt(i); ResumenXML resumenXML = listaResumenXML.ElementAt(i); ItemComparacion item = new ItemComparacion(filaExcel, resumenXML); item.Comparar(); //aqui comparo listaComparacion.Add(item); } //return Json(listaComparacion, JsonRequestBehavior.AllowGet); return(listaComparacion); }