From 66f330856f911fb40a8f4e46d5dd6add490eacf5 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 8 Sep 2017 18:18:00 +0200 Subject: [PATCH] update readme! --- README.md | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++- README.pdf | Bin 0 -> 16651 bytes 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 README.pdf diff --git a/README.md b/README.md index a21f4b4..987611f 100644 --- a/README.md +++ b/README.md @@ -1 +1,82 @@ -migrazione progetto GPW da attuale struttura a WebForms + MVC da vers 2 \ No newline at end of file +# GPW + +Il progetto GPW è una "galassia di applicativi" che ruota intorno ai temi + +* gestione delle timbrature utente (locali e da remoto via smartphone) +* gestione delal registrazione delle ore allocate ai vari progetti aziendali + integrazioen a sistemi di project management evoluti (es: PROJ-ETS) + +## Elenco Programmi + +Di seguito l'elenco dei programmi compresi nella soluzione GPW + +### GPW/HOME + +E' la "landing page" principale del progetto da cui rimanda ai 4 moduli applicativi + +### GPW/ADMIN + +Applicazione di gestione principale del progetto per utenti Admin: + +* permette creazioen clienti/progetti/fasi +* permette di verificare timbrature / registrazione ore / riassegnazione ore +* approvazione richieste timbratura non realtime/locali (da remoto o come richeiste a psoteriori) +* link a report vari + +### GPW/BCODE + +Gestione di una pagina interattiva che registra ingresso/uscita dipendenti tramite barcode personale e pistola barcode USB + +### GPW/SMART + +Applicazione dedicata tramite smartphone per + +* timbrature (locali in autoapprovazione, remote con approvazione richiesta) +* gestione approvazioni (per utenti admin) +* registrazione progetti (semplificata) + +### GPW/WRKLG + +Progetto di gestione della rendicontazione personale utente dei progetti svolti/seguiti + +* verifica timbrature +* inserimento ore a progetto +* verifica coerenza ore timbrate / ore lavorate +* possibilità di richeista mancate timbrature + +## Clienti + +Clienti ed utilizzatori di GPW sono + +* Steamware stessa +* S.P.S. Stsampi +* E.T.S. Engineering (integrato con PROJ-ETS) + + +## Note ed internals + +note di progetto e dettaglio modalità operative + +### Gestione delle licenze + +Il programma utilizza il sistema di gestione delle licenze proprietario di Steamware, basato sulel librerie base di gestione encryption/decryption (Steamware Library) + un implementazione ad hoc date dal codice della classe licenzeGPW.cs + +Alcune note su quanto fornisce tale libreria dedicata: + +* `licenzeGPW.installazione` = nome cliente da DB (`AnagKeyValue > nomeVar: installazione`) +* `licenzeGPW.applicazione` = nome applicazione (da web.config `appName`) +* `licenzeGPW.utentiAttivi` = calcolato tramite la procedura SQL `stp_Dip_getAttivi` +* `licenzeGPW.licenzeAttive` = calcolato tramite la procedura c# `SteamWare.licenseMan.getLicenseNum(installazione, applicazione)` e quindi prende il massimo CABLATO (nel codice) se la licenza è scaduta altrimenti prende `licenzeGPW.licenzeDb` (vedi seguito) +* `licenzeGPW.licenzeDb` = letto da conf DB con la chiave `licenzeGPW.installazione` (`AnagKeyValue > nomeVar: $installazione --> valINT`) +* `licenzeGPW.authKey` = letto da conf DB con la chiave `licenzeGPW.installazione` (`AnagKeyValue > nomeVar: $installazione --> valString`) +* `licenzeGPW.scadenzaLicenza` = calcolato tramite la procedura C# `licenseMan.expiryDateByAuthKey($installazione, $applicazione, $licenzeDb, $auth_key);` +* `licenzeGPW.checkLicenze` = verifica della condizione ` utentiAttivi <= licenzeAttive` + +## ToDo's + +### 2017.09.08 + +Alcune cose da verificare x nuovi progetti... + +* migrazione progetto GPW da attuale struttura a WebForms + MVC da vers 2: completare? +* gestione controllo licenze ed utenti attivi \ No newline at end of file diff --git a/README.pdf b/README.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a899ce6d5da7135630e6b0aaf47f60b0f9d21a29 GIT binary patch literal 16651 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 literal 0 HcmV?d00001