8
0
Fork 0
mirror of https://gitlab.federez.net/re2o/re2o synced 2024-07-04 05:04:06 +00:00

Merge branch 'translation' into 'dev'

Translation

See merge request federez/re2o!396
This commit is contained in:
chirac 2019-01-20 15:03:46 +01:00
commit 1cc5d7bba0
162 changed files with 3197 additions and 2132 deletions

View file

@ -28,7 +28,7 @@ done.
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext as _
def _create_api_permission(): def _create_api_permission():
@ -71,4 +71,5 @@ def can_view(user):
'codename': settings.API_PERMISSION_CODENAME 'codename': settings.API_PERMISSION_CODENAME
} }
can = user.has_perm('%(app_label)s.%(codename)s' % kwargs) can = user.has_perm('%(app_label)s.%(codename)s' % kwargs)
return can, None if can else _("You cannot see this application.") return can, None if can else _("You don't have the right to see this"
" application.")

View file

@ -46,6 +46,6 @@ class ExpiringTokenAuthentication(TokenAuthentication):
) )
utc_now = datetime.datetime.now(datetime.timezone.utc) utc_now = datetime.datetime.now(datetime.timezone.utc)
if token.created < utc_now - token_duration: if token.created < utc_now - token_duration:
raise exceptions.AuthenticationFailed(_('Token has expired')) raise exceptions.AuthenticationFailed(_("The token has expired."))
return token.user, token return token.user, token

View file

@ -0,0 +1,40 @@
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il
# se veut agnostique au réseau considéré, de manière à être installable en
# quelques clics.
#
# Copyright © 2018 Maël Kervella
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-01-08 23:06+0100\n"
"PO-Revision-Date: 2019-01-07 01:37+0100\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"
"Language: fr_FR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: acl.py:74
msgid "You don't have the right to see this application."
msgstr "Vous n'avez pas le droit de voir cette application."
#: authentication.py:49
msgid "The token has expired."
msgstr "Le jeton a expiré."

View file

@ -116,7 +116,7 @@ class DiscountForm(Form):
Form used in oder to create a discount on an invoice. Form used in oder to create a discount on an invoice.
""" """
is_relative = forms.BooleanField( is_relative = forms.BooleanField(
label=_("Discount is on percentage"), label=_("Discount is on percentage."),
required=False, required=False,
) )
discount = forms.DecimalField( discount = forms.DecimalField(
@ -310,8 +310,8 @@ class RechargeForm(FormRevMixin, Form):
if balance_method.maximum_balance is not None and \ if balance_method.maximum_balance is not None and \
value + self.user.solde > balance_method.maximum_balance: value + self.user.solde > balance_method.maximum_balance:
raise forms.ValidationError( raise forms.ValidationError(
_("Requested amount is too high. Your balance can't exceed \ _("Requested amount is too high. Your balance can't exceed"
%(max_online_balance)s .") % { " %(max_online_balance)s €.") % {
'max_online_balance': balance_method.maximum_balance 'max_online_balance': balance_method.maximum_balance
} }
) )

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-18 13:17+0200\n" "POT-Creation-Date: 2019-01-12 16:50+0100\n"
"PO-Revision-Date: 2018-03-31 16:09+0002\n" "PO-Revision-Date: 2018-03-31 16:09+0002\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language: fr_FR\n" "Language: fr_FR\n"
@ -33,79 +33,98 @@ msgstr ""
msgid "You don't have the right to view this application." msgid "You don't have the right to view this application."
msgstr "Vous n'avez pas le droit de voir cette application." msgstr "Vous n'avez pas le droit de voir cette application."
#: forms.py:63 forms.py:274 #: forms.py:66 forms.py:299
msgid "Select a payment method" msgid "Select a payment method"
msgstr "Sélectionnez un moyen de paiement" msgstr "Sélectionnez un moyen de paiement"
#: forms.py:66 models.py:510 #: forms.py:69 models.py:579
msgid "Member" msgid "Member"
msgstr "Adhérent" msgstr "Adhérent"
#: forms.py:68 #: forms.py:71
msgid "Select the proprietary member" msgid "Select the proprietary member"
msgstr "Sélectionnez l'adhérent propriétaire" msgstr "Sélectionnez l'adhérent propriétaire"
#: forms.py:69 #: forms.py:72
msgid "Validated invoice" msgid "Validated invoice"
msgstr "Facture validée" msgstr "Facture validée"
#: forms.py:82 #: forms.py:85
msgid "A payment method must be specified." msgid "A payment method must be specified."
msgstr "Un moyen de paiement doit être renseigné." msgstr "Un moyen de paiement doit être renseigné."
#: forms.py:96 forms.py:120 templates/cotisations/aff_article.html:33 #: forms.py:97 templates/cotisations/aff_article.html:33
#: templates/cotisations/facture.html:61 #: templates/cotisations/facture.html:67
msgid "Article" msgid "Article"
msgstr "Article" msgstr "Article"
#: forms.py:100 forms.py:124 templates/cotisations/edit_facture.html:46 #: forms.py:101 templates/cotisations/edit_facture.html:50
msgid "Quantity" msgid "Quantity"
msgstr "Quantité" msgstr "Quantité"
#: forms.py:154 #: forms.py:119
msgid "Discount is on percentage."
msgstr "La réduction est en pourcentage."
#: forms.py:123 templates/cotisations/facture.html:78
msgid "Discount"
msgstr "Réduction"
#: forms.py:140
#, python-format
msgid "{}% discount"
msgstr "{}% de réduction"
#: forms.py:140
msgid "{}€ discount"
msgstr "{}€ de réduction"
#: forms.py:179
msgid "Article name" msgid "Article name"
msgstr "Nom de l'article" msgstr "Nom de l'article"
#: forms.py:164 templates/cotisations/sidebar.html:50 #: forms.py:189 templates/cotisations/sidebar.html:55
msgid "Available articles" msgid "Available articles"
msgstr "Articles disponibles" msgstr "Articles disponibles"
#: forms.py:192 #: forms.py:217
msgid "Payment method name" msgid "Payment method name"
msgstr "Nom du moyen de paiement" msgstr "Nom du moyen de paiement"
#: forms.py:204 #: forms.py:229
msgid "Available payment methods" msgid "Available payment methods"
msgstr "Moyens de paiement disponibles" msgstr "Moyens de paiement disponibles"
#: forms.py:230 #: forms.py:255
msgid "Bank name" msgid "Bank name"
msgstr "Nom de la banque" msgstr "Nom de la banque"
#: forms.py:242 #: forms.py:267
msgid "Available banks" msgid "Available banks"
msgstr "Banques disponibles" msgstr "Banques disponibles"
#: forms.py:261 #: forms.py:286
msgid "Amount" msgid "Amount"
msgstr "Montant" msgstr "Montant"
#: forms.py:267 templates/cotisations/aff_cotisations.html:44 #: forms.py:292 templates/cotisations/aff_cost_estimate.html:42
#: templates/cotisations/aff_cotisations.html:44
#: templates/cotisations/aff_custom_invoice.html:42 #: templates/cotisations/aff_custom_invoice.html:42
#: templates/cotisations/control.html:66 #: templates/cotisations/control.html:66
msgid "Payment method" msgid "Payment method"
msgstr "Moyen de paiement" msgstr "Moyen de paiement"
#: forms.py:287 #: forms.py:313
#, python-format #, python-format
msgid "" msgid ""
"Requested amount is too high. Your balance can't exceed " "Requested amount is too high. Your balance can't exceed "
"%(max_online_balance)s €." "%(max_online_balance)s €."
msgstr "" msgstr ""
"Le montant demandé trop grand. Votre solde ne peut excéder " "Le montant demandé est trop grand. Votre solde ne peut excéder "
"%(max_online_balance)s €." "%(max_online_balance)s €."
#: models.py:60 templates/cotisations/aff_cotisations.html:48 #: models.py:60 templates/cotisations/aff_cost_estimate.html:46
#: templates/cotisations/aff_cotisations.html:48
#: templates/cotisations/aff_custom_invoice.html:46 #: templates/cotisations/aff_custom_invoice.html:46
#: templates/cotisations/control.html:70 #: templates/cotisations/control.html:70
msgid "Date" msgid "Date"
@ -133,9 +152,9 @@ msgstr "Peut voir un objet facture"
#: models.py:158 #: models.py:158
msgid "Can edit all the previous invoices" msgid "Can edit all the previous invoices"
msgstr "Peut modifier toutes les factures existantes" msgstr "Peut modifier toutes les factures précédentes"
#: models.py:160 models.py:305 #: models.py:160 models.py:373
msgid "invoice" msgid "invoice"
msgstr "facture" msgstr "facture"
@ -156,128 +175,149 @@ msgid ""
"You don't have the right to edit an invoice already controlled or " "You don't have the right to edit an invoice already controlled or "
"invalidated." "invalidated."
msgstr "" msgstr ""
"Vous n'avez pas le droit de modifier une facture précedemment contrôlée ou " "Vous n'avez pas le droit de modifier une facture précédemment contrôlée ou "
"invalidée." "invalidée."
#: models.py:184 #: models.py:184
msgid "You don't have the right to delete an invoice." msgid "You don't have the right to delete an invoice."
msgstr "Vous n'avez pas le droit de supprimer une facture." msgstr "Vous n'avez pas le droit de supprimer une facture."
#: models.py:186 #: models.py:187
msgid "You don't have the right to delete this user's invoices." msgid "You don't have the right to delete this user's invoices."
msgstr "Vous n'avez pas le droit de supprimer les factures de cet utilisateur." msgstr "Vous n'avez pas le droit de supprimer les factures de cet utilisateur."
#: models.py:189 #: models.py:191
msgid "" msgid ""
"You don't have the right to delete an invoice already controlled or " "You don't have the right to delete an invoice already controlled or "
"invalidated." "invalidated."
msgstr "" msgstr ""
"Vous n'avez pas le droit de supprimer une facture précedement contrôlée ou " "Vous n'avez pas le droit de supprimer une facture précédemment contrôlée ou "
"invalidée." "invalidée."
#: models.py:197 #: models.py:199
msgid "You don't have the right to view someone else's invoices history." msgid "You don't have the right to view someone else's invoices history."
msgstr "" msgstr ""
"Vous n'avez pas le droit de voir l'historique des factures d'un autre " "Vous n'avez pas le droit de voir l'historique des factures d'un autre "
"utilisateur." "utilisateur."
#: models.py:200 #: models.py:202
msgid "The invoice has been invalidated." msgid "The invoice has been invalidated."
msgstr "La facture a été invalidée." msgstr "La facture a été invalidée."
#: models.py:210 #: models.py:214
msgid "You don't have the right to edit the \"controlled\" state." msgid "You don't have the right to edit the \"controlled\" state."
msgstr "Vous n'avez pas le droit de modifier le statut \"contrôlé\"." msgstr "Vous n'avez pas le droit de modifier le statut \"contrôlé\"."
#: models.py:224 #: models.py:228
msgid "There are no payment method which you can use." msgid "There are no payment method which you can use."
msgstr "Il n'y a pas de moyen de paiement que vous puissiez utiliser." msgstr "Il n'y a pas de moyen de paiement que vous puissiez utiliser."
#: models.py:226 #: models.py:230
msgid "There are no article that you can buy." msgid "There are no article that you can buy."
msgstr "Il n'y a pas d'article que vous puissiez acheter." msgstr "Il n'y a pas d'article que vous puissiez acheter."
#: models.py:261 #: models.py:272
msgid "Can view a custom invoice object" msgid "Can view a custom invoice object"
msgstr "Peut voir un objet facture personnalisée" msgstr "Peut voir un objet facture personnalisée"
#: models.py:265 templates/cotisations/aff_custom_invoice.html:36 #: models.py:276 templates/cotisations/aff_cost_estimate.html:36
#: templates/cotisations/aff_custom_invoice.html:36
msgid "Recipient" msgid "Recipient"
msgstr "Destinataire" msgstr "Destinataire"
#: models.py:269 templates/cotisations/aff_paiement.html:33 #: models.py:280 templates/cotisations/aff_paiement.html:33
msgid "Payment type" msgid "Payment type"
msgstr "Type de paiement" msgstr "Type de paiement"
#: models.py:273 #: models.py:284
msgid "Address" msgid "Address"
msgstr "Adresse" msgstr "Adresse"
#: models.py:276 templates/cotisations/aff_custom_invoice.html:54 #: models.py:287 templates/cotisations/aff_custom_invoice.html:54
msgid "Paid" msgid "Paid"
msgstr "Payé" msgstr "Payé"
#: models.py:296 models.py:516 models.py:764 #: models.py:291
msgid "Remark"
msgstr "Remarque"
#: models.py:300
msgid "Can view a cost estimate object"
msgstr "Peut voir un objet devis"
#: models.py:303
msgid "Period of validity"
msgstr "Période de validité"
#: models.py:340
msgid "You don't have the right to delete a cost estimate."
msgstr "Vous n'avez pas le droit de supprimer un devis."
#: models.py:343
msgid "The cost estimate has an invoice and can't be deleted."
msgstr "Le devis a une facture et ne peut pas être supprimé."
#: models.py:364 models.py:585 models.py:852
msgid "Connection" msgid "Connection"
msgstr "Connexion" msgstr "Connexion"
#: models.py:297 models.py:517 models.py:765 #: models.py:365 models.py:586 models.py:853
msgid "Membership" msgid "Membership"
msgstr "Adhésion" msgstr "Adhésion"
#: models.py:298 models.py:512 models.py:518 models.py:766 #: models.py:366 models.py:581 models.py:587 models.py:854
msgid "Both of them" msgid "Both of them"
msgstr "Les deux" msgstr "Les deux"
#: models.py:310 #: models.py:378
msgid "amount" msgid "amount"
msgstr "montant" msgstr "montant"
#: models.py:315 #: models.py:383
msgid "article" msgid "article"
msgstr "article" msgstr "article"
#: models.py:322 #: models.py:390
msgid "price" msgid "price"
msgstr "prix" msgstr "prix"
#: models.py:327 models.py:535 #: models.py:395 models.py:604
msgid "duration (in months)" msgid "duration (in months)"
msgstr "durée (en mois)" msgstr "durée (en mois)"
#: models.py:335 models.py:549 models.py:780 #: models.py:403 models.py:618 models.py:868
msgid "subscription type" msgid "subscription type"
msgstr "type de cotisation" msgstr "type de cotisation"
#: models.py:340 #: models.py:408
msgid "Can view a purchase object" msgid "Can view a purchase object"
msgstr "Peut voir un objet achat" msgstr "Peut voir un objet achat"
#: models.py:341 #: models.py:409
msgid "Can edit all the previous purchases" msgid "Can edit all the previous purchases"
msgstr "Peut modifier tous les achats précédents" msgstr "Peut modifier tous les achats précédents"
#: models.py:343 models.py:774 #: models.py:411 models.py:862
msgid "purchase" msgid "purchase"
msgstr "achat" msgstr "achat"
#: models.py:344 #: models.py:412
msgid "purchases" msgid "purchases"
msgstr "achats" msgstr "achats"
#: models.py:411 models.py:573 #: models.py:479 models.py:642
msgid "Duration must be specified for a subscription." msgid "Duration must be specified for a subscription."
msgstr "La durée de la cotisation doit être indiquée." msgstr "La durée de la cotisation doit être indiquée."
#: models.py:418 #: models.py:486
msgid "You don't have the right to edit the purchases." msgid "You don't have the right to edit the purchases."
msgstr "Vous n'avez pas le droit de modifier les achats." msgstr "Vous n'avez pas le droit de modifier les achats."
#: models.py:423 #: models.py:491
msgid "You don't have the right to edit this user's purchases." msgid "You don't have the right to edit this user's purchases."
msgstr "Vous n'avez pas le droit de modifier les achats de cet utilisateur." msgstr "Vous n'avez pas le droit de modifier les achats de cet utilisateur."
#: models.py:427 #: models.py:495
msgid "" msgid ""
"You don't have the right to edit a purchase already controlled or " "You don't have the right to edit a purchase already controlled or "
"invalidated." "invalidated."
@ -285,150 +325,150 @@ msgstr ""
"Vous n'avez pas le droit de modifier un achat précédemment contrôlé ou " "Vous n'avez pas le droit de modifier un achat précédemment contrôlé ou "
"invalidé." "invalidé."
#: models.py:434 #: models.py:502
msgid "You don't have the right to delete a purchase." msgid "You don't have the right to delete a purchase."
msgstr "Vous n'avez pas le droit de supprimer un achat." msgstr "Vous n'avez pas le droit de supprimer un achat."
#: models.py:436 #: models.py:504
msgid "You don't have the right to delete this user's purchases." msgid "You don't have the right to delete this user's purchases."
msgstr "Vous n'avez pas le droit de supprimer les achats de cet utilisateur." msgstr "Vous n'avez pas le droit de supprimer les achats de cet utilisateur."
#: models.py:439 #: models.py:507
msgid "" msgid ""
"You don't have the right to delete a purchase already controlled or " "You don't have the right to delete a purchase already controlled or "
"invalidated." "invalidated."
msgstr "" msgstr ""
"Vous n'avez pas le droit de supprimer un achat précédement contrôlé ou " "Vous n'avez pas le droit de supprimer un achat précédemment contrôlé ou "
"invalidé." "invalidé."
#: models.py:447 #: models.py:515
msgid "You don't have the right to view someone else's purchase history." msgid "You don't have the right to view someone else's purchase history."
msgstr "" msgstr ""
"Vous n'avez pas le droit de voir l'historique des achats d'un autre " "Vous n'avez pas le droit de voir l'historique des achats d'un autre "
"utilisateur." "utilisateur."
#: models.py:511 #: models.py:580
msgid "Club" msgid "Club"
msgstr "Club" msgstr "Club"
#: models.py:523 #: models.py:592
msgid "designation" msgid "designation"
msgstr "désignation" msgstr "désignation"
#: models.py:529 #: models.py:598
msgid "unit price" msgid "unit price"
msgstr "prix unitaire" msgstr "prix unitaire"
#: models.py:541 #: models.py:610
msgid "type of users concerned" msgid "type of users concerned"
msgstr "type d'utilisateurs concernés" msgstr "type d'utilisateurs concernés"
#: models.py:553 models.py:649 #: models.py:622 models.py:733
msgid "is available for every user" msgid "is available for every user"
msgstr "est disponible pour chaque utilisateur" msgstr "est disponible pour chaque utilisateur"
#: models.py:560 #: models.py:629
msgid "Can view an article object" msgid "Can view an article object"
msgstr "Peut voir un objet article" msgstr "Peut voir un objet article"
#: models.py:561 #: models.py:630
msgid "Can buy every article" msgid "Can buy every article"
msgstr "Peut acheter chaque article" msgstr "Peut acheter chaque article"
#: models.py:569 #: models.py:638
msgid "Balance is a reserved article name." msgid "Balance is a reserved article name."
msgstr "Solde est un nom d'article réservé." msgstr "Solde est un nom d'article réservé."
#: models.py:594 #: models.py:663
msgid "You can't buy this article." msgid "You can't buy this article."
msgstr "Vous ne pouvez pas acheter cet article." msgstr "Vous ne pouvez pas acheter cet article."
#: models.py:624 #: models.py:708
msgid "Can view a bank object" msgid "Can view a bank object"
msgstr "Peut voir un objet banque" msgstr "Peut voir un objet banque"
#: models.py:626 #: models.py:710
msgid "bank" msgid "bank"
msgstr "banque" msgstr "banque"
#: models.py:627 #: models.py:711
msgid "banks" msgid "banks"
msgstr "banques" msgstr "banques"
#: models.py:645 #: models.py:729
msgid "method" msgid "method"
msgstr "moyen" msgstr "moyen"
#: models.py:654 #: models.py:738
msgid "is user balance" msgid "is user balance"
msgstr "est solde utilisateur" msgstr "est solde utilisateur"
#: models.py:655 #: models.py:739
msgid "There should be only one balance payment method." msgid "There should be only one balance payment method."
msgstr "Il ne devrait y avoir qu'un moyen de paiement solde." msgstr "Il ne devrait y avoir qu'un moyen de paiement solde."
#: models.py:661 #: models.py:745
msgid "Can view a payment method object" msgid "Can view a payment method object"
msgstr "Peut voir un objet moyen de paiement" msgstr "Peut voir un objet moyen de paiement"
#: models.py:662 #: models.py:746
msgid "Can use every payment method" msgid "Can use every payment method"
msgstr "Peut utiliser chaque moyen de paiement" msgstr "Peut utiliser chaque moyen de paiement"
#: models.py:664 #: models.py:748
msgid "payment method" msgid "payment method"
msgstr "moyen de paiement" msgstr "moyen de paiement"
#: models.py:665 #: models.py:749
msgid "payment methods" msgid "payment methods"
msgstr "moyens de paiement" msgstr "moyens de paiement"
#: models.py:699 payment_methods/comnpay/views.py:63 #: models.py:787 payment_methods/comnpay/views.py:63
#, python-format #, python-format
msgid "The subscription of %(member_name)s was extended to %(end_date)s." msgid "The subscription of %(member_name)s was extended to %(end_date)s."
msgstr "La cotisation de %(member_name)s a été étendue au %(end_date)s." msgstr "La cotisation de %(member_name)s a été étendue au %(end_date)s."
#: models.py:709 #: models.py:797
msgid "The invoice was created." msgid "The invoice was created."
msgstr "La facture a été créée." msgstr "La facture a été créée."
#: models.py:730 #: models.py:818
msgid "You can't use this payment method." msgid "You can't use this payment method."
msgstr "Vous ne pouvez pas utiliser ce moyen de paiement." msgstr "Vous ne pouvez pas utiliser ce moyen de paiement."
#: models.py:748 #: models.py:836
msgid "No custom payment method." msgid "No custom payment method."
msgstr "Pas de moyen de paiement personnalisé." msgstr "Pas de moyen de paiement personnalisé."
#: models.py:783 #: models.py:871
msgid "start date" msgid "start date"
msgstr "date de début" msgstr "date de début"
#: models.py:786 #: models.py:874
msgid "end date" msgid "end date"
msgstr "date de fin" msgstr "date de fin"
#: models.py:791 #: models.py:879
msgid "Can view a subscription object" msgid "Can view a subscription object"
msgstr "Peut voir un objet cotisation" msgstr "Peut voir un objet cotisation"
#: models.py:792 #: models.py:880
msgid "Can edit the previous subscriptions" msgid "Can edit the previous subscriptions"
msgstr "Peut modifier les cotisations précédentes" msgstr "Peut modifier les cotisations précédentes"
#: models.py:794 #: models.py:882
msgid "subscription" msgid "subscription"
msgstr "cotisation" msgstr "cotisation"
#: models.py:795 #: models.py:883
msgid "subscriptions" msgid "subscriptions"
msgstr "cotisations" msgstr "cotisations"
#: models.py:799 #: models.py:887
msgid "You don't have the right to edit a subscription." msgid "You don't have the right to edit a subscription."
msgstr "Vous n'avez pas le droit de modifier une cotisation." msgstr "Vous n'avez pas le droit de modifier une cotisation."
#: models.py:803 #: models.py:891
msgid "" msgid ""
"You don't have the right to edit a subscription already controlled or " "You don't have the right to edit a subscription already controlled or "
"invalidated." "invalidated."
@ -436,11 +476,11 @@ msgstr ""
"Vous n'avez pas le droit de modifier une cotisation précédemment contrôlée " "Vous n'avez pas le droit de modifier une cotisation précédemment contrôlée "
"ou invalidée." "ou invalidée."
#: models.py:810 #: models.py:898
msgid "You don't have the right to delete a subscription." msgid "You don't have the right to delete a subscription."
msgstr "Vous n'avez pas le droit de supprimer une cotisation." msgstr "Vous n'avez pas le droit de supprimer une cotisation."
#: models.py:813 #: models.py:901
msgid "" msgid ""
"You don't have the right to delete a subscription already controlled or " "You don't have the right to delete a subscription already controlled or "
"invalidated." "invalidated."
@ -448,7 +488,7 @@ msgstr ""
"Vous n'avez pas le droit de supprimer une cotisation précédemment contrôlée " "Vous n'avez pas le droit de supprimer une cotisation précédemment contrôlée "
"ou invalidée." "ou invalidée."
#: models.py:821 #: models.py:909
msgid "You don't have the right to view someone else's subscription history." msgid "You don't have the right to view someone else's subscription history."
msgstr "" msgstr ""
"Vous n'avez pas le droit de voir l'historique des cotisations d'un autre " "Vous n'avez pas le droit de voir l'historique des cotisations d'un autre "
@ -482,11 +522,11 @@ msgstr "Le montant maximal d'argent autorisé pour le solde."
msgid "Allow user to credit their balance" msgid "Allow user to credit their balance"
msgstr "Autorise l'utilisateur à créditer son solde" msgstr "Autorise l'utilisateur à créditer son solde"
#: payment_methods/balance/models.py:81 payment_methods/balance/models.py:112 #: payment_methods/balance/models.py:79 payment_methods/balance/models.py:110
msgid "Your balance is too low for this operation." msgid "Your balance is too low for this operation."
msgstr "Votre solde est trop bas pour cette opération." msgstr "Votre solde est trop bas pour cette opération."
#: payment_methods/balance/models.py:99 validators.py:20 #: payment_methods/balance/models.py:97 validators.py:20
msgid "There is already a payment method for user balance." msgid "There is already a payment method for user balance."
msgstr "Il y a déjà un moyen de paiement pour le solde utilisateur." msgstr "Il y a déjà un moyen de paiement pour le solde utilisateur."
@ -523,11 +563,11 @@ msgstr ""
msgid "Production mode enabled (production URL, instead of homologation)" msgid "Production mode enabled (production URL, instead of homologation)"
msgstr "Mode production activé (URL de production, au lieu d'homologation)" msgstr "Mode production activé (URL de production, au lieu d'homologation)"
#: payment_methods/comnpay/models.py:104 #: payment_methods/comnpay/models.py:102
msgid "Pay invoice number " msgid "Pay invoice number "
msgstr "Payer la facture numéro " msgstr "Payer la facture numéro "
#: payment_methods/comnpay/models.py:116 #: payment_methods/comnpay/models.py:114
msgid "" msgid ""
"In order to pay your invoice with ComNpay, the price must be greater than {} " "In order to pay your invoice with ComNpay, the price must be greater than {} "
"€." "€."
@ -559,6 +599,30 @@ msgstr ""
msgid "no" msgid "no"
msgstr "non" msgstr "non"
#: payment_methods/note_kfet/forms.py:32
msgid "pseudo note"
msgstr "pseudo note"
#: payment_methods/note_kfet/forms.py:35
msgid "Password"
msgstr "Mot de passe"
#: payment_methods/note_kfet/models.py:40
msgid "NoteKfet"
msgstr "NoteKfet"
#: payment_methods/note_kfet/models.py:50
msgid "server"
msgstr "serveur"
#: payment_methods/note_kfet/views.py:60
msgid "Unknown error."
msgstr "Erreur inconnue."
#: payment_methods/note_kfet/views.py:88
msgid "The payment with note was done."
msgstr "Le paiement par note a été effectué."
#: templates/cotisations/aff_article.html:34 #: templates/cotisations/aff_article.html:34
msgid "Price" msgid "Price"
msgstr "Prix" msgstr "Prix"
@ -579,34 +643,47 @@ msgstr "Utilisateurs concernés"
msgid "Available for everyone" msgid "Available for everyone"
msgstr "Disponible pour tous" msgstr "Disponible pour tous"
#: templates/cotisations/aff_article.html:52
#: templates/cotisations/aff_paiement.html:48
#: templates/cotisations/control.html:107 views.py:483 views.py:570
#: views.py:650
msgid "Edit"
msgstr "Modifier"
#: templates/cotisations/aff_banque.html:32 #: templates/cotisations/aff_banque.html:32
msgid "Bank" msgid "Bank"
msgstr "Banque" msgstr "Banque"
#: templates/cotisations/aff_cotisations.html:38 #: templates/cotisations/aff_cost_estimate.html:39
msgid "User"
msgstr "Utilisateur"
#: templates/cotisations/aff_cotisations.html:41 #: templates/cotisations/aff_cotisations.html:41
#: templates/cotisations/aff_custom_invoice.html:39 #: templates/cotisations/aff_custom_invoice.html:39
#: templates/cotisations/control.html:63 #: templates/cotisations/control.html:63
#: templates/cotisations/edit_facture.html:45 #: templates/cotisations/edit_facture.html:49
msgid "Designation" msgid "Designation"
msgstr "Désignation" msgstr "Désignation"
#: templates/cotisations/aff_cost_estimate.html:40
#: templates/cotisations/aff_cotisations.html:42 #: templates/cotisations/aff_cotisations.html:42
#: templates/cotisations/aff_custom_invoice.html:40 #: templates/cotisations/aff_custom_invoice.html:40
#: templates/cotisations/control.html:64 #: templates/cotisations/control.html:64
msgid "Total price" msgid "Total price"
msgstr "Prix total" msgstr "Prix total"
#: templates/cotisations/aff_cost_estimate.html:50
msgid "Validity"
msgstr "Validité"
#: templates/cotisations/aff_cost_estimate.html:54
msgid "Cost estimate ID"
msgstr "ID devis"
#: templates/cotisations/aff_cost_estimate.html:58
msgid "Invoice created"
msgstr "Facture créée"
#: templates/cotisations/aff_cost_estimate.html:91
#: templates/cotisations/aff_cotisations.html:81
#: templates/cotisations/aff_custom_invoice.html:79
msgid "PDF"
msgstr "PDF"
#: templates/cotisations/aff_cotisations.html:38
msgid "User"
msgstr "Utilisateur"
#: templates/cotisations/aff_cotisations.html:52 #: templates/cotisations/aff_cotisations.html:52
#: templates/cotisations/aff_custom_invoice.html:50 #: templates/cotisations/aff_custom_invoice.html:50
#: templates/cotisations/control.html:56 #: templates/cotisations/control.html:56
@ -617,11 +694,6 @@ msgstr "ID facture"
msgid "Controlled invoice" msgid "Controlled invoice"
msgstr "Facture contrôlée" msgstr "Facture contrôlée"
#: templates/cotisations/aff_cotisations.html:81
#: templates/cotisations/aff_custom_invoice.html:79
msgid "PDF"
msgstr "PDF"
#: templates/cotisations/aff_cotisations.html:84 #: templates/cotisations/aff_cotisations.html:84
msgid "Invalidated invoice" msgid "Invalidated invoice"
msgstr "Facture invalidée" msgstr "Facture invalidée"
@ -666,6 +738,11 @@ msgstr "Validé"
msgid "Controlled" msgid "Controlled"
msgstr "Contrôlé" msgstr "Contrôlé"
#: templates/cotisations/control.html:107 views.py:642 views.py:729
#: views.py:809
msgid "Edit"
msgstr "Modifier"
#: templates/cotisations/delete.html:29 #: templates/cotisations/delete.html:29
msgid "Deletion of subscriptions" msgid "Deletion of subscriptions"
msgstr "Suppression de cotisations" msgstr "Suppression de cotisations"
@ -676,33 +753,33 @@ msgid ""
"Warning: are you sure you really want to delete this %(object_name)s object " "Warning: are you sure you really want to delete this %(object_name)s object "
"( %(objet)s )?" "( %(objet)s )?"
msgstr "" msgstr ""
"\tAttention: voulez-vous vraiment supprimer cet objet %(object_name)s " "Attention: voulez-vous vraiment supprimer cet objet %(object_name)s "
"( %(objet)s ) ?" "( %(objet)s ) ?"
#: templates/cotisations/delete.html:38 #: templates/cotisations/delete.html:38
#: templates/cotisations/edit_facture.html:60 #: templates/cotisations/edit_facture.html:64 views.py:178 views.py:228
#: views.py:181 views.py:235 #: views.py:280
msgid "Confirm" msgid "Confirm"
msgstr "Valider" msgstr "Confirmer"
#: templates/cotisations/edit_facture.html:31 #: templates/cotisations/edit_facture.html:31
#: templates/cotisations/facture.html:30 #: templates/cotisations/facture.html:30
msgid "Creation and editing of invoices" msgid "Creation and editing of invoices"
msgstr "Création et modification de factures" msgstr "Création et modification de factures"
#: templates/cotisations/edit_facture.html:38 #: templates/cotisations/edit_facture.html:41
msgid "Edit the invoice" msgid "Edit invoice"
msgstr "Modifier la facture" msgstr "Modifier la facture"
#: templates/cotisations/edit_facture.html:41 #: templates/cotisations/edit_facture.html:45
#: templates/cotisations/facture.html:56 #: templates/cotisations/facture.html:62
#: templates/cotisations/index_article.html:30 #: templates/cotisations/index_article.html:30
msgid "Articles" msgid "Articles"
msgstr "Articles" msgstr "Articles"
#: templates/cotisations/facture.html:37 #: templates/cotisations/facture.html:37
msgid "Buy" msgid "Buy"
msgstr "Acheter une cotisation" msgstr "Acheter"
#: templates/cotisations/facture.html:40 #: templates/cotisations/facture.html:40
#, python-format #, python-format
@ -714,11 +791,11 @@ msgstr "Solde maximum autorisé : %(max_balance)s €"
msgid "Current balance: %(balance)s €" msgid "Current balance: %(balance)s €"
msgstr "Solde actuel : %(balance)s €" msgstr "Solde actuel : %(balance)s €"
#: templates/cotisations/facture.html:70 #: templates/cotisations/facture.html:76
msgid "Add an extra article" msgid "Add an extra article"
msgstr "Ajouter un article supplémentaire" msgstr "Ajouter un article supplémentaire"
#: templates/cotisations/facture.html:72 #: templates/cotisations/facture.html:82
msgid "Total price: <span id=\"total_price\">0,00</span> €" msgid "Total price: <span id=\"total_price\">0,00</span> €"
msgstr "Prix total : <span id=\"total_price\">0,00</span> €" msgstr "Prix total : <span id=\"total_price\">0,00</span> €"
@ -730,9 +807,8 @@ msgstr "Factures"
msgid "Subscriptions" msgid "Subscriptions"
msgstr "Cotisations" msgstr "Cotisations"
#: templates/cotisations/index_article.html:33 #: templates/cotisations/index_article.html:33
msgid "Article types list" msgid "List of article types"
msgstr "Liste des types d'article" msgstr "Liste des types d'article"
#: templates/cotisations/index_article.html:36 #: templates/cotisations/index_article.html:36
@ -744,12 +820,12 @@ msgid "Delete one or several article types"
msgstr "Supprimer un ou plusieurs types d'article" msgstr "Supprimer un ou plusieurs types d'article"
#: templates/cotisations/index_banque.html:30 #: templates/cotisations/index_banque.html:30
#: templates/cotisations/sidebar.html:55 #: templates/cotisations/sidebar.html:60
msgid "Banks" msgid "Banks"
msgstr "Banques" msgstr "Banques"
#: templates/cotisations/index_banque.html:33 #: templates/cotisations/index_banque.html:33
msgid "Banks list" msgid "List of banks"
msgstr "Liste des banques" msgstr "Liste des banques"
#: templates/cotisations/index_banque.html:36 #: templates/cotisations/index_banque.html:36
@ -760,17 +836,26 @@ msgstr "Ajouter une banque"
msgid "Delete one or several banks" msgid "Delete one or several banks"
msgstr "Supprimer une ou plusieurs banques" msgstr "Supprimer une ou plusieurs banques"
#: templates/cotisations/index_cost_estimate.html:28
#: templates/cotisations/sidebar.html:50
msgid "Cost estimates"
msgstr "Devis"
#: templates/cotisations/index_cost_estimate.html:31
msgid "List of cost estimates"
msgstr "Liste des devis"
#: templates/cotisations/index_custom_invoice.html:28 #: templates/cotisations/index_custom_invoice.html:28
#: templates/cotisations/sidebar.html:45 #: templates/cotisations/sidebar.html:45
msgid "Custom invoices" msgid "Custom invoices"
msgstr "Factures personnalisées" msgstr "Factures personnalisées"
#: templates/cotisations/index_custom_invoice.html:31 #: templates/cotisations/index_custom_invoice.html:31
msgid "Custom invoices list" msgid "List of custom invoices"
msgstr "Liste des factures personalisées" msgstr "Liste des factures personnalisées"
#: templates/cotisations/index_paiement.html:30 #: templates/cotisations/index_paiement.html:30
#: templates/cotisations/sidebar.html:60 #: templates/cotisations/sidebar.html:65
msgid "Payment methods" msgid "Payment methods"
msgstr "Moyens de paiement" msgstr "Moyens de paiement"
@ -793,9 +878,9 @@ msgstr "Rechargement de solde"
#: templates/cotisations/payment.html:34 #: templates/cotisations/payment.html:34
#, python-format #, python-format
msgid "Pay %(amount)s €" msgid "Pay %(amount)s €"
msgstr "Recharger de %(amount)s €" msgstr "Payer %(amount)s €"
#: templates/cotisations/payment.html:42 views.py:870 #: templates/cotisations/payment.html:42 views.py:1049
msgid "Pay" msgid "Pay"
msgstr "Payer" msgstr "Payer"
@ -807,81 +892,104 @@ msgstr "Créer une facture"
msgid "Control the invoices" msgid "Control the invoices"
msgstr "Contrôler les factures" msgstr "Contrôler les factures"
#: views.py:167 #: views.py:164
msgid "You need to choose at least one article." msgid "You need to choose at least one article."
msgstr "Vous devez choisir au moins un article." msgstr "Vous devez choisir au moins un article."
#: views.py:222
msgid "The cost estimate was created."
msgstr "Le devis a été créé."
#: views.py:228 #: views.py:232 views.py:534
msgid "Cost estimate"
msgstr "Devis"
#: views.py:274
msgid "The custom invoice was created." msgid "The custom invoice was created."
msgstr "La facture personnalisée a été créée." msgstr "La facture personnalisée a été créée."
#: views.py:316 views.py:370 #: views.py:363 views.py:466
msgid "The invoice was edited." msgid "The invoice was edited."
msgstr "La facture a été modifiée." msgstr "La facture a été modifiée."
#: views.py:336 views.py:430 #: views.py:383 views.py:589
msgid "The invoice was deleted." msgid "The invoice was deleted."
msgstr "La facture a été supprimée." msgstr "La facture a été supprimée."
#: views.py:341 views.py:435 #: views.py:388 views.py:594
msgid "Invoice" msgid "Invoice"
msgstr "Facture" msgstr "Facture"
#: views.py:456 #: views.py:417
msgid "The cost estimate was edited."
msgstr "Le devis a été modifié."
#: views.py:424
msgid "Edit cost estimate"
msgstr "Modifier le devis"
#: views.py:436
msgid "An invoice was successfully created from your cost estimate."
msgstr "Une facture a bien été créée à partir de votre devis."
#: views.py:529
msgid "The cost estimate was deleted."
msgstr "Le devis a été supprimé."
#: views.py:615
msgid "The article was created." msgid "The article was created."
msgstr "L'article a été créé." msgstr "L'article a été créé."
#: views.py:461 views.py:534 views.py:627 #: views.py:620 views.py:693 views.py:786
msgid "Add" msgid "Add"
msgstr "Ajouter" msgstr "Ajouter"
#: views.py:462 #: views.py:621
msgid "New article" msgid "New article"
msgstr "Nouvel article" msgstr "Nouvel article"
#: views.py:478 #: views.py:637
msgid "The article was edited." msgid "The article was edited."
msgstr "L'article a été modifié." msgstr "L'article a été modifié."
#: views.py:484 #: views.py:643
msgid "Edit article" msgid "Edit article"
msgstr "Modifier l'article" msgstr "Modifier l'article"
#: views.py:500 #: views.py:659
msgid "The articles were deleted." msgid "The articles were deleted."
msgstr "Les articles ont été supprimés." msgstr "Les articles ont été supprimés."
#: views.py:505 views.py:605 views.py:685 #: views.py:664 views.py:764 views.py:844
msgid "Delete" msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
#: views.py:506 #: views.py:665
msgid "Delete article" msgid "Delete article"
msgstr "Supprimer l'article" msgstr "Supprimer l'article"
#: views.py:528 #: views.py:687
msgid "The payment method was created." msgid "The payment method was created."
msgstr "Le moyen de paiment a été créé." msgstr "Le moyen de paiment a été créé."
#: views.py:535 #: views.py:694
msgid "New payment method" msgid "New payment method"
msgstr "Nouveau moyen de paiement" msgstr "Nouveau moyen de paiement"
#: views.py:564 #: views.py:723
msgid "The payment method was edited." msgid "The payment method was edited."
msgstr "Le moyen de paiment a été modifié." msgstr "Le moyen de paiment a été modifié."
#: views.py:571 #: views.py:730
msgid "Edit payment method" msgid "Edit payment method"
msgstr "Modifier le moyen de paiement" msgstr "Modifier le moyen de paiement"
#: views.py:590 #: views.py:749
#, python-format #, python-format
msgid "The payment method %(method_name)s was deleted." msgid "The payment method %(method_name)s was deleted."
msgstr "Le moyen de paiement %(method_name)s a été supprimé." msgstr "Le moyen de paiement %(method_name)s a été supprimé."
#: views.py:597 #: views.py:756
#, python-format #, python-format
msgid "" msgid ""
"The payment method %(method_name)s can't be deleted " "The payment method %(method_name)s can't be deleted "
@ -890,52 +998,51 @@ msgstr ""
"Le moyen de paiement %(method_name)s ne peut pas être supprimé car il y a " "Le moyen de paiement %(method_name)s ne peut pas être supprimé car il y a "
"des factures qui l'utilisent." "des factures qui l'utilisent."
#: views.py:606 #: views.py:765
msgid "Delete payment method" msgid "Delete payment method"
msgstr "Supprimer le moyen de paiement" msgstr "Supprimer le moyen de paiement"
#: views.py:622 #: views.py:781
msgid "The bank was created." msgid "The bank was created."
msgstr "La banque a été créée." msgstr "La banque a été créée."
#: views.py:628 #: views.py:787
msgid "New bank" msgid "New bank"
msgstr "Nouvelle banque" msgstr "Nouvelle banque"
#: views.py:645 #: views.py:804
msgid "The bank was edited." msgid "The bank was edited."
msgstr "La banque a été modifiée." msgstr "La banque a été modifiée."
#: views.py:651 #: views.py:810
msgid "Edit bank" msgid "Edit bank"
msgstr "Modifier la banque" msgstr "Modifier la banque"
#: views.py:670 #: views.py:829
#, python-format #, python-format
msgid "The bank %(bank_name)s was deleted." msgid "The bank %(bank_name)s was deleted."
msgstr "La banque %(bank_name)s a été supprimée." msgstr "La banque %(bank_name)s a été supprimée."
#: views.py:677 #: views.py:836
#, python-format #, python-format
msgid "" msgid ""
"The bank %(bank_name)s can't be deleted because there " "The bank %(bank_name)s can't be deleted because there are invoices using it."
"are invoices using it."
msgstr "" msgstr ""
"La banque %(bank_name)s ne peut pas être supprimée car il y a des factures " "La banque %(bank_name)s ne peut pas être supprimée car il y a des factures "
"qui l'utilisent." "qui l'utilisent."
#: views.py:686 #: views.py:845
msgid "Delete bank" msgid "Delete bank"
msgstr "Supprimer la banque" msgstr "Supprimer la banque"
#: views.py:722 #: views.py:881
msgid "Your changes have been properly taken into account." msgid "Your changes have been properly taken into account."
msgstr "Vos modifications ont correctement été prises en compte." msgstr "Vos modifications ont correctement été prises en compte."
#: views.py:834 #: views.py:1016
msgid "You are not allowed to credit your balance." msgid "You are not allowed to credit your balance."
msgstr "Vous n'êtes pas autorisés à créditer votre solde." msgstr "Vous n'êtes pas autorisés à créditer votre solde."
#: views.py:869 #: views.py:1048
msgid "Refill your balance" msgid "Refill your balance"
msgstr "Recharger votre solde" msgstr "Recharger votre solde"

View file

@ -341,7 +341,7 @@ class CostEstimate(CustomInvoice):
"to delete a cost estimate.") "to delete a cost estimate.")
if self.final_invoice is not None: if self.final_invoice is not None:
return False, _("The cost estimate has an " return False, _("The cost estimate has an "
"invoice and cannot be deleted.") "invoice and can't be deleted.")
return True, None return True, None

View file

@ -57,7 +57,7 @@ def note_payment(request, facture, factureid):
user = facture.user user = facture.user
payment_method = find_payment_method(facture.paiement) payment_method = find_payment_method(facture.paiement)
if not payment_method or not isinstance(payment_method, NotePayment): if not payment_method or not isinstance(payment_method, NotePayment):
messages.error(request, "Erreur inconnue") messages.error(request, _("Unknown error."))
return redirect(reverse( return redirect(reverse(
'users:profil', 'users:profil',
kwargs={'userid': user.id} kwargs={'userid': user.id}
@ -85,7 +85,7 @@ def note_payment(request, facture, factureid):
) )
facture.valid = True facture.valid = True
facture.save() facture.save()
messages.success(request, "Le paiement par note a bien été effectué") messages.success(request, _("The payment with note was done."))
return redirect(reverse( return redirect(reverse(
'users:profil', 'users:profil',
kwargs={'userid': user.id} kwargs={'userid': user.id}

View file

@ -49,9 +49,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ article.available_for_everyone | tick }}</td> <td>{{ article.available_for_everyone | tick }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit article %} {% can_edit article %}
<a class="btn btn-primary btn-sm" role="button" title="{% trans "Edit" %}" href="{% url 'cotisations:edit-article' article.id %}"> {% include 'buttons/edit.html' with href='cotisations:edit-article' id=article.id %}
<i class="fa fa-edit"></i>
</a>
{% acl_end %} {% acl_end %}
{% history_button article %} {% history_button article %}
</td> </td>

View file

@ -26,7 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="table-responsive"> <div class="table-responsive">
{% if cost_estimate_list.paginator %} {% if cost_estimate_list.paginator %}
{% include 'pagination.html' with list=cost_estimate_list%} {% include 'pagination.html' with list=cost_estimate_list%}
{% endif %} {% endif %}
<table class="table table-striped"> <table class="table table-striped">
@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<tr> <tr>
<th> <th>
{% trans "Recipient" as tr_recip %} {% trans "Recipient" as tr_recip %}
{% include 'buttons/sort.html' with prefix='invoice' col='user' text=tr_user %} {% include 'buttons/sort.html' with prefix='invoice' col='user' text=tr_recip %}
</th> </th>
<th>{% trans "Designation" %}</th> <th>{% trans "Designation" %}</th>
<th>{% trans "Total price" %}</th> <th>{% trans "Total price" %}</th>
@ -96,6 +96,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table> </table>
{% if custom_invoice_list.paginator %} {% if custom_invoice_list.paginator %}
{% include 'pagination.html' with list=custom_invoice_list %} {% include 'pagination.html' with list=custom_invoice_list %}
{% endif %} {% endif %}
</div> </div>

View file

@ -28,7 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="table-responsive"> <div class="table-responsive">
{% if facture_list.paginator %} {% if facture_list.paginator %}
{% include 'pagination.html' with list=facture_list %} {% include 'pagination.html' with list=facture_list %}
{% endif %} {% endif %}
<table class="table table-striped"> <table class="table table-striped">
@ -89,7 +89,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table> </table>
{% if facture_list.paginator %} {% if facture_list.paginator %}
{% include 'pagination.html' with list=facture_list %} {% include 'pagination.html' with list=facture_list %}
{% endif %} {% endif %}
</div> </div>

View file

@ -26,7 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="table-responsive"> <div class="table-responsive">
{% if custom_invoice_list.paginator %} {% if custom_invoice_list.paginator %}
{% include 'pagination.html' with list=custom_invoice_list %} {% include 'pagination.html' with list=custom_invoice_list %}
{% endif %} {% endif %}
<table class="table table-striped"> <table class="table table-striped">
@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<tr> <tr>
<th> <th>
{% trans "Recipient" as tr_recip %} {% trans "Recipient" as tr_recip %}
{% include 'buttons/sort.html' with prefix='invoice' col='user' text=tr_user %} {% include 'buttons/sort.html' with prefix='invoice' col='user' text=tr_recip %}
</th> </th>
<th>{% trans "Designation" %}</th> <th>{% trans "Designation" %}</th>
<th>{% trans "Total price" %}</th> <th>{% trans "Total price" %}</th>
@ -51,7 +51,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% include 'buttons/sort.html' with prefix='invoice' col='id' text=tr_invoice_id %} {% include 'buttons/sort.html' with prefix='invoice' col='id' text=tr_invoice_id %}
</th> </th>
<th> <th>
{% trans "Paid" as tr_invoice_paid%} {% trans "Paid" as tr_invoice_paid %}
{% include 'buttons/sort.html' with prefix='invoice' col='paid' text=tr_invoice_paid %} {% include 'buttons/sort.html' with prefix='invoice' col='paid' text=tr_invoice_paid %}
</th> </th>
<th></th> <th></th>
@ -84,6 +84,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table> </table>
{% if custom_invoice_list.paginator %} {% if custom_invoice_list.paginator %}
{% include 'pagination.html' with list=custom_invoice_list %} {% include 'pagination.html' with list=custom_invoice_list %}
{% endif %} {% endif %}
</div> </div>

View file

@ -45,9 +45,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</td> </td>
<td class="text-right"> <td class="text-right">
{% can_edit paiement %} {% can_edit paiement %}
<a class="btn btn-primary btn-sm" role="button" title="{% trans "Edit" %}" href="{% url 'cotisations:edit-paiement' paiement.id %}"> {% include 'buttons/edit.html' with href='cotisations:edit-paiement' id=paiement.id %}
<i class="fa fa-edit"></i>
</a>
{% acl_end %} {% acl_end %}
{% history_button paiement %} {% history_button paiement %}
</td> </td>

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<h2>{% trans "Invoice control and validation" %}</h2> <h2>{% trans "Invoice control and validation" %}</h2>
{% if facture_list.paginator %} {% if facture_list.paginator %}
{% include 'pagination.html' with list=facture_list %} {% include 'pagination.html' with list=facture_list %}
{% endif %} {% endif %}
<form class="form" method="post"> <form class="form" method="post">
@ -110,6 +110,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endblock %} {% endblock %}
{% if facture_list.paginator %} {% if facture_list.paginator %}
{% include 'pagination.html' with list=facture_list %} {% include 'pagination.html' with list=facture_list %}
{% endif %} {% endif %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -38,7 +38,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if title %} {% if title %}
<h3>{{title}}</h3> <h3>{{title}}</h3>
{% else %} {% else %}
<h3>{% trans "Edit the invoice" %}</h3> <h3>{% trans "Edit invoice" %}</h3>
{% endif %} {% endif %}
{% massive_bootstrap_form factureform 'user' %} {% massive_bootstrap_form factureform 'user' %}
{{ venteform.management_form }} {{ venteform.management_form }}

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block title %}{% trans "Articles" %}{% endblock %} {% block title %}{% trans "Articles" %}{% endblock %}
{% block content %} {% block content %}
<h2>{% trans "Article types list" %}</h2> <h2>{% trans "List of article types" %}</h2>
{% can_create Article %} {% can_create Article %}
<a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:add-article' %}"> <a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:add-article' %}">
<i class="fa fa-cart-plus"></i> {% trans "Add an article type" %} <i class="fa fa-cart-plus"></i> {% trans "Add an article type" %}

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block title %}{% trans "Banks" %}{% endblock %} {% block title %}{% trans "Banks" %}{% endblock %}
{% block content %} {% block content %}
<h2>{% trans "Banks list" %}</h2> <h2>{% trans "List of banks" %}</h2>
{% can_create Banque %} {% can_create Banque %}
<a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:add-banque' %}"> <a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:add-banque' %}">
<i class="fa fa-cart-plus"></i> {% trans "Add a bank" %} <i class="fa fa-cart-plus"></i> {% trans "Add a bank" %}

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -28,9 +28,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block title %}{% trans "Cost estimates" %}{% endblock %} {% block title %}{% trans "Cost estimates" %}{% endblock %}
{% block content %} {% block content %}
<h2>{% trans "Cost estimates list" %}</h2> <h2>{% trans "List of cost estimates" %}</h2>
{% can_create CostEstimate %} {% can_create CostEstimate %}
{% include "buttons/add.html" with href='cotisations:new-cost-estimate'%} {% include 'buttons/add.html' with href='cotisations:new-cost-estimate'%}
{% acl_end %} {% acl_end %}
{% include 'cotisations/aff_cost_estimate.html' %} {% include 'cotisations/aff_cost_estimate.html' %}
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -28,9 +28,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block title %}{% trans "Custom invoices" %}{% endblock %} {% block title %}{% trans "Custom invoices" %}{% endblock %}
{% block content %} {% block content %}
<h2>{% trans "Custom invoices list" %}</h2> <h2>{% trans "List of custom invoices" %}</h2>
{% can_create CustomInvoice %} {% can_create CustomInvoice %}
{% include "buttons/add.html" with href='cotisations:new-custom-invoice'%} {% include 'buttons/add.html' with href='cotisations:new-custom-invoice'%}
{% acl_end %} {% acl_end %}
{% include 'cotisations/aff_custom_invoice.html' with custom_invoice_list=custom_invoice_list %} {% include 'cotisations/aff_custom_invoice.html' with custom_invoice_list=custom_invoice_list %}
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "base.html" %} {% extends 'base.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -28,40 +28,40 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block sidebar %} {% block sidebar %}
{% can_create CustomInvoice %} {% can_create CustomInvoice %}
<a class="list-group-item list-group-item-success" href="{% url "cotisations:new-custom-invoice" %}"> <a class="list-group-item list-group-item-success" href="{% url 'cotisations:new-custom-invoice' %}">
<i class="fa fa-plus"></i> {% trans "Create an invoice" %} <i class="fa fa-plus"></i> {% trans "Create an invoice" %}
</a> </a>
<a class="list-group-item list-group-item-warning" href="{% url "cotisations:control" %}"> <a class="list-group-item list-group-item-warning" href="{% url 'cotisations:control' %}">
<i class="fa fa-eye"></i> {% trans "Control the invoices" %} <i class="fa fa-eye"></i> {% trans "Control the invoices" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Facture %} {% can_view_all Facture %}
<a class="list-group-item list-group-item-info" href="{% url "cotisations:index" %}"> <a class="list-group-item list-group-item-info" href="{% url 'cotisations:index' %}">
<i class="fa fa-list-ul"></i> {% trans "Invoices" %} <i class="fa fa-list-ul"></i> {% trans "Invoices" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all CustomInvoice %} {% can_view_all CustomInvoice %}
<a class="list-group-item list-group-item-info" href="{% url "cotisations:index-custom-invoice" %}"> <a class="list-group-item list-group-item-info" href="{% url 'cotisations:index-custom-invoice' %}">
<i class="fa fa-list-ul"></i> {% trans "Custom invoices" %} <i class="fa fa-list-ul"></i> {% trans "Custom invoices" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all CostEstimate %} {% can_view_all CostEstimate %}
<a class="list-group-item list-group-item-info" href="{% url "cotisations:index-cost-estimate" %}"> <a class="list-group-item list-group-item-info" href="{% url 'cotisations:index-cost-estimate' %}">
<i class="fa fa-list-ul"></i> {% trans "Cost estimate" %} <i class="fa fa-list-ul"></i> {% trans "Cost estimates" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Article %} {% can_view_all Article %}
<a class="list-group-item list-group-item-info" href="{% url "cotisations:index-article" %}"> <a class="list-group-item list-group-item-info" href="{% url 'cotisations:index-article' %}">
<i class="fa fa-list-ul"></i> {% trans "Available articles" %} <i class="fa fa-list-ul"></i> {% trans "Available articles" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Banque %} {% can_view_all Banque %}
<a class="list-group-item list-group-item-info" href="{% url "cotisations:index-banque" %}"> <a class="list-group-item list-group-item-info" href="{% url 'cotisations:index-banque' %}">
<i class="fa fa-list-ul"></i> {% trans "Banks" %} <i class="fa fa-list-ul"></i> {% trans "Banks" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Paiement %} {% can_view_all Paiement %}
<a class="list-group-item list-group-item-info" href="{% url "cotisations:index-paiement" %}"> <a class="list-group-item list-group-item-info" href="{% url 'cotisations:index-paiement' %}">
<i class="fa fa-list-ul"></i> {% trans "Payment methods" %} <i class="fa fa-list-ul"></i> {% trans "Payment methods" %}
</a> </a>
{% acl_end %} {% acl_end %}

View file

@ -421,7 +421,7 @@ def edit_cost_estimate(request, invoice, **kwargs):
return form({ return form({
'factureform': invoice_form, 'factureform': invoice_form,
'venteform': purchase_form, 'venteform': purchase_form,
'title': "Edit the cost estimate" 'title': _("Edit cost estimate")
}, 'cotisations/edit_facture.html', request) }, 'cotisations/edit_facture.html', request)
@ -531,7 +531,7 @@ def del_cost_estimate(request, estimate, **_kwargs):
return redirect(reverse('cotisations:index-cost-estimate')) return redirect(reverse('cotisations:index-cost-estimate'))
return form({ return form({
'objet': estimate, 'objet': estimate,
'objet_name': _("Cost Estimate") 'objet_name': _("Cost estimate")
}, 'cotisations/delete.html', request) }, 'cotisations/delete.html', request)
@ -833,8 +833,8 @@ def del_banque(request, instances):
except ProtectedError: except ProtectedError:
messages.error( messages.error(
request, request,
_("The bank %(bank_name)s can't be deleted \ _("The bank %(bank_name)s can't be deleted because there"
because there are invoices using it.") % { " are invoices using it.") % {
'bank_name': bank_del 'bank_name': bank_del
} }
) )

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-15 20:12+0200\n" "POT-Creation-Date: 2019-01-08 23:16+0100\n"
"PO-Revision-Date: 2018-06-23 16:01+0200\n" "PO-Revision-Date: 2018-06-23 16:01+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"
@ -57,7 +57,7 @@ msgstr "Commentaire"
#: templates/logs/aff_stats_logs.html:58 templates/logs/aff_summary.html:62 #: templates/logs/aff_stats_logs.html:58 templates/logs/aff_summary.html:62
#: templates/logs/aff_summary.html:85 templates/logs/aff_summary.html:104 #: templates/logs/aff_summary.html:85 templates/logs/aff_summary.html:104
#: templates/logs/aff_summary.html:123 templates/logs/aff_summary.html:142 #: templates/logs/aff_summary.html:128 templates/logs/aff_summary.html:147
msgid "Cancel" msgid "Cancel"
msgstr "Annuler" msgstr "Annuler"
@ -113,15 +113,19 @@ msgstr "%(username)s a mis à jour"
#: templates/logs/aff_summary.html:113 #: templates/logs/aff_summary.html:113
#, python-format #, python-format
msgid "%(username)s has sold %(number)sx %(name)s to" msgid "%(username)s has sold %(number)sx %(name)s"
msgstr "%(username)s a vendu %(number)sx %(name)s à" msgstr "%(username)s a vendu %(number)sx %(name)s"
#: templates/logs/aff_summary.html:116 #: templates/logs/aff_summary.html:116
msgid " to"
msgstr " à"
#: templates/logs/aff_summary.html:119
#, python-format #, python-format
msgid "+%(duration)s months" msgid "+%(duration)s months"
msgstr "+%(duration)s mois" msgstr "+%(duration)s mois"
#: templates/logs/aff_summary.html:132 #: templates/logs/aff_summary.html:137
#, python-format #, python-format
msgid "%(username)s has edited an interface of" msgid "%(username)s has edited an interface of"
msgstr "%(username)s a modifié une interface de" msgstr "%(username)s a modifié une interface de"
@ -149,7 +153,7 @@ msgstr "Confirmer"
msgid "Statistics" msgid "Statistics"
msgstr "Statistiques" msgstr "Statistiques"
#: templates/logs/index.html:32 templates/logs/stats_logs.html:32 views.py:403 #: templates/logs/index.html:32 templates/logs/stats_logs.html:32 views.py:414
msgid "Actions performed" msgid "Actions performed"
msgstr "Actions effectuées" msgstr "Actions effectuées"
@ -173,7 +177,7 @@ msgstr "Base de données"
msgid "Wiring actions" msgid "Wiring actions"
msgstr "Actions de câblage" msgstr "Actions de câblage"
#: templates/logs/sidebar.html:53 views.py:325 #: templates/logs/sidebar.html:53 views.py:336
msgid "Users" msgid "Users"
msgstr "Utilisateurs" msgstr "Utilisateurs"
@ -189,150 +193,154 @@ msgstr "Statistiques sur la base de données"
msgid "Statistics about users" msgid "Statistics about users"
msgstr "Statistiques sur les utilisateurs" msgstr "Statistiques sur les utilisateurs"
#: views.py:191 #: views.py:194
msgid "Nonexistent revision." msgid "Nonexistent revision."
msgstr "Révision inexistante." msgstr "Révision inexistante."
#: views.py:194 #: views.py:197
msgid "The action was deleted." msgid "The action was deleted."
msgstr "L'action a été supprimée." msgstr "L'action a été supprimée."
#: views.py:227 #: views.py:230
msgid "Category" msgid "Category"
msgstr "Catégorie" msgstr "Catégorie"
#: views.py:228 #: views.py:231
msgid "Number of users (members and clubs)" msgid "Number of users (members and clubs)"
msgstr "Nombre d'utilisateurs (adhérents et clubs)" msgstr "Nombre d'utilisateurs (adhérents et clubs)"
#: views.py:229 #: views.py:232
msgid "Number of members" msgid "Number of members"
msgstr "Nombre d'adhérents" msgstr "Nombre d'adhérents"
#: views.py:230 #: views.py:233
msgid "Number of clubs" msgid "Number of clubs"
msgstr "Nombre de clubs" msgstr "Nombre de clubs"
#: views.py:234 #: views.py:237
msgid "Activated users" msgid "Activated users"
msgstr "Utilisateurs activés" msgstr "Utilisateurs activés"
#: views.py:242 #: views.py:245
msgid "Disabled users" msgid "Disabled users"
msgstr "Utilisateurs désactivés" msgstr "Utilisateurs désactivés"
#: views.py:250 #: views.py:253
msgid "Archived users" msgid "Archived users"
msgstr "Utilisateurs archivés" msgstr "Utilisateurs archivés"
#: views.py:258 #: views.py:261
msgid "Not yet active users"
msgstr "Utilisateurs pas encore actifs"
#: views.py:269
msgid "Contributing members" msgid "Contributing members"
msgstr "Adhérents cotisants" msgstr "Adhérents cotisants"
#: views.py:264 #: views.py:275
msgid "Users benefiting from a connection" msgid "Users benefiting from a connection"
msgstr "Utilisateurs bénéficiant d'une connexion" msgstr "Utilisateurs bénéficiant d'une connexion"
#: views.py:270 #: views.py:281
msgid "Banned users" msgid "Banned users"
msgstr "Utilisateurs bannis" msgstr "Utilisateurs bannis"
#: views.py:276 #: views.py:287
msgid "Users benefiting from a free connection" msgid "Users benefiting from a free connection"
msgstr "Utilisateurs bénéficiant d'une connexion gratuite" msgstr "Utilisateurs bénéficiant d'une connexion gratuite"
#: views.py:282 #: views.py:293
msgid "Active interfaces (with access to the network)" msgid "Active interfaces (with access to the network)"
msgstr "Interfaces actives (ayant accès au réseau)" msgstr "Interfaces actives (ayant accès au réseau)"
#: views.py:292 #: views.py:303
msgid "Active interfaces assigned IPv4" msgid "Active interfaces assigned IPv4"
msgstr "Interfaces actives assignées IPv4" msgstr "Interfaces actives assignées IPv4"
#: views.py:305 #: views.py:316
msgid "IP range" msgid "IP range"
msgstr "Plage d'IP" msgstr "Plage d'IP"
#: views.py:306 #: views.py:317
msgid "VLAN" msgid "VLAN"
msgstr "VLAN" msgstr "VLAN"
#: views.py:307 #: views.py:318
msgid "Total number of IP addresses" msgid "Total number of IP addresses"
msgstr "Nombre total d'adresses IP" msgstr "Nombre total d'adresses IP"
#: views.py:308 #: views.py:319
msgid "Number of assigned IP addresses" msgid "Number of assigned IP addresses"
msgstr "Nombre d'adresses IP non assignées" msgstr "Nombre d'adresses IP non assignées"
#: views.py:309 #: views.py:320
msgid "Number of IP address assigned to an activated machine" msgid "Number of IP address assigned to an activated machine"
msgstr "Nombre d'adresses IP assignées à une machine activée" msgstr "Nombre d'adresses IP assignées à une machine activée"
#: views.py:310 #: views.py:321
msgid "Number of nonassigned IP addresses" msgid "Number of nonassigned IP addresses"
msgstr "Nombre d'adresses IP non assignées" msgstr "Nombre d'adresses IP non assignées"
#: views.py:337 #: views.py:348
msgid "Subscriptions" msgid "Subscriptions"
msgstr "Cotisations" msgstr "Cotisations"
#: views.py:359 views.py:420 #: views.py:370 views.py:431
msgid "Machines" msgid "Machines"
msgstr "Machines" msgstr "Machines"
#: views.py:386 #: views.py:397
msgid "Topology" msgid "Topology"
msgstr "Topologie" msgstr "Topologie"
#: views.py:405 #: views.py:416
msgid "Number of actions" msgid "Number of actions"
msgstr "Nombre d'actions" msgstr "Nombre d'actions"
#: views.py:419 views.py:437 views.py:442 views.py:447 views.py:462 #: views.py:430 views.py:448 views.py:453 views.py:458 views.py:473
msgid "User" msgid "User"
msgstr "Utilisateur" msgstr "Utilisateur"
#: views.py:423 #: views.py:434
msgid "Invoice" msgid "Invoice"
msgstr "Facture" msgstr "Facture"
#: views.py:426 #: views.py:437
msgid "Ban" msgid "Ban"
msgstr "Bannissement" msgstr "Bannissement"
#: views.py:429 #: views.py:440
msgid "Whitelist" msgid "Whitelist"
msgstr "Accès gracieux" msgstr "Accès gracieux"
#: views.py:432 #: views.py:443
msgid "Rights" msgid "Rights"
msgstr "Droits" msgstr "Droits"
#: views.py:436 #: views.py:447
msgid "School" msgid "School"
msgstr "Établissement" msgstr "Établissement"
#: views.py:441 #: views.py:452
msgid "Payment method" msgid "Payment method"
msgstr "Moyen de paiement" msgstr "Moyen de paiement"
#: views.py:446 #: views.py:457
msgid "Bank" msgid "Bank"
msgstr "Banque" msgstr "Banque"
#: views.py:463 #: views.py:474
msgid "Action" msgid "Action"
msgstr "Action" msgstr "Action"
#: views.py:494 #: views.py:505
msgid "No model found." msgid "No model found."
msgstr "Aucun modèle trouvé." msgstr "Aucun modèle trouvé."
#: views.py:500 #: views.py:511
msgid "Nonexistent entry." msgid "Nonexistent entry."
msgstr "Entrée inexistante." msgstr "Entrée inexistante."
#: views.py:507 #: views.py:518
msgid "You don't have the right to access this menu." msgid "You don't have the right to access this menu."
msgstr "Vous n'avez pas le droit d'accéder à ce menu." msgstr "Vous n'avez pas le droit d'accéder à ce menu."

View file

@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endcomment %} {% endcomment %}
{% if revisions_list.paginator %} {% if revisions_list.paginator %}
{% include "pagination.html" with list=revisions_list %} {% include 'pagination.html' with list=revisions_list %}
{% endif %} {% endif %}
{% load logs_extra %} {% load logs_extra %}
@ -36,9 +36,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<th>{% trans "Edited object" %}</th> <th>{% trans "Edited object" %}</th>
<th>{% trans "Object type" %}</th> <th>{% trans "Object type" %}</th>
{% trans "Edited by" as tr_edited_by %} {% trans "Edited by" as tr_edited_by %}
<th>{% include "buttons/sort.html" with prefix='logs' col='author' text=tr_edited_by %}</th> <th>{% include 'buttons/sort.html' with prefix='logs' col='author' text=tr_edited_by %}</th>
{% trans "Date of editing" as tr_date_of_editing %} {% trans "Date of editing" as tr_date_of_editing %}
<th>{% include "buttons/sort.html" with prefix='logs' col='date' text=tr_date_of_editing %}</th> <th>{% include 'buttons/sort.html' with prefix='logs' col='date' text=tr_date_of_editing %}</th>
<th>{% trans "Comment" %}</th> <th>{% trans "Comment" %}</th>
<th></th> <th></th>
</tr> </tr>
@ -65,6 +65,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table> </table>
{% if revisions_list.paginator %} {% if revisions_list.paginator %}
{% include "pagination.html" with list=revisions_list %} {% include 'pagination.html' with list=revisions_list %}
{% endif %} {% endif %}

View file

@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endcomment %} {% endcomment %}
{% if versions_list.paginator %} {% if versions_list.paginator %}
{% include "pagination.html" with list=versions_list %} {% include 'pagination.html' with list=versions_list %}
{% endif %} {% endif %}
{% load logs_extra %} {% load logs_extra %}
@ -35,7 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<thead> <thead>
<tr> <tr>
{% trans "Date" as tr_date %} {% trans "Date" as tr_date %}
<th>{% include "buttons/sort.html" with prefix='sum' col='date' text=tr_date %}</th> <th>{% include 'buttons/sort.html' with prefix='sum' col='date' text=tr_date %}</th>
<th>{% trans "Editing" %}</th> <th>{% trans "Editing" %}</th>
<th></th> <th></th>
</tr> </tr>
@ -154,6 +154,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table> </table>
{% if versions_list.paginator %} {% if versions_list.paginator %}
{% include "pagination.html" with list=versions_list %} {% include 'pagination.html' with list=versions_list %}
{% endif %} {% endif %}

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %} {% extends 'logs/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %} {% extends 'logs/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %} {% block content %}
<h2>{% trans "Actions performed" %}</h2> <h2>{% trans "Actions performed" %}</h2>
{% include "logs/aff_summary.html" with versions_list=versions_list %} {% include 'logs/aff_summary.html' with versions_list=versions_list %}
<br /> <br />
<br /> <br />
<br /> <br />

View file

@ -1,4 +1,4 @@
{% extends "base.html" %} {% extends 'base.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -28,27 +28,27 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block sidebar %} {% block sidebar %}
{% can_view_app logs %} {% can_view_app logs %}
<a class="list-group-item list-group-item-info" href="{% url "logs:index" %}"> <a class="list-group-item list-group-item-info" href="{% url 'logs:index' %}">
<i class="fa fa-clipboard"></i> <i class="fa fa-clipboard"></i>
{% trans "Summary" %} {% trans "Summary" %}
</a> </a>
<a class="list-group-item list-group-item-info" href="{% url "logs:stats-logs" %}"> <a class="list-group-item list-group-item-info" href="{% url 'logs:stats-logs' %}">
<i class="fa fa-calendar"></i> <i class="fa fa-calendar"></i>
{% trans "Events" %} {% trans "Events" %}
</a> </a>
<a class="list-group-item list-group-item-info" href="{% url "logs:stats-general" %}"> <a class="list-group-item list-group-item-info" href="{% url 'logs:stats-general' %}">
<i class="fa fa-area-chart"></i> <i class="fa fa-area-chart"></i>
{% trans "General" %} {% trans "General" %}
</a> </a>
<a class="list-group-item list-group-item-info" href="{% url "logs:stats-models" %}"> <a class="list-group-item list-group-item-info" href="{% url 'logs:stats-models' %}">
<i class="fa fa-database"></i> <i class="fa fa-database"></i>
{% trans "Database" %} {% trans "Database" %}
</a> </a>
<a class="list-group-item list-group-item-info" href="{% url "logs:stats-actions" %}"> <a class="list-group-item list-group-item-info" href="{% url 'logs:stats-actions' %}">
<i class="fa fa-plug"></i> <i class="fa fa-plug"></i>
{% trans "Wiring actions" %} {% trans "Wiring actions" %}
</a> </a>
<a class="list-group-item list-group-item-info" href="{% url "logs:stats-users" %}"> <a class="list-group-item list-group-item-info" href="{% url 'logs:stats-users' %}">
<i class="fa fa-users"></i> <i class="fa fa-users"></i>
{% trans "Users" %} {% trans "Users" %}
</a> </a>

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %} {% extends 'logs/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %} {% block content %}
<h2>{% trans "General statistics" %}</h2> <h2>{% trans "General statistics" %}</h2>
{% include "logs/aff_stats_general.html" with stats_list=stats_list %} {% include 'logs/aff_stats_general.html' with stats_list=stats_list %}
<br /> <br />
<br /> <br />
<br /> <br />

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %} {% extends 'logs/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %} {% block content %}
<h2>{% trans "Actions performed" %}</h2> <h2>{% trans "Actions performed" %}</h2>
{% include "logs/aff_stats_logs.html" with revisions_list=revisions_list %} {% include 'logs/aff_stats_logs.html' with revisions_list=revisions_list %}
<br /> <br />
<br /> <br />
<br /> <br />

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %} {% extends 'logs/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %} {% block content %}
<h2>{% trans "Database statistics" %}</h2> <h2>{% trans "Database statistics" %}</h2>
{% include "logs/aff_stats_models.html" with stats_list=stats_list %} {% include 'logs/aff_stats_models.html' with stats_list=stats_list %}
<br /> <br />
<br /> <br />
<br /> <br />

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %} {% extends 'logs/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %} {% block content %}
<h2>{% trans "Statistics about users" %}</h2> <h2>{% trans "Statistics about users" %}</h2>
{% include "logs/aff_stats_users.html" with stats_list=stats_list %} {% include 'logs/aff_stats_users.html' with stats_list=stats_list %}
<br /> <br />
<br /> <br />
<br /> <br />

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2019-01-08 22:23
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('machines', '0100_auto_20190102_1753'),
]
operations = [
migrations.AlterModelOptions(
name='ouvertureport',
options={'verbose_name': 'ports opening', 'verbose_name_plural': 'ports openings'},
),
migrations.AlterField(
model_name='nas',
name='port_access_mode',
field=models.CharField(choices=[('802.1X', '802.1X'), ('Mac-address', 'MAC-address')], default='802.1X', max_length=32),
),
migrations.AlterField(
model_name='vlan',
name='igmp',
field=models.BooleanField(default=False, help_text='v4 multicast management'),
),
migrations.AlterField(
model_name='vlan',
name='mld',
field=models.BooleanField(default=False, help_text='v6 multicast management'),
),
]

View file

@ -201,7 +201,7 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
if interfaces_set: if interfaces_set:
return str(interfaces_set.domain.name) return str(interfaces_set.domain.name)
else: else:
return "None" return _("No name")
@cached_property @cached_property
def complete_name(self): def complete_name(self):
@ -340,7 +340,7 @@ class IpType(RevMixin, AclMixin, models.Model):
("use_all_iptype", _("Can use all IP types")), ("use_all_iptype", _("Can use all IP types")),
) )
verbose_name = _("IP type") verbose_name = _("IP type")
verbose_name_plural = "IP types" verbose_name_plural = _("IP types")
@cached_property @cached_property
def ip_range(self): def ip_range(self):
@ -534,11 +534,11 @@ class Vlan(RevMixin, AclMixin, models.Model):
dhcpv6_snooping = models.BooleanField(default=False) dhcpv6_snooping = models.BooleanField(default=False)
igmp = models.BooleanField( igmp = models.BooleanField(
default=False, default=False,
help_text="Gestion multicast v4" help_text=_("v4 multicast management")
) )
mld = models.BooleanField( mld = models.BooleanField(
default=False, default=False,
help_text="Gestion multicast v6" help_text=_("v6 multicast management")
) )
class Meta: class Meta:
@ -559,7 +559,7 @@ class Nas(RevMixin, AclMixin, models.Model):
default_mode = '802.1X' default_mode = '802.1X'
AUTH = ( AUTH = (
('802.1X', '802.1X'), ('802.1X', '802.1X'),
('Mac-address', 'Mac-address'), ('Mac-address', _("MAC-address")),
) )
name = models.CharField(max_length=255, unique=True) name = models.CharField(max_length=255, unique=True)
@ -666,7 +666,7 @@ class SOA(RevMixin, AclMixin, models.Model):
utilisée dans les migrations de la BDD. """ utilisée dans les migrations de la BDD. """
return cls.objects.get_or_create( return cls.objects.get_or_create(
name=_("SOA to edit"), name=_("SOA to edit"),
mail="postmaser@example.com" mail="postmaster@example.com"
)[0].pk )[0].pk
@ -934,7 +934,7 @@ class SshFp(RevMixin, AclMixin, models.Model):
machine = models.ForeignKey('Machine', on_delete=models.CASCADE) machine = models.ForeignKey('Machine', on_delete=models.CASCADE)
pub_key_entry = models.TextField( pub_key_entry = models.TextField(
help_text="SSH public key", help_text=_("SSH public key"),
max_length=2048 max_length=2048
) )
algo = models.CharField( algo = models.CharField(
@ -942,7 +942,7 @@ class SshFp(RevMixin, AclMixin, models.Model):
max_length=32 max_length=32
) )
comment = models.CharField( comment = models.CharField(
help_text="Comment", help_text=_("Comment"),
max_length=255, max_length=255,
null=True, null=True,
blank=True blank=True
@ -1872,7 +1872,8 @@ class OuverturePort(RevMixin, AclMixin, models.Model):
) )
class Meta: class Meta:
verbose_name = _("ports openings") verbose_name = _("ports opening")
verbose_name_plural = _("ports openings")
def __str__(self): def __str__(self):
if self.begin == self.end: if self.begin == self.end:

View file

@ -38,7 +38,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ alias }}</td> <td>{{ alias }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit alias %} {% can_edit alias %}
{% include 'buttons/edit.html' with href='machines:edit-alias' id=alias.id %} {% include 'buttons/edit.html' with href='machines:edit-alias' id=alias.id %}
{% acl_end %} {% acl_end %}
{% history_button alias %} {% history_button alias %}
</td> </td>

View file

@ -38,7 +38,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ dname.dns_entry }}</td> <td>{{ dname.dns_entry }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit dname %} {% can_edit dname %}
{% include 'buttons/edit.html' with href='machines:edit-dname' id=dname.id %} {% include 'buttons/edit.html' with href='machines:edit-dname' id=dname.id %}
{% acl_end %} {% acl_end %}
{% history_button dname %} {% history_button dname %}
</td> </td>

View file

@ -54,7 +54,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ extension.dnssec|tick }}</td> <td>{{ extension.dnssec|tick }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit extension %} {% can_edit extension %}
{% include 'buttons/edit.html' with href='machines:edit-extension' id=extension.id %} {% include 'buttons/edit.html' with href='machines:edit-extension' id=extension.id %}
{% acl_end %} {% acl_end %}
{% history_button extension %} {% history_button extension %}
</td> </td>

View file

@ -56,7 +56,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ type.ouverture_ports }}</td> <td>{{ type.ouverture_ports }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit type %} {% can_edit type %}
{% include 'buttons/edit.html' with href='machines:edit-iptype' id=type.id %} {% include 'buttons/edit.html' with href='machines:edit-iptype' id=type.id %}
{% acl_end %} {% acl_end %}
{% history_button type %} {% history_button type %}
</td> </td>

View file

@ -40,10 +40,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ ipv6.slaac_ip }}</td> <td>{{ ipv6.slaac_ip }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit ipv6 %} {% can_edit ipv6 %}
{% include 'buttons/edit.html' with href='machines:edit-ipv6list' id=ipv6.id %} {% include 'buttons/edit.html' with href='machines:edit-ipv6list' id=ipv6.id %}
{% acl_end %} {% acl_end %}
{% can_delete ipv6 %} {% can_delete ipv6 %}
{% include 'buttons/suppr.html' with href='machines:del-ipv6list' id=ipv6.id %} {% include 'buttons/suppr.html' with href='machines:del-ipv6list' id=ipv6.id %}
{% acl_end %} {% acl_end %}
{% history_button ipv6 %} {% history_button ipv6 %}
</td> </td>

View file

@ -28,7 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="table-responsive"> <div class="table-responsive">
{% if machines_list.paginator %} {% if machines_list.paginator %}
{% include "pagination.html" with list=machines_list go_to_id="machines" %} {% include 'pagination.html' with list=machines_list go_to_id="machines" %}
{% endif %} {% endif %}
<table class="table" id="machines_table"> <table class="table" id="machines_table">
@ -41,7 +41,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</colgroup> </colgroup>
<thead> <thead>
{% trans "DNS name" as tr_dns_name %} {% trans "DNS name" as tr_dns_name %}
<th>{% include "buttons/sort.html" with prefix='machine' col='name' text=tr_dns_name %}</th> <th>{% include 'buttons/sort.html' with prefix='machine' col='name' text=tr_dns_name %}</th>
<th>{% trans "Type" %}</th> <th>{% trans "Type" %}</th>
<th>{% trans "MAC address" %}</th> <th>{% trans "MAC address" %}</th>
<th>{% trans "IP address" %}</th> <th>{% trans "IP address" %}</th>
@ -52,19 +52,19 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td colspan="4"> <td colspan="4">
{% trans "No name" as tr_no_name %} {% trans "No name" as tr_no_name %}
{% trans "View the profile" as tr_view_the_profile %} {% trans "View the profile" as tr_view_the_profile %}
<b>{{ machine.get_name|default:'<i>tr_no_name</i>' }}</b> <i class="fa fa-angle-right"></i> <b>{{ machine.get_name|default:tr_no_name }}</b> <i class="fa fa-angle-right"></i>
<a href="{% url 'users:profil' userid=machine.user.id %}" title=tr_view_the_profile> <a href="{% url 'users:profil' userid=machine.user.id %}" title=tr_view_the_profile>
<i class="fa fa-user"></i> {{ machine.user }} <i class="fa fa-user"></i> {{ machine.user }}
</a> </a>
</td> </td>
<td class="text-right"> <td class="text-right">
{% can_create Interface machine.id %} {% can_create Interface machine.id %}
{% trans "Create an interface" as tr_create_an_interface %} {% trans "Create an interface" as tr_create_an_interface %}
{% include 'buttons/add.html' with href='machines:new-interface' id=machine.id desc=tr_create_an_interface %} {% include 'buttons/add.html' with href='machines:new-interface' id=machine.id desc=tr_create_an_interface %}
{% acl_end %} {% acl_end %}
{% history_button machine %} {% history_button machine %}
{% can_delete machine %} {% can_delete machine %}
{% include 'buttons/suppr.html' with href='machines:del-machine' id=machine.id %} {% include 'buttons/suppr.html' with href='machines:del-machine' id=machine.id %}
{% acl_end %} {% acl_end %}
</td> </td>
</tr> </tr>
@ -153,7 +153,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</div> </div>
{% history_button interface %} {% history_button interface %}
{% can_delete interface %} {% can_delete interface %}
{% include 'buttons/suppr.html' with href='machines:del-interface' id=interface.id %} {% include 'buttons/suppr.html' with href='machines:del-interface' id=interface.id %}
{% acl_end %} {% acl_end %}
</div> </div>
</td> </td>
@ -215,6 +215,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</script> </script>
{% if machines_list.paginator %} {% if machines_list.paginator %}
{% include "pagination.html" with list=machines_list go_to_id="machines" %} {% include 'pagination.html' with list=machines_list go_to_id="machines" %}
{% endif %} {% endif %}
</div> </div>

View file

@ -40,7 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ type.ip_type }}</td> <td>{{ type.ip_type }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit type %} {% can_edit type %}
{% include 'buttons/edit.html' with href='machines:edit-machinetype' id=type.id %} {% include 'buttons/edit.html' with href='machines:edit-machinetype' id=type.id %}
{% acl_end %} {% acl_end %}
{% history_button type %} {% history_button type %}
</td> </td>

View file

@ -42,7 +42,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ mx.name }}</td> <td>{{ mx.name }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit mx %} {% can_edit mx %}
{% include 'buttons/edit.html' with href='machines:edit-mx' id=mx.id %} {% include 'buttons/edit.html' with href='machines:edit-mx' id=mx.id %}
{% acl_end %} {% acl_end %}
{% history_button mx %} {% history_button mx %}
</td> </td>

View file

@ -47,7 +47,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ nas.autocapture_mac|tick }}</td> <td>{{ nas.autocapture_mac|tick }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit nas %} {% can_edit nas %}
{% include 'buttons/edit.html' with href='machines:edit-nas' id=nas.id %} {% include 'buttons/edit.html' with href='machines:edit-nas' id=nas.id %}
{% acl_end %} {% acl_end %}
{% history_button nas %} {% history_button nas %}
</td> </td>

View file

@ -40,7 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ ns.ns }}</td> <td>{{ ns.ns }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit ns %} {% can_edit ns %}
{% include 'buttons/edit.html' with href='machines:edit-ns' id=ns.id %} {% include 'buttons/edit.html' with href='machines:edit-ns' id=ns.id %}
{% acl_end %} {% acl_end %}
{% history_button ns %} {% history_button ns %}
</td> </td>

View file

@ -44,7 +44,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{% for serv in role.servers.all %}{{ serv }}, {% endfor %}</td> <td>{% for serv in role.servers.all %}{{ serv }}, {% endfor %}</td>
<td class="text-right"> <td class="text-right">
{% can_edit role %} {% can_edit role %}
{% include 'buttons/edit.html' with href='machines:edit-role' id=role.id %} {% include 'buttons/edit.html' with href='machines:edit-role' id=role.id %}
{% acl_end %} {% acl_end %}
{% history_button role %} {% history_button role %}
</td> </td>

View file

@ -47,7 +47,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class="fa fa-sync"></i></a></td> class="fa fa-sync"></i></a></td>
<td class="text-right"> <td class="text-right">
{% can_edit service %} {% can_edit service %}
{% include 'buttons/edit.html' with href='machines:edit-service' id=service.id %} {% include 'buttons/edit.html' with href='machines:edit-service' id=service.id %}
{% acl_end %} {% acl_end %}
{% history_button service %} {% history_button service %}
</td> </td>

View file

@ -48,7 +48,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ soa.ttl }}</td> <td>{{ soa.ttl }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit soa %} {% can_edit soa %}
{% include 'buttons/edit.html' with href='machines:edit-soa' id=soa.id %} {% include 'buttons/edit.html' with href='machines:edit-soa' id=soa.id %}
{% acl_end %} {% acl_end %}
{% history_button soa %} {% history_button soa %}
</td> </td>

View file

@ -52,7 +52,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ srv.target }}</td> <td>{{ srv.target }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit srv %} {% can_edit srv %}
{% include 'buttons/edit.html' with href='machines:edit-srv' id=srv.id %} {% include 'buttons/edit.html' with href='machines:edit-srv' id=srv.id %}
{% acl_end %} {% acl_end %}
{% history_button srv %} {% history_button srv %}
</td> </td>

View file

@ -41,11 +41,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ sshfp.comment }}</td> <td>{{ sshfp.comment }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit sshfp %} {% can_edit sshfp %}
{% include 'buttons/edit.html' with href='machines:edit-sshfp' id=sshfp.id %} {% include 'buttons/edit.html' with href='machines:edit-sshfp' id=sshfp.id %}
{% acl_end %} {% acl_end %}
{% history_button sshfp %} {% history_button sshfp %}
{% can_delete sshfp %} {% can_delete sshfp %}
{% include 'buttons/suppr.html' with href='machines:del-sshfp' id=sshfp.id %} {% include 'buttons/suppr.html' with href='machines:del-sshfp' id=sshfp.id %}
{% acl_end %} {% acl_end %}
</td> </td>
</tr> </tr>

View file

@ -40,7 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ txt.dns_entry }}</td> <td>{{ txt.dns_entry }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit txt %} {% can_edit txt %}
{% include 'buttons/edit.html' with href='machines:edit-txt' id=txt.id %} {% include 'buttons/edit.html' with href='machines:edit-txt' id=txt.id %}
{% acl_end %} {% acl_end %}
{% history_button txt %} {% history_button txt %}
</td> </td>

View file

@ -45,7 +45,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{% for range in vlan.iptype_set.all %}{{ range }}, {% endfor %}</td> <td>{% for range in vlan.iptype_set.all %}{{ range }}, {% endfor %}</td>
<td class="text-right"> <td class="text-right">
{% can_edit vlan %} {% can_edit vlan %}
{% include 'buttons/edit.html' with href='machines:edit-vlan' id=vlan.id %} {% include 'buttons/edit.html' with href='machines:edit-vlan' id=vlan.id %}
{% acl_end %} {% acl_end %}
{% history_button vlan %} {% history_button vlan %}
</td> </td>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -26,14 +26,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% load bootstrap3 %} {% load bootstrap3 %}
{% load i18n %} {% load i18n %}
{% block title %}{% trans "Creation and editing of machines" %}{% endblock %} {% block title %}{% trans "Deletion of machines" %}{% endblock %}
{% block content %} {% block content %}
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
<h4>{% blocktrans %}Warning: are you sure you want to delete this object {{ objet_name }} ( {{ objet }} <h4>{% blocktrans %}Warning: are you sure you want to delete this object {{ objet_name }} ( {{ objet }} )?{% endblocktrans %}</h4>
)?{% endblocktrans %}</h4>
{% trans "Confirm" as tr_confirm %} {% trans "Confirm" as tr_confirm %}
{% bootstrap_button tr_confirm button_type="submit" icon='trash' button_class='btn-danger' %} {% bootstrap_button tr_confirm button_type="submit" icon='trash' button_class='btn-danger' %}
</form> </form>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %} {% block content %}
<h2>{% trans "Machines" %}</h2> <h2>{% trans "Machines" %}</h2>
{% include "machines/aff_machines.html" with machines_list=machines_list %} {% include 'machines/aff_machines.html' with machines_list=machines_list %}
<br/> <br/>
<br/> <br/>
<br/> <br/>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class="fa fa-plus"></i>{% trans " Add an alias" %}</a> class="fa fa-plus"></i>{% trans " Add an alias" %}</a>
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-alias' interface_id %}"><i <a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-alias' interface_id %}"><i
class="fa fa-trash"></i>{% trans " Delete one or several aliases" %}</a> class="fa fa-trash"></i>{% trans " Delete one or several aliases" %}</a>
{% include "machines/aff_alias.html" with alias_list=alias_list %} {% include 'machines/aff_alias.html' with alias_list=alias_list %}
<br/> <br/>
<br/> <br/>
<br/> <br/>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -39,7 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-extension' %}"> <a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-extension' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several extensions" %} <i class="fa fa-trash"></i>{% trans " Delete one or several extensions" %}
</a> </a>
{% include "machines/aff_extension.html" with extension_list=extension_list %} {% include 'machines/aff_extension.html' with extension_list=extension_list %}
<h2>{% trans "List of SOA records" %}</h2> <h2>{% trans "List of SOA records" %}</h2>
{% can_create SOA %} {% can_create SOA %}
@ -50,7 +50,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-soa' %}"> <a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-soa' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several SOA records" %} <i class="fa fa-trash"></i>{% trans " Delete one or several SOA records" %}
</a> </a>
{% include "machines/aff_soa.html" with soa_list=soa_list %} {% include 'machines/aff_soa.html' with soa_list=soa_list %}
<h2>{% trans "List of MX records" %}</h2> <h2>{% trans "List of MX records" %}</h2>
{% can_create Mx %} {% can_create Mx %}
@ -61,7 +61,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-mx' %}"> <a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-mx' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several MX records" %} <i class="fa fa-trash"></i>{% trans " Delete one or several MX records" %}
</a> </a>
{% include "machines/aff_mx.html" with mx_list=mx_list %} {% include 'machines/aff_mx.html' with mx_list=mx_list %}
<h2>{% trans "List of NS records" %}</h2> <h2>{% trans "List of NS records" %}</h2>
{% can_create Ns %} {% can_create Ns %}
@ -72,7 +72,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-ns' %}"> <a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-ns' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several NS records" %} <i class="fa fa-trash"></i>{% trans " Delete one or several NS records" %}
</a> </a>
{% include "machines/aff_ns.html" with ns_list=ns_list %} {% include 'machines/aff_ns.html' with ns_list=ns_list %}
<h2>{% trans "List of TXT records" %}</h2> <h2>{% trans "List of TXT records" %}</h2>
{% can_create Txt %} {% can_create Txt %}
@ -83,7 +83,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-txt' %}"> <a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-txt' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several TXT records" %} <i class="fa fa-trash"></i>{% trans " Delete one or several TXT records" %}
</a> </a>
{% include "machines/aff_txt.html" with txt_list=txt_list %} {% include 'machines/aff_txt.html' with txt_list=txt_list %}
<h2>{% trans "List of DNAME records" %}</h2> <h2>{% trans "List of DNAME records" %}</h2>
{% can_create DName %} {% can_create DName %}
@ -94,7 +94,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-dname' %}"> <a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-dname' %}">
<i class="fa fa-trash"></i> {% trans " Delete one or several DNAME records" %} <i class="fa fa-trash"></i> {% trans " Delete one or several DNAME records" %}
</a> </a>
{% include "machines/aff_dname.html" with dname_list=dname_list %} {% include 'machines/aff_dname.html' with dname_list=dname_list %}
<h2>{% trans "List of SRV records" %}</h2> <h2>{% trans "List of SRV records" %}</h2>
{% can_create Srv %} {% can_create Srv %}
@ -105,5 +105,5 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-srv' %}"> <a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-srv' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several SRV records" %} <i class="fa fa-trash"></i>{% trans " Delete one or several SRV records" %}
</a> </a>
{% include "machines/aff_srv.html" with srv_list=srv_list %} {% include 'machines/aff_srv.html' with srv_list=srv_list %}
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -39,5 +39,5 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-iptype' %}"> <a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-iptype' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several IP types" %} <i class="fa fa-trash"></i>{% trans " Delete one or several IP types" %}
</a> </a>
{% include "machines/aff_iptype.html" with iptype_list=iptype_list %} {% include 'machines/aff_iptype.html' with iptype_list=iptype_list %}
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -36,7 +36,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<i class="fa fa-plus"></i>{% trans " Add an IPv6 address" %} <i class="fa fa-plus"></i>{% trans " Add an IPv6 address" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% include "machines/aff_ipv6.html" with ipv6_list=ipv6_list %} {% include 'machines/aff_ipv6.html' with ipv6_list=ipv6_list %}
<br/> <br/>
<br/> <br/>
<br/> <br/>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -40,7 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-machinetype' %}"> <a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-machinetype' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several machine types" %} <i class="fa fa-trash"></i>{% trans " Delete one or several machine types" %}
</a> </a>
{% include "machines/aff_machinetype.html" with machinetype_list=machinetype_list %} {% include 'machines/aff_machinetype.html' with machinetype_list=machinetype_list %}
<br/> <br/>
<br/> <br/>
<br/> <br/>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -41,7 +41,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-nas' %}"> <a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-nas' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several NAS device types" %} <i class="fa fa-trash"></i>{% trans " Delete one or several NAS device types" %}
</a> </a>
{% include "machines/aff_nas.html" with nas_list=nas_list %} {% include 'machines/aff_nas.html' with nas_list=nas_list %}
<br/> <br/>
<br/> <br/>
<br/> <br/>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% load bootstrap3 %} {% load bootstrap3 %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -37,5 +37,5 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% acl_end %} {% acl_end %}
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-role' %}"><i <a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-role' %}"><i
class="fa fa-trash"></i>{% trans " Delete one or several roles" %}</a> class="fa fa-trash"></i>{% trans " Delete one or several roles" %}</a>
{% include "machines/aff_role.html" with role_list=role_list %} {% include 'machines/aff_role.html' with role_list=role_list %}
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -37,8 +37,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% acl_end %} {% acl_end %}
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-service' %}"><i <a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-service' %}"><i
class="fa fa-trash"></i>{% trans " Delete one or several services" %}</a> class="fa fa-trash"></i>{% trans " Delete one or several services" %}</a>
{% include "machines/aff_service.html" with service_list=service_list %} {% include 'machines/aff_service.html' with service_list=service_list %}
<h2>{% trans "States of servers" %}</h2> <h2>{% trans "States of servers" %}</h2>
{% include "machines/aff_servers.html" with servers_list=servers_list %} {% include 'machines/aff_servers.html' with servers_list=servers_list %}
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -34,5 +34,5 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<i class="fa fa-plus"></i>{% trans " Add an SSH fingerprint" %} <i class="fa fa-plus"></i>{% trans " Add an SSH fingerprint" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% include "machines/aff_sshfp.html" with sshfp_list=sshfp_list %} {% include 'machines/aff_sshfp.html' with sshfp_list=sshfp_list %}
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -37,5 +37,5 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% acl_end %} {% acl_end %}
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-vlan' %}"><i <a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-vlan' %}"><i
class="fa fa-trash"></i>{% trans " Delete one or several VLANs" %}</a> class="fa fa-trash"></i>{% trans " Delete one or several VLANs" %}</a>
{% include "machines/aff_vlan.html" with vlan_list=vlan_list %} {% include 'machines/aff_vlan.html' with vlan_list=vlan_list %}
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -171,3 +171,4 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% bootstrap_button action_name button_type="submit" icon='ok' button_class='btn-success' %} {% bootstrap_button action_name button_type="submit" icon='ok' button_class='btn-success' %}
</form> </form>
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "base.html" %} {% extends 'base.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -28,57 +28,58 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block sidebar %} {% block sidebar %}
{% can_view_all Machine %} {% can_view_all Machine %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index" %}"> <a class="list-group-item list-group-item-info" href="{% url 'machines:index' %}">
<i class="fa fa-list-ul"></i> <i class="fa fa-list-ul"></i>
{% trans "Machines" %} {% trans "Machines" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all MachineType %} {% can_view_all MachineType %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-machinetype" %}"> <a class="list-group-item list-group-item-info" href="{% url 'machines:index-machinetype' %}">
<i class="fa fa-list-ul"></i> <i class="fa fa-list-ul"></i>
{% trans "Machine types" %} {% trans "Machine types" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Extension %} {% can_view_all Extension %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-extension" %}"> <a class="list-group-item list-group-item-info" href="{% url 'machines:index-extension' %}">
<i class="fa fa-list-ul"></i> <i class="fa fa-list-ul"></i>
{% trans "Extensions and zones" %} {% trans "Extensions and zones" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all IpType %} {% can_view_all IpType %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-iptype" %}"> <a class="list-group-item list-group-item-info" href="{% url 'machines:index-iptype' %}">
<i class="fa fa-list-ul"></i> <i class="fa fa-list-ul"></i>
{% trans "IP ranges" %} {% trans "IP ranges" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Vlan %} {% can_view_all Vlan %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-vlan" %}"> <a class="list-group-item list-group-item-info" href="{% url 'machines:index-vlan' %}">
<i class="fa fa-list-ul"></i> <i class="fa fa-list-ul"></i>
{% trans "VLANs" %} {% trans "VLANs" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Nas %} {% can_view_all Nas %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-nas" %}"> <a class="list-group-item list-group-item-info" href="{% url 'machines:index-nas' %}">
<i class="fa fa-list-ul"></i> <i class="fa fa-list-ul"></i>
{% trans "NAS devices" %} {% trans "NAS devices" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all machines.Service %} {% can_view_all machines.Service %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-service" %}"> <a class="list-group-item list-group-item-info" href="{% url 'machines:index-service' %}">
<i class="fa fa-list-ul"></i> <i class="fa fa-list-ul"></i>
{% trans "Services (DHCP, DNS, ...)" %} {% trans "Services (DHCP, DNS, ...)" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Role %} {% can_view_all Role %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-role" %}"> <a class="list-group-item list-group-item-info" href="{% url 'machines:index-role' %}">
<i class="fa fa-list-ul"></i> <i class="fa fa-list-ul"></i>
{% trans "Server roles" %} {% trans "Server roles" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all OuverturePortList %} {% can_view_all OuverturePortList %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-portlist" %}"> <a class="list-group-item list-group-item-info" href="{% url 'machines:index-portlist' %}">
<i class="fa fa-list-ul"></i> <i class="fa fa-list-ul"></i>
{% trans "Ports openings" %} {% trans "Ports openings" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% endblock %} {% endblock %}

View file

@ -359,7 +359,7 @@ class DelMailContactForm(Form):
"""Delete contact email adress""" """Delete contact email adress"""
mailcontacts = forms.ModelMultipleChoiceField( mailcontacts = forms.ModelMultipleChoiceField(
queryset=MailContact.objects.none(), queryset=MailContact.objects.none(),
label="Enregistrements adresses actuels", label=_("Current email addresses"),
widget=forms.CheckboxSelectMultiple widget=forms.CheckboxSelectMultiple
) )

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,208 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2019-01-08 22:50
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import re2o.aes_field
class Migration(migrations.Migration):
dependencies = [
('preferences', '0057_optionaluser_all_users_active'),
]
operations = [
migrations.AlterModelOptions(
name='radiuskey',
options={'permissions': (('view_radiuskey', 'Can view a RADIUS key object'),), 'verbose_name': 'RADIUS key', 'verbose_name_plural': 'RADIUS keys'},
),
migrations.AlterModelOptions(
name='radiusoption',
options={'verbose_name': 'RADIUS policy', 'verbose_name_plural': 'RADIUS policies'},
),
migrations.AlterModelOptions(
name='reminder',
options={'permissions': (('view_reminder', 'Can view a reminder object'),), 'verbose_name': 'reminder', 'verbose_name_plural': 'reminders'},
),
migrations.AlterModelOptions(
name='switchmanagementcred',
options={'permissions': (('view_switchmanagementcred', 'Can view a switch management credentials object'),), 'verbose_name': 'switch management credentials'},
),
migrations.AlterField(
model_name='mailmessageoption',
name='welcome_mail_en',
field=models.TextField(default='', help_text='Welcome email in English'),
),
migrations.AlterField(
model_name='mailmessageoption',
name='welcome_mail_fr',
field=models.TextField(default='', help_text='Welcome email in French'),
),
migrations.AlterField(
model_name='optionaltopologie',
name='sftp_login',
field=models.CharField(blank=True, help_text='SFTP login for switches', max_length=32, null=True),
),
migrations.AlterField(
model_name='optionaltopologie',
name='sftp_pass',
field=re2o.aes_field.AESEncryptedField(blank=True, help_text='SFTP password', max_length=63, null=True),
),
migrations.AlterField(
model_name='optionaltopologie',
name='switchs_ip_type',
field=models.OneToOneField(blank=True, help_text='IP range for the management of switches', null=True, on_delete=django.db.models.deletion.PROTECT, to='machines.IpType'),
),
migrations.AlterField(
model_name='optionaltopologie',
name='switchs_provision',
field=models.CharField(choices=[('sftp', 'sftp'), ('tftp', 'tftp')], default='tftp', help_text='Provision of configuration mode for switches', max_length=32),
),
migrations.AlterField(
model_name='optionaltopologie',
name='switchs_rest_management',
field=models.BooleanField(default=False, help_text='REST management, activated in case of automatic provision'),
),
migrations.AlterField(
model_name='optionaltopologie',
name='switchs_web_management',
field=models.BooleanField(default=False, help_text='Web management, activated in case of automatic provision'),
),
migrations.AlterField(
model_name='optionaltopologie',
name='switchs_web_management_ssl',
field=models.BooleanField(default=False, help_text='SSL web management, make sure that a certificate is installed on the switch'),
),
migrations.AlterField(
model_name='optionaluser',
name='all_can_create_adherent',
field=models.BooleanField(default=False, help_text='Users can create a member.'),
),
migrations.AlterField(
model_name='optionaluser',
name='all_can_create_club',
field=models.BooleanField(default=False, help_text='Users can create a club.'),
),
migrations.AlterField(
model_name='optionaluser',
name='all_users_active',
field=models.BooleanField(default=False, help_text='If True, all new created and connected users are active. If False, only when a valid registration has been paid.'),
),
migrations.AlterField(
model_name='optionaluser',
name='delete_notyetactive',
field=models.IntegerField(default=15, help_text='Not yet active users will be deleted after this number of days.'),
),
migrations.AlterField(
model_name='optionaluser',
name='local_email_accounts_enabled',
field=models.BooleanField(default=False, help_text='Enable local email accounts for users.'),
),
migrations.AlterField(
model_name='optionaluser',
name='max_email_address',
field=models.IntegerField(default=15, help_text='Maximum number of local email addresses for a standard user.'),
),
migrations.AlterField(
model_name='optionaluser',
name='self_adhesion',
field=models.BooleanField(default=False, help_text='A new user can create their account on Re2o.'),
),
migrations.AlterField(
model_name='optionaluser',
name='self_change_room',
field=models.BooleanField(default=False, help_text='Users can edit their room.'),
),
migrations.AlterField(
model_name='optionaluser',
name='self_change_shell',
field=models.BooleanField(default=False, help_text='Users can edit their shell.'),
),
migrations.AlterField(
model_name='radiuskey',
name='comment',
field=models.CharField(blank=True, help_text='Comment for this key', max_length=255, null=True),
),
migrations.AlterField(
model_name='radiuskey',
name='default_switch',
field=models.BooleanField(default=True, help_text='Default key for switches', unique=True),
),
migrations.AlterField(
model_name='radiuskey',
name='radius_key',
field=re2o.aes_field.AESEncryptedField(help_text='RADIUS key', max_length=255),
),
migrations.AlterField(
model_name='radiusoption',
name='banned',
field=models.CharField(choices=[('REJECT', 'Reject the machine'), ('SET_VLAN', 'Place the machine on the VLAN')], default='REJECT', max_length=32, verbose_name='Policy for banned users'),
),
migrations.AlterField(
model_name='radiusoption',
name='banned_vlan',
field=models.ForeignKey(blank=True, help_text='VLAN for banned users if not rejected', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='banned_vlan', to='machines.Vlan', verbose_name='Banned users VLAN'),
),
migrations.AlterField(
model_name='radiusoption',
name='non_member',
field=models.CharField(choices=[('REJECT', 'Reject the machine'), ('SET_VLAN', 'Place the machine on the VLAN')], default='REJECT', max_length=32, verbose_name='Policy for non members'),
),
migrations.AlterField(
model_name='radiusoption',
name='non_member_vlan',
field=models.ForeignKey(blank=True, help_text='VLAN for non members if not rejected', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='non_member_vlan', to='machines.Vlan', verbose_name='Non members VLAN'),
),
migrations.AlterField(
model_name='radiusoption',
name='unknown_machine_vlan',
field=models.ForeignKey(blank=True, help_text='VLAN for unknown machines if not rejected', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='unknown_machine_vlan', to='machines.Vlan', verbose_name='Unknown machines VLAN'),
),
migrations.AlterField(
model_name='radiusoption',
name='unknown_port',
field=models.CharField(choices=[('REJECT', 'Reject the machine'), ('SET_VLAN', 'Place the machine on the VLAN')], default='REJECT', max_length=32, verbose_name='Policy for unknown ports'),
),
migrations.AlterField(
model_name='radiusoption',
name='unknown_port_vlan',
field=models.ForeignKey(blank=True, help_text='VLAN for unknown ports if not rejected', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='unknown_port_vlan', to='machines.Vlan', verbose_name='Unknown ports VLAN'),
),
migrations.AlterField(
model_name='radiusoption',
name='unknown_room',
field=models.CharField(choices=[('REJECT', 'Reject the machine'), ('SET_VLAN', 'Place the machine on the VLAN')], default='REJECT', max_length=32, verbose_name='Policy for machines connecting from unregistered rooms (relevant on ports with STRICT RADIUS mode)'),
),
migrations.AlterField(
model_name='radiusoption',
name='unknown_room_vlan',
field=models.ForeignKey(blank=True, help_text='VLAN for unknown rooms if not rejected', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='unknown_room_vlan', to='machines.Vlan', verbose_name='Unknown rooms VLAN'),
),
migrations.AlterField(
model_name='reminder',
name='days',
field=models.IntegerField(default=7, help_text="Delay between the email and the membership's end", unique=True),
),
migrations.AlterField(
model_name='reminder',
name='message',
field=models.CharField(blank=True, default='', help_text='Message displayed specifically for this reminder', max_length=255, null=True),
),
migrations.AlterField(
model_name='switchmanagementcred',
name='default_switch',
field=models.BooleanField(default=True, help_text='Default credentials for switches', unique=True),
),
migrations.AlterField(
model_name='switchmanagementcred',
name='management_id',
field=models.CharField(help_text='Switch login', max_length=63),
),
migrations.AlterField(
model_name='switchmanagementcred',
name='management_pass',
field=re2o.aes_field.AESEncryptedField(help_text='Password', max_length=63),
),
]

View file

@ -73,11 +73,11 @@ class OptionalUser(AclMixin, PreferencesModel):
gpg_fingerprint = models.BooleanField(default=True) gpg_fingerprint = models.BooleanField(default=True)
all_can_create_club = models.BooleanField( all_can_create_club = models.BooleanField(
default=False, default=False,
help_text=_("Users can create a club") help_text=_("Users can create a club.")
) )
all_can_create_adherent = models.BooleanField( all_can_create_adherent = models.BooleanField(
default=False, default=False,
help_text=_("Users can create a member"), help_text=_("Users can create a member."),
) )
shell_default = models.OneToOneField( shell_default = models.OneToOneField(
@ -88,15 +88,15 @@ class OptionalUser(AclMixin, PreferencesModel):
) )
self_change_shell = models.BooleanField( self_change_shell = models.BooleanField(
default=False, default=False,
help_text=_("Users can edit their shell") help_text=_("Users can edit their shell.")
) )
self_change_room = models.BooleanField( self_change_room = models.BooleanField(
default=False, default=False,
help_text=_("Users can edit their room") help_text=_("Users can edit their room.")
) )
local_email_accounts_enabled = models.BooleanField( local_email_accounts_enabled = models.BooleanField(
default=False, default=False,
help_text=_("Enable local email accounts for users") help_text=_("Enable local email accounts for users.")
) )
local_email_domain = models.CharField( local_email_domain = models.CharField(
max_length=32, max_length=32,
@ -106,20 +106,21 @@ class OptionalUser(AclMixin, PreferencesModel):
max_email_address = models.IntegerField( max_email_address = models.IntegerField(
default=15, default=15,
help_text=_("Maximum number of local email addresses for a standard" help_text=_("Maximum number of local email addresses for a standard"
" user") " user.")
) )
delete_notyetactive = models.IntegerField( delete_notyetactive = models.IntegerField(
default=15, default=15,
help_text=_("Inactive users will be deleted after this number of days") help_text=_("Not yet active users will be deleted after this number of"
" days.")
) )
self_adhesion = models.BooleanField( self_adhesion = models.BooleanField(
default=False, default=False,
help_text=_("A new user can create their account on Re2o") help_text=_("A new user can create their account on Re2o.")
) )
all_users_active = models.BooleanField( all_users_active = models.BooleanField(
default=False, default=False,
help_text=_("If True, all new created and connected users are active.\ help_text=_("If True, all new created and connected users are active."
If False, only when a valid registration has been paid") " If False, only when a valid registration has been paid.")
) )
class Meta: class Meta:
@ -206,40 +207,41 @@ class OptionalTopologie(AclMixin, PreferencesModel):
switchs_web_management = models.BooleanField( switchs_web_management = models.BooleanField(
default=False, default=False,
help_text="Web management, activé si provision automatique" help_text=_("Web management, activated in case of automatic provision")
) )
switchs_web_management_ssl = models.BooleanField( switchs_web_management_ssl = models.BooleanField(
default=False, default=False,
help_text="Web management ssl. Assurez-vous que un certif est installé sur le switch !" help_text=_("SSL web management, make sure that a certificate is"
" installed on the switch")
) )
switchs_rest_management = models.BooleanField( switchs_rest_management = models.BooleanField(
default=False, default=False,
help_text="Rest management, activé si provision auto" help_text=_("REST management, activated in case of automatic provision")
) )
switchs_ip_type = models.OneToOneField( switchs_ip_type = models.OneToOneField(
'machines.IpType', 'machines.IpType',
on_delete=models.PROTECT, on_delete=models.PROTECT,
blank=True, blank=True,
null=True, null=True,
help_text="Plage d'ip de management des switchs" help_text=_("IP range for the management of switches")
) )
switchs_provision = models.CharField( switchs_provision = models.CharField(
max_length=32, max_length=32,
choices=CHOICE_PROVISION, choices=CHOICE_PROVISION,
default='tftp', default='tftp',
help_text="Mode de récupération des confs par les switchs" help_text=_("Provision of configuration mode for switches")
) )
sftp_login = models.CharField( sftp_login = models.CharField(
max_length=32, max_length=32,
null=True, null=True,
blank=True, blank=True,
help_text="Login sftp des switchs" help_text=_("SFTP login for switches")
) )
sftp_pass = AESEncryptedField( sftp_pass = AESEncryptedField(
max_length=63, max_length=63,
null=True, null=True,
blank=True, blank=True,
help_text="Mot de passe sftp" help_text=_("SFTP password")
) )
@cached_property @cached_property
@ -314,52 +316,56 @@ class RadiusKey(AclMixin, models.Model):
"""Class of a radius key""" """Class of a radius key"""
radius_key = AESEncryptedField( radius_key = AESEncryptedField(
max_length=255, max_length=255,
help_text="Clef radius" help_text=_("RADIUS key")
) )
comment = models.CharField( comment = models.CharField(
max_length=255, max_length=255,
null=True, null=True,
blank=True, blank=True,
help_text="Commentaire de cette clef" help_text=_("Comment for this key")
) )
default_switch = models.BooleanField( default_switch = models.BooleanField(
default=True, default=True,
unique=True, unique=True,
help_text= "Clef par défaut des switchs" help_text=_("Default key for switches")
) )
class Meta: class Meta:
permissions = ( permissions = (
("view_radiuskey", "Peut voir un objet radiuskey"), ("view_radiuskey", _("Can view a RADIUS key object")),
) )
verbose_name = _("RADIUS key")
verbose_name_plural = _("RADIUS keys")
def __str__(self): def __str__(self):
return "Clef radius " + str(self.id) + " " + str(self.comment) return _("RADIUS key ") + str(self.id) + " " + str(self.comment)
class SwitchManagementCred(AclMixin, models.Model): class SwitchManagementCred(AclMixin, models.Model):
"""Class of a management creds of a switch, for rest management""" """Class of a management creds of a switch, for rest management"""
management_id = models.CharField( management_id = models.CharField(
max_length=63, max_length=63,
help_text="Login du switch" help_text=_("Switch login")
) )
management_pass = AESEncryptedField( management_pass = AESEncryptedField(
max_length=63, max_length=63,
help_text="Mot de passe" help_text=_("Password")
) )
default_switch = models.BooleanField( default_switch = models.BooleanField(
default=True, default=True,
unique=True, unique=True,
help_text= "Creds par défaut des switchs" help_text=_("Default credentials for switches")
) )
class Meta: class Meta:
permissions = ( permissions = (
("view_switchmanagementcred", "Peut voir un objet switchmanagementcred"), ("view_switchmanagementcred", _("Can view a switch management"
" credentials object")),
) )
verbose_name = _("switch management credentials")
def __str__(self): def __str__(self):
return "Identifiant " + str(self.management_id) return _("Switch login ") + str(self.management_id)
class Reminder(AclMixin, models.Model): class Reminder(AclMixin, models.Model):
@ -367,25 +373,26 @@ class Reminder(AclMixin, models.Model):
Days: liste des nombres de jours pour lesquells un mail est envoyé Days: liste des nombres de jours pour lesquells un mail est envoyé
optionalMessage: message additionel pour le mail optionalMessage: message additionel pour le mail
""" """
PRETTY_NAME="Options pour le mail de fin d'adhésion"
days = models.IntegerField( days = models.IntegerField(
default=7, default=7,
unique=True, unique=True,
help_text="Délais entre le mail et la fin d'adhésion" help_text=_("Delay between the email and the membership's end")
) )
message = models.CharField( message = models.CharField(
max_length=255, max_length=255,
default="", default="",
null=True, null=True,
blank=True, blank=True,
help_text="Message affiché spécifiquement pour ce rappel" help_text=_("Message displayed specifically for this reminder")
) )
class Meta: class Meta:
permissions = ( permissions = (
("view_reminder", "Peut voir un objet reminder"), ("view_reminder", _("Can view a reminder object")),
) )
verbose_name = _("reminder")
verbose_name_plural = _("reminders")
def users_to_remind(self): def users_to_remind(self):
from re2o.utils import all_has_access from re2o.utils import all_has_access
@ -472,8 +479,7 @@ class MailContact(AclMixin, models.Model):
commentary = models.CharField( commentary = models.CharField(
blank = True, blank = True,
null = True, null = True,
help_text = _( help_text = _("Description of the associated email address."),
"Description of the associated email address."),
max_length = 256 max_length = 256
) )
@ -564,8 +570,8 @@ def homeoption_post_save(**kwargs):
class MailMessageOption(AclMixin, models.Model): class MailMessageOption(AclMixin, models.Model):
"""Reglages, mail de bienvenue et autre""" """Reglages, mail de bienvenue et autre"""
welcome_mail_fr = models.TextField(default="", help_text="Mail de bienvenue en français") welcome_mail_fr = models.TextField(default="", help_text=_("Welcome email in French"))
welcome_mail_en = models.TextField(default="", help_text="Mail de bienvenue en anglais") welcome_mail_en = models.TextField(default="", help_text=_("Welcome email in English"))
class Meta: class Meta:
permissions = ( permissions = (
@ -577,7 +583,8 @@ class MailMessageOption(AclMixin, models.Model):
class RadiusOption(AclMixin, PreferencesModel): class RadiusOption(AclMixin, PreferencesModel):
class Meta: class Meta:
verbose_name = _("radius policies") verbose_name = _("RADIUS policy")
verbose_name_plural = _("RADIUS policies")
MACHINE = 'MACHINE' MACHINE = 'MACHINE'
DEFINED = 'DEFINED' DEFINED = 'DEFINED'
@ -588,8 +595,8 @@ class RadiusOption(AclMixin, PreferencesModel):
REJECT = 'REJECT' REJECT = 'REJECT'
SET_VLAN = 'SET_VLAN' SET_VLAN = 'SET_VLAN'
CHOICE_POLICY = ( CHOICE_POLICY = (
(REJECT, _('Reject the machine')), (REJECT, _("Reject the machine")),
(SET_VLAN, _('Place the machine on the VLAN')) (SET_VLAN, _("Place the machine on the VLAN"))
) )
radius_general_policy = models.CharField( radius_general_policy = models.CharField(
max_length=32, max_length=32,
@ -608,16 +615,14 @@ class RadiusOption(AclMixin, PreferencesModel):
related_name='unknown_machine_vlan', related_name='unknown_machine_vlan',
blank=True, blank=True,
null=True, null=True,
verbose_name=_('Unknown machine Vlan'), verbose_name=_("Unknown machines VLAN"),
help_text=_( help_text=_("VLAN for unknown machines if not rejected")
'Vlan for unknown machines if not rejected.'
)
) )
unknown_port = models.CharField( unknown_port = models.CharField(
max_length=32, max_length=32,
choices=CHOICE_POLICY, choices=CHOICE_POLICY,
default=REJECT, default=REJECT,
verbose_name=_("Policy for unknown port"), verbose_name=_("Policy for unknown ports"),
) )
unknown_port_vlan = models.ForeignKey( unknown_port_vlan = models.ForeignKey(
'machines.Vlan', 'machines.Vlan',
@ -625,20 +630,15 @@ class RadiusOption(AclMixin, PreferencesModel):
related_name='unknown_port_vlan', related_name='unknown_port_vlan',
blank=True, blank=True,
null=True, null=True,
verbose_name=_('Unknown port Vlan'), verbose_name=_("Unknown ports VLAN"),
help_text=_( help_text=_("VLAN for unknown ports if not rejected")
'Vlan for unknown ports if not rejected.'
)
) )
unknown_room = models.CharField( unknown_room = models.CharField(
max_length=32, max_length=32,
choices=CHOICE_POLICY, choices=CHOICE_POLICY,
default=REJECT, default=REJECT,
verbose_name=_( verbose_name=_("Policy for machines connecting from unregistered rooms"
"Policy for machine connecting from " " (relevant on ports with STRICT RADIUS mode)"),
"unregistered room (relevant on ports with STRICT "
"radius mode)"
),
) )
unknown_room_vlan = models.ForeignKey( unknown_room_vlan = models.ForeignKey(
'machines.Vlan', 'machines.Vlan',
@ -646,16 +646,14 @@ class RadiusOption(AclMixin, PreferencesModel):
on_delete=models.PROTECT, on_delete=models.PROTECT,
blank=True, blank=True,
null=True, null=True,
verbose_name=_('Unknown room Vlan'), verbose_name=_("Unknown rooms VLAN"),
help_text=_( help_text=_("VLAN for unknown rooms if not rejected")
'Vlan for unknown room if not rejected.'
)
) )
non_member = models.CharField( non_member = models.CharField(
max_length=32, max_length=32,
choices=CHOICE_POLICY, choices=CHOICE_POLICY,
default=REJECT, default=REJECT,
verbose_name=_("Policy non member users."), verbose_name=_("Policy for non members"),
) )
non_member_vlan = models.ForeignKey( non_member_vlan = models.ForeignKey(
'machines.Vlan', 'machines.Vlan',
@ -663,16 +661,14 @@ class RadiusOption(AclMixin, PreferencesModel):
on_delete=models.PROTECT, on_delete=models.PROTECT,
blank=True, blank=True,
null=True, null=True,
verbose_name=_('Non member Vlan'), verbose_name=_("Non members VLAN"),
help_text=_( help_text=_("VLAN for non members if not rejected")
'Vlan for non members if not rejected.'
)
) )
banned = models.CharField( banned = models.CharField(
max_length=32, max_length=32,
choices=CHOICE_POLICY, choices=CHOICE_POLICY,
default=REJECT, default=REJECT,
verbose_name=_("Policy for banned users."), verbose_name=_("Policy for banned users"),
) )
banned_vlan = models.ForeignKey( banned_vlan = models.ForeignKey(
'machines.Vlan', 'machines.Vlan',
@ -680,10 +676,8 @@ class RadiusOption(AclMixin, PreferencesModel):
on_delete=models.PROTECT, on_delete=models.PROTECT,
blank=True, blank=True,
null=True, null=True,
verbose_name=_('Banned Vlan'), verbose_name=_("Banned users VLAN"),
help_text=_( help_text=_("VLAN for banned users if not rejected")
'Vlan for banned if not rejected.'
)
) )
vlan_decision_ok = models.OneToOneField( vlan_decision_ok = models.OneToOneField(
'machines.Vlan', 'machines.Vlan',

View file

@ -23,35 +23,35 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endcomment %} {% endcomment %}
{% load acl %} {% load acl %}
{% load logs_extra %} {% load logs_extra %}
<table class="table table-striped"> {% load i18n %}
<thead>
<tr> <table class="table table-striped">
<th>Id Clef</th> <thead>
<th>Commentaire</th> <tr>
<th>Clef par default des switchs</th> <th>{% trans "RADIUS key ID" %}</th>
<th>Clef utilisée par les switchs</th> <th>{% trans "Comment" %}</th>
<th></th> <th>{% trans "Default RADIUS key for switches" %}</th>
<th></th> <th>{% trans "RADIUS key used by the swithes" %}</th>
<th></th>
<th></th>
</tr> </tr>
</thead> </thead>
{% for radiuskey in radiuskey_list %} {% for radiuskey in radiuskey_list %}
<tr> <tr>
<td>{{ radiuskey.id }}</td> <td>{{ radiuskey.id }}</td>
<td>{{ radiuskey.comment }}</td> <td>{{ radiuskey.comment }}</td>
<td>{{ radiuskey.default_switch }}</td> <td>{{ radiuskey.default_switch }}</td>
<td>{{ radiuskey.switch_set.all|join:", " }}</td> <td>{{ radiuskey.switch_set.all|join:", " }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit radiuskey %} {% can_edit radiuskey %}
{% include 'buttons/edit.html' with href='preferences:edit-radiuskey' id=radiuskey.id %} {% include 'buttons/edit.html' with href='preferences:edit-radiuskey' id=radiuskey.id %}
{% acl_end %} {% acl_end %}
{% can_delete radiuskey %} {% can_delete radiuskey %}
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'preferences:del-radiuskey' radiuskey.pk %}"> {% include 'buttons/suppr.html' with href='preferences:del-radiuskey' id=radiuskey.id %}
<i class="fa fa-trash"></i>
</a>
{% acl_end %} {% acl_end %}
{% history_button radiuskey %} {% history_button radiuskey %}
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>

View file

@ -31,7 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</tr> </tr>
<tr> <tr>
<th>{% trans "VLAN for machines accepted by RADIUS" %}</th> <th>{% trans "VLAN for machines accepted by RADIUS" %}</th>
<td><span class="label label-success">Vlan {{ radiusoptions.vlan_decision_ok }}</span></td> <td><span class="label label-success">{% blocktrans with vlan_decision_ok=radiusoptions.vlan_decision_ok %}VLAN {{ vlan_decision_ok }}{% endblocktrans %}</span></td>
</tr> </tr>
</table> </table>
<hr/> <hr/>
@ -39,7 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<thead> <thead>
<tr> <tr>
<th>{% trans "Situation" %}</th> <th>{% trans "Situation" %}</th>
<th>{% trans "Behavior" %}</th> <th>{% trans "Behaviour" %}</th>
</tr> </tr>
</thead> </thead>
<tr> <tr>
@ -48,7 +48,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if radiusoptions.unknown_machine == 'REJECT' %} {% if radiusoptions.unknown_machine == 'REJECT' %}
<span class="label label-danger">{% trans "Reject" %}</span> <span class="label label-danger">{% trans "Reject" %}</span>
{% else %} {% else %}
<span class="label label-success">Vlan {{ radiusoptions.unknown_machine_vlan }}</span> <span class="label label-success">{% blocktrans with unknown_machine_vlan=radiusoptions.unknown_machine_vlan %}VLAN {{ unknown_machine_vlan }}{% endblocktrans %}</span>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
@ -58,7 +58,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if radiusoptions.unknown_port == 'REJECT' %} {% if radiusoptions.unknown_port == 'REJECT' %}
<span class="label label-danger">{% trans "Reject" %}</span> <span class="label label-danger">{% trans "Reject" %}</span>
{% else %} {% else %}
<span class="label label-success">Vlan {{ radiusoptions.unknown_port_vlan }}</span> <span class="label label-success">{% blocktrans with unknown_port_vlan=radiusoptions.unknown_port_vlan %}VLAN {{ unknown_port_vlan }}{% endblocktrans %}</span>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
@ -68,7 +68,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if radiusoptions.unknown_room == 'REJECT' %} {% if radiusoptions.unknown_room == 'REJECT' %}
<span class="label label-danger">{% trans "Reject" %}</span> <span class="label label-danger">{% trans "Reject" %}</span>
{% else %} {% else %}
<span class="label label-success">Vlan {{ radiusoptions.unknown_room_vlan }}</span> <span class="label label-success">{% blocktrans with unknown_room_vlan=radiusoptions.unknown_room_vlan %}VLAN {{ unknown_room_vlan }}{% endblocktrans %}</span>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
@ -78,7 +78,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if radiusoptions.non_member == 'REJECT' %} {% if radiusoptions.non_member == 'REJECT' %}
<span class="label label-danger">{% trans "Reject" %}</span> <span class="label label-danger">{% trans "Reject" %}</span>
{% else %} {% else %}
<span class="label label-success">Vlan {{ radiusoptions.non_member_vlan }}</span> <span class="label label-success">{% blocktrans with non_member_vlan=radiusoptions.non_member_vlan %}VLAN {{ non_member_vlan }}{% endblocktrans %}</span>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
@ -88,7 +88,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if radiusoptions.unknown_port == 'REJECT' %} {% if radiusoptions.unknown_port == 'REJECT' %}
<span class="label label-danger">{% trans "Reject" %}</span> <span class="label label-danger">{% trans "Reject" %}</span>
{% else %} {% else %}
<span class="label label-success">Vlan {{ radiusoptions.banned_vlan }}</span> <span class="label label-success">{% blocktrans with banned_vlan=radiusoptions.banned_vlan %}VLAN {{ banned_vlan }}{% endblocktrans %}</span>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>

View file

@ -23,31 +23,31 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endcomment %} {% endcomment %}
{% load acl %} {% load acl %}
{% load logs_extra %} {% load logs_extra %}
{% load i18n %}
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
<th>Nombre de jours avant le rappel</th> <th>{% trans "Number of days before the reminder" %}</th>
<th>Message custom pour ce rappel</th> <th>{% trans "Message for this reminder" %}</th>
<th></th> <th></th>
<th></th> <th></th>
</tr> </tr>
</thead> </thead>
{% for reminder in reminder_list %} {% for reminder in reminder_list %}
<tr> <tr>
<td>{{ reminder.days }}</td> <td>{{ reminder.days }}</td>
<td>{{ reminder.message }}</td> <td>{{ reminder.message }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit reminder %} {% can_edit reminder %}
{% include 'buttons/edit.html' with href='preferences:edit-reminder' id=reminder.id %} {% include 'buttons/edit.html' with href='preferences:edit-reminder' id=reminder.id %}
{% can_delete reminder %} {% acl_end %}
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'preferences:del-reminder' reminder.id %}"> {% can_delete reminder %}
<i class="fa fa-trash"></i> {% include 'buttons/suppr.html' with href='preferences:del-reminder' id=reminder.id %}
</a> {% acl_end %}
{% acl_end %} {% history_button reminder %}
{% acl_end %} </td>
{% history_button reminder %} </tr>
</td>
</tr>
{% endfor %} {% endfor %}
</table> </table>

View file

@ -42,15 +42,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ service.description }}</td> <td>{{ service.description }}</td>
<td>{{ service.image }}</td> <td>{{ service.image }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit service%} {% can_edit service%}
{% include 'buttons/edit.html' with href='preferences:edit-service' id=service.id %} {% include 'buttons/edit.html' with href='preferences:edit-service' id=service.id %}
{% can_delete service %} {% acl_end %}
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'preferences:del-service' service.id %}"> {% can_delete service %}
<i class="fa fa-trash"></i> {% include 'buttons/suppr.html' with href='preferences:del-service' id=service.id %}
</a> {% acl_end %}
{% acl_end %} {% history_button service %}
{% acl_end %}
{% history_button service %}
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}

View file

@ -23,17 +23,19 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endcomment %} {% endcomment %}
{% load acl %} {% load acl %}
{% load logs_extra %} {% load logs_extra %}
<table class="table table-striped"> {% load i18n %}
<thead>
<tr> <table class="table table-striped">
<th>Identifiant</th> <thead>
<th>Creds par default des switchs</th> <tr>
<th>Utilisé pour les switchs</th> <th>{% trans "Switch login" %}</th>
<th></th> <th>{% trans "Default switch management credentials" %}</th>
<th></th> <th>{% trans "Management credentials used by the switches" %}</th>
</tr> <th></th>
</thead> <th></th>
{% for switchmanagementcred in switchmanagementcred_list %} </tr>
</thead>
{% for switchmanagementcred in switchmanagementcred_list %}
<tr> <tr>
<td>{{ switchmanagementcred.management_id }}</td> <td>{{ switchmanagementcred.management_id }}</td>
<td>{{ switchmanagementcred.default_switch }}</td> <td>{{ switchmanagementcred.default_switch }}</td>
@ -43,13 +45,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% include 'buttons/edit.html' with href='preferences:edit-switchmanagementcred' id=switchmanagementcred.id %} {% include 'buttons/edit.html' with href='preferences:edit-switchmanagementcred' id=switchmanagementcred.id %}
{% acl_end %} {% acl_end %}
{% can_delete switchmanagementcred %} {% can_delete switchmanagementcred %}
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'preferences:del-switchmanagementcred' switchmanagementcred.pk %}"> {% include 'buttons/suppr.html' with href='preferences:del-switchmanagementcred' id=switchmanagementcred.id %}
<i class="fa fa-trash"></i>
</a>
{% acl_end %} {% acl_end %}
{% history_button switchmanagementcred %} {% history_button switchmanagementcred %}
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>

View file

@ -1,4 +1,4 @@
{% extends "topologie/sidebar.html" %} {% extends 'preferences/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -24,15 +24,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endcomment %} {% endcomment %}
{% load bootstrap3 %} {% load bootstrap3 %}
{% load i18n %}
{% block title %}Création et modification de machines{% endblock %} {% block title %}{% trans "Deletion of preferences" %}{% endblock %}
{% block content %} {% block content %}
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
<h4>Attention, voulez-vous vraiment supprimer cet objet {{ objet_name }} ( {{ objet }} ) ?</h4> <h4>{% blocktrans %}Warning: are you sure you want to delete this {{ objet_name }} object ( {{ objet }} )?{% endblocktrans %}</h4>
{% bootstrap_button "Confirmer" button_type="submit" icon="trash" %} {% trans "Confirm" as tr_confirm %}
{% bootstrap_button tr_confirm button_type="submit" icon="trash" %}
</form> </form>
<br /> <br />
<br /> <br />

View file

@ -1,4 +1,4 @@
{% extends "preferences/sidebar.html" %} {% extends 'preferences/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -69,7 +69,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<tr> <tr>
<th>{% trans "General message displayed on the website" %}</th> <th>{% trans "General message displayed on the website" %}</th>
<td>{{ generaloptions.general_message }}</td> <td>{{ generaloptions.general_message }}</td>
<th>{% trans "Main site url" %}</th> <th>{% trans "Main site URL" %}</th>
<td>{{ generaloptions.main_site_url }}</td> <td>{{ generaloptions.main_site_url }}</td>
</tr> </tr>
<tr> <tr>
@ -120,7 +120,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<th>{% trans "Self registration" %}</th> <th>{% trans "Self registration" %}</th>
<td>{{ useroptions.self_adhesion|tick }}</td> <td>{{ useroptions.self_adhesion|tick }}</td>
<th>{% trans "Delete not yet active users after" %}</th> <th>{% trans "Delete not yet active users after" %}</th>
<td>{{ useroptions.delete_notyetactive }} days</td> <td>{% blocktrans with delete_notyetactive=useroptions.delete_notyetactive %}{{ delete_notyetactive }} days{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<th>{% trans "All users are active by default" %}</th> <th>{% trans "All users are active by default" %}</th>
@ -218,11 +218,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</tr> </tr>
</table> </table>
<h4>Clef radius</h4> <h4>{% trans "RADIUS keys" %}</h4>
{% can_create RadiusKey%} {% can_create RadiusKey%}
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-radiuskey' %}"><i class="fa fa-plus"></i> Ajouter une clef radius</a> <a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-radiuskey' %}"><i class="fa fa-plus"></i>{% trans " Add a RADIUS key" %}</a>
{% acl_end %} {% acl_end %}
{% include "preferences/aff_radiuskey.html" with radiuskey_list=radiuskey_list %} {% include 'preferences/aff_radiuskey.html' with radiuskey_list=radiuskey_list %}
</div> </div>
</div> </div>
@ -230,7 +230,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="panel panel-default" id="switches"> <div class="panel panel-default" id="switches">
<div class="panel-heading" data-toggle="collapse" href="#collapse_switches"> <div class="panel-heading" data-toggle="collapse" href="#collapse_switches">
<h4 class="panel-title"> <h4 class="panel-title">
<a><i class="fa fa-server"></i> Configuration des Switches</a> <a><i class="fa fa-server"></i>{% trans "Configuration of switches" %}</a>
</h4> </h4>
</div> </div>
<div id="collapse_switches" class="panel-collapse panel-body collapse"> <div id="collapse_switches" class="panel-collapse panel-body collapse">
@ -243,64 +243,64 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<table class="table table-striped"> <table class="table table-striped">
<tr> <tr>
<th>Web management, activé si provision automatique</th> <th>{% trans "Web management, activated in case of automatic provision" %}</th>
<td>{{ topologieoptions.switchs_web_management }}</td> <td>{{ topologieoptions.switchs_web_management }}</td>
<th>Rest management, activé si provision auto</th> <th>{% trans "REST management, activated in case of automatic provision" %}</th>
<td>{{ topologieoptions.switchs_rest_management }}</td> <td>{{ topologieoptions.switchs_rest_management }}</td>
</tr> </tr>
</table> </table>
<h5>{% if topologieoptions.provision_switchs_enabled %}<span class="label label-success">Provision de la config des switchs{% else %}<span class="label label-danger">Provision de la config des switchs{% endif%}</span></h5> <h5>{% if topologieoptions.provision_switchs_enabled %}<span class="label label-success">{% trans "Provision of configuration for switches" %}{% else %}<span class="label label-danger">{% trans "Provision of configuration for switches" %}{% endif%}</span></h5>
<table class="table table-striped"> <table class="table table-striped">
<tr> <tr>
<th>Switchs configurés automatiquement</th> <th>{% trans "Switches with automatic provision" %}</th>
<td>{{ topologieoptions.provisioned_switchs|join:", " }} {% if topologieoptions.provisioned_switchs %}<span class="label label-success"> OK{% else %}<span class="label label-danger">Manquant{% endif %}</span></td> <td>{{ topologieoptions.provisioned_switchs|join:", " }} {% if topologieoptions.provisioned_switchs %}<span class="label label-success">{% trans "OK" %}{% else %}<span class="label label-danger">{% trans "Missing" %}{% endif %}</span></td>
</tr> </tr>
<tr> <tr>
<th>Plage d'ip de management des switchs</th> <th>{% trans "IP range for the management of switches" %}</th>
<td>{{ topologieoptions.switchs_ip_type }} {% if topologieoptions.switchs_ip_type %}<span class="label label-success"> OK{% else %}<span class="label label-danger">Manquant{% endif %}</span></td> <td>{{ topologieoptions.switchs_ip_type }} {% if topologieoptions.switchs_ip_type %}<span class="label label-success">{% trans "OK" %}{% else %}<span class="label label-danger">{% trans "Missing" %}{% endif %}</span></td>
</tr> </tr>
<tr> <tr>
<th>Serveur des config des switchs</th> <th>{% trans "Server for the configuration of switches" %}</th>
<td>{{ topologieoptions.switchs_management_interface }} {% if topologieoptions.switchs_management_interface %} - {{ topologieoptions.switchs_management_interface_ip }} <span class="label label-success"> OK{% else %}<span class="label label-danger">Manquant{% endif %}</span></td> <td>{{ topologieoptions.switchs_management_interface }} {% if topologieoptions.switchs_management_interface %} - {{ topologieoptions.switchs_management_interface_ip }} <span class="label label-success">{% trans "OK" %}{% else %}<span class="label label-danger">{% trans "Missing" %}{% endif %}</span></td>
</tr> </tr>
<tr> <tr>
<th>Mode de provision des switchs</th> <th>{% trans "Provision of configuration mode for switches" %}</th>
<td>{{ topologieoptions.switchs_provision }}</td> <td>{{ topologieoptions.switchs_provision }}</td>
</tr> </tr>
<tr> <tr>
<th>Mode TFTP</th> <th>{% trans "TFTP mode" %}</th>
<td><span class="label label-success"> OK</span></td> <td><span class="label label-success">{% trans "OK" %}</span></td>
</tr> </tr>
<tr> <tr>
<th>Mode SFTP</th> <th>{% trans "SFTP mode" %}</th>
<td>{% if topologieoptions.switchs_management_sftp_creds %}<span class="label label-success"> OK{% else %}<span class="label label-danger">Creds manquants{% endif %}</span></td> <td>{% if topologieoptions.switchs_management_sftp_creds %}<span class="label label-success">{% trans "OK" %}{% else %}<span class="label label-danger">{% trans "Missing credentials" %}{% endif %}</span></td>
</tr> </tr>
</table> </table>
<h6>Creds de management des switchs</h6> <h6>{% trans "Switch management credentials" %}</h6>
{% can_create SwitchManagementCred%} {% can_create SwitchManagementCred%}
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-switchmanagementcred' %}"><i class="fa fa-plus"></i> Ajouter un id/mdp de management switch</a> <a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-switchmanagementcred' %}"><i class="fa fa-plus"></i>{% trans " Add switch management credentials" %}</a>
{% acl_end %} {% acl_end %}
<p> <p>
</p> </p>
{% if switchmanagementcred_list %}<span class="label label-success"> OK{% else %}<span class="label label-danger">Manquant{% endif %}</span> {% if switchmanagementcred_list %}<span class="label label-success">{% trans "OK" %}{% else %}<span class="label label-danger">{% trans "Missing" %}{% endif %}</span>
{% include "preferences/aff_switchmanagementcred.html" with switchmanagementcred_list=switchmanagementcred_list %} {% include 'preferences/aff_switchmanagementcred.html' with switchmanagementcred_list=switchmanagementcred_list %}
</div> </div>
</div> </div>
<div class="panel panel-default" id="radius"> <div class="panel panel-default" id="radius">
<div class="panel-heading" data-toggle="collapse" href="#collapse_radius"> <div class="panel-heading" data-toggle="collapse" href="#collapse_radius">
<h4 class="panel-title"><a><i class="fa fa-circle"></i> {% trans "Radius preferences" %}</h4></a> <h4 class="panel-title"><a><i class="fa fa-circle"></i> {% trans "RADIUS preferences" %}</h4></a>
</div> </div>
<div id="collapse_radius" class="panel-collapse panel-body collapse"> <div id="collapse_radius" class="panel-collapse panel-body collapse">
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:edit-options' 'RadiusOption' %}"> <a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:edit-options' 'RadiusOption' %}">
<i class="fa fa-edit"></i> <i class="fa fa-edit"></i>
{% trans "Edit" %} {% trans "Edit" %}
</a> </a>
{% include "preferences/aff_radiusoptions.html" %} {% include 'preferences/aff_radiusoptions.html' %}
</div> </div>
</div> </div>
@ -350,7 +350,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="panel panel-default" id="mail"> <div class="panel panel-default" id="mail">
<div class="panel-heading" data-toggle="collapse" href="#collapse_mail"> <div class="panel-heading" data-toggle="collapse" href="#collapse_mail">
<h4 class="panel-title"> <h4 class="panel-title">
<a><i class="fa fa-comment"></i> Message pour les mails</a> <a><i class="fa fa-comment"></i>{% trans "Message for emails" %}</a>
</h4> </h4>
</div> </div>
<div id="collapse_mail" class="panel-collapse panel-body collapse"> <div id="collapse_mail" class="panel-collapse panel-body collapse">
@ -377,16 +377,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="panel panel-default" id="rappels"> <div class="panel panel-default" id="rappels">
<div class="panel-heading" data-toggle="collapse" href="#collapse_rappels"> <div class="panel-heading" data-toggle="collapse" href="#collapse_rappels">
<h4 class="panel-title"> <h4 class="panel-title">
<a><i class="fa fa-bell"></i> Options pour le mail de fin d'adhésion</a> <a><i class="fa fa-bell"></i>{% trans "Options for the membership's end email" %}</a>
</h4> </h4>
</div> </div>
<div id="collapse_rappels" class="panel-collapse panel-body collapse"> <div id="collapse_rappels" class="panel-collapse panel-body collapse">
{% can_create preferences.Reminder%} {% can_create preferences.Reminder%}
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-reminder' %}"><i class="fa fa-plus"></i> Ajouter un rappel</a> <a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-reminder' %}"><i class="fa fa-plus"></i>{% trans " Add a reminder" %}</a>
<p></p> <p></p>
{% acl_end %} {% acl_end %}
{% include "preferences/aff_reminder.html" with reminder_list=reminder_list %} {% include 'preferences/aff_reminder.html' with reminder_list=reminder_list %}
</div> </div>
</div> </div>
@ -403,7 +403,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-service' %}"><i class="fa fa-plus"></i>{% trans " Add a service" %}</a> <a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-service' %}"><i class="fa fa-plus"></i>{% trans " Add a service" %}</a>
<p></p> <p></p>
{% acl_end %} {% acl_end %}
{% include "preferences/aff_service.html" with service_list=service_list %} {% include 'preferences/aff_service.html' with service_list=service_list %}
</div> </div>
</div> </div>
@ -417,18 +417,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div id="collapse_contact" class="panel-collapse panel-body collapse"> <div id="collapse_contact" class="panel-collapse panel-body collapse">
{% can_create preferences.MailContact %} {% can_create preferences.MailContact %}
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-mailcontact' %}"><i class="fa fa-plus"></i>{% trans "Add an address" %}</a> <a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-mailcontact' %}"><i class="fa fa-plus"></i>{% trans " Add an address" %}</a>
{% acl_end %} {% acl_end %}
<a class="btn btn-danger btn-sm" role="button" href="{% url 'preferences:del-mailcontact' %}"><i class="fa fa-trash"></i>{% trans "Delete one or several addresses" %}</a> <a class="btn btn-danger btn-sm" role="button" href="{% url 'preferences:del-mailcontact' %}"><i class="fa fa-trash"></i>{% trans " Delete one or several addresses" %}</a>
<p></p> <p></p>
{% include "preferences/aff_mailcontact.html" with mailcontact_list=mailcontact_list %} {% include 'preferences/aff_mailcontact.html' with mailcontact_list=mailcontact_list %}
</div> </div>
</div> </div>
<div class="panel panel-default" id="social"> <div class="panel panel-default" id="social">
<div class="panel-heading" data-toggle="collapse" href="#collapse_social"> <div class="panel-heading" data-toggle="collapse" href="#collapse_social">
<h4 class="panel-title"> <h4 class="panel-title">
<a><i class="fa fa-facebook"></i><i class="fa fa-twitter"></i> Réseaux sociaux</a> <a><i class="fa fa-facebook"></i><i class="fa fa-twitter"></i>{% trans "Social networks" %}</a>
</h4> </h4>
</div> </div>
<div id="collapse_social" class="panel-collapse panel-body collapse"> <div id="collapse_social" class="panel-collapse panel-body collapse">

View file

@ -1,4 +1,4 @@
{% extends "preferences/sidebar.html" %} {% extends 'preferences/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "preferences/sidebar.html" %} {% extends 'preferences/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "base.html" %} {% extends 'base.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -111,7 +111,7 @@ def edit_options(request, section):
model = getattr(models, section, None) model = getattr(models, section, None)
form_instance = getattr(forms, 'Edit' + section + 'Form', None) form_instance = getattr(forms, 'Edit' + section + 'Form', None)
if not (model or form_instance): if not (model or form_instance):
messages.error(request, _("Unknown object")) messages.error(request, _("Unknown object."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
options_instance, _created = model.objects.get_or_create() options_instance, _created = model.objects.get_or_create()
@ -186,7 +186,7 @@ def del_service(request, service_instance, **_kwargs):
"""Suppression d'un service de la page d'accueil""" """Suppression d'un service de la page d'accueil"""
if request.method == "POST": if request.method == "POST":
service_instance.delete() service_instance.delete()
messages.success(request, "Le service a été détruit") messages.success(request, _("The service was deleted."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'objet': service_instance, 'objet_name': 'service'}, {'objet': service_instance, 'objet_name': 'service'},
@ -204,7 +204,7 @@ def add_reminder(request):
messages.success(request, _("The reminder was added.")) messages.success(request, _("The reminder was added."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'preferenceform': reminder, 'action_name': _("Add a service")}, {'preferenceform': reminder, 'action_name': _("Add a reminder")},
'preferences/preferences.html', 'preferences/preferences.html',
request request
) )
@ -220,7 +220,7 @@ def edit_reminder(request, reminder_instance, **_kwargs):
) )
if reminder.is_valid(): if reminder.is_valid():
reminder.save() reminder.save()
messages.success(request, _("The service was edited.")) messages.success(request, _("The reminder was edited."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'preferenceform': reminder, 'action_name': _("Edit")}, {'preferenceform': reminder, 'action_name': _("Edit")},
@ -236,7 +236,7 @@ def del_reminder(request, reminder_instance, **_kwargs):
"""Destruction d'un reminder""" """Destruction d'un reminder"""
if request.method == "POST": if request.method == "POST":
reminder_instance.delete() reminder_instance.delete()
messages.success(request, "Le reminder a été détruit") messages.success(request, _("The reminder was deleted."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'objet': reminder_instance, 'objet_name': 'reminder'}, {'objet': reminder_instance, 'objet_name': 'reminder'},
@ -252,10 +252,10 @@ def add_radiuskey(request):
radiuskey = RadiusKeyForm(request.POST or None) radiuskey = RadiusKeyForm(request.POST or None)
if radiuskey.is_valid(): if radiuskey.is_valid():
radiuskey.save() radiuskey.save()
messages.success(request, "Cette clef a été ajouté") messages.success(request, _("The RADIUS key was added."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'preferenceform': radiuskey, 'action_name': 'Ajouter'}, {'preferenceform': radiuskey, 'action_name': _("Add a RADIUS key")},
'preferences/preferences.html', 'preferences/preferences.html',
request request
) )
@ -266,10 +266,10 @@ def edit_radiuskey(request, radiuskey_instance, **_kwargs):
radiuskey = RadiusKeyForm(request.POST or None, instance=radiuskey_instance) radiuskey = RadiusKeyForm(request.POST or None, instance=radiuskey_instance)
if radiuskey.is_valid(): if radiuskey.is_valid():
radiuskey.save() radiuskey.save()
messages.success(request, "Radiuskey modifié") messages.success(request, _("The RADIUS key was edited."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'preferenceform': radiuskey, 'action_name': 'Editer'}, {'preferenceform': radiuskey, 'action_name': _("Edit")},
'preferences/preferences.html', 'preferences/preferences.html',
request request
) )
@ -282,10 +282,10 @@ def del_radiuskey(request, radiuskey_instance, **_kwargs):
if request.method == "POST": if request.method == "POST":
try: try:
radiuskey_instance.delete() radiuskey_instance.delete()
messages.success(request, "La radiuskey a été détruite") messages.success(request, _("The RADIUS key was deleted."))
except ProtectedError: except ProtectedError:
messages.error(request, "Erreur la\ messages.error(request, _("The RADIUS key is assigned to at least"
clef ne peut être supprimé, elle est affectée à des switchs") " one switch, you can't delete it."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'objet': radiuskey_instance, 'objet_name': 'radiuskey'}, {'objet': radiuskey_instance, 'objet_name': 'radiuskey'},
@ -301,10 +301,10 @@ def add_switchmanagementcred(request):
switchmanagementcred = SwitchManagementCredForm(request.POST or None) switchmanagementcred = SwitchManagementCredForm(request.POST or None)
if switchmanagementcred.is_valid(): if switchmanagementcred.is_valid():
switchmanagementcred.save() switchmanagementcred.save()
messages.success(request, "Ces creds ont été ajoutés") messages.success(request, _("The switch management credentials were added."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'preferenceform': switchmanagementcred, 'action_name': 'Ajouter'}, {'preferenceform': switchmanagementcred, 'action_name': _("Add switch management credentials")},
'preferences/preferences.html', 'preferences/preferences.html',
request request
) )
@ -315,10 +315,10 @@ def edit_switchmanagementcred(request, switchmanagementcred_instance, **_kwargs)
switchmanagementcred = SwitchManagementCredForm(request.POST or None, instance=switchmanagementcred_instance) switchmanagementcred = SwitchManagementCredForm(request.POST or None, instance=switchmanagementcred_instance)
if switchmanagementcred.is_valid(): if switchmanagementcred.is_valid():
switchmanagementcred.save() switchmanagementcred.save()
messages.success(request, "Creds de managament modifié") messages.success(request, _("The switch management credentials were edited."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'preferenceform': switchmanagementcred, 'action_name': 'Editer'}, {'preferenceform': switchmanagementcred, 'action_name': _("Edit")},
'preferences/preferences.html', 'preferences/preferences.html',
request request
) )
@ -331,10 +331,11 @@ def del_switchmanagementcred(request, switchmanagementcred_instance, **_kwargs):
if request.method == "POST": if request.method == "POST":
try: try:
switchmanagementcred_instance.delete() switchmanagementcred_instance.delete()
messages.success(request, "Ces creds ont été détruits") messages.success(request, _("The switch management credentials were deleted."))
except ProtectedError: except ProtectedError:
messages.error(request, "Erreur ces\ messages.error(request, _("The switch management credentials are"
creds ne peuvent être supprimés, ils sont affectés à des switchs") " assigned to at least one switch, you"
" can't delete them."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'objet': switchmanagementcred_instance, 'objet_name': 'switchmanagementcred'}, {'objet': switchmanagementcred_instance, 'objet_name': 'switchmanagementcred'},

View file

@ -73,9 +73,9 @@ def smtp_check(local_part):
reply_code = srv.getreply()[0] reply_code = srv.getreply()[0]
srv.close() srv.close()
if reply_code in [250, 252]: if reply_code in [250, 252]:
return True, _("This domain is already taken") return True, _("This domain is already taken.")
except: except:
return True, _("Smtp unreachable") return True, _("SMTP unreachable.")
return False, None return False, None

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-23 15:03+0200\n" "POT-Creation-Date: 2019-01-12 16:48+0100\n"
"PO-Revision-Date: 2018-03-31 16:09+0002\n" "PO-Revision-Date: 2018-03-31 16:09+0002\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"
@ -42,6 +42,14 @@ msgstr "Vous n'avez pas le droit d'accéder à ce menu."
msgid "You don't have the right to edit the history." msgid "You don't have the right to edit the history."
msgstr "Vous n'avez pas le droit de modifier l'historique." msgstr "Vous n'avez pas le droit de modifier l'historique."
#: base.py:76
msgid "This domain is already taken."
msgstr "Ce domaine est déjà pris."
#: base.py:78
msgid "SMTP unreachable."
msgstr "SMTP injoignable."
#: mixins.py:111 #: mixins.py:111
#, python-format #, python-format
msgid "You don't have the right to create a %s object." msgid "You don't have the right to create a %s object."
@ -87,15 +95,15 @@ msgstr "À propos de %(AssoName)s"
#: templates/re2o/about.html:36 #: templates/re2o/about.html:36
msgid "" msgid ""
"Re2o is an administration tool initiated by <a href=\"https://rezometz.org/" "Re2o is an administration tool initiated by <a href=\"https://rezometz.org/"
"\">Rezo Metz</a> and a few members of other <a href=\"https://" "\">Rezo Metz</a> and a few members of other <a href=\"https://federez.net"
"federez.net\">FedeRez</a> associations around the summer 2016.<br /> It is " "\">FedeRez</a> associations around the summer 2016.<br /> It is intended to "
"intended to be a tool independant from any network infrastructure so it can " "be a tool independant from any network infrastructure so it can be setup in "
"be setup in \"a few steps\". This tool is entirely free and available under " "\"a few steps\". This tool is entirely free and available under a GNU Public "
"a GNU Public License v2 (GPLv2) license on <a href=\"https://gitlab.federez." "License v2 (GPLv2) license on <a href=\"https://gitlab.federez.net/federez/"
"net/federez/re2o/\">FedeRez gitlab</a>.<br /> Re2o's mainteners are " "re2o/\">FedeRez gitlab</a>.<br /> Re2o's mainteners are volunteers mainly "
"volunteers mainly from French schools. <br /> If you want to get involved in " "from French schools. <br /> If you want to get involved in the development "
"the development process, we will be glad to welcome you so do not hesitate " "process, we will be glad to welcome you so do not hesitate to contact us and "
"to contact us and come help us build the future of Re2o." "come help us build the future of Re2o."
msgstr "" msgstr ""
"Re2o est un outil d'administration initié par <a href=\"https://rezometz.org/" "Re2o est un outil d'administration initié par <a href=\"https://rezometz.org/"
"\">Rézo Metz</a> et quelques membres d'autres associations de <a href=" "\">Rézo Metz</a> et quelques membres d'autres associations de <a href="
@ -190,7 +198,7 @@ msgstr "Accueil"
msgid "Welcome to %(name_website)s" msgid "Welcome to %(name_website)s"
msgstr "Bienvenue sur %(name_website)s" msgstr "Bienvenue sur %(name_website)s"
#: templates/re2o/index.html:43 templates/re2o/index.html:45 #: templates/re2o/index.html:43
msgid "Registration" msgid "Registration"
msgstr "Inscription" msgstr "Inscription"
@ -202,17 +210,25 @@ msgstr ""
"Si vous n'avez pas encore de compte et que vous voulez accéder à Internet et " "Si vous n'avez pas encore de compte et que vous voulez accéder à Internet et "
"aux services de l'association, créez votre espace personnel." "aux services de l'association, créez votre espace personnel."
#: templates/re2o/index.html:55 templates/re2o/index.html:57 #: templates/re2o/index.html:45
msgid "Sign up"
msgstr "S'inscrire"
#: templates/re2o/index.html:55
msgid "Logging in" msgid "Logging in"
msgstr "Identification" msgstr "Identification"
#: templates/re2o/index.html:56 #: templates/re2o/index.html:56
msgid "" msgid ""
"If you already have an account, log in. You can manage your subscription to " "If you already have an account, log in. You can manage your subscriptions to "
"the organisation, your machines and all your services." "the organisation, your machines and all your services."
msgstr "" msgstr ""
"Si vous avez déjà un compte, identifiez-vous. Vous pouvez gérer votre " "Si vous avez déjà un compte, identifiez-vous. Vous pouvez gérer vos "
"cotisation à l'association, vos machines et tous vos services." "cotisations à l'association, vos machines et tous vos services."
#: templates/re2o/index.html:57
msgid "Log in"
msgstr "Se connecter"
#: templates/re2o/index.html:68 #: templates/re2o/index.html:68
msgid "My profile" msgid "My profile"
@ -220,10 +236,10 @@ msgstr "Mon profil"
#: templates/re2o/index.html:69 #: templates/re2o/index.html:69
msgid "" msgid ""
"To manage your subscription, your machines and all your services, access " "To manage your subscriptions, your machines and all your services, access "
"your profile." "your profile."
msgstr "" msgstr ""
"Pour gérer votre cotisation, vos machines et tous vos services, accéder à " "Pour gérer vos cotisations, vos machines et tous vos services, accéder à "
"votre profil." "votre profil."
#: templates/re2o/index.html:70 #: templates/re2o/index.html:70
@ -249,5 +265,5 @@ msgid "Follow @%(twitter_account_name)s"
msgstr "Suivre @%(twitter_account_name)s" msgstr "Suivre @%(twitter_account_name)s"
#: views.py:87 #: views.py:87
msgid "Unable to get the information" msgid "Unable to get the information."
msgstr "Impossible d'obtenir l'information" msgstr "Impossible d'obtenir l'information."

View file

@ -1,4 +1,4 @@
{% extends "re2o/sidebar.html" %} {% extends 're2o/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "re2o/sidebar.html" %} {% extends 're2o/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "re2o/sidebar.html" %} {% extends 're2o/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %} {% block content %}
<h2>{% blocktrans %}History of {{ object }}{% endblocktrans %}</h2> <h2>{% blocktrans %}History of {{ object }}{% endblocktrans %}</h2>
{% include "re2o/aff_history.html" with reversions=reversions %} {% include 're2o/aff_history.html' with reversions=reversions %}
<br /> <br />
<br /> <br />
<br /> <br />

View file

@ -1,4 +1,4 @@
{% extends "re2o/sidebar.html" %} {% extends 're2o/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -42,7 +42,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="caption"> <div class="caption">
<h3>{% trans "Registration" %}</h3> <h3>{% trans "Registration" %}</h3>
<p>{% trans "If you don't have an account yet and you want to access the Internet and the organisation's services, create your own personal account." %}</p> <p>{% trans "If you don't have an account yet and you want to access the Internet and the organisation's services, create your own personal account." %}</p>
<p><a href="{% url 'users:new-user' %}" class="btn btn-primary" role="button">{% trans "Registration" %}</a></p> <p><a href="{% url 'users:new-user' %}" class="btn btn-primary" role="button">{% trans "Sign up" %}</a></p>
</div> </div>
</div> </div>
</div> </div>
@ -53,8 +53,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="thumbnail"> <div class="thumbnail">
<div class="caption"> <div class="caption">
<h3>{% trans "Logging in" %}</h3> <h3>{% trans "Logging in" %}</h3>
<p>{% trans "If you already have an account, log in. You can manage your subscription to the organisation, your machines and all your services." %}</p> <p>{% trans "If you already have an account, log in. You can manage your subscriptions to the organisation, your machines and all your services." %}</p>
<p><a href="{% url 'login' %}" class="btn btn-primary" role="button">{% trans "Logging in" %}</a></p> <p><a href="{% url 'login' %}" class="btn btn-primary" role="button">{% trans "Log in" %}</a></p>
</div> </div>
</div> </div>
</div> </div>
@ -66,7 +66,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="thumbnail"> <div class="thumbnail">
<div class="caption"> <div class="caption">
<h3>{% trans "My profile" %}</h3> <h3>{% trans "My profile" %}</h3>
<p>{% trans "To manage your subscription, your machines and all your services, access your profile." %}</p> <p>{% trans "To manage your subscriptions, your machines and all your services, access your profile." %}</p>
<p><a href="{% url 'users:mon-profil' %}" class="btn btn-primary" role="button">{% trans "Access my profile" %}</a></p> <p><a href="{% url 'users:mon-profil' %}" class="btn btn-primary" role="button">{% trans "Access my profile" %}</a></p>
</div> </div>
</div> </div>

View file

@ -1,4 +1,4 @@
{% extends "base.html" %} {% extends 'base.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -84,7 +84,7 @@ def about_page(request):
git_info_commit = last_commit.hexsha git_info_commit = last_commit.hexsha
git_info_commit_date = last_commit.committed_datetime git_info_commit_date = last_commit.committed_datetime
except: except:
NO_GIT_MSG = _("Unable to get the information") NO_GIT_MSG = _("Unable to get the information.")
git_info_remote = NO_GIT_MSG git_info_remote = NO_GIT_MSG
git_info_branch = NO_GIT_MSG git_info_branch = NO_GIT_MSG
git_info_commit = NO_GIT_MSG git_info_commit = NO_GIT_MSG

View file

@ -33,7 +33,7 @@ CHOICES_USER = (
('0', _("Active")), ('0', _("Active")),
('1', _("Disabled")), ('1', _("Disabled")),
('2', _("Archived")), ('2', _("Archived")),
('3', _("Not Yet Active")), ('3', _("Not yet active")),
) )
CHOICES_AFF = ( CHOICES_AFF = (

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-15 18:15+0200\n" "POT-Creation-Date: 2019-01-08 23:56+0100\n"
"PO-Revision-Date: 2018-06-24 20:10+0200\n" "PO-Revision-Date: 2018-06-24 20:10+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"
@ -42,44 +42,48 @@ msgstr "Désactivés"
msgid "Archived" msgid "Archived"
msgstr "Archivés" msgstr "Archivés"
#: forms.py:39 #: forms.py:36
msgid "Not yet active"
msgstr "Pas encore adhéré"
#: forms.py:40
msgid "Users" msgid "Users"
msgstr "Utilisateurs" msgstr "Utilisateurs"
#: forms.py:40 #: forms.py:41
msgid "Machines" msgid "Machines"
msgstr "Machines" msgstr "Machines"
#: forms.py:41 #: forms.py:42
msgid "Invoices" msgid "Invoices"
msgstr "Factures" msgstr "Factures"
#: forms.py:42 #: forms.py:43
msgid "Bans" msgid "Bans"
msgstr "Bannissements" msgstr "Bannissements"
#: forms.py:43 #: forms.py:44
msgid "Whitelists" msgid "Whitelists"
msgstr "Accès gracieux" msgstr "Accès gracieux"
#: forms.py:44 #: forms.py:45
msgid "Rooms" msgid "Rooms"
msgstr "Chambres" msgstr "Chambres"
#: forms.py:45 #: forms.py:46
msgid "Ports" msgid "Ports"
msgstr "Ports" msgstr "Ports"
#: forms.py:46 #: forms.py:47
msgid "Switches" msgid "Switches"
msgstr "Commutateurs réseau" msgstr "Commutateurs réseau"
#: forms.py:59 forms.py:71 templates/search/search.html:29 #: forms.py:60 forms.py:72 templates/search/search.html:29
#: templates/search/search.html:48 #: templates/search/search.html:48
msgid "Search" msgid "Search"
msgstr "Rechercher" msgstr "Rechercher"
#: forms.py:61 forms.py:73 #: forms.py:62 forms.py:74
msgid "" msgid ""
"Use « » and «,» to specify distinct words, «\"query\"» for an exact search " "Use « » and «,» to specify distinct words, «\"query\"» for an exact search "
"and «\\» to escape a character." "and «\\» to escape a character."
@ -87,19 +91,19 @@ msgstr ""
"Utilisez « » et «,» pour spécifier différents mots, «\"query\"» pour une " "Utilisez « » et «,» pour spécifier différents mots, «\"query\"» pour une "
"recherche exacte et «\\» pour échapper un caractère." "recherche exacte et «\\» pour échapper un caractère."
#: forms.py:80 #: forms.py:81
msgid "Users filter" msgid "Users filter"
msgstr "Filtre utilisateurs" msgstr "Filtre utilisateurs"
#: forms.py:87 #: forms.py:88
msgid "Display filter" msgid "Display filter"
msgstr "Filtre affichage" msgstr "Filtre affichage"
#: forms.py:95 #: forms.py:96
msgid "Start date" msgid "Start date"
msgstr "Date de début" msgstr "Date de début"
#: forms.py:99 #: forms.py:100
msgid "End date" msgid "End date"
msgstr "Date de fin" msgstr "Date de fin"
@ -136,11 +140,11 @@ msgid "Results among rooms:"
msgstr "Résultats parmi les chambres :" msgstr "Résultats parmi les chambres :"
#: templates/search/index.html:61 #: templates/search/index.html:61
msgid "Results among ports" msgid "Results among ports:"
msgstr "Résultats parmi les ports :" msgstr "Résultats parmi les ports :"
#: templates/search/index.html:65 #: templates/search/index.html:65
msgid "Results among switches" msgid "Results among switches:"
msgstr "Résultats parmi les commutateurs réseau :" msgstr "Résultats parmi les commutateurs réseau :"
#: templates/search/index.html:69 #: templates/search/index.html:69

View file

@ -1,4 +1,4 @@
{% extends "search/sidebar.html" %} {% extends 'search/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -31,39 +31,39 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %} {% block content %}
{% if users %} {% if users %}
<h2>{% trans "Results among users:" %}</h2> <h2>{% trans "Results among users:" %}</h2>
{% include "users/aff_users.html" with users_list=users %} {% include 'users/aff_users.html' with users_list=users %}
{% endif%} {% endif%}
{% if clubs %} {% if clubs %}
<h2>{% trans "Results among clubs:" %}</h2> <h2>{% trans "Results among clubs:" %}</h2>
{% include "users/aff_clubs.html" with clubs_list=clubs %} {% include 'users/aff_clubs.html' with clubs_list=clubs %}
{% endif%} {% endif%}
{% if machines %} {% if machines %}
<h2>{% trans "Results among machines:" %}</h2> <h2>{% trans "Results among machines:" %}</h2>
{% include "machines/aff_machines.html" with machines_list=machines %} {% include 'machines/aff_machines.html' with machines_list=machines %}
{% endif %} {% endif %}
{% if factures %} {% if factures %}
<h2>{% trans "Results among invoices:" %}</h2> <h2>{% trans "Results among invoices:" %}</h2>
{% include "cotisations/aff_cotisations.html" with facture_list=factures %} {% include 'cotisations/aff_cotisations.html' with facture_list=factures %}
{% endif %} {% endif %}
{% if whitelists %} {% if whitelists %}
<h2>{% trans "Results among whitelists:" %}</h2> <h2>{% trans "Results among whitelists:" %}</h2>
{% include "users/aff_whitelists.html" with white_list=whitelists %} {% include 'users/aff_whitelists.html' with white_list=whitelists %}
{% endif %} {% endif %}
{% if bans %} {% if bans %}
<h2>{% trans "Results among bans:" %}</h2> <h2>{% trans "Results among bans:" %}</h2>
{% include "users/aff_bans.html" with ban_list=bans %} {% include 'users/aff_bans.html' with ban_list=bans %}
{% endif %} {% endif %}
{% if rooms %} {% if rooms %}
<h2>{% trans "Results among rooms:" %}</h2> <h2>{% trans "Results among rooms:" %}</h2>
{% include "topologie/aff_chambres.html" with room_list=rooms %} {% include 'topologie/aff_chambres.html' with room_list=rooms %}
{% endif %} {% endif %}
{% if ports %} {% if ports %}
<h2>{% trans "Results among ports" %}</h2> <h2>{% trans "Results among ports:" %}</h2>
{% include "topologie/aff_port.html" with port_list=ports search=True %} {% include 'topologie/aff_port.html' with port_list=ports search=True %}
{% endif %} {% endif %}
{% if switches %} {% if switches %}
<h2>{% trans "Results among switches" %}</h2> <h2>{% trans "Results among switches:" %}</h2>
{% include "topologie/aff_switch.html" with switch_list=switches %} {% include 'topologie/aff_switch.html' with switch_list=switches %}
{% endif %} {% endif %}
{% if not users and not machines and not factures and not whitelists and not bans and not rooms and not ports and not switches %} {% if not users and not machines and not factures and not whitelists and not bans and not rooms and not ports and not switches %}
<h3>{% trans "No result" %}</h3> <h3>{% trans "No result" %}</h3>

View file

@ -1,4 +1,4 @@
{% extends "search/sidebar.html" %} {% extends 'search/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -34,10 +34,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<form class="form"> <form class="form">
{% bootstrap_field search_form.q %} {% bootstrap_field search_form.q %}
{% if search_form.u %} {% if search_form.u %}
{% include "buttons/multiple_checkbox_alt.html" with field=search_form.u %} {% include 'buttons/multiple_checkbox_alt.html' with field=search_form.u %}
{% endif %} {% endif %}
{% if search_form.a %} {% if search_form.a %}
{% include "buttons/multiple_checkbox_alt.html" with field=search_form.a %} {% include 'buttons/multiple_checkbox_alt.html' with field=search_form.a %}
{% endif %} {% endif %}
{% if search_form.s %} {% if search_form.s %}
{% bootstrap_field search_form.s %} {% bootstrap_field search_form.s %}

View file

@ -1,4 +1,4 @@
{% extends "base.html" %} {% extends 'base.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en se veut agnostique au réseau considéré, de manière à être installable en
@ -26,11 +26,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% load i18n %} {% load i18n %}
{% block sidebar %} {% block sidebar %}
<a class="list-group-item list-group-item-warning" href="{% url "search:search" %}"> <a class="list-group-item list-group-item-warning" href="{% url 'search:search' %}">
<i class="fa fa-search"></i> <i class="fa fa-search"></i>
{% trans "Simple search" %} {% trans "Simple search" %}
</a> </a>
<a class="list-group-item list-group-item-warning" href="{% url "search:searchp" %}"> <a class="list-group-item list-group-item-warning" href="{% url 'search:searchp' %}">
<i class="fa fa-search-plus"></i> <i class="fa fa-search-plus"></i>
{% trans "Advanced search" %} {% trans "Advanced search" %}
</a> </a>

View file

@ -96,14 +96,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<li class="dropdown"> <li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class="fa fa-sitemap"></i> {% trans "Topology" %}<span class="caret"></span></a> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class="fa fa-sitemap"></i> {% trans "Topology" %}<span class="caret"></span></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="{% url "topologie:index" %}"><i class="fa fa-microchip"></i> {% trans "Switches" %}</a></li> <li><a href="{% url 'topologie:index' %}"><i class="fa fa-microchip"></i> {% trans "Switches" %}</a></li>
<li><a href="{% url "topologie:index-ap" %}"><i class="fa fa-wifi"></i> {% trans "Access points" %}</a></li> <li><a href="{% url 'topologie:index-ap' %}"><i class="fa fa-wifi"></i> {% trans "Access points" %}</a></li>
<li><a href="{% url "topologie:index-room" %}"><i class="fa fa-home"></i> {% trans "Rooms" %}</a></li> <li><a href="{% url 'topologie:index-room' %}"><i class="fa fa-home"></i> {% trans "Rooms" %}</a></li>
</ul> </ul>
</li> </li>
{% acl_end %} {% acl_end %}
{% can_view_app logs %} {% can_view_app logs %}
<li><a href="{% url "logs:index" %}"><i class="fa fa-area-chart"></i> {% trans "Statistics" %}</a></li> <li><a href="{% url 'logs:index' %}"><i class="fa fa-area-chart"></i> {% trans "Statistics" %}</a></li>
{% acl_end %} {% acl_end %}
{% can_view_app preferences %} {% can_view_app preferences %}
<li> <li>
@ -137,12 +137,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% else %} {% else %}
{% can_view_any_app users machines cotisations %} {% can_view_any_app users machines cotisations %}
<li> <li>
<form action="{% url "search:search"%}" class="navbar-form" role="search"> <form action="{% url 'search:search' %}" class="navbar-form" role="search">
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control" placeholder="{% trans "Search" %}" name="q" id="search-term" {% if search_term %}value="{{ search_term }}"{% endif %}> <input type="text" class="form-control" placeholder="{% trans "Search" %}" name="q" id="search-term" {% if search_term %}value="{{ search_term }}"{% endif %}>
<div class="input-group-btn"> <div class="input-group-btn">
<button class="btn btn-default" type="submit"><i class="fa fa-search"></i></button> <button class="btn btn-default" type="submit"><i class="fa fa-search"></i></button>
<a href="{% url "search:searchp" %}" class="btn btn-default" role="button"><i class="fa fa-plus"></i></a> <a href="{% url 'search:searchp' %}" class="btn btn-default" role="button"><i class="fa fa-plus"></i></a>
</div> </div>
</div> </div>
</form> </form>
@ -153,7 +153,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<li class="dropdown"> <li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class="fa fa-user-circle"></i> {{ request.user.pseudo|slice:":15" }} <span class="caret"></span></a> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class="fa fa-user-circle"></i> {{ request.user.pseudo|slice:":15" }} <span class="caret"></span></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="{% url "users:mon-profil" %}"><i class="fa fa-user"></i> {% trans "My profile" %}</a></li> <li><a href="{% url 'users:mon-profil' %}"><i class="fa fa-user"></i> {% trans "My profile" %}</a></li>
<li><a id="toggle_login" href="{% url 'logout' %}"><i class="fa fa-sign-out"></i> {% trans "Log out" %}</a></li> <li><a id="toggle_login" href="{% url 'logout' %}"><i class="fa fa-sign-out"></i> {% trans "Log out" %}</a></li>
</ul> </ul>
</li> </li>
@ -200,7 +200,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<th scope="row">{% trans "Internet access" %}</th> <th scope="row">{% trans "Internet access" %}</th>
<td class="text-right"> <td class="text-right">
{% if request_user.has_access %} {% if request_user.has_access %}
<i class="text-success">{% blocktrans with request.user.end_access|date:"d b Y" as date %}Until {{ date }}{% endblocktrans %}</i> <i class="text-success">{% blocktrans with end_access_date=request.user.end_access|date:"d b Y" %}Until {{ end_access_date }}{% endblocktrans %}</i>
{% else %} {% else %}
<i class="text-danger">{% trans "Disabled" %}</i> <i class="text-danger">{% trans "Disabled" %}</i>
{% endif %} {% endif %}
@ -210,15 +210,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<th scope="row">{% trans "Membership" %}</th> <th scope="row">{% trans "Membership" %}</th>
<td class="text-right"> <td class="text-right">
{% if request_user.is_adherent %} {% if request_user.is_adherent %}
<i class="text-success">{% blocktrans with request_user.end_adhesion|date:"d b Y" as date %}Until {{ date }}{% endblocktrans %}</i> <i class="text-success">{% blocktrans with end_adhesion_date=request_user.end_adhesion|date:"d b Y" %}Until {{ end_adhesion_date }}{% endblocktrans %}</i>
{% else %} {% else %}
<i class="text-danger">{% trans "Not a member" %}</i> <i class="text-danger">{% trans "Non member" %}</i>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
</table> </table>
<div class="list-group"> <div class="list-group">
<a class="list-group-item list-group-item-info" role="button"href="{% url "users:mon-profil" %}"> <a class="list-group-item list-group-item-info" role="button"href="{% url 'users:mon-profil' %}">
<i class="fa fa-user-circle"></i> <i class="fa fa-user-circle"></i>
{% trans "View my profile" %} {% trans "View my profile" %}
</a> </a>
@ -236,10 +236,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</div> </div>
<ul class="list-group"> <ul class="list-group">
{% for interface in interfaces|slice:":5" %} {% for interface in interfaces|slice:":5" %}
<div class="list-group-item">{{interface}}</div> <div class="list-group-item">{{ interface }}</div>
{% endfor %} {% endfor %}
{% if interfaces|length > 5 %} {% if interfaces|length > 5 %}
<a class="list-group-item list-group-item-info" role="button" href="{% url "users:mon-profil" %}"> <a class="list-group-item list-group-item-info" role="button" href="{% url 'users:mon-profil' %}">
<i class="fa fa-plus"></i> <i class="fa fa-plus"></i>
{% trans "View my machines" %} {% trans "View my machines" %}
</a> </a>

Some files were not shown because too many files have changed in this diff Show more