managefile.py 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. from django.shortcuts import render
  2. from django.http import HttpResponse,HttpResponseRedirect,FileResponse
  3. from django.contrib.auth.models import User
  4. from django.urls import reverse
  5. from django.db import IntegrityError
  6. from .models import *
  7. from config.views import *
  8. from django.conf import settings
  9. from django.conf.urls.static import static
  10. from django.contrib.auth import authenticate
  11. import mimetypes
  12. from random import randint
  13. import csv
  14. import time
  15. import datetime
  16. #pip install python-codicefiscale
  17. from codicefiscale import codicefiscale
  18. import os
  19. def download_file(request,uid):
  20. u = Utenti.objects.get(pk=uid)
  21. fl_path = '/'.join((settings.MEDIA_ROOT,azienda.codicefiscale,))
  22. print('path completa','/'.join((fl_path,u.codicefiscale,u.storage)))
  23. if u.storage and os.path.isfile('/'.join((fl_path,codicefiscale,u.storage))):
  24. try:
  25. fl = open('/'.join((fl_path,codicefiscale,u.storage)), 'rb')
  26. except Exception as er:
  27. print('errore',er)
  28. data=dict()
  29. data['errore']="File non esistente o non ancora disponibile"
  30. data['utente'] = u
  31. return render(request,'welcome.error.html',data)
  32. else:
  33. print('il file non esiste')
  34. data=dict()
  35. data['errore']='File non esistente o non ancora disponibile'
  36. data['utente'] = u
  37. return render(request,'welcome.error.html',data)
  38. mime_type, _ = mimetypes.guess_type('/'.join((fl_path,codicefiscale,u.storage)))
  39. fl = '/'.join((fl_path,codicefiscale,u.storage))
  40. print('fl',fl,mime_type)
  41. response = FileResponse(open(fl,'rb'),content_type='application/pdf',as_attachment=False)
  42. #response['Content-Disposition'] = "attachment; filename=%s" % u.documento
  43. return response
  44. def upload_file(uploaded_file,record,originale=False): #record=utente
  45. stored_file = ''.join((str(time.time()),'.saved'))
  46. fl_path = settings.MEDIA_ROOT
  47. print('nome file',uploaded_file.name,stored_file)
  48. nomefile=None
  49. if originale:
  50. nomefile = uploaded_file.name
  51. else:
  52. nomefile = stored_file
  53. # vediamo se caricare o meno.
  54. # in questo caso, se il documento esiste gia', non lo carica.
  55. # come facciamo a stabilire se il documento esiste gia'?
  56. try:
  57. os.mkdir('/'.join((fl_path,record.azienda.partitaiva)))
  58. except FileExistsError as fee:
  59. print('/'.join((fl_path,record.azienda.partitaiva)),"esistente")
  60. try:
  61. os.mkdir('/'.join((fl_path,record.azienda.partitaiva,record.codicefiscale)))
  62. except FileExistsError as fee:
  63. print('/'.join((fl_path,record.azienda.partitaiva,record.codicefiscale)),"esistente")
  64. with open('/'.join((fl_path,record.azienda.partitaiva,record.codicefiscale,nomefile)),'wb+') as d:
  65. for chunk in uploaded_file.chunks():
  66. d.write(chunk)
  67. if originale:
  68. return '/'.join((fl_path,record.azienda.partitaiva.record.codicefiscale,uploaded_file.name))
  69. return stored_file
  70. def save_and_load_file_multiple(listadocumenti,request,u,azienda,descrizione):
  71. listaok = list()
  72. listanotok = list()
  73. for singolodocumento in listadocumenti:
  74. print('singolodocumento',singolodocumento)
  75. for utente in u:
  76. if utente.codicefiscale.strip() in singolodocumento.name:
  77. print('match utente-documento')
  78. risultato = upload_file(singolodocumento,utente)
  79. documento = Documento()
  80. documento.dataupload = datetime.datetime.now()
  81. documento.utente = utente
  82. documento.azienda = azienda
  83. documento.documento = singolodocumento.name
  84. documento.storage = risultato
  85. documento.descrizione = descrizione
  86. try:
  87. documento.save()
  88. listaok.append(documento.documento)
  89. except IntegrityError as ie:
  90. print("problema di integrita', il file esiste",ie)
  91. listanotok.append(documento.documento)
  92. print(listaok,listanotok)
  93. return (listaok,listanotok)
  94. def save_and_load_file_single(listadocumenti,request,utente,azienda,descrizione):
  95. listaok = list()
  96. listanotok = list()
  97. for singolodocumento in listadocumenti:
  98. print('singolodocumento',singolodocumento,descrizione)
  99. risultato = upload_file(singolodocumento,utente)
  100. documento = Documento()
  101. documento.dataupload = datetime.datetime.now()
  102. documento.utente = utente
  103. documento.azienda = azienda
  104. documento.documento = singolodocumento.name
  105. documento.storage = risultato
  106. documento.descrizione = descrizione
  107. try:
  108. documento.save()
  109. listaok.append(documento.documento)
  110. except IntegritiError as ie:
  111. print("problema di integrita', il file esiste",ie)
  112. listanotok.append(documento.documento)
  113. return (listaok,listanotok)
  114. def save_and_load_file_indice(fileindice,request,documento):
  115. print('nome indice caricato',fileindice.name)
  116. upload_file(fileindice,request.FILES['indice'],True)
  117. fl_path = settings.MEDIA_ROOT
  118. risultato = None
  119. with open(''.join((fl_path,'/',fileindice.name)),'rb') as ind:
  120. risultato = ind.read()
  121. risultato = risultato.decode('utf-8',errors='replace')
  122. if isinstance(risultato,str):
  123. risultato = risultato.encode('utf8')
  124. with open(''.join((fl_path,'/',fileindice.name,'.cvtd')),'wb') as ind:
  125. ind.write(risultato)
  126. print('una volta convertito, passiamo oltre')
  127. with open(''.join((fl_path,'/',fileindice.name,'.cvtd')),'rt') as ind:
  128. spamreader = csv.reader(ind,delimiter=';')
  129. errori = list()
  130. count = 0
  131. for sr in spamreader:
  132. salvare = False
  133. count +=1
  134. if count==1: continue
  135. print(count,'sr',sr,len(sr))
  136. '''
  137. rispetto a farma, questo tracciato e' diverso
  138. 0: 0308 - BOX3 S.R.L.;
  139. 1: Elaborazioni - Lul Libro Unico del Lavoro lavoratore;
  140. 2: ALESSE ANTONIO - LSSNTN63A25H501Y;
  141. 3: DA0308_L.U.L._LAVORATORE_#_ALESSE_ANTONIO_#_LSSNTN63A25H501Y_#_06.2024_12.07.2024_10.18.43.pdf;
  142. 4: ="06.2024";
  143. 5: 12.07.2024 10:34:17;
  144. 6: Cliente;
  145. 7: 2024.07.15 11:40:33;
  146. 8: 12.07.2024;
  147. 9: 12.07.2024;
  148. '''
  149. if len(sr) > 1: # la lunghezza del record segnala qualcosa
  150. utente = None
  151. try:
  152. utente = Utente.objects.get(codicefiscale=sr[2].split(' - ')[1].strip().upper())
  153. except Utente.DoesNotExist as dne:
  154. print('Utente non trovato')
  155. utente = Utente()
  156. utente.azienda = azienda
  157. utente.nome = sr[2].capitalize()
  158. try:
  159. data_convertita = datetime.datetime.strptime(sr[8], "%d.%m.%Y")
  160. print('data convertita',data_convertita)
  161. utente.datanascita = data_convertita
  162. except ValueError as ve:
  163. print(ve)
  164. utente.codicefiscale = sr[2].split(' - ')[1].strip().upper()
  165. utente.password = str(randint(100000,999999))
  166. utente.save()
  167. # caricamento documenti
  168. if filecaricati.cleaned_data.get('allegati'):
  169. print('presenti documenti da allegare')
  170. listadocumenti = filecaricati.cleaned_data['allegati']
  171. print(listadocumenti)
  172. u = Utenti.objects.all()
  173. for singolodocumento in listadocumenti:
  174. print('singolodocumento',singolodocumento)
  175. for utente in u:
  176. if utente.codicefiscale.strip() in singolodocumento.name:
  177. print('match utente-documento')
  178. risultato = upload_file(singolodocumento,utente)
  179. # risultato: nome del file memorizzato (nome interno)
  180. # singolodocumento.name = nome del file originale