/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 


package servidor.configurador;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.HeadlessException;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JToolTip;
import javax.swing.table.AbstractTableModel;



import servidor.configurador.Varios.miJTextField;
import servidor.datos.BaseDatos;
import servidor.datos.TablaOperadores;
import servidor.datos.Tabla_Base;



	public class frmOperadores extends  MouseAdapter implements ActionListener
	{

		ArrayList operadores = null;
		JPanel jPanelOperadores = null;
		ItemGridOperador[] itemOperadores;
		String[] cabeceras = { "Usuario", "Nombre" ,"Activo","Centro"};
		JTable gridOperadores;
		private javax.swing.JPanel jPanel1,jPanel2,jPanel3;
		private javax.swing.JScrollPane jScrollPane1;
		
		public frmOperadores() {
			super();
			initComponents();
			actualizaOperadores();
			gridOperadores.setEnabled(false);
			gridOperadores.addMouseListener(this);
		}
		
		private void actualizaOperadores(){
                    gridOperadores.removeAll();
			this.cargaPanelPorOperador();
			gridOperadores.setModel(new GridTableModel(itemOperadores,cabeceras));
			gridOperadores.getColumnModel().getColumn(0).setMaxWidth(80); 
			gridOperadores.getColumnModel().getColumn(2).setMaxWidth(80);
		}		
		
		

		public void mousePressed(java.awt.event.MouseEvent evt) {
			if (((JTable) evt.getSource()).getName() == "gridoperadores") {
				seleccionarFilaGrid(gridOperadores, evt.getPoint());
				if (evt.getClickCount() == 2) {
					frmMantenOperador fO = new frmMantenOperador(frmConfiguraServidor.getConfiFrame(),true);
					fO.Modifica(
							(String) gridOperadores.getValueAt(gridOperadores.getSelectedRow(), 0), 
							(String) gridOperadores.getValueAt(gridOperadores.getSelectedRow(), 1), 
							(Boolean)gridOperadores.getValueAt(gridOperadores.getSelectedRow(), 2),
                                                        (String) gridOperadores.getValueAt(gridOperadores.getSelectedRow(), 3) );
					if (!fO.jtxtUsuario.getText().equalsIgnoreCase("")) {
						try{
							String usuario = fO.jtxtUsuario.getText().toUpperCase();
							String nombre = fO.jtxtNombre.getText().toUpperCase();	
                                                        String centro = fO.jtxtCentro.getText().toUpperCase();	
						TablaOperadores top = BaseDatos.bd().tablaOperadores();
						top.SQL("UPDATE operadores SET nombre='"
								+nombre + "' ,activo="+fO.getActivo() +", Centro ='"+centro+"' WHERE codigo='"
								+usuario+ "'") ;
							actualizaOperadores();
						}
						catch  (SQLException e){
							JOptionPane.showMessageDialog(null,
									"No se pudo actualizar la base de datos.\n"+e.getMessage());
						     e.printStackTrace();
						     System.exit(1);
						} 
					}
				}
			}
		}

		public JPanel contenido() {
			return jPanelOperadores;
		}

		void seleccionarFilaGrid(JTable grid, java.awt.Point p) {
			int r = grid.rowAtPoint(p);
			if (r != -1) {
				gridOperadores.changeSelection(r, 0, false, false);
			}
		}


		void cargaPanelPorOperador() {

			//operadores = new ArrayList();
			//MapaOperadores ops = new MapaOperadores();
			try {
				TablaOperadores top = BaseDatos.bd().tablaOperadores();
				top.leerDatos("order by Nombre");
				itemOperadores = new ItemGridOperador[top.recordsCount()];
				top.beforeFirst();
				
				
				int i = 0;
				while (top.next()) {
					String nif = new String(top.getString("codigo"));
					String nombre = top.getString("Nombre");
					boolean activo=top.getBoolean("Activo");
                                        String centro = top.getString("Centro");
					itemOperadores[i++] = new ItemGridOperador(nif, nombre, activo, centro );
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}


		}
		private void initComponents() {
			jPanelOperadores = new JPanel();
			jPanelOperadores.setLayout(new BorderLayout());
	        jPanel2=new javax.swing.JPanel();
			jPanel1 = new javax.swing.JPanel();
			jPanel3 = new javax.swing.JPanel();

			jScrollPane1 = new javax.swing.JScrollPane();
			gridOperadores = new javax.swing.JTable();
			gridOperadores.getTableHeader().setReorderingAllowed(false);
	        gridOperadores.setName("gridoperadores");

			jPanel1.setLayout(new java.awt.BorderLayout());

			JLabel titulito=new JLabel("ATENEO - Operadores");
			titulito.setFont(new Font("Arial",Font.BOLD ,20));

				//	jPanel3.setPreferredSize(new java.awt.Dimension(490, 35));
			jPanel3.add(titulito);
					jPanel1.add(jPanel3, java.awt.BorderLayout.NORTH);

			jScrollPane1.setViewportView(gridOperadores);
	        JButton jbNuevo=new JButton("Nuevo");
	        jbNuevo.addActionListener(this);
                jPanel2.add(jbNuevo);
                JButton jbBorrar = new JButton("Borrar");
		jbBorrar.addActionListener(this);
		jPanel2.add(jbBorrar);
	       
			jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);
			jPanel1.add(jPanel2, java.awt.BorderLayout.SOUTH );
			jPanel1.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
			jPanelOperadores.add(jPanel1, java.awt.BorderLayout.CENTER);
			
		}
		public void actionPerformed(ActionEvent e) {
			JButton jb = (JButton) e.getSource();
			if (jb.getActionCommand().equalsIgnoreCase("nuevo")) {
				frmMantenOperador fO = new frmMantenOperador(
						frmConfiguraServidor.getConfiFrame(), true);
				fO.Alta();
				if (!fO.jtxtUsuario.getText().equalsIgnoreCase("")) {
					String usuario = fO.jtxtUsuario.getText().toUpperCase();
					String nombre = fO.jtxtNombre.getText();
                                        String centro = fO.jtxtCentro.getText();
					if (JOptionPane.showConfirmDialog(	null,
									"¿Seguro deseas crear el Operador: "
											+ usuario
											+ " - "
											+ nombre
											+ "?.\n ",
									"Confirmacion alta operadores",
									JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
						TablaOperadores top = BaseDatos.bd().tablaOperadores();
						
						String stnombre=top.buscarNombrePorCodigo(usuario);
						if (stnombre!=null){
							JOptionPane.showMessageDialog(null,
							"El usuario: '" + usuario+"' ya existe con el nombre: '"+ stnombre+"'");
						}
						else
						try {
						top.nuevoOperador(usuario, nombre, fO.getActivo(), centro );
						actualizaOperadores();
						}						
						catch  (SQLException ex){
							JOptionPane.showMessageDialog(null,
							"No se pudo actualizar la base de datos.\n"+ex.getMessage());
						     ex.printStackTrace();
						     System.exit(1);
						} 
					}
				}
			}
                        else if (jb.getActionCommand().equalsIgnoreCase("borrar")  && (gridOperadores.getSelectedRow()>-1)) {
			String CodigoUsu = (String) gridOperadores.getValueAt(gridOperadores.getSelectedRow(), 0);
                        if (JOptionPane.showConfirmDialog(	null,	"¿Seguro deseas borrar Operador: " +CodigoUsu + " ?",
					"Confirmacion Baja Operador",	JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
				TablaOperadores top = BaseDatos.bd().tablaOperadores();
				try {
					top.SQL("DELETE FROM Operadores  WHERE codigo  = '"+CodigoUsu+"'");
					actualizaOperadores();

				} catch (SQLException ex) {
					JOptionPane.showMessageDialog(null, "No se pudo actualizar la base de datos.\n"+ex.getMessage());
					ex.printStackTrace();
					System.exit(1);
				}
		}
		}
	
		}

		
		

		class frmMantenOperador extends JDialog implements ActionListener {

			private JPanel jContentPane = null;
			private miJTextField jtxtUsuario = null;
			private JTextField jtxtNombre = null;
                        private JTextField jtxtCentro = null;
			private JButton jbAceptar = null;
			private JButton jbCancelar = null;
                
			private JCheckBox jcbActivo=null;
			public frmMantenOperador(JFrame fconfi,boolean modal) throws HeadlessException {
				super(fconfi,modal);
				initialize();
			}

			public void Modifica(String usuario, String nombre,Boolean activo, String centro) {
				this.jtxtUsuario.setText(usuario);
				this.jtxtUsuario.setEnabled(false);
				this.jtxtNombre.setText(nombre);
				this.jcbActivo.setSelected(activo.booleanValue());
				this.jtxtCentro.setText(centro);
				this.setLocationRelativeTo (null);
				this.setVisible(true);
			}
			public void Alta() {
				this.jtxtUsuario.setText("");
				this.jtxtNombre.setText("");
				this.jcbActivo.setSelected(true);
                                this.jtxtCentro.setText("");
				this.setLocationRelativeTo (null);
				this.setVisible(true);
			}
			private void initialize() {
				this.setSize(372, 190);
				this.setTitle("Mantenimiento Operador");
				this.setContentPane(getJContentPane());
			}
          public String  getActivo(){
           return this.jcbActivo.isSelected()?"1":"0";
		}
			private JPanel getJContentPane() {
				if (jContentPane == null) {
					JLabel jLabel1 =  new JLabel();
                                        JLabel jLabelC = new JLabel();
					jLabel1.setBounds(new java.awt.Rectangle(10, 45, 54, 26));
					jLabel1.setText("Nombre:");
					JLabel jLabel = new JLabel();
					jLabel.setBounds(new java.awt.Rectangle(12, 12, 57, 25));
					jLabel.setText("Usuario:");
					jContentPane = new JPanel();
					jContentPane.setLayout(null);
					jtxtUsuario = new miJTextField(8);
					jtxtUsuario.addKeyListener(new Varios.MiAdaptadorCadena());
					jtxtUsuario.setToolTipText("Codigo de usuario corporativo del operador");
					jtxtUsuario.setBounds(new java.awt.Rectangle(75, 13, 75, 23));
					jContentPane.add(jtxtUsuario, null);
					jtxtNombre = new JTextField(35);
					jtxtNombre.addKeyListener(new Varios.MiAdaptadorCadena());
					jtxtNombre.setBounds(new java.awt.Rectangle(75, 46, 278, 23));
					jContentPane.add(jtxtNombre, null);
					
					jContentPane.add(jLabel, null);
					jContentPane.add(jLabel1, null);
					
					jcbActivo=new JCheckBox("Activo: ");
					jcbActivo.setBounds(25,78,100,25);
					jcbActivo.setHorizontalTextPosition(JCheckBox.LEFT);
					jContentPane.add(jcbActivo, null);
					jbAceptar = new JButton("Aceptar");
					jbAceptar.setBounds(new java.awt.Rectangle(78, 120, 83, 25));
					jbAceptar.addActionListener(this);
					jContentPane.add(jbAceptar, null);
					jbCancelar = new JButton("Cancelar");
					jbCancelar.setBounds(new java.awt.Rectangle(194, 120, 89, 25));
					jbCancelar.setText("Cancelar");
					jbCancelar.addActionListener(this);
					jContentPane.add(jbCancelar, null);
                                        jtxtCentro = new miJTextField(5);
                                        jtxtCentro.setToolTipText("Codigo de centro. Valores permitidos: En blanco o 5 digitos");
					jtxtCentro.addKeyListener(new Varios.MiAdaptadorCadena());
					jtxtCentro.setBounds(new java.awt.Rectangle(200, 80, 59, 23));
                                      
					jContentPane.add(jtxtCentro, null);
                                        jLabelC =new JLabel("Centro:");
					jLabelC.setBounds(new java.awt.Rectangle(140, 78, 57, 25));
                                        jContentPane.add(jLabelC, null);
				}
				return jContentPane;
			}

			public void actionPerformed(ActionEvent e) {
				JButton jb = (JButton) e.getSource();
				if (jb.getActionCommand().equalsIgnoreCase("cancelar")) {
					this.jtxtUsuario.setText("");
					this.setVisible(false);
				}
				if (jb.getActionCommand().equalsIgnoreCase("aceptar")) {
					boolean ok=true;
					this.jtxtUsuario.setText(this.jtxtUsuario.getText().trim().toUpperCase());
					this.jtxtNombre.setText(this.jtxtNombre.getText().trim().toUpperCase());
					if (this.jtxtUsuario.getText().length()>9){
						ok=false;
						JOptionPane.showMessageDialog(null, "Codigo de usuario corporativo invalido. Max 9 caracteres.");
					}
                                        if (this.jtxtUsuario.getText().length()< 3){
						ok=false;
						JOptionPane.showMessageDialog(null, "Codigo de usuario corporativo invalido. Min 3 caracteres.");
					}
					if	(this.jtxtNombre.getText().length()==0 || this.jtxtNombre.getText().length()>35){
						JOptionPane.showMessageDialog(null, "El nombre no puede estar vacio o supera el tamaño maximo.");
						ok=false;
					}
                                          String centro = this.jtxtCentro.getText().trim();
                                         if(centro.length() > 5 ) {
                                            javax.swing.JOptionPane.showMessageDialog(this, "Formato Centro solo admite 5 digitos", "ERROR EN LOS DATOS", javax.swing.JOptionPane.PLAIN_MESSAGE);
                                            jtxtCentro.requestFocus();
                                            ok=false;
                                            return;
                                         }
        
                                      if(centro.length() < 5 && centro.length() > 0 ) {
                                         javax.swing.JOptionPane.showMessageDialog(this, "Formato Centro solo admite 5 digitos", "ERROR EN LOS DATOS", javax.swing.JOptionPane.PLAIN_MESSAGE);
                                        jtxtCentro.requestFocus();
                                            ok=false;
                                            return;
                                      }
                                      if(centro.length() == 0 ) this.jtxtCentro.setText(" ");
                                       
            				if (ok) 
					  this.setVisible(false);
				}

			}

		}
	
		class ItemGridOperador extends ItemGrid{
	
			ItemGridOperador(String nif, String nombre,boolean activo, String centro) {
				valores = new Object[4];
				valores[0] = nif;
				valores[1] = nombre;
				valores[2] = activo;
                                valores[3] = centro;
			}

		}



		
		
		
	}	
	