예제 #1
0
파일: tasks.py 프로젝트: sigfrido64/asc-siw
def allinea_aziende_task(user):
    set_current_username(user)
    # Recupera la lista delle aziende.
    aziende_asc = sqlserverinterface(QUERY_SELECT_AZIENDE)

    count = totali = aggiornati = inseriti = 0
    print("Si parte !")
    for azienda_asc in aziende_asc:
        try:
            azienda = Azienda.objects.get(asc_id=azienda_asc['Id Azienda'])
        except ObjectDoesNotExist:
            compila_e_salva_record_azienda(azienda_asc)
            inseriti += 1
        else:
            if azienda_asc['TsAggiornamento'] > azienda.asc_data_elemento:
                compila_e_salva_record_azienda(azienda_asc, azienda)
                aggiornati += 1

        count = count + 1
        totali = totali + 1
        if count > 50:
            print(__name__ + "Aziende processate altre 50 alle " +
                  datetime.datetime.now().__str__() + " per un totale di " +
                  totali.__str__())
            count = 0

    # Compongo la risposta.
    return f"Allineate Aziende !, processate : {totali}, aggiornate : {aggiornati}, inserite : {inseriti}"
예제 #2
0
파일: tasks.py 프로젝트: sigfrido64/asc-siw
def allinea_persone_task(user):
    set_current_username(user)
    # Recupera la lista delle persone.
    persone_asc = sqlserverinterface(QUERY_SELECT_PERSONE)

    count = totali = aggiornati = inseriti = 0
    print("Si parte !")
    for persona_asc in persone_asc:
        try:
            persona = Persona.objects.get(asc_id=persona_asc['Id Persona'])
        except ObjectDoesNotExist:
            compila_e_salva_record_persona(persona_asc)
            inseriti += 1
        else:
            if persona_asc['Data Elemento'] > persona.asc_data_elemento:
                compila_e_salva_record_persona(persona_asc, persona)
                aggiornati += 1

        count = count + 1
        totali = totali + 1
        if count > 50:
            print(__name__ + "Persone Processate altri 50 alle " +
                  datetime.datetime.now().__str__() + " per un totale di " +
                  totali.__str__())
            count = 0

    # Compongo la risposta.
    return f"Allineate Persone !, processati : {totali}, aggiornati : {aggiornati}, inseriti : {inseriti}"
예제 #3
0
def lista_corsi(anno):
    """
    Recupera la lista dei corsi MDL per un dato anno formativo.
    :param anno: Anno formativo
    :return: Lista dei corsi di quell'anno formativo.
    """
    query = "SELECT [Codice Corso] AS corso, [Codice Corso] + ' - ' + [Denominazione] AS denominazione " \
            "FROM [Assocam].[dbo].[Corsi per Iscrizioni] " \
            "WHERE [Anno Formativo] = '" + anno + "' AND Tipo <= 2 " \
            "ORDER BY [Codice Corso]"
    return sqlserverinterface(query)
예제 #4
0
def lista_allievi(corso):
    """
    Recupera la lista degli allievi di un dato corso.
    :param corso : Codice corso con edizione.
    :return: Lista degli allievi di quel corso.
    """
    query = "SELECT Cognome AS cognome, Nome AS nome, Corso AS corso, Allievo AS matricola " \
            "FROM [Assocam].[dbo].[Anagrafica Persone] " \
            "INNER JOIN [Iscrizione ai Corsi] ON [Anagrafica Persone].[Id Persona] = [Iscrizione ai Corsi].Allievo " \
            "WHERE ([Iscrizione ai Corsi].Corso = '" + corso + "') " \
            "ORDER BY COGNOME"
    return sqlserverinterface(query)
예제 #5
0
def iscrizione_mdl_fields(matricola, corso, data_stampa):
    """
    Recupera la lista dei campi per la stampa di un iscrizione mdl
    
    :param matricola: La matricola dell'allievo.
    :param corso: Il corso cui è iscritto.
    :param data_stampa: Data della stampa del report.
    :return: Lista di dict con i campi che mi servono per la stampa unione.
    """
    # Compone la query per interrogare il database e la lancia.
    query = "SELECT t2.Cognome AS cognome, t2.Nome AS nome, t2.CF AS cf, t2.[Data Nascita] AS data_nascita, " \
            "t2.[Comune Nascita] AS comune_nascita, t2.[Provincia Nascita] AS p_na, " \
            "t2.[Stato Nascita] AS stato_nascita, t2.Cittadinanza AS cittadinanza, " \
            "t2.[Indirizzo Residenza] AS indirizzo_res, t2.[CAP Residenza] AS cap_res, " \
            "t2.[Comune Residenza] AS comune_res, t2.[Provincia Residenza] AS p_res, " \
            "t3.Titolo AS titolo_studio, " \
            "t2.Tel1 AS telefono, t2.Occupato AS occupato, " \
            "t4.[Codice Corso] + ' - ' + t4.Denominazione AS corso, " \
            "t2.Sesso AS sesso, t4.Cauzione as cauzione " \
            "FROM [Assocam].[dbo].[Iscrizione ai Corsi] AS t1 " \
            "INNER JOIN [Assocam].[dbo].[Anagrafica Persone] AS t2 " \
            "ON t1.Allievo = t2.[Id Persona] " \
            "INNER JOIN [Assocam].[dbo].[Titoli di Studio] AS t3 " \
            "ON t2.[Titolo Studio] = t3.Codice " \
            "INNER JOIN [Assocam].[dbo].[Corsi per Iscrizioni] AS t4 " \
            "ON t1.Corso = t4.[Codice Corso] " \
            "WHERE (t1.[Allievo] = " + str(matricola) + " AND t1.[Corso] = '" + corso + "')"
    
    # Interroga il Data base.
    dati = sqlserverinterface(query)

    # Se non trovo il recordo segnalo not found. E' un'errore perchè nella maschera la selezione è sempre coerente.
    if not dati:
        raise Http404(f'Nessun dato trovato con matricola = {matricola} e corso = {corso} !')
    
    # A seconda del sesso aggiunge 'Il sottoscritto' o 'La sottoscritta'
    dati[0]['sottoscritto'] = 'Il sottoscritto' if (dati[0]['sesso'] == 'M') else 'La sottoscritta'
    # Cambia il valore di 'occupato' da booleano a stringa.
    dati[0]['occupato'] = 'SI' if dati[0]['occupato'] else 'NO'
    # Converte la data di nascia nel formato standard GG/MM/YYYY
    dati[0]['data_nascita'] = dati[0]['data_nascita'].strftime('%d/%m/%Y')
    # Aggiunge la data di stampa
    dati[0]['data_stampa'] = data_stampa
    # Se è prevista una cauzione predispone il campo.
    if int(dati[0]['cauzione']) > 0:
        dati[0]['cauzione'] = 'Cauzione : {0:.2f} €'.format(dati[0]['cauzione'])
    else:
        dati[0]['cauzione'] = ''

    # Elimino le chiavi che non servono alla stampa unione.
    del dati[0]['sesso']

    return dati
예제 #6
0
def mdl(request):
    # Compongo la lista degli anni formativi
    query = "SELECT [Anno Formativo] AS anno from [Assocam].[dbo].[Tabella Anni Formativi] " \
            "ORDER BY [Default] DESC, [Anno Formativo] DESC"
    anni = sqlserverinterface(query)

    # Prendo il primo anno per la query che segue.
    anno_default = anni[0].get('anno')
    return render(request, 'attesta/mdl.html', {
        'anni': anni,
        'corsi': lista_corsi(anno_default)
    })
예제 #7
0
def frequenza_mdl_fields(matricola, corso, data_stampa):
    """
    Recupera la lista dei campi per la stampa di un iscrizione mdl

    :param matricola: La matricola dell'allievo.
    :param corso: Il corso cui è iscritto.
    :param data_stampa : Data della stampa del report.
    :return: Lista di dict con i campi che mi servono per la stampa unione.
    """
    # Compone la query per interrogare il database e la lancia.
    query = "SELECT t2.Cognome AS cognome, t2.Nome AS nome, t2.CF AS cf, " \
            "t4.[Codice Corso] AS cod_corso, t4.Denominazione AS corso, " \
            "t4.[Anno Formativo] AS anno_formativo, " \
            "t4.[Data Inizio Corso] AS data_inizio, t4.[Data Termine Corso] AS data_fine, " \
            "t2.Sesso AS sesso " \
            "FROM [Assocam].[dbo].[Iscrizione ai Corsi] AS t1 " \
            "INNER JOIN [Assocam].[dbo].[Anagrafica Persone] AS t2 " \
            "ON t1.Allievo = t2.[Id Persona] " \
            "INNER JOIN [Assocam].[dbo].[Corsi per Iscrizioni] AS t4 " \
            "ON t1.Corso = t4.[Codice Corso] " \
            "WHERE (t1.[Allievo] = " + str(matricola) + " AND t1.[Corso] = '" + corso + "')"
    
    # Interroga il Data base.
    dati = sqlserverinterface(query)
    
    # Se non trovo il recordo segnalo not found. E' un'errore perchè nella maschera la selezione è sempre coerente.
    if not dati:
        raise Http404(f'Nessun dato trovato con matricola = {matricola} e corso = {corso} !')

    # Inserisce il periodo andando a prendere il nome del mese.
    mese_inizio = datetime.datetime.strftime(dati[0]['data_inizio'], '%m', )
    mese_fine = datetime.datetime.strftime(dati[0]['data_fine'], '%m', )
    dati[0]['periodo'] = MESI[mese_inizio] + ' - ' + MESI[mese_fine]

    # Compone le frasi al maschile o al femminile a seconda del sesso.
    dati[0]['signore'] = 'il signor' if (dati[0]['sesso'] == 'M') else 'la signora'
    dati[0]['iscritto'] = 'iscritto' if (dati[0]['sesso'] == 'M') else 'iscritta'
    
    # Aggiunge la data di stampa
    dati[0]['data_stampa'] = data_stampa
    
    # Elimino le chiavi che non servono alla stampa unione.
    del dati[0]['data_inizio']
    del dati[0]['data_fine']
    del dati[0]['sesso']
    
    return dati
예제 #8
0
def esame_giorni_fields(matricola, corso, data_stampa):
    """
    Recupera la lista dei campi per la stampa di un iscrizione mdl

    :param matricola: La matricola dell'allievo.
    :param corso: Il corso cui è iscritto.
    :param data_stampa : Data della stampa del report.
    :return: Lista di dict con i campi che mi servono per la stampa unione.
    """
    # Compone la query per interrogare il database e la lancia.
    query = "SELECT t2.Cognome AS cognome, t2.Nome AS nome, t2.CF AS cf, " \
            "t4.[Codice Corso] AS cod_corso, t4.Denominazione AS corso, " \
            "t4.[Anno Formativo] AS anno_formativo, " \
            "t2.Sesso AS sesso " \
            "FROM [Assocam].[dbo].[Iscrizione ai Corsi] AS t1 " \
            "INNER JOIN [Assocam].[dbo].[Anagrafica Persone] AS t2 " \
            "ON t1.Allievo = t2.[Id Persona] " \
            "INNER JOIN [Assocam].[dbo].[Corsi per Iscrizioni] AS t4 " \
            "ON t1.Corso = t4.[Codice Corso] " \
            "WHERE (t1.[Allievo] = " + str(matricola) + " AND t1.[Corso] = '" + corso + "')"
    
    # Interroga il Data base.
    dati = sqlserverinterface(query)
    
    # Se non trovo il record segnalo not found. E' un'errore perchè nella maschera la selezione è sempre coerente.
    if not dati:
        raise Http404(f'Nessun dato trovato con matricola = {matricola} e corso = {corso} !')
    
    # Compone le frasi al maschile o al femminile a seconda del sesso.
    dati[0]['signore'] = 'il signor' if (dati[0]['sesso'] == 'M') else 'la signora'
    dati[0]['iscritto'] = 'iscritto' if (dati[0]['sesso'] == 'M') else 'iscritta'
    
    # Aggiunge la data di stampa
    dati[0]['data_stampa'] = data_stampa
    
    # Recupera il calendario d'esame ed il tipo di corso dal campo del report associato al corso.
    report_associato = get_object_or_404(ReportAssociato, corso=corso)
    dati[0]['gg_esame'] = report_associato.giorni_esame
    dati[0]['tipo_attestato'] = report_associato.tipo_attestato.lower()

    # Elimino le chiavi che non servono alla stampa unione.
    del dati[0]['sesso']
    
    return dati
예제 #9
0
파일: tasks.py 프로젝트: sigfrido64/asc-siw
def allinea_contatti_aziende_task(user):
    set_current_username(user)
    # Vado a leggere gli elementi dal data base SQL Server.
    # query = "SELECT * from [Assocam].[dbo].[Anagrafica Persone] "
    contatti_in_azienda_asc = sqlserverinterface(QUERY_SELECT_CONTATTI_AZIENDE)

    count = totali = aggiornati = inseriti = 0
    print("Si parte !")
    for contatto_in_azienda_asc in contatti_in_azienda_asc:
        try:
            persona = Persona.objects.get(
                asc_ca_id=contatto_in_azienda_asc['Id Contatto'])
        except ObjectDoesNotExist:
            salva_contatto_azienda_come_persona(contatto_in_azienda_asc)
            persona = Persona.objects.get(
                asc_ca_id=contatto_in_azienda_asc['Id Contatto'])
            salva_contatto_azienda(contatto_in_azienda_asc, persona)
            inseriti += 1
        else:
            if contatto_in_azienda_asc[
                    'TsAggiornamento'] > persona.asc_ca_data_elemento:
                salva_contatto_azienda_come_persona(contatto_in_azienda_asc,
                                                    persona)
                salva_contatto_azienda(contatto_in_azienda_asc, persona)
                aggiornati += 1

        count = count + 1
        totali = totali + 1
        if count > 50:
            print(__name__ + "Contatti Processati altri 50 alle " +
                  datetime.datetime.now().__str__() + " per un totale di " +
                  totali.__str__())
            count = 0

    # Compongo la risposta.
    return f"Allineato Contatti Aziende !, processati : {totali}, aggiornati : {aggiornati}, inseriti : {inseriti}"
예제 #10
0
def finale_esame_fields(matricola, corso, data_stampa):
    """
    Recupera la lista dei campi per la stampa di un iscrizione mdl

    :param matricola: La matricola dell'allievo.
    :param corso: Il corso cui è iscritto.
    :param data_stampa : Data della stampa del report.
    :return: Lista di dict con i campi che mi servono per la stampa unione.
    """
    # Compone la query per interrogare il database e la lancia.
    query = "SELECT t2.Cognome AS cognome, t2.Nome AS nome, t2.CF AS cf, " \
            "t4.[Codice Corso] AS cod_corso, t4.Denominazione AS corso, " \
            "t4.[Anno Formativo] AS anno_formativo, " \
            "t2.Sesso AS sesso, " \
            "t1.[Valutazione_Finale] AS valutazione_finale, " \
            "t1.[Ore_Corso_Svolte] AS ore_corso_svolte, t1.[Ore_Di_Assenza] AS ore_assenza " \
            "FROM [Assocam].[dbo].[Iscrizione ai Corsi] AS t1 " \
            "INNER JOIN [Assocam].[dbo].[Anagrafica Persone] AS t2 " \
            "ON t1.Allievo = t2.[Id Persona] " \
            "INNER JOIN [Assocam].[dbo].[Corsi per Iscrizioni] AS t4 " \
            "ON t1.Corso = t4.[Codice Corso] " \
            "WHERE (t1.[Allievo] = " + str(matricola) + " AND t1.[Corso] = '" + corso + "')"
    
    # Interroga il Data base.
    dati = sqlserverinterface(query)
    
    # Se non trovo il record segnalo not found. E' un'errore perchè nella maschera la selezione è sempre coerente.
    if not dati:
        raise Http404(f'Nessun dato trovato con matricola = {matricola} e corso = {corso} !')
    
    # Compone le frasi al maschile o al femminile a seconda del sesso.
    dati[0]['signore'] = 'il signor' if (dati[0]['sesso'] == 'M') else 'la signora'
    dati[0]['iscritto'] = 'iscritto' if (dati[0]['sesso'] == 'M') else 'iscritta'
    
    # Aggiunge la data di stampa
    dati[0]['data_stampa'] = data_stampa
    
    # Recupera il calendario d'esame ed il tipo di corso dal campo del report associato al corso.
    report_associato = get_object_or_404(ReportAssociato, corso=corso)
    dati[0]['tipo_attestato'] = report_associato.tipo_attestato.lower()
    
    # Scrive il giudizio che è IDONEO se >= 60, NON IDONEO se < 60, ASSENTE ALL'ESAME se < 0
    voto = float(dati[0]['valutazione_finale'])
    if voto < 0:
        dati[0]['giudizio_finale'] = "ASSENTE ALL'ESAME"
    elif voto < 59:
        dati[0]['giudizio_finale'] = "NON IDONEO"
    else:
        dati[0]['giudizio_finale'] = "IDONEO"
        
    # Calcola infine le ore corso sommando le ore di presenza e le ore di assenza.
    ore_totali = float(dati[0]['ore_corso_svolte']) + float(dati[0]['ore_assenza'])
    dati[0]['ore_totali'] = str(ore_totali)
    
    # Mette in formato stringa sia le ore corso svolte che la valutazione finale.
    dati[0]['ore_corso_svolte'] = str(dati[0]['ore_corso_svolte'])
    dati[0]['valutazione_finale'] = str(dati[0]['valutazione_finale'])
    
    # Elimino le chiavi che non servono alla stampa unione.
    del dati[0]['sesso']
    del dati[0]['ore_assenza']
   
    return dati