コード例 #1
0
        /// <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;
                }
            }
        }