Esempio n. 1
0
        /// <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);
            }
        }