Advertisement
Guest User

Untitled

a guest
Oct 16th, 2017
384
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.75 KB | None | 0 0
  1. # -*- coding:utf-8 -*-
  2. from .models import Personnel, AyantDroit, ContactEnRecrutement, ContactCRM, ContratEmploye, ContratEmployeFile
  3. from django.shortcuts import get_object_or_404
  4. from .serializers import PersonnelSerializer, ContactCRMSerializer, AyantDroitSerializer, \
  5. ContactEnRecrutementSerializer, ContratEmployeSerializer, ForPersonnelSerializer, ForGetPersonnelSerializer
  6. from datetime import datetime
  7. from .filters import ContactEnRecrutementFilter, AyantDroitFilter, PersonnelFilter
  8. from rest_framework.filters import OrderingFilter, DjangoFilterBackend, SearchFilter
  9. from .permissions import IsRH, PersonnelReadPermissions, PersonnelUpdatePermissions
  10. from rest_framework.permissions import IsAuthenticated
  11. from rest_framework import viewsets
  12. from rest_framework import status
  13. from rest_framework.response import Response
  14. from lib.ldapControl import LDAPcontrol
  15. from django.contrib.auth.models import User
  16. from django.core.mail import send_mail
  17. import re
  18. from rest_framework.parsers import FileUploadParser
  19. from django.core.files.base import ContentFile
  20. from lib import stringUtils
  21. from lib.config import Config as smtpConfig
  22. import os
  23.  
  24.  
  25. basedir = os.path.dirname(os.path.realpath(__file__))
  26. config_file = os.path.normpath(os.path.join(basedir, '../config/config.json'))
  27.  
  28.  
  29.  
  30. class ContactEnRecrutementViewSet(viewsets.ModelViewSet):
  31. queryset = ContactEnRecrutement.objects.all()
  32. serializer_class = ContactEnRecrutementSerializer
  33. permission_classes = (IsAuthenticated, IsRH)
  34. filter_backends = (DjangoFilterBackend, OrderingFilter,)
  35. # filter_backends = (DjangoFilterBackend, OrderingFilter, SearchFilter)
  36. ordering_fields = ('nom', 'prenom', '-nom', '-prenom')
  37. # to specify a default ordering
  38. ordering = ('-idCR',)
  39. lookup_field = 'idCR'
  40. search_fields = ('^nom', '^prenom')
  41.  
  42. filter_class = ContactEnRecrutementFilter
  43.  
  44.  
  45. class PersonnelViewSet(viewsets.ModelViewSet):
  46. queryset = Personnel.objects.all()
  47.  
  48. def get_serializer_class(self):
  49. if self.request.user.is_superuser:
  50. return PersonnelSerializer
  51. elif self.request.method in ['PATCH', ] or (
  52. self.action in ('retrieve',) and self.request.user.userpersonnel.matricule == self.kwargs[
  53. 'matricule']):
  54. return ForPersonnelSerializer
  55. return ForGetPersonnelSerializer
  56.  
  57. permission_classes = (IsAuthenticated, PersonnelUpdatePermissions)
  58. filter_backends = (DjangoFilterBackend, SearchFilter)
  59. ordering = ('nomUsage',)
  60. search_fields = ('^nomUsage', '^prenom')
  61. lookup_field = 'matricule'
  62.  
  63. filter_class = PersonnelFilter
  64.  
  65. def get_queryset(self):
  66. return Personnel.objects.all()
  67.  
  68. def create(self, request):
  69. personnel = request.data
  70. print ("REQUETE : ", personnel)
  71. contrat = personnel.get('contratEmploye')
  72. dateDeDebut = contrat.get('dateDeDebut')
  73. dateDeFin = contrat.get('dateDeFin')
  74. personnel['dateEmbauche'] = datetime.now()
  75. if dateDeDebut:
  76. contrat['dateDeDebut'] = datetime.fromtimestamp(float(dateDeDebut) / 1000)
  77. if dateDeFin:
  78. contrat['dateDeFin'] = datetime.fromtimestamp(float(dateDeFin) / 1000)
  79. contrat['contrats'] = []
  80.  
  81. nomP = stringUtils.supprime_accent(personnel.get('nomUsage').lower())
  82. prenomP = stringUtils.supprime_accent(personnel.get('prenom').lower())
  83.  
  84. countP = 0
  85. for pers in self.queryset:
  86. if pers.account.first_name == prenomP and pers.account.last_name == nomP:
  87. countP += 1
  88.  
  89. mailProP = prenomP + '.' + nomP + '@spikeelabs.fr'
  90.  
  91. personnel['emailProfessionnel'] = mailProP
  92. personnel['sexe'] = 'H'
  93.  
  94. pswd = stringUtils.pw_gen()
  95. account = dict()
  96. if countP > 0:
  97. account['username'] = prenomP + "." + nomP + str(countP)
  98. elif countP == 0:
  99. account['username'] = prenomP + "." + nomP
  100. account['email'] = mailProP
  101. account['password'] = pswd
  102. tmp = User.objects.create_user(account.get('username'), account.get('email'), account.get('password'))
  103. tmp.first_name = prenomP
  104. tmp.last_name = nomP
  105. tmp.save()
  106. personnel['account'] = tmp.id
  107.  
  108. ldap_control = LDAPcontrol()
  109. ldap_control.connect("admin", "Sp1k3el@bs")
  110. ldap_control.create(str(prenomP), str(nomP), str(mailProP), pswd)
  111.  
  112. smtpCfg = smtpConfig(config_file)['smtp']
  113.  
  114. send2 = smtpCfg['admin']
  115. text = "Bienvenue " + personnel.get("prenom") + " " + personnel.get(
  116. "nomUsage") + ". Votre adresse mail est la suivante: " + personnel.get(
  117. "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
  118. send_mail(
  119. 'Creation de compte',
  120. text,
  121. 'spikeelabs@gmail.com',
  122. [send2],
  123. fail_silently=False,
  124. )
  125.  
  126. return super(PersonnelViewSet, self).create(request)
  127.  
  128. def partial_update(self, request, *args, **kwargs):
  129. personnel = request.data
  130. print(personnel)
  131. if personnel.get('dateDeNaissance'):
  132. personnel['dateDeNaissance'] = datetime.fromtimestamp((float(personnel.get('dateDeNaissance'))) / 1000)
  133. if personnel.get('dateEmbauche'):
  134. personnel['dateEmbauche'] = datetime.fromtimestamp((float(personnel.get('dateEmbauche'))) / 1000)
  135. if personnel.get('dateDeSortie'):
  136. personnel['dateDeSortie'] = datetime.fromtimestamp((float(personnel.get('dateDeSortie'))) / 1000)
  137. return super(PersonnelViewSet, self).partial_update(request, *args, **kwargs)
  138.  
  139.  
  140. class ContactCRMViewSet(viewsets.ModelViewSet):
  141. queryset = ContactCRM.objects.all()
  142. serializer_class = ContactCRMSerializer
  143. permission_classes = (IsRH, IsAuthenticated,)
  144. lookup_field = 'idCC'
  145.  
  146. def get_personnel(self):
  147. return get_object_or_404(Personnel, matricule=self.kwargs['matricule'])
  148.  
  149.  
  150. class AyantDroitViewSet(viewsets.ModelViewSet):
  151. queryset = AyantDroit.objects.all()
  152. serializer_class = AyantDroitSerializer
  153. permission_classes = (IsAuthenticated, PersonnelReadPermissions)
  154. filter_class = AyantDroitFilter
  155. lookup_field = 'idAD'
  156.  
  157. def get_personnel(self):
  158. return get_object_or_404(Personnel, matricule=self.kwargs['matricule'])
  159.  
  160. def get_queryset(self):
  161. personnel = self.get_personnel()
  162. return personnel.ayantDroit.all()
  163.  
  164. def perform_create(self, serializer):
  165. Personnel = self.get_personnel()
  166. ayantDroit = serializer.save()
  167. Personnel.ayantDroit.add(ayantDroit)
  168.  
  169. def partial_update(self, request, *args, **kwargs):
  170. ayantDroit = request.data
  171. print(ayantDroit)
  172. if ayantDroit.get('dateDeNaissance'):
  173. ayantDroit['dateDeNaissance'] = datetime.fromtimestamp((float(ayantDroit.get('dateDeNaissance'))) / 1000)
  174. return super(AyantDroitViewSet, self).partial_update(request, *args, **kwargs)
  175.  
  176.  
  177. class ContratEmployeViewSet(viewsets.ModelViewSet):
  178. queryset = ContratEmploye.objects.all()
  179. serializer_class = ContratEmployeSerializer
  180. permission_classes = (IsRH, IsAuthenticated)
  181. lookup_field = 'idCE'
  182.  
  183. def partial_update(self, request, *args, **kwargs):
  184. contrat = request.data
  185. if contrat.get('dateDeDebut'):
  186. contrat['dateDeDebut'] = datetime.fromtimestamp((float(contrat.get('dateDeDebut'))) / 1000)
  187. if contrat.get('dateDeFin'):
  188. contrat['dateDeFin'] = datetime.fromtimestamp((float(contrat.get('dateDeFin'))) / 1000)
  189. return super(ContratEmployeViewSet, self).partial_update(request, *args, **kwargs)
  190.  
  191.  
  192. class SortiePersonnelViewSet(viewsets.ViewSet):
  193. permission_classes = (IsAuthenticated, IsRH)
  194.  
  195. def create(self, request, *args, **kwargs):
  196. body = request.data
  197. var = Personnel()
  198. if body.get('matricule'):
  199. tmp = Personnel.objects.all()
  200. for p in tmp:
  201. if p.matricule == body.get('matricule'):
  202. var = p
  203. if var.etat == 'actif':
  204. var.etat = 'inactif'
  205. var.save()
  206.  
  207. user = var.account
  208. pswd = stringUtils.pw_gen()
  209.  
  210. ldap_control = LDAPcontrol()
  211. ldap_control.connect("admin", "Sp1k3el@bs")
  212. ldap_control.changePassword(str(user.username), str(pswd))
  213. ldap_control.disconnect()
  214.  
  215. smtpCfg = smtpConfig(config_file)['smtp']
  216.  
  217. send2 = smtpCfg['admin']
  218. text = "Le compte " + user.username + " a ete desactive. Le mot de passe attribue est le suivant : " + pswd
  219. send_mail(
  220. 'Desactivation de compte',
  221. text,
  222. 'spikeelabs@gmail.com',
  223. [send2],
  224. fail_silently=False,
  225. )
  226.  
  227. return Response(request.data, status=status.HTTP_201_CREATED)
  228. return Response(request.data, status=status.HTTP_404_NOT_FOUND)
  229.  
  230.  
  231. class RentreePersonnelViewSet(viewsets.ViewSet):
  232. permission_classes = (IsRH, IsAuthenticated)
  233.  
  234. def create(self, request, *args, **kwargs):
  235. body = request.data
  236. var = Personnel()
  237. if body.get('matricule'):
  238. tmp = Personnel.objects.all()
  239. for p in tmp:
  240. if p.matricule == body.get('matricule'):
  241. var = p
  242. if var.etat == 'inactif':
  243. var.etat = 'actif'
  244. var.save()
  245.  
  246. user = var.account
  247. pswd = stringUtils.pw_gen()
  248.  
  249. ldap_control = LDAPcontrol()
  250. ldap_control.connect("admin", "Sp1k3el@bs")
  251. ldap_control.changePassword(str(user.username), str(pswd))
  252. ldap_control.disconnect()
  253.  
  254. smtpCfg = smtpConfig(config_file)['smtp']
  255.  
  256. send2 = smtpCfg['admin']
  257. text = "Le compte " + user.username + " a ete reactive. Le mot de passe attribue est le suivant : " + pswd
  258. send_mail(
  259. 'Reactivation de compte',
  260. text,
  261. 'spikeelabs@gmail.com',
  262. [send2],
  263. fail_silently=False,
  264. )
  265.  
  266. return Response(request.data, status=status.HTTP_201_CREATED)
  267. return Response(request.data, status=status.HTTP_404_NOT_FOUND)
  268.  
  269.  
  270. class MatriculeViewSet(viewsets.ViewSet):
  271. permission_classes = (IsAuthenticated,)
  272.  
  273. def list(self, request, *args, **kwargs):
  274. if request.user.userpersonnel:
  275. return Response(request.user.userpersonnel.matricule, status=status.HTTP_200_OK)
  276. else:
  277. return Response(request.data, status=status.HTTP_404_NOT_FOUND)
  278.  
  279.  
  280. class MotDePasseViewSet(viewsets.ViewSet):
  281. permission_classes = (IsAuthenticated,)
  282.  
  283. def create(self, request, *args, **kwargs):
  284. body = request.data
  285. user = request.user
  286.  
  287. if (body.get('newPassword') == body.get('confirmPassword')) & (
  288. body.get('newPassword') != body.get('oldPassword')):
  289. ldap_control = LDAPcontrol()
  290. if ldap_control.connectAsUser(str(user.username), str(body.get('oldPassword'))) is None:
  291. ldap_control.disconnect()
  292. pattern = re.compile("^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?#&])[A-Za-z\d$@$!%*?#&]{8,}")
  293. s = str(body.get('newPassword'))
  294. if pattern.match(s):
  295. ldap_control.connect("admin", "Sp1k3el@bs")
  296. ldap_control.changePassword(str(user.username), str(body.get('newPassword')))
  297. ldap_control.disconnect()
  298.  
  299. send2 = user.email
  300. text = "Vous venez de changer le mot de passe de l'utilisateur : " + user.username + ".\n" + "Votre nouveau mot de passe est le suivant: " + str(
  301. body.get('newPassword'))
  302. send_mail(
  303. 'Modification de mot de passe',
  304. text,
  305. 'spikeelabs@gmail.com',
  306. [send2],
  307. fail_silently=False,
  308. )
  309.  
  310. return Response(request.data, status=status.HTTP_201_CREATED)
  311. else:
  312. return Response(status=status.HTTP_400_BAD_REQUEST)
  313. else:
  314. return Response(status=status.HTTP_400_BAD_REQUEST)
  315. else:
  316. return Response(status=status.HTTP_400_BAD_REQUEST)
  317.  
  318.  
  319. class ProfilUploadViewSet(viewsets.ViewSet):
  320. permission_classes = (IsAuthenticated,)
  321. parser_classes = (FileUploadParser,)
  322.  
  323. def get_personnel(self):
  324. return get_object_or_404(Personnel, matricule=self.kwargs['matricule'])
  325.  
  326. def create(self, request, *args, **kwargs):
  327. file_obj = request.FILES['file']
  328. if file_obj:
  329. personnel = self.get_personnel()
  330.  
  331. name = stringUtils.id_generator("photo")
  332. ext = file_obj.name.split('.')[-1]
  333. name = name + "." + ext
  334.  
  335. personnel.photo.save(name, ContentFile(file_obj.read()))
  336. personnel.save()
  337.  
  338. return Response(status=status.HTTP_201_CREATED)
  339. return Response(status=status.HTTP_400_BAD_REQUEST)
  340.  
  341.  
  342. class ContratUploadViewSet(viewsets.ViewSet):
  343. permission_classes = (IsAuthenticated,)
  344. parser_classes = (FileUploadParser,)
  345.  
  346. def get_personnel(self):
  347. return get_object_or_404(Personnel, matricule=self.kwargs['matricule'])
  348.  
  349. def create(self, request, *args, **kwargs):
  350. file_obj = request.FILES['file']
  351. if file_obj:
  352. personnel = self.get_personnel()
  353.  
  354. name = stringUtils.id_generator("contrat")
  355. ext = file_obj.name.split('.')[-1]
  356. name = name + "." + ext
  357.  
  358. contratFile = ContratEmployeFile.objects.create()
  359. contratFile.contrat.save(name, ContentFile(file_obj.read()))
  360. personnel.contratEmploye.contrats.add(contratFile)
  361. personnel.save()
  362.  
  363. return Response(status=status.HTTP_201_CREATED)
  364. return Response(status=status.HTTP_400_BAD_REQUEST)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement