diff --git a/counter/migrations/0032_invoicecall.py b/counter/migrations/0032_invoicecall.py
new file mode 100644
index 00000000..a51e8b27
--- /dev/null
+++ b/counter/migrations/0032_invoicecall.py
@@ -0,0 +1,47 @@
+# Generated by Django 5.2 on 2025-06-11 12:53
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+import counter.models
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ("club", "0014_alter_club_options_rename_unix_name_club_slug_name_and_more"),
+ ("counter", "0031_alter_counter_options"),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name="InvoiceCall",
+ fields=[
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("validated", models.BooleanField(verbose_name="is validated")),
+ (
+ "month",
+ counter.models.MonthField(
+ max_length=7, verbose_name="invoice date"
+ ),
+ ),
+ (
+ "club",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE, to="club.club"
+ ),
+ ),
+ ],
+ options={
+ "verbose_name": "Invoice call",
+ "verbose_name_plural": "Invoice calls",
+ },
+ ),
+ ]
diff --git a/counter/models.py b/counter/models.py
index 3515e081..89681e62 100644
--- a/counter/models.py
+++ b/counter/models.py
@@ -1362,3 +1362,46 @@ class ReturnableProductBalance(models.Model):
f"return balance of {self.customer} "
f"for {self.returnable.product_id} : {self.balance}"
)
+
+
+class MonthField(models.DateField):
+ description = _("Year + month field")
+
+ def __init__(self, *args, **kwargs):
+ kwargs["max_length"] = 7
+ super().__init__(*args, **kwargs)
+
+ def db_type(self, connection):
+ return "char(7)"
+
+ def from_db_value(self, value, expression, connection):
+ if value is None:
+ return value
+ year, month = map(value.split("-"))
+ return date(year, month, 1)
+
+ def get_prep_value(self, value):
+ if isinstance(value, date):
+ return value.strftime("%Y-%m")
+ elif isinstance(value, str):
+ try:
+ datetime.strptime(value, "%Y-%m")
+ except ValueError:
+ raise ValueError("invalid format for date (use YYYY-mm)") from None
+ elif value is None:
+ return value
+ else:
+ raise TypeError("Invalid type for MonthField")
+
+
+class InvoiceCall(models.Model):
+ validated = models.BooleanField(verbose_name=_("is validated"))
+ club = models.ForeignKey(Club, on_delete=models.CASCADE)
+ month = MonthField(verbose_name=_("invoice date"))
+
+ class Meta:
+ verbose_name = _("Invoice call")
+ verbose_name_plural = _("Invoice calls")
+
+ def __str__(self):
+ return f"invoice call of {self.month}/{self.year} made by {self.club}"
diff --git a/counter/templates/counter/invoices_call.jinja b/counter/templates/counter/invoices_call.jinja
index bdc43d31..6ca1004b 100644
--- a/counter/templates/counter/invoices_call.jinja
+++ b/counter/templates/counter/invoices_call.jinja
@@ -15,23 +15,32 @@
-
-
{% trans %}CB Payments{% endtrans %} : {{ sum_cb }} €
-{% trans %}Club{% endtrans %} | -{% trans %}Sum{% endtrans %} | - - - {% for i in sums %} -
{{ i['club__name'] }} | -{{"%.2f"|format(i['selling_sum'])}} € | -