This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
passerelle-reunion-unicite/passerelle_reunion_unicite/models.py

56 lines
2.5 KiB
Python

# -*- coding: utf-8 -*-
from django.db import models
from django.utils.translation import ugettext_lazy as _
from passerelle.base.models import BaseResource
from passerelle.utils.api import endpoint
from passerelle.utils.jsonresponse import APIError
import psycopg2
class UnicityReunionConnector(BaseResource):
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 dans la vue avec les valeurs des champs fournies en paramètre'),
perm='can_access',
parameters={
'value_1': {'description': _(u'Champ 1'),
'example_value': u'77567227216096'},
'value_2': {'description': _(u'Champ 2'),
'example_value': u'2020'},
'form_id': {'description': _(u'Id de la demande'),
'example_value': u'1'}
}
)
def unicite(self, request, value_1, value_2="", form_id=0):
try:
connection = psycopg2.connect(
user = self.db_user,
database = self.db_name
)
cursor = connection.cursor()
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 " + 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)
finally:
if(connection):
cursor.close()
connection.close()
return {'data': record}