diff --git a/passerelle_reunion_unicite/migrations/0005_auto_20200404_1119.py b/passerelle_reunion_unicite/migrations/0005_auto_20200404_1119.py new file mode 100644 index 0000000..e97e2a9 --- /dev/null +++ b/passerelle_reunion_unicite/migrations/0005_auto_20200404_1119.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2020-04-04 09:19 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('passerelle_reunion_unicite', '0004_auto_20200327_0731'), + ] + + operations = [ + migrations.RemoveField( + model_name='unicityreunionconnector', + name='db_host', + ), + migrations.RemoveField( + model_name='unicityreunionconnector', + name='db_pass', + ), + migrations.RemoveField( + model_name='unicityreunionconnector', + name='db_port', + ), + migrations.RemoveField( + model_name='unicityreunionconnector', + name='db_user', + ), + migrations.RemoveField( + model_name='unicityreunionconnector', + name='form_id', + ), + migrations.RemoveField( + model_name='unicityreunionconnector', + name='table_name', + ), + migrations.AddField( + model_name='unicityreunionconnector', + name='field_name_1', + field=models.CharField(default=b'f_siren', max_length=128, verbose_name='Nom du 1er champ \xe0 contr\xf4ler'), + ), + migrations.AddField( + model_name='unicityreunionconnector', + name='field_name_2', + field=models.CharField(blank=True, max_length=128, verbose_name='Nom du 2\xe8me champ \xe0 contr\xf4ler (optionnel)'), + ), + migrations.AddField( + model_name='unicityreunionconnector', + name='view_name', + field=models.CharField(default=b'wcs_view_formid_formname', max_length=128, verbose_name='Nom de la vue'), + ), + migrations.AlterField( + model_name='unicityreunionconnector', + name='db_name', + field=models.CharField(default=b'wcs_instance', max_length=128, verbose_name='Nom de la base'), + ), + ] diff --git a/passerelle_reunion_unicite/migrations/0006_unicityreunionconnector_db_user.py b/passerelle_reunion_unicite/migrations/0006_unicityreunionconnector_db_user.py new file mode 100644 index 0000000..8089eb2 --- /dev/null +++ b/passerelle_reunion_unicite/migrations/0006_unicityreunionconnector_db_user.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2020-04-04 10:32 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('passerelle_reunion_unicite', '0005_auto_20200404_1119'), + ] + + operations = [ + migrations.AddField( + model_name='unicityreunionconnector', + name='db_user', + field=models.CharField(default=b'passerelle', max_length=128, verbose_name='Utilisateur de la base'), + ), + ] diff --git a/passerelle_reunion_unicite/models.py b/passerelle_reunion_unicite/models.py index 993cced..d84e8f3 100644 --- a/passerelle_reunion_unicite/models.py +++ b/passerelle_reunion_unicite/models.py @@ -9,75 +9,40 @@ import psycopg2 class UnicityReunionConnector(BaseResource): - form_id = models.IntegerField(default=0, verbose_name=_(u'Id du formulaire')) - db_host = models.CharField(blank=True, max_length=128, verbose_name=_(u'Hostname/ip de la base de données')) - db_port = models.IntegerField(default=5432, verbose_name=_(u'Port')) - db_user = models.CharField(blank=True, max_length=128, verbose_name=_(u'Utilisateur')) - db_pass = models.CharField(blank=True, max_length=128, verbose_name=_(u'Mot de passe')) - db_name = models.CharField(blank=True, max_length=128, verbose_name=_(u'Nom de la base')) - table_name = models.CharField(blank=True, max_length=128, verbose_name=_(u'Nom de la table en bdd')) + field_name_1 = models.CharField(blank=False, default='f_siren', max_length=128, verbose_name=_(u'Nom du 1er champ à contrôler')) + field_name_2 = models.CharField(blank=True, max_length=128, verbose_name=_(u'Nom du 2ème champ à contrôler (optionnel)')) + db_name = models.CharField(blank=False, default='wcs_instance', max_length=128, verbose_name=_(u'Nom de la base')) + db_user = models.CharField(blank=False, default='passerelle', max_length=128, verbose_name=_(u'Utilisateur de la base')) + view_name = models.CharField(blank=False, default='wcs_view_formid_formname', max_length=128, verbose_name=_(u'Nom de la vue')) category = 'Divers' class Meta: verbose_name = u'Connecteur unicité Région Réunion' - @endpoint(description=_(u'Vérifier s\'il y a déjà une demande pour le siren pour cette année'), + @endpoint(description=_(u'Vérifier s\'il y a déjà une demande dans la vue avec les valeurs des champs fournies en paramètre'), perm='can_access', parameters={ - 'siren': {'description': _(u'SIREN'), + 'value_1': {'description': _(u'Champ 1'), 'example_value': u'77567227216096'}, - 'annee': {'description': _(u'Année')} + 'value_2': {'description': _(u'Champ 2'), + 'example_value': u'2020'}, + 'form_id': {'description': _(u'Id de la demande'), + 'example_value': u'1'} } ) - def unicite_siren_annee(self, request, siren, annee=""): + def unicite(self, request, value_1, value_2="", form_id=0): try: connection = psycopg2.connect( user = self.db_user, - password = self.db_pass, - host = self.db_host, - port = self.db_port, database = self.db_name ) cursor = connection.cursor() - if annee == "": - cursor.execute("SELECT f_siren FROM " + self.table_name + " WHERE status != 'draft' AND f_siren=%s", (siren,)) + if not value_2 or not self.field_name_2: + cursor.execute("SELECT " + self.field_name_1 + " FROM " + self.view_name + " WHERE status != 'draft' AND id != %s AND " + self.field_name_1 + "=%s", (form_id, value_1)) else: - cursor.execute("SELECT f_siren FROM " + self.table_name + " WHERE status != 'draft' AND f_siren=%s AND f_annee=%s", (siren, annee)) - record = cursor.fetchone() - except psycopg2.Error as e: - raise APIError(e) - finally: - if(connection): - cursor.close() - connection.close() - - return {'data': record} - - @endpoint(description=_(u'Vérifier s\'il y a déjà une demande pour l\'iban pour cette année'), - perm='can_access', - parameters={ - 'iban': {'description': _(u'IBAN'), - 'example_value': u'GR9608100010000001234567890'}, - 'annee': {'description': _(u'Année')} - } - ) - def unicite_iban_annee(self, request, iban, annee=""): - try: - connection = psycopg2.connect( - user = self.db_user, - password = self.db_pass, - host = self.db_host, - port = self.db_port, - database = self.db_name - ) - - cursor = connection.cursor() - if annee == "": - cursor.execute("SELECT f_iban FROM " + self.table_name + " WHERE status != 'draft' AND f_iban=%s", (iban,)) - else: - cursor.execute("SELECT f_iban FROM " + self.table_name + " WHERE status != 'draft' AND f_iban=%s AND f_annee=%s", (iban, annee)) + cursor.execute("SELECT " + self.field_name_1 + " FROM " + self.view_name + " WHERE status != 'draft' AND id != %s AND " + self.field_name_1 + "=%s AND " + self.field_name_2 + "=%s", (form_id, value_1, value_2)) record = cursor.fetchone() except psycopg2.Error as e: raise APIError(e)