/// <summary> /// Guarda la premezcla distribucion /// </summary> /// <param name="premezclaDistribucion"></param> /// <returns></returns> internal PremezclaDistribucionInfo GuardarPremezclaDistribucion(PremezclaDistribucionInfo premezclaDistribucion) { PremezclaDistribucionInfo premezcla = null; try { Dictionary <string, object> parametros = AuxPremezclaDistribucionDAL.ObtenerParametrosGuardarPremezclaDistribucion(premezclaDistribucion); DataSet ds = Retrieve("PremezclaDistribucion_Crear", parametros); if (ValidateDataSet(ds)) { premezcla = MapPremezclaDistribucionDAL.ObtenerPremezclaDistribucion(ds); } } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(premezcla); }
/// <summary> /// Ontiene los parametros para crear una distribucion /// </summary> /// <param name="premezcla"></param> /// <returns></returns> internal static Dictionary <string, object> ObtenerParametrosGuardarPremezclaDistribucion(PremezclaDistribucionInfo premezcla) { try { Logger.Info(); var parametros = new Dictionary <string, object> { { "@ProductoId", premezcla.ProductoId }, { "@CantidadExistente", premezcla.CantidadExistente }, { "@CostoUnitario", premezcla.CostoUnitario }, { "@ProveedorID", premezcla.ProveedorId }, { "@Iva", premezcla.Iva }, { "@UsuarioCreacionId", premezcla.UsuarioCreacionId } }; return(parametros); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
internal PremezclaDistribucionInfo GuardarPremezclaDistribucion(DistribucionDeIngredientesInfo distribucionIngredientes) { PremezclaDistribucionInfo distribucion = null; try { var almacenMovimientoBl = new AlmacenMovimientoBL(); var almacenInventarioLoteBl = new AlmacenInventarioLoteBL(); var almacenInventarioBl = new AlmacenInventarioBL(); var almacenMovimientoDetalleBl = new AlmacenMovimientoDetalleBL(); var premezclaDistribucionDal = new PremezclaDistribucionDAL(); var premezclaDistribucionDetalleDal = new PremezclaDistribucionDetalleDAL(); var premezclaDistribucionCostoDal = new PremezclaDistribucionCostoDAL(); long almacenMovimientoId = 0; // Afectamos el inventario. using (var transaction = new TransactionScope()) { distribucion = premezclaDistribucionDal.GuardarPremezclaDistribucion(new PremezclaDistribucionInfo { ProveedorId = distribucionIngredientes.Proveedor.ProveedorID, Iva = distribucionIngredientes.Iva, ProductoId = distribucionIngredientes.Producto.ProductoId, CantidadExistente = distribucionIngredientes.CantidadTotal, CostoUnitario = distribucionIngredientes.CostoUnitario, UsuarioCreacionId = distribucionIngredientes.UsuarioId, }); distribucionIngredientes.PremezclaDistribucionID = distribucion.PremezclaDistribucionId; distribucion.ListaPremezclaDistribucionCosto = premezclaDistribucionCostoDal.GuardarPremezclaDistribucionCosto(distribucionIngredientes); /* Se calcula el costo extra y se proratea entre las organizaciones*/ //decimal costoDeCostosPorOrganizacion = 0; decimal importeCostoTotal = 0; if (distribucionIngredientes.ListaOrganizaciones.Any()) { importeCostoTotal = distribucionIngredientes.ListaPremezclaDistribucionCosto.Sum(c => c.Importe); } foreach (var distribucionorganizaciones in distribucionIngredientes.ListaOrganizaciones) { decimal porcentajeSurtido = distribucionIngredientes.CantidadTotal > 0 ? (decimal)distribucionorganizaciones.CantidadSurtir / (decimal)distribucionIngredientes.CantidadTotal : 0; if (distribucionorganizaciones.Lote.AlmacenInventarioLoteId != 0) { // Se Genera un movimiento de almacen ////Insertar en almacenmovimiento var almacenMovimientoInfo = new AlmacenMovimientoInfo { ProveedorId = distribucionIngredientes.Proveedor.ProveedorID, AlmacenID = distribucionorganizaciones.Lote.AlmacenInventario.Almacen.AlmacenID, TipoMovimientoID = TipoMovimiento.EntradaAlmacen.GetHashCode(), Observaciones = "", Status = Estatus.AplicadoInv.GetHashCode(), UsuarioCreacionID = distribucionIngredientes.UsuarioId }; almacenMovimientoId = almacenMovimientoBl.Crear(almacenMovimientoInfo); //Se crea el Almacen Movimiento Costo GuardarCosto(distribucionIngredientes, almacenMovimientoId, distribucionorganizaciones); // Se modifica el Almacen Inventario distribucionorganizaciones.Lote.AlmacenInventario.Cantidad = distribucionorganizaciones.Lote.AlmacenInventario.Cantidad + distribucionorganizaciones.CantidadSurtir; distribucionorganizaciones.Lote.AlmacenInventario.Importe = distribucionorganizaciones.Lote.AlmacenInventario.Importe + distribucionorganizaciones.CostoTotal + (importeCostoTotal * porcentajeSurtido); distribucionorganizaciones.Lote.AlmacenInventario.PrecioPromedio = distribucionorganizaciones.Lote.AlmacenInventario.Importe / distribucionorganizaciones.Lote.AlmacenInventario.Cantidad; distribucionorganizaciones.Lote.AlmacenInventario.UsuarioModificacionID = distribucionIngredientes.UsuarioId; almacenInventarioBl.Actualizar(distribucionorganizaciones.Lote.AlmacenInventario); // Se modifica el Almacen Inventario Lote distribucionorganizaciones.Lote.Cantidad = distribucionorganizaciones.Lote.Cantidad + distribucionorganizaciones.CantidadSurtir; distribucionorganizaciones.Lote.Importe = distribucionorganizaciones.Lote.Importe + distribucionorganizaciones.CostoTotal + (importeCostoTotal * porcentajeSurtido); distribucionorganizaciones.Lote.PrecioPromedio = distribucionorganizaciones.Lote.Importe / distribucionorganizaciones.Lote.Cantidad; distribucionorganizaciones.Lote.UsuarioModificacionId = distribucionIngredientes.UsuarioId; almacenInventarioLoteBl.Actualizar(distribucionorganizaciones.Lote); // Se genera el Almacen Movimiento Detalle almacenMovimientoDetalleBl.Crear(new AlmacenMovimientoDetalle { AlmacenMovimientoID = almacenMovimientoId, AlmacenInventarioLoteId = distribucionorganizaciones.Lote.AlmacenInventarioLoteId, Piezas = 0, ProductoID = distribucionorganizaciones.Lote.AlmacenInventario.ProductoID, Precio = distribucionorganizaciones.CostoUnitario, Cantidad = distribucionorganizaciones.CantidadSurtir, Importe = distribucionorganizaciones.CostoTotal, UsuarioCreacionID = distribucionIngredientes.UsuarioId, FechaCreacion = DateTime.Now }); var premezclaDistribucionDetalle = premezclaDistribucionDetalleDal.GuardarPremezclaDistribucionDetalle(new PremezclaDistribucionDetalleInfo { AlmacenMovimientoId = almacenMovimientoId, PremezclaDistribucionId = distribucion.PremezclaDistribucionId, CantidadASurtir = distribucionorganizaciones.CantidadSurtir, OrganizacionId = distribucionorganizaciones.Organizacion.OrganizacionID, UsuarioCreacionId = distribucionIngredientes.UsuarioId }); distribucion.ListaPremezclaDistribucionDetalle.Add(premezclaDistribucionDetalle); foreach (var distribucionOrg in distribucionIngredientes .ListaOrganizaciones.Where(distribucionOrg => distribucionOrg.Organizacion.OrganizacionID == premezclaDistribucionDetalle.OrganizacionId)) { distribucionOrg.AlmaceMovimiento = new AlmacenMovimientoInfo { AlmacenMovimientoID = premezclaDistribucionDetalle.AlmacenMovimientoId }; } } } #region POLIZA distribucionIngredientes.AlmaceMovimientoID = almacenMovimientoId; var poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.PolizaPremezcla); distribucionIngredientes.FechaEntrada = DateTime.Now; IList <PolizaInfo> polizas = poliza.GeneraPoliza(distribucionIngredientes); if (polizas != null && polizas.Any()) { var polizaBL = new PolizaBL(); int organizacionID = distribucionIngredientes.ListaOrganizaciones[0].Organizacion.OrganizacionID; int usuarioCreacionID = distribucionIngredientes.UsuarioId; polizas.ToList().ForEach(datos => { datos.OrganizacionID = organizacionID; datos.UsuarioCreacionID = usuarioCreacionID; datos.ArchivoEnviadoServidor = 1; }); polizaBL.GuardarServicioPI(polizas, TipoPoliza.PolizaPremezcla); } #endregion POLIZA transaction.Complete(); } return(distribucion); } catch (ExcepcionServicio ex) { Logger.Error(ex); throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }