all cards of a trade offer are now ordered alphabetically. fixes #12

This commit is contained in:
badblocks 2025-04-08 23:00:49 -07:00
parent b5db5af185
commit 1c95ccfff7
2 changed files with 14 additions and 19 deletions

View file

@ -61,26 +61,9 @@ class TradeAcceptanceCreateForm(forms.ModelForm):
TradeAcceptance.AcceptanceState.SENT,
TradeAcceptance.AcceptanceState.RECEIVED,
]
available_requested_ids = []
for through_obj in trade_offer.have_cards_available:
active_count = trade_offer.acceptances.filter(
requested_card=through_obj.card,
state__in=active_states
).count()
if active_count < through_obj.quantity:
available_requested_ids.append(through_obj.card.id)
self.fields["requested_card"].queryset = Card.objects.filter(id__in=available_requested_ids)
self.fields["requested_card"].queryset = trade_offer.have_cards_available_qs
# Update available offered_card choices from the TradeOffer's "want" side.
available_offered_ids = []
for through_obj in trade_offer.want_cards_available:
active_count = trade_offer.acceptances.filter(
offered_card=through_obj.card,
state__in=active_states
).count()
if active_count < through_obj.quantity:
available_offered_ids.append(through_obj.card.id)
self.fields["offered_card"].queryset = Card.objects.filter(id__in=available_offered_ids)
self.fields["offered_card"].queryset = trade_offer.want_cards_available_qs
def clean(self):
"""

View file

@ -111,6 +111,16 @@ class TradeOffer(models.Model):
# Returns the list of want_cards (through objects) that still have available quantity.
return [item for item in self.trade_offer_want_cards.all() if item.quantity > item.qty_accepted]
@property
def have_cards_available_qs(self):
# Returns a queryset of TradeOfferHaveCard objects that still have available quantity
return self.trade_offer_have_cards.filter(quantity__gt=F("qty_accepted")).select_related("card")
@property
def want_cards_available_qs(self):
# Returns a queryset of TradeOfferWantCard objects that still have available quantity
return self.trade_offer_want_cards.filter(quantity__gt=F("qty_accepted")).select_related("card")
class TradeOfferHaveCard(models.Model):
"""
Through model for TradeOffer.have_cards.
@ -140,6 +150,7 @@ class TradeOfferHaveCard(models.Model):
class Meta:
unique_together = ("trade_offer", "card")
ordering = ['card__name']
class TradeOfferWantCard(models.Model):
"""
@ -169,6 +180,7 @@ class TradeOfferWantCard(models.Model):
class Meta:
unique_together = ("trade_offer", "card")
ordering = ['card__name']
class TradeAcceptance(models.Model):
class AcceptanceState(models.TextChoices):