/// <summary> /// Obtiene parametros para actualizar /// </summary> /// <param name="info">Valores de la entidad</param> /// <returns></returns> public static Dictionary <string, object> ObtenerParametrosActualizar(SolicitudProductoInfo info) { try { Logger.Info(); var parametros = new Dictionary <string, object> { { "@SolicitudProductoID", info.SolicitudProductoID }, { "@OrganizacionID", info.OrganizacionID }, { "@FolioSolicitud", info.FolioSolicitud }, { "@FechaSolicitud", info.FechaSolicitud }, { "@UsuarioIDSolicita", info.UsuarioIDSolicita }, { "@EstatusID", info.EstatusID }, { "@UsuarioIDAutoriza", info.UsuarioIDAutoriza }, { "@FechaAutorizado", info.FechaAutorizado }, { "@UsuarioIDEntrega", info.UsuarioIDEntrega }, { "@FechaEntrega", info.FechaEntrega }, { "@CentroCostoID", info.CentroCostoID }, { "@AlmacenID", info.AlmacenID }, { "@AlmacenMovimientoID", info.AlmacenMovimientoID }, { "@ObservacionUsuarioEntrega", info.ObservacionUsuarioEntrega }, { "@ObservacionUsuarioAutoriza", info.ObservacionUsuarioAutoriza }, { "@Activo", info.Activo }, { "@UsuarioModificacionID", info.UsuarioModificacionID }, }; return(parametros); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene un registro de SolicitudProducto /// </summary> /// <param name="solicitudProductoID">Identificador de la SolicitudProducto</param> /// <returns></returns> public SolicitudProductoInfo ObtenerPorID(int solicitudProductoID) { try { Logger.Info(); Dictionary <string, object> parameters = AuxSolicitudProductoDAL.ObtenerParametrosPorID(solicitudProductoID); DataSet ds = Retrieve("SolicitudProducto_ObtenerPorID", parameters); SolicitudProductoInfo result = null; if (ValidateDataSet(ds)) { result = MapSolicitudProductoDAL.ObtenerPorID(ds); } return(result); } catch (SqlException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (DataException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Metodo para Crear un registro de SolicitudProducto /// </summary> /// <param name="info">Valores de la entidad que será creada</param> public int Crear(SolicitudProductoInfo info) { try { Logger.Info(); Dictionary <string, object> parameters = AuxSolicitudProductoDAL.ObtenerParametrosCrear(info); int result = Create("SolicitudProducto_Crear", parameters); return(result); } catch (SqlException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (DataException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene un flujo de datos /// para la generacion de la reimpresion /// de la poliza de Salida de Traspaso /// </summary> /// <param name="folioSolicitud"></param> /// <param name="polizaClave"></param> /// <returns></returns> private MemoryStream ReimpresionPolizaSalidaConsumo(FolioSolicitudInfo folioSolicitud, TipoPolizaInfo polizaClave) { var polizaBL = new PolizaBL(); IList <PolizaInfo> polizasSalidaConsumo = polizaBL.ObtenerPoliza(TipoPoliza.SalidaConsumo, folioSolicitud.OrganizacionID, folioSolicitud.FechaEntrega.HasValue ? folioSolicitud.FechaEntrega.Value : DateTime.MinValue, folioSolicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture), polizaClave.ClavePoliza, 1); MemoryStream stream = null; if (polizasSalidaConsumo != null) { var poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaConsumo); var solicitudProductoDAL = new SolicitudProductoDAL(); using (var almacenDAL = new AlmacenDAL()) { var almacenMovimientoBL = new AlmacenMovimientoBL(); SolicitudProductoInfo solicitud = solicitudProductoDAL.ObtenerPorID(folioSolicitud.FolioID); if (solicitud != null) { AlmacenInfo almacenGeneral = almacenDAL.ObtenerAlmacenGeneralOrganizacion(folioSolicitud.OrganizacionID); AlmacenMovimientoInfo almacenMovimiento = almacenMovimientoBL.ObtenerPorIDCompleto(solicitud.AlmacenMovimientoID.HasValue ? solicitud.AlmacenMovimientoID.Value : 0); if (almacenMovimiento != null) { foreach (var detalle in solicitud.Detalle) { var movimiento = almacenMovimiento.ListaAlmacenMovimientoDetalle.FirstOrDefault( alm => alm.Producto.ProductoId == detalle.Producto.ProductoId); if (movimiento == null) { continue; } detalle.PrecioPromedio = movimiento.Precio; } } if (almacenGeneral == null) { return(null); } solicitud.AlmacenGeneralID = almacenGeneral.AlmacenID; polizasSalidaConsumo = poliza.GeneraPoliza(solicitud); stream = poliza.ImprimePoliza(solicitud, polizasSalidaConsumo); } } } return(stream); }
/// <summary> /// Metodo que valida los datos para guardar /// </summary> /// <returns></returns> private bool ValidaGuardar() { bool resultado = true; string mensaje = string.Empty; try { SolicitudProductoInfo solicitud = Contexto; int selecionados = Contexto.Detalle.Count(e => e.Entregado && e.Editar); if (string.IsNullOrWhiteSpace(Contexto.ObservacionUsuarioEntrega)) { mensaje = Properties.Resources.EntregarProductoAlmacen_MsgObservacionesRequerida; } else if (selecionados > 0) { var disponibilidad = ValidaDisponibilidad(solicitud); solicitud.Detalle.ForEach(se => { bool entregado = (se.Entregado); if ((se.Activo == EstatusEnum.Activo && entregado) && se.Editar) { var registro = disponibilidad.FirstOrDefault( d => d.ProductoID == se.ProductoID); if (registro != null && !registro.IsDisponible) { mensaje += string.Format( Properties.Resources. EntregarProductoAlmacen_MsgSinDisponibilidad, se.Producto.Descripcion); } } }); } else { mensaje = Properties.Resources.EntregarProductoAlmacen_MsgSeleccioneUnRegistro; } } catch (Exception ex) { throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } if (!string.IsNullOrWhiteSpace(mensaje)) { resultado = false; SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], mensaje, MessageBoxButton.OK, MessageImage.Warning); } return(resultado); }
/// <summary> /// Obtiene una solicitud de productos por su folio de solicitud. /// </summary> /// <param name="solicitudId"></param> /// <returns></returns> private SolicitudProductoInfo ObtenerSolicitudPorId(int solicitudId) { SolicitudProductoInfo solicitud = solicitudProductoBL.ObtenerPorID(new SolicitudProductoInfo { SolicitudProductoID = solicitudId }); solicitud.Solicitud = InicializaContextoSolicitud(); solicitud.Solicitud.FolioID = solicitud.SolicitudProductoID; solicitud.Solicitud.FolioSolicitud = solicitud.FolioSolicitud; solicitud.Solicitud.Descripcion = string.Format("{0}", solicitud.FolioSolicitud); return(solicitud); }
/// <summary> /// Método que obtiene un registro /// </summary> /// <param name="ds"></param> /// <returns></returns> public static SolicitudProductoInfo ObtenerPorID(DataSet ds) { try { Logger.Info(); DataTable dt = ds.Tables[ConstantesDAL.DtDatos]; SolicitudProductoInfo entidad = (from info in dt.AsEnumerable() select new SolicitudProductoInfo { SolicitudProductoID = info.Field <int>("SolicitudProductoID"), Organizacion = new OrganizacionInfo { OrganizacionID = info.Field <int>("OrganizacionID"), Descripcion = info.Field <string>("Organizacion") }, FolioSolicitud = info.Field <int>("FolioSolicitud"), FechaSolicitud = info.Field <DateTime>("FechaSolicitud"), UsuarioSolicita = new UsuarioInfo { UsuarioID = info.Field <int>("UsuarioID"), }, Estatus = new EstatusInfo { EstatusId = info.Field <int>("EstatusID"), Descripcion = info.Field <string>("Estatus") }, UsuarioAutoriza = new UsuarioInfo { UsuarioID = info.Field <int>("UsuarioID") }, FechaAutorizado = info.Field <DateTime>("FechaAutorizado"), UsuarioEntrega = new UsuarioInfo { UsuarioID = info.Field <int>("UsuarioID") }, FechaEntrega = info.Field <DateTime>("FechaEntrega"), CentroCosto = new CentroCostoInfo { CentroCostoID = info.Field <int>("CentroCostoID"), Descripcion = info.Field <string>("CentroCosto") }, Almacen = new AlmacenInfo { AlmacenID = info.Field <int>("AlmacenID"), Descripcion = info.Field <string>("Almacen") }, AlmacenMovimientoID = info.Field <long?>("AlmacenMovimientoID"), ObservacionUsuarioEntrega = info.Field <string>("ObservacionUsuarioEntrega"), ObservacionUsuarioAutoriza = info.Field <string>("ObservacionUsuarioAutoriza"), Activo = info.Field <bool>("Activo").BoolAEnum(), }).First(); return(entidad); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Método para cancelar /// </summary> private void Guardar() { bool guardar = ValidaGuardar(); if (guardar) { try { SolicitudProductoInfo solicitudGuardar = Contexto; solicitudGuardar.UsuarioIDEntrega = usuario.UsuarioID; solicitudGuardar.FechaEntrega = DateTime.Now; solicitudGuardar.UsuarioModificacionID = usuario.UsuarioID; //solicitudGuardar.AlmacenID = almacen.AlmacenID; solicitudGuardar.TipoMovimientoInventario = TipoMovimiento.SalidaPorTraspaso; int activos = solicitudGuardar.DetalleGrid.Count(e => e.Activo == EstatusEnum.Activo); int entregados = solicitudGuardar.DetalleGrid.Count(e => e.EstatusID == Estatus.SolicitudProductoEntregado.GetHashCode()); if (activos == entregados) { solicitudGuardar.EstatusID = Estatus.SolicitudProductoEntregado.GetHashCode(); } solicitudGuardar.Detalle = solicitudGuardar.Detalle.Where(e => e.Entregado && e.Editar).ToList(); solicitudProductoBL.Guardar(solicitudGuardar); string mensaje = Properties.Resources.EntregarProductoAlmacen_GuardadoConExito; SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], mensaje, MessageBoxButton.OK, MessageImage.Correct); Limpiar(); } catch (ExcepcionGenerica) { SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], Properties.Resources.EntregarProductoAlmacen_ErrorGuardar, MessageBoxButton.OK, MessageImage.Error); } catch (Exception ex) { Logger.Error(ex); SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], Properties.Resources.EntregarProductoAlmacen_ErrorGuardar, MessageBoxButton.OK, MessageImage.Error); } } }
/// <summary> /// /// </summary> /// <param name="solicitud"></param> /// <param name="solicitudProductoBL"></param> /// <returns></returns> private static List <SolicitudProductoDetalleModel> ValidaDisponibilidad(SolicitudProductoInfo solicitud, SolicitudProductoBL solicitudProductoBL) { dynamic result; IEnumerable <int> idsProductos = solicitud.Detalle .Where(d => d.Producto.FamiliaId != (int)FamiliasEnum.HerramientaYEquipo || d.Producto.FamiliaId != (int)FamiliasEnum.Combustibles) .Select(d => d.ProductoID).Distinct().ToList(); SolicitudProductoInfo solicitudGuardar = solicitudProductoBL.ObtenerPorID(solicitud); var filtro = new FolioSolicitudInfo { OrganizacionID = solicitudGuardar.OrganizacionID, IdsProductos = idsProductos.ToList(), EstatusID = Estatus.SolicitudProductoAutorizado.GetHashCode(), Activo = EstatusEnum.Activo }; IList <AlmacenInventarioInfo> existencia = ObtenerExistencia(idsProductos); IList <SolicitudProductoInfo> solicitudesAutorizadas = solicitudProductoBL.ObtenerSolicitudesAutorizadas(filtro); var productosValidar = solicitud.Detalle.Select(d => new { d.ProductoID, d.Cantidad, d.Producto.FamiliaId }).ToList(); var autorizadas = (from p in solicitudesAutorizadas.SelectMany(sd => sd.Detalle) where p.EstatusID == Estatus.SolicitudProductoAutorizado.GetHashCode() group p by p.ProductoID into pg select new { ProductoID = pg.Key, Autorizada = pg.Sum(c => c.Cantidad) }).ToList(); List <SolicitudProductoDetalleModel> query = (from p in productosValidar join a in autorizadas on p.ProductoID equals a.ProductoID into gj from pa in gj.DefaultIfEmpty() select new SolicitudProductoDetalleModel { ProductoID = p.ProductoID, Cantidad = p.Cantidad, Existencia = ObtenerCantidadExistencia(p.ProductoID, p.FamiliaId, p.Cantidad, existencia, (pa == null ? 0 : pa.Autorizada)), /* Para los */ Autorizada = (pa == null ? 0 : pa.Autorizada), IsDisponible = (ObtenerCantidadExistencia(p.ProductoID, p.FamiliaId, p.Cantidad, existencia, (pa == null ? 0 : pa.Autorizada)) - (pa == null ? 0 : pa.Autorizada)) >= 0 }).ToList(); return(query); }
/// <summary> /// /// </summary> /// <param name="solicitud"></param> /// <returns></returns> private IEnumerable <SolicitudProductoDetalleModel> ValidaDisponibilidad(SolicitudProductoInfo solicitud) { IEnumerable <int> idsProductos = solicitud.Detalle.Select(d => d.ProductoID).Distinct().ToList(); var filtro = new FolioSolicitudInfo { OrganizacionID = solicitud.OrganizacionID, IdsProductos = idsProductos.ToList(), EstatusID = Estatus.SolicitudProductoAutorizado.GetHashCode(), Activo = EstatusEnum.Activo }; IEnumerable <AlmacenInventarioInfo> existencia = ObtenerExistencia(idsProductos); IList <SolicitudProductoInfo> solicitudesAutorizadas = solicitudProductoBL.ObtenerSolicitudesAutorizadas(filtro); var productosValidar = solicitud.Detalle.Select(d => new { d.ProductoID, d.Cantidad }).ToList(); var autorizadas = (from p in solicitudesAutorizadas.SelectMany(sd => sd.Detalle) where p.EstatusID == Estatus.SolicitudProductoAutorizado.GetHashCode() group p by p.ProductoID into pg select new { ProductoID = pg.Key, Autorizada = pg.Sum(c => c.Cantidad) }).ToList(); var query = (from p in productosValidar join e in existencia on p.ProductoID equals e.ProductoID join a in autorizadas on p.ProductoID equals a.ProductoID into gj from pa in gj.DefaultIfEmpty() select new SolicitudProductoDetalleModel { ProductoID = p.ProductoID, Cantidad = p.Cantidad, Existencia = e.Cantidad, Autorizada = (pa == null ? 0 : pa.Autorizada), IsDisponible = (e.Cantidad - (pa == null ? 0 : pa.Autorizada - p.Cantidad)) >= p.Cantidad }).ToList(); return(query); }
/// <summary> /// Obtiene una entidad de SolicitudProducto por su Id /// </summary> /// <param name="filtro">Obtiene una entidad SolicitudProducto por su Id</param> /// <returns></returns> public SolicitudProductoInfo ObtenerPorID(SolicitudProductoInfo filtro) { try { Logger.Info(); return(solicitudProductoDAL.ObtenerPorID(filtro.SolicitudProductoID)); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Metodo para Guardar/Modificar una entidad SolicitudProducto /// </summary> /// <param name="info"></param> /// <returns></returns> public int Guardar(SolicitudProductoInfo info) { try { Logger.Info(); return(solicitudProductoDAL.Guardar(info)); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Genera los totales por Detalle /// </summary> /// <param name="solicitud"></param> private void GeneraLineaTotales(SolicitudProductoInfo solicitud) { var sumaImporte = Math.Round(solicitud.Detalle.Sum(det => det.Cantidad * det.PrecioPromedio), 2); PolizaModel.Detalle = new List <PolizaDetalleModel>(); var detalleModel = new PolizaDetalleModel { CantidadCabezas = string.Empty, PesoPromedio = string.Empty, TipoGanado = string.Empty, PesoTotal = string.Empty, ImportePromedio = string.Empty, PrecioVenta = sumaImporte.ToString("N2", CultureInfo.CurrentCulture), }; PolizaModel.Detalle.Add(detalleModel); }
/// <summary> /// Inicializa el Contexto /// </summary> private void InicializaContexto() { solictante = new UsuarioPL().ObtenerPorID(AuxConfiguracion.ObtenerUsuarioLogueado()); solictante.OrganizacionID = solictante.Organizacion.OrganizacionID; almacen = ObtenerAlmacenGenerarl(solictante.Organizacion.OrganizacionID); autorizadorId = 0; Contexto = new SolicitudProductoInfo { OrganizacionID = solictante.OrganizacionID, UsuarioSolicita = solictante, UsuarioIDSolicita = solictante.UsuarioID, Solicitud = InicializaContextoSolicitud(), Detalle = new List <SolicitudProductoDetalleInfo>(), DetalleGrid = new ObservableCollection <SolicitudProductoDetalleInfo>(), FechaCreacion = DateTime.Today, UsuarioCreacionID = AuxConfiguracion.ObtenerUsuarioLogueado(), EstatusID = Estatus.SolicitudProductoPendiente.GetHashCode(), }; }
/// <summary> /// Genera las Lineas del Detalle /// </summary> /// <param name="solicitudProducto"></param> private void GeneraLineasDetalle(SolicitudProductoInfo solicitudProducto) { PolizaModel.Detalle = new List <PolizaDetalleModel>(); PolizaDetalleModel detalleModel; foreach (var detalle in solicitudProducto.Detalle) { detalleModel = new PolizaDetalleModel { CantidadCabezas = detalle.Producto.ProductoId.ToString(CultureInfo.InvariantCulture), PesoPromedio = string.Empty, TipoGanado = detalle.Producto.Descripcion, PesoTotal = string.Format("{0} {1}.", detalle.Cantidad.ToString("N0"), detalle.Producto.UnidadMedicion.ClaveUnidad), ImportePromedio = detalle.PrecioPromedio.ToString("N2"), PrecioVenta = Math.Round(detalle.Cantidad * detalle.PrecioPromedio, 2).ToString("N2"), }; PolizaModel.Detalle.Add(detalleModel); } polizaImpresion.GenerarDetalles("Detalle"); }
/// <summary> /// Inicializa el Contexto /// </summary> private void InicializaContexto() { usuario = new UsuarioPL().ObtenerPorID(AuxConfiguracion.ObtenerUsuarioLogueado()); usuario.OrganizacionID = usuario.Organizacion.OrganizacionID; almacenGeneral = ObtenerAlmacenGenerarl(usuario.Organizacion.OrganizacionID); autorizadorId = 0; Contexto = new SolicitudProductoInfo { OrganizacionID = usuario.OrganizacionID, AlmacenID = null, //UsuarioIDSolicita = usuario.UsuarioID, //UsuarioSolicita = usuario, Solicitud = InicializaContextoSolicitud(), Detalle = new List <SolicitudProductoDetalleInfo>(), DetalleGrid = new ObservableCollection <SolicitudProductoDetalleInfo>(), FechaCreacion = DateTime.Today, UsuarioCreacionID = AuxConfiguracion.ObtenerUsuarioLogueado(), EstatusID = Estatus.SolicitudProductoEntregado.GetHashCode(), }; }
/// <summary> /// Metodo para Guardar/Modificar una entidad SolicitudProducto /// además de generar movimiento de inventario /// </summary> /// <param name="info"></param> /// <returns></returns> public MemoryStream GuardarMovimientoInventario(SolicitudProductoInfo info) { try { Logger.Info(); return(solicitudProductoDAL.GuardarMovimientoInventario(info)); } catch (ExcepcionServicio ex) { throw ex; } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Asigna el valor al campo folio /// </summary> private void AyudaConDatosFolio() { if (Contexto.Solicitud.FolioID > 0) { Contexto = ObtenerSolicitudPorId(Contexto.Solicitud.FolioID); bool isAutorizado = Contexto.IsAutorizado; Contexto.Detalle.ForEach(e => e.Eliminar = !isAutorizado); Contexto.DetalleGrid = Contexto.Detalle.ConvertirAObservable(); gridDatos.ItemsSource = Contexto.Detalle.Where(e => e.Activo == EstatusEnum.Activo); skAyudaFolio.IsEnabled = false; btnGuardar.Content = Properties.Resources.btnActualizar; var centroCosto = Contexto.Detalle.FirstOrDefault(c => c.Activo == EstatusEnum.Activo); if (centroCosto != null) { autorizadorId = ObtenerCentroCostoAutorizador(centroCosto.CentroCostoID); Contexto.Solicitud.CentroCosto.AutorizadorID = autorizadorId; } } }
/// <summary> /// Asigna el valor al campo folio /// </summary> private void AyudaConDatosFolio() { if (Contexto.Solicitud.FolioID > 0) { Contexto = ObtenerSolicitudPorId(Contexto.Solicitud.FolioID); //Contexto.AlmacenID = almacen.AlmacenID; int activos = Contexto.Detalle.Count(e => e.Activo == EstatusEnum.Activo); int recibidos = Contexto.Detalle.Count(e => e.EstatusID == Estatus.SolicitudProductoRecibido.GetHashCode()); Contexto.Detalle = Contexto.Detalle.Where(e => e.Activo == EstatusEnum.Activo).ToList(); Contexto.Detalle.ForEach(e => { e.Recibido = e.EstatusID == Estatus.SolicitudProductoRecibido.GetHashCode(); e.Editar = e.EstatusID == Estatus.SolicitudProductoEntregado.GetHashCode(); }); DtpFecha.SelectedDate = Contexto.FechaSolicitud; Contexto.DetalleGrid = Contexto.Detalle.ConvertirAObservable(); Contexto.UsuarioEntrega = usuario; //var habilitarBotonGuardar = Contexto.Detalle.FirstOrDefault(e => e.Editar); var habilitarBotonGuardar = Contexto.Detalle.Count(e => !e.Recibido); //if (habilitarBotonGuardar == null) if (habilitarBotonGuardar == 0) { Contexto.Guardar = false; } else { Contexto.Guardar = true; } gridDatos.ItemsSource = Contexto.Detalle.Where(e => e.Activo == EstatusEnum.Activo); skAyudaFolio.IsEnabled = false; } }
public static bool Guardar(SolicitudProductoInfo solicitud) { using (var solicitudProductoBL = new SolicitudProductoBL()) { SolicitudProductoInfo solicitudGuardar = solicitudProductoBL.ObtenerPorID(solicitud); solicitudGuardar.EstatusID = Estatus.SolicitudProductoAutorizado.GetHashCode(); solicitudGuardar.UsuarioIDAutoriza = Usuario.UsuarioID; solicitudGuardar.FechaAutorizado = DateTime.Now; solicitudGuardar.UsuarioModificacionID = Usuario.UsuarioID; solicitudGuardar.ObservacionUsuarioAutoriza = solicitud.ObservacionUsuarioAutoriza; foreach (var det in solicitudGuardar.Detalle) { var renglon = solicitud.Detalle.FirstOrDefault(d => d.SolicitudProductoDetalleID == det.SolicitudProductoDetalleID); if (renglon != null) { if (renglon.Activo == EstatusEnum.Activo) { det.EstatusID = Estatus.SolicitudProductoAutorizado.GetHashCode(); } else { det.Activo = EstatusEnum.Inactivo; } } } bool inactivar = solicitudGuardar.Detalle.All(e => e.Activo != EstatusEnum.Activo); if (inactivar) { solicitudGuardar.Activo = EstatusEnum.Inactivo; } solicitudProductoBL.Guardar(solicitudGuardar); } return(true); }
/// <summary> /// Metodo para actualizar un registro de SolicitudProducto /// </summary> /// <param name="info">Valores de la entidad que se actualizarán</param> public void Actualizar(SolicitudProductoInfo info) { try { Logger.Info(); Dictionary <string, object> parameters = AuxSolicitudProductoDAL.ObtenerParametrosActualizar(info); Update("SolicitudProducto_Actualizar", parameters); } catch (SqlException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (DataException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Registra el envio de alimento de una organizacion a otra /// </summary> /// <param name="envioAlimento">Información del envio de alimento a guardar</param> /// <returns>Regresa una confirmación de registro del envio de alimento</returns> internal EnvioAlimentoInfo RegistrarEnvioAlimento(EnvioAlimentoInfo envioAlimento) { EnvioAlimentoInfo confirmacion = new EnvioAlimentoInfo(); try { Logger.Info(); AlmacenMovimientoBL almacenMovimientoBL = new AlmacenMovimientoBL(); EnvioAlimentoDAL salidaAlimentoDAL = new EnvioAlimentoDAL(); AlmacenMovimientoDetalleBL almacenMovimientoDetalleBl = new AlmacenMovimientoDetalleBL(); AlmacenMovimientoDetalle detalleMovimiento = new AlmacenMovimientoDetalle(); AlmacenInventarioBL inventario = new AlmacenInventarioBL(); AlmacenInventarioLoteBL loteBl = new AlmacenInventarioLoteBL(); AlmacenMovimientoInfo almacenMovimiento = new AlmacenMovimientoInfo(); almacenMovimiento.AlmacenID = envioAlimento.Almacen.AlmacenID; almacenMovimiento.TipoMovimientoID = TipoMovimiento.ProductoSalidaTraspaso.GetHashCode(); almacenMovimiento.Status = Estatus.AplicadoInv.GetHashCode(); almacenMovimiento.UsuarioCreacionID = envioAlimento.UsuarioCreacionID; almacenMovimiento.UsuarioModificacionID = envioAlimento.UsuarioCreacionID; almacenMovimiento.EsEnvioAlimento = true; almacenMovimiento.OrganizacionID = envioAlimento.Origen.OrganizacionID; PolizaAbstract poliza = null; IList <PolizaInfo> listaPolizas = null; using (var transaccion = new TransactionScope()) { //registrar en TB AlmacenMovimiento long almacenMovimientoID = almacenMovimientoBL.Crear(almacenMovimiento); almacenMovimiento.AlmacenMovimientoID = almacenMovimientoID; envioAlimento.AlmacenMovimientoId = almacenMovimientoID; if (envioAlimento.AlmacenMovimientoId == 0) { return new EnvioAlimentoInfo { EnvioId = 0 } } ; //registrar en TB AlmacenMovimientoDetalle detalleMovimiento.AlmacenMovimientoID = almacenMovimiento.AlmacenMovimientoID; almacenMovimiento = almacenMovimientoBL.ObtenerPorId(almacenMovimiento.AlmacenMovimientoID); if (almacenMovimiento.AlmacenMovimientoID == 0) { return new EnvioAlimentoInfo { EnvioId = 0 } } ; envioAlimento.Folio = almacenMovimiento.FolioMovimiento; detalleMovimiento.Producto = envioAlimento.Producto; if (detalleMovimiento.Producto.ManejaLote) { detalleMovimiento.AlmacenInventarioLoteId = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().AlmacenInventarioLoteId; detalleMovimiento.Precio = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio; } else { detalleMovimiento.Precio = envioAlimento.AlmacenInventario.PrecioPromedio; } detalleMovimiento.ProductoID = envioAlimento.Producto.ProductoId; detalleMovimiento.Cantidad = envioAlimento.Cantidad; detalleMovimiento.Importe = envioAlimento.Importe; detalleMovimiento.UsuarioCreacionID = envioAlimento.UsuarioCreacionID; detalleMovimiento.Piezas = envioAlimento.Piezas; int almacenMovimientoDetalleid = almacenMovimientoDetalleBl.Crear(detalleMovimiento); if (almacenMovimientoDetalleid == 0) { return new EnvioAlimentoInfo { EnvioId = 0 } } ; //registrar en TB EnvioProducto confirmacion = salidaAlimentoDAL.RegistrarEnvioAlimento(envioAlimento); if (confirmacion.EnvioId == 0) { return new EnvioAlimentoInfo { EnvioId = 0 } } ; envioAlimento.EnvioId = confirmacion.EnvioId; envioAlimento.FechaEnvio = confirmacion.FechaEnvio; envioAlimento.AlmacenInventario.Cantidad -= envioAlimento.Cantidad; envioAlimento.AlmacenInventario.Importe -= envioAlimento.Importe; decimal precioPromedioInicial = 0M; if (envioAlimento.Producto.ManejaLote) { precioPromedioInicial = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio; } else { precioPromedioInicial = envioAlimento.AlmacenInventario.PrecioPromedio; } if (envioAlimento.AlmacenInventario.Cantidad == 0) { envioAlimento.AlmacenInventario.PrecioPromedio = 0M; } if (envioAlimento.AlmacenInventario.Cantidad < 0) { envioAlimento.AlmacenInventario.Cantidad = 0; } if (envioAlimento.AlmacenInventario.Importe < 0) { envioAlimento.AlmacenInventario.Importe = 0; } if (envioAlimento.AlmacenInventario.Cantidad > 0 && envioAlimento.AlmacenInventario.Importe > 0) { envioAlimento.AlmacenInventario.PrecioPromedio = envioAlimento.AlmacenInventario.Importe / envioAlimento.AlmacenInventario.Cantidad; } envioAlimento.AlmacenInventario.UsuarioModificacionID = envioAlimento.UsuarioCreacionID; inventario.ActualizarPorProductoId(envioAlimento.AlmacenInventario); if (envioAlimento.Producto.ManejaLote) { FechaInfo fechaInfo = new FechaBL().ObtenerFechaActual(); envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad -= envioAlimento.Cantidad; envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe -= envioAlimento.Importe; if (envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad <= 0) { envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio = 0M; envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad = 0; envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe = 0; envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().FechaInicio = fechaInfo.FechaActual; } if (envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe > 0 && envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad > 0) { envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe / envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad; } else { envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Activo = EstatusEnum.Inactivo; envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().FechaFin = fechaInfo.FechaActual; } if (envioAlimento.Producto.SubfamiliaId == SubFamiliasEnum.Forrajes.GetHashCode()) { envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Piezas -= envioAlimento.Piezas; if (envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Piezas < 0) { envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Piezas = 0; } } envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().UsuarioModificacionId = envioAlimento.UsuarioCreacionID; loteBl.ActualizarEnvioAlimento(envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault()); } if (salidaAlimentoDAL.RegistrarRecepcionProductoEnc(envioAlimento, TipoMovimiento.ProductoSalidaTraspaso) == 0) { return new EnvioAlimentoInfo { EnvioId = 0 } } ; if (salidaAlimentoDAL.RegistrarRecepcionProductoDet(envioAlimento, TipoMovimiento.ProductoSalidaTraspaso) == 0) { return new EnvioAlimentoInfo { EnvioId = 0 } } ; poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaTraspaso); SolicitudProductoInfo oSolicitud = new SolicitudProductoInfo(); oSolicitud.FolioSolicitud = envioAlimento.Folio; oSolicitud.OrganizacionID = envioAlimento.Origen.OrganizacionID; oSolicitud.AlmacenGeneralID = envioAlimento.Almacen.AlmacenID; oSolicitud.Almacen = new AlmacenBL().ObtenerAlmacenPorOrganizacion(envioAlimento.Destino.OrganizacionID).FirstOrDefault(); oSolicitud.FechaEntrega = envioAlimento.FechaEnvio; oSolicitud.UsuarioCreacionID = envioAlimento.UsuarioCreacionID; oSolicitud.Detalle = new List <SolicitudProductoDetalleInfo>(); SolicitudProductoDetalleInfo detalle = new SolicitudProductoDetalleInfo() { Cantidad = envioAlimento.Cantidad, PrecioPromedio = envioAlimento.Producto.ManejaLote ? envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio: envioAlimento.AlmacenInventario.PrecioPromedio, Producto = envioAlimento.Producto }; detalle.PrecioPromedio = decimal.Round(detalle.PrecioPromedio, 2); if (detalle.PrecioPromedio == 0) { detalle.PrecioPromedio = precioPromedioInicial; } oSolicitud.Detalle.Add(detalle); listaPolizas = poliza.GeneraPoliza(oSolicitud); var polizaDAL = new PolizaDAL(); if (listaPolizas != null && listaPolizas.Any()) { string Referencia = "03 " + envioAlimento.Folio.ToString() + new Random().Next(10, 20).ToString() + new Random().Next(30, 40) + DateTime.Now.Millisecond.ToString() + listaPolizas.ToList().FirstOrDefault().ClaseDocumento; listaPolizas.ToList().ForEach(datos => { datos.NumeroReferencia = envioAlimento.Folio.ToString(); datos.OrganizacionID = oSolicitud.OrganizacionID; datos.UsuarioCreacionID = envioAlimento.UsuarioCreacionID; datos.Activo = EstatusEnum.Activo; datos.ArchivoEnviadoServidor = 1; datos.Referencia3 = Referencia; }); ParametroOrganizacionInfo oParametroOrg = new ParametroOrganizacionBL().ObtenerPorOrganizacionIDClaveParametro(oSolicitud.OrganizacionID, ParametrosEnum.CuentaInventarioTransito.ToString()); if (oParametroOrg != null) { listaPolizas[listaPolizas.ToList().FindIndex(datos => datos.NumeroLinea.Trim() == "1")].Cuenta = oParametroOrg.Valor; } envioAlimento.Poliza = poliza.ImprimePoliza(oSolicitud, listaPolizas); polizaDAL.CrearServicioPI(listaPolizas, TipoPoliza.SalidaTraspaso); transaccion.Complete(); } } return(envioAlimento); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
internal static List <SolicitudProductoInfo> ObtenerConciliacionPorAlmacenMovimientoXML(IDataReader reader) { try { Logger.Info(); var distribuciones = new List <SolicitudProductoInfo>(); SolicitudProductoInfo distribucion; while (reader.Read()) { distribucion = new SolicitudProductoInfo { SolicitudProductoID = Convert.ToInt32(reader["SolicitudProductoID"]), Organizacion = new OrganizacionInfo { OrganizacionID = Convert.ToInt32(reader["OrganizacionID"]) }, OrganizacionID = Convert.ToInt32(reader["OrganizacionID"]), FolioSolicitud = Convert.ToInt64(reader["FolioSolicitud"]), FechaSolicitud = Convert.ToDateTime(reader["FechaSolicitud"]), Estatus = new EstatusInfo { EstatusId = Convert.ToInt32(reader["EstatusID"]) }, EstatusID = Convert.ToInt32(reader["EstatusID"]), FechaAutorizado = Convert.ToDateTime(reader["FechaAutorizado"]), FechaEntrega = Convert.ToDateTime(reader["FechaEntrega"]), CentroCosto = new CentroCostoInfo { CentroCostoID = Convert.ToInt32(reader["CentroCostoID"]) }, CentroCostoID = Convert.ToInt32(reader["CentroCostoID"]), Almacen = new AlmacenInfo { AlmacenID = Convert.ToInt32(reader["AlmacenID"]), Descripcion = Convert.ToString(reader["Almacen"]), TipoAlmacen = new TipoAlmacenInfo { TipoAlmacenID = Convert.ToInt32(reader["TipoAlmacenID"]) }, TipoAlmacenID = Convert.ToInt32(reader["TipoAlmacenID"]) }, AlmacenID = Convert.ToInt32(reader["AlmacenID"]), AlmacenMovimientoID = Convert.ToInt64(reader["AlmacenMovimientoID"]) }; distribuciones.Add(distribucion); } reader.NextResult(); var distribucionIngredientesOrganizaciones = new List <SolicitudProductoDetalleInfo>(); SolicitudProductoDetalleInfo distribucionIngredienteOrganizacion; while (reader.Read()) { distribucionIngredienteOrganizacion = new SolicitudProductoDetalleInfo { SolicitudProductoDetalleID = Convert.ToInt32(reader["SolicitudProductoDetalleID"]), SolicitudProductoID = Convert.ToInt32(reader["SolicitudProductoID"]), Producto = new ProductoInfo { ProductoId = Convert.ToInt32(reader["ProductoID"]), Descripcion = Convert.ToString(reader["Producto"]), UnidadId = Convert.ToInt32(reader["UnidadID"]), UnidadMedicion = new UnidadMedicionInfo { UnidadID = Convert.ToInt32(reader["UnidadID"]), }, SubFamilia = new SubFamiliaInfo { SubFamiliaID = Convert.ToInt32(reader["SubFamiliaID"]) }, SubfamiliaId = Convert.ToInt32(reader["SubFamiliaID"]) }, ProductoID = Convert.ToInt32(reader["ProductoID"]), Cantidad = Convert.ToDecimal(reader["Cantidad"]), CamionReparto = new CamionRepartoInfo { CamionRepartoID = Convert.ToInt32(reader["CamionRepartoID"]) }, CamionRepartoID = Convert.ToInt32(reader["CamionRepartoID"]), Estatus = new EstatusInfo { EstatusId = Convert.ToInt32(reader["EstatusID"]) }, EstatusID = Convert.ToInt32(reader["EstatusID"]), PrecioPromedio = Convert.ToDecimal(reader["Precio"]) }; distribucionIngredientesOrganizaciones.Add(distribucionIngredienteOrganizacion); } distribuciones.ForEach(datos => { datos.Detalle = distribucionIngredientesOrganizaciones.Where( id => id.SolicitudProductoID == datos.SolicitudProductoID).ToList(); }); return(distribuciones); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Método para cancelar /// </summary> private void Guardar() { bool guardar = ValidaGuardar(); if (guardar) { try { SolicitudProductoInfo solicitudGuardar = Contexto; solicitudGuardar.UsuarioIDEntrega = usuario.UsuarioID; solicitudGuardar.FechaEntrega = DateTime.Now; solicitudGuardar.UsuarioModificacionID = usuario.UsuarioID; //solicitudGuardar.AlmacenID = almacen.AlmacenID; solicitudGuardar.TipoMovimientoInventario = TipoMovimiento.EntradaAlmacen; int activos = solicitudGuardar.Detalle.Count(e => e.Activo == EstatusEnum.Activo); int recibidos = solicitudGuardar.Detalle.Count( e => e.EstatusID == Estatus.SolicitudProductoRecibido.GetHashCode()); if (activos == recibidos) { solicitudGuardar.EstatusID = Estatus.SolicitudProductoRecibido.GetHashCode(); } solicitudGuardar.Detalle = solicitudGuardar.Detalle.Where(e => e.Recibido && e.Editar).ToList(); MemoryStream pdf = solicitudProductoBL.GuardarMovimientoInventario(solicitudGuardar); if (pdf != null) { var exportarPoliza = new ExportarPoliza(); if (solicitudGuardar.AlmacenID.HasValue) { exportarPoliza.ImprimirPoliza(pdf, string.Format("{0} {1}", "Poliza", TipoPoliza.SalidaTraspaso)); } else { exportarPoliza.ImprimirPoliza(pdf, string.Format("{0} {1}", "Poliza", TipoPoliza.SalidaConsumo)); } } string mensaje = Properties.Resources.RecibirProductoAlmacen_GuardadoConExito; SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], mensaje, MessageBoxButton.OK, MessageImage.Correct); Limpiar(); } catch (ExcepcionServicio ex) { SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], ex.Message, MessageBoxButton.OK, MessageImage.Stop); } catch (ExcepcionGenerica) { SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], Properties.Resources.RecibirProductoAlmacen_ErrorGuardar, MessageBoxButton.OK, MessageImage.Error); } catch (Exception ex) { Logger.Error(ex); SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], Properties.Resources.RecibirProductoAlmacen_ErrorGuardar, MessageBoxButton.OK, MessageImage.Error); } } }
private IList <PolizaInfo> ObtenerPoliza(SolicitudProductoInfo solicitud) { var polizasSalidaConsumo = new List <PolizaInfo>(); IList <ClaseCostoProductoInfo> cuentasAlmacenProductoSalida = ObtenerCostosProducto(solicitud.AlmacenGeneralID); if (cuentasAlmacenProductoSalida == null) { throw new ExcepcionServicio("No se encuentran cuentas configuradas, para productos del almacén general"); } IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP(); TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.SalidaConsumo.GetHashCode()); string textoDocumento = tipoPoliza.TextoDocumento; string tipoMovimiento = tipoPoliza.ClavePoliza; string postFijoRef3 = tipoPoliza.PostFijoRef3; var linea = 1; //TO DO REVISAR SI CAMBIARA EL REF 3 var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append( string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).PadLeft( 10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(DateTime.Now.Millisecond); ref3.Append(postFijoRef3); string numeroReferencia = ObtenerNumeroReferencia; DateTime fecha = solicitud.FechaEntrega.HasValue ? solicitud.FechaEntrega.Value : DateTime.MinValue; string archivoFolio = ObtenerArchivoFolio(fecha); var organizacionBL = new OrganizacionBL(); OrganizacionInfo organizacion = organizacionBL.ObtenerPorAlmacenID(solicitud.AlmacenGeneralID); if (organizacion == null) { organizacion = new OrganizacionInfo { TipoOrganizacion = new TipoOrganizacionInfo() }; } string claveParametro; var centrosCosto = ObtenerCentrosCosto(); var camionesReparto = ObtenerCamionesRepartoPorOrganizacion(organizacion.OrganizacionID); //camionRepartoBL.ObtenerPorOrganizacionID(organizacion.OrganizacionID); var primerDetalle = solicitud.Detalle.FirstOrDefault(); bool esCamionReparto; if (primerDetalle != null && primerDetalle.CamionRepartoID.HasValue && primerDetalle.CamionRepartoID.Value > 0) { claveParametro = ParametrosEnum.CuentaCostosDiesel.ToString(); esCamionReparto = true; } else { claveParametro = ParametrosEnum.CuentaCostosProductosAlmacen.ToString(); esCamionReparto = false; } ParametroOrganizacionInfo parametroCuenta = ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID, claveParametro); if (parametroCuenta == null) { throw new ExcepcionServicio(string.Format("No se encuentró valor de la cuenta, para el parámetro {0}, en la organización", claveParametro)); } foreach (var solicitudDetalle in solicitud.Detalle) { int centroCostoID; if (esCamionReparto) { CamionRepartoInfo camionReparto = camionesReparto.FirstOrDefault( camion => camion.CamionRepartoID == solicitudDetalle.CamionRepartoID); if (camionReparto == null) { camionReparto = new CamionRepartoInfo(); } centroCostoID = camionReparto.CentroCosto.CentroCostoID; } else { centroCostoID = solicitud.CentroCostoID; } CentroCostoInfo centroCostoCargo = centrosCosto.FirstOrDefault(centro => centro.CentroCostoID == centroCostoID); if (centroCostoCargo == null) { throw new ExcepcionServicio("No se encuentró el centro de costo"); } var datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = solicitud.FechaEntrega.HasValue ? solicitud.FechaEntrega.Value : DateTime.MinValue, Folio = solicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture), CabezasRecibidas = string.Empty, NumeroDocumento = string.Empty, ClaseDocumento = postFijoRef3, ClaveProveedor = string.Empty, Importe = string.Format("{0}", Math.Round(solicitudDetalle.Cantidad * solicitudDetalle.PrecioPromedio, 2).ToString("F2")), IndicadorImpuesto = String.Empty, CentroCosto = string.Format("{0}{1}{2}", "SA0", organizacion.OrganizacionID, centroCostoCargo.CentroCostoSAP), Renglon = Convert.ToString(linea++), Cabezas = string.Empty, ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = parametroCuenta.Valor, CodigoRetencion = string.Empty, Division = organizacion.Division, TipoRetencion = string.Empty, ArchivoFolio = archivoFolio, DescripcionCosto = string.Empty, PesoOrigen = 0, TipoDocumento = textoDocumento, ComplementoRef1 = string.Empty, Concepto = String.Format("{0}-{1} {2} {3} {4}", tipoMovimiento, solicitud.FolioSolicitud, solicitudDetalle.Cantidad.ToString("N2"), solicitudDetalle.Producto.Descripcion, (Math.Round(solicitudDetalle.Cantidad * solicitudDetalle.PrecioPromedio, 2).ToString("C2"))), Sociedad = organizacion.Sociedad, DescripcionProducto = solicitudDetalle.Producto.Descripcion, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; PolizaInfo polizaSalida = GeneraRegistroPoliza(datos); polizasSalidaConsumo.Add(polizaSalida); var cuentaSapSale = cuentasAlmacenProductoSalida.FirstOrDefault( cuenta => cuenta.ProductoID == solicitudDetalle.Producto.ProductoId); if (cuentaSapSale == null) { cuentaSapSale = new ClaseCostoProductoInfo(); } var claveContableAbono = cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapSale.CuentaSAPID); if (claveContableAbono == null) { throw new ExcepcionServicio(string.Format("No se encontró configurada la cuenta del producto {0}", solicitudDetalle.Producto.Descripcion)); } datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = solicitud.FechaEntrega.HasValue ? solicitud.FechaEntrega.Value : DateTime.MinValue, Folio = solicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture), CabezasRecibidas = string.Empty, NumeroDocumento = string.Empty, ClaseDocumento = postFijoRef3, ClaveProveedor = string.Empty, Importe = string.Format("{0}", (Math.Round(solicitudDetalle.Cantidad * solicitudDetalle.PrecioPromedio, 2) * -1).ToString("F2")), IndicadorImpuesto = String.Empty, CentroCosto = string.Empty, Renglon = Convert.ToString(linea++), Cabezas = string.Empty, ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = claveContableAbono.CuentaSAP, CodigoRetencion = string.Empty, TipoRetencion = string.Empty, ArchivoFolio = archivoFolio, DescripcionCosto = string.Empty, Division = organizacion.Division, PesoOrigen = 0, TipoDocumento = textoDocumento, ComplementoRef1 = string.Empty, Concepto = String.Format("{0}-{1} {2} {3} {4}", tipoMovimiento, solicitud.FolioSolicitud, solicitudDetalle.Producto.Descripcion, solicitudDetalle.Cantidad.ToString("N2"), (Math.Round(solicitudDetalle.Cantidad * solicitudDetalle.PrecioPromedio, 2).ToString("C2"))), Sociedad = organizacion.Sociedad, DescripcionProducto = solicitudDetalle.Producto.Descripcion, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaSalida = GeneraRegistroPoliza(datos); polizasSalidaConsumo.Add(polizaSalida); } return(polizasSalidaConsumo); }
/// <summary> /// Asigna el valor al campo folio /// </summary> private void AyudaConDatosFolio() { try { if (Contexto.Solicitud.FolioID > 0) { if (Contexto.UsuarioIDEntrega == 0) { Contexto.UsuarioIDEntrega = usuario.UsuarioID; Contexto.UsuarioEntrega = usuario; } Contexto = ObtenerSolicitudPorId(Contexto.Solicitud.FolioID); //Obtener los productos ligados a familia de HerramientaYEquipo y valdiar si ya se entrego en INFOR IList <SolicitudProductoDetalleInfo> idsProductosHerramienta = Contexto.Detalle .Where(d => d.Producto.FamiliaId == (int)FamiliasEnum.HerramientaYEquipo).ToList(); if (idsProductosHerramienta.Any()) { //Validar si el folio ya se encuentra en INFOR Entregado if (!solicitudProductoBL.ExisteFolioEnINFOR(Contexto.Solicitud.FolioSolicitud, Contexto.Solicitud.OrganizacionID)) { Limpiar(); SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], Properties.Resources.EntregarProductoAlmacen_MsgNoExisteReferenciaInfor, MessageBoxButton.OK, MessageImage.Warning); return; } } int porEntregar = Contexto.Detalle.Count(e => e.EstatusID == Estatus.SolicitudProductoAutorizado.GetHashCode()); if (porEntregar > 0) { Contexto.Detalle = Contexto.Detalle.Where(e => e.Activo == EstatusEnum.Activo).ToList(); var disponibilidad = ValidaDisponibilidad(Contexto); Contexto.Detalle.ForEach(e => { e.Entregado = e.EstatusID == Estatus.SolicitudProductoEntregado.GetHashCode() || e.EstatusID == Estatus.SolicitudProductoRecibido.GetHashCode(); var registro = disponibilidad.FirstOrDefault(d => d.ProductoID == e.ProductoID); if (registro != null && !registro.IsDisponible) { e.Editar = registro.IsDisponible; } else { e.Editar = e.EstatusID == Estatus.SolicitudProductoPendiente.GetHashCode() || e.EstatusID == Estatus.SolicitudProductoAutorizado.GetHashCode(); } }); DtpFecha.SelectedDate = Contexto.FechaSolicitud; Contexto.DetalleGrid = Contexto.Detalle.ConvertirAObservable(); Contexto.UsuarioEntrega = usuario; var habilitarBotonGuardar = Contexto.Detalle.FirstOrDefault(e => e.Editar); if (habilitarBotonGuardar == null) { Contexto.Guardar = false; } gridDatos.ItemsSource = Contexto.Detalle.Where(e => e.Activo == EstatusEnum.Activo); skAyudaFolio.IsEnabled = false; } else { Limpiar(); SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], Properties.Resources.EntregarProductoAlmacen_MsgNoTieneEstatusAutorizada, MessageBoxButton.OK, MessageImage.Warning); } } } catch (Exception ex) { Logger.Error(ex); SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], Properties.Resources.EntregarProductoAlmacen_MsgErrorConsultarFolio, MessageBoxButton.OK, MessageImage.Error); } }
private IList <PolizaInfo> ObtenerPoliza(SolicitudProductoInfo solicitud) { var polizasSalidaTraspaso = new List <PolizaInfo>(); IList <ClaseCostoProductoInfo> cuentasAlmacenProductoSalida = ObtenerCostosProducto(solicitud.AlmacenGeneralID); IList <ClaseCostoProductoInfo> cuentasAlmacenProductoEntrada = ObtenerCostosProducto(solicitud.AlmacenID.HasValue ? solicitud.AlmacenID.Value : 0); if (cuentasAlmacenProductoSalida == null) { throw new ExcepcionServicio("No se encuentran cuentas configuradas, para productos del almacén general"); } if (cuentasAlmacenProductoEntrada == null) { throw new ExcepcionServicio("No se encuentran cuentas configuradas, para productos del almacén de destino"); } TipoPolizaInfo tipoPoliza = TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.SalidaTraspaso.GetHashCode()); if (tipoPoliza == null) { throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA", TipoPoliza.SalidaTraspaso)); } IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP(); string textoDocumento = tipoPoliza.TextoDocumento; string tipoMovimiento = tipoPoliza.ClavePoliza; string postFijoRef3 = tipoPoliza.PostFijoRef3; var linea = 1; //TO DO REVISAR SI CAMBIARA EL REF 3 var ref3 = new StringBuilder(); ref3.Append("03"); ref3.Append( string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).PadLeft( 10, ' ')); ref3.Append(new Random(10).Next(10, 20)); ref3.Append(new Random(30).Next(30, 40)); ref3.Append(DateTime.Now.Millisecond); ref3.Append(postFijoRef3); string numeroReferencia = ObtenerNumeroReferencia; DateTime fecha = solicitud.FechaEntrega.HasValue ? solicitud.FechaEntrega.Value : DateTime.MinValue; string archivoFolio = ObtenerArchivoFolio(fecha); var organizacionBL = new OrganizacionBL(); OrganizacionInfo organizacion = organizacionBL.ObtenerPorAlmacenID(solicitud.AlmacenGeneralID); if (organizacion == null) { organizacion = new OrganizacionInfo { TipoOrganizacion = new TipoOrganizacionInfo() }; } IList <CuentaAlmacenSubFamiliaInfo> cuentasSubFamilia = ObtenerCostosSubFamilia(solicitud.AlmacenID.HasValue ? solicitud.AlmacenID.Value : 0); ParametroOrganizacionInfo parametroCentroCosto = ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID, ParametrosEnum.CTACENTROCOSTOMP.ToString()); if (parametroCentroCosto == null) { throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE COSTO NO CONFIGURADO")); } bool afectaCosto; foreach (var solicitudDetalle in solicitud.Detalle) { CuentaSAPInfo claveContableCargo; afectaCosto = ValidarAfectacionCuentaCosto(solicitudDetalle.Producto); if (!afectaCosto && (solicitud.Almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.Enfermeria.GetHashCode() || solicitud.Almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ManejoGanado.GetHashCode() || solicitud.Almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ReimplanteGanado.GetHashCode())) { var cuentaSapSubFamiliaEntrada = cuentasSubFamilia.FirstOrDefault( cuenta => cuenta.SubFamiliaID == solicitudDetalle.Producto.SubFamilia.SubFamiliaID); if (cuentaSapSubFamiliaEntrada == null) { cuentaSapSubFamiliaEntrada = new CuentaAlmacenSubFamiliaInfo(); } claveContableCargo = cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapSubFamiliaEntrada.CuentaSAPID); } else { var cuentaSapEntrada = cuentasAlmacenProductoEntrada.FirstOrDefault( cuenta => cuenta.ProductoID == solicitudDetalle.ProductoID); if (cuentaSapEntrada == null) { cuentaSapEntrada = new ClaseCostoProductoInfo(); } claveContableCargo = cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapEntrada.CuentaSAPID); } if (solicitud.Almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.CentroAcopio.GetHashCode()) { ParametroOrganizacionInfo cuentaMedicamento = ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID, ParametrosEnum.CuentaMedicamentoTransito.ToString()); if (cuentaMedicamento == null) { cuentaMedicamento = new ParametroOrganizacionInfo { Valor = string.Empty }; } claveContableCargo = cuentasSap.FirstOrDefault( sap => sap.CuentaSAP.Equals(cuentaMedicamento.Valor, StringComparison.InvariantCultureIgnoreCase)); } if (claveContableCargo == null) { throw new ExcepcionServicio(string.Format("No se encontró configurada la cuenta del producto {0}", solicitudDetalle.Producto.Descripcion)); } if ((solicitudDetalle.Cantidad * solicitudDetalle.PrecioPromedio) <= 0) { continue; } var datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = solicitud.FechaEntrega.HasValue ? solicitud.FechaEntrega.Value : DateTime.MinValue, Folio = solicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture), ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", Math.Round( solicitudDetalle.Cantidad * solicitudDetalle.PrecioPromedio, 2). ToString("F2")), Renglon = Convert.ToString(linea++), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = claveContableCargo.CuentaSAP, CentroCosto = claveContableCargo.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto) ? parametroCentroCosto.Valor : string.Empty, Division = organizacion.Division, ArchivoFolio = archivoFolio, PesoOrigen = 0, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} {2} {3} {4}", tipoMovimiento, solicitud.FolioSolicitud.ToString( CultureInfo.InvariantCulture), solicitudDetalle.Producto.Descripcion, string.Format("{0} {1}.", solicitudDetalle.Cantidad.ToString("N2"), solicitudDetalle.Producto.UnidadMedicion. ClaveUnidad), solicitudDetalle.PrecioPromedio.ToString("C2")), Sociedad = organizacion.Sociedad, DescripcionProducto = claveContableCargo.Descripcion, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; PolizaInfo polizaSalida = GeneraRegistroPoliza(datos); polizasSalidaTraspaso.Add(polizaSalida); var cuentaSapSale = cuentasAlmacenProductoSalida.FirstOrDefault( cuenta => cuenta.ProductoID == solicitudDetalle.Producto.ProductoId); if (cuentaSapSale == null) { cuentaSapSale = new ClaseCostoProductoInfo(); } var claveContableAbono = cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapSale.CuentaSAPID); if (claveContableAbono == null) { throw new ExcepcionServicio(string.Format("No se encontró configurada la cuenta del producto {0}", solicitudDetalle.Producto.Descripcion)); } datos = new DatosPolizaInfo { NumeroReferencia = numeroReferencia, FechaEntrada = solicitud.FechaEntrega.HasValue ? solicitud.FechaEntrega.Value : DateTime.MinValue, Folio = solicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture), ClaseDocumento = postFijoRef3, Importe = string.Format("{0}", (Math.Round(solicitudDetalle.Cantidad * solicitudDetalle.PrecioPromedio, 2) * -1).ToString("F2")), Renglon = Convert.ToString(linea++), ImporteIva = "0", Ref3 = ref3.ToString(), Cuenta = claveContableAbono.CuentaSAP, ArchivoFolio = archivoFolio, CentroCosto = claveContableAbono.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto) ? parametroCentroCosto.Valor : string.Empty, Division = organizacion.Division, PesoOrigen = 0, TipoDocumento = textoDocumento, Concepto = String.Format("{0}-{1} {2} {3} {4}", tipoMovimiento, solicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture), solicitudDetalle.Producto.Descripcion, string.Format("{0} {1}.", solicitudDetalle.Cantidad.ToString("N2"), solicitudDetalle.Producto.UnidadMedicion. ClaveUnidad), solicitudDetalle.PrecioPromedio.ToString("C2")), Sociedad = organizacion.Sociedad, DescripcionProducto = claveContableAbono.Descripcion, Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad), }; polizaSalida = GeneraRegistroPoliza(datos); polizasSalidaTraspaso.Add(polizaSalida); } return(polizasSalidaTraspaso); }
/// <summary> /// Obtiene parametros para obtener lista paginada /// </summary> /// <param name="pagina"></param> /// <param name="filtro"></param> /// <returns></returns> public static Dictionary <string, object> ObtenerParametrosPorPagina(PaginacionInfo pagina, SolicitudProductoInfo filtro) { try { Logger.Info(); var parametros = new Dictionary <string, object> { { "@SolicitudProductoID", filtro.SolicitudProductoID }, { "@Activo", filtro.Activo }, { "@Inicio", pagina.Inicio }, { "@Limite", pagina.Limite } }; return(parametros); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }