fix card_multiselect filtering and quantity controls

This commit is contained in:
badblocks 2025-03-13 15:48:26 -07:00
parent 6e4c6040bd
commit b97ddde71c
52 changed files with 1689 additions and 2268 deletions

View file

@ -22,23 +22,55 @@ def validate_want_cards_rarity(sender, instance, action, **kwargs):
if action == "post_add":
check_trade_offer_rarity(instance)
@receiver(post_save, sender=TradeOfferHaveCard)
@receiver(post_delete, sender=TradeOfferHaveCard)
def update_aggregates_from_have_card(sender, instance, **kwargs):
trade_offer = instance.trade_offer
if trade_offer and hasattr(trade_offer, 'update_aggregates'):
trade_offer.update_aggregates()
ACTIVE_STATES = [
TradeAcceptance.AcceptanceState.ACCEPTED,
TradeAcceptance.AcceptanceState.SENT,
TradeAcceptance.AcceptanceState.RECEIVED,
TradeAcceptance.AcceptanceState.THANKED_BY_INITIATOR,
TradeAcceptance.AcceptanceState.THANKED_BY_ACCEPTOR,
TradeAcceptance.AcceptanceState.THANKED_BY_BOTH,
]
@receiver(post_save, sender=TradeOfferWantCard)
@receiver(post_delete, sender=TradeOfferWantCard)
def update_aggregates_from_want_card(sender, instance, **kwargs):
def update_qty_for_trade_offer(trade_offer, card, side):
if side == 'have':
count = TradeAcceptance.objects.filter(
trade_offer=trade_offer,
requested_card=card,
state__in=ACTIVE_STATES
).count()
TradeOfferHaveCard.objects.filter(
trade_offer=trade_offer,
card=card
).update(qty_accepted=count)
if count >= TradeOfferHaveCard.objects.filter(trade_offer=trade_offer, card=card).first().quantity:
trade_offer.is_closed = True
trade_offer.save(update_fields=["is_closed"])
elif side == 'want':
count = TradeAcceptance.objects.filter(
trade_offer=trade_offer,
offered_card=card,
state__in=ACTIVE_STATES
).count()
TradeOfferWantCard.objects.filter(
trade_offer=trade_offer,
card=card
).update(qty_accepted=count)
if count >= TradeOfferWantCard.objects.filter(trade_offer=trade_offer, card=card).first().quantity:
trade_offer.is_closed = True
trade_offer.save(update_fields=["is_closed"])
def update_all_qty(instance):
trade_offer = instance.trade_offer
if trade_offer and hasattr(trade_offer, 'update_aggregates'):
trade_offer.update_aggregates()
update_qty_for_trade_offer(trade_offer, instance.requested_card, 'have')
update_qty_for_trade_offer(trade_offer, instance.offered_card, 'want')
@receiver(post_save, sender=TradeAcceptance)
def trade_acceptance_post_save(sender, instance, **kwargs):
update_all_qty(instance)
@receiver(post_delete, sender=TradeAcceptance)
def update_aggregates_from_acceptance(sender, instance, **kwargs):
trade_offer = instance.trade_offer
if trade_offer and hasattr(trade_offer, 'update_aggregates'):
trade_offer.update_aggregates()
def trade_acceptance_post_delete(sender, instance, **kwargs):
update_all_qty(instance)