Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding:utf-8 -*-
- from .models import Personnel, AyantDroit, ContactEnRecrutement, ContactCRM, ContratEmploye, ContratEmployeFile
- from django.shortcuts import get_object_or_404
- from .serializers import PersonnelSerializer, ContactCRMSerializer, AyantDroitSerializer, \
- ContactEnRecrutementSerializer, ContratEmployeSerializer, ForPersonnelSerializer, ForGetPersonnelSerializer
- from datetime import datetime
- from .filters import ContactEnRecrutementFilter, AyantDroitFilter, PersonnelFilter
- from rest_framework.filters import OrderingFilter, DjangoFilterBackend, SearchFilter
- from .permissions import IsRH, PersonnelReadPermissions, PersonnelUpdatePermissions
- from rest_framework.permissions import IsAuthenticated
- from rest_framework import viewsets
- from rest_framework import status
- from rest_framework.response import Response
- from lib.ldapControl import LDAPcontrol
- from django.contrib.auth.models import User
- from django.core.mail import send_mail
- import re
- from rest_framework.parsers import FileUploadParser
- from django.core.files.base import ContentFile
- from lib import stringUtils
- from lib.config import Config as smtpConfig
- import os
- basedir = os.path.dirname(os.path.realpath(__file__))
- config_file = os.path.normpath(os.path.join(basedir, '../config/config.json'))
- class ContactEnRecrutementViewSet(viewsets.ModelViewSet):
- queryset = ContactEnRecrutement.objects.all()
- serializer_class = ContactEnRecrutementSerializer
- permission_classes = (IsAuthenticated, IsRH)
- filter_backends = (DjangoFilterBackend, OrderingFilter,)
- # filter_backends = (DjangoFilterBackend, OrderingFilter, SearchFilter)
- ordering_fields = ('nom', 'prenom', '-nom', '-prenom')
- # to specify a default ordering
- ordering = ('-idCR',)
- lookup_field = 'idCR'
- search_fields = ('^nom', '^prenom')
- filter_class = ContactEnRecrutementFilter
- class PersonnelViewSet(viewsets.ModelViewSet):
- queryset = Personnel.objects.all()
- def get_serializer_class(self):
- if self.request.user.is_superuser:
- return PersonnelSerializer
- elif self.request.method in ['PATCH', ] or (
- self.action in ('retrieve',) and self.request.user.userpersonnel.matricule == self.kwargs[
- 'matricule']):
- return ForPersonnelSerializer
- return ForGetPersonnelSerializer
- permission_classes = (IsAuthenticated, PersonnelUpdatePermissions)
- filter_backends = (DjangoFilterBackend, SearchFilter)
- ordering = ('nomUsage',)
- search_fields = ('^nomUsage', '^prenom')
- lookup_field = 'matricule'
- filter_class = PersonnelFilter
- def get_queryset(self):
- return Personnel.objects.all()
- def create(self, request):
- personnel = request.data
- print ("REQUETE : ", personnel)
- contrat = personnel.get('contratEmploye')
- dateDeDebut = contrat.get('dateDeDebut')
- dateDeFin = contrat.get('dateDeFin')
- personnel['dateEmbauche'] = datetime.now()
- if dateDeDebut:
- contrat['dateDeDebut'] = datetime.fromtimestamp(float(dateDeDebut) / 1000)
- if dateDeFin:
- contrat['dateDeFin'] = datetime.fromtimestamp(float(dateDeFin) / 1000)
- contrat['contrats'] = []
- nomP = stringUtils.supprime_accent(personnel.get('nomUsage').lower())
- prenomP = stringUtils.supprime_accent(personnel.get('prenom').lower())
- countP = 0
- for pers in self.queryset:
- if pers.account.first_name == prenomP and pers.account.last_name == nomP:
- countP += 1
- mailProP = prenomP + '.' + nomP + '@spikeelabs.fr'
- personnel['emailProfessionnel'] = mailProP
- personnel['sexe'] = 'H'
- pswd = stringUtils.pw_gen()
- account = dict()
- if countP > 0:
- account['username'] = prenomP + "." + nomP + str(countP)
- elif countP == 0:
- account['username'] = prenomP + "." + nomP
- account['email'] = mailProP
- account['password'] = pswd
- tmp = User.objects.create_user(account.get('username'), account.get('email'), account.get('password'))
- tmp.first_name = prenomP
- tmp.last_name = nomP
- tmp.save()
- personnel['account'] = tmp.id
- ldap_control = LDAPcontrol()
- ldap_control.connect("admin", "Sp1k3el@bs")
- ldap_control.create(str(prenomP), str(nomP), str(mailProP), pswd)
- smtpCfg = smtpConfig(config_file)['smtp']
- send2 = smtpCfg['admin']
- text = "Bienvenue " + personnel.get("prenom") + " " + personnel.get(
- "nomUsage") + ". Votre adresse mail est la suivante: " + personnel.get(
- "emailProfessionnel") + ".\nVous pouvez vous connecter sur l'intranet a l'adresse suivante: http://intranet.spikeelabs.fr/.\nVos identifiants sont les suivants: \nLogin -> " + prenomP + "." + nomP + "\nMot de passe -> " + pswd
- send_mail(
- 'Creation de compte',
- text,
- 'spikeelabs@gmail.com',
- [send2],
- fail_silently=False,
- )
- return super(PersonnelViewSet, self).create(request)
- def partial_update(self, request, *args, **kwargs):
- personnel = request.data
- print(personnel)
- if personnel.get('dateDeNaissance'):
- personnel['dateDeNaissance'] = datetime.fromtimestamp((float(personnel.get('dateDeNaissance'))) / 1000)
- if personnel.get('dateEmbauche'):
- personnel['dateEmbauche'] = datetime.fromtimestamp((float(personnel.get('dateEmbauche'))) / 1000)
- if personnel.get('dateDeSortie'):
- personnel['dateDeSortie'] = datetime.fromtimestamp((float(personnel.get('dateDeSortie'))) / 1000)
- return super(PersonnelViewSet, self).partial_update(request, *args, **kwargs)
- class ContactCRMViewSet(viewsets.ModelViewSet):
- queryset = ContactCRM.objects.all()
- serializer_class = ContactCRMSerializer
- permission_classes = (IsRH, IsAuthenticated,)
- lookup_field = 'idCC'
- def get_personnel(self):
- return get_object_or_404(Personnel, matricule=self.kwargs['matricule'])
- class AyantDroitViewSet(viewsets.ModelViewSet):
- queryset = AyantDroit.objects.all()
- serializer_class = AyantDroitSerializer
- permission_classes = (IsAuthenticated, PersonnelReadPermissions)
- filter_class = AyantDroitFilter
- lookup_field = 'idAD'
- def get_personnel(self):
- return get_object_or_404(Personnel, matricule=self.kwargs['matricule'])
- def get_queryset(self):
- personnel = self.get_personnel()
- return personnel.ayantDroit.all()
- def perform_create(self, serializer):
- Personnel = self.get_personnel()
- ayantDroit = serializer.save()
- Personnel.ayantDroit.add(ayantDroit)
- def partial_update(self, request, *args, **kwargs):
- ayantDroit = request.data
- print(ayantDroit)
- if ayantDroit.get('dateDeNaissance'):
- ayantDroit['dateDeNaissance'] = datetime.fromtimestamp((float(ayantDroit.get('dateDeNaissance'))) / 1000)
- return super(AyantDroitViewSet, self).partial_update(request, *args, **kwargs)
- class ContratEmployeViewSet(viewsets.ModelViewSet):
- queryset = ContratEmploye.objects.all()
- serializer_class = ContratEmployeSerializer
- permission_classes = (IsRH, IsAuthenticated)
- lookup_field = 'idCE'
- def partial_update(self, request, *args, **kwargs):
- contrat = request.data
- if contrat.get('dateDeDebut'):
- contrat['dateDeDebut'] = datetime.fromtimestamp((float(contrat.get('dateDeDebut'))) / 1000)
- if contrat.get('dateDeFin'):
- contrat['dateDeFin'] = datetime.fromtimestamp((float(contrat.get('dateDeFin'))) / 1000)
- return super(ContratEmployeViewSet, self).partial_update(request, *args, **kwargs)
- class SortiePersonnelViewSet(viewsets.ViewSet):
- permission_classes = (IsAuthenticated, IsRH)
- def create(self, request, *args, **kwargs):
- body = request.data
- var = Personnel()
- if body.get('matricule'):
- tmp = Personnel.objects.all()
- for p in tmp:
- if p.matricule == body.get('matricule'):
- var = p
- if var.etat == 'actif':
- var.etat = 'inactif'
- var.save()
- user = var.account
- pswd = stringUtils.pw_gen()
- ldap_control = LDAPcontrol()
- ldap_control.connect("admin", "Sp1k3el@bs")
- ldap_control.changePassword(str(user.username), str(pswd))
- ldap_control.disconnect()
- smtpCfg = smtpConfig(config_file)['smtp']
- send2 = smtpCfg['admin']
- text = "Le compte " + user.username + " a ete desactive. Le mot de passe attribue est le suivant : " + pswd
- send_mail(
- 'Desactivation de compte',
- text,
- 'spikeelabs@gmail.com',
- [send2],
- fail_silently=False,
- )
- return Response(request.data, status=status.HTTP_201_CREATED)
- return Response(request.data, status=status.HTTP_404_NOT_FOUND)
- class RentreePersonnelViewSet(viewsets.ViewSet):
- permission_classes = (IsRH, IsAuthenticated)
- def create(self, request, *args, **kwargs):
- body = request.data
- var = Personnel()
- if body.get('matricule'):
- tmp = Personnel.objects.all()
- for p in tmp:
- if p.matricule == body.get('matricule'):
- var = p
- if var.etat == 'inactif':
- var.etat = 'actif'
- var.save()
- user = var.account
- pswd = stringUtils.pw_gen()
- ldap_control = LDAPcontrol()
- ldap_control.connect("admin", "Sp1k3el@bs")
- ldap_control.changePassword(str(user.username), str(pswd))
- ldap_control.disconnect()
- smtpCfg = smtpConfig(config_file)['smtp']
- send2 = smtpCfg['admin']
- text = "Le compte " + user.username + " a ete reactive. Le mot de passe attribue est le suivant : " + pswd
- send_mail(
- 'Reactivation de compte',
- text,
- 'spikeelabs@gmail.com',
- [send2],
- fail_silently=False,
- )
- return Response(request.data, status=status.HTTP_201_CREATED)
- return Response(request.data, status=status.HTTP_404_NOT_FOUND)
- class MatriculeViewSet(viewsets.ViewSet):
- permission_classes = (IsAuthenticated,)
- def list(self, request, *args, **kwargs):
- if request.user.userpersonnel:
- return Response(request.user.userpersonnel.matricule, status=status.HTTP_200_OK)
- else:
- return Response(request.data, status=status.HTTP_404_NOT_FOUND)
- class MotDePasseViewSet(viewsets.ViewSet):
- permission_classes = (IsAuthenticated,)
- def create(self, request, *args, **kwargs):
- body = request.data
- user = request.user
- if (body.get('newPassword') == body.get('confirmPassword')) & (
- body.get('newPassword') != body.get('oldPassword')):
- ldap_control = LDAPcontrol()
- if ldap_control.connectAsUser(str(user.username), str(body.get('oldPassword'))) is None:
- ldap_control.disconnect()
- pattern = re.compile("^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?#&])[A-Za-z\d$@$!%*?#&]{8,}")
- s = str(body.get('newPassword'))
- if pattern.match(s):
- ldap_control.connect("admin", "Sp1k3el@bs")
- ldap_control.changePassword(str(user.username), str(body.get('newPassword')))
- ldap_control.disconnect()
- send2 = user.email
- text = "Vous venez de changer le mot de passe de l'utilisateur : " + user.username + ".\n" + "Votre nouveau mot de passe est le suivant: " + str(
- body.get('newPassword'))
- send_mail(
- 'Modification de mot de passe',
- text,
- 'spikeelabs@gmail.com',
- [send2],
- fail_silently=False,
- )
- return Response(request.data, status=status.HTTP_201_CREATED)
- else:
- return Response(status=status.HTTP_400_BAD_REQUEST)
- else:
- return Response(status=status.HTTP_400_BAD_REQUEST)
- else:
- return Response(status=status.HTTP_400_BAD_REQUEST)
- class ProfilUploadViewSet(viewsets.ViewSet):
- permission_classes = (IsAuthenticated,)
- parser_classes = (FileUploadParser,)
- def get_personnel(self):
- return get_object_or_404(Personnel, matricule=self.kwargs['matricule'])
- def create(self, request, *args, **kwargs):
- file_obj = request.FILES['file']
- if file_obj:
- personnel = self.get_personnel()
- name = stringUtils.id_generator("photo")
- ext = file_obj.name.split('.')[-1]
- name = name + "." + ext
- personnel.photo.save(name, ContentFile(file_obj.read()))
- personnel.save()
- return Response(status=status.HTTP_201_CREATED)
- return Response(status=status.HTTP_400_BAD_REQUEST)
- class ContratUploadViewSet(viewsets.ViewSet):
- permission_classes = (IsAuthenticated,)
- parser_classes = (FileUploadParser,)
- def get_personnel(self):
- return get_object_or_404(Personnel, matricule=self.kwargs['matricule'])
- def create(self, request, *args, **kwargs):
- file_obj = request.FILES['file']
- if file_obj:
- personnel = self.get_personnel()
- name = stringUtils.id_generator("contrat")
- ext = file_obj.name.split('.')[-1]
- name = name + "." + ext
- contratFile = ContratEmployeFile.objects.create()
- contratFile.contrat.save(name, ContentFile(file_obj.read()))
- personnel.contratEmploye.contrats.add(contratFile)
- personnel.save()
- return Response(status=status.HTTP_201_CREATED)
- return Response(status=status.HTTP_400_BAD_REQUEST)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement