mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-01 11:22:24 +02:00
add price and max limit fields for items
This commit is contained in:
parent
417967095f
commit
f10ab88dc2
5 changed files with 40 additions and 4 deletions
|
@ -40,7 +40,7 @@ class GroupedOrderForm(ModelForm):
|
||||||
class ItemCreateForm(ModelForm):
|
class ItemCreateForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Item
|
model = Item
|
||||||
fields = ["name"]
|
fields = ["name", "price", "max_limit"]
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.grouped_order = kwargs.pop("grouped_order") # type: GroupedOrder
|
self.grouped_order = kwargs.pop("grouped_order") # type: GroupedOrder
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 4.2 on 2023-05-09 13:44
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
("order", "0013_alter_groupedorder_unique_together"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="item",
|
||||||
|
name="max_limit",
|
||||||
|
field=models.PositiveSmallIntegerField(blank=True, null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="item",
|
||||||
|
name="price",
|
||||||
|
field=models.DecimalField(decimal_places=2, default=1, max_digits=10),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
]
|
|
@ -67,13 +67,16 @@ class Item(models.Model):
|
||||||
grouped_order = models.ForeignKey(
|
grouped_order = models.ForeignKey(
|
||||||
GroupedOrder, on_delete=models.CASCADE
|
GroupedOrder, on_delete=models.CASCADE
|
||||||
) # à transformer en manytomany quand il y aura un catalogue
|
) # à transformer en manytomany quand il y aura un catalogue
|
||||||
|
price = models.DecimalField(max_digits=10, decimal_places=2)
|
||||||
|
max_limit = models.PositiveSmallIntegerField(null=True, blank=True)
|
||||||
|
|
||||||
ordered_nb = models.IntegerField(default=0)
|
ordered_nb = models.IntegerField(default=0)
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse("order:manage_items", kwargs={"pk": self.grouped_order.pk})
|
return reverse("order:manage_items", kwargs={"pk": self.grouped_order.pk})
|
||||||
|
|
||||||
def __str__(self): # pragma: no cover
|
def __str__(self): # pragma: no cover
|
||||||
return f"{self.name} dans la commande groupée {self.grouped_order.pk}"
|
return f"{self.name} ({self.price} €)"
|
||||||
|
|
||||||
|
|
||||||
class OrderedItem(models.Model):
|
class OrderedItem(models.Model):
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Nom</th>
|
<th>Nom</th>
|
||||||
|
<th>Prix unitaire</th>
|
||||||
|
<th>Quantité max (optionnel)</th>
|
||||||
<th>Action</th>
|
<th>Action</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -24,11 +26,15 @@
|
||||||
<form method="post" action="{{ create_item_url }}">
|
<form method="post" action="{{ create_item_url }}">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<td><input name="name" maxlength="100" placeholder="Nom du produit" required></input></td>
|
<td><input name="name" maxlength="100" placeholder="Nom du produit" required></input></td>
|
||||||
|
<td><input name="price" maxlength="50" placeholder="5,40" required></input> €</td>
|
||||||
|
<td><input name="max_limit" maxlength="50" placeholder="42"></input></td>
|
||||||
<td><button type="submit" class="button is-primary">Ajouter</button></td>
|
<td><button type="submit" class="button is-primary">Ajouter</button></td>
|
||||||
</tr>
|
</tr>
|
||||||
{% for item in item_list %}
|
{% for item in item_list %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ item.name }}</td>
|
<td>{{ item.name }}</td>
|
||||||
|
<td>{{ item.price }}</td>
|
||||||
|
<td>{{ item.max_limit }}</td>
|
||||||
<td>Supprimer (pas possible pour l'instant)</td>
|
<td>Supprimer (pas possible pour l'instant)</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -214,7 +214,9 @@ class TestGroupedOrderDetailView:
|
||||||
name="gr order test",
|
name="gr order test",
|
||||||
orga_user=other_user,
|
orga_user=other_user,
|
||||||
)
|
)
|
||||||
item = Item.objects.create(name="test item", grouped_order=grouped_order)
|
item = Item.objects.create(
|
||||||
|
name="test item", grouped_order=grouped_order, price=1
|
||||||
|
)
|
||||||
detail_url = reverse(
|
detail_url = reverse(
|
||||||
"order:grouped_order_detail",
|
"order:grouped_order_detail",
|
||||||
kwargs={
|
kwargs={
|
||||||
|
@ -400,7 +402,9 @@ class TestItemCreateView:
|
||||||
"pk": grouped_order.pk,
|
"pk": grouped_order.pk,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
response = client_log.post(create_item_view_url, {"name": "titre item"})
|
response = client_log.post(
|
||||||
|
create_item_view_url, {"name": "titre item", "price": 2}
|
||||||
|
)
|
||||||
assert response.status_code == 302
|
assert response.status_code == 302
|
||||||
assert response.url == reverse(
|
assert response.url == reverse(
|
||||||
"order:manage_items",
|
"order:manage_items",
|
||||||
|
|
Loading…
Reference in a new issue