using ScaBox30.Controller; using ScaBox30.Model; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; using System.Text.Json; using System.Text.Json.Serialization; using System.Threading.Tasks; using System.Windows.Forms; namespace ScaBox30 { public partial class DataUI : Form { private List _barcode = new List { }; private DbController _db = new DbController(); private OleDbDataReader _reader; private List _new_data = new List(); private string _data_json = Application.StartupPath + "\\data.json"; private string _db_mdb = ""; // AZUL SELECTOR BLANCO /*Color header = Color.FromArgb(52, 73, 94); Color selector = Color.White; Color primary = Color.FromArgb(84, 153, 199); Color secondary = Color.FromArgb(174, 214, 241);*/ // AZUL SELECTOR GRIS AZUL Color header = Color.FromArgb(52, 93, 200); Color selector = Color.Silver; Color primary = Color.FromArgb(84, 153, 199); Color secondary = Color.FromArgb(174, 214, 241); // ROJO SELECTOR CRIMSON /*Color header = Color.Firebrick; Color selector = Color.Crimson; Color primary = Color.FromArgb(255, 128, 128); Color secondary = Color.FromArgb(255, 192, 192);*/ // ROJO SELECTOR BLANCO /*Color header = Color.Firebrick; Color selector = Color.White; Color primary = Color.FromArgb(255, 128, 128); Color secondary = Color.FromArgb(255, 192, 192);*/ public DataUI() { InitializeComponent(); InitializeItems(); this.SetStyle(ControlStyles.ResizeRedraw, true); LoadUsers(); LoadJson(_data_json); ActiveControl = textBoxCCE; SetGridStyle(header, selector, primary, secondary); } private void SetGridStyle(Color _header, Color _selector, Color _primary, Color _secundary) { if (true) { // CONFIGURACION GENERAL DEL DATAGRIDVIEW dataGridView1.BackgroundColor = _secundary; // ESTABLECE EL COLOR DE FONDO dataGridView1.EnableHeadersVisualStyles = false; // HABILITA O DESHABILITA EL BORDE DEL HEADER dataGridView1.ScrollBars = ScrollBars.Both; // HABILITA EL SCROLLBAR DE MANERA VERTICAL Y HORIZONTAL dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; // AJUSTA DE MANRA AUTOMATICA EL TAMAÑO DE LAS COLUMNAS dataGridView1.GridColor = Color.White; // ESTABLECE EL COLOR DE LAS LINEAS DE LA CUADRICULA // SELECTOR DE FILAS dataGridView1.RowHeadersVisible = false; // DESHABILITA LA VISUALIZACION DEL HEADER DE LAS FILAS dataGridView1.AllowUserToResizeRows = false; // DESHABILITA LA POSIBILIDAD DE CAMBIAR DE TAMAÑO LAS FILAS // ESTILO DE COLUMNAS dataGridView1.ColumnHeadersHeight = 23; // ESTABLECE EL ALTO DE LAS FILAS dataGridView1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.None; dataGridView1.ColumnHeadersDefaultCellStyle.BackColor = header; dataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("Microsoft Sans Serif", 10F, style:FontStyle.Bold , GraphicsUnit.Pixel); dataGridView1.ColumnHeadersDefaultCellStyle.ForeColor = Color.White; dataGridView1.ColumnHeadersDefaultCellStyle.SelectionBackColor = _selector; dataGridView1.ColumnHeadersDefaultCellStyle.SelectionForeColor = Color.White; // ESTILO DE CELDAS //dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None; dataGridView1.DefaultCellStyle.BackColor = _primary; dataGridView1.DefaultCellStyle.Font = new Font("Microsoft Sans Serif", 10F, GraphicsUnit.Pixel); dataGridView1.DefaultCellStyle.ForeColor = Color.Black; dataGridView1.DefaultCellStyle.SelectionBackColor = _selector; dataGridView1.DefaultCellStyle.SelectionForeColor = Color.Black; dataGridView1.DefaultCellStyle.ForeColor = Color.Black; // ESTILO CELDAS ALTERNADAS dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = _secundary; dataGridView1.AlternatingRowsDefaultCellStyle.Font = new Font("Microsoft Sans Serif", 10F, GraphicsUnit.Pixel); dataGridView1.AlternatingRowsDefaultCellStyle.ForeColor = Color.Black; dataGridView1.AlternatingRowsDefaultCellStyle.SelectionBackColor = _selector; dataGridView1.AlternatingRowsDefaultCellStyle.SelectionForeColor = Color.Black; } } // CARGA EL ARCHIVO DATA.JSON EXISTENTE private void LoadJson(String jsonfile) { if (File.Exists(jsonfile)) { Globals.actual_data.Clear(); this.Cursor = Cursors.WaitCursor; string jscontent = File.ReadAllText(jsonfile); Globals.actual_data = JsonSerializer.Deserialize>(jscontent); dataGridView1.DataSource = Globals.actual_data; labelRegistros.Text = "Registros: " + Globals.actual_data.Count.ToString(); jscontent = ""; this.Cursor = Cursors.Default; } } private void LoadUsers() { CreateUserJson(Globals.auth_json); LoadUserJson(Globals.auth_json); } private void CreateUserJson(string jsonfile) { if (!File.Exists(jsonfile)) { List users = new List { }; users.Add(new User() { user = "admin", password = "admin123" }); var json = JsonSerializer.Serialize>(users); File.WriteAllText(jsonfile, json); users.Clear(); } } private void LoadUserJson(string jsonfile) { if (File.Exists(jsonfile)) { Globals.users.Clear(); string jsoncontent = File.ReadAllText(jsonfile); Globals.users = JsonSerializer.Deserialize>(jsoncontent); jsoncontent = ""; } } // OBTIENE EL BOX_CAPACITY EXISTENTE private String FindBoxCapacity(List actual, OleDbDataReader nueva) { // String capacity = ""; /*foreach (var item in actual) { if (item.CCE == nueva.GetValue(0).ToString()){ capacity = item.Box_Capacity; } }*/ var capacity = (from item in actual where item.CCE == nueva.GetValue(0).ToString() select item.Box_Capacity).FirstOrDefault(); return capacity; } // CARGA LOS ELEMENTOS DE LA FILA SELECCIONADA A LA INTERFAZ private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex > -1) { //textBoxCCE.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString(); } } // GUARDA LOS CAMBIOS REALIZADOS AL DATAGRIDVIEW private void buttonSave_Click(object sender, EventArgs e) { this.Cursor = Cursors.WaitCursor; List records = new List { }; // OBTIENE LA INFORMACION DEL DATAGRIDVIEW Y LA PASA A UNA INSTANCIA DE LA CLASE DB foreach (DataGridViewRow row in dataGridView1.Rows) { Data rowd = row.DataBoundItem as Data; if (rowd != null){ records.Add(rowd); } } var json = JsonSerializer.Serialize>(records); File.WriteAllText(_data_json, json); this.Cursor = Cursors.Default; // SE REALIZAN TAREAS DE LIMPIEZA DE MEMORIA records.Clear(); GC.Collect(); GC.WaitForPendingFinalizers(); //****************************************** RJMessageBox.Show("Actualizada correctamente", "ScanBox", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void textBoxCCE_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == Keys.Enter) { int rowIndex = -1; foreach (DataGridViewRow row in dataGridView1.Rows) { if (row.Cells[0].Value.ToString().Equals(textBoxCCE.Text)) { rowIndex = row.Index; break; } } if (rowIndex > -1) { dataGridView1.ClearSelection(); dataGridView1.Rows[rowIndex].Selected = true; dataGridView1.FirstDisplayedScrollingRowIndex = rowIndex; } else { RJMessageBox.Show("OPC No encontrdao", "ScanBox", MessageBoxButtons.OK, MessageBoxIcon.Warning); } textBoxCCE.Clear(); } } private String OpenDbFileDialog() { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Access File (*.mdb)|*.mdb|All files (*.*)|*.*"; openFileDialog.ShowDialog(); return openFileDialog.FileName; } private async void buttonOpenFile_Click(object sender, EventArgs e) { Usuario usuario = new Usuario(); DialogResult result = usuario.ShowDialog(); if (Globals.valid_user && result != DialogResult.Cancel) { _db_mdb = OpenDbFileDialog(); textPathFile.Text = _db_mdb; await Task.Delay(500); // SI EL ARCHIVO DATA.JSON EXISTE SE OBTIENEN LOS REGISTROS ACTUALES if (File.Exists(_data_json)) { this.Cursor = Cursors.WaitCursor; string filecontent = File.ReadAllText(_data_json); Globals.actual_data = JsonSerializer.Deserialize>(filecontent); filecontent = ""; this.Cursor = Cursors.Default; } if (File.Exists(_db_mdb)) { this.Cursor = Cursors.WaitCursor; _db.SetWorkingDb(_db_mdb); _db.Open(); try { // POR MEDIO DEL QUERY NOS ASEGURAMOS DE TRAER LA DATA EN EL ORDEN CORRECTO string base_columns = "CCE,VERSION,ETAT,MARQUE,TEINTE,PS1,PS2,DIAM,SPHM,CYLM,Ref_Etiquette,code_epc,oeil,base,addition,epc,indice,dec,diam1,diam2,ref_coque,ref_cond,nom_1,nom_2,matiere_fr,matiere_us,couleur_fr,couleur_us,vernis,traitement_1,traitement_2,traitement_3,signom,sig1,sig2,code_upc,code_jan1,code_jan2,Reserve1,Reserve2,reserve_art_1,reserve_art_2,Ref_NiceLabel"; // SE REALIZA UNA CONSULTA DE PRUEBA PARA DETERMINAR LA CANTIDAD DE COLUMNAS A IMPORTAR _reader = _db.Query("SELECT * FROM Standard"); if (_reader != null) { Globals.boxcapacity = _reader.FieldCount == 44 ? true : false; } _reader = Globals.boxcapacity ? ( _db.Query("SELECT " + base_columns + ", Box_Capacity FROM Standard" )) : (_db.Query("SELECT " + base_columns + " FROM Standard")); if (_reader != null && !_reader.IsClosed) // Si la consulta no retornó un valor null y si el reader no es null y no está cerrado { while (_reader.Read()) { _new_data.Add( new Data { CCE = _reader.GetValue(0).ToString().Replace(" ", ""), VERSION = _reader.GetValue(1).ToString().Replace(" ", ""), ETAT = _reader.GetValue(2).ToString().Replace(" ", ""), MARQUE = _reader.GetValue(3).ToString().Replace(" ", ""), TEINTE = _reader.GetValue(4).ToString().Replace(" ", ""), PS1 = _reader.GetValue(5).ToString().Replace(" ", ""), PS2 = _reader.GetValue(6).ToString().Replace(" ", ""), DIAM = _reader.GetValue(7).ToString().Replace(" ", ""), SPHM = _reader.GetValue(8).ToString().Replace(" ", ""), CYLM = _reader.GetValue(9).ToString().Replace(" ", ""), Ref_Etiquette = _reader.GetValue(10).ToString().Replace(" ", ""), code_epc = _reader.GetValue(11).ToString().Replace(" ", ""), oeil = _reader.GetValue(12).ToString().Replace(" ", ""), @base = _reader.GetValue(13).ToString().Replace(" ", ""), addition = _reader.GetValue(14).ToString().Replace(" ", ""), epc = _reader.GetValue(15).ToString().Replace(" ", ""), indice = _reader.GetValue(16).ToString().Replace(" ", ""), dec = _reader.GetValue(17).ToString().Replace(" ", ""), diam1 = _reader.GetValue(18).ToString().Replace(" ", ""), diam2 = _reader.GetValue(19).ToString().Replace(" ", ""), ref_coque = _reader.GetValue(20).ToString().Replace(" ", ""), ref_cond = _reader.GetValue(21).ToString().Replace(" ", ""), nom_1 = _reader.GetValue(22).ToString(), nom_2 = _reader.GetValue(23).ToString(), matiere_fr = _reader.GetValue(24).ToString().Replace(" ", ""), matiere_us = _reader.GetValue(25).ToString().Replace(" ", ""), couleur_fr = _reader.GetValue(26).ToString().Replace(" ", ""), couleur_us = _reader.GetValue(27).ToString().Replace(" ", ""), vernis = _reader.GetValue(28).ToString().Replace(" ", ""), traitement_1 = _reader.GetValue(29).ToString().Replace(" ", ""), traitement_2 = _reader.GetValue(30).ToString().Replace(" ", ""), traitement_3 = _reader.GetValue(31).ToString().Replace(" ", ""), signom = _reader.GetValue(32).ToString().Replace(" ", ""), sig1 = _reader.GetValue(33).ToString().Replace(" ", ""), sig2 = _reader.GetValue(34).ToString().Replace(" ", ""), code_upc = _reader.GetValue(35).ToString().Replace(" ", ""), code_jan1 = _reader.GetValue(36).ToString().Replace(" ", ""), code_jan2 = _reader.GetValue(37).ToString().Replace(" ", ""), Reserve1 = _reader.GetValue(38).ToString().Replace(" ", ""), Reserve2 = _reader.GetValue(39).ToString().Replace(" ", ""), reserve_art_1 = _reader.GetValue(40).ToString().Replace(" ", ""), reserve_art_2 = _reader.GetValue(41).ToString().Replace(" ", ""), Ref_NiceLabel = _reader.GetValue(42).ToString().Replace(" ", ""), Box_Capacity = Globals.boxcapacity? _reader.GetValue(43).ToString().Replace(" ", "") : FindBoxCapacity(Globals.actual_data, _reader), } // new db ); // new_records } _reader.Close(); _db.Close(); labelRegistros.Text = "Registros: " + _new_data.Count(); var json = JsonSerializer.Serialize>(_new_data); File.WriteAllText(_data_json, json); // SE REALIZAN TAREAS DE LIMPIEZA DE MEMORIA _new_data.Clear(); Globals.actual_data.Clear(); GC.Collect(); GC.WaitForPendingFinalizers(); // ***************************************** LoadJson(_data_json); RJMessageBox.Show("Base de datos importada correctamente", "ScanBox", MessageBoxButtons.OK,MessageBoxIcon.Information); } else { RJMessageBox.Show("No fue posible importar la base de datos. Asegurese de que la tabla Standard existe.", "ScanBox", MessageBoxButtons.OK, MessageBoxIcon.Error); } this.Cursor = Cursors.Default; } catch (Exception ex) { this.Cursor = Cursors.Default; MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // Reset login Globals.valid_user = false; } else { if (result != DialogResult.Cancel) { RJMessageBox.Show("No tiene permiso para realizar esta acción", "ScanBox", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e) { if (!Globals.valid_user) { Usuario usuario = new Usuario(); DialogResult result = usuario.ShowDialog(); if (Globals.valid_user) { RJMessageBox.Show("Ya puede editar la tabla", "ScanBox", MessageBoxButtons.OK, MessageBoxIcon.Information); dataGridView1.ReadOnly = false; } else { if (result != DialogResult.Cancel) { RJMessageBox.Show("No tiene permiso para realizar esta acción", "ScanBox", MessageBoxButtons.OK, MessageBoxIcon.Warning); dataGridView1.ReadOnly = true; } } } } // VALIDACIONES DE LA COLUMNA BOX_CAPACITY private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { var value = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; string colname = "Box_Capacity"; if (value != null && dataGridView1.Columns[e.ColumnIndex].Name == colname) { if (Int32.TryParse(value.ToString(), out int x)) { //Restrucción de 3 dígitos //if (x > 99) //{ // RJMessageBox.Show("BoxCapacity no puede ser mayor a dos dígitos", "ScanBox", MessageBoxButtons.OK, MessageBoxIcon.Warning); // dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = ""; //} //Restriccion de cero if (!(x > 1)) { RJMessageBox.Show("BoxCapacity debe ser mayor a cero", "ScanBox", MessageBoxButtons.OK, MessageBoxIcon.Warning); dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = ""; } } else { RJMessageBox.Show("Solo se permiten números", "ScanBox", MessageBoxButtons.OK, MessageBoxIcon.Warning); dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = ""; } } } private void btnEdit_Click(object sender, EventArgs e) { Usuario usuario = new Usuario(); usuario.ShowDialog(); if (Globals.valid_user) { RJMessageBox.Show("Ya puede editar la tabla", "ScanBox", MessageBoxButtons.OK, MessageBoxIcon.Information); dataGridView1.ReadOnly = false; }else { RJMessageBox.Show("No tiene permiso para realizar esta acción", "ScanBox", MessageBoxButtons.OK, MessageBoxIcon.Warning); dataGridView1.ReadOnly = true; } } private void DataUI_FormClosing(object sender, FormClosingEventArgs e) { // Reset login Globals.valid_user = false; } private void InitializeItems() { this.FormBorderStyle = FormBorderStyle.None; this.Padding = new Padding(Globals.borderSize);//Set border size this.btnClose.DialogResult = DialogResult.Cancel; this.labelCaption.Text = this.Text; this.panelTitleBar.BackColor = Globals.primaryColor; this.panelTitleBar.Padding = new Padding(0, 0, 0, Globals.borderSize); this.BackColor = Globals.primaryColor; } #region -> Maximizar private void btnMax_Click(object sender, EventArgs e) { if (WindowState == FormWindowState.Maximized) { this.WindowState = FormWindowState.Normal; } else { WindowState = FormWindowState.Maximized; } } #endregion #region -> Minimizar private void btnMin_Click(object sender, EventArgs e) { if (WindowState == FormWindowState.Normal || WindowState == FormWindowState.Maximized) { this.WindowState = FormWindowState.Minimized; } else { WindowState = FormWindowState.Normal; } } #endregion #region -> Drag Form [DllImport("user32.DLL", EntryPoint = "SendMessage")] private extern static void SendMessage(System.IntPtr hWnd, int wMsg, int wParam, int lParam); [DllImport("user32.DLL", EntryPoint = "ReleaseCapture")] private extern static void ReleaseCapture(); private void panelTitleBar_MouseDown(object sender, MouseEventArgs e) { if (e.Clicks == 2) { WindowState = WindowState == FormWindowState.Maximized ? FormWindowState.Normal: FormWindowState.Maximized; } else { ReleaseCapture(); SendMessage(this.Handle, 0x112, 0xf012, 0); } } #endregion #region -> Resize Form private const int cGrip = 16; private const int cCaption = 32; protected override void WndProc(ref Message m) { if (m.Msg == 0x84) { Point pos = new Point(m.LParam.ToInt32()); pos = this.PointToClient(pos); if (pos.Y < cCaption) { m.Result = (IntPtr)2; return; } if (pos.X >= this.ClientSize.Width - cGrip && pos.Y >= this.ClientSize.Height - cGrip) { m.Result = (IntPtr)17; return; } } base.WndProc(ref m); } #endregion } }