protected void PopolaCodCantAnnoNumero(string anno, string num = "")
        {
            string numCant = "";

            if (num == "")
            {
                List <Cantieri> items = CantieriDAO.GetAll().Where(w => w.Anno == Convert.ToInt32(anno)).ToList();
                if (items.Count > 0)
                {
                    txtNumeroCant.Text = (items.Select(s => s.Numero).Max() + 1).ToString() ?? "";
                }
                else
                {
                    txtNumeroCant.Text = "001";
                }
                numCant = txtNumeroCant.Text;
            }
            else
            {
                numCant = num;
            }

            if (numCant.Length == 1)
            {
                numCant = "00" + numCant;
            }
            else if (numCant.Length == 2)
            {
                numCant = "0" + numCant;
            }
            txtCodCant.Text = anno.Substring(2, 2) + numCant + "Ma";
        }
Beispiel #2
0
        protected void grdDiCo_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int idCantiere = Convert.ToInt32(e.CommandArgument);
                switch (e.CommandName)
                {
                case "Modifica":
                    ddlScegliCantiere.SelectedValue = idCantiere.ToString();
                    txtData.Enabled = false;
                    btnSalva.Text   = "Modifica";
                    hfDataDichiarazioneCantiereOld.Value = CantieriDAO.GetSingle(idCantiere).NumDiCo.Value.ToString();
                    CantieriDAO.DeleteDiCo(idCantiere);
                    break;

                case "Elimina":
                    // In realtà è una Delete LOGICA, che va a impostare il campo NumDiCo a NULL
                    CantieriDAO.DeleteDiCo(idCantiere);
                    Bind();
                    break;
                }
            }
            catch (Exception ex)
            {
                (Master as layout).SetModal($"Errore durante il grdDiCo_RowCommand in DichiarazioneConformità.aspx.cs ===> {ex.Message}");
            }
        }
Beispiel #3
0
        //Stampa PDF

        public void ExportToPdfPerContoFinCli(List <MaterialiCantieri> matCantList)
        {
            decimal           totale     = 0m;
            int               idCantiere = Convert.ToInt32(ddlScegliCant.SelectedValue);
            Cantieri          cant       = CantieriDAO.GetSingle(idCantiere);
            MaterialiCantieri mc         = new MaterialiCantieri
            {
                RagSocCli     = cant.RagSocCli,
                CodCant       = cant.CodCant,
                DescriCodCant = cant.DescriCodCant
            };

            //Apro lo stream verso il file PDF
            Document pdfDoc = new Document(PageSize.A4, 8f, 2f, 2f, 2f);

            PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
            pdfDoc.Open();

            PdfPTable table = RicalcoloContiManager.InitializePdfTableDDT();

            Phrase title = new Phrase($"Ragione Sociale Cliente: {mc.RagSocCli}", FontFactory.GetFont("Arial", 16, iTextSharp.text.Font.BOLD, BaseColor.BLACK));

            pdfDoc.Add(title);

            RicalcoloContiManager.GeneraPDFPerContoFinCli(pdfDoc, mc, table, matCantList, totale, idCantiere, ddlScegliTipoNote.SelectedValue);

            pdfDoc.Close();
            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "attachment;filename=" + mc.RagSocCli + ".pdf");
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.Write(pdfDoc);
            Response.End();
        }
Beispiel #4
0
        /* Necessario per la creazione della GridView con intestazioni dinamiche */
        /* Definisce l'ordinamento dei dati presenti nella GridView */
        protected void grdStampaVerificaCant_Sorting(object sender, GridViewSortEventArgs e)
        {
            int      idCantiere = Convert.ToInt32(ddlScegliCant.SelectedItem.Value);
            Cantieri cant       = CantieriDAO.GetSingle(idCantiere);
            List <MaterialiCantieri> materiali = RicalcoloContiManager.GetMaterialiCantieri(idCantiere);

            BindGrid(cant, materiali.Sum(s => s.Valore));
        }
        protected string CostruisciCodRiferCant()
        {
            DateTime date                 = DateTime.Now;
            int      numCant              = CantieriDAO.GetAll().Where(w => w.Anno == Convert.ToInt32(txtAnnoCant.Text)).Count();
            int      descrLength          = txtDescrCodCant.Text.Trim().Length;
            string   firstTwoDescrCodCant = txtDescrCodCant.Text.Substring(0, 2);
            string   lastYearDigits       = date.Year.ToString().Substring(2, 2);
            string   firstTwoRagSocCli    = ddlScegliClientePerCantiere.SelectedItem.Text.Substring(0, 2);
            string   codRiferCant         = Convert.ToString(numCant + descrLength) + firstTwoDescrCodCant + lastYearDigits + firstTwoRagSocCli;

            return(codRiferCant.Replace(" ", "-").ToUpper());
        }
        protected void btnInsCantiere_Click(object sender, EventArgs e)
        {
            if (ddlScegliClientePerCantiere.SelectedIndex != 0)
            {
                bool isInserito = CantieriDAO.InserisciCantiere(new Cantieri
                {
                    IdtblClienti  = Convert.ToInt32(ddlScegliClientePerCantiere.SelectedValue),
                    Data          = Convert.ToDateTime(txtDataInserCant.Text),
                    CodCant       = txtCodCant.Text,
                    DescriCodCant = txtDescrCodCant.Text,
                    //Indirizzo = txtIndirizzoCant.Text,
                    //Città = txtCittaCant.Text,
                    Ricarico         = Convert.ToInt32(txtRicaricoCant.Text),
                    PzzoManodopera   = Convert.ToDecimal(txtPzzoManodopCant.Text),
                    Chiuso           = chkCantChiuso.Checked,
                    Riscosso         = chkCantRiscosso.Checked,
                    Numero           = Convert.ToInt32(txtNumeroCant.Text),
                    ValorePreventivo = Convert.ToDecimal(txtValPrevCant.Text == "" ? "0" : txtValPrevCant.Text),
                    Iva               = Convert.ToInt32(txtIvaCant.Text),
                    Anno              = Convert.ToInt32(txtAnnoCant.Text),
                    Preventivo        = chkPreventivo.Checked,
                    DaDividere        = chkDaDividere.Checked,
                    Diviso            = chkDiviso.Checked,
                    Fatturato         = chkFatturato.Checked,
                    NonRiscuotibile   = chkNonRiscuotibile.Checked,
                    FasciaTblCantieri = Convert.ToInt32(txtFasciaCant.Text),
                    IdPreventivo      = Convert.ToInt32(ddlScegliPreventivoCant.SelectedValue),
                    //CodRiferCant = CostruisciCodRiferCant()
                    CodRiferCant = txtCodiceRiferimentoCant.Text
                });

                if (isInserito)
                {
                    lblIsCantInserito.Text      = "Cantiere '" + txtDescrCodCant.Text + "' inserito con successo";
                    lblIsCantInserito.ForeColor = Color.Blue;
                }
                else
                {
                    lblIsCantInserito.Text      = "Errore durante l'inserimento del cantiere '" + txtDescrCodCant.Text + "'";
                    lblIsCantInserito.ForeColor = Color.Red;
                }

                BindGridCantieri();
                ResettaCampi(pnlTxtBoxCantContainer);
                txtAnnoCant.Text = txtAnnoCant.Text != "" ? txtAnnoCant.Text : DateTime.Now.Year.ToString();
                PopolaCodCantAnnoNumero(txtAnnoCant.Text);
            }
            else
            {
                lblIsCantInserito.Text      = "Devi scegliere un cliente da associare al nuovo cantiere";
                lblIsCantInserito.ForeColor = Color.Red;
            }
        }
        protected void grdCantieri_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int idCant = Convert.ToInt32(e.CommandArgument.ToString());

            if (e.CommandName == "VisualCant")
            {
                lblTitoloInserimento.Text = "Visualizza Cantiere";
                lblIsCantInserito.Text    = "";
                btnInsCantiere.Visible    = btnModCantiere.Visible = false;
                PopolaCampiCantiere(idCant, false);
            }
            else if (e.CommandName == "ModCant")
            {
                lblTitoloInserimento.Text = "Modifica Cantiere";
                lblIsCantInserito.Text    = "";
                btnInsCantiere.Visible    = false;
                btnModCantiere.Visible    = !btnInsCantiere.Visible;
                hidIdCant.Value           = idCant.ToString();
                PopolaCampiCantiere(idCant, true);
            }
            else if (e.CommandName == "ElimCant")
            {
                if (PagamentiDAO.GetAll().Where(w => w.IdTblCantieri == Convert.ToInt32(idCant)).Count() == 0)
                {
                    bool isDeleted = CantieriDAO.EliminaCantiere(idCant);

                    if (isDeleted)
                    {
                        lblIsCantInserito.Text      = "Cantiere eliminato con successo";
                        lblIsCantInserito.ForeColor = Color.Blue;
                    }
                    else
                    {
                        lblIsCantInserito.Text      = "Errore durante l'eliminazione del cantiere";
                        lblIsCantInserito.ForeColor = Color.Red;
                    }
                    BindGridCantieri();
                    ResettaCampi(pnlTxtBoxCantContainer);
                    txtCodCant.Enabled        = false;
                    btnInsCantiere.Visible    = true;
                    btnModCantiere.Visible    = !btnInsCantiere.Visible;
                    lblTitoloInserimento.Text = "Inserimento Cantieri";
                }
                else
                {
                    lblIsCantInserito.Text      = "Impossibile eliminare il cantiere selezionato perchè ha dei pagamenti associati";
                    lblIsCantInserito.ForeColor = Color.Red;
                }
            }
        }
Beispiel #8
0
        private void Bind()
        {
            List <Cantieri> cantieri = CantieriDAO.GetCantieri(txtFiltroAnno.Text, txtFiltroCodCant.Text, txtFiltroDescr.Text);

            ddlScegliCantiere.Items.Clear();
            ddlScegliCantiere.Items.Add(new ListItem("", "-1"));
            DropDownListManager.FillDdlCantieri(cantieri, ref ddlScegliCantiere);

            grdDiCo.DataSource = cantieri.Where(w => w.NumDiCo != null).OrderBy(o => o.NumDiCo).ToList();
            grdDiCo.DataBind();

            txtData.Text     = "";
            txtData.TextMode = TextBoxMode.Date;
        }
 public IHttpActionResult GetDiCo([FromUri] string codiceCantiere, [FromUri] string descrizione)
 {
     try
     {
         List <Cantieri> items = CantieriDAO.GetCantieri(codiceCantiere, descrizione);
         return(Ok(items.Where(w => w.NumDiCo != null).OrderBy(o => o.NumDiCo).ToList()));
     }
     catch (Exception ex)
     {
         string messaggio = $"Errore durante la GetDiCo in CantieriController --- {ex}";
         log.Error(messaggio);
         return(BadRequest(messaggio));
     }
 }
Beispiel #10
0
        //Fill Ddl
        protected void FillDdlScegliCant()
        {
            DataTable       dt           = CantieriDAO.GetCantieri(txtFiltroCantAnno.Text, txtFiltroCantCodCant.Text, txtFiltroCantDescrCodCant.Text, chkFiltroCantChiuso.Checked, chkFiltroCantRiscosso.Checked);
            List <Cantieri> listCantieri = dt.DataTableToList <Cantieri>();

            ddlScegliCant.Items.Clear();
            ddlScegliCant.Items.Add(new ListItem("", "-1"));

            foreach (Cantieri c in listCantieri)
            {
                string show = c.Anno + " - " + c.CodCant + " - " + c.DescriCodCAnt;
                ddlScegliCant.Items.Add(new ListItem(show, c.IdCantieri.ToString()));
            }
        }
Beispiel #11
0
 protected void btnSalva_Click(object sender, EventArgs e)
 {
     try
     {
         long numDiCo = Convert.ToInt64(txtData.Text != "" ? Convert.ToDateTime(txtData.Text).ToString("yyyyMMdd") : hfDataDichiarazioneCantiereOld.Value);
         CantieriDAO.SetDiCo(Convert.ToInt32(ddlScegliCantiere.SelectedValue), numDiCo);
         btnSalva.Text = "Salva";
         Bind();
     }
     catch (Exception ex)
     {
         (Master as layout).SetModal($"Errore durante il btnSalva_Click in DichiarazioneConformità.aspx.cs ===> {ex.Message}");
     }
 }
 public IHttpActionResult GetAll([FromUri] string codiceCantiere, [FromUri] string descrizione)
 {
     try
     {
         List <Cantieri> items = CantieriDAO.GetCantieri(codiceCantiere, descrizione);
         return(Ok(items));
     }
     catch (Exception ex)
     {
         string messaggio = $"Errore durante la GetAll in CantieriController --- {ex}";
         log.Error(messaggio);
         return(BadRequest(messaggio));
     }
 }
        protected void CompilaCampi(int idCantiere, decimal totale)
        {
            //Popolo il campo Conto/Preventivo
            Cantieri c = CantieriDAO.GetSingle(idCantiere);

            txtContoPreventivo.Text = c.Preventivo ? string.Format("{0:n}", c.ValorePreventivo) : Math.Round(totale, 2).ToString();

            //Popolo il campo Tot. Acconti
            decimal totAcconti = 0m;

            totAcconti           = PagamentiDAO.GetAll().Where(w => w.IdTblCantieri == idCantiere).ToList().Sum(s => s.Imporo);
            txtTotPagamenti.Text = $"{totAcconti:n}";

            //Popolo il campo Tot. Finale
            decimal totContoPreventivo = Convert.ToDecimal(txtContoPreventivo.Text);
            decimal totFin             = totContoPreventivo - totAcconti;

            txtTotFinale.Text = $"{totFin:n}";
        }
        protected void PopolaCampiCantiere(int idCant, bool isControlEnabled)
        {
            EnableDisableFields(pnlTxtBoxCantContainer, isControlEnabled);

            //Deseleziono tutti gli elementi della dropdownlist
            foreach (ListItem item in ddlScegliClientePerCantiere.Items)
            {
                item.Selected = false;
            }

            Cantieri cant = CantieriDAO.GetSingle(idCant);

            // Seleziono il cliente con la Ragione Sociale associata al cantiere di riferimento
            ddlScegliClientePerCantiere.SelectedValue = ddlScegliClientePerCantiere.Items.FindByText(cant.RagSocCli).Value;
            ddlScegliPreventivoCant.SelectedValue     = "-1";

            //Popolo i textbox
            txtDataInserCant.Text         = cant.Data.ToString("yyyy-MM-dd");
            txtDataInserCant.TextMode     = TextBoxMode.Date;
            txtCodCant.Text               = cant.CodCant;
            txtDescrCodCant.Text          = cant.DescriCodCant;
            txtCodiceRiferimentoCant.Text = cant.CodRiferCant;
            //txtIndirizzoCant.Text = cant.Indirizzo;
            //txtCittaCant.Text = cant.Città;
            txtRicaricoCant.Text       = cant.Ricarico.ToString();
            txtPzzoManodopCant.Text    = cant.PzzoManodopera.ToString("N2");
            txtNumeroCant.Text         = cant.Numero.ToString();
            txtValPrevCant.Text        = cant.ValorePreventivo.ToString("N2");
            txtIvaCant.Text            = cant.Iva.ToString();
            txtAnnoCant.Text           = cant.Anno.ToString();
            txtFasciaCant.Text         = cant.FasciaTblCantieri.ToString();
            txtConcatenazioneCant.Text = $"{cant.CodCant}-{cant.DescriCodCant}";

            //Spunto i checkbox se necessario
            chkCantChiuso.Checked      = cant.Chiuso;
            chkCantRiscosso.Checked    = cant.Riscosso;
            chkPreventivo.Checked      = cant.Preventivo;
            chkDaDividere.Checked      = cant.DaDividere;
            chkDiviso.Checked          = cant.Diviso;
            chkFatturato.Checked       = cant.Fatturato;
            chkNonRiscuotibile.Checked = cant.NonRiscuotibile;
        }
Beispiel #15
0
        private void PopolaCampi(int idFattura, bool isModifica)
        {
            Fattura fatt = FattureDAO.GetSingle(idFattura);
            List <FatturaCantiere> fatCantieri = FattureCantieriDAO.GetByIdFattura(fatt.IdFatture);
            List <FatturaAcconto>  fatAcconti  = FattureAccontiDAO.GetByIdFattura(fatt.IdFatture);
            Cantieri cantiere = null;

            if (fatCantieri.Count > 0)
            {
                cantiere = CantieriDAO.GetSingle(fatCantieri?.FirstOrDefault().IdCantieri ?? 0);
            }

            txtNumeroFattura.Text          = fatt.Numero.ToString();
            ddlScegliCliente.SelectedValue = fatt.IdClienti.ToString();
            fatCantieri.ForEach(f => lblShowCantieriAggiunti.Text += (lblShowCantieriAggiunti.Text == "" ? "" : ",") + CantieriDAO.GetSingle(f.IdCantieri).CodCant);
            txtData.Text     = fatt.Data.ToString("yyyy-MM-dd");
            txtData.TextMode = TextBoxMode.Date;
            fatAcconti.ForEach(f => lblShowAccontiAggiunti.Text += (lblShowAccontiAggiunti.Text == "" ? "" : "-") + f.ValoreAcconto.ToString());
            txtImponibile.Text       = fatt.Imponibile.ToString();
            txtRitenutaAcconto.Text  = fatt.RitenutaAcconto.ToString();
            txtIva.Text              = fatt.Iva.ToString();
            chkNotaCredito.Checked   = fatt.IsNotaDiCredito;
            chkReverseCharge.Checked = fatt.ReverseCharge;
            chkRiscosso.Checked      = fatt.Riscosso;
            txtConcatenazione.Text   = $"Fat. {fatt.Numero} del {fatt.Data:dd/MM/yyyy}";

            if (cantiere != null)
            {
                txtConcatenazione.Text += $" - {cantiere.CodCant}";
            }

            // Accessibilità campi
            txtNumeroFattura.ReadOnly = txtData.ReadOnly = txtValoreAcconto.ReadOnly = !isModifica;
            txtImponibile.ReadOnly    = txtRitenutaAcconto.ReadOnly = txtIva.ReadOnly = !isModifica;
            txtFiltroCliente.ReadOnly = txtFiltroCodCantiere.ReadOnly = txtFiltroDescrizioneCantiere.ReadOnly = !isModifica;
            chkNotaCredito.Enabled    = chkReverseCharge.Enabled = chkRiscosso.Enabled = isModifica;
            ddlScegliCantiere.Enabled = ddlScegliCliente.Enabled = isModifica;

            // Visibilità pannelli
            pnlInsFatture.Visible     = true;
            pnlRicercaFatture.Visible = !pnlInsFatture.Visible;
        }
Beispiel #16
0
        protected void btnStampaVerificaCant_Click(object sender, EventArgs e)
        {
            //Ricreo i passaggi della "Stampa Ricalcolo Conti" per ottenere il valore del "Totale Ricalcolo"
            //MaterialiCantieri mc = new MaterialiCantieri
            //{
            //    RagSocCli = cant.RagSocCli,
            //    CodCant = cant.CodCant,
            //    DescriCodCant = cant.DescriCodCant
            //};
            //PdfPTable pTable = RicalcoloContiManager.InitializePdfTableDDT();
            //Document pdfDoc = new Document(PageSize.A4, 8f, 2f, 2f, 2f);
            //pdfDoc.Open();
            //RicalcoloContiManager.GeneraPDFPerContoFinCli(pdfDoc, mc, pTable, materiali, 0, idCantiere);
            //pdfDoc.Close();

            int      idCantiere = Convert.ToInt32(ddlScegliCant.SelectedItem.Value);
            Cantieri cant       = CantieriDAO.GetSingle(idCantiere);
            List <MaterialiCantieri> materiali = RicalcoloContiManager.GetMaterialiCantieri(idCantiere);

            pnlViewGridAndLabels.Visible = true;
            BindGrid(cant, materiali.Sum(s => s.Valore));
            GroupGridViewCells();
        }
        protected void btnStampaContoCliente_Click(object sender, EventArgs e)
        {
            //Ricreo i passaggi della "Stampa Ricalcolo Conti" per ottenere il valore del "Totale Ricalcolo"
            int               idCantiere = Convert.ToInt32(ddlScegliCant.SelectedItem.Value);
            Cantieri          cant       = CantieriDAO.GetSingle(idCantiere);
            MaterialiCantieri mc         = new MaterialiCantieri
            {
                RagSocCli     = cant.RagSocCli,
                CodCant       = cant.CodCant,
                DescriCodCant = cant.DescriCodCant
            };

            PdfPTable pTable = RicalcoloContiManager.InitializePdfTableDDT();
            Document  pdfDoc = new Document(PageSize.A4, 8f, 2f, 2f, 2f);

            pdfDoc.Open();
            List <MaterialiCantieri> materiali = RicalcoloContiManager.GetMaterialiCantieri(idCantiere);

            RicalcoloContiManager.GeneraPDFPerContoFinCli(pdfDoc, mc, pTable, materiali, 0, idCantiere);
            pdfDoc.Close();

            //Popolo i campi di riepilogo con i dati necessari
            CompilaCampi(idCantiere, materiali.Sum(s => s.Valore));
        }
Beispiel #18
0
 protected void FillDdlScegliCantiere(string codiceCantiere = "", string descrizioneCantiere = "")
 {
     ddlScegliCantiere.Items.Clear();
     ddlScegliCantiere.Items.Add(new ListItem("", "-1"));
     DropDownListManager.FillDdlCantieri(CantieriDAO.GetCantieri(codiceCantiere, descrizioneCantiere).Where(w => !w.Fatturato && !w.Riscosso && !w.NonRiscuotibile).ToList(), ref ddlScegliCantiere);
 }
 protected void FillDdlScegliCantiere()
 {
     ddlScegliCantiere.Items.Clear();
     ddlScegliCantiere.Items.Add(new ListItem("", "-1"));
     DropDownListManager.FillDdlCantieri(CantieriDAO.GetAll().Where(w => !w.Chiuso).ToList(), ref ddlScegliCantiere);
 }
 protected void BindGridCantieri()
 {
     grdCantieri.DataSource = CantieriDAO.GetCantieri(txtFiltroAnno.Text, txtFiltroCodCant.Text, txtFiltroDescr.Text, txtFiltroCliente.Text, chkFiltroChiuso.Checked, chkFiltroRiscosso.Checked, chkFiltroFatturato.Checked, chkFiltroNonRiscuotibile.Checked);
     grdCantieri.DataBind();
 }
Beispiel #21
0
        protected void btnAggiungiCantiereAllaLista_Click(object sender, EventArgs e)
        {
            int idCantiere = Convert.ToInt32(ddlScegliCantiere.SelectedValue);

            if (idCantiere != -1)
            {
                lblShowCantieriAggiunti.Text   += (lblShowCantieriAggiunti.Text == "" ? "" : ",") + CantieriDAO.GetSingle(idCantiere).CodCant;
                hfIdCantieriDaAggiungere.Value += (hfIdCantieriDaAggiungere.Value == "" ? "" : ";") + idCantiere;
            }
        }
 protected void FillDdlScegliCantiere()
 {
     ddlScegliCant.Items.Clear();
     ddlScegliCant.Items.Add(new ListItem("", "-1"));
     DropDownListManager.FillDdlCantieri(CantieriDAO.GetCantieri(txtAnno.Text, txtCodCant.Text, "", chkChiuso.Checked, chkRiscosso.Checked), ref ddlScegliCant);
 }
Beispiel #23
0
        protected void btnStampaContoCliente_Click(object sender, EventArgs e)
        {
            try
            {
                List <Cantieri> listaCantieri = CantieriDAO.GetCantieri(txtAnno.Text, Convert.ToInt32(ddlScegliCliente.SelectedValue), chkFatturato.Checked, chkChiuso.Checked, chkRiscosso.Checked, chkNonRiscuotibile.Checked);

                if (listaCantieri.Count() > 0)
                {
                    List <MaterialiCantieri> materiali = MaterialiCantieriDAO.GetByListOfCantieri(RicalcoloContiManager.GetStringFromListForQuery(listaCantieri.Select(s => s.IdCantieri).ToList()));
                    List <Pagamenti>         pagamenti = PagamentiDAO.GetAll();
                    List <Database.Models.StampaValoriCantieriConOpzioni> gridViewItems = new List <Database.Models.StampaValoriCantieriConOpzioni>();

                    materiali.ForEach(f =>
                    {
                        Cantieri cantiere = listaCantieri.Where(w => w.IdCantieri == f.IdTblCantieri).FirstOrDefault();
                        Database.Models.StampaValoriCantieriConOpzioni objStampa = new Database.Models.StampaValoriCantieriConOpzioni
                        {
                            CodCant       = cantiere.CodCant,
                            DescriCodCAnt = cantiere.DescriCodCant,
                            RagSocCli     = cantiere.RagSocCli
                        };

                        objStampa.TotaleAcconti = objStampa.TotaleConto = objStampa.TotaleFinale = 0m;

                        //Popolo il campo Conto/Preventivo
                        objStampa.TotaleConto = cantiere.Preventivo ? cantiere.ValorePreventivo : Math.Round(RicalcoloContiManager.GetMaterialiCantieri(cantiere.IdCantieri).Sum(s => s.Valore), 2);

                        //Popolo il campo Tot. Acconti
                        decimal totAcconti      = 0m;
                        totAcconti              = pagamenti.Where(w => w.IdTblCantieri == cantiere.IdCantieri).ToList().Sum(s => s.Imporo);
                        objStampa.TotaleAcconti = totAcconti;

                        //Popolo il campo Tot. Finale
                        decimal totContoPreventivo = objStampa.TotaleConto;
                        decimal totFin             = totContoPreventivo - totAcconti;
                        objStampa.TotaleFinale     = totFin;

                        if (RicalcoloContiManager.CalcolaPercentualeTotaleMaterialiNascosti(f.IdTblCantieri) == -1)
                        {
                            objStampa.TotaleAcconti = objStampa.TotaleConto = objStampa.TotaleFinale = -999.99m;
                        }

                        //Aggiungo l'oggetto alla lista
                        gridViewItems.Add(objStampa);
                    });

                    gridViewItems = gridViewItems.GroupBy(s => new { s.CodCant, s.DescriCodCAnt, s.RagSocCli, s.TotaleConto, s.TotaleAcconti, s.TotaleFinale }).Distinct().Select(s => s.First()).ToList();
                    grdStampaConOpzioni.DataSource = gridViewItems;
                    grdStampaConOpzioni.DataBind();

                    // Metto i dati in sessione per poter successivamente creare l'excel senza dover rifare tutto il giro
                    Session["StampaValConOpzData"] = gridViewItems;

                    // Assegno il valore alla label che mostra il totale generale
                    decimal totGen = gridViewItems.Sum(s => s.TotaleFinale);

                    for (int i = 0; i < grdStampaConOpzioni.Rows.Count; i++)
                    {
                        //if (grdStampaConOpzioni.Rows[i].Cells[5].Text == "0")
                        //{
                        //    grdStampaConOpzioni.Rows[i].Visible = false;
                        //}

                        // Se il totale Conto mostra un valore palesemente errato, la cella viene modificata mostrando l'errore invece del valore del cantiere
                        if (grdStampaConOpzioni.Rows[i].Cells[3].Text == "-999,99")
                        {
                            grdStampaConOpzioni.Rows[i].Cells[3].Text      = grdStampaConOpzioni.Rows[i].Cells[4].Text = grdStampaConOpzioni.Rows[i].Cells[5].Text = "VEDI VALORI NON VISIBILI";
                            grdStampaConOpzioni.Rows[i].Cells[3].BackColor = grdStampaConOpzioni.Rows[i].Cells[4].BackColor = grdStampaConOpzioni.Rows[i].Cells[5].BackColor = Color.Red;
                        }
                    }

                    lblTotaleGeneraleStampa.Text = $"Totale: {totGen:N2} €";

                    // Nascondo eventuali alert visualizzati in precedenza
                    (Master as layout).HideAlert();
                }
                else
                {
                    Session["StampaValConOpzData"] = null;
                    (Master as layout).SetAlert("alert-warning", "Non ci sono cantieri che corrispondano ai filtri impostati");
                }
            }
            catch (Exception ex)
            {
                Session["StampaValConOpzData"] = null;
                (Master as layout).SetAlert("alert-danger", $"Errore durante la stampa del cantiere ==> {ex.Message}");
            }
        }