Exemple #1
0
    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
Exemple #2
0
    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"
        )
Exemple #3
0
    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)
Exemple #4
0
 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
Exemple #5
0
 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
Exemple #6
0
    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
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
    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)
Exemple #10
0
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
Exemple #11
0
    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)