SHARE
TWEET

Untitled

a guest Sep 11th, 2019 109 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package com.itel.nsweb.business.cuprecall_asltaranto;
  2.  
  3. import com.google.gson.Gson;
  4. import com.itel.nsweb.business.cuprecall_asltaranto.communication.request.ReserveAppointmentRequest;
  5. import com.itel.nsweb.business.cuprecall_asltaranto.communication.request.AvailabilityListAppointmentsRequest;
  6.  
  7. import com.itel.nsweb.business.cuprecall_asltaranto.communication.request.DeleteReservationRequest;
  8. import com.itel.nsweb.business.cuprecall_asltaranto.communication.request.ElectronicPrescriptionRequest;
  9. import com.itel.nsweb.business.cuprecall_asltaranto.communication.request.NewDateAppointmentRequest;
  10. import com.itel.nsweb.business.cuprecall_asltaranto.communication.request.PatientAppointmentsRequest;
  11. import com.itel.nsweb.business.cuprecall_asltaranto.communication.request.ReplaceAppointmentRequest;
  12. import com.itel.nsweb.business.cuprecall_asltaranto.communication.response.AvailabilityListAppointmentsResponse;
  13. import com.itel.nsweb.business.cuprecall_asltaranto.communication.response.DeleteReservationResponse;
  14. import com.itel.nsweb.business.cuprecall_asltaranto.communication.response.ElectronicPrescriptionResponse;
  15. import com.itel.nsweb.business.cuprecall_asltaranto.communication.response.LoginResponse;
  16. import com.itel.nsweb.business.cuprecall_asltaranto.communication.response.NewDateAppointmentResponse;
  17. import com.itel.nsweb.business.cuprecall_asltaranto.communication.response.PatientAppointmentsResponse;
  18. import com.itel.nsweb.business.cuprecall_asltaranto.communication.response.ReplaceAppointmentResponse;
  19. import com.itel.nsweb.business.cuprecall_asltaranto.enums.PrescriptionType;
  20. import com.itel.nsweb.business.cuprecall_asltaranto.modeldata.medicalexamination_nre.ElectronicPrescription;
  21. import com.itel.nsweb.business.cuprecall_asltaranto.modeldata.medicalexamination_nre.NreAppointment;
  22. import com.itel.nsweb.core.common.apps.AppConfigManagement;
  23. import com.itel.nsweb.core.common.apps.communication.response.BaseResponse;
  24. import com.itel.nsweb.core.common.apps.enumeration.ResponseStatus;
  25. import com.itel.nsweb.core.common.apps.session.AppSession;
  26. import com.itel.nsweb.core.cuprecall.communication.response.SyncDataResponse;
  27. import com.itel.nsweb.core.cuprecall.enumeration.UserType;
  28. import com.itel.nsweb.core.cuprecall.modeldata.Patient;
  29. import com.itel.nsweb.core.cuprecall.modeldata.User;
  30. import com.itel.nsweb.core.cuprecall.enumeration.GradientType;
  31. import com.itel.nsweb.core.cuprecall.enumeration.LoginType;
  32. import com.itel.nsweb.core.cuprecall.modeldata.Company;
  33. import com.itel.nsweb.core.cuprecall.modeldata.style.CompanyStyle;
  34. import com.itel.nsweb.core.cuprecall.modeldata.style.Gradient;
  35. import com.itel.smartsuite.tools.datetime.DateTimeFunctions;
  36. import com.itel.smartsuite.tools.xmlloading.GlobalVars;
  37.  
  38. import com.rsp.toolbox.tools.LogEx;
  39. import com.rsp.toolbox.tools.WebEx;
  40. import java.io.IOException;
  41.  
  42. import java.text.ParseException;
  43. import java.text.SimpleDateFormat;
  44. import java.util.ArrayList;
  45. import java.util.Date;
  46. import java.util.Enumeration;
  47. import java.util.HashMap;
  48. import java.util.List;
  49. import java.util.Locale;
  50. import java.util.Map;
  51. import java.util.logging.Level;
  52. import java.util.logging.Logger;
  53.  
  54. import javax.servlet.http.HttpServletRequest;
  55. import javax.servlet.http.HttpServletResponse;
  56. import org.apache.http.HttpEntity;
  57. import org.apache.http.HttpResponse;
  58. import org.apache.http.HttpVersion;
  59. import org.apache.http.client.config.RequestConfig;
  60. import org.apache.http.client.methods.HttpGet;
  61. import org.apache.http.client.methods.HttpPatch;
  62. import org.apache.http.entity.StringEntity;
  63. import org.apache.http.impl.client.CloseableHttpClient;
  64. import org.apache.http.impl.client.HttpClients;
  65. import org.apache.http.params.BasicHttpParams;
  66. import org.apache.http.params.HttpParams;
  67. import org.apache.http.util.EntityUtils;
  68. import org.json.JSONException;
  69. import org.json.JSONObject;
  70.  
  71. /**
  72.  * Classe per le richieste provenienti dalle app
  73.  *
  74.  * @author Mirko Budano
  75.  * @author Matteo Gramellini
  76.  *
  77.  * "http://localhost:8084/voipsmartsuite/wgate?typereq=apprequest&classname=com.itel.nsweb.business.cuprecall_asltaranto.AppReq&requestnumber=301"
  78.  *
  79.  * #GET APPUNTAMENTI
  80.  * "http://localhost:8084/voipsmartsuite/wgate?typereq=apprequest&classname=com.itel.nsweb.business.cuprecall_asltaranto.AppReq&requestnumber=310&codiceAssistito=GVNFNC68D14A662T"
  81.  *
  82.  * #GET NUOVA DATA APPUNTAMENTO
  83.  * "http://localhost:8084/voipsmartsuite/wgate?typereq=apprequest&classname=com.itel.nsweb.business.cuprecall_asltaranto.AppReq&requestnumber=311&codCoupon=385836&anno=2015&datanascita=14/04/1968"
  84.  *
  85.  * #SOSTITUISCI APPUNTAMENTO
  86.  * "http://localhost:8084/voipsmartsuite/wgate?typereq=apprequest&classname=com.itel.nsweb.business.cuprecall_asltaranto.AppReq&requestnumber=312&idDisponibilita=&codCoupon=385836&anno=2015&datanascita=14/04/1968"
  87.  *
  88.  *
  89.  */
  90. public class AppReq extends com.itel.nsweb.core.cuprecall.AppReq {
  91.  
  92.     /**
  93.      * modulo xml dove recuperare i parametri di comunicazione con il sistema
  94.      * esterno
  95.      */
  96.     protected String confFileName = "module_business_app_cuprecall.xml";
  97.     /**
  98.      * elenco delle variabili di configurazione dell'app caricate da xml
  99.      */
  100.     protected List<HashMap<String, HashMap<String, String>>> appConfig = null;
  101.     /**
  102.      * indica se è stato inizializzato correttamente
  103.      */
  104.     private boolean isInitialized = false;
  105.  
  106.     private final static String ITALIAN_DATE_PATTERN = "dd/MM/yyyy";
  107.  
  108.     public AppReq() {
  109.         super();
  110.  
  111.         appConfig = AppConfigManagement.getAppConfig(confFileName);
  112.         if (appConfig != null) {
  113.             isInitialized = true;
  114.         }
  115.     }
  116.  
  117.     public boolean isInitialized() {
  118.         return isInitialized;
  119.     }
  120.  
  121.     @Override
  122.     protected String executeCustomRequest(int requestNumber, HttpServletRequest request) {
  123.         String res;
  124.         switch (requestNumber) {
  125.             case 300: // sincronizza i dati di configurazione dell'app
  126.                 res = syncData(request);
  127.                 break;
  128.             case 301: //metodo per effettuare il login
  129.                 res = login(request);
  130.                 break;
  131.             case 310: //recupera gli appuntamenti dell'assistito
  132.                 res = getPatientAppointments(request);
  133.                 break;
  134.             case 311: //cancella una prenotazione
  135.                 res = deleteReservation(request);
  136.                 break;
  137.             case 320: // recupura una nuova disponibilità per l'appuntamento
  138.                 res = getNewDateAppointment(request);
  139.                 break;
  140.             case 321: // sostituisce la vecchia data di un appuntamento con una nuova disponibile
  141.                 res = replaceAppointment(request);
  142.                 break;
  143.             case 322: //Ritorna la prestazione elettronica associata alla ricetta
  144.                 res = getElectronicPrescription(request);
  145.                 break;
  146.             case 323: //Ritorna la disponibilità degli appuntamenti
  147.                 res = getAvailabilityAppointmens(request);
  148.                 break;
  149.             case 324: //Conferma una prenotazione
  150.                 res = confirmReservation(request);
  151.                 break;
  152.             case 999: //Utilizzato per i test
  153.                 res = testLogin();
  154.                 break;
  155.  
  156.             default:
  157.                 res = super.executeCustomRequest(requestNumber, request);
  158.         }
  159.         return res;
  160.     }
  161.  
  162.     /**
  163.      * questo metodo viene chiamato dopo aver chiamato il metodo trig per
  164.      * settare il tipo di contenuto inviato come risposta. Di default usa
  165.      * text/xml;charset=UTF-8
  166.      *
  167.      * @param response
  168.      */
  169.     @Override
  170.     public void setResponseContentType(HttpServletResponse response) {
  171.         response.setContentType("text/html;charset=UTF-8");
  172.     }
  173.  
  174.     /**
  175.      * metodo invocato per la sincronizzazione dei dati di configurazione
  176.      * dell'app
  177.      *
  178.      * @param request
  179.      * @return risultato della richiesta di sincronizzazione dei dati
  180.      */
  181.     @Override
  182.     protected String syncData(HttpServletRequest request) {
  183.         SyncDataResponse syncDataResponse;
  184.         if (!isInitialized) {
  185.             LogEx.trace(3, "syncData", "Errore durante l'inizializzazione delle variabili da " + confFileName);
  186.             syncDataResponse = new SyncDataResponse();
  187.             syncDataResponse.setResponseDescription("Errore durante l'inizializzazione dell'app");
  188.             return getNewGson().toJson(syncDataResponse);
  189.         }
  190.         try {
  191.             List<Company> companies = new ArrayList<>();
  192.             for (HashMap<String, HashMap<String, String>> company : appConfig) {
  193.                 CompanyStyle companyStyle = null;
  194.                 HashMap<String, String> style = company.get("style");
  195.                 if (style != null && style.size() > 0) {
  196.                     String sGradientType = style.get("gradient_type");
  197.                     int iGradientType = 0; // setto di default il gradient linear
  198.                     if (sGradientType != null) {
  199.                         iGradientType = Integer.valueOf(sGradientType);
  200.                     }
  201.                     GradientType gradientType = GradientType.getFromInt(iGradientType);
  202.                     Gradient gradient = new Gradient(style.get("start_color"), style.get("center_Color"), style.get("end_color"), gradientType);
  203.                     companyStyle = new CompanyStyle(style.get("color_primary"), style.get("color_primary_dark"), style.get("color_primary_light"), style.get("color_secondary"), style.get("color_accent"), style.get("text_color_primary"), style.get("text_color_secondary"), style.get("text_color_secondary_light"), gradient);
  204.                 }
  205.  
  206.                 HashMap<String, String> data = company.get("data");
  207.                 if (data != null && data.size() > 0) {
  208.                     String companyCode = data.get("company_code");
  209.                     String companyName = data.get("company_name");
  210.                     String loginUrl = data.get("login_url");
  211.                     String logoUrl = data.get("logo_url");
  212.  
  213.                     String sLoginType = data.get("login_type");
  214.                     int iLoginType = 0; // setto di default il login local
  215.                     if (sLoginType != null) {
  216.                         iLoginType = Integer.valueOf(sLoginType);
  217.                     }
  218.                     LoginType loginType = LoginType.getFromInt(iLoginType);
  219.  
  220.                     companies.add(new Company(companyCode, companyName, logoUrl, loginUrl, loginType, companyStyle));
  221.                 }
  222.             }
  223.  
  224.             if (companies.size() > 0) {
  225.                 syncDataResponse = new SyncDataResponse(companies);
  226.                 syncDataResponse.setStatus(ResponseStatus.OK);
  227.             } else {
  228.                 syncDataResponse = new SyncDataResponse();
  229.                 syncDataResponse.setResponseDescription("Errore durante il caricamento dei dati di configurazione");
  230.             }
  231.         } catch (NumberFormatException e) {
  232.             syncDataResponse = new SyncDataResponse();
  233.             syncDataResponse.setResponseDescription("Errore durante il recupero dei dati di configurazione");
  234.             LogEx.error(e, "Errore durante il recupero dei dati di configurazione");
  235.         }
  236.  
  237.         return getNewGson().toJson(syncDataResponse);
  238.     }
  239.  
  240.     /**
  241.      * metodo invocato dopo il login fatto con shibboleth
  242.      *
  243.      * @param request
  244.      * @return pagina html con la 'response' della chiamata
  245.      */
  246.     @Override
  247.     public String login(HttpServletRequest request) {
  248.         Gson g = getNewGson();
  249.         String ret;
  250.         String javascript = "<script type=\"text/javascript\">function getMobileOperatingSystem(){var userAgent=navigator.userAgent||navigator.vendor||window.opera;if(/windows phone/i.test(userAgent)){return\"Windows Phone\";}\n"
  251.                 + "if(/android/i.test(userAgent)){return\"Android\";}\n"
  252.                 + "if(/iPad|iPhone|iPod/.test(userAgent)&&!window.MSStream){return\"iOS\";}\n"
  253.                 + "return\"unknown\";}\n"
  254.                 + "function sendResult(result){var os=getMobileOperatingSystem();if(os==\"Android\"){Android.getResult(result);}"
  255.                 + "else if(os==\"iOS\"){var resultToLogin={'result':result};window.webkit.messageHandlers.callbackHandler.postMessage(resultToLogin);}}</script>";
  256.  
  257.         LoginResponse response = new LoginResponse();
  258.         try {
  259.             //uso questa stringa per stampare le coppie chiave-valore dell'header nel caso in cui il login non abbia successo
  260.             String headerLog = "";
  261.             //loggo tutti gli header che mi arrivano per DEBUG
  262.             Enumeration headerNames = request.getHeaderNames();
  263.             while (headerNames.hasMoreElements()) {
  264.                 String key = (String) headerNames.nextElement();
  265.                 String value = request.getHeader(key);
  266.                 headerLog += key + ":" + value + ";";//aggiungo la coppia chiave:valore alla stringa di log
  267.                 LogEx.trace(6, "ng", "AppReq::login() Header - " + key + ": " + value);
  268.             }
  269.             //flag che indica se sono loggato con successo
  270.             boolean loginOk = false;
  271.             //provo a recuperare lo spincode
  272.             String spinCode = request.getHeader("spidcode");
  273.             //definisco taxCode, name, birthday, email
  274.             String taxCode = "", name = "", email = "";
  275.             Date birthday = null;
  276.             //se spinCode non è null ed è valorizzato allora il login è con SPID
  277.             if (spinCode != null && !spinCode.isEmpty()) {
  278.                 //AUTENTICAZIONE CON IDP
  279.                 //prendo il codice fiscale
  280.                 taxCode = WebEx.StringToHTTPParam(request.getHeader("fiscalnumber"));
  281.                 //per sicurezza aggiungo un controllo, se mi arriva un trattino prendo la seconda parte (durante i test mi è arrivato come codice fiscale TINIT-STTRLI70A01F205L)
  282.                 if (taxCode.contains("-")) {
  283.                     //se per sbaglio ho un trattino faccio lo split e prendo la seconda parte
  284.                     taxCode = taxCode.split("-")[1];
  285.                 }
  286.                 //prendo cognome e nome del paziente
  287.                 name = WebEx.StringToHTTPParam(request.getHeader("familyname")) + " " + WebEx.StringToHTTPParam(request.getHeader("name"));
  288.                 //prendo la data di nascita
  289.                 birthday = DateTimeFunctions.getDateFromString(WebEx.StringToHTTPParam(request.getHeader("dateofbirth")), "yyyy-MM-dd");
  290.                 //prendo l'email
  291.                 email = WebEx.StringToHTTPParam(request.getHeader("mail"));
  292.                 //setto il flag loginOk a true
  293.                 loginOk = true;
  294.             } else if ("TRUE".equalsIgnoreCase(request.getHeader("useridentified")) && "TRUE".equalsIgnoreCase(request.getHeader("userenabled"))) {
  295.                 //AUTENTICAZIONE CON IDP (Portale Regionale Puglia)
  296.                 //prendo il codice fiscale
  297.                 taxCode = WebEx.StringToHTTPParam(request.getHeader("codicefiscale"));
  298.                 //prendo nome cognome
  299.                 name = WebEx.StringToHTTPParam(request.getHeader("cognome")) + " " + WebEx.StringToHTTPParam(request.getHeader("nome"));
  300.                 //prendo la data di nascita
  301.                 birthday = DateTimeFunctions.getDateFromString(WebEx.StringToHTTPParam(request.getHeader("datanascita")), ITALIAN_DATE_PATTERN);
  302.                 //prendo l'email
  303.                 email = WebEx.StringToHTTPParam(request.getHeader("mail"));
  304.                 //setto il flag loginOk a true
  305.                 loginOk = true;
  306.             } else {
  307.                 //stampo un log basso con i valori ricevuti nella response
  308.                 LogEx.trace(1, "ng", "AppReq::login() Utente non abilitato. Coppie chiave:valore ricevute nella response " + headerLog);
  309.                 response.setResponseDescription("Utente non abilitato ad accedere ai servizi");
  310.             }
  311.  
  312.             //se loginOk è true
  313.             if (loginOk) {
  314.                 //creo la sessione(nel costruttore la aggiunge anche alla lista delle sessioni)
  315.                 AppSession session = new AppSession(name);
  316.                 //mi viene passato un solo paziente
  317.                 Patient patient = new Patient(taxCode, name, birthday, email);
  318.  
  319.                 List<Patient> patientsAssociated = new ArrayList<>();
  320.                 patientsAssociated.add(patient);
  321.                 //creo User
  322.                 User user = new User(session.getSid(), UserType.REGISTERED, patientsAssociated);
  323.                 //setto id di sessione nella response
  324.                 response.setUser(user);
  325.                 response.setStatus(ResponseStatus.OK);
  326.                 LogEx.trace(5, "ng", "AppReq::login() Login effettuato con successo, codice fiscale ricevuto: " + taxCode);
  327.             }
  328.         } catch (Exception e) {
  329.             LogEx.error(e, "AppReq::login() Errore durante il parse del risultato ottenuto da shibboleth");
  330.             response.setResponseDescription("Errore di sistema. Contattare l'assistenza");
  331.         } finally {
  332.             ret = "<!DOCTYPE html><html><head>" + javascript + "</head><body onload='sendResult(\"" + g.toJson(response).replace("\"", "\\\"") + "\")'></body></html>";
  333.         }
  334.         return ret;
  335.     }
  336.  
  337.     public String testLogin() {
  338.         LoginResponse response = new LoginResponse();
  339.         //creo la sessione(nel costruttore la aggiunge anche alla lista delle sessioni)
  340.         AppSession session = new AppSession("prova");
  341.         //mi viene passato un solo paziente
  342.         Patient patient = new Patient("PNTLNZ89B17G479T", "Lorenzo", new Date(), "prova@libero.it");
  343.  
  344.         List<Patient> patientsAssociated = new ArrayList<>();
  345.         patientsAssociated.add(patient);
  346.         //creo User
  347.         User user = new User(session.getSid(), UserType.REGISTERED, patientsAssociated);
  348.         //setto id di sessione nella response
  349.         LogEx.trace(5, "ng", "AppReq::testLogin() Login effettuato con successo");
  350.  
  351.         response.setUser(user);
  352.        
  353.         return getNewGson().toJson(response);
  354.     }
  355.  
  356.     /**
  357.      * metodo che ritorna gli appuntamenti dell'assistito
  358.      *
  359.      * @param request
  360.      * @return l'oggetto contenente l'elenco degli appuntamenti associati
  361.      * all'assistito
  362.      */
  363.     @Override
  364.     protected String getPatientAppointments(HttpServletRequest request) {
  365.         PatientAppointmentsResponse response;
  366.         try {
  367.             String receivedObject = request.getParameter("json");
  368.             PatientAppointmentsRequest patientAppointmentsRequest = getNewGson().fromJson(receivedObject, PatientAppointmentsRequest.class);
  369.             if (patientAppointmentsRequest == null) {
  370.                 throw new Exception("Errore nella deserializzazione dell'oggetto json di tipo PatientAppointmentsRequest");
  371.             }
  372.             //recupero la sessione utente
  373.             /*BaseResponse sessionResponse = checkSession(patientAppointmentsRequest.getSid());
  374.              if (sessionResponse != null) {
  375.              return getNewGson().toJson(sessionResponse);
  376.              }*/
  377.  
  378.             //prendo il codice fiscale dalla richiesta
  379.             String taxCode = patientAppointmentsRequest.getTaxCode();
  380.             //String taxCode = "CRVRRT68H20H147R";
  381.             String startDate = new SimpleDateFormat(ITALIAN_DATE_PATTERN, Locale.ITALY).format(patientAppointmentsRequest.getStartDate());
  382.  
  383.             LogEx.trace(5, "ng", "AppReq::getPatientAppointments - taxCode: " + taxCode);
  384.             LogEx.trace(5, "ng", "AppReq::getPatientAppointments - startDate: " + startDate);
  385.             //creo il gestore dell'interazione con il ws
  386.             WSHandler ws = new WSHandler();
  387.             //chiamo il ws e gli passo codiceAssistito, dataInizio
  388.             response = ws.getPatientAppointments(taxCode, startDate);
  389.         } catch (Exception e) {
  390.             response = new PatientAppointmentsResponse();
  391.             response.setResponseDescription("Errore di sistema. Contattare l'assistenza");
  392.             LogEx.error(e, "AppReq::getPatientAppointments() Errore durante il recupero degli appuntamenti per l'assistito");
  393.         }
  394.         return getNewGson().toJson(response);
  395.     }
  396.  
  397.     /**
  398.      * metodo che cancella la prenotazione
  399.      *
  400.      * @param request
  401.      * @return il risultato della cancellazione
  402.      */
  403.     @Override
  404.     protected String deleteReservation(HttpServletRequest request) {
  405.  
  406.         DeleteReservationResponse deleteReservationResponse;
  407.         try {
  408.             String receivedObject = request.getParameter("json");
  409.             DeleteReservationRequest deleteReservationRequest = getNewGson().fromJson(receivedObject, DeleteReservationRequest.class);
  410.             if (deleteReservationRequest == null) {
  411.                 throw new Exception("Errore nella deserializzazione dell'oggetto json di tipo DeleteReservationRequest");
  412.             }
  413.             // solo se l'utente è registrato
  414.             if (deleteReservationRequest.getUserType() == UserType.REGISTERED) {
  415.                 //recupero la sessione utente
  416.                 BaseResponse sessionResponse = checkSession(deleteReservationRequest.getSid());
  417.                 if (sessionResponse != null) {
  418.                     return getNewGson().toJson(sessionResponse);
  419.                 }
  420.             }
  421.  
  422.             long reservationNumber = deleteReservationRequest.getReservationNumber();
  423.             int cancellationReason = deleteReservationRequest.getCancellationReason();
  424.             int reservationYear = deleteReservationRequest.getReservationYear();
  425.             String taxCode = deleteReservationRequest.getTaxCode();
  426.             //String taxCode = "CRVRRT68H20H147R";
  427.             //Date birthday = deleteReservationRequest.getBirthday();      
  428.             Date birthday = getBirthdayFromTaxCode(taxCode);
  429.  
  430.             LogEx.trace(5, "ng", "AppReq::deleteReservation - codCoupon: " + reservationNumber + ", anno: " + reservationYear + ", codice fiscale: " + taxCode);
  431.             //creo il gestore dell'interazione con il ws
  432.             WSHandler ws = new WSHandler();
  433.             deleteReservationResponse = ws.deleteReservation(reservationNumber, cancellationReason, reservationYear, birthday);
  434.         } catch (Exception e) {
  435.             deleteReservationResponse = new DeleteReservationResponse();
  436.             deleteReservationResponse.setResponseDescription("Errore di sistema. Contattare l'assistenza");
  437.             LogEx.error(e, "Errore durante la cancellazione della prenotazione");
  438.         }
  439.         return getNewGson().toJson(deleteReservationResponse);
  440.     }
  441.  
  442.     /**
  443.      * Metodo che ritorna una nuova data appuntamento per l'assistito
  444.      *
  445.      * @param request
  446.      * @return un oggetto di tipo NewDateAppointmentResponse con la data di
  447.      * nuova disponibilità
  448.      */
  449.     @Override
  450.     protected String getNewDateAppointment(HttpServletRequest request) {
  451.         NewDateAppointmentResponse newDateAppointmentResponse;
  452.         try {
  453.             String receivedObject = request.getParameter("json");
  454.             NewDateAppointmentRequest newDateAppointmentRequest = getNewGson().fromJson(receivedObject, NewDateAppointmentRequest.class);
  455.             if (newDateAppointmentRequest == null) {
  456.                 throw new Exception("Errore nella deserializzazione dell'oggetto json di tipo NewDateAppointmentRequest");
  457.             }
  458.             if (newDateAppointmentRequest.getUserType() == UserType.REGISTERED) {
  459.                 //recupero la sessione utente
  460.                 BaseResponse sessionResponse = checkSession(newDateAppointmentRequest.getSid());
  461.                 if (sessionResponse != null) {
  462.                     return getNewGson().toJson(sessionResponse);
  463.                 }
  464.             }
  465.  
  466.             long reservationNumber = newDateAppointmentRequest.getReservationNumber();
  467.             int year = newDateAppointmentRequest.getReservationYear();
  468.             //String birthday = "20/06/1968";//data di nascita corvaglia
  469.             String birthday = new SimpleDateFormat(ITALIAN_DATE_PATTERN, Locale.ITALY).format(getBirthdayFromTaxCode(newDateAppointmentRequest.getTaxCode()));
  470.  
  471.             LogEx.trace(5, "ng", "AppReq::getNewDateAppointment - codCoupon: " + reservationNumber + ", anno: " + year + ", data nascita: " + birthday);
  472.             //creo il gestore dell'interazione con il ws
  473.             WSHandler ws = new WSHandler();
  474.             //chiamo il ws e gli passo reservationNumber, year, birthday
  475.             newDateAppointmentResponse = ws.getNewDateAppointment(reservationNumber, year, birthday);
  476.         } catch (Exception e) {
  477.             newDateAppointmentResponse = new NewDateAppointmentResponse();
  478.             newDateAppointmentResponse.setResponseDescription("Errore di sistema. Contattare l'amministratore");
  479.             LogEx.error(e, "AppReq::getNewDateAppointment() Errore durante il recupero di una nuova data appuntamento");
  480.         }
  481.         return getNewGson().toJson(newDateAppointmentResponse);
  482.     }
  483.  
  484.     /**
  485.      * Metodo che cambia l'appuntamento dell'assistito
  486.      *
  487.      * @param request
  488.      * @return il nuovo appuntamento
  489.      */
  490.     @Override
  491.     protected String replaceAppointment(HttpServletRequest request) {
  492.         ReplaceAppointmentResponse replaceAppointmentResponse;
  493.         try {
  494.             String receivedObject = request.getParameter("json");
  495.             ReplaceAppointmentRequest replaceAppointmentRequest = getNewGson().fromJson(receivedObject, ReplaceAppointmentRequest.class);
  496.             if (replaceAppointmentRequest == null) {
  497.                 throw new Exception("Errore nella deserializzazione dell'oggetto json di tipo ReplaceAppointmentRequest");
  498.             }
  499.  
  500.             if (replaceAppointmentRequest.getUserType() == UserType.REGISTERED) {
  501.                 //recupero la sessione utente
  502.                 BaseResponse sessionResponse = checkSession(replaceAppointmentRequest.getSid());
  503.                 if (sessionResponse != null) {
  504.                     return getNewGson().toJson(sessionResponse);
  505.                 }
  506.             }
  507.             String availabilityId = replaceAppointmentRequest.getAvailabilityId();
  508.             long reservationNumber = replaceAppointmentRequest.getReservationNumber();
  509.             int year = replaceAppointmentRequest.getReservationYear();
  510.             //String birthday = "20/06/1968";//data di nascita corvaglia
  511.             String birthday = new SimpleDateFormat(ITALIAN_DATE_PATTERN, Locale.ITALY).format(getBirthdayFromTaxCode(replaceAppointmentRequest.getTaxCode()));
  512.  
  513.             LogEx.trace(5, "ng", "AppReq::replaceAppointment - idDisponibilita: " + availabilityId + ", codCoupon: " + reservationNumber + ", anno: " + year + ", data nascita: " + birthday);
  514.             //creo il gestore dell'interazione con il ws
  515.             WSHandler ws = new WSHandler();
  516.             //chiamo il ws e gli passo availabilityId, reservationNumber, year, birthday
  517.             replaceAppointmentResponse = ws.replaceAppointment(availabilityId, reservationNumber, year, birthday);
  518.         } catch (Exception e) {
  519.             LogEx.error(e, "AppReq::replaceAppointment() Errore durante lo spostamento prenotazione");
  520.             replaceAppointmentResponse = new ReplaceAppointmentResponse();
  521.             replaceAppointmentResponse.setResponseDescription("Errore di sistema. Contattare l'amministratore");
  522.         }
  523.         return getNewGson().toJson(replaceAppointmentResponse);
  524.     }
  525.  
  526.     /**
  527.      * Richiesta della ricetta elettronica a partire dal codice nre
  528.      *
  529.      * @param request
  530.      * @return
  531.      */
  532.     protected String getElectronicPrescription(HttpServletRequest request) {
  533.  
  534.         ElectronicPrescriptionResponse electronicPrescriptionResponse;
  535.         try {
  536.             String receivedObject = request.getParameter("json");
  537.             ElectronicPrescriptionRequest electronicPrescriptionRequest = getNewGson().fromJson(receivedObject, ElectronicPrescriptionRequest.class);
  538.             if (electronicPrescriptionRequest == null) {
  539.                 throw new Exception("Errore nella deserializzazione dell'oggetto json di tipo ElectronicPrescriptionRequest");
  540.             }
  541.  
  542.             /*if (electronicPrescriptionRequest.getUserType() == UserType.REGISTERED) {
  543.                 //recupero la sessione utente
  544.                 BaseResponse sessionResponse = checkSession(electronicPrescriptionRequest.getSid());
  545.                 if (sessionResponse != null) {
  546.                     return getNewGson().toJson(sessionResponse);
  547.                 }
  548.             }*/
  549.             //Recupero i parametri dalla richiesta
  550.             String nreCode = electronicPrescriptionRequest.getNreCode();
  551.             String taxCode = electronicPrescriptionRequest.getTaxCode();
  552.             //Inizializzo il webservice per la richiesta
  553.             WSHandlerPrenotazione handlerPrenotazione = new WSHandlerPrenotazione();
  554.             //Invio la richiesta
  555.             electronicPrescriptionResponse = handlerPrenotazione.getElectronicPrescription(nreCode, taxCode);
  556.  
  557.         } catch (Exception e) {
  558.             LogEx.error(e, "AppReq::getElectronicPrescription() - Errore durante la richiesta di prestazione elettronica.");
  559.             electronicPrescriptionResponse = new ElectronicPrescriptionResponse();
  560.             electronicPrescriptionResponse.setResponseDescription("Errore di sistema. Contattare l'amministratore");
  561.         }
  562.         return getNewGson().toJson(electronicPrescriptionResponse);
  563.     }
  564.  
  565.     /**
  566.      * Ritorna la lista di appuntamenti prenotabili a partire dalla ricetta nre
  567.      *
  568.      * @param request
  569.      * @return
  570.      */
  571.     protected String getAvailabilityAppointmens(HttpServletRequest request) {
  572.         AvailabilityListAppointmentsResponse availabilityListAppointmentsResponse;
  573.  
  574.         try {
  575.             String receivedObject = request.getParameter("json");
  576.             AvailabilityListAppointmentsRequest availabilityListAppointmentsRequest = getNewGson().fromJson(receivedObject, AvailabilityListAppointmentsRequest.class);
  577.             if (availabilityListAppointmentsRequest == null) {
  578.                 throw new Exception("Errore nella deserializzazione dell'oggetto json di tipo availabilityAppointmens");
  579.             }
  580.  
  581.             /*if (availabilityListAppointmentsRequest.getUserType() == UserType.REGISTERED) {
  582.                 //recupero la sessione utente
  583.                 BaseResponse sessionResponse = checkSession(availabilityListAppointmentsRequest.getSid());
  584.                 if (sessionResponse != null) {
  585.                     return getNewGson().toJson(sessionResponse);
  586.                 }
  587.             }*/
  588.             //Recupero i parametri dalla richiesta
  589.             String taxCode = availabilityListAppointmentsRequest.getTaxCode();
  590.             String nreCode = availabilityListAppointmentsRequest.getNreCode();
  591.             PrescriptionType prescriptionType = availabilityListAppointmentsRequest.getPrescriptionType();
  592.             ElectronicPrescription selectedElectronicPrescription = availabilityListAppointmentsRequest.getSelectedElectronicPrescription();
  593.             //Inizializzo il webservice per la richiesta
  594.             WSHandlerPrenotazione handlerPrenotazione = new WSHandlerPrenotazione();
  595.             //Invio la richiesta
  596.             availabilityListAppointmentsResponse = handlerPrenotazione.getAvailabilityList(nreCode, taxCode, selectedElectronicPrescription, prescriptionType);
  597.  
  598.         } catch (Exception e) {
  599.             LogEx.error(e, "AppReq::availabilityAppointmens() - Errore durante la richiesta di prestazione elettronica.");
  600.             availabilityListAppointmentsResponse = new AvailabilityListAppointmentsResponse();
  601.             availabilityListAppointmentsResponse.setResponseDescription("Errore di sistema. Contattare l'amministratore");
  602.         }
  603.  
  604.         return getNewGson().toJson(availabilityListAppointmentsResponse);
  605.     }
  606.  
  607.     /**
  608.      * Prenota l'appuntamento passato e ritorna l'appuntamento scelto la
  609.      * prescrizione e informazioni relativamente il paziente che ha prenotato
  610.      *
  611.      * @param request
  612.      * @return
  613.      */
  614.     @Override
  615.     protected String confirmReservation(HttpServletRequest request) {
  616.         BaseResponse response = new BaseResponse();
  617.  
  618.         try {
  619.             String receivedObject = request.getParameter("json");
  620.             ReserveAppointmentRequest reserveAppointmentRequest = getNewGson().fromJson(receivedObject, ReserveAppointmentRequest.class);
  621.             if (reserveAppointmentRequest == null) {
  622.                 throw new Exception("Errore nella deserializzazione dell'oggetto json di tipo reserveAppointment");
  623.             }
  624.  
  625.             /*if (reserveAppointmentRequest.getUserType() == UserType.REGISTERED) {
  626.                 //recupero la sessione utente
  627.                 BaseResponse sessionResponse = checkSession(reserveAppointmentRequest.getSid());
  628.                 if (sessionResponse != null) {
  629.                     return getNewGson().toJson(sessionResponse);
  630.                 }
  631.             }*/
  632.             //Recupero i parametri dalla richiesta
  633.             String taxCode = reserveAppointmentRequest.getTaxCode();
  634.             NreAppointment selectedAppointment = reserveAppointmentRequest.getSelectedAppointement();
  635.             ElectronicPrescription electronicPrescription = reserveAppointmentRequest.getElectronicPrescription();
  636.             PrescriptionType prescriptionType = reserveAppointmentRequest.getPrescriptionType();
  637.  
  638.             //Inizializzo il webservice per la richiesta
  639.             WSHandlerPrenotazione handlerPrenotazione = new WSHandlerPrenotazione();
  640.             //Invio la richiesta
  641.             response = handlerPrenotazione.reserveAppointment(taxCode, electronicPrescription, selectedAppointment, prescriptionType);
  642.  
  643.         } catch (Exception e) {
  644.             LogEx.error(e, "AppReq::reserveAppointment() - Errore durante la richiesta di prenotazione.");
  645.             response = new AvailabilityListAppointmentsResponse();
  646.             response.setResponseDescription("Errore di sistema. Contattare l'amministratore");
  647.         }
  648.  
  649.         return getNewGson().toJson(response);
  650.     }
  651.  
  652.     /**
  653.      * Estrae la data di nascita di un paziente dal codice fiscale
  654.      *
  655.      * @param taxCode codice fiscale paziente
  656.      * @return la data di nascita estratta
  657.      */
  658.     private Date getBirthdayFromTaxCode(String taxCode) {
  659.         Date birthday = null;
  660.         try {
  661.             taxCode = taxCode.toUpperCase();
  662.  
  663.             Map<String, String> month = new HashMap<>();
  664.  
  665.             month.put("A", "01");
  666.             month.put("B", "02");
  667.             month.put("C", "03");
  668.             month.put("D", "04");
  669.             month.put("E", "05");
  670.             month.put("H", "06");
  671.             month.put("L", "07");
  672.             month.put("M", "08");
  673.             month.put("P", "09");
  674.             month.put("R", "10");
  675.             month.put("S", "11");
  676.             month.put("T", "12");
  677.  
  678.             // Get Date
  679.             String date = taxCode.substring(6, 11);
  680.             Integer y = Integer.parseInt(date.substring(0, 2));
  681.             String yy = ((y < 9) ? "20" : "19") + y.toString();
  682.             String m = month.get(date.substring(2, 3));
  683.             int d = Integer.parseInt(date.substring(3, 5));
  684.             if (d > 31) {
  685.                 d -= 40;
  686.             }
  687.             String temp = d + "/" + m + "/" + yy;
  688.             birthday = new SimpleDateFormat(ITALIAN_DATE_PATTERN, Locale.ITALY).parse(temp);
  689.         } catch (NumberFormatException | ParseException e) {
  690.             LogEx.error(e, "AppReq::getBirthdatFromTaxCode() Errore durante l'estrazione della data nascita dal codice fiscale");
  691.         }
  692.         return birthday;
  693.     }
  694.  
  695.     /*private String test(HttpServletRequest request) {
  696.         WSHandlerPrenotazione wss = new WSHandlerPrenotazione();
  697.  
  698.         **
  699.          * variabili globali lette dal file di configurazione
  700.          *
  701.         HashMap<String, String> globalVars;
  702.         String taxCode = "";
  703.         String nre = "";
  704.         String prescriptionType = "";
  705.  
  706.         try {
  707.             globalVars = GlobalVars.loadGlobalVars("module_notification_result.xml");
  708.             taxCode = globalVars.get("taxCode");
  709.             nre = globalVars.get("nre");
  710.             prescriptionType = globalVars.get("prescriptionType");
  711.         } catch (IOException ex) {
  712.             Logger.getLogger(AppReq.class.getName()).log(Level.SEVERE, null, ex);
  713.         }
  714.  
  715.         ElectronicPrescriptionResponse electronicPrescriptionResponse = wss.getElectronicPrescription(nre, taxCode);
  716.         AvailabilityListAppointmentsResponse availabilityListAppointmentResponse = wss.getAvailabilityList(nre, taxCode, electronicPrescriptionResponse.getElectronicPrescription(), PrescriptionType.valueOf(prescriptionType));
  717.  
  718.         BaseResponse response = new BaseResponse();
  719.  
  720.         if (!availabilityListAppointmentResponse.getAppointments().isEmpty()) {
  721.             ElectronicPrescription selectedPrescription = electronicPrescriptionResponse.getElectronicPrescription();
  722.             selectedPrescription.setNreCode(nre);
  723.  
  724.             //TODO: controllare questo
  725.             selectedPrescription.setElectronicPrescriptionType(prescriptionType);
  726.             NreAppointment selectedAppointment = availabilityListAppointmentResponse.getAppointments().get(0);
  727.             response = wss.reserveAppointment(taxCode, selectedPrescription, selectedAppointment);
  728.         }
  729.  
  730.         return getNewGson().toJson(response);
  731.     }*/
  732. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top