public void UpdateTable(string tablename, FlussoFattureDS ds)
        {
            string query = string.Format(CultureInfo.InvariantCulture, "SELECT * FROM {0}", tablename);

            using (DbDataAdapter a = BuildDataAdapter(query))
            {
                try
                {
                    a.ContinueUpdateOnError = false;
                    DataTable        dt  = ds.Tables[tablename];
                    DbCommandBuilder cmd = BuildCommandBuilder(a);
                    a.UpdateCommand = cmd.GetUpdateCommand();
                    a.DeleteCommand = cmd.GetDeleteCommand();
                    a.InsertCommand = cmd.GetInsertCommand();
                    a.Update(dt);
                }
                catch (DBConcurrencyException ex)
                {
                }
                catch
                {
                    throw;
                }
            }
        }
        public void FillBC_FLUSSO_TESTATA(FlussoFattureDS ds, DateTime Dal, DateTime Al)
        {
            string DalStr = Dal.ToString("dd/MM/yyyy");
            string AlStr  = Al.ToString("dd/MM/yyyy");

            string select = @"  select csped.BC_CODE SPEDIZIONE,nvl(cfat.BC_CODE,csped.BC_CODE) FATTURAZIONE,oo.codicetipoo,vt.fullnumdoc,vt.datdoc, vt.pesonetto, vt.pesolordo, vt.numdoc
                                        from ditta1.usr_venditet vt
                                        left outer join v_converti_cliente csped on csped.codiceclifo=VT.codiceclifo AND csped.AZIENDA='MP'
                                        left outer join v_converti_cliente cfat on cfat.codiceclifo=VT.FATTURAREA AND cfat.AZIENDA='MP'
                                        inner join gruppo.tabtipoo oo on oo.IDTABTIPOO = vt.IDTABTIPOO
                                        WHERE datdoc >=to_date('{0} 00:00:00','dd/mm/yyyy HH24:Mi:SS')
                                        AND datdoc <=to_date('{1} 23:59:59','dd/mm/yyyy HH24:Mi:SS')
                                       
                                        union all
                                        select csped.BC_CODE,nvl(cfat.BC_CODE,csped.BC_CODE),oo.codicetipoo,vt.fullnumdoc,vt.datdoc , vt.pesonetto, vt.pesolordo, vt.numdoc||'/TP' 
                                        from ditta2.usr_venditet vt
                                        left outer join v_converti_cliente csped on csped.codiceclifo=VT.codiceclifo  AND csped.AZIENDA='TF'
                                        left outer join v_converti_cliente cfat on cfat.codiceclifo=VT.FATTURAREA  AND cfat.AZIENDA='TF'
                                        inner join gruppo.tabtipoo oo on oo.IDTABTIPOO = vt.IDTABTIPOO
                                        WHERE datdoc >=to_date('{2} 00:00:00','dd/mm/yyyy HH24:Mi:SS')
                                        AND datdoc <=to_date('{3} 23:59:59','dd/mm/yyyy HH24:Mi:SS')
                                       
                                        order by FATTURAZIONE ";

            select = string.Format(select, DalStr, AlStr, DalStr, AlStr);

            using (DbDataAdapter da = BuildDataAdapter(select))
            {
                da.Fill(ds.BC_FLUSSO_TESTATA);
            }
        }
        public void FillMATERIALIMAMI(FlussoFattureDS ds)
        {
            string select = @"  select * from MATERIALIMAMI";

            using (DbDataAdapter da = BuildDataAdapter(select))
            {
                da.Fill(ds.MATERIALIMAMI);
            }
        }
        public void FillBOLLE_VENDITATESTATA(FlussoFattureDS ds, DateTime Dal, DateTime Al, string radioEstero, string radioButtonAzienda, bool ignoraMetalplus)
        {
            string DalStr = Dal.ToString("dd/MM/yyyy");
            string AlStr  = Al.ToString("dd/MM/yyyy");

            string select = @"  select DISTINCT AZIENDA, DESTABTIPDOC, CODICETIPDOC, CODICETIPOO, DESTABTIPOO, CODICECAUTR, DESTABCAUTR, 
                IDVENDITET, FATTURARE_SN, CONFERMATO_SN, DEFINITIVO_SN, FULLNUMDOC, DATDOC, ANNODOC, NUMDOC, CODICECLIFO, TRIM(RAGIONESOC) RAGIONESOC, CODINDSP, 
                FATTURAREA, FATTURAREALTER, SEGNALATORE, TRIM(SEGNALATORE_RS) SEGNALATORE_RS, NUMERORIGHE,RIFERIMENTO,trim(ind.ragsoc) DESTINAZIONE, NAZIONE
                from bolle_vendita bv
                LEFT OUTER JOIN GRUPPO.INDSPED IND ON IND.CODCF=BV.CODICECLIFO AND IND.CODIND=BV.CODINDSP                
                where 1=1

                and datdoc >=to_date('{0} 00:00:00','dd/mm/yyyy HH24:Mi:SS')
                and datdoc <to_date('{1} 23:59:59','dd/mm/yyyy HH24:Mi:SS')";

            if (radioEstero == Etichette.ESTERO)
            {
                select += " AND TRIM(NAZIONE) <>'ITALIA'";
            }

            if (radioEstero == Etichette.ITALIA)
            {
                select += " AND TRIM(NAZIONE) ='ITALIA'";
            }

            if (radioButtonAzienda == Etichette.METAL)
            {
                select += " AND AZIENDA ='METALPLUS'";
            }

            if (radioButtonAzienda == Etichette.TOP)
            {
                select += " AND AZIENDA ='TOP FINISH'";
            }

            select = string.Format(select, DalStr, AlStr);

            if (ignoraMetalplus)
            {
                select += " AND CODICECLIFO <>'01631'";
            }
            select += " order by bv.NUMDOC";
            using (DbDataAdapter da = BuildDataAdapter(select))
            {
                da.Fill(ds.BOLLE_VENDITA);
            }
        }
        public void FillBC_FLUSSO_DETTAGLIO(FlussoFattureDS ds, DateTime Dal, DateTime Al)
        {
            string DalStr = Dal.ToString("dd/MM/yyyy");
            string AlStr  = Al.ToString("dd/MM/yyyy");

            string select = @"  select vt.fullnumdoc,vt.datdoc,PC.NUOVO AS CONTOCG,MA.MODELLO,VD.QTATOT,VD.PREZZOTOT,VD.CODIVARIGA,VD.PSCONTO1, MA.PESO, 
                                    vd.NRRIGA, OC.RIFERIMENTO RIFERIMENTO,  OCR.NRRIGA AS RIFERIMENTORIGA,MA.DESMAGAZZ DESCRIZIONE,MAT.DESTABTIPM MATERIALE, UNI.CODICEUNIMI UNIMI,
                                    vd.noteeprima nota, vt.numdoc ,VD.RIFERIMENTORIGA RIFERIMENTO2
                                    from ditta1.usr_venditet vt
                                    INNER JOIN DITTA1.USR_VENDITED VD ON VD.IDVENDITET = VT.IDVENDITET
                                    INNER JOIN GRUPPO.MAGAZZ MA ON MA.IDMAGAZZ = VD.IDMAGAZZ
                                    LEFT OUTER JOIN GRUPPO.TABTIPMOV TM ON TM.IDTABTIPMOV=MA.IDTABTIPMOVVEN
                                    LEFT OUTER JOIN BC_TRASCODIFICA_PIANO_CONTI PC ON PC.VECCHIO = TM.CODICETIPMOV AND PC.AZIENDA = 'MP'
                                     LEFT JOIN DITTA1.USR_VENDITET OC ON OC.IDVENDITET = vd.IDVENDITET_PREC
                                     LEFT JOIN DITTA1.USR_VENDITED OCR ON OCR.IDVENDITED = vd.IDVENDITED_PREC
                                     LEFT OUTER JOIN GRUPPO.TABTIPM MAT ON MAT.IDTABTIPM = MA.IDTABTIPM
                                     LEFT OUTER JOIN GRUPPO.TABUNIMI UNI ON UNI.IDTABUNIMI=VD.IDTABUNIMI
                                    WHERE vt.datdoc >=to_date('{0} 00:00:00','dd/mm/yyyy HH24:Mi:SS')
                                        AND vt.datdoc <=to_date('{1} 23:59:59','dd/mm/yyyy HH24:Mi:SS')
                                   
                                    UNION ALL
                                    select vt.fullnumdoc,vt.datdoc,PC.NUOVO AS CONTOCG,MA.MODELLO,VD.QTATOT,VD.PREZZOTOT,VD.CODIVARIGA,VD.PSCONTO1, MA.PESO, 
                                    vd.NRRIGA, OC.RIFERIMENTO RIFERIMENTO,  OCR.NRRIGA AS RIFERIMENTORIGA,MA.DESMAGAZZ DESCRIZIONE,MAT.DESTABTIPM MATERIALE, UNI.CODICEUNIMI UNIMI,
                                    vd.noteeprima nota, vt.numdoc||'/TP' as numdoc,VD.RIFERIMENTORIGA RIFERIMENTO2
                                    from ditta2.usr_venditet vt
                                    INNER JOIN DITTA2.USR_VENDITED VD ON VD.IDVENDITET = VT.IDVENDITET
                                    INNER JOIN GRUPPO.MAGAZZ MA ON MA.IDMAGAZZ = VD.IDMAGAZZ
                                    LEFT OUTER JOIN GRUPPO.TABTIPMOV TM ON TM.IDTABTIPMOV=MA.IDTABTIPMOVVEN
                                    LEFT OUTER JOIN BC_TRASCODIFICA_PIANO_CONTI PC ON PC.VECCHIO = TM.CODICETIPMOV AND PC.AZIENDA = 'TP'
                                     LEFT JOIN DITTA2.USR_VENDITET OC ON OC.IDVENDITET = vd.IDVENDITET_PREC
                                     LEFT JOIN DITTA1.USR_VENDITED OCR ON OCR.IDVENDITED = vd.IDVENDITED_PREC
                                     LEFT OUTER JOIN GRUPPO.TABTIPM MAT ON MAT.IDTABTIPM = MA.IDTABTIPM
                                     LEFT OUTER JOIN GRUPPO.TABUNIMI UNI ON UNI.IDTABUNIMI=VD.IDTABUNIMI
                                        WHERE vt.datdoc >=to_date('{2} 00:00:00','dd/mm/yyyy HH24:Mi:SS')
                                        AND vt.datdoc <=to_date('{3} 23:59:59','dd/mm/yyyy HH24:Mi:SS')

                                    order by fullnumdoc ";

            select = string.Format(select, DalStr, AlStr, DalStr, AlStr);

            using (DbDataAdapter da = BuildDataAdapter(select))
            {
                da.Fill(ds.BC_FLUSSO_DETTAGLIO);
            }
        }
        private void btnCreaFiles_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;
                List <string> idTestate = new List <string>();
                foreach (DataGridViewRow riga in dgvRisultati.Rows)
                {
                    object selezione = riga.Cells[SELEZIONATA.Index].Value;
                    if (selezione != null)
                    {
                        bool valore = (bool)selezione;
                        if (valore)
                        {
                            string idTestata = (string)riga.Cells[DOCUMENTO.Index].Value;
                            idTestate.Add(idTestata);
                        }
                    }
                }

                if (idTestate.Count == 0)
                {
                    MessageBox.Show("Nessuna bolla selezionata", "ATTENZIONE", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    return;
                }

                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter       = "Excel Files (*.xlsx)|*.xlsx";
                sfd.DefaultExt   = "xlsx";
                sfd.AddExtension = true;
                sfd.FileName     = string.Format("Flusso Fatture {0}.xlsx", DateTime.Today.ToString("dd.MM.yyyy"));
                if (sfd.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                FlussoFattureDS ds = new FlussoFattureDS();

                using (FlussoFattureBusiness bFlussoFatture = new FlussoFattureBusiness())
                {
                    bFlussoFatture.FillMATERIALIMAMI(ds);
                    bFlussoFatture.FillBC_FLUSSO_TESTATA(ds, dtDal.Value, dtAl.Value);
                    bFlussoFatture.FillBC_FLUSSO_DETTAGLIO(ds, dtDal.Value, dtAl.Value);
                }

                string        errori;
                StringBuilder senzaPrezzo = new StringBuilder();
                idTestate = idTestate.Distinct().ToList();
                using (FlussoFattureBusiness bFlussoFatture = new FlussoFattureBusiness())
                {
                    foreach (string fullnumdoc in idTestate)
                    {
                        FlussoFattureDS.BC_FLUSSO_TESTATARow testata = ds.BC_FLUSSO_TESTATA.Where(x => x.FULLNUMDOC == fullnumdoc).FirstOrDefault();
                        if (ds.BC_FLUSSO_DETTAGLIO.Any(x => x.FULLNUMDOC == fullnumdoc && x.PREZZOTOT == 0))
                        {
                            senzaPrezzo.AppendLine(string.Format("{0} non esportata perchè SENZA PREZZO", fullnumdoc));
                        }
                        else
                        {
                            bFlussoFatture.BloccaBolla(fullnumdoc);
                        }
                    }
                }

                ExcelHelper hExcel   = new ExcelHelper();
                byte[]      filedata = hExcel.CreaFlussoFatture(idTestate.Distinct().ToList(), ds, out errori);
                FileStream  fs       = new FileStream(sfd.FileName, FileMode.Create);
                fs.Write(filedata, 0, filedata.Length);
                fs.Flush();
                fs.Close();

                errori = errori + string.Format(" {0}", senzaPrezzo);

                if (errori.Trim().Length > 0)
                {
                    MessageBox.Show(errori.Trim(), "Attenzione", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
                else
                {
                    MessageBox.Show("Operazione conclusa con successo", "OERAZIONE TERMINATA", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MostraEccezione(ex, "Errore in fase di creazione dei file");
            }
            finally { Cursor.Current = Cursors.Default; }
        }
        private void btnTrova_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;
                if (dtDal.Value.Date > dtAl.Value.Date)
                {
                    MessageBox.Show("Attenzione la data DAL è successiva alla data AL", "ERRORE", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                string radioButtonEstero = string.Empty;
                foreach (Control control in grEstero.Controls)
                {
                    if (control is RadioButton)
                    {
                        RadioButton radio = control as RadioButton;
                        if (radio.Checked)
                        {
                            radioButtonEstero = radio.Text;
                        }
                    }
                }

                string radioButtonAzienda = string.Empty;
                foreach (Control control in grAzienda.Controls)
                {
                    if (control is RadioButton)
                    {
                        RadioButton radio = control as RadioButton;
                        if (radio.Checked)
                        {
                            radioButtonAzienda = radio.Text;
                        }
                    }
                }

                using (FlussoFattureBusiness bFlussoFatture = new FlussoFattureBusiness())
                {
                    _ds = new FlussoFattureDS();
                    bFlussoFatture.FillVerificaNazioneNulla(_ds, dtDal.Value, dtAl.Value, radioButtonEstero, chkIgnoraMetal.Checked);
                    if (_ds.BOLLE_VENDITA.Count > 0)
                    {
                        MessageBox.Show("CI SONO BOLLE SENZA NAZIONE. Queste bolle non verranno esportate!!!!!!");
                    }

                    _ds = new FlussoFattureDS();
                    bFlussoFatture.FillBOLLE_VENDITATESTATA(_ds, dtDal.Value, dtAl.Value, radioButtonEstero, radioButtonAzienda, chkIgnoraMetal.Checked);

                    dgvRisultati.DataSource = _ds;
                    dgvRisultati.DataMember = _ds.BOLLE_VENDITA.TableName;
                }
            }
            catch (Exception ex)
            {
                MostraEccezione(ex, "Errore in trova bolle");
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }
        public void UpdateTable(string tablename, FlussoFattureDS ds)
        {
            FlussoFattureAdapter a = new FlussoFattureAdapter(DbConnection, DbTransaction);

            a.UpdateTable(tablename, ds);
        }
        public void FillMATERIALIMAMI(FlussoFattureDS ds)
        {
            FlussoFattureAdapter a = new FlussoFattureAdapter(DbConnection, DbTransaction);

            a.FillMATERIALIMAMI(ds);
        }
        public void FillBC_FLUSSO_DETTAGLIO(FlussoFattureDS ds, DateTime Dal, DateTime Al)
        {
            FlussoFattureAdapter a = new FlussoFattureAdapter(DbConnection, DbTransaction);

            a.FillBC_FLUSSO_DETTAGLIO(ds, Dal, Al);
        }
        public void FillVerificaNazioneNulla(FlussoFattureDS ds, DateTime Dal, DateTime Al, string radioButton, bool ignoraMetalplus)
        {
            FlussoFattureAdapter a = new FlussoFattureAdapter(DbConnection, DbTransaction);

            a.FillVerificaNazioneNulla(ds, Dal, Al, radioButton, ignoraMetalplus);
        }
        public void FillBOLLE_VENDITATESTATA(FlussoFattureDS ds, DateTime Dal, DateTime Al, string radioButton, string radioButtonAzienda, bool ignoraMetalplus)
        {
            FlussoFattureAdapter a = new FlussoFattureAdapter(DbConnection, DbTransaction);

            a.FillBOLLE_VENDITATESTATA(ds, Dal, Al, radioButton, radioButtonAzienda, ignoraMetalplus);
        }