mirror of https://gitlab.federez.net/re2o/re2o
240 changed files with 12642 additions and 3893 deletions
Binary file not shown.
File diff suppressed because it is too large
@ -0,0 +1,20 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Generated by Django 1.10.7 on 2018-08-11 23:03 |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('cotisations', '0030_custom_payment'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name='comnpaypayment', |
||||
|
name='production', |
||||
|
field=models.BooleanField(default=True, verbose_name='Production mode enabled (production url, instead of homologation)'), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,104 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Generated by Django 1.10.7 on 2018-07-21 20:01 |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
import django.db.models.deletion |
||||
|
from django.contrib.auth.management import create_permissions |
||||
|
import re2o.field_permissions |
||||
|
import re2o.mixins |
||||
|
|
||||
|
|
||||
|
def reattribute_ids(apps, schema_editor): |
||||
|
Facture = apps.get_model('cotisations', 'Facture') |
||||
|
BaseInvoice = apps.get_model('cotisations', 'BaseInvoice') |
||||
|
|
||||
|
for f in Facture.objects.all(): |
||||
|
base = BaseInvoice.objects.create(id=f.pk) |
||||
|
base.date = f.date |
||||
|
base.save() |
||||
|
f.baseinvoice_ptr = base |
||||
|
f.save() |
||||
|
|
||||
|
|
||||
|
def update_rights(apps, schema_editor): |
||||
|
Permission = apps.get_model('auth', 'Permission') |
||||
|
|
||||
|
# creates needed permissions |
||||
|
app = apps.get_app_config('cotisations') |
||||
|
app.models_module = True |
||||
|
create_permissions(app) |
||||
|
app.models_module = False |
||||
|
|
||||
|
former = Permission.objects.get(codename='change_facture_pdf') |
||||
|
new_1 = Permission.objects.get(codename='add_custominvoice') |
||||
|
new_2 = Permission.objects.get(codename='change_custominvoice') |
||||
|
new_3 = Permission.objects.get(codename='view_custominvoice') |
||||
|
new_4 = Permission.objects.get(codename='delete_custominvoice') |
||||
|
for group in former.group_set.all(): |
||||
|
group.permissions.remove(former) |
||||
|
group.permissions.add(new_1) |
||||
|
group.permissions.add(new_2) |
||||
|
group.permissions.add(new_3) |
||||
|
group.permissions.add(new_4) |
||||
|
group.save() |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('cotisations', '0031_comnpaypayment_production'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='BaseInvoice', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
|
('date', models.DateTimeField(auto_now_add=True, verbose_name='Date')), |
||||
|
], |
||||
|
bases=(re2o.mixins.RevMixin, re2o.mixins.AclMixin, re2o.field_permissions.FieldPermissionModelMixin, models.Model), |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='CustomInvoice', |
||||
|
fields=[ |
||||
|
('baseinvoice_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cotisations.BaseInvoice')), |
||||
|
('recipient', models.CharField(max_length=255, verbose_name='Recipient')), |
||||
|
('payment', models.CharField(max_length=255, verbose_name='Payment type')), |
||||
|
('address', models.CharField(max_length=255, verbose_name='Address')), |
||||
|
('paid', models.BooleanField(verbose_name='Paid')), |
||||
|
], |
||||
|
bases=('cotisations.baseinvoice',), |
||||
|
options={'permissions': (('view_custominvoice', 'Can view a custom invoice'),)}, |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='facture', |
||||
|
name='baseinvoice_ptr', |
||||
|
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='cotisations.BaseInvoice', null=True), |
||||
|
preserve_default=False, |
||||
|
), |
||||
|
migrations.RunPython(reattribute_ids), |
||||
|
migrations.AlterField( |
||||
|
model_name='vente', |
||||
|
name='facture', |
||||
|
field=models.ForeignKey(on_delete=models.CASCADE, verbose_name='Invoice', to='cotisations.BaseInvoice') |
||||
|
), |
||||
|
migrations.RemoveField( |
||||
|
model_name='facture', |
||||
|
name='id', |
||||
|
), |
||||
|
migrations.RemoveField( |
||||
|
model_name='facture', |
||||
|
name='date', |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='facture', |
||||
|
name='baseinvoice_ptr', |
||||
|
field=models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cotisations.BaseInvoice'), |
||||
|
), |
||||
|
migrations.RunPython(update_rights), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='facture', |
||||
|
options={'permissions': (('change_facture_control', 'Can change the "controlled" state'), ('view_facture', "Can see an invoice's details"), ('change_all_facture', 'Can edit all the previous invoices')), 'verbose_name': 'Invoice', 'verbose_name_plural': 'Invoices'}, |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,181 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Generated by Django 1.10.7 on 2018-08-18 11:19 |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
import cotisations.validators |
||||
|
import django.core.validators |
||||
|
from django.db import migrations, models |
||||
|
import django.db.models.deletion |
||||
|
import re2o.aes_field |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('cotisations', '0032_custom_invoice'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterModelOptions( |
||||
|
name='article', |
||||
|
options={'permissions': (('view_article', 'Can view an article object'), ('buy_every_article', 'Can buy every article')), 'verbose_name': 'article', 'verbose_name_plural': 'articles'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='balancepayment', |
||||
|
options={'verbose_name': 'user balance'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='banque', |
||||
|
options={'permissions': (('view_banque', 'Can view a bank object'),), 'verbose_name': 'bank', 'verbose_name_plural': 'banks'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='cotisation', |
||||
|
options={'permissions': (('view_cotisation', 'Can view a subscription object'), ('change_all_cotisation', 'Can edit the previous subscriptions')), 'verbose_name': 'subscription', 'verbose_name_plural': 'subscriptions'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='custominvoice', |
||||
|
options={'permissions': (('view_custominvoice', 'Can view a custom invoice object'),)}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='facture', |
||||
|
options={'permissions': (('change_facture_control', 'Can edit the "controlled" state'), ('view_facture', 'Can view an invoice object'), ('change_all_facture', 'Can edit all the previous invoices')), 'verbose_name': 'invoice', 'verbose_name_plural': 'invoices'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='paiement', |
||||
|
options={'permissions': (('view_paiement', 'Can view a payment method object'), ('use_every_payment', 'Can use every payment method')), 'verbose_name': 'payment method', 'verbose_name_plural': 'payment methods'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='vente', |
||||
|
options={'permissions': (('view_vente', 'Can view a purchase object'), ('change_all_vente', 'Can edit all the previous purchases')), 'verbose_name': 'purchase', 'verbose_name_plural': 'purchases'}, |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='article', |
||||
|
name='available_for_everyone', |
||||
|
field=models.BooleanField(default=False, verbose_name='is available for every user'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='article', |
||||
|
name='duration', |
||||
|
field=models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0)], verbose_name='duration (in months)'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='article', |
||||
|
name='name', |
||||
|
field=models.CharField(max_length=255, verbose_name='designation'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='article', |
||||
|
name='prix', |
||||
|
field=models.DecimalField(decimal_places=2, max_digits=5, verbose_name='unit price'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='article', |
||||
|
name='type_cotisation', |
||||
|
field=models.CharField(blank=True, choices=[('Connexion', 'Connection'), ('Adhesion', 'Membership'), ('All', 'Both of them')], default=None, max_length=255, null=True, verbose_name='subscription type'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='article', |
||||
|
name='type_user', |
||||
|
field=models.CharField(choices=[('Adherent', 'Member'), ('Club', 'Club'), ('All', 'Both of them')], default='All', max_length=255, verbose_name='type of users concerned'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='banque', |
||||
|
name='name', |
||||
|
field=models.CharField(max_length=255), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='comnpaypayment', |
||||
|
name='payment_credential', |
||||
|
field=models.CharField(blank=True, default='', max_length=255, verbose_name='ComNpay VAT Number'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='comnpaypayment', |
||||
|
name='payment_pass', |
||||
|
field=re2o.aes_field.AESEncryptedField(blank=True, max_length=255, null=True, verbose_name='ComNpay secret key'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='comnpaypayment', |
||||
|
name='production', |
||||
|
field=models.BooleanField(default=True, verbose_name='Production mode enabled (production URL, instead of homologation)'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='cotisation', |
||||
|
name='date_end', |
||||
|
field=models.DateTimeField(verbose_name='end date'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='cotisation', |
||||
|
name='date_start', |
||||
|
field=models.DateTimeField(verbose_name='start date'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='cotisation', |
||||
|
name='type_cotisation', |
||||
|
field=models.CharField(choices=[('Connexion', 'Connection'), ('Adhesion', 'Membership'), ('All', 'Both of them')], default='All', max_length=255, verbose_name='subscription type'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='cotisation', |
||||
|
name='vente', |
||||
|
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to='cotisations.Vente', verbose_name='purchase'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='facture', |
||||
|
name='cheque', |
||||
|
field=models.CharField(blank=True, max_length=255, verbose_name='cheque number'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='facture', |
||||
|
name='control', |
||||
|
field=models.BooleanField(default=False, verbose_name='controlled'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='facture', |
||||
|
name='valid', |
||||
|
field=models.BooleanField(default=True, verbose_name='validated'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='paiement', |
||||
|
name='available_for_everyone', |
||||
|
field=models.BooleanField(default=False, verbose_name='is available for every user'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='paiement', |
||||
|
name='is_balance', |
||||
|
field=models.BooleanField(default=False, editable=False, help_text='There should be only one balance payment method.', validators=[cotisations.validators.check_no_balance], verbose_name='is user balance'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='paiement', |
||||
|
name='moyen', |
||||
|
field=models.CharField(max_length=255, verbose_name='method'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='vente', |
||||
|
name='duration', |
||||
|
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='duration (in months)'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='vente', |
||||
|
name='facture', |
||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cotisations.BaseInvoice', verbose_name='invoice'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='vente', |
||||
|
name='name', |
||||
|
field=models.CharField(max_length=255, verbose_name='article'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='vente', |
||||
|
name='number', |
||||
|
field=models.IntegerField(validators=[django.core.validators.MinValueValidator(1)], verbose_name='amount'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='vente', |
||||
|
name='prix', |
||||
|
field=models.DecimalField(decimal_places=2, max_digits=5, verbose_name='price'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='vente', |
||||
|
name='type_cotisation', |
||||
|
field=models.CharField(blank=True, choices=[('Connexion', 'Connection'), ('Adhesion', 'Membership'), ('All', 'Both of them')], max_length=255, null=True, verbose_name='subscription type'), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,89 @@ |
|||||
|
{% comment %} |
||||
|
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 Hugo Levy-Falk |
||||
|
|
||||
|
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. |
||||
|
{% endcomment %} |
||||
|
{% load i18n %} |
||||
|
{% load acl %} |
||||
|
{% load logs_extra %} |
||||
|
{% load design %} |
||||
|
|
||||
|
<div class="table-responsive"> |
||||
|
{% if custom_invoice_list.paginator %} |
||||
|
{% include 'pagination.html' with list=custom_invoice_list %} |
||||
|
{% endif %} |
||||
|
|
||||
|
<table class="table table-striped"> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th> |
||||
|
{% trans "Recipient" as tr_recip %} |
||||
|
{% include 'buttons/sort.html' with prefix='invoice' col='user' text=tr_user %} |
||||
|
</th> |
||||
|
<th>{% trans "Designation" %}</th> |
||||
|
<th>{% trans "Total price" %}</th> |
||||
|
<th> |
||||
|
{% trans "Payment method" as tr_payment_method %} |
||||
|
{% include 'buttons/sort.html' with prefix='invoice' col='payement' text=tr_payment_method %} |
||||
|
</th> |
||||
|
<th> |
||||
|
{% trans "Date" as tr_date %} |
||||
|
{% include 'buttons/sort.html' with prefix='invoice' col='date' text=tr_date %} |
||||
|
</th> |
||||
|
<th> |
||||
|
{% trans "Invoice ID" as tr_invoice_id %} |
||||
|
{% include 'buttons/sort.html' with prefix='invoice' col='id' text=tr_invoice_id %} |
||||
|
</th> |
||||
|
<th> |
||||
|
{% trans "Paid" as tr_invoice_paid%} |
||||
|
{% include 'buttons/sort.html' with prefix='invoice' col='paid' text=tr_invoice_paid %} |
||||
|
</th> |
||||
|
<th></th> |
||||
|
<th></th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
{% for invoice in custom_invoice_list %} |
||||
|
<tr> |
||||
|
<td>{{ invoice.recipient }}</td> |
||||
|
<td>{{ invoice.name }}</td> |
||||
|
<td>{{ invoice.prix_total }}</td> |
||||
|
<td>{{ invoice.payment }}</td> |
||||
|
<td>{{ invoice.date }}</td> |
||||
|
<td>{{ invoice.id }}</td> |
||||
|
<td>{{ invoice.paid|tick }}</td> |
||||
|
<td> |
||||
|
{% can_edit invoice %} |
||||
|
{% include 'buttons/edit.html' with href='cotisations:edit-custom-invoice' id=invoice.id %} |
||||
|
{% acl_end %} |
||||
|
{% can_delete invoice %} |
||||
|
{% include 'buttons/suppr.html' with href='cotisations:del-custom-invoice' id=invoice.id %} |
||||
|
{% acl_end %} |
||||
|
{% history_button invoice %} |
||||
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:custom-invoice-pdf' invoice.id %}"> |
||||
|
<i class="fa fa-file-pdf"></i> {% trans "PDF" %} |
||||
|
</a> |
||||
|
</td> |
||||
|
</tr> |
||||
|
{% endfor %} |
||||
|
</table> |
||||
|
|
||||
|
{% if custom_invoice_list.paginator %} |
||||
|
{% include 'pagination.html' with list=custom_invoice_list %} |
||||
|
{% endif %} |
||||
|
</div> |
||||
@ -0,0 +1,22 @@ |
|||||
|
=== English version below === |
||||
|
|
||||
|
Bonjour {{name}}, |
||||
|
|
||||
|
Nous vous remercions pour votre achat auprès de {{asso_name}} et nous vous en joignons la facture. |
||||
|
|
||||
|
En cas de question, n’hésitez pas à nous contacter par mail à {{contact_mail}}. |
||||
|
|
||||
|
Cordialement, |
||||
|
L’équipe de {{asso_name}} |
||||
|
|
||||
|
|
||||
|
=== English version === |
||||
|
|
||||
|
Dear {{name}}, |
||||
|
|
||||
|
Thank you for your purchase. Here is your invoice. |
||||
|
|
||||
|
Should you need extra information, you can email us at {{contact_mail}}. |
||||
|
|
||||
|
Best regards, |
||||
|
{{ asso_name }}'s team |
||||
@ -0,0 +1,36 @@ |
|||||
|
{% extends "cotisations/sidebar.html" %} |
||||
|
{% comment %} |
||||
|
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 © 2017 Gabriel Détraz |
||||
|
Copyright © 2017 Goulven Kermarec |
||||
|
Copyright © 2017 Augustin Lemesle |
||||
|
|
||||
|
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. |
||||
|
{% endcomment %} |
||||
|
{% load acl %} |
||||
|
{% load i18n %} |
||||
|
|
||||
|
{% block title %}{% trans "Custom invoices" %}{% endblock %} |
||||
|
|
||||
|
{% block content %} |
||||
|
<h2>{% trans "Custom invoices list" %}</h2> |
||||
|
{% can_create CustomInvoice %} |
||||
|
{% include "buttons/add.html" with href='cotisations:new-custom-invoice'%} |
||||
|
{% acl_end %} |
||||
|
{% include 'cotisations/aff_custom_invoice.html' with custom_invoice_list=custom_invoice_list %} |
||||
|
{% endblock %} |
||||
Binary file not shown.
@ -0,0 +1,338 @@ |
|||||
|
# 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: 2018-08-15 20:12+0200\n" |
||||
|
"PO-Revision-Date: 2018-06-23 16:01+0200\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" |
||||
|
|
||||
|
#: acl.py:42 |
||||
|
msgid "You don't have the right to view this application." |
||||
|
msgstr "Vous n'avez pas le droit de voir cette application." |
||||
|
|
||||
|
#: templates/logs/aff_stats_logs.html:36 |
||||
|
msgid "Edited object" |
||||
|
msgstr "Objet modifié" |
||||
|
|
||||
|
#: templates/logs/aff_stats_logs.html:37 |
||||
|
#: templates/logs/aff_stats_models.html:32 |
||||
|
msgid "Object type" |
||||
|
msgstr "Type d'objet" |
||||
|
|
||||
|
#: templates/logs/aff_stats_logs.html:38 |
||||
|
msgid "Edited by" |
||||
|
msgstr "Modifié par" |
||||
|
|
||||
|
#: templates/logs/aff_stats_logs.html:40 |
||||
|
msgid "Date of editing" |
||||
|
msgstr "Date de modification" |
||||
|
|
||||
|
#: templates/logs/aff_stats_logs.html:42 |
||||
|
msgid "Comment" |
||||
|
msgstr "Commentaire" |
||||
|
|
||||
|
#: 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:123 templates/logs/aff_summary.html:142 |
||||
|
msgid "Cancel" |
||||
|
msgstr "Annuler" |
||||
|
|
||||
|
#: templates/logs/aff_stats_models.html:29 |
||||
|
#, python-format |
||||
|
msgid "Statistics of the set %(key)s" |
||||
|
msgstr "Statistiques de l'ensemble %(key)s" |
||||
|
|
||||
|
#: templates/logs/aff_stats_models.html:33 |
||||
|
msgid "Number of stored entries" |
||||
|
msgstr "Nombre d'entrées enregistrées" |
||||
|
|
||||
|
#: templates/logs/aff_stats_users.html:31 |
||||
|
#, python-format |
||||
|
msgid "Statistics per %(key_dict)s of %(key)s" |
||||
|
msgstr "Statistiques par %(key_dict)s de %(key)s" |
||||
|
|
||||
|
#: templates/logs/aff_stats_users.html:34 |
||||
|
#, python-format |
||||
|
msgid "Number of %(key)s per %(key_dict)s" |
||||
|
msgstr "Nombre de %(key)s par %(key_dict)s" |
||||
|
|
||||
|
#: templates/logs/aff_stats_users.html:35 |
||||
|
msgid "Rank" |
||||
|
msgstr "Rang" |
||||
|
|
||||
|
#: templates/logs/aff_summary.html:37 |
||||
|
msgid "Date" |
||||
|
msgstr "Date" |
||||
|
|
||||
|
#: templates/logs/aff_summary.html:39 |
||||
|
msgid "Editing" |
||||
|
msgstr "Modification" |
||||
|
|
||||
|
#: templates/logs/aff_summary.html:48 |
||||
|
#, python-format |
||||
|
msgid "%(username)s has banned" |
||||
|
msgstr "%(username)s a banni" |
||||
|
|
||||
|
#: templates/logs/aff_summary.html:52 templates/logs/aff_summary.html:75 |
||||
|
msgid "No reason" |
||||
|
msgstr "Aucun motif" |
||||
|
|
||||
|
#: templates/logs/aff_summary.html:71 |
||||
|
#, python-format |
||||
|
msgid "%(username)s has graciously authorised" |
||||
|
msgstr "%(username)s a autorisé gracieusement" |
||||
|
|
||||
|
#: templates/logs/aff_summary.html:94 |
||||
|
#, python-format |
||||
|
msgid "%(username)s has updated" |
||||
|
msgstr "%(username)s a mis à jour" |
||||
|
|
||||
|
#: templates/logs/aff_summary.html:113 |
||||
|
#, python-format |
||||
|
msgid "%(username)s has sold %(number)sx %(name)s to" |
||||
|
msgstr "%(username)s a vendu %(number)sx %(name)s à" |
||||
|
|
||||
|
#: templates/logs/aff_summary.html:116 |
||||
|
#, python-format |
||||
|
msgid "+%(duration)s months" |
||||
|
msgstr "+%(duration)s mois" |
||||
|
|
||||
|
#: templates/logs/aff_summary.html:132 |
||||
|
#, python-format |
||||
|
msgid "%(username)s has edited an interface of" |
||||
|
msgstr "%(username)s a modifié une interface de" |
||||
|
|
||||
|
#: templates/logs/delete.html:29 |
||||
|
msgid "Deletion of actions" |
||||
|
msgstr "Suppression d'actions" |
||||
|
|
||||
|
#: templates/logs/delete.html:35 |
||||
|
#, python-format |
||||
|
msgid "" |
||||
|
"Warning: are you sure you want to delete this action %(objet_name)s " |
||||
|
"( %(objet)s )?" |
||||
|
msgstr "" |
||||
|
"Attention: voulez-vous vraiment supprimer cette action %(objet_name)s " |
||||
|
"( %(objet)s ) ?" |
||||
|
|
||||
|
#: templates/logs/delete.html:36 |
||||
|
msgid "Confirm" |
||||
|
msgstr "Confirmer" |
||||
|
|
||||
|
#: templates/logs/index.html:29 templates/logs/stats_general.html:29 |
||||
|
#: templates/logs/stats_logs.html:29 templates/logs/stats_models.html:29 |
||||
|
#: templates/logs/stats_users.html:29 |
||||
|
msgid "Statistics" |
||||
|
msgstr "Statistiques" |
||||
|
|
||||
|
#: templates/logs/index.html:32 templates/logs/stats_logs.html:32 views.py:403 |
||||
|
msgid "Actions performed" |
||||
|
msgstr "Actions effectuées" |
||||
|
|
||||
|
#: templates/logs/sidebar.html:33 |
||||
|
msgid "Summary" |
||||
|
msgstr "Résumé" |
||||
|
|
||||
|
#: templates/logs/sidebar.html:37 |
||||
|
msgid "Events" |
||||
|
msgstr "Évènements" |
||||
|
|
||||
|
#: templates/logs/sidebar.html:41 |
||||
|
msgid "General" |
||||
|
msgstr "Général" |
||||
|
|
||||
|
#: templates/logs/sidebar.html:45 |
||||
|
msgid "Database" |
||||
|
msgstr "Base de données" |
||||
|
|
||||
|
#: templates/logs/sidebar.html:49 |
||||
|
msgid "Wiring actions" |
||||
|
msgstr "Actions de câblage" |
||||
|
|
||||
|
#: templates/logs/sidebar.html:53 views.py:325 |
||||
|
msgid "Users" |
||||
|
msgstr "Utilisateurs" |
||||
|
|
||||
|
#: templates/logs/stats_general.html:32 |
||||
|
msgid "General statistics" |
||||
|
msgstr "Statistiques générales" |
||||
|
|
||||
|
#: templates/logs/stats_models.html:32 |
||||
|
msgid "Database statistics" |
||||
|
msgstr "Statistiques sur la base de données" |
||||
|
|
||||
|
#: templates/logs/stats_users.html:32 |
||||
|
msgid "Statistics about users" |
||||
|
msgstr "Statistiques sur les utilisateurs" |
||||
|
|
||||
|
#: views.py:191 |
||||
|
msgid "Nonexistent revision." |
||||
|
msgstr "Révision inexistante." |
||||
|
|
||||
|
#: views.py:194 |
||||
|
msgid "The action was deleted." |
||||
|
msgstr "L'action a été supprimée." |
||||
|
|
||||
|
#: views.py:227 |
||||
|
msgid "Category" |
||||
|
msgstr "Catégorie" |
||||
|
|
||||
|
#: views.py:228 |
||||
|
msgid "Number of users (members and clubs)" |
||||
|
msgstr "Nombre d'utilisateurs (adhérents et clubs)" |
||||
|
|
||||
|
#: views.py:229 |
||||
|
msgid "Number of members" |
||||
|
msgstr "Nombre d'adhérents" |
||||
|
|
||||
|
#: views.py:230 |
||||
|
msgid "Number of clubs" |
||||
|
msgstr "Nombre de clubs" |
||||
|
|
||||
|
#: views.py:234 |
||||
|
msgid "Activated users" |
||||
|
msgstr "Utilisateurs activés" |
||||
|
|
||||
|
#: views.py:242 |
||||
|
msgid "Disabled users" |
||||
|
msgstr "Utilisateurs désactivés" |
||||
|
|
||||
|
#: views.py:250 |
||||
|
msgid "Archived users" |
||||
|
msgstr "Utilisateurs archivés" |
||||
|
|
||||
|
#: views.py:258 |
||||
|
msgid "Contributing members" |
||||
|
msgstr "Adhérents cotisants" |
||||
|
|
||||
|
#: views.py:264 |
||||
|
msgid "Users benefiting from a connection" |
||||
|
msgstr "Utilisateurs bénéficiant d'une connexion" |
||||
|
|
||||
|
#: views.py:270 |
||||
|
msgid "Banned users" |
||||
|
msgstr "Utilisateurs bannis" |
||||
|
|
||||
|
#: views.py:276 |
||||
|
msgid "Users benefiting from a free connection" |
||||
|
msgstr "Utilisateurs bénéficiant d'une connexion gratuite" |
||||
|
|
||||
|
#: views.py:282 |
||||
|
msgid "Active interfaces (with access to the network)" |
||||
|
msgstr "Interfaces actives (ayant accès au réseau)" |
||||
|
|
||||
|
#: views.py:292 |
||||
|
msgid "Active interfaces assigned IPv4" |
||||
|
msgstr "Interfaces actives assignées IPv4" |
||||
|
|
||||
|
#: views.py:305 |
||||
|
msgid "IP range" |
||||
|
msgstr "Plage d'IP" |
||||
|
|
||||
|
#: views.py:306 |
||||
|
msgid "VLAN" |
||||
|
msgstr "VLAN" |
||||
|
|
||||
|
#: views.py:307 |
||||
|
msgid "Total number of IP addresses" |
||||
|
msgstr "Nombre total d'adresses IP" |
||||
|
|
||||
|
#: views.py:308 |
||||
|
msgid "Number of assigned IP addresses" |
||||
|
msgstr "Nombre d'adresses IP non assignées" |
||||
|
|
||||
|
#: views.py:309 |
||||
|
msgid "Number of IP address assigned to an activated machine" |
||||
|
msgstr "Nombre d'adresses IP assignées à une machine activée" |
||||
|
|
||||
|
#: views.py:310 |
||||
|
msgid "Number of nonassigned IP addresses" |
||||
|
msgstr "Nombre d'adresses IP non assignées" |
||||
|
|
||||
|
#: views.py:337 |
||||
|
msgid "Subscriptions" |
||||
|
msgstr "Cotisations" |
||||
|
|
||||
|
#: views.py:359 views.py:420 |
||||
|
msgid "Machines" |
||||
|
msgstr "Machines" |
||||
|
|
||||
|
#: views.py:386 |
||||
|
msgid "Topology" |
||||
|
msgstr "Topologie" |
||||
|
|
||||
|
#: views.py:405 |
||||
|
msgid "Number of actions" |
||||
|
msgstr "Nombre d'actions" |
||||
|
|
||||
|
#: views.py:419 views.py:437 views.py:442 views.py:447 views.py:462 |
||||
|
msgid "User" |
||||
|
msgstr "Utilisateur" |
||||
|
|
||||
|
#: views.py:423 |
||||
|
msgid "Invoice" |
||||
|
msgstr "Facture" |
||||
|
|
||||
|
#: views.py:426 |
||||
|
msgid "Ban" |
||||
|
msgstr "Bannissement" |
||||
|
|
||||
|
#: views.py:429 |
||||
|
msgid "Whitelist" |
||||
|
msgstr "Accès gracieux" |
||||
|
|
||||
|
#: views.py:432 |
||||
|
msgid "Rights" |
||||
|
msgstr "Droits" |
||||
|
|
||||
|
#: views.py:436 |
||||
|
msgid "School" |
||||
|
msgstr "Établissement" |
||||
|
|
||||
|
#: views.py:441 |
||||
|
msgid "Payment method" |
||||
|
msgstr "Moyen de paiement" |
||||
|
|
||||
|
#: views.py:446 |
||||
|
msgid "Bank" |
||||
|
msgstr "Banque" |
||||
|
|
||||
|
#: views.py:463 |
||||
|
msgid "Action" |
||||
|
msgstr "Action" |
||||
|
|
||||
|
#: views.py:494 |
||||
|
msgid "No model found." |
||||
|
msgstr "Aucun modèle trouvé." |
||||
|
|
||||
|
#: views.py:500 |
||||
|
msgid "Nonexistent entry." |
||||
|
msgstr "Entrée inexistante." |
||||
|
|
||||
|
#: views.py:507 |
||||
|
msgid "You don't have the right to access this menu." |
||||
|
msgstr "Vous n'avez pas le droit d'accéder à ce menu." |
||||
Binary file not shown.
File diff suppressed because it is too large
@ -0,0 +1,27 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Generated by Django 1.10.7 on 2018-06-23 14:07 |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
import re2o.mixins |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('machines', '0085_sshfingerprint'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='Role', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
|
('role_type', models.CharField(max_length=255, unique=True)), |
||||
|
('servers', models.ManyToManyField(to='machines.Interface')), |
||||
|
('specific_role', models.CharField(blank=True, choices=[('dhcp-server', 'DHCP server'), ('switch-conf-server', 'Switches configuration server'), ('dns-recursif-server', 'Recursive DNS server'), ('ntp-server', 'NTP server'), ('radius-server', 'Radius server'), ('log-server', 'Log server'), ('ldap-master-server', 'LDAP master server'), ('ldap-backup-server', 'LDAP backup server'), ('smtp-server', 'SMTP server'), ('postgresql-server', 'postgreSQL server'), ('mysql-server', 'mySQL server'), ('sql-client', 'SQL client'), ('gateway', 'Gatewaw')], max_length=32, null=True)) |
||||
|
], |
||||
|
options={'permissions': (('view_role', 'Can view a role.'),), 'verbose_name': 'Server role'}, |
||||
|
bases=(re2o.mixins.RevMixin, re2o.mixins.AclMixin, models.Model), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,25 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Generated by Django 1.10.7 on 2018-06-25 15:06 |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('machines', '0086_role'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name='iptype', |
||||
|
name='dnssec_reverse_v4', |
||||
|
field=models.BooleanField(default=False, help_text='Activer DNSSEC sur le reverse DNS IPv4'), |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='iptype', |
||||
|
name='dnssec_reverse_v6', |
||||
|
field=models.BooleanField(default=False, help_text='Activer DNSSEC sur le reverse DNS IPv6'), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,21 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Generated by Django 1.10.7 on 2018-07-16 18:46 |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
import django.core.validators |
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('machines', '0087_dnssec'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name='iptype', |
||||
|
name='prefix_v6_length', |
||||
|
field=models.IntegerField(default=64, validators=[django.core.validators.MaxValueValidator(128), django.core.validators.MinValueValidator(0)]), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,21 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Generated by Django 1.10.7 on 2018-08-05 09:48 |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import migrations |
||||
|
import macaddress.fields |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('machines', '0088_iptype_prefix_v6_length'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterField( |
||||
|
model_name='interface', |
||||
|
name='mac_address', |
||||
|
field=macaddress.fields.MACAddressField(integer=False, max_length=17), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,20 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Generated by Django 1.10.7 on 2018-08-05 12:59 |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('machines', '0089_auto_20180805_1148'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterField( |
||||
|
model_name='ipv6list', |
||||
|
name='ipv6', |
||||
|
field=models.GenericIPAddressField(protocol='IPv6'), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,26 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Generated by Django 1.10.7 on 2018-08-06 21:10 |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
import django.core.validators |
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('machines', '0090_auto_20180805_1459'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name='iptype', |
||||
|
name='domaine_ip_netmask', |
||||
|
field=models.IntegerField(default=24, help_text='Netmask for the ipv4 range domain', validators=[django.core.validators.MaxValueValidator(31), django.core.validators.MinValueValidator(8)]), |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='iptype', |
||||
|
name='domaine_ip_network', |
||||
|
field=models.GenericIPAddressField(blank=True, help_text='Network containing the ipv4 range domain ip start/stop. Optional', null=True, protocol='IPv4'), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,25 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Generated by Django 1.10.7 on 2018-08-07 07:26 |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('machines', '0091_auto_20180806_2310'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RenameField( |
||||
|
model_name='iptype', |
||||
|
old_name='dnssec_reverse_v4', |
||||
|
new_name='reverse_v4', |
||||
|
), |
||||
|
migrations.RenameField( |
||||
|
model_name='iptype', |
||||
|
old_name='dnssec_reverse_v6', |
||||
|
new_name='reverse_v6', |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,26 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Generated by Django 1.10.7 on 2018-08-07 09:15 |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
import django.db.models.deletion |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('machines', '0092_auto_20180807_0926'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterField( |
||||
|
model_name='mx', |
||||
|
name='name', |
||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='machines.Domain'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='mx', |
||||
|
name='priority', |
||||
|
field=models.PositiveIntegerField(), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,221 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Generated by Django 1.10.7 on 2018-08-15 17:18 |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
import datetime |
||||
|
import django.core.validators |
||||
|
from django.db import migrations, models |
||||
|
import django.db.models.deletion |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('machines', '0093_auto_20180807_1115'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterModelOptions( |
||||
|
name='dname', |
||||
|
options={'permissions': (('view_dname', 'Can view a DNAME record object'),), 'verbose_name': 'DNAME record', 'verbose_name_plural': 'DNAME records'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='domain', |
||||
|
options={'permissions': (('view_domain', 'Can view a domain object'),), 'verbose_name': 'domain', 'verbose_name_plural': 'domains'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='extension', |
||||
|
options={'permissions': (('view_extension', 'Can view an extension object'), ('use_all_extension', 'Can use all extensions')), 'verbose_name': 'DNS extension', 'verbose_name_plural': 'DNS extensions'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='interface', |
||||
|
options={'permissions': (('view_interface', 'Can view an interface object'), ('change_interface_machine', 'Can change the owner of an interface')), 'verbose_name': 'interface', 'verbose_name_plural': 'interfaces'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='iplist', |
||||
|
options={'permissions': (('view_iplist', 'Can view an IPv4 addresses list object'),), 'verbose_name': 'IPv4 addresses list', 'verbose_name_plural': 'IPv4 addresses lists'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='iptype', |
||||
|
options={'permissions': (('view_iptype', 'Can view an IP type object'), ('use_all_iptype', 'Can use all IP types')), 'verbose_name': 'IP type', 'verbose_name_plural': 'IP types'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='ipv6list', |
||||
|
options={'permissions': (('view_ipv6list', 'Can view an IPv6 addresses list object'), ('change_ipv6list_slaac_ip', 'Can change the SLAAC value of an IPv6 addresses list')), 'verbose_name': 'IPv6 addresses list', 'verbose_name_plural': 'IPv6 addresses lists'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='machine', |
||||
|
options={'permissions': (('view_machine', 'Can view a machine object'), ('change_machine_user', 'Can change the user of a machine')), 'verbose_name': 'machine', 'verbose_name_plural': 'machines'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='machinetype', |
||||
|
options={'permissions': (('view_machinetype', 'Can view a machine type object'), ('use_all_machinetype', 'Can use all machine types')), 'verbose_name': 'machine type', 'verbose_name_plural': 'machine types'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='mx', |
||||
|
options={'permissions': (('view_mx', 'Can view an MX record object'),), 'verbose_name': 'MX record', 'verbose_name_plural': 'MX records'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='nas', |
||||
|
options={'permissions': (('view_nas', 'Can view a NAS device object'),), 'verbose_name': 'NAS device', 'verbose_name_plural': 'NAS devices'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='ns', |
||||
|
options={'permissions': (('view_ns', 'Can view an NS record object'),), 'verbose_name': 'NS record', 'verbose_name_plural': 'NS records'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='ouvertureport', |
||||
|
options={'verbose_name': 'ports openings'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='ouvertureportlist', |
||||
|
options={'permissions': (('view_ouvertureportlist', 'Can view a ports opening list object'),), 'verbose_name': 'ports opening list', 'verbose_name_plural': 'ports opening lists'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='role', |
||||
|
options={'permissions': (('view_role', 'Can view a role object'),), 'verbose_name': 'server role', 'verbose_name_plural': 'server roles'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='service', |
||||
|
options={'permissions': (('view_service', 'Can view a service object'),), 'verbose_name': 'service to generate (DHCP, DNS, ...)', 'verbose_name_plural': 'services to generate (DHCP, DNS, ...)'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='service_link', |
||||
|
options={'permissions': (('view_service_link', 'Can view a service server link object'),), 'verbose_name': 'link between service and server', 'verbose_name_plural': 'links between service and server'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='soa', |
||||
|
options={'permissions': (('view_soa', 'Can view an SOA record object'),), 'verbose_name': 'SOA record', 'verbose_name_plural': 'SOA records'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='srv', |
||||
|
options={'permissions': (('view_srv', 'Can view an SRV record object'),), 'verbose_name': 'SRV record', 'verbose_name_plural': 'SRV records'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='sshfp', |
||||
|
options={'permissions': (('view_sshfp', 'Can view an SSHFP record object'),), 'verbose_name': 'SSHFP record', 'verbose_name_plural': 'SSHFP records'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='txt', |
||||
|
options={'permissions': (('view_txt', 'Can view a TXT record object'),), 'verbose_name': 'TXT record', 'verbose_name_plural': 'TXT records'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='vlan', |
||||
|
options={'permissions': (('view_vlan', 'Can view a VLAN object'),), 'verbose_name': 'VLAN', 'verbose_name_plural': 'VLANs'}, |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='domain', |
||||
|
name='name', |
||||
|
field=models.CharField(help_text='Mandatory and unique, must not contain dots.', max_length=255), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='extension', |
||||
|
name='name', |
||||
|
field=models.CharField(help_text='Zone name, must begin with a dot (.example.org)', max_length=255, unique=True), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='extension', |
||||
|
name='origin', |
||||
|
field=models.ForeignKey(blank=True, help_text='A record associated with the zone', null=True, on_delete=django.db.models.deletion.PROTECT, to='machines.IpList'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='extension', |
||||
|
name='origin_v6', |
||||
|
field=models.GenericIPAddressField(blank=True, help_text='AAAA record associated with the zone', null=True, protocol='IPv6'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='iptype', |
||||
|
name='domaine_ip_netmask', |
||||
|
field=models.IntegerField(default=24, help_text="Netmask for the domain's IPv4 range", validators=[django.core.validators.MaxValueValidator(31), django.core.validators.MinValueValidator(8)]), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='iptype', |
||||
|
name='domaine_ip_network', |
||||
|
field=models.GenericIPAddressField(blank=True, help_text="Network containing the domain's IPv4 range (optional)", null=True, protocol='IPv4'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='iptype', |
||||
|
name='reverse_v4', |
||||
|
field=models.BooleanField(default=False, help_text='Enable reverse DNS for IPv4'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='iptype', |
||||
|
name='reverse_v6', |
||||
|
field=models.BooleanField(default=False, help_text='Enable reverse DNS for IPv6'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='machine', |
||||
|
name='name', |
||||
|
field=models.CharField(blank=True, help_text='Optional', max_length=255, null=True), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='ouvertureportlist', |
||||
|
name='name', |
||||
|
field=models.CharField(help_text='Name of the ports configuration', max_length=255), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='role', |
||||
|
name='specific_role', |
||||
|
field=models.CharField(blank=True, choices=[('dhcp-server', 'DHCP server'), ('switch-conf-server', 'Switches configuration server'), ('dns-recursif-server', 'Recursive DNS server'), ('ntp-server', 'NTP server'), ('radius-server', 'RADIUS server'), ('log-server', 'Log server'), ('ldap-master-server', 'LDAP master server'), ('ldap-backup-server', 'LDAP backup server'), ('smtp-server', 'SMTP server'), ('postgresql-server', 'postgreSQL server'), ('mysql-server', 'mySQL server'), ('sql-client', 'SQL client'), ('gateway', 'Gateway')], max_length=32, null=True), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='service', |
||||
|
name='min_time_regen', |
||||
|
field=models.DurationField(default=datetime.timedelta(0, 60), help_text='Minimal time before regeneration of the service.'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='service', |
||||
|
name='regular_time_regen', |
||||
|
field=models.DurationField(default=datetime.timedelta(0, 3600), help_text='Maximal time before regeneration of the service.'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='soa', |
||||
|
name='expire', |
||||
|
field=models.PositiveIntegerField(default=3600000, help_text='Seconds before the secondary DNS stop answering requests in case of primary DNS timeout'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='soa', |
||||
|
name='mail', |
||||
|
field=models.EmailField(help_text='Contact email address for the zone', max_length=254), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='soa', |
||||
|
name='refresh', |
||||
|
field=models.PositiveIntegerField(default=86400, help_text='Seconds before the secondary DNS have to ask the primary DNS serial to detect a modification'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='soa', |
||||
|
name='retry', |
||||
|
field=models.PositiveIntegerField(default=7200, help_text='Seconds before the secondary DNS ask the serial again in case of a primary DNS timeout'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='soa', |
||||
|
name='ttl', |
||||
|
field=models.PositiveIntegerField(default=172800, help_text='Time to Live'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='srv', |
||||
|
name='port', |
||||
|
field=models.PositiveIntegerField(help_text='TCP/UDP port', validators=[django.core.validators.MaxValueValidator(65535)]), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='srv', |
||||
|
name='priority', |
||||
|
field=models.PositiveIntegerField(default=0, help_text='Priority of the target server (positive integer value, the lower it is, the more the server will be used if available)', validators=[django.core.validators.MaxValueValidator(65535)]), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='srv', |
||||
|
name='target', |
||||
|
field=models.ForeignKey(help_text='Target server', on_delete=django.db.models.deletion.PROTECT, to='machines.Domain'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='srv', |
||||
|
name='ttl', |
||||
|
field=models.PositiveIntegerField(default=172800, help_text='Time to Live'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='srv', |
||||
|
name='weight', |
||||
|
field=models.PositiveIntegerField(default=0, help_text='Relative weight for records with the same priority (integer value between 0 and 65535)', validators=[django.core.validators.MaxValueValidator(65535)]), |
||||
|
), |
||||
|
] |
||||
File diff suppressed because it is too large
@ -0,0 +1,54 @@ |
|||||
|
{% comment %} |
||||
|
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 © 2017 Gabriel Détraz |
||||
|
Copyright © 2017 Goulven Kermarec |
||||
|
Copyright © 2017 Augustin Lemesle |
||||
|
|
||||
|
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. |
||||
|
{% endcomment %} |
||||
|
|
||||
|
{% load acl %} |
||||
|
{% load i18n %} |
||||
|
{% load logs_extra %} |
||||
|
|
||||
|
|
||||
|
<table class="table table-striped"> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th>{% trans "Role name" %}</th> |
||||
|
<th>{% trans "Specific role" %}</th> |
||||
|
<th>{% trans "Servers" %}</th> |
||||
|
<th></th> |
||||
|
<th></th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
{% for role in role_list %} |
||||
|
<tr> |
||||
|
<td>{{ role.role_type }}</td> |
||||
|
<td>{{ role.specific_role }}</td> |
||||
|
<td>{% for serv in role.servers.all %}{{ serv }}, {% endfor %}</td> |
||||
|
<td class="text-right"> |
||||
|
{% can_edit role %} |
||||
|
{% include 'buttons/edit.html' with href='machines:edit-role' id=role.id %} |
||||
|
{% acl_end %} |
||||
|
{% history_button role %} |
||||
|
</td> |
||||
|
</tr> |
||||
|
{% endfor %} |
||||
|
</table> |
||||
|
|
||||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue