public int Registrar(OrdenProduccion ordenProduccion)
        {
            try
            {
                var idOrdenProduccion = 0;

                var transactionOptions = new TransactionOptions {IsolationLevel = IsolationLevel.ReadUncommitted };

                using (var transactionScope = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
                {
                    if (ordenProduccion.TomarStock)
                    {
                        //Reserva de producto --> Disminuir el Stock de Producto
                        _productoDA.ActualizarStock(ordenProduccion.OrdenVenta.Producto.Id, -1 * ordenProduccion.CantidadProducto);

                        //Cambiar estado a Orden de Venta
                        _ordenVentaDA.ActualizarEstado(ordenProduccion.OrdenVenta.Id, "Programado");
                    }
                    else
                    {
                        //Generar Orden de Producción
                        idOrdenProduccion = _ordenProduccionDA.Registrar(ordenProduccion);

                        //Registrar Materiales
                        foreach (var material in ordenProduccion.Materiales)
                        {
                            material.IdOrdenProduccion = idOrdenProduccion;

                            _ordenProduccionDA.RegistrarMaterial(material);
                        }

                        //Registrar Maquinas
                        foreach (var secuencia in ordenProduccion.Secuencia)
                        {
                            secuencia.IdOrdenProduccion = idOrdenProduccion;

                            _ordenProduccionDA.RegistrarSecuencia(secuencia);
                        }

                        //Reserva de producto --> Disminuir el Stock de Producto
                        _productoDA.ActualizarStock(ordenProduccion.OrdenVenta.Producto.Id, -1 * ordenProduccion.CantidadProducto);

                        //Cambiar estado a Orden de Venta
                        _ordenVentaDA.ActualizarEstado(ordenProduccion.OrdenVenta.Id, "Programado");
                    }

                    transactionScope.Complete();
                }
                return idOrdenProduccion;
            }
            catch (Exception ex)
            {
                throw ThrowException(ex, MethodBase.GetCurrentMethod().Name);
            }
        }
        public void AsignarAsistentePlaneamiento(OrdenProduccion ordenProduccion)
        {
            try
            {
                var comando = Context.Database.GetStoredProcCommand(ProcedimientoAlmacenadoActualizarAsignacion);

                Context.Database.AddInParameter(comando, "@Id", DbType.Int32, ordenProduccion.Id);
                Context.Database.AddInParameter(comando, "@IdOperador", DbType.Int32, ordenProduccion.Operador.Id);
                Context.Database.AddInParameter(comando, "@Estado", DbType.String, ordenProduccion.Estado);

                Context.ExecuteNonQuery(comando);
            }
            catch (Exception ex)
            {
                throw new ExceptionData(ex.Message, Context.ProfileName, ProcedimientoAlmacenadoActualizarAsignacion);
            }
        }
        public IList<OrdenProduccion> Listar()
        {
            var lista = new List<OrdenProduccion>();
            try
            {
                var comando = Context.Database.GetStoredProcCommand(ProcedimientoAlmacenadoListar);

                using (var lector = Context.ExecuteReader(comando))
                {
                    while (lector.Read())
                    {
                        var entidad = new OrdenProduccion
                        {
                            Id = GetDataValue<int>(lector, "Id"),
                            Numero = GetDataValue<string>(lector, "Numero"),
                            Estado = GetDataValue<string>(lector, "Estado"),
                            OrdenVenta = new OrdenVenta
                            {
                                Id = GetDataValue<int>(lector, "IdOrdenVenta"),
                                Numero = GetDataValue<string>(lector, "NumeroOrdenVenta"),
                                FechaEntrega = GetDataValue<DateTime>(lector, "FechaEntrega"),
                                Producto = new Producto
                                {
                                    Descripcion = GetDataValue<string>(lector, "DescripcionProducto")
                                }
                            }
                        };

                        lista.Add(entidad);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new ExceptionData(ex.Message, Context.ProfileName, ProcedimientoAlmacenadoListar);
            }
            return lista;
        }
 public int RegistrarOrdenProduccion(OrdenProduccion ordenProduccion)
 {
     return _ordenProduccionBL.Registrar(ordenProduccion);
 }
        public int Registrar(OrdenProduccion ordenProduccion)
        {
            try
            {
                var comando = Context.Database.GetStoredProcCommand(ProcedimientoAlmacenadoInsertarOrdenProduccion);

                Context.Database.AddInParameter(comando, "@IdOrdenVenta", DbType.Int32, ordenProduccion.OrdenVenta.Id);
                Context.Database.AddInParameter(comando, "@Estado", DbType.String, ordenProduccion.Estado);
                Context.Database.AddInParameter(comando, "@CantidadProducto", DbType.Int32, ordenProduccion.CantidadProductoDigitado);

                var idOrdenProduccion = Convert.ToInt32(Context.ExecuteScalar(comando));

                return idOrdenProduccion;
            }
            catch (Exception ex)
            {
                throw new ExceptionData(ex.Message, Context.ProfileName, ProcedimientoAlmacenadoInsertarOrdenProduccion);
            }
        }
        public OrdenProduccion ObetenerPorNumero(string numero)
        {
            OrdenProduccion entidad = null;
            try
            {
                var comando = Context.Database.GetStoredProcCommand(ProcedimientoAlmacenadoObtenerPorNumero);

                Context.Database.AddInParameter(comando, "@Numero", DbType.String, numero);

                using (var lector = Context.ExecuteReader(comando))
                {
                    if (lector.Read())
                    {
                        entidad = new OrdenProduccion
                        {
                            Id = GetDataValue<int>(lector, "Id"),
                            Numero = GetDataValue<string>(lector, "Numero"),
                            Estado = GetDataValue<string>(lector, "Estado"),
                            CantidadProducto = GetDataValue<int>(lector, "CantidadProducto"),
                            OrdenVenta = new OrdenVenta
                            {
                                Id = GetDataValue<int>(lector, "IdOrdenVenta"),
                                Numero = GetDataValue<string>(lector, "NumeroOrdenVenta"),
                                Cliente = GetDataValue<string>(lector, "Cliente"),
                                Cantidad = GetDataValue<int>(lector, "CantidadOrdenVenta"),
                                FechaEntrega = GetDataValue<DateTime>(lector, "FechaEntrega"),
                                Producto = new Producto
                                {
                                    Id = GetDataValue<int>(lector, "IdProducto"),
                                    Descripcion = GetDataValue<string>(lector, "DescripcionProducto")
                                }
                            }
                        };
                    }
                }
            }
            catch (Exception ex)
            {
                throw new ExceptionData(ex.Message, Context.ProfileName, ProcedimientoAlmacenadoObtenerPorNumero);
            }
            return entidad;
        }
        public IList<OrdenProduccion> ListarParaEjecutar(string estado1)
        {
            var lista = new List<OrdenProduccion>();
            try
            {
                var comando = Context.Database.GetStoredProcCommand(ProcedimientoAlmacenadoListarParaEjecutar);

                Context.Database.AddInParameter(comando, "@Estado1", DbType.String, estado1);

                using (var lector = Context.ExecuteReader(comando))
                {
                    while (lector.Read())
                    {
                        var entidad = new OrdenProduccion
                        {
                            Id = GetDataValue<int>(lector, "Id"),
                            Numero = GetDataValue<string>(lector, "Numero"),
                            Estado = GetDataValue<string>(lector, "Estado"),
                            OrdenVenta = new OrdenVenta
                            {
                                Id = GetDataValue<int>(lector, "IdOrdenVenta"),
                                Numero = GetDataValue<string>(lector, "NumeroOrdenVenta"),
                                FechaEntrega = GetDataValue<DateTime>(lector, "FechaEntrega"),
                                Producto = new Producto
                                {
                                    Descripcion = GetDataValue<string>(lector, "DescripcionProducto")
                                }
                            },
                            Operador = new Usuario
                            {
                                Id = GetDataValue<int>(lector, "IdOperador"),
                                Username = GetDataValue<string>(lector, "UsernameOperador"),
                                NombreCompleto = GetDataValue<string>(lector, "NombreOperador"),
                            }
                        };

                        lista.Add(entidad);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new ExceptionData(ex.Message, Context.ProfileName, ProcedimientoAlmacenadoListarParaEjecutar);
            }
            return lista;
        }