Make it possible to drop purchases, or consider them infinite
This commit is contained in:
		| @ -83,6 +83,7 @@ class PurchaseForm(forms.ModelForm): | ||||
|             "date_purchased": custom_date_widget, | ||||
|             "date_refunded": custom_date_widget, | ||||
|             "date_finished": custom_date_widget, | ||||
|             "date_dropped": custom_date_widget, | ||||
|         } | ||||
|         model = Purchase | ||||
|         fields = [ | ||||
| @ -91,6 +92,8 @@ class PurchaseForm(forms.ModelForm): | ||||
|             "date_purchased", | ||||
|             "date_refunded", | ||||
|             "date_finished", | ||||
|             "date_dropped", | ||||
|             "infinite", | ||||
|             "price", | ||||
|             "price_currency", | ||||
|             "ownership_type", | ||||
|  | ||||
| @ -0,0 +1,23 @@ | ||||
| # Generated by Django 4.2.7 on 2024-01-03 21:27 | ||||
|  | ||||
| from django.db import migrations, models | ||||
|  | ||||
|  | ||||
| class Migration(migrations.Migration): | ||||
|  | ||||
|     dependencies = [ | ||||
|         ("games", "0033_alter_edition_unique_together"), | ||||
|     ] | ||||
|  | ||||
|     operations = [ | ||||
|         migrations.AddField( | ||||
|             model_name="purchase", | ||||
|             name="date_dropped", | ||||
|             field=models.DateField(blank=True, null=True), | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name="purchase", | ||||
|             name="infinite", | ||||
|             field=models.BooleanField(default=False), | ||||
|         ), | ||||
|     ] | ||||
| @ -116,6 +116,8 @@ class Purchase(models.Model): | ||||
|     date_purchased = models.DateField() | ||||
|     date_refunded = models.DateField(blank=True, null=True) | ||||
|     date_finished = models.DateField(blank=True, null=True) | ||||
|     date_dropped = models.DateField(blank=True, null=True) | ||||
|     infinite = models.BooleanField(default=False) | ||||
|     price = models.IntegerField(default=0) | ||||
|     price_currency = models.CharField(max_length=3, default="USD") | ||||
|     ownership_type = models.CharField( | ||||
|  | ||||
| @ -205,6 +205,33 @@ | ||||
|                 {% endfor %} | ||||
|             </tbody> | ||||
|         </table> | ||||
|  | ||||
|         <h1 class="text-5xl text-center my-6">Unfinished Purchases</h1> | ||||
|         <table class="responsive-table"> | ||||
|             <thead> | ||||
|                 <tr> | ||||
|                     <th class="px-2 sm:px-4 md:px-6 md:py-2 purchase-name truncate max-w-20char">Name</th> | ||||
|                     <th class="px-2 sm:px-4 md:px-6 md:py-2">Price ({{ total_spent_currency }})</th> | ||||
|                     <th class="px-2 sm:px-4 md:px-6 md:py-2">Date</th> | ||||
|                 </tr> | ||||
|             </thead> | ||||
|             <tbody> | ||||
|                 {% for purchase in purchased_unfinished %} | ||||
|                     <tr> | ||||
|                         <td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono"> | ||||
|                             <a class="underline decoration-slate-500 sm:decoration-2" | ||||
|                                href="{% url 'edit_purchase' purchase.id %}"> | ||||
|                                 {{ purchase.edition.name }} | ||||
|                                 {% if purchase.type == "dlc" %}({{ purchase.name }}, {{ purchase.get_type_display }}){% endif %} | ||||
|                             </a> | ||||
|                         </td> | ||||
|                         <td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono">{{ purchase.price }}</td> | ||||
|                         <td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono">{{ purchase.date_purchased | date:"d/m/Y" }}</td> | ||||
|                     </tr> | ||||
|                 {% endfor %} | ||||
|             </tbody> | ||||
|         </table> | ||||
|  | ||||
|         <h1 class="text-5xl text-center my-6">All Purchases</h1> | ||||
|         <table class="responsive-table"> | ||||
|             <thead> | ||||
|  | ||||
| @ -362,10 +362,11 @@ def stats(request, year: int = 0): | ||||
|     ) | ||||
|     this_year_purchases_refunded = this_year_purchases_with_currency.refunded() | ||||
|  | ||||
|     this_year_purchases_unfinished = this_year_purchases_without_refunded.filter( | ||||
|         date_finished__isnull=True | ||||
|     ).filter( | ||||
|         Q(type=Purchase.GAME) | Q(type=Purchase.DLC) | ||||
|     this_year_purchases_unfinished = ( | ||||
|         this_year_purchases_without_refunded.filter(date_finished__isnull=True) | ||||
|         .filter(date_dropped__isnull=True) | ||||
|         .filter(infinite=False) | ||||
|         .filter(Q(type=Purchase.GAME) | Q(type=Purchase.DLC)) | ||||
|     )  # do not count battle passes etc. | ||||
|  | ||||
|     this_year_purchases_without_refunded_count = ( | ||||
|  | ||||
		Reference in New Issue
	
	Block a user