using System; using System.Collections; using System.ComponentModel; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Text; using System.Windows.Forms; namespace C6Contract { public partial class Main : Form { string schema = string.Empty; DateTime dataCongelamento = DateTime.MinValue; //null; public Main() { InitializeComponent(); } void LoadCFs() { dgvExistingCFs.Rows.Clear(); dgvToDelete.Rows.Clear(); using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlServerStampeC6Connection"].ConnectionString)) { SqlCommand cmd = new SqlCommand("SELECT IdReport, TipoReport, GPF.Rete AS Rete, CodiceFiscale, NOME, COGNOME FROM " + schema + ".GESTIONE_PDF_FTP GPF INNER JOIN " + schema + ".ANAG_CLIENTI AC ON GPF.Rete = AC.RETE AND GPF.CodiceFiscale = AC.COD_FISCALE WHERE dbo.ToShortDateString(@Data) = dbo.ToShortDateString(DataGenerazione) ORDER BY Rete, COGNOME, NOME, TipoReport", conn); SqlDataReader reader = null; try { string data = dtpCFs.Value.Year.ToString() + (dtpCFs.Value.Month < 10 ? "0" + dtpCFs.Value.Month.ToString() : dtpCFs.Value.Month.ToString()) + (dtpCFs.Value.Day < 10 ? "0" + dtpCFs.Value.Day.ToString() : dtpCFs.Value.Day.ToString()); cmd.Parameters.Add("@Data", SqlDbType.VarChar).Value = data; conn.Open(); reader = cmd.ExecuteReader(); if (reader.HasRows) while (reader.Read()) { DataGridViewRow dgvr = new DataGridViewRow(); dgvr.CreateCells(dgvExistingCFs); dgvr.Cells[5].Value = reader["IdReport"]; dgvr.Cells[3].Value = reader["Rete"]; dgvr.Cells[4].Value = reader["CodiceFiscale"]; dgvr.Cells[2].Value = reader["NOME"]; dgvr.Cells[1].Value = reader["COGNOME"]; dgvr.Cells[0].Value = reader["TipoReport"].ToString().Contains("D") ? "Diagnosi" : "Monitoraggio"; dgvExistingCFs.Rows.Add(dgvr); } } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { if (reader != null && !reader.IsClosed) reader.Close(); if (conn.State == ConnectionState.Open) conn.Close(); dgvExistingCFs.Columns["ExistingReport"].Visible = schema == "C6MartPeriodico"; dgvToDelete.Columns["ToDeleteReport"].Visible = schema == "C6MartPeriodico"; if (dgvExistingCFs.Rows.Count > 0) dgvExistingCFs.ClearSelection(); } } } void MoveItems(DataGridView from, DataGridView to) { foreach (DataGridViewRow dgvr in from.SelectedRows) if (!to.Rows.Contains(dgvr)) { from.Rows.Remove(dgvr); to.Rows.Add(dgvr); } to.Sort(to.Columns[0], ListSortDirection.Ascending); to.Sort(to.Columns[2], ListSortDirection.Ascending); to.Sort(to.Columns[1], ListSortDirection.Ascending); to.Sort(to.Columns[3], ListSortDirection.Ascending); from.ClearSelection(); to.ClearSelection(); } void ScrollGVBar(DataGridView toMove, ScrollEventArgs e) { if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll) toMove.HorizontalScrollingOffset = e.NewValue; } private void Main_Load(object sender, EventArgs e) { cmbReportType.SelectedIndex = 0; } private void cmbReportType_SelectedIndexChanged(object sender, EventArgs e) { lblReportTypeDesc.Text = cmbReportType.SelectedItem.ToString().ToUpper(); //Recupera data Trimestre se PERIODICO, altrimenti setta label if (cmbReportType.SelectedItem.ToString().ToUpper() == "PERIODICO") { using (SqlConnection connC6 = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlServerStampeC6Connection"].ConnectionString)) { try { connC6.Open(); SqlCommand cmdC6 = new SqlCommand("SELECT [DATA_CONGELAMENTO] FROM [C6MartPeriodico].[CONGELAMENTO_SEI]",connC6); dataCongelamento = (DateTime)cmdC6.ExecuteScalar(); DataTrim.Text = dataCongelamento.ToString("dddd, dd MMMM yyyy"); } catch (Exception ex) { DataTrim.Text = "ATTENZIONE ERRORE NEL RECUPERO DELLA DATA: "+ex.Message; } finally { if (connC6.State == ConnectionState.Open) connC6.Close(); } } } else DataTrim.Text = "Selezionare PERIODICO per impostare la data"; } private void txtCodiceFiscale_TextChanged(object sender, EventArgs e) { foreach (DataGridViewRow dgvr in dgvExistingCFs.Rows) { string CF = dgvr.Cells["ExistingCodiceFiscale"].Value.ToString(); dgvr.Visible = CF.StartsWith(txtCodiceFiscale.Text, StringComparison.OrdinalIgnoreCase); } } private void btnLoad_Click(object sender, EventArgs e) { schema = cmbReportType.SelectedIndex == 0 ? "C6Mart" : "C6MartPeriodico"; LoadCFs(); } private void dgvExistingCFs_Scroll(object sender, ScrollEventArgs e) { ScrollGVBar(dgvToDelete, e); } private void dgvToDelete_Scroll(object sender, ScrollEventArgs e) { ScrollGVBar(dgvExistingCFs, e); } private void btnAdd_Click(object sender, EventArgs e) { MoveItems(dgvExistingCFs, dgvToDelete); } private void btnRemove_Click(object sender, EventArgs e) { MoveItems(dgvToDelete, dgvExistingCFs); } private void btnExecute_Click(object sender, EventArgs e) { if (dgvToDelete.Rows.Count > 0) if (MessageBox.Show("Vuoi veramente eliminare i report da SeiReport e da StampeCentralizzate?", "C6 Contracts Manager", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { StringBuilder idReports = new StringBuilder(); foreach (DataGridViewRow dgvr in dgvToDelete.Rows) idReports.AppendFormat("{0},", dgvr.Cells["ToDeleteIdReport"].Value.ToString()); idReports.Remove(idReports.Length - 1, 1); using (SqlConnection connRM = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlServerConnection"].ConnectionString), connC6 = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlServerStampeC6Connection"].ConnectionString)) { //V Cancellazione dei metadati //SqlCommand cmdMeta = new SqlCommand("DELETE FROM RepositoryMetadati WHERE repository=1 and IdinRepository IN (" + idReports.ToString() + ")"); SqlCommand cmdRM = new SqlCommand("DELETE FROM C6ReportFisico WHERE Identificativo IN (" + idReports.ToString() + ")", connRM); SqlCommand cmdC6 = new SqlCommand("SELECT Cod_Fiscale FROM C6Mart.CONTRATTOSEI C INNER JOIN " + schema + ".GESTIONE_PDF_FTP GPF ON C.Rete = GPF.Rete AND C.Cod_Fiscale = GPF.CodiceFiscale WHERE GPF.IdReport IN (" + idReports.ToString() + ")", connC6); SqlDataReader readerC6 = null; int cancC6ReportFisico = 0, cancLogFilePdf = 0, cancGestionePdfFtp = 0, aggContrattoSei = 0, cancMeta = 0; StringBuilder CFs = new StringBuilder(); try { connRM.Open(); cmdRM.Transaction = connRM.BeginTransaction(IsolationLevel.Serializable); cancC6ReportFisico = cmdRM.ExecuteNonQuery(); cmdRM.CommandText = "DELETE FROM LogFilePdf WHERE Applicativo = 'C6' AND Tipo = " + (schema.Equals("C6Mart") ? "1" : "2") + " AND IDImage IN (" + idReports.ToString() + ")"; cancLogFilePdf = cmdRM.ExecuteNonQuery(); cmdRM.CommandText = "DELETE FROM RepositoryMetadati WHERE repository=1 and IdinRepository IN (" + idReports.ToString() + ")"; cancMeta = cmdRM.ExecuteNonQuery(); connC6.Open(); readerC6 = cmdC6.ExecuteReader(); if (readerC6.HasRows) { while (readerC6.Read()) if (!CFs.ToString().Contains(readerC6.GetString(0))) CFs.AppendFormat("'{0}',", readerC6.GetString(0)); CFs.Remove(CFs.Length - 1, 1); } readerC6.Close(); if (CFs.Length > 0) { cmdC6.CommandText = "DELETE FROM " + schema + ".GESTIONE_PDF_FTP WHERE IdReport IN (" + idReports.ToString() + ")"; cmdC6.Transaction = connC6.BeginTransaction(IsolationLevel.Serializable); cancGestionePdfFtp = cmdC6.ExecuteNonQuery(); if (schema.Equals("C6Mart")) cmdC6.CommandText = "UPDATE C6Mart.CONTRATTOSEI SET InvioBenvenuto = 'N' WHERE InvioBenvenuto = 'S' AND Cod_Fiscale IN (" + CFs.ToString() + ")"; else cmdC6.CommandText = "UPDATE C6Mart.CONTRATTOSEI SET Data_Invio_Diagnosi_Trimestrale = NULL, Data_Invio_Monitoraggio_Trimestrale = NULL WHERE Data_Invio_Monitoraggio_Trimestrale IS NOT NULL AND Cod_Fiscale IN (" + CFs.ToString() + ")"; aggContrattoSei = cmdC6.ExecuteNonQuery(); if (cancMeta > 0 && cancC6ReportFisico > 0 && cancLogFilePdf > 0 && cancGestionePdfFtp > 0 && aggContrattoSei > 0) { StringBuilder testo = new StringBuilder("Verranno:\n\n"); testo.AppendFormat("- eliminati {0} record da SeiReport.C6ReportFisico\n", cancC6ReportFisico); testo.AppendFormat("- eliminati {0} record da SeiReport.LogFilePDF\n", cancLogFilePdf); testo.AppendFormat("- eliminati {0} record da SeiReport.Metadati\n", cancMeta); testo.AppendFormat("- eliminati {0} record da " + schema + ".GESTIONE_PDF_FTP\n", cancGestionePdfFtp); testo.AppendFormat("- aggiornati {0} record in C6Mart.CONTRATTOSEI\n", aggContrattoSei); testo.Append("\nContinuare?"); if (MessageBox.Show(testo.ToString(), "C6 Contracts Manager", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { cmdRM.Transaction.Commit(); cmdC6.Transaction.Commit(); MessageBox.Show("Operazione eseguita con successo.", "C6 Contracts Manager", MessageBoxButtons.OK, MessageBoxIcon.Information); dgvToDelete.Rows.Clear(); } else { cmdRM.Transaction.Rollback(); cmdC6.Transaction.Rollback(); MessageBox.Show("Operazione annullata.", "C6 Contracts Manager", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } else { cmdRM.Transaction.Rollback(); cmdC6.Transaction.Rollback(); MessageBox.Show("I record da eliminare ed aggiornare non coincidono, operazione annullata.", "C6 Contracts Manager", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else { cmdRM.Transaction.Rollback(); MessageBox.Show("Impossibile recuperare i codici fiscali dei clienti interessati, operazione annullata.", "C6 Contracts Manager", MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch (Exception ex) { if (cmdRM.Transaction != null) cmdRM.Transaction.Rollback(); if (cmdC6.Transaction != null) cmdC6.Transaction.Rollback(); MessageBox.Show(ex.Message, "C6 Contracts Manager", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { if (!readerC6.IsClosed) readerC6.Close(); cmdRM.Dispose(); cmdC6.Dispose(); if (connRM.State == ConnectionState.Open) connRM.Close(); if (connC6.State == ConnectionState.Open) connC6.Close(); } } } } } }