Servizio di retirement planning semplificato che espone i motori di simulazione di primo e secondo pilastro.

Namespace:  EPHWS_ZPrev
Assembly:  EPHWS_ZPrev (in EPHWS_ZPrev.dll) Versione: 1.0.0.0 (1.0.0.0)

Syntax

C#
public class ZPrev : WebService
Visual Basic (Declaration)
Public Class ZPrev _
	Inherits WebService
Visual C++
public ref class ZPrev : public WebService

Remarks

Per descrivere efficacemente l'impiego del webservice si riporta qui di seguito un esempio c# di una semplicissima applicazione winform, client del servizio in oggetto. Sulla base del contenuto sintetico delle chiamate e della descrizione estesa disponibile per gli elementi esposti dall'interfaccia, risulterà facile consumare il servizio che ha pochissimi elementi di interazione, a vantaggio della semplicità d'impiego.

Examples

Il seguente codice è lo stralcio delle funzioni principale di un semplicissimo programma winform. Se si intende ricostruire un applicazione di prova, gli elementi visuali possono essere facilmente costruiti tramite un designer dell'IDE. I parametri di chiamata (URL del webservice) e autentificazione (user e password) sono comunicati all'utente in fase di delivery del servizio. In loro assenza non è possibile testare il servizio.
CopyC#
  public Form1()
 {
     InitializeComponent();
 }

 /// <summary>
/// Caricamento dei codici e delle descrizioni per i parametri di calcolo (step 1)
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void button2_Click(object sender, EventArgs e)
 {
     //istanziamento ed autentificazione al servizio web
     WS.ZPrev CALCOLO = new WS.ZPrev();
     CALCOLO.Url = txtUrl.Text;

     CALCOLO.AuthHeaderValue = new WS.AuthHeader();
     CALCOLO.AuthHeaderValue.user = txtUser.Text;
     CALCOLO.AuthHeaderValue.pass = txtPwd.Text;

     //Recupero dati e riempimeto delle comboBox
     WS.KeyValueStruct[] items = CALCOLO.CategoriePrevidenziali();

     cboProfessione.Items.Clear();
     foreach (WS.KeyValueStruct it in items)
         this.cboProfessione.Items.Add(new ComboElement(it.Text, it.ID));

     items = CALCOLO.CarriereAttese();
     cmbCarriera.Items.Clear();
     foreach (WS.KeyValueStruct it in items)
         this.cmbCarriera.Items.Add(new ComboElement(it.Text, it.ID));
 }

 /// <summary>
 /// Calcolo pensioni attese della previdenza pubblica (step 2)
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void button1_Click(object sender, EventArgs e)
 {
     //Istanziamento del servizio web SOAP per un utilizzo delle funzioni stateless di tipo sincrono
     // 
     WS.ZPrev CALCOLO = new WS.ZPrev();
     CALCOLO.Url = txtUrl.Text;

     //Parametri di autentificazione di tutte le chiamate
     CALCOLO.AuthHeaderValue = new WS.AuthHeader();
     CALCOLO.AuthHeaderValue.user = txtUser.Text;
     CALCOLO.AuthHeaderValue.pass = txtPwd.Text;

     //Istanziamento e riempimento della struttura dati
     WS.Analisi ana = new WS.Analisi();

     ana.DataElaborazione = DateTime.Today;
     ana.Persona = new WS.Soggetto();
     ana.Persona.Nascita = CDATE(txtDataNascita.Text);
     ana.Persona.SassoMaschio = chkMaschio.Checked;

     ana.PosizionePensioneObbligatoria = new WS.PosizionePrevidenzialeObbligatoria[1];
     ana.PosizionePensioneObbligatoria[0] = new WS.PosizionePrevidenzialeObbligatoria();
     ana.PosizionePensioneObbligatoria[0].ID = "PP";
     ana.PosizionePensioneObbligatoria[0].DataInizio = CDATE(txtDataInizioLavoro.Text);
     ana.PosizionePensioneObbligatoria[0].DataRiferimento = ana.DataElaborazione;
     ana.PosizionePensioneObbligatoria[0].RedditoDiRiferimento = new WS.Reddito();
     ana.PosizionePensioneObbligatoria[0].RedditoDiRiferimento.CodiceCategoriaPrevidenziale = ((ComboElement)cboProfessione.Items[cboProfessione.SelectedIndex]).codice;
     ana.PosizionePensioneObbligatoria[0].RedditoDiRiferimento.frequenza = WS.Periodicita.annuo;
     ana.PosizionePensioneObbligatoria[0].RedditoDiRiferimento.importo = CDBL(txtReddito.Text);
     ana.PosizionePensioneObbligatoria[0].RedditoDiRiferimento.tipo = WS.TipoReddito.lavoro;
     ana.PosizionePensioneObbligatoria[0].RedditoDiRiferimento.CodiceAndamentoAtteso = ((ComboElement)this.cmbCarriera.Items[cmbCarriera.SelectedIndex]).codice;
     ana.FrequenzaDesiderataRisultati = WS.Periodicita.annuo;
    //Chiamata dei servizi di calcolo
    try
    {

        if (CALCOLO.PuoAvviareCalcolaPensionePubblica(ana)) //Avvia solo per casi abilitati al calcolo pensionistico
         {
             WS.Analisi outAna = CALCOLO.CalcolaPensionePubblica(ana);

            //Risultati
             lblOut.Text = "Pensione: ";
            lblOut.Text += outAna.RisultatiPensioneObbligatoria[0].TipoPensione + " " ;
             lblOut.Text += outAna.RisultatiPensioneObbligatoria[0].DecorrenzaScelta.ToShortDateString() + " ";
             lblOut.Text += "importo " + outAna.RisultatiPensioneObbligatoria[0].frequenza.ToString() + " " ;
             lblOut.Text += outAna.RisultatiPensioneObbligatoria[0].ImportoPensione.ToString("C0") + " ";
             if( outAna.RisultatiPensioneObbligatoria[0].RedditoAntePensione > 0)
                 lblOut.Text += "[TS = " + (outAna.RisultatiPensioneObbligatoria[0].ImportoPensione / outAna.RisultatiPensioneObbligatoria[0].RedditoAntePensione).ToString("p1") + "]";
             lblOut.Text += " (reddito "+ outAna.RisultatiPensioneObbligatoria[0].RedditoAntePensione.ToString("C0") + ")";
         }
         else
             lblOut.Text = "Aanlisi senza la presenza di una pensione pubblica: ";
     }
     catch (SoapException sex)
     { 
         MessageBox.Show(sex.Message); 
     }
    catch (Exception ex)
    {
         MessageBox.Show(ex.Message);
     }
 }
 /// <summary>
 /// Calcolo della previdenza complementare (step 3)
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void button3_Click(object sender, EventArgs e)
 {
     //Istanziamento del servizio web SOAP per un utilizzo delle funzioni stateless di tipo sincrono
     // 
     WS.ZPrev CALCOLO = new WS.ZPrev();
     CALCOLO.Url = txtUrl.Text;

     //Parametri di autentificazione di tutte le chiamate
     CALCOLO.AuthHeaderValue = new WS.AuthHeader();
     CALCOLO.AuthHeaderValue.user = txtUser.Text;
     CALCOLO.AuthHeaderValue.pass = txtPwd.Text;

     //Istanziamento e riempimento della struttura dati
     WS.Analisi ana = new WS.Analisi();

     ana.DataElaborazione = DateTime.Today;
     ana.Persona = new WS.Soggetto();
     ana.Persona.Nascita = CDATE(txtDataNascita.Text);
     ana.Persona.SassoMaschio = chkMaschio.Checked;

     ana.FrequenzaDesiderataRisultati = WS.Periodicita.annuo;
     if (txtFondo.Text != "")
     {
         ana.DataPrimaIscrizioneAllaPrevidenzaComplementare = CDATE(txtDataIniPC.Text);
         ana.PosizionePensioneIntegrativa = new WS.PosizionePrevidenzialeComplementare[1];
         ana.PosizionePensioneIntegrativa[0] = new WS.PosizionePrevidenzialeComplementare();
         ana.PosizionePensioneIntegrativa[0].ID = "PI";
         ana.PosizionePensioneIntegrativa[0].DataDesiderataPensione = DateTime.Parse("05/02/2030");
         ana.PosizionePensioneIntegrativa[0].DataIscrizione = CDATE(txtDataIniPC.Text);
         ana.PosizionePensioneIntegrativa[0].CodiceFondo = txtFondo.Text;
         ana.PosizionePensioneIntegrativa[0].RedditoDiRiferimento = new WS.Reddito();
         ana.PosizionePensioneIntegrativa[0].RedditoDiRiferimento.CodiceCategoriaPrevidenziale = ((ComboElement)cboProfessione.Items[cboProfessione.SelectedIndex]).codice;
         ana.PosizionePensioneIntegrativa[0].RedditoDiRiferimento.frequenza = WS.Periodicita.annuo;
         ana.PosizionePensioneIntegrativa[0].RedditoDiRiferimento.importo = CDBL(txtReddito.Text);
         ana.PosizionePensioneIntegrativa[0].RedditoDiRiferimento.tipo = WS.TipoReddito.lavoro;
         ana.PosizionePensioneIntegrativa[0].RedditoDiRiferimento.CodiceAndamentoAtteso = ((ComboElement)this.cmbCarriera.Items[cmbCarriera.SelectedIndex]).codice;
         ana.PosizionePensioneIntegrativa[0].ContributiFuturi = new WS.PrevidenzaComp_Contribuzione();
         ana.PosizionePensioneIntegrativa[0].ContributiFuturi.Frequenza = WS.Periodicita.annuo;
         ana.PosizionePensioneIntegrativa[0].ContributiFuturi.ImportoDatore = CDBL(txtPAZI.Text);
         ana.PosizionePensioneIntegrativa[0].ContributiFuturi.ImportoSoggetto = CDBL(txtPSOG.Text);
         ana.PosizionePensioneIntegrativa[0].ContributiFuturi.MisuraAccantonamentoTFR = CDBL(txtPTFR.Text) / 100.0;
         ana.PosizionePensioneIntegrativa[0].ContributiFuturi.PesiComparti = new WS.PrevidenzaComp_ContribuzionePesoComparti[1];
         ana.PosizionePensioneIntegrativa[0].ContributiFuturi.PesiComparti[0] = new WS.PrevidenzaComp_ContribuzionePesoComparti();
         ana.PosizionePensioneIntegrativa[0].ContributiFuturi.PesiComparti[0].IDComparto = txtComparto.Text;
         ana.PosizionePensioneIntegrativa[0].ContributiFuturi.PesiComparti[0].PesoContrDatoriale = 1;
         ana.PosizionePensioneIntegrativa[0].ContributiFuturi.PesiComparti[0].PesoContrSoggettivo = 1;
         ana.PosizionePensioneIntegrativa[0].ContributiFuturi.PesiComparti[0].PesoContrTFR = 1;
     }
     try
     {
         WS.Analisi outAna = CALCOLO.CalcolaPensioneComplementare(ana);
         lblOutPrevComp.Text = "Rendita Prev. Com.: " + outAna.RisultatiPensioneIntegrativa[0].RenditaVitalizia.ToString("C2");
     }
     catch (SoapException sex)
     {
         MessageBox.Show(sex.Message);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }

 private void Form1_Load(object sender, EventArgs e)
 {


 }

 private DateTime CDATE(string s)
 {
     try{
         return DateTime.Parse(s);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }

     return DateTime.MinValue;
 }

 private double CDBL(string s)
 {
     try
     {
         return double.Parse(s);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }

     return 0;
 }

Inheritance Hierarchy

See Also