mauro пре 1 година
родитељ
комит
face01afad
4 измењених фајлова са 61 додато и 203 уклоњено
  1. 35 30
      documento/managefile.py
  2. 23 0
      documento/templates/welcome.error.html
  3. 3 3
      documento/views.py
  4. 0 170
      utente/upload_csv.py

+ 35 - 30
documento/managefile.py

@@ -21,12 +21,15 @@ from codicefiscale import codicefiscale
 
 import os
 
+# come sono gestiti i file nella configurazione:
+# MEDIA_ROOT=os.path.join(BASE_DIR,'static/upload')
+# che diventa = os.path.join(BASE_DIR,getConfig('DocPath'))
+
 def delete_file(documento):
   # questo blocco rimuove fisicamente il file prima della sua rimozione logica nel db
-  fl_path = '/'.join((settings.MEDIA_ROOT,documento.utente.azienda.partitaiva,documento.utente.codicefiscale))
-  print('Path completa:',fl_path)
-  posizione = '/'.join((fl_path,documento.storage))
-  if os.path.isfile(posizione):
+  file_path = os.path.join(BASE_DIR,getConfig('DocPath'),documento.utente.azienda.partitaiva,documento.utente.codicefiscale,documento.storage)
+  print('Path completa:',file_path)
+  if os.path.isfile(file_path):
     print('rimozione fisica file:',posizione)  
     try:
       os.remove(posizione)
@@ -34,35 +37,37 @@ def delete_file(documento):
       print('errore nella rimozione del file:',ose)
 
 def download_file(request,uid):
-    u = Utenti.objects.get(pk=uid)
-    fl_path = '/'.join((settings.MEDIA_ROOT,azienda.codicefiscale,))
-    print('path completa','/'.join((fl_path,u.codicefiscale,u.storage)))
-    if u.storage and os.path.isfile('/'.join((fl_path,codicefiscale,u.storage))):
+    utente = Utenti.objects.get(pk=uid)
+    file_path = os.path.join(BASE_DIR,getConfig('DocPath'),documento.utente.azienda.partitaiva,documento.utente.codicefiscale,utente.storage)
+    print('Path completa da Basedir:',file_path)
+    if utente.storage and os.path.isfile(file_path):
       try:
-        fl = open('/'.join((fl_path,codicefiscale,u.storage)), 'rb')
+        fl = open(file_path, 'rb')
       except Exception as er:
         print('errore',er)
         data=dict()
         data['errore']="File non esistente o non ancora disponibile"
-        data['utente'] = u
+        data['utente'] = utente
         return render(request,'welcome.error.html',data)
     else:
-      print('il file non esiste')
+      print('il file non esiste',file_path)
       data=dict()
       data['errore']='File non esistente o non ancora disponibile'
-      data['utente'] = u
+      data['utente'] = utente
       return render(request,'welcome.error.html',data)
 
-    mime_type, _ = mimetypes.guess_type('/'.join((fl_path,codicefiscale,u.storage)))
-    fl = '/'.join((fl_path,codicefiscale,u.storage))
-    print('fl',fl,mime_type)
-    response = FileResponse(open(fl,'rb'),content_type='application/pdf',as_attachment=False)
+    mime_type, _ = mimetypes.guess_type(file_path)
+    print('file',file_path,mime_type)
+    response = FileResponse(open(file_path,'rb'),content_type='application/pdf',as_attachment=False)
     #response['Content-Disposition'] = "attachment; filename=%s" % u.documento
     return response
   
 def upload_file(uploaded_file,utente,originale=False):
+  '''
+  caricamento files
+  '''
   stored_file = ''.join((str(time.time()),'.saved'))
-  fl_path = settings.MEDIA_ROOT
+  fl_path = os.path.join(BASE_DIR,getConfig('DocPath'))
   print('nome file',uploaded_file.name,stored_file)
   nomefile=None
   if originale:
@@ -78,21 +83,20 @@ def upload_file(uploaded_file,utente,originale=False):
   # utente.codicefiscale (prima era "record" e mi sono deciso a cambiarlo)
 
   try:
-    os.mkdir('/'.join((fl_path,utente.azienda.partitaiva)))
+    os.mkdir(os.path.join(fl_path,utente.azienda.partitaiva))
   except FileExistsError as fee:
-    print('/'.join((fl_path,utente.azienda.partitaiva)),"esistente")
-
+    print(os.path.join(fl_path,utente.azienda.partitaiva),"esistente")
   try:
-    os.mkdir('/'.join((fl_path,utente.azienda.partitaiva,utente.codicefiscale)))
+    os.mkdir(os.path.join(fl_path,utente.azienda.partitaiva,utente.codicefiscale))
   except FileExistsError as fee:
-    print('/'.join((fl_path,utente.azienda.partitaiva,utente.codicefiscale)),"esistente")
+    print(os.path.join(fl_path,utente.azienda.partitaiva,utente.codicefiscale),"esistente")
 
-  with open('/'.join((fl_path,utente.azienda.partitaiva,utente.codicefiscale,nomefile)),'wb+') as d:
+  with open(os.path.join(fl_path,utente.azienda.partitaiva,utente.codicefiscale,nomefile),'wb+') as d:
     for chunk in uploaded_file.chunks():
       d.write(chunk)
 
   if originale:
-    return '/'.join((fl_path,utente.azienda.partitaiva.utente.codicefiscale,uploaded_file.name))
+    return os.path.join(fl_path,utente.azienda.partitaiva,utente.codicefiscale,nomefile)
   return stored_file
 
 def save_and_load_file_multiple(listadocumenti,request,utente,azienda,descrizione):
@@ -144,20 +148,20 @@ def save_and_load_file_single(listadocumenti,request,utente,azienda,descrizione)
 def save_and_load_file_indice(fileindice,request,documento):
   print('nome indice caricato',fileindice.name)
   upload_file(fileindice,request.FILES['indice'],True)
-  fl_path = settings.MEDIA_ROOT
+  fl_path = getConfig('DocPath')
 
   risultato = None
-  with open(''.join((fl_path,'/',fileindice.name)),'rb') as ind:
+  with open(os.path.join(fl_path,fileindice.name),'rb') as ind:
     risultato = ind.read()
     risultato = risultato.decode('utf-8',errors='replace')
     if isinstance(risultato,str):
       risultato = risultato.encode('utf8')
 
-    with open(''.join((fl_path,'/',fileindice.name,'.cvtd')),'wb') as ind:
+    with open(os.path.join(fl_path,fileindice.name,'.cvtd'),'wb') as ind:
       ind.write(risultato)
       print('una volta convertito, passiamo oltre')
     
-    with open(''.join((fl_path,'/',fileindice.name,'.cvtd')),'rt') as ind:
+    with open(os.path.join(fl_path,'/',fileindice.name,'.cvtd'),'rt') as ind:
         spamreader = csv.reader(ind,delimiter=';')
         errori = list()
         count = 0
@@ -205,10 +209,11 @@ def save_and_load_file_indice(fileindice,request,documento):
       print('presenti documenti da allegare')
       listadocumenti = filecaricati.cleaned_data['allegati']
       print(listadocumenti)
-      u = Utenti.objects.all()
+
+      utenti = Utenti.objects.all()
       for singolodocumento in listadocumenti:
         print('singolodocumento',singolodocumento)
-        for utente in u:
+        for utente in utenti:
           if utente.codicefiscale.strip() in singolodocumento.name:
             print('match utente-documento')
             risultato = upload_file(singolodocumento,utente)

+ 23 - 0
documento/templates/welcome.error.html

@@ -0,0 +1,23 @@
+{% extends 'base.html' %}
+
+{% block top %}
+    <div class='form-outline mb-5 text-center btn-primary h3'>
+	    Big Farm Download Module
+    </div>
+    <div class='form-outline mb-2'>
+      Spiacente, ma il documento non risulta ancora disponibile.
+    </div>
+
+    <div class='form-outline mb-2'>
+	    I motivi possono essere i seguenti:<br>
+	    il file non e' ancora reso disponibile,<br>
+	    oppure hai superato il tempo massimo per scaricarlo, 30 giorni.<br>
+      Se hai effettuato la visita nelle precedenti 24 ore, ti suggeriamo di riprovare nei
+      prossimi giorni.
+
+    </div>
+  </form>
+{% endblock %}
+
+{% block body %}
+{% endblock %}

+ 3 - 3
documento/views.py

@@ -5,6 +5,7 @@ from django.shortcuts import render
 from django.http import HttpResponse,HttpResponseRedirect,FileResponse
 from django.contrib.auth.models import User
 from django.urls import reverse
+from django.conf import settings
 
 from .models import *
 from .forms import *
@@ -112,8 +113,7 @@ def finalize_download(request,did,uid=None):
   utente = Utente.objects.get(pk=UserId)
   documento = Documento.objects.get(pk=did)
 
-  fl_path = settings.MEDIA_ROOT
-  fl_completa = ''.join((fl_path,'/',utente.azienda.partitaiva,'/',utente.codicefiscale,'/',documento.storage))
+  fl_completa = os.path.join(settings.BASE_DIR,getConfig('DocPath'),utente.azienda.partitaiva,utente.codicefiscale,documento.storage)
   print('path completa',fl_completa)
 
   if documento.storage and os.path.isfile(fl_completa):
@@ -127,7 +127,7 @@ def finalize_download(request,did,uid=None):
       data['documento'] = documento
       return render(request,'welcome.error.html',data)
   else:
-    print('il file non esiste')
+    print('il file non esiste in document,download')
     data=dict()
     data['errore']='File non esistente o non ancora disponibile'
     data['utente'] = utente

+ 0 - 170
utente/upload_csv.py

@@ -1,170 +0,0 @@
-
-def admin(request):
-  data=dict()
-  u = Utenti.objects.all().filter(admin=0)
-  data['u'] = u
-  print('numero record presenti',len(u))
-
-  if request.method == 'POST':
-    filecaricati = AdminUpload(request.POST,request.FILES)
-
-    if filecaricati.is_valid():
-      print('record filecaricati validi')
-      if filecaricati.cleaned_data.get('indice'):
-        print('presente file indice')
-        fileindice = filecaricati.cleaned_data.get('indice')
-        print('nome indice caricato',fileindice.name)
-        upload_file(fileindice,request.FILES['indice'],True)
-        fl_path = settings.MEDIA_ROOT
-
-        risultato = None
-        with open(''.join((fl_path,'/',fileindice.name)),'rb') as ind:
-          risultato = ind.read()
-          risultato = risultato.decode('utf-8',errors='replace')
-          if isinstance(risultato,str):
-            risultato = risultato.encode('utf8')
-
-        with open(''.join((fl_path,'/',fileindice.name,'.cvtd')),'wb') as ind:
-          ind.write(risultato)
-          print('una volta convertito, passiamo oltre')
-    
-        with open(''.join((fl_path,'/',fileindice.name,'.cvtd')),'rt') as ind:
-          spamreader = csv.reader(ind,delimiter=';')
-          errori = list()
-          count = 0
-          for sr in spamreader:
-            salvare = False
-            count +=1
-            if count==1: continue
-            print(count,'sr',sr,len(sr))
-            '''
-            rispetto a Farma, il record inviato e' diverso:
-
-            0: 0308 - BOX3 S.R.L.;
-            1: Elaborazioni - Lul  Libro Unico del Lavoro lavoratore;
-            2: ALESSE ANTONIO - LSSNTN63A25H501Y;
-            3: DA0308_L.U.L._LAVORATORE_#_ALESSE_ANTONIO_#_LSSNTN63A25H501Y_#_06.2024_12.07.2024_10.18.43.pdf;
-            4: ="06.2024";
-            5: 12.07.2024 10:34:17;
-            6: Cliente;
-            7: 2024.07.15 11:40:33;
-            8: 12.07.2024;
-            9: 12.07.2024;
-            '''
-            if len(sr) > 1:
-              utente = Utenti()
-              utente.nome = sr[2].capitalize()
-              try:
-                data_convertita =  datetime.datetime.strptime(sr[8], "%d.%m.%Y")
-                print('data convertita',data_convertita)
-                utente.datanascita = data_convertita
-              except ValueError as ve:
-                print(ve)
-              utente.codicefiscale = sr[2].split(' - ')[1].strip().upper()
-              #utente.luogonascita = sr[4].lower()
-              utente.azienda = sr[0].lower()
-              utente.password = str(randint(100000,999999))
-
-              try:
-                codicefiscale.decode(utente.codicefiscale)
-                salvare = True
-              except ValueError as ve:
-                print('errore',ve)
-                salvare = False
-
-              try:
-                if salvare: utente.save()
-              except IntegrityError as ie:
-                print('errore',sr[2])
-                errori.append((sr[1],sr[2]))
-                data['IntegrityErrorList'] = errori
-
-            data['u'] = Utenti.objects.all()
-
-      if filecaricati.cleaned_data.get('allegati'):
-        print('presenti documenti da allegare')
-        listadocumenti = filecaricati.cleaned_data['allegati']
-        print(listadocumenti)
-        u = Utenti.objects.all()
-        for singolodocumento in listadocumenti:
-          print('singolodocumento',singolodocumento)
-          for utente in u:
-            if utente.codicefiscale.strip() in singolodocumento.name:
-              print('match utente-documento')
-              risultato = upload_file(singolodocumento,utente)
-              utente.documento = singolodocumento.name
-              utente.storage = risultato
-              utente.dataupload = datetime.datetime.now()
-              print('utente.storage',utente.storage)
-              utente.save()
-        data['u'] = Utenti.objects.all()
-
-  return render(request,'welcome.admin.html',data)
-
-def edit(request,uid=None):
-  print('uid',uid)
-  if uid:
-    uid = int(uid)
-
-  data = dict()
-  utente = None
-  if uid==0:
-    utente = Utenti()
-    utente.password = str(randint(100000,999999))
-  else:
-    try:
-      utente = Utenti.objects.get(pk=uid)
-    except Utenti.DoesNotExist as dne:
-      print(dne)
-      return HttpResponseRedirect(reverse('welcome:admin'))
-
-  if request.method == 'POST':
-    result = AdminUser(request.POST,request.FILES)
-    print('analisi richiesta',result.is_valid())
-
-    if result.is_valid():
-      print('risultato valido')
-      utente.nome = result.cleaned_data.get('nome')
-      utente.codicefiscale = result.cleaned_data.get('codicefiscale')
-      utente.luogonascita = result.cleaned_data.get('luogonascita')
-      utente.datanascita = result.cleaned_data.get('datanascita')
-      print('data letta da web',result.cleaned_data.get('datanascita'))
-      print('data time',dir(result.cleaned_data.get('datanascita')))
-      print('assegnato',utente.datanascita)
-      utente.password = result.cleaned_data.get('password')
-      utente.azienda = result.cleaned_data.get('azienda')
-      print('utentedocumento',result.cleaned_data.get('documento'))
-      if result.cleaned_data.get('documento'):
-        risultato = upload_file(result.cleaned_data.get('documento'),request.FILES['documento'])
-        utente.documento = result.cleaned_data.get('documento')
-        utente.storage = risultato
-        utente.dataupload = datetime.datetime.now()
-      try:
-        utente.save()
-      except IntegrityError as ie:
-        print('errore',ie)
-        data['utente'] = AdminUser(request.POST)
-        data['IntegrityError'] = True 
-        return render(request,'welcome.edit.html',data)
-      print('data salvata',utente.datanascita)
-      return HttpResponseRedirect(reverse('welcome:admin'))
-    else:
-      print('risultato NON valido')
-      print(result.cleaned_data.get('datanascita'))
-      data['utente'] = AdminUser(request.POST)
-  else:
-    tmp = dict()
-    tmp['nome']=utente.nome
-    tmp['luogonascita'] = utente.luogonascita
-    tmp['datanascita'] = utente.datanascita
-    print('utente data',utente.datanascita)
-    print(type(utente.datanascita))
-    tmp['codicefiscale'] = utente.codicefiscale
-    tmp['password'] = utente.password
-    tmp['azienda'] = utente.azienda
-    tmp['documento'] = utente.documento
-    data['utente'] = AdminUser(tmp)
-    data['edit_single_user'] = True
-
-  return render(request,'welcome.edit.html',data)
-  '''