fix card_multiselect filtering and quantity controls
This commit is contained in:
parent
6e4c6040bd
commit
b97ddde71c
52 changed files with 1689 additions and 2268 deletions
|
|
@ -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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue