Skip to content

Commit 5999755

Browse files
authored
Merge pull request #9 from btaquee/card-bene
fix about card app
2 parents e439317 + 9b8ea3b commit 5999755

File tree

8 files changed

+121
-39
lines changed

8 files changed

+121
-39
lines changed

cards/admin.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,18 @@ class UserCardAdmin(admin.ModelAdmin):
4141

4242
@admin.register(CardBenefit)
4343
class CardBenefitAdmin(admin.ModelAdmin):
44-
list_display = ("card", "name", "amount", "get_categories", "description", "frequency")
45-
fields = ("card", "name", "amount", "category", "description", "frequency")
46-
ordering = ["card", "name"]
44+
list_display = ("card", "get_benefits_preview")
45+
fields = ("card", "benefits")
46+
ordering = ["card"]
4747

48-
def get_categories(self, obj):
49-
"""Display categories in a more readable format"""
50-
if obj.category:
51-
# Convert the stored format to readable format
52-
categories = obj.category if isinstance(obj.category, list) else [obj.category]
53-
return ", ".join(categories)
54-
return "-"
55-
56-
get_categories.short_description = "Categories"
48+
# AI generated function
49+
def get_benefits_preview(self, obj):
50+
"""Display a preview of the benefits"""
51+
if obj.benefits:
52+
# Show first 50 characters of benefits
53+
preview = obj.benefits[:50]
54+
if len(obj.benefits) > 50:
55+
preview += "..."
56+
return preview
57+
return "No benefits"
58+
get_benefits_preview.short_description = "Benefits Preview"
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Generated by Django 5.2.7 on 2025-10-23 04:56
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('cards', '0013_remove_rewardrule_unique_card_category_and_more'),
10+
]
11+
12+
operations = [
13+
migrations.RemoveField(
14+
model_name='cardbenefit',
15+
name='amount',
16+
),
17+
migrations.RemoveField(
18+
model_name='cardbenefit',
19+
name='category',
20+
),
21+
migrations.RemoveField(
22+
model_name='cardbenefit',
23+
name='description',
24+
),
25+
migrations.RemoveField(
26+
model_name='cardbenefit',
27+
name='frequency',
28+
),
29+
migrations.AddField(
30+
model_name='cardbenefit',
31+
name='benefits',
32+
field=models.JSONField(blank=True, default=list, help_text='List of card benefits'),
33+
),
34+
]
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Generated by Django 5.2.7 on 2025-10-23 05:00
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('cards', '0014_remove_cardbenefit_amount_and_more'),
10+
]
11+
12+
operations = [
13+
migrations.RemoveField(
14+
model_name='cardbenefit',
15+
name='name',
16+
),
17+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.2.7 on 2025-10-23 05:03
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('cards', '0015_remove_cardbenefit_name'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='cardbenefit',
15+
name='benefits',
16+
field=models.TextField(blank=True, null=True),
17+
),
18+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.2.7 on 2025-10-23 05:18
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('cards', '0016_alter_cardbenefit_benefits'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='cardbenefit',
15+
name='benefits',
16+
field=models.TextField(blank=True, null=True, verbose_name='Benefits'),
17+
),
18+
]

cards/models.py

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -28,35 +28,13 @@ class Card(models.Model):
2828
def __str__(self):
2929
return f"{self.issuer} {self.name}"
3030

31-
# A card can have many coupons
31+
# A card can have many benefits(coupons, etc.)
3232
class CardBenefit(models.Model):
33-
34-
BENEFIT_CATEGORY = [
35-
("GENERAL", "General"),
36-
("DINING", "Dining"),
37-
("GROCERIES", "Groceries"),
38-
("TRAVEL", "Travel"),
39-
("ENTERTAINMENT", "Entertainment"),
40-
("SUBSCRIPTIONS", "Subscriptions"),
41-
("OTHER", "Other"),
42-
]
43-
44-
FREQUENCY_CHOICES = [
45-
("ONCE", "One-time"),
46-
("MONTHLY", "Monthly"),
47-
("ANNUAL", "Annual"),
48-
("EVERY_4_5_YEARS", "Every 4/5 Years"),
49-
]
50-
5133
card = models.ForeignKey(Card, on_delete=models.CASCADE, related_name="benefits")
52-
name = models.CharField(max_length=100)
53-
amount = models.DecimalField(max_digits=5, decimal_places=0, null=True, blank=True)
54-
category = models.CharField(max_length=255, choices=BENEFIT_CATEGORY, default=None)
55-
description = models.TextField(blank=True, null=True, default=None)
56-
frequency = models.CharField(max_length=20, choices=FREQUENCY_CHOICES, default=None)
57-
34+
benefits = models.TextField("Benefits", blank=True, null=True)
35+
5836
def __str__(self):
59-
return f"{self.name} ({self.card.name})"
37+
return f"Benefits for {self.card.name}"
6038

6139

6240

cards/serializers.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,24 @@ class Meta:
77
fields = ("id", "multiplier", "category", "cap_amount", "notes")
88

99
class CardBenefitSerializer(serializers.ModelSerializer):
10+
card = serializers.StringRelatedField(read_only=True)
11+
benefits = serializers.SerializerMethodField()
12+
1013
class Meta:
1114
model = CardBenefit
12-
fields = ("id", "card", "name", "amount", "category", "description", "frequency")
15+
fields = ("id", "card", "benefits")
16+
17+
# AI generated function
18+
def get_benefits(self, obj):
19+
"""
20+
Convert the `benefits` text field to a JSON list,
21+
splitting by comma. Strips whitespace, skips empty values.
22+
"""
23+
if not obj.benefits:
24+
return []
25+
# Split by comma, strip whitespace, exclude empty
26+
items = [item.strip() for item in obj.benefits.split(",") if item.strip()]
27+
return items
1328

1429
class CardSerializer(serializers.ModelSerializer):
1530
reward_rules = RewardRuleSerializer(many=True, read_only=True)

db.sqlite3

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)