public List <ProduccionFormulaDetalleInfo> CrearListaProduccionFormulaDetalle(List <ProcesarArchivoInfo> lista, string formula) { var seguridad = (SeguridadInfo)ObtenerSeguridad(); var listaGlobalFormulaDetalle = new List <ProduccionFormulaDetalleInfo>(); var ingredientePL = new IngredientePL(); try { //sacamos los Productos var Prod = from w in lista where w.Formula == formula && w.Marca != "2" group w by w.Codigo into g select new { FirstLetter = g.Key, Words = g }; var formulaPL = new FormulaPL(); var formulasTodas = formulaPL.ObtenerTodos(EstatusEnum.Activo); foreach (var produccion in Prod) { var produccionFormulaDetalle = new ProduccionFormulaDetalleInfo(); List <ProcesarArchivoInfo> listafltrada = lista.Where(k => k.Formula == formula && k.Codigo == produccion.FirstLetter).ToList(); decimal cantidad = (from prod in listafltrada select prod.Real).Sum(); produccionFormulaDetalle.Producto = new ProductoInfo { ProductoId = int.Parse(produccion.FirstLetter) }; produccionFormulaDetalle.CantidadProducto = cantidad; produccionFormulaDetalle.Activo = EstatusEnum.Activo; var formulaExiste = formulasTodas.FirstOrDefault( fo => fo.Descripcion.ToUpper().Trim().Equals(formula.ToUpper().Trim(), StringComparison.InvariantCultureIgnoreCase)); if (formulaExiste == null) { formulaExiste = new FormulaInfo(); } IngredienteInfo ingredienteInfo = ingredientePL.ObtenerPorIdOrganizacionFormulaProducto(formulaExiste.FormulaId, int.Parse(produccion.FirstLetter), seguridad.Usuario.Organizacion.OrganizacionID); if (ingredienteInfo == null) { return(null); } produccionFormulaDetalle.Ingrediente = ingredienteInfo; listaGlobalFormulaDetalle.Add(produccionFormulaDetalle); } } catch (Exception er) { Logger.Error(er); return(null); } return(listaGlobalFormulaDetalle); }
private IList <PolizaInfo> ObtenerPoliza(PolizaConsumoAlimentoModel contenedor) { var polizasConsumo = new List <PolizaInfo>(); TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.ConsumoAlimento.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.ConsumoAlimento)); } string textoDocumento = tipoPoliza.TextoDocumento; string tipoMovimiento = tipoPoliza.ClavePoliza; string postFijoRef3 = tipoPoliza.PostFijoRef3; var linea = 1; var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append( string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).PadLeft( 10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(DateTime.Now.Millisecond); ref3.Append(postFijoRef3); string numeroDocumento = ObtenerNumeroReferenciaFolio(contenedor.AlmacenMovimiento.FolioMovimiento); DateTime fecha = contenedor.Reparto.Fecha; string archivoFolio = ObtenerArchivoFolio(fecha); IList <CostoInfo> costos = ObtenerCostos(); IList <FormulaInfo> formulas = ObtenerFormulas(); OrganizacionInfo organizacion; List <RepartoDetalleInfo> repatoAgrupado = null; List <ProduccionFormulaDetalleInfo> produccionAgrupado; CostoInfo costo = costos.FirstOrDefault( tipo => "002".Equals(tipo.ClaveContable)); if (costo == null) { costo = new CostoInfo(); } PolizaInfo polizaConsumo; IList <CuentaSAPInfo> cuentasSAP = ObtenerCuentasSAP(); if (cuentasSAP == null) { cuentasSAP = new List <CuentaSAPInfo>(); } CuentaSAPInfo cuentaSap; if (contenedor.Reparto != null && contenedor.Reparto.DetalleReparto != null && contenedor.Reparto.DetalleReparto.Any()) { repatoAgrupado = contenedor.Reparto.DetalleReparto .GroupBy(formu => formu.FormulaIDServida) .Select(agrupado => new RepartoDetalleInfo { OrganizacionID = agrupado.Select(org => org.OrganizacionID).FirstOrDefault(), Importe = agrupado.Sum(imp => imp.Importe), FormulaIDServida = agrupado.Select(form => form.FormulaIDServida).FirstOrDefault() }).Where(imp => imp.Importe > 0).ToList(); for (var indexReparto = 0; indexReparto < repatoAgrupado.Count; indexReparto++) { RepartoDetalleInfo detalle = repatoAgrupado[indexReparto]; organizacion = ObtenerOrganizacionIVA(detalle.OrganizacionID); cuentaSap = cuentasSAP.FirstOrDefault(clave => clave.CuentaSAP.Equals("1151401002")); if (cuentaSap == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "CUENTA NO CONFIGURADA PARA", costo.Descripcion)); } var datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fecha, Folio = numeroDocumento, Importe = string.Format("{0}", detalle.Importe.ToString("F2")), Renglon = Convert.ToString(linea), ImporteIva = "0", Ref3 = ref3.ToString(), ClaseDocumento = postFijoRef3, Cuenta = cuentaSap.CuentaSAP, ArchivoFolio = archivoFolio, DescripcionCosto = cuentaSap.Descripcion, PesoOrigen = 0, Division = organizacion.Division, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} {2}", tipoMovimiento, numeroDocumento, cuentaSap.CuentaSAP), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; linea++; polizaConsumo = GeneraRegistroPoliza(datos); polizasConsumo.Add(polizaConsumo); } } int almacenID = 0; if (contenedor.ProduccionFormula != null && contenedor.ProduccionFormula.ProduccionFormulaDetalle != null && contenedor.ProduccionFormula.ProduccionFormulaDetalle.Any()) { produccionAgrupado = contenedor.ProduccionFormula.ProduccionFormulaDetalle .GroupBy(formu => formu.ProduccionFormulaId) .Select(agrupado => new ProduccionFormulaDetalleInfo { ProduccionFormulaId = agrupado.Key, OrganizacionID = agrupado.Select(org => org.OrganizacionID).FirstOrDefault(), AlmacenID = agrupado.Select(alm => alm.AlmacenID).FirstOrDefault() }).ToList(); ClaseCostoProductoInfo producto; IList <ClaseCostoProductoInfo> almacenesProductosCuentas; FormulaInfo formula; for (var indexFormula = 0; indexFormula < produccionAgrupado.Count; indexFormula++) { ProduccionFormulaDetalleInfo detalle = produccionAgrupado[indexFormula]; almacenID = detalle.AlmacenID; almacenesProductosCuentas = ObtenerCostosProducto(almacenID); organizacion = ObtenerOrganizacionIVA(detalle.OrganizacionID); formula = formulas.FirstOrDefault(clave => clave.FormulaId == detalle.ProduccionFormulaId); if (formula == null) { formula = formulas.FirstOrDefault(clave => clave.Producto.ProductoId == detalle.ProduccionFormulaId); if (formula == null) { formula = new FormulaInfo { Producto = new ProductoInfo() }; } } decimal importe = 0; if (repatoAgrupado != null) { importe = repatoAgrupado.Where(formu => formu.FormulaIDServida == formula.FormulaId).Sum( imp => imp.Importe); if (importe == 0) { importe = repatoAgrupado.Where(formu => formu.FormulaIDServida == formula.Producto.ProductoId).Sum (imp => imp.Importe); } } if (importe == 0) { continue; } producto = almacenesProductosCuentas.FirstOrDefault(p => p.ProductoID == formula.Producto.ProductoId); if (producto == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "CUENTA NO CONFIGURADA PARA EL PRODUCTO", formula.Producto.Descripcion)); } cuentaSap = cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAPID == producto.CuentaSAPID); if (cuentaSap == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "CUENTA NO CONFIGURADA PARA EL PRODUCTO", formula.Producto.Descripcion)); } var datos = new DatosPolizaInfo { NumeroReferencia = numeroDocumento, FechaEntrada = fecha, Importe = string.Format("{0}", (importe * -1).ToString("F2")), Renglon = Convert.ToString(linea), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = cuentaSap.CuentaSAP, ClaseDocumento = postFijoRef3, ArchivoFolio = archivoFolio, DescripcionCosto = cuentaSap.Descripcion, PesoOrigen = 0, Division = organizacion.Division, TipoDocumento = textoDocumento, Folio = numeroDocumento, Concepto = String.Format("{0}-{1} {2}", tipoMovimiento, numeroDocumento, cuentaSap.CuentaSAP), Sociedad = organizacion.Sociedad, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; linea++; polizaConsumo = GeneraRegistroPoliza(datos); polizasConsumo.Add(polizaConsumo); } } return(polizasConsumo); }
/// <summary> /// Obtiene una lista de produccion de formula /// </summary> /// <param name="reader"></param> /// <returns></returns> internal static List <ProduccionFormulaInfo> ObtenerPorConciliacion(IDataReader reader) { try { Logger.Info(); var distribuciones = new List <ProduccionFormulaInfo>(); ProduccionFormulaInfo distribucion; while (reader.Read()) { distribucion = new ProduccionFormulaInfo { ProduccionFormulaId = Convert.ToInt32(reader["ProduccionFormulaID"]), Organizacion = new OrganizacionInfo { OrganizacionID = Convert.ToInt32(reader["OrganizacionID"]), Descripcion = Convert.ToString(reader["Organizacion"]) }, FolioFormula = Convert.ToInt32(reader["FolioFormula"]), Formula = new FormulaInfo { FormulaId = Convert.ToInt32(reader["FormulaID"]), Descripcion = Convert.ToString(reader["Formula"]), Producto = new ProductoInfo { ProductoId = Convert.ToInt32(reader["ProductoID"]), ProductoDescripcion = Convert.ToString(reader["Producto"]) } }, CantidadProducida = Convert.ToDecimal(reader["CantidadProducida"]), FechaProduccion = Convert.ToDateTime(reader["FechaProduccion"]), AlmacenMovimientoEntradaID = reader["AlmacenMovimientoEntradaID"] != null?Convert.ToInt64(reader["AlmacenMovimientoEntradaID"]) : 0, AlmacenMovimientoSalidaID = reader["AlmacenMovimientoSalidaID"] != null?Convert.ToInt64(reader["AlmacenMovimientoSalidaID"]) : 0, DescripcionFormula = Convert.ToString(reader["Formula"]), Activo = Convert.ToBoolean(reader["Activo"]).BoolAEnum(), }; distribuciones.Add(distribucion); } reader.NextResult(); var distribucionIngredientesOrganizaciones = new List <ProduccionFormulaDetalleInfo>(); ProduccionFormulaDetalleInfo distribucionIngredienteOrganizacion; while (reader.Read()) { distribucionIngredienteOrganizacion = new ProduccionFormulaDetalleInfo { Producto = new ProductoInfo { ProductoId = Convert.ToInt32(reader["ProductoID"]), Descripcion = Convert.ToString(reader["Producto"]), ProductoDescripcion = Convert.ToString(reader["Producto"]), UnidadMedicion = new UnidadMedicionInfo { UnidadID = Convert.ToInt32(reader["UnidadID"]), ClaveUnidad = Convert.ToString(reader["ClaveUnidad"]) }, }, CantidadProducto = Convert.ToDecimal(reader["CantidadProducto"]), Ingrediente = new IngredienteInfo { IngredienteId = Convert.ToInt32(reader["IngredienteID"]) }, AlmacenInventarioLoteID = Convert.ToInt32(reader["AlmacenInventarioLoteID"]), ProduccionFormulaId = Convert.ToInt32(reader["ProduccionFormulaID"]), ProduccionFormulaDetalleId = Convert.ToInt32(reader["ProduccionFormulaDetalleID"]), }; distribucionIngredientesOrganizaciones.Add(distribucionIngredienteOrganizacion); } distribuciones.ForEach(datos => { datos.ProduccionFormulaDetalle = distribucionIngredientesOrganizaciones.Where( id => id.ProduccionFormulaId == datos.ProduccionFormulaId).ToList(); }); return(distribuciones); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }