Error al cargar un ticket que tiene promociones asociadas
Este error se manifiesta al intentar cargar un ticket que tiene promociones asociadas, pero las promociones han sido eliminadas. Ocurre en clientes de ACMS cuando se eliminan promociones desde la central, pero todavía hay tickets abiertos que las referencian.
Da lugar a un error en distintos puntos de la aplicación cuando se intenta cargar un ticket: al acceder al ticket, al acceder a la mesa, al ir a cerrar jornada y cargar los tickets pendientes...
En el log de AgoraServer.exe aparece un error con este aspecto:
25/01/2023 13:21:33,172 : WARN : Error de servidor al procesar GetTicketByIdRequest (Sender = MachineType: POS, UserId: 1, UserName: Soporte, PosId: 18, PosName: TPV1 Pedro Laborde, ApplicationName: Agora, ApplicationVersion: 3.7.1, MachineId: 73A2-5D8E-22A3-87EE-937D-AC16-D8C9-5133, MachineName: MMOPL7, LanguageCode: es): No row with the given identifier exists[IGT.POS.Domain.Offers.PackStrategy#58] (from IGT.POS.Server.Exceptions.ExceptionTranslator)
NHibernate.ObjectNotFoundException: No row with the given identifier exists[IGT.POS.Domain.Offers.PackStrategy#58]
en NHibernate.Impl.SessionFactoryImpl.DefaultEntityNotFoundDelegate.HandleEntityNotFound(String entityName, Object id)
en NHibernate.Proxy.AbstractLazyInitializer.CheckTargetState()
en NHibernate.Proxy.DefaultLazyInitializer.Intercept(InvocationInfo info)
en PackStrategyProxy.get_Type()
en IGT.POS.Server.Mappers.Impl.OfferToOfferInListDTOMapper.Map(Offer source)
en Castle.Proxies.Invocations.IMapper`2_Map_11.InvokeMethodOnTarget()
en Castle.DynamicProxy.AbstractInvocation.Proceed()
en IGT.POS.Infrastructure.Logging.LoggingInterceptor.Intercept(IInvocation invocation)
en Castle.DynamicProxy.AbstractInvocation.Proceed()
en Castle.Proxies.IMapper`2Proxy_11.Map(Offer source)
en System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
La clave para detectar el problema es el NHibernate.ObjectNotFoundException: No row with the given identifier exists[IGT.POS.Domain.Offers.PackStrategy#58]. El error puede variar en función del tipo de promoción entre PackStrategy, FixedPriceStrategy o DiscountStrategy, dependiendo del tipo de promoción.
Solución
No se deberían borrar promociones en el ACMS si hay tickets abiertos con ellas. En caso de no estar seguro, es mejor cambiar la fecha de fin de promoción para desactivarla. Una vez que se produce el problema, es necesario acceder a la base de datos del local y eliminar la promoción asociada al ticket con la siguiente consulta:
delete from TicketOffer
where OfferId in (select Id from Offer where StrategyType = 'XXX' and StrategyId = 'YYY') and TicketId in (select Id from Ticket where FrozenDate is null)
Donde:
XXX es el tipo de promoción que aparece en el mensaje de error (Pack, Discount o FixedPrice). En el ejemplo, sería Pack.
YYY es el ID que aparece en el mensaje de error tras la almohadilla. En el ejemplo, sería 58.
¿Le ha sido útil este artículo?
¡Qué bien!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Sus comentarios se han enviado
Agradecemos su esfuerzo e intentaremos corregir el artículo