def genera_pdf(self): z = Zip(oggetto=self) z.aggiungi_file(self.genera_scheda_valutazione().file.path) if self.idoneo: z.aggiungi_file(self.genera_attestato().file.path) z.comprimi_e_salva("%s.zip" % self.persona.codice_fiscale) return z
def genera_pdf_firme(self): """ Genera il fogli firme delle lezioni del corso. """ def key_cognome(elem): return elem.cognome iscritti = [ partecipazione.persona for partecipazione in self.partecipazioni_confermate() ] archivio = Zip(oggetto=self) for lezione in self.lezioni.all(): pdf = PDF(oggetto=self) pdf.genera_e_salva( nome="Firme lezione %s.pdf" % lezione.nome, corpo={ "corso": self, "iscritti": sorted(iscritti, key=key_cognome), "lezione": lezione, "data": lezione.inizio, }, modello="pdf_firme_lezione.html", ) archivio.aggiungi_file(file_path=pdf.file.path, nome_file=pdf.nome) archivio.comprimi_e_salva(nome="Fogli firme %s.zip" % self.nome) return archivio
def genera_pdf_firme(self): """ Genera il fogli firme delle lezioni del corso. """ def key_cognome(elem): return elem.cognome iscritti = [partecipazione.persona for partecipazione in self.partecipazioni_confermate()] archivio = Zip(oggetto=self) for lezione in self.lezioni.all(): pdf = PDF(oggetto=self) pdf.genera_e_salva( nome="Firme lezione %s.pdf" % lezione.nome, corpo={ "corso": self, "iscritti": sorted(iscritti, key=key_cognome), "lezione": lezione, "data": lezione.inizio, }, modello="pdf_firme_lezione.html", ) archivio.aggiungi_file(file_path=pdf.file.path, nome_file=pdf.nome) archivio.comprimi_e_salva(nome="Fogli firme %s.zip" % self.nome) return archivio
def test_zip(self): p = Persona( nome="Mario", cognome="Rossi", codice_fiscale="FRSSAKJSIKAJD2", data_nascita="1994-2-5" ) p.save() z = Zip(oggetto=p) # Crea file 1 f1 = NamedTemporaryFile(delete=False, mode='wt') f1.write(self.CONTENUTO_1) f1.close() # Crea file 2 f2 = NamedTemporaryFile(delete=False, mode='wt') f2.write(self.CONTENUTO_2) f2.close() # Genera ZIP file z.aggiungi_file(f1.name, self.NOME_1) z.aggiungi_file(f2.name, self.NOME_2) z.comprimi_e_salva(nome='TestZip.zip') with ZipFile(z.file.path, 'r') as zip: self.assertIsNone( zip.testzip(), msg="Il file Zip non e' corrotto" ) r1 = zip.open(self.NOME_1) self.assertTrue( r1.read().decode() == self.CONTENUTO_1, msg="Il contenuto del primo file coincide" ) r2 = zip.open(self.NOME_2) self.assertTrue( r2.read().decode() == self.CONTENUTO_2, msg="Il contenuto del secondo file coincide" ) zip.close() self.assertTrue( p.allegati.all(), msg="Allegato associato correttamente alla persona" )
def aspirante_corso_base_report_schede(request, me, pk): corso = get_object_or_404(CorsoBase, pk=pk) if not me.permessi_almeno(corso, MODIFICA): return redirect(ERRORE_PERMESSI) archivio = Zip(oggetto=corso) for p in corso.partecipazioni_confermate(): # Genera la scheda di valutazione. scheda = p.genera_scheda_valutazione() archivio.aggiungi_file(scheda.file.path, "%s - Scheda di Valutazione.pdf" % p.persona.nome_completo) # Se idoneo, genera l'attestato. if p.idoneo: attestato = p.genera_attestato() archivio.aggiungi_file(attestato.file.path, "%s - Attesato.pdf" % p.persona.nome_completo) archivio.comprimi_e_salva(nome="Corso %d-%d.zip" % (corso.progressivo, corso.anno)) return redirect(archivio.download_url)
def aspirante_corso_base_report_schede(request, me, pk): corso = get_object_or_404(CorsoBase, pk=pk) if not me.permessi_almeno(corso, MODIFICA): return redirect(ERRORE_PERMESSI) archivio = Zip(oggetto=corso) for p in corso.partecipazioni_confermate(): # Genera la scheda di valutazione. scheda = p.genera_scheda_valutazione() archivio.aggiungi_file( scheda.file.path, "%s - Scheda di Valutazione.pdf" % p.persona.nome_completo) # Se idoneo, genera l'attestato. if p.idoneo: attestato = p.genera_attestato() archivio.aggiungi_file( attestato.file.path, "%s - Attestato.pdf" % p.persona.nome_completo) archivio.comprimi_e_salva(nome="Corso %d-%d.zip" % (corso.progressivo, corso.anno)) return redirect(archivio.download_url)
def test_articolo(self): CONTENUTO_1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n" NOME_1 = 'Test1.txt' CONTENUTO_2 = "Donec tempus nisi eu enim consequat, non scelerisque nisi accumsan.\n" NOME_2 = 'Test/Test2.txt' volontario, _, _ = crea_persona_sede_appartenenza() presidente = crea_persona() presidente.save() presidente, sede, _ = crea_persona_sede_appartenenza(presidente) delega_presidente_in_corso = Delega( persona=presidente, tipo=PRESIDENTE, oggetto=sede, inizio=datetime.datetime.now() - datetime.timedelta(days=5), fine=datetime.datetime.now() + datetime.timedelta(days=5) ) delega_presidente_in_corso.save() articolo = Articolo.objects.create( titolo='Titolo 1', corpo=parola_casuale(3000), data_inizio_pubblicazione=datetime.datetime.now() - datetime.timedelta(days=5), ) self.assertEqual(articolo.corpo[:Articolo.DIMENSIONE_ESTRATTO], articolo.estratto) self.assertFalse(articolo.termina) articolo2 = Articolo.objects.create( titolo='Titolo 2', corpo='Testo random', estratto='estratto qualsiasi', data_inizio_pubblicazione=datetime.datetime.now() - datetime.timedelta(days=5), data_fine_pubblicazione=datetime.datetime.now() + datetime.timedelta(days=5), stato=Articolo.PUBBLICATO ) segmento_presidenti_no_filtri = ArticoloSegmento.objects.create( segmento='I', articolo=articolo2, ) self.assertNotEqual(articolo2.corpo, articolo2.estratto) self.assertEqual(articolo2.estratto, 'estratto qualsiasi') self.assertTrue(articolo2.termina) articolo3 = Articolo.objects.create( titolo='Titolo 3', corpo='Testo qualsiasi', estratto='estratto random', data_inizio_pubblicazione=datetime.datetime.now() - datetime.timedelta(days=5), stato=Articolo.PUBBLICATO ) segmento_volontari_no_filtri = ArticoloSegmento.objects.create( segmento='B', articolo=articolo3 ) z = Zip(oggetto=articolo3) f1 = NamedTemporaryFile(delete=False, mode='wt') f1.write(CONTENUTO_1) f1.close() z.aggiungi_file(f1.name, NOME_1) z.comprimi_e_salva(nome='TestZip.zip') self.assertEqual(1, articolo3.allegati.all().count()) self.assertIn(z, articolo3.allegati.all()) articolo4 = Articolo.objects.create( titolo='Titolo 4', corpo='Testo qualsiasi 2', estratto='estratto random 2', data_inizio_pubblicazione=datetime.datetime.now() - datetime.timedelta(days=5), data_fine_pubblicazione=datetime.datetime.now() - datetime.timedelta(days=2), stato=Articolo.PUBBLICATO ) pubblicati = Articolo.objects.pubblicati() bozze = Articolo.objects.bozze() self.assertEqual(pubblicati.count(), 2) self.assertEqual(bozze.count(), 1) self.assertIn(articolo, bozze) self.assertNotIn(articolo, pubblicati) self.assertNotIn(articolo2, bozze) self.assertIn(articolo2, pubblicati) self.assertNotIn(articolo3, bozze) self.assertIn(articolo3, pubblicati) self.assertNotIn(articolo4, bozze) self.assertNotIn(articolo4, pubblicati) segmenti_volontario = ArticoloSegmento.objects.all().filtra_per_segmenti(volontario) articoli_volontario = segmenti_volontario.oggetti_collegati() self.assertNotIn(articolo2, articoli_volontario) self.assertIn(articolo3, articoli_volontario) segmenti_presidente = ArticoloSegmento.objects.all().filtra_per_segmenti(presidente) articoli_presidente = segmenti_presidente.oggetti_collegati() self.assertIn(articolo2, articoli_presidente) self.assertIn(articolo3, articoli_presidente)
class GeneraReport: ATTESTATO_FILENAME = "%s %s - Attestato.pdf" SCHEDA_FILENAME = "%s %s - Scheda di Valutazione.pdf" def __init__(self, request, corso, single_attestato=False): self.request = request self.corso = corso def download(self): """ Returns a HTTP response """ self.archive = Zip(oggetto=self.corso) if self.request.GET.get('download_single_attestato'): return self._download_single_attestato() else: self._generate() self.archive.comprimi_e_salva( nome="Corso %d-%d.zip" % (self.corso.progressivo, self.corso.anno)) return redirect(self.archive.download_url) def _download_single_attestato(self): from .models import PartecipazioneCorsoBase from curriculum.models import Titolo try: partecipazione = self.corso.partecipazioni_confermate().get( titolo_ottenuto__pk=self.request.GET.get( 'download_single_attestato'), persona=self.request.user.persona) except PartecipazioneCorsoBase.DoesNotExist: messages.error(self.request, "Questo attestato non esiste.") return redirect( reverse('utente:cv_tipo', args=[ Titolo.TITOLO_CRI, ])) attestato = self._attestato(partecipazione) filename = self.ATTESTATO_FILENAME % ( partecipazione.titolo_ottenuto.last(), '') with open(attestato.file.path, 'rb') as f: pdf = f.read() response = HttpResponse(pdf, content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename=%s' % '-'.join( filename.split()) response.write(pdf) return response def _generate(self): for partecipante in self.corso.partecipazioni_confermate(): self._schede(partecipante) if partecipante.idoneo: # Se idoneo, genera l'attestato self._attestato(partecipante) def _schede(self, partecipante): """ Genera la scheda di valutazione """ scheda = partecipante.genera_scheda_valutazione(request=self.request) persona = partecipante.persona self.archive.aggiungi_file( scheda.file.path, self.SCHEDA_FILENAME % (persona.cognome, persona.nome)) return scheda def _attestato(self, partecipante): attestato = partecipante.genera_attestato(request=self.request) persona = partecipante.persona self.archive.aggiungi_file( attestato.file.path, self.ATTESTATO_FILENAME % (persona.cognome, persona.nome)) return attestato
def test_articolo(self): CONTENUTO_1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n" NOME_1 = 'Test1.txt' CONTENUTO_2 = "Donec tempus nisi eu enim consequat, non scelerisque nisi accumsan.\n" NOME_2 = 'Test/Test2.txt' volontario, _, _ = crea_persona_sede_appartenenza() presidente = crea_persona() presidente.save() presidente, sede, _ = crea_persona_sede_appartenenza(presidente) delega_presidente_in_corso = Delega( persona=presidente, tipo=PRESIDENTE, oggetto=sede, inizio=datetime.datetime.now() - datetime.timedelta(days=5), fine=datetime.datetime.now() + datetime.timedelta(days=5)) delega_presidente_in_corso.save() articolo = Articolo.objects.create( titolo='Titolo 1', corpo=parola_casuale(3000), data_inizio_pubblicazione=datetime.datetime.now() - datetime.timedelta(days=5), ) self.assertEqual(articolo.corpo[:Articolo.DIMENSIONE_ESTRATTO], articolo.estratto) self.assertFalse(articolo.termina) articolo2 = Articolo.objects.create( titolo='Titolo 2', corpo='Testo random', estratto='estratto qualsiasi', data_inizio_pubblicazione=datetime.datetime.now() - datetime.timedelta(days=5), data_fine_pubblicazione=datetime.datetime.now() + datetime.timedelta(days=5), stato=Articolo.PUBBLICATO) segmento_presidenti_no_filtri = ArticoloSegmento.objects.create( segmento='I', articolo=articolo2, ) self.assertNotEqual(articolo2.corpo, articolo2.estratto) self.assertEqual(articolo2.estratto, 'estratto qualsiasi') self.assertTrue(articolo2.termina) articolo3 = Articolo.objects.create( titolo='Titolo 3', corpo='Testo qualsiasi', estratto='estratto random', data_inizio_pubblicazione=datetime.datetime.now() - datetime.timedelta(days=5), stato=Articolo.PUBBLICATO) segmento_volontari_no_filtri = ArticoloSegmento.objects.create( segmento='B', articolo=articolo3) z = Zip(oggetto=articolo3) f1 = NamedTemporaryFile(delete=False, mode='wt') f1.write(CONTENUTO_1) f1.close() z.aggiungi_file(f1.name, NOME_1) z.comprimi_e_salva(nome='TestZip.zip') self.assertEqual(1, articolo3.allegati.all().count()) self.assertIn(z, articolo3.allegati.all()) articolo4 = Articolo.objects.create( titolo='Titolo 4', corpo='Testo qualsiasi 2', estratto='estratto random 2', data_inizio_pubblicazione=datetime.datetime.now() - datetime.timedelta(days=5), data_fine_pubblicazione=datetime.datetime.now() - datetime.timedelta(days=2), stato=Articolo.PUBBLICATO) pubblicati = Articolo.objects.pubblicati() bozze = Articolo.objects.bozze() self.assertEqual(pubblicati.count(), 2) self.assertEqual(bozze.count(), 1) self.assertIn(articolo, bozze) self.assertNotIn(articolo, pubblicati) self.assertNotIn(articolo2, bozze) self.assertIn(articolo2, pubblicati) self.assertNotIn(articolo3, bozze) self.assertIn(articolo3, pubblicati) self.assertNotIn(articolo4, bozze) self.assertNotIn(articolo4, pubblicati) segmenti_volontario = ArticoloSegmento.objects.all( ).filtra_per_segmenti(volontario) articoli_volontario = segmenti_volontario.oggetti_collegati() self.assertNotIn(articolo2, articoli_volontario) self.assertIn(articolo3, articoli_volontario) segmenti_presidente = ArticoloSegmento.objects.all( ).filtra_per_segmenti(presidente) articoli_presidente = segmenti_presidente.oggetti_collegati() self.assertIn(articolo2, articoli_presidente) self.assertIn(articolo3, articoli_presidente)