diff --git a/la_chariotte/order/forms.py b/la_chariotte/order/forms.py index fe50a71..9f5d950 100644 --- a/la_chariotte/order/forms.py +++ b/la_chariotte/order/forms.py @@ -1,29 +1,23 @@ +from django import forms from django.contrib.auth import get_user_model from django.core.exceptions import NON_FIELD_ERRORS, ValidationError from django.db import IntegrityError from la_chariotte.order.models import GroupedOrder, Item -from django.forms import ( # isort:skip - CharField, - DateInput, - DateTimeInput, - ModelForm, - Textarea, - TextInput, -) - -class GroupedOrderForm(ModelForm): +class GroupedOrderForm(forms.ModelForm): class Meta: model = GroupedOrder fields = ["name", "deadline", "delivery_date", "place", "description"] widgets = { - "name": TextInput(attrs={"placeholder": "ex : Des oranges pour Noël"}), - "deadline": DateTimeInput(attrs={"placeholder": "JJ/MM/AAAA HH:MM"}), - "delivery_date": DateInput(attrs={"placeholder": "JJ/MM/AAAA"}), - "place": TextInput(attrs={"placeholder": "(facultatif)"}), - "description": Textarea( + "name": forms.TextInput( + attrs={"placeholder": "ex : Des oranges pour Noël"} + ), + "deadline": forms.DateTimeInput(attrs={"placeholder": "JJ/MM/AAAA HH:MM"}), + "delivery_date": forms.DateInput(attrs={"placeholder": "JJ/MM/AAAA"}), + "place": forms.TextInput(attrs={"placeholder": "(facultatif)"}), + "description": forms.Textarea( attrs={ "placeholder": "Plus d'infos sur la commande groupée ? (facultatif)" } @@ -56,7 +50,7 @@ class GroupedOrderForm(ModelForm): return cleaned_data -class ItemCreateForm(ModelForm): +class ItemCreateForm(forms.ModelForm): class Meta: model = Item fields = ["name", "price", "max_limit"] diff --git a/la_chariotte/order/migrations/0017_orderauthor_alter_order_author.py b/la_chariotte/order/migrations/0017_orderauthor_alter_order_author.py new file mode 100644 index 0000000..4de8599 --- /dev/null +++ b/la_chariotte/order/migrations/0017_orderauthor_alter_order_author.py @@ -0,0 +1,49 @@ +# Generated by Django 4.2 on 2023-05-12 09:48 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + dependencies = [ + ("order", "0016_alter_groupedorder_description"), + ] + + operations = [ + migrations.CreateModel( + name="OrderAuthor", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("first_name", models.CharField(verbose_name="Prénom")), + ("last_name", models.CharField(verbose_name="Nom")), + ( + "phone", + models.CharField( + help_text="Pour vous que l'organisateur·ice vous contacte en cas de besoin", + verbose_name="Numéro de téléphone", + ), + ), + ( + "email", + models.CharField( + verbose_name="Pour vous que l'organisateur·ice vous contacte en cas de besoin" + ), + ), + ], + ), + migrations.AlterField( + model_name="order", + name="author", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="order.orderauthor" + ), + ), + ] diff --git a/la_chariotte/order/models.py b/la_chariotte/order/models.py index 80e2c87..c3d7e77 100644 --- a/la_chariotte/order/models.py +++ b/la_chariotte/order/models.py @@ -9,7 +9,7 @@ from la_chariotte.settings import AUTH_USER_MODEL class GroupedOrder(models.Model): name = models.CharField( max_length=100, null=True, verbose_name="Titre de la commande" - ) # optionnal + ) orga = models.ForeignKey( AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name="Organisateur·ice" ) @@ -55,13 +55,29 @@ class GroupedOrder(models.Model): ) +class OrderAuthor(models.Model): + """Created when a user orders without having an account - or when a user creates an account""" + + # TODO faire le lien avec CustomUser (CustomUser hérite de OrderAuthor), pour ensuite préremplir quand on est connecté·e + first_name = models.CharField(verbose_name="Prénom") + last_name = models.CharField(verbose_name="Nom") + phone = models.CharField( + verbose_name="Numéro de téléphone", + help_text="Pour vous que l'organisateur·ice vous contacte en cas de besoin", + ) + email = models.CharField( + verbose_name="Pour vous que l'organisateur·ice vous contacte en cas de besoin" + ) + + def __str__(self): # pragma: no cover + return f"{self.first_name} {self.last_name}" + + class Order(models.Model): grouped_order = models.ForeignKey( GroupedOrder, on_delete=models.CASCADE, related_name="order_set" ) - author = models.CharField( - max_length=100, verbose_name="Personne qui passe la commande" - ) # a changer, utiliser ForeignKey de user + author = models.ForeignKey(OrderAuthor, on_delete=models.CASCADE) def __str__(self): # pragma: no cover return f"Commande de {self.author} pour la commande groupée {self.grouped_order.pk}" @@ -85,7 +101,7 @@ class Item(models.Model): class OrderedItem(models.Model): - """Item in one specific Order, and its number""" + """Item in one specific Order, and the number of articles""" nb = models.PositiveSmallIntegerField(default=0) # works up to 32767 order = models.ForeignKey( diff --git a/la_chariotte/order/templates/order/grouped_order_add_items.html b/la_chariotte/order/templates/order/grouped_order_add_items.html index 885d3e8..85b6813 100644 --- a/la_chariotte/order/templates/order/grouped_order_add_items.html +++ b/la_chariotte/order/templates/order/grouped_order_add_items.html @@ -26,15 +26,15 @@
{% csrf_token %} - € - + € + {% for item in item_list %} {{ item.name }} {{ item.price }} - {{ item.max_limit }} + {% if item.max_limit %}{{ item.max_limit }}{% else %}---{% endif %} Supprimer (pas possible pour l'instant) {% endfor %} diff --git a/la_chariotte/order/templates/order/grouped_order_detail.html b/la_chariotte/order/templates/order/grouped_order_detail.html index 66d12df..1fef291 100644 --- a/la_chariotte/order/templates/order/grouped_order_detail.html +++ b/la_chariotte/order/templates/order/grouped_order_detail.html @@ -5,42 +5,84 @@ {% block content_title %}{{ grouped_order }} : commander{% endblock %} {% block content %} -

{{ grouped_order }} -

Organisateur·ice : {{ grouped_order.orga }}

-

Date de livraison : {{ grouped_order.delivery_date }}

-

Date limite de commande : {{ grouped_order.deadline }}

- {% if grouped_order.description %}

{{ grouped_order.description }}

{% endif %} - {% if not user.is_authenticated %} -

Vous êtes l'organisateur·ice de cette commande groupée ? - - Connectez-vous pour accéder à la page de gestion -

- {% endif %} +
+
+
+

{{ grouped_order }}

+ {% if grouped_order.description %}

{{ grouped_order.description }}

{% endif %} + {% if not user.is_authenticated %} +

Vous êtes l'organisateur·ice ? + + Connectez-vous pour accéder à la page de gestion +

+ {% endif %} +
+
+ {% if grouped_order.place %} +

Lieu : {{ grouped_order.place }}

+ {% endif %} +

Date de livraison : {{ grouped_order.delivery_date }}

+

Date limite de commande : {{ grouped_order.deadline }}

+ {% if user == grouped_order.orga %} + + Gestion de la commande groupée + {% else %} +

Organisateur·ice : {{ grouped_order.orga }}

+ Contacter l'organisateur·ice + {% endif %} +
+
+
- {% if user == grouped_order.orga %} - - Page de gestion de la comande groupée - {% endif %} - -

les produits disponibles pour cette commande groupée :

- - - - {% csrf_token %} -
-

Commander

- {% if error_message %}

{{ error_message }}

{% endif %} +
+ {% if grouped_order.item_set.first %} +

Commander

+ + + + + + + + + + + {% for item in grouped_order.item_set.all %} - -
+ + {% csrf_token %} + + + + + {% endfor %} - - + +
ProduitPrix unitaireQuantitéTotal
{{ item.name }}{{ item.price }} €Total pour ce produit
+
+

Vos informations

+
+
+

+

+

+

+
+
+

+

+

+

+
+
+ +
+ +
+ + {% else %} +

Il n'y a pas de produits disponibles dans cette commande !

+ {% endif %} +
{% endblock %} \ No newline at end of file diff --git a/la_chariotte/order/templates/order/grouped_order_overview.html b/la_chariotte/order/templates/order/grouped_order_overview.html index 7414344..6539404 100644 --- a/la_chariotte/order/templates/order/grouped_order_overview.html +++ b/la_chariotte/order/templates/order/grouped_order_overview.html @@ -24,7 +24,7 @@ diff --git a/la_chariotte/order/tests/test_views.py b/la_chariotte/order/tests/test_views.py index 015ea05..d7c7777 100644 --- a/la_chariotte/order/tests/test_views.py +++ b/la_chariotte/order/tests/test_views.py @@ -5,7 +5,7 @@ from django.contrib import auth from django.urls import reverse from django.utils import timezone -from la_chariotte.order.models import GroupedOrder, Item, Order +from la_chariotte.order.models import GroupedOrder, Item, Order, OrderAuthor pytestmark = pytest.mark.django_db @@ -205,7 +205,7 @@ class TestGroupedOrderIndexView: class TestGroupedOrderDetailView: def test_order_item(self, client, other_user): """ - From the OrderDetailView, we order an item using the order form, and it creates an Order woth and Ordered_item inside + From the OrderDetailView, we order an item using the order form, and it creates an Order with an Ordered_item inside """ grouped_order = create_grouped_order( days_before_delivery_date=5, @@ -214,7 +214,10 @@ class TestGroupedOrderDetailView: orga_user=other_user, ) item = Item.objects.create( - name="test item", grouped_order=grouped_order, price=1 + name="test item 1", grouped_order=grouped_order, price=1 + ) + item2 = Item.objects.create( + name="test item 2", grouped_order=grouped_order, price=5 ) detail_url = reverse( "order:grouped_order_detail", @@ -227,6 +230,7 @@ class TestGroupedOrderDetailView: assert "test item" in response.content.decode() assert "gr order test" in response.content.decode() assert item.ordered_nb == 0 + assert item2.ordered_nb == 0 order_url = reverse( "order:order", kwargs={ @@ -236,7 +240,12 @@ class TestGroupedOrderDetailView: response = client.post( order_url, { - "item": item.pk, + f"quantity_{item.pk}": 4, + f"quantity_{item2.pk}": 1, + "first_name": "Prénom", + "last_name": "Nom", + "phone": "0645632569", + "email": "test@mail.fr", }, ) assert response.status_code == 302 @@ -247,15 +256,18 @@ class TestGroupedOrderDetailView: }, ) item.refresh_from_db() - assert item.ordered_nb == 1 + item2.refresh_from_db() + assert OrderAuthor.objects.first().first_name == "Prénom" + assert item.ordered_nb == 4 + assert item2.ordered_nb == 1 order = Order.objects.first() - assert order.ordered_items.count() == 1 + assert order.ordered_items.count() == 2 -class TestGroupedOrderOrgaView: +class TestGroupedOrderOverview: def test_user_not_logged_redirect(self, client, other_user): """ - A user that is not logged cannot see the GroupedOrderOrgaView. They get redirected to the login view + A user that is not logged cannot see the GroupedOrderOverview. They get redirected to the login view """ grouped_order = create_grouped_order( days_before_delivery_date=5, @@ -284,7 +296,7 @@ class TestGroupedOrderOrgaView: def test_user_not_orga_redirect(self, client_log, other_user): """ - A user that is not orga cannot see the GroupedOrderOrgaView. + A user that is not orga cannot see the GroupedOrderOverview. They get a 403 forbidden error """ grouped_order = create_grouped_order( @@ -358,7 +370,7 @@ class TestGroupedOrderAddItemsView: def test_get_manage_items__anonymous_user(self, client, other_user): """ - A user that is not logged cannot see the GroupedOrderOrgaView. They get redirected to the login view + A user that is not logged cannot see the GroupedOrderOverview. They get redirected to the login view """ grouped_order = create_grouped_order( days_before_delivery_date=5, diff --git a/la_chariotte/order/urls.py b/la_chariotte/order/urls.py index 45aa7ae..7895098 100644 --- a/la_chariotte/order/urls.py +++ b/la_chariotte/order/urls.py @@ -10,7 +10,7 @@ urlpatterns = [ ), path( "/gerer", - views.GroupedOrderOrgaView.as_view(), + views.GroupedOrderOverview.as_view(), name="grouped_order_overview", ), path("/commander/", views.order, name="order"), diff --git a/la_chariotte/order/views.py b/la_chariotte/order/views.py index d83c71d..90fd1eb 100644 --- a/la_chariotte/order/views.py +++ b/la_chariotte/order/views.py @@ -6,7 +6,7 @@ from django.utils import timezone from django.views import generic from .forms import GroupedOrderForm, ItemCreateForm -from .models import GroupedOrder, Item, Order, OrderedItem +from .models import GroupedOrder, Item, Order, OrderAuthor, OrderedItem class IndexView(LoginRequiredMixin, generic.ListView): @@ -59,7 +59,7 @@ class GroupedOrderDetailView(generic.DetailView): context_object_name = "grouped_order" -class GroupedOrderOrgaView(UserPassesTestMixin, generic.DetailView): +class GroupedOrderOverview(UserPassesTestMixin, generic.DetailView): """Overview of a grouped order, for the organizer""" model = GroupedOrder @@ -124,12 +124,19 @@ class ItemCreateView(UserPassesTestMixin, generic.CreateView): return GroupedOrder.objects.get(pk=grouped_order_id).orga == self.request.user -def order( - request, grouped_order_id -): # crée une commande (order) pour cette commande groupée, avec l'item selectionné dedans +def order(request, grouped_order_id): + """Creates an AnonymousUser, and an Order for this GroupedOrder, with related OrderedItems""" grouped_order = get_object_or_404(GroupedOrder, pk=grouped_order_id) try: - selected_item = grouped_order.item_set.get(pk=request.POST["item"]) + # get a dict with (quantity_{{item_id}}:{{quantity}}) + orders_dict = { + k: v for k, v in request.POST.items() if k.startswith("quantity") + } + first_name = request.POST["first_name"] + last_name = request.POST["last_name"] + phone = request.POST["phone"] + email = request.POST["email"] + # selected_item = grouped_order.item_set.get(pk=request.POST["item"]) except (KeyError, Item.DoesNotExist): # Redisplay the order form for this grouped order. return render( @@ -137,14 +144,16 @@ def order( "order/grouped_order_detail.html", { "grouped_order": grouped_order, - "error_message": "You didn't select an item.", + "error_message": "Veuillez remplir tous les champs", }, ) else: - order = Order.objects.create(author="Auteur teur", grouped_order=grouped_order) - OrderedItem.objects.create(nb=1, order=order, item=selected_item) - compute_ordered_nb(selected_item) - selected_item.save() + author = OrderAuthor.objects.create(first_name=first_name, last_name=last_name) + order = Order.objects.create(author=author, grouped_order=grouped_order) + for k, v in orders_dict.items(): + item = grouped_order.item_set.get(pk=k.split("_")[1]) + OrderedItem.objects.create(nb=v, order=order, item=item) + compute_ordered_nb(item) # Always return an HttpResponseRedirect after successfully dealing # with POST data. This prevents data from being posted twice if a # user hits the Back button. @@ -154,7 +163,7 @@ def order( def compute_ordered_nb(item): - """Calcule le nombre de produits de ce type commandés (pour cette commande groupée)""" + """Computes the number of ordered articles for this item in this grouped order""" ordered_nb = 0 for order in item.orders.all(): ordered_nb += order.nb diff --git a/la_chariotte/static/css/app.css b/la_chariotte/static/css/app.css index 4c5c805..969f57e 100644 --- a/la_chariotte/static/css/app.css +++ b/la_chariotte/static/css/app.css @@ -1054,12 +1054,12 @@ a.box:active { color: #3850b7; } .button.is-info { - background-color: #A52951; + background-color: #e9b049; border-color: transparent; color: #fff; } .button.is-info:hover, .button.is-info.is-hovered { - background-color: #9b264c; + background-color: #e8ab3e; border-color: transparent; color: #fff; } @@ -1068,21 +1068,21 @@ a.box:active { color: #fff; } .button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(165, 41, 81, 0.25); + box-shadow: 0 0 0 0.125em rgba(233, 176, 73, 0.25); } .button.is-info:active, .button.is-info.is-active { - background-color: #912447; + background-color: #e6a632; border-color: transparent; color: #fff; } .button.is-info[disabled], fieldset[disabled] .button.is-info { - background-color: #A52951; - border-color: #A52951; + background-color: #e9b049; + border-color: #e9b049; box-shadow: none; } .button.is-info.is-inverted { background-color: #fff; - color: #A52951; + color: #e9b049; } .button.is-info.is-inverted:hover, .button.is-info.is-inverted.is-hovered { background-color: #f2f2f2; @@ -1091,32 +1091,32 @@ a.box:active { background-color: #fff; border-color: transparent; box-shadow: none; - color: #A52951; + color: #e9b049; } .button.is-info.is-loading::after { border-color: transparent transparent #fff #fff !important; } .button.is-info.is-outlined { background-color: transparent; - border-color: #A52951; - color: #A52951; + border-color: #e9b049; + color: #e9b049; } .button.is-info.is-outlined:hover, .button.is-info.is-outlined.is-hovered, .button.is-info.is-outlined:focus, .button.is-info.is-outlined.is-focused { - background-color: #A52951; - border-color: #A52951; + background-color: #e9b049; + border-color: #e9b049; color: #fff; } .button.is-info.is-outlined.is-loading::after { - border-color: transparent transparent #A52951 #A52951 !important; + border-color: transparent transparent #e9b049 #e9b049 !important; } .button.is-info.is-outlined.is-loading:hover::after, .button.is-info.is-outlined.is-loading.is-hovered::after, .button.is-info.is-outlined.is-loading:focus::after, .button.is-info.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #fff #fff !important; } .button.is-info.is-outlined[disabled], fieldset[disabled] .button.is-info.is-outlined { background-color: transparent; - border-color: #A52951; + border-color: #e9b049; box-shadow: none; - color: #A52951; + color: #e9b049; } .button.is-info.is-inverted.is-outlined { background-color: transparent; @@ -1125,10 +1125,10 @@ a.box:active { } .button.is-info.is-inverted.is-outlined:hover, .button.is-info.is-inverted.is-outlined.is-hovered, .button.is-info.is-inverted.is-outlined:focus, .button.is-info.is-inverted.is-outlined.is-focused { background-color: #fff; - color: #A52951; + color: #e9b049; } .button.is-info.is-inverted.is-outlined.is-loading:hover::after, .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-info.is-inverted.is-outlined.is-loading:focus::after, .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #A52951 #A52951 !important; + border-color: transparent transparent #e9b049 #e9b049 !important; } .button.is-info.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-info.is-inverted.is-outlined { background-color: transparent; @@ -1137,18 +1137,18 @@ a.box:active { color: #fff; } .button.is-info.is-light { - background-color: #fbeff3; - color: #cc3364; + background-color: #fdf7ed; + color: #845b10; } .button.is-info.is-light:hover, .button.is-info.is-light.is-hovered { - background-color: #f8e4eb; + background-color: #fbf2e1; border-color: transparent; - color: #cc3364; + color: #845b10; } .button.is-info.is-light:active, .button.is-info.is-light.is-active { - background-color: #f6dae3; + background-color: #faedd6; border-color: transparent; - color: #cc3364; + color: #845b10; } .button.is-success { background-color: hsl(153, 53%, 53%); @@ -2011,12 +2011,12 @@ div.icon-text { color: #3850b7; } .notification.is-info { - background-color: #A52951; + background-color: #e9b049; color: #fff; } .notification.is-info.is-light { - background-color: #fbeff3; - color: #cc3364; + background-color: #fdf7ed; + color: #845b10; } .notification.is-success { background-color: hsl(153, 53%, 53%); @@ -2140,16 +2140,16 @@ div.icon-text { background-image: linear-gradient(to right, hsl(229, 53%, 53%) 30%, hsl(0, 0%, 93%) 30%); } .progress.is-info::-webkit-progress-value { - background-color: #A52951; + background-color: #e9b049; } .progress.is-info::-moz-progress-bar { - background-color: #A52951; + background-color: #e9b049; } .progress.is-info::-ms-fill { - background-color: #A52951; + background-color: #e9b049; } .progress.is-info:indeterminate { - background-image: linear-gradient(to right, #A52951 30%, hsl(0, 0%, 93%) 30%); + background-image: linear-gradient(to right, #e9b049 30%, hsl(0, 0%, 93%) 30%); } .progress.is-success::-webkit-progress-value { background-color: hsl(153, 53%, 53%); @@ -2274,8 +2274,8 @@ div.icon-text { } .table td.is-info, .table th.is-info { - background-color: #A52951; - border-color: #A52951; + background-color: #e9b049; + border-color: #e9b049; color: #fff; } .table td.is-success, @@ -2497,12 +2497,12 @@ div.icon-text { color: #3850b7; } .tag:not(body).is-info { - background-color: #A52951; + background-color: #e9b049; color: #fff; } .tag:not(body).is-info.is-light { - background-color: #fbeff3; - color: #cc3364; + background-color: #fdf7ed; + color: #845b10; } .tag:not(body).is-success { background-color: hsl(153, 53%, 53%); @@ -2793,10 +2793,10 @@ a.tag:hover { box-shadow: 0 0 0 0.125em rgba(72, 95, 199, 0.25); } .is-info.textarea, .is-info.input { - border-color: #A52951; + border-color: #e9b049; } .is-info.textarea:focus, .is-info.input:focus, .is-info.is-focused.textarea, .is-info.is-focused.input, .is-info.textarea:active, .is-info.input:active, .is-info.is-active.textarea, .is-info.is-active.input { - box-shadow: 0 0 0 0.125em rgba(165, 41, 81, 0.25); + box-shadow: 0 0 0 0.125em rgba(233, 176, 73, 0.25); } .is-success.textarea, .is-success.input { border-color: hsl(153, 53%, 53%); @@ -3006,16 +3006,16 @@ a.tag:hover { box-shadow: 0 0 0 0.125em rgba(72, 95, 199, 0.25); } .select.is-info:not(:hover)::after { - border-color: #A52951; + border-color: #e9b049; } .select.is-info select { - border-color: #A52951; + border-color: #e9b049; } .select.is-info select:hover, .select.is-info select.is-hovered { - border-color: #912447; + border-color: #e6a632; } .select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { - box-shadow: 0 0 0 0.125em rgba(165, 41, 81, 0.25); + box-shadow: 0 0 0 0.125em rgba(233, 176, 73, 0.25); } .select.is-success:not(:hover)::after { border-color: hsl(153, 53%, 53%); @@ -3217,22 +3217,22 @@ a.tag:hover { color: #fff; } .file.is-info .file-cta { - background-color: #A52951; + background-color: #e9b049; border-color: transparent; color: #fff; } .file.is-info:hover .file-cta, .file.is-info.is-hovered .file-cta { - background-color: #9b264c; + background-color: #e8ab3e; border-color: transparent; color: #fff; } .file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { border-color: transparent; - box-shadow: 0 0 0.5em rgba(165, 41, 81, 0.25); + box-shadow: 0 0 0.5em rgba(233, 176, 73, 0.25); color: #fff; } .file.is-info:active .file-cta, .file.is-info.is-active .file-cta { - background-color: #912447; + background-color: #e6a632; border-color: transparent; color: #fff; } @@ -3498,7 +3498,7 @@ a.tag:hover { color: hsl(229, 53%, 53%); } .help.is-info { - color: #A52951; + color: #e9b049; } .help.is-success { color: hsl(153, 53%, 53%); @@ -4275,15 +4275,15 @@ button.dropdown-item.is-active { color: #3850b7; } .message.is-info { - background-color: #fbeff3; + background-color: #fdf7ed; } .message.is-info .message-header { - background-color: #A52951; + background-color: #e9b049; color: #fff; } .message.is-info .message-body { - border-color: #A52951; - color: #cc3364; + border-color: #e9b049; + color: #845b10; } .message.is-success { background-color: #effaf5; @@ -4795,7 +4795,7 @@ button.dropdown-item.is-active { } } .navbar.is-info { - background-color: #A52951; + background-color: #e9b049; color: #fff; } .navbar.is-info .navbar-brand > .navbar-item, @@ -4806,7 +4806,7 @@ button.dropdown-item.is-active { .navbar.is-info .navbar-brand .navbar-link:focus, .navbar.is-info .navbar-brand .navbar-link:hover, .navbar.is-info .navbar-brand .navbar-link.is-active { - background-color: #912447; + background-color: #e6a632; color: #fff; } .navbar.is-info .navbar-brand .navbar-link::after { @@ -4832,7 +4832,7 @@ button.dropdown-item.is-active { .navbar.is-info .navbar-end .navbar-link:focus, .navbar.is-info .navbar-end .navbar-link:hover, .navbar.is-info .navbar-end .navbar-link.is-active { - background-color: #912447; + background-color: #e6a632; color: #fff; } .navbar.is-info .navbar-start .navbar-link::after, @@ -4842,11 +4842,11 @@ button.dropdown-item.is-active { .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #912447; + background-color: #e6a632; color: #fff; } .navbar.is-info .navbar-dropdown a.navbar-item.is-active { - background-color: #A52951; + background-color: #e9b049; color: #fff; } } @@ -5679,14 +5679,14 @@ a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-i color: hsl(229, 53%, 53%); } .panel.is-info .panel-heading { - background-color: #A52951; + background-color: #e9b049; color: #fff; } .panel.is-info .panel-tabs a.is-active { - border-bottom-color: #A52951; + border-bottom-color: #e9b049; } .panel.is-info .panel-block.is-active .panel-icon { - color: #A52951; + color: #e9b049; } .panel.is-success .panel-heading { background-color: hsl(153, 53%, 53%); @@ -7802,39 +7802,39 @@ a.has-text-link-dark:hover, a.has-text-link-dark:focus { } .has-text-info { - color: #A52951 !important; + color: #e9b049 !important; } a.has-text-info:hover, a.has-text-info:focus { - color: #7c1f3d !important; + color: #e49c1c !important; } .has-background-info { - background-color: #A52951 !important; + background-color: #e9b049 !important; } .has-text-info-light { - color: #fbeff3 !important; + color: #fdf7ed !important; } a.has-text-info-light:hover, a.has-text-info-light:focus { - color: #f1c6d4 !important; + color: #f7e3bf !important; } .has-background-info-light { - background-color: #fbeff3 !important; + background-color: #fdf7ed !important; } .has-text-info-dark { - color: #cc3364 !important; + color: #845b10 !important; } a.has-text-info-dark:hover, a.has-text-info-dark:focus { - color: #d65c83 !important; + color: #b17a15 !important; } .has-background-info-dark { - background-color: #cc3364 !important; + background-color: #845b10 !important; } .has-text-success { @@ -9924,7 +9924,7 @@ a.has-text-danger-dark:hover, a.has-text-danger-dark:focus { } } .hero.is-info { - background-color: #A52951; + background-color: #e9b049; color: #fff; } .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), @@ -9943,7 +9943,7 @@ a.has-text-danger-dark:hover, a.has-text-danger-dark:focus { } @media screen and (max-width: 1023px) { .hero.is-info .navbar-menu { - background-color: #A52951; + background-color: #e9b049; } } .hero.is-info .navbar-item, @@ -9953,7 +9953,7 @@ a.has-text-danger-dark:hover, a.has-text-danger-dark:focus { .hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, .hero.is-info .navbar-link:hover, .hero.is-info .navbar-link.is-active { - background-color: #912447; + background-color: #e6a632; color: #fff; } .hero.is-info .tabs a { @@ -9964,7 +9964,7 @@ a.has-text-danger-dark:hover, a.has-text-danger-dark:focus { opacity: 1; } .hero.is-info .tabs li.is-active a { - color: #A52951 !important; + color: #e9b049 !important; opacity: 1; } .hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { @@ -9976,14 +9976,14 @@ a.has-text-danger-dark:hover, a.has-text-danger-dark:focus { .hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { background-color: #fff; border-color: #fff; - color: #A52951; + color: #e9b049; } .hero.is-info.is-bold { - background-image: linear-gradient(141deg, #84174c 0%, #A52951 71%, #bf2840 100%); + background-image: linear-gradient(141deg, #f07a0f 0%, #e9b049 71%, #f0d45b 100%); } @media screen and (max-width: 768px) { .hero.is-info.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #84174c 0%, #A52951 71%, #bf2840 100%); + background-image: linear-gradient(141deg, #f07a0f 0%, #e9b049 71%, #f0d45b 100%); } } .hero.is-success { diff --git a/la_chariotte/static/sass/base/_variables.sass b/la_chariotte/static/sass/base/_variables.sass index 29b4cab..537cc9b 100644 --- a/la_chariotte/static/sass/base/_variables.sass +++ b/la_chariotte/static/sass/base/_variables.sass @@ -4,7 +4,7 @@ $beige: #e9b049 $bright-black: #280a13 $primary: $betterave -$info: $betterave +$info: $beige $text: $bright-black // Navbar