ソースを参照

[FEAT] form to create expenses

Adrien Carteron 3 年 前
コミット
6fc60a070a
5 ファイル変更36 行追加16 行削除
  1. 5 1
      expenses/forms.py
  2. 12 6
      expenses/models.py
  3. 2 2
      expenses/templates/expense_list.html
  4. 2 2
      expenses/urls.py
  5. 15 5
      expenses/views.py

+ 5 - 1
expenses/forms.py

@@ -21,7 +21,9 @@ class CategoryForm(forms.ModelForm):
 
 
 class ExpenseForm(forms.Form):
-    is_multiple_payment = forms.BooleanField(label="Is mulptiple payment")
+    is_multiple_payment = forms.BooleanField(
+        label="Is mulptiple payment", initial=False
+    )
 
 
 class MultiplePaymentExepenseForm(forms.ModelForm):
@@ -36,6 +38,8 @@ class MultiplePaymentExepenseForm(forms.ModelForm):
             "source",
         )
 
+    first_payment_amount = forms.DecimalField(max_digits=10, decimal_places=2)
+
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
 

+ 12 - 6
expenses/models.py

@@ -100,24 +100,30 @@ class Expense(models.Model):
         """ ordering = ("name", "date", "amount")  # Le tri par défaut dans les listes """
 
 
-class MultiplePaymentExepense(LoneExpense):
+class MultiplePaymentExepense(RawExpense, MetaExpense):
     payments = models.ManyToManyField(
         RawExpense, related_name="multiple_payment_expense"
     )
     number_of_payment = models.PositiveIntegerField()
 
-    def set_payments(self, payment):
-        payment.date = self.date
-        payment.name = self.name + " 1st payment"
-
+    def set_payments(self, first_payment_amout):
+        print(f"set payment 0 {first_payment_amout}")
+        payment = RawExpense(
+            date=self.date, name=self.name + " 1 payment", amount=first_payment_amout
+        )
+        self.save()
         payment.save()
+        print(f"set payment 1 {payment.amount}")
 
         self.payments.add(payment)
+        print("set payment 2")
+
         rest_to_pay = (self.amount - payment.amount) / (self.number_of_payment - 1)
         for i in range(1, self.number_of_payment):
+            print(i)
             date = self.date + relativedelta(months=i)
             payment = RawExpense(
-                name=f"{self.name} {i} payment", date=date, amount=rest_to_pay
+                name=f"{self.name} {i+1} payment", date=date, amount=rest_to_pay
             )
             payment.save()
             self.payments.add(payment)

+ 2 - 2
expenses/templates/expense_list.html

@@ -11,6 +11,6 @@
     <li><a href="{% url 'expenses:expense_detail' pk=expense.pk %}"">{{ expense.content_object.name }}</a></li>
     {% endfor %}
 </ul>
-<a class="btn btn-info" href="{% url 'expenses:lone_expense_create' %}">Create category</a>
+<a class=" btn btn-info" href="{% url 'expenses:expense_create' %}">Create expense</a>
 
-{% endblock content %}
+        {% endblock content %}

+ 2 - 2
expenses/urls.py

@@ -10,7 +10,7 @@ from expenses.views import (
     lone_expense_create,
     multiple_expense_create,
     expense_detail,
-    create_expense,
+    expense_create,
 )
 
 app_name = "expenses"
@@ -35,6 +35,6 @@ urlpatterns = [
         multiple_expense_create,
         name="multiple_expense_create",
     ),
-    path("expenses/create", create_expense, name="expense_create"),
+    path("expenses/create", expense_create, name="expense_create"),
     path("expenses/detail/<int:pk>", expense_detail, name="expense_detail"),
 ]

+ 15 - 5
expenses/views.py

@@ -106,16 +106,26 @@ def multiple_expense_create(request):
     return render(request, "expense_create.html", context)
 
 
-def create_expense(request):
+def expense_create(request):
     # form = ExpenseForm(request.POST or None)
     lone_expense_form = LoneExpenseForm(request.POST or None)
     mult_expense_form = MultiplePaymentExepenseForm(request.POST or None)
     if mult_expense_form.is_valid():
-        instance = mult_expense_form.save()
-        expense = Expense(
+        first_amount = mult_expense_form.cleaned_data["first_payment_amount"]
+        instance = mult_expense_form.save(commit=False)
+        instance.set_payments(first_amount)
+        """ expense = Expense(
             content_object=instance,
         )
-        expense.save()
+        expense.save() """
+        #        return HttpResponseRedirect('/')
+        return redirect("expenses:expense_list")
+    if lone_expense_form.is_valid():
+        lone_expense_form.save()
+        """ expense = Expense(
+            content_object=instance,
+        )
+        expense.save() """
         #        return HttpResponseRedirect('/')
         return redirect("expenses:expense_list")
     context = {
@@ -127,7 +137,7 @@ def create_expense(request):
 
 class RawExpenseListView(ListView):
     model = RawExpense
-    fields = "__all__"
+    fields = ("amout",)
     template_name = "raw_expenses_list.html"