/// <summary> /// Asigna los costos de los subproductos al costo /// ya generado /// </summary> /// <param name="lista"></param> /// <param name="productoId"></param> /// <param name="organizacionID"> </param> private void AsignarCostosSubProductos(List <ReporteInventarioMateriaPrimaInfo> lista, int productoId, int organizacionID) { var productoBL = new ProductoBL(); var producto = new ProductoInfo { ProductoId = productoId }; producto = productoBL.ObtenerPorID(producto); if (producto != null) { switch ((FamiliasEnum)producto.Familia.FamiliaID) { case FamiliasEnum.Premezclas: var organizacion = new OrganizacionInfo { OrganizacionID = organizacionID, Activo = EstatusEnum.Activo }; var almacenBL = new AlmacenBL(); var tiposAlmacen = new List <TipoAlmacenEnum> { TipoAlmacenEnum.MateriasPrimas }; List <AlmacenInfo> almacenes = almacenBL.ObtenerAlmacenPorTiposAlmacen(tiposAlmacen, organizacion); var almacenMovimientoBL = new AlmacenMovimientoBL(); IEnumerable <AlmacenMovimientoSubProductosModel> productosPremezcla = lista.Select(x => new AlmacenMovimientoSubProductosModel { FechaMovimiento = x.FechaMovimiento, ProductoID = productoId }); productosPremezcla = almacenMovimientoBL.ObtenerMovimientosSubProductos(productosPremezcla); if (productosPremezcla != null) { var premezclaDetalleBL = new PremezclaBL(); List <PremezclaInfo> premezclas = premezclaDetalleBL.ObtenerPorOrganizacionDetalle(organizacion); PremezclaInfo premezcla; List <ReporteInventarioMateriaPrimaInfo> entradasMateriaPrima = lista.Where(entrada => entrada.CostoId > 0).ToList(); if (entradasMateriaPrima != null) { ReporteInventarioMateriaPrimaInfo entradaMateriaPrima; for (var index = 0; index < entradasMateriaPrima.Count; index++) { premezcla = premezclas.FirstOrDefault( id => id.Producto.ProductoId == productoId); if (premezcla != null) { entradaMateriaPrima = entradasMateriaPrima[index]; int almacenID = productosPremezcla.Where( almMov => almMov.AlmacenMovimientoID == entradaMateriaPrima.AlmacenMovimientoID). Select(id => id.AlmacenID).FirstOrDefault(); if (almacenes.Any(id => id.AlmacenID == almacenID)) { AlmacenMovimientoSubProductosModel almacenMovimientoSubProductosModel = productosPremezcla.FirstOrDefault( prod => prod.ProductoID == premezcla.Producto.ProductoId && prod.FechaMovimiento.ToShortDateString().Equals( entradaMateriaPrima.FechaMovimiento.ToShortDateString())); if (almacenMovimientoSubProductosModel != null) { IEnumerable <AlmacenMovimientoSubProductosModel> subProductos = productosPremezcla .Join(premezcla.ListaPremezclaDetalleInfos, pp => pp.ProductoID, pd => pd.Producto.ProductoId, (pp, pd) => pp).Where( fechaInicio => fechaInicio.AlmacenMovimientoID == (almacenMovimientoSubProductosModel.AlmacenMovimientoID + 1) && fechaInicio.FechaMovimiento.ToShortDateString().Equals( entradaMateriaPrima.FechaMovimiento.ToShortDateString())); if (subProductos != null && subProductos.Any()) { entradaMateriaPrima.ImporteSubProductos = subProductos.Sum(imp => imp.Importe); } } } } } } } break; } } }
/// <summary> /// Hace el guardado de la premezcla /// </summary> internal void Guardar(PremezclaInfo premezclaInfo, List <PremezclaDetalleInfo> listaPremezclaDetalle, List <PremezclaDetalleInfo> listaPremezclaEliminados, int usuario) { try { var premezclaBl = new PremezclaBL(); var premezclaDetalleBl = new PremezclaDetalleBL(); var listaPremezclasModificados = new List <PremezclaDetalleInfo>(); var listaPremezclasAgregadas = new List <PremezclaDetalleInfo>(); using (var transaction = new TransactionScope()) { //Si no esta guardado se crea int premezclaId; if (!premezclaInfo.Guardado) { premezclaId = premezclaBl.Crear(premezclaInfo); } else { premezclaId = premezclaInfo.PremezclaId; } premezclaInfo.PremezclaId = premezclaId; //Guardar detalles y actualizar modificados listaPremezclasModificados.AddRange(listaPremezclaDetalle.Where(detalleInfo => detalleInfo.Guardado)); listaPremezclasAgregadas.AddRange(listaPremezclaDetalle.Where(detalleInfo => !detalleInfo.Guardado)); if (listaPremezclasAgregadas.Count > 0) { premezclaDetalleBl.Crear(listaPremezclasAgregadas, premezclaInfo); } if (listaPremezclasModificados.Count > 0) { foreach (var listaPremezclasModificadoP in listaPremezclasModificados) { listaPremezclasModificadoP.UsuarioModificacionId = usuario; } premezclaDetalleBl.Actualizar(listaPremezclasModificados); } //Desactivar eliminados if (listaPremezclaEliminados.Count > 0) { foreach (var listaPremezclaEliminado in listaPremezclaEliminados) { listaPremezclaEliminado.Activo = EstatusEnum.Inactivo; } premezclaDetalleBl.Actualizar(listaPremezclaEliminados); } transaction.Complete(); } } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }