Salve,
nel mio progetto ho un controller (GestioneController), con la seguente action:
//Creazione PDF
public ActionResult PDF(int id)
{
RapportinoPDF RapportinoPDF = new RapportinoPDF();
RapportiniEntities1 dc = new RapportiniEntities1();
TesteDocumenti TestaMetodo = dc.TesteDocumenti.Where(x => x.PROGRESSIVO.Equals(id)).FirstOrDefault();
// Associo i dati della tabella all'oggetto appena creato
RapportinoPDF.codice_cliente = TestaMetodo.CODCLIFOR;
// Cerco tramite i query i dati anagrafici del cliente
RAP_CLIENTI Cliente = dc.RAP_CLIENTI.Where(x => x.Codice.Equals(RapportinoPDF.codice_cliente)).FirstOrDefault();
// Dati sul cliente
RapportinoPDF.ragione_sociale = Cliente.ragione_sociale_1;
RapportinoPDF.indirizzo = Cliente.indirizzo;
RapportinoPDF.cap = Cliente.cap;
RapportinoPDF.citta = Cliente.citta;
RapportinoPDF.provincia = Cliente.provincia;
RapportinoPDF.telefono = Cliente.telefono;
if (RapportinoPDF.telefono == "")
RapportinoPDF.telefono = "Non specificato";
RapportinoPDF.fax = Cliente.Fax;
if (RapportinoPDF.fax == "")
RapportinoPDF.fax = "Non specificato";
RapportinoPDF.email = Cliente.Email;
RapportinoPDF.partita_iva = Cliente.partita_iva;
// VA MESSO TELEFONO E FAX
// Cerco tramite i query i dati anagrafici della destinazione
RapportinoPDF.codice_destinazione = Convert.ToString(TestaMetodo.DESTINAZIONE);
if(RapportinoPDF.codice_destinazione == null)
{
// Dati sulla destinazione
RapportinoPDF.codice_destinazione = "0";
RapportinoPDF.ragione_sociale_2 = RapportinoPDF.ragione_sociale;
RapportinoPDF.indirizzo_2 = RapportinoPDF.indirizzo;
RapportinoPDF.cap_2 = RapportinoPDF.cap;
RapportinoPDF.citta_2 = RapportinoPDF.citta;
RapportinoPDF.provincia_2 = RapportinoPDF.provincia;
RapportinoPDF.telefono_2 = RapportinoPDF.telefono;
RapportinoPDF.fax_2 = RapportinoPDF.fax;
}
else
{
RAP_DESTINAZIONI Destinazione = dc.RAP_DESTINAZIONI.Where(x => x.codice_cliente.Equals(RapportinoPDF.codice_cliente)
&& x.codice_destinazione.Equals(RapportinoPDF.codice_destinazione)).
FirstOrDefault();
// Dati sulla destinazione
RapportinoPDF.ragione_sociale_2 = Destinazione.ragione_sociale;
RapportinoPDF.indirizzo_2 = Destinazione.indirizzo;
RapportinoPDF.cap_2 = Destinazione.cap;
RapportinoPDF.citta_2 = Destinazione.citta;
RapportinoPDF.provincia_2 = Destinazione.provincia;
RapportinoPDF.telefono_2 = Destinazione.telefono;
if (RapportinoPDF.telefono_2 == "")
RapportinoPDF.telefono_2 = "Non specificato";
RapportinoPDF.fax_2 = Destinazione.Fax;
if (RapportinoPDF.fax_2 == "")
RapportinoPDF.fax_2 = "Non specificato";
}
//Dati vari
RapportinoPDF.data_inserimento = (DateTime)TestaMetodo.DATADOC;
RapportinoPDF.codice_pagamento = TestaMetodo.CODPAGAMENTO;
RAP_Pagamenti Pagamento = dc.RAP_Pagamenti.Where(x => x.Codice.Equals(RapportinoPDF.codice_pagamento)).FirstOrDefault();
RapportinoPDF.descrizione_pagamento = Pagamento.Descrizione;
RapportinoPDF.codice_operatore = TestaMetodo.UTENTEMODIFICA;
if (TestaMetodo.TIPODOC == "INT")
RapportinoPDF.tipo_inserimento = "Normale";
/*else if (TestaMetodo.TIPODOC == "G")
Rapportino.tipo_inserimento = "Garanzia";
else
Rapportino.tipo_inserimento = "Pacchetto ore";*/
RapportinoPDF.note = TestaMetodo.ANNOTAZIONI;
RAP_TESTA Testa = dc.RAP_TESTA.Where(x => x.id_testa_metodo.Equals(TestaMetodo.PROGRESSIVO)).FirstOrDefault();
RapportinoPDF.firma_cliente = Testa.firma_cliente;
IQueryable<STE_Scadenze_Result> TabScadenze = db.STE_Scadenze(Cliente.Codice, TestaMetodo.CODPAGAMENTO, TestaMetodo.TOTIMPOSTAEURO, TestaMetodo.DATADOC);
RapportinoPDF.scadenza = new List<string>();
foreach (var item in TabScadenze)
RapportinoPDF.scadenza.Add((item.Scadenza == null) ? string.Empty : Convert.ToDateTime(item.Scadenza).ToString("dd/MM/yyyy") + " - " + item.Importo);
// Instanzio un nuovo oggetto contenente i dati delle righe
List<RigheDocumenti> Righe = dc.RigheDocumenti.Where(x => x.IDTESTA.Equals(TestaMetodo.PROGRESSIVO)).ToList();
// Instanzio oggetti liste
RapportinoPDF.tipologia_riga = new List<string>();
RapportinoPDF.codice_articolo = new List<string>();
RapportinoPDF.descrizione_articolo = new List<string>();
RapportinoPDF.unita_misura = new List<string>();
RapportinoPDF.quantita = new List<string>();
RapportinoPDF.prezzo_lordo = new List<string>();
RapportinoPDF.prezzo_netto = new List<string>();
RapportinoPDF.sconto = new List<string>();
RapportinoPDF.iva = new List<string>();
// Loop nella lista delle righe
foreach (var item in Righe)
{
if (item.TIPORIGA == "N")
RapportinoPDF.tipologia_riga.Add("Normale");
else
RapportinoPDF.tipologia_riga.Add("Descrizione");
RapportinoPDF.codice_articolo.Add(item.CODART);
RapportinoPDF.descrizione_articolo.Add(item.DESCRIZIONEART);
RapportinoPDF.unita_misura.Add(item.UMGEST);
if (item.TIPORIGA == "N")
{
RapportinoPDF.quantita.Add(item.QTAGEST.ToString("f2"));
RapportinoPDF.prezzo_lordo.Add(item.PREZZOUNITLORDOEURO.ToString("f2"));
RapportinoPDF.prezzo_netto.Add(item.PREZZOUNITNETTOEURO.ToString("f2"));
RapportinoPDF.sconto.Add(item.SCONTORIGA.ToString("f2"));
RapportinoPDF.iva.Add(item.CODIVA.Value.ToString("f2"));
}
else
{
RapportinoPDF.quantita.Add(item.QTAGEST.ToString());
RapportinoPDF.prezzo_lordo.Add(item.PREZZOUNITLORDOEURO.ToString());
RapportinoPDF.prezzo_netto.Add(item.PREZZOUNITNETTOEURO.ToString());
RapportinoPDF.sconto.Add(item.SCONTORIGA.ToString());
}
}
return new Rotativa.ActionAsPdf("Print", RapportinoPDF);
}
L'action che viene richiamata è Print ed è la seguente:
[HttpGet]
public ActionResult Print()
{
return View(RapportinoPDF);
}
Avendo come view la seguente, perchè mi da errore non gestito a livello si system.exception?
@model Nuova.Models.RapportinoPDF
@{
// Instanzio nuovo oggetto per sessione utente corrente
Nuova.Models.AdminSession AdminSession = new Nuova.Models.AdminSession();
// Assoccio all'oggetto le informazioni presenti nella variabile di sessione
AdminSession = (Nuova.Models.AdminSession)Session["AdminSession"];
ViewBag.Title = "PDF Rapportino";
decimal Prezzo_Lordo_Singolo, Costo_IVA_Singolo, Prezzo_Netto_Singolo, Prezzo_Lordo_Totale, Costo_IVA_Totale, Prezzo_Netto_Totale, IVA, Sconto_Singolo;
Prezzo_Lordo_Totale = 0;
Costo_IVA_Totale = 0;
Prezzo_Netto_Totale = 0;
IVA = 0;
}
<div class="row">
<div class="col-md-6">
<div class="panel panel-info">
<div class="panel-heading"><b>Cliente</b></div>
<div class="panel-body">
<div class="col-md-12 table-responsive">
<table class="table dati_cliente">
<tbody>
<tr>
<td>@Model.codice_cliente - @Model.ragione_sociale</td>
</tr>
<tr>
<td>@Model.indirizzo</td>
</tr>
<tr>
<td>@Model.cap @Model.citta - @Model.provincia</td>
</tr>
<tr>
<td><b>Tel</b> @Model.telefono - <b>Fax</b> @Model.fax</td>
</tr>
<tr>
<td><b>P.IVA</b> @Model.partita_iva</td>
</tr>
<tr>
<td>@Model.email</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="panel panel-info">
<div class="panel-heading"><b>Destinazione</b></div>
<div class="panel-body">
<div class="col-md-12 table-responsive">
<table class="table dati_cliente">
<tbody>
<tr>
<td>@Model.codice_destinazione - @Model.ragione_sociale_2</td>
</tr>
<tr>
<td>@Model.indirizzo_2</td>
</tr>
<tr>
<td>@Model.cap_2 @Model.citta_2 - @Model.provincia_2</td>
</tr>
<tr>
<td><b>Tel</b> @Model.telefono_2 - <b>Fax</b> @Model.fax_2</td>
</tr>
<tr>
<td style="opacity:0;">0</td>
</tr>
<tr>
<td style="opacity:0;">0</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-3">
<div class="panel panel-info">
<div class="panel-heading"><b>Data</b></div>
<div class="panel-body">
<dl>
<dd>@Model.data_inserimento.ToString("dd/MM/yyyy")</dd>
</dl>
</div>
</div>
</div>
<div class="col-md-3">
<div class="panel panel-info">
<div class="panel-heading"><b>Pagamento</b></div>
<div class="panel-body">
<dl>
<dd>@Model.descrizione_pagamento</dd>
</dl>
</div>
</div>
</div>
<div class="col-md-3">
<div class="panel panel-info">
<div class="panel-heading"><b>Operatore</b></div>
<div class="panel-body">
<dl>
<dd>@Model.codice_operatore</dd>
</dl>
</div>
</div>
</div>
<div class="col-md-3">
<div class="panel panel-info">
<div class="panel-heading"><b>Tipologia</b></div>
<div class="panel-body">
<dl>
<dd>@Model.tipo_inserimento</dd>
</dl>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="panel panel-info">
<div class="panel-heading"><b>Note</b></div>
<div class="panel-body">
<div class="col-md-12">
<p>
@Model.note
</p>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="panel panel-info">
<div class="panel-heading"><b>Righe</b></div>
<div class="panel-body">
<div class="col-md-12 table-responsive">
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Tipologia</th>
<th>Articolo</th>
<th>Descrizione</th>
<th>UM</th>
<th>Quantità</th>
<th>Prezzo</th>
<th>Sconto</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.tipologia_riga.Count(); i++)
{
if (Model.tipologia_riga[i] == "Normale")
{
Prezzo_Lordo_Singolo = 0;
Prezzo_Netto_Singolo = 0;
Costo_IVA_Singolo = 0;
<tr>
<td>@Model.tipologia_riga[i]</td>
<td>@Model.codice_articolo[i]</td>
<td>@Model.descrizione_articolo[i]</td>
<td>@Model.unita_misura[i]</td>
<td>@Model.quantita[i]</td>
@if (Model.prezzo_lordo[i] == "")
{
<td></td>
<td></td>
}
else
{
IVA = Convert.ToDecimal(Model.iva[i]);
Prezzo_Lordo_Singolo = Convert.ToDecimal(Model.prezzo_lordo[i]);
Sconto_Singolo = (Prezzo_Lordo_Singolo * Convert.ToDecimal(Model.sconto[i])) / 100;
Costo_IVA_Singolo = (Convert.ToDecimal(Model.prezzo_netto[i]) * IVA) / 100;
Prezzo_Netto_Singolo = Convert.ToDecimal(Model.prezzo_netto[i]) + Costo_IVA_Singolo;
Prezzo_Lordo_Totale += ((Prezzo_Lordo_Singolo - Sconto_Singolo) * Convert.ToDecimal(Model.quantita[i]));
Costo_IVA_Totale += (Costo_IVA_Singolo * Convert.ToDecimal(Model.quantita[i]));
Prezzo_Netto_Totale += (Prezzo_Netto_Singolo * Convert.ToDecimal(Model.quantita[i]));
<td>
¤ @Model.prezzo_lordo[i]
</td>
<td>
@Model.sconto[i] %
</td>
}
</tr>
}
else
{
<tr>
<td>@Model.tipologia_riga[i]</td>
<td></td>
<td>@Model.descrizione_articolo[i]</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
}
}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-3">
<div class="panel panel-info">
<div class="panel-heading"><b>Imponibile</b></div>
<div class="panel-body">
<dl>
<dd>¤ @Prezzo_Lordo_Totale.ToString("f2")</dd>
</dl>
</div>
</div>
</div>
<div class="col-md-3">
<div class="panel panel-info">
<div class="panel-heading"><b>Aliquota</b></div>
<div class="panel-body">
<dl>
<dd>@IVA %</dd>
</dl>
</div>
</div>
</div>
<div class="col-md-3">
<div class="panel panel-info">
<div class="panel-heading"><b>IVA</b></div>
<div class="panel-body">
<dl>
<dd>¤ @Costo_IVA_Totale.ToString("f2")</dd>
</dl>
</div>
</div>
</div>
<div class="col-md-3">
<div class="panel panel-info">
<div class="panel-heading"><b>Prezzo finale</b></div>
<div class="panel-body">
<dl>
<dd>¤ @Prezzo_Netto_Totale.ToString("f2")</dd>
</dl>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="panel panel-info">
<div class="panel-heading"><b>Scadenze</b></div>
<div class="panel-body">
<div class="col-md-12">
<p>
@for (int i = 0; i < Model.scadenza.Count(); i++)
{
@Model.scadenza[i]
<br />
}
</p>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="panel panel-info">
<div class="panel-heading"><b>Firma cliente</b></div>
<div class="panel-body">
<div class="col-md-12">
<img class="img-responsive" src="data:image/gif;base64,@Model.firma_cliente" />
</div>
</div>
</div>
</div>
</div>
Grazie mille :3