Java tutorial
/* This file is part of GestoSAT. * * GestoSAT is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GestoSAT is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with GestoSAT. If not, see <http://www.gnu.org/licenses/>. * * Salvador Puertes Aleixandre, July 2016 * */ package GestoSAT; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import sun.misc.BASE64Decoder; import java.io.BufferedInputStream; import java.util.Vector; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.logging.Level; import java.util.logging.Logger; import java.sql.*; import java.util.Calendar; import java.util.HashMap; import java.util.Map; import javax.ejb.Schedule; import javax.ejb.Stateless; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import java.util.Date; import java.util.Iterator; import javax.imageio.ImageIO; @Stateless public class GestoSAT { private Map documento = new HashMap(); private Map cliente = new HashMap(); private Empleado empleado; private Map empleados = new HashMap(); private Map proveedor = new HashMap(); private Connection con; private Vector<String> confSeg = new Vector<String>(); private Vector<String> mySQL = new Vector<String>(); private int iva; public GestoSAT() { File f = new File("confGestoSAT"); if (f.exists()) { FileReader file; try { file = new FileReader("confGestoSAT"); BufferedReader b = new BufferedReader(file); String cadena; cadena = b.readLine(); String[] valores = cadena.split(";"); mySQL.add(valores[0]); mySQL.add(Math.abs(Integer.parseInt(valores[1])) + ""); mySQL.add(valores[2]); mySQL.add(valores[3]); Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection( "jdbc:mysql://" + mySQL.elementAt(0) + ":" + Math.abs(Integer.parseInt(mySQL.elementAt(1))) + "/gestosat?user=" + mySQL.elementAt(2) + "&password=" + mySQL.elementAt(3)); confSeg.add(valores[4]); confSeg.add(Math.abs(Integer.parseInt(valores[5])) + ""); confSeg.add(valores[6]); confSeg.add(valores[7]); iva = Math.abs(Integer.parseInt(valores[8])); file.close(); } catch (FileNotFoundException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); } catch (ClassNotFoundException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); } } } @Schedule(dayOfWeek = "Sun-Sat", month = "*", hour = "22", dayOfMonth = "*", year = "*", minute = "0", second = "0", persistent = true) public void generarCopia() { // http://chuwiki.chuidiang.org/index.php?title=Backup_de_MySQL_con_Java try { Process p = Runtime.getRuntime().exec("mysqldump -u " + mySQL.elementAt(2) + " -p" + mySQL.elementAt(3) + " -h " + mySQL.elementAt(0) + " -P " + mySQL.elementAt(1) + " gestosat"); InputStream is = p.getInputStream(); FileOutputStream fos = new FileOutputStream("backupGestoSAT.sql"); byte[] buffer = new byte[1000]; int leido = is.read(buffer); while (leido > 0) { fos.write(buffer, 0, leido); leido = is.read(buffer); } fos.close(); //http://www.javamexico.org/blogs/lalo200/pequeno_ejemplo_para_subir_un_archivo_ftp_con_la_libreria_commons_net FTPClient clienteFTP = new FTPClient(); // Lanza excepcin si el servidor no existe clienteFTP.connect(confSeg.elementAt(0), Integer.parseInt(confSeg.elementAt(1))); if (clienteFTP.login(confSeg.elementAt(2), confSeg.elementAt(3))) { clienteFTP.setFileType(FTP.BINARY_FILE_TYPE); BufferedInputStream buffIn = new BufferedInputStream(new FileInputStream("backupGestoSAT.sql")); clienteFTP.enterLocalPassiveMode(); clienteFTP.storeFile("backupGestoSAT.sql", buffIn); buffIn.close(); clienteFTP.logout(); clienteFTP.disconnect(); } else System.out.println("Error de conexin FTP"); } catch (Exception e) { e.printStackTrace(); } } public int iniciarSesion(String correo, String pass) { File f = new File("confGestoSAT"); if (f.exists()) { try { Class.forName("com.mysql.jdbc.Driver"); Statement st = con.createStatement(); ResultSet res = st.executeQuery( "Select * From usuarios u INNER JOIN entidades e ON u.id_Entidad = e.id_Entidad Where u.Correo_electronico ='" + correo + "' AND u.Activo = 1"); if (res.next()) { String p = (String) res.getObject("u.Password"); MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); sha256.update(pass.getBytes("UTF-8")); byte[] digest = sha256.digest(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < digest.length; i++) { sb.append(String.format("%02x", digest[i])); } String password = sb.toString(); if (p.equals(password)) { if ((res.getString("u.Gerente")).equals("1")) empleado = new Gerente(res.getString("u.Nombre"), res.getString("u.Apellidos"), res.getString("u.DNI"), res.getString("u.Poblacion"), res.getString("u.Provincia"), res.getInt("u.CP"), res.getString("u.Calle"), res.getString("u.Numero"), res.getString("u.Escalera"), res.getInt("u.Piso"), res.getString("u.Puerta"), res.getInt("u.tlf_Fijo"), res.getInt("u.tlf_Movil"), res.getFloat("u.Sueldo_base"), res.getFloat("u.Precio_hora"), correo, res.getString("e.nombre"), res.getString("e.nif"), res.getString("e.provincia"), res.getString("e.poblacion"), res.getInt("e.CP"), res.getString("e.Calle"), res.getString("e.numero"), res.getString("e.correo_electronico"), res.getInt("e.tlf_fijo"), res.getInt("e.tlf_movil"), res.getInt("e.fax")); else empleado = new Empleado(res.getString("u.Nombre"), res.getString("u.Apellidos"), res.getString("u.DNI"), res.getString("u.Poblacion"), res.getString("u.Provincia"), res.getInt("u.CP"), res.getString("u.Calle"), res.getString("u.Numero"), res.getString("u.Escalera"), res.getInt("u.Piso"), res.getString("u.Puerta"), res.getInt("u.tlf_Fijo"), res.getInt("u.tlf_Movil"), res.getFloat("u.Sueldo_base"), res.getFloat("u.Precio_hora"), correo, res.getString("e.nombre"), res.getString("e.nif"), res.getString("e.provincia"), res.getString("e.poblacion"), res.getInt("e.CP"), res.getString("e.Calle"), res.getString("e.numero"), res.getString("e.correo_electronico"), res.getInt("e.tlf_fijo"), res.getInt("e.tlf_movil"), res.getInt("e.fax")); empleado.setGestoSAT(this); int devolver = res.getInt("u.id_Usuario"); res.close(); this.empleados.put(devolver, empleado); this.getEmpleados(devolver); return devolver; } else { res.close(); return 0; } } else return 0; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return 0; } catch (ClassNotFoundException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return 0; } catch (NoSuchAlgorithmException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return 0; } catch (UnsupportedEncodingException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return 0; } } else { String defaultUser = "admin@default.es"; String defaultPass = "admin"; if (defaultUser.equals(correo) && defaultPass.equals(pass)) return 1; else return 0; } } public boolean primerAcceso() { File f = new File("confGestoSAT"); if (!f.exists()) return true; else return false; } public Gerente configuracionInicial(String nombre, String apellidos, String dni, String poblacion, String provincia, int cp, String calle, String numero, String escalera, int piso, String puerta, int tlfFijo, int tlfMovil, float sueldo, float precioHora, String email, String pass, String nombreEmp, String nif, String poblacionEmp, String provinciaEmp, int cpEmp, String calleEmp, String numeroEmp, String emailEmp, int tlfFijoEmp, int tlfMovilEmp, int faxEmp, String ipMySQL, int puertoMySQL, String userMySQL, String passMySQL, String ipFTP, int puertoFTP, String userFTP, String passFTP, int iva) { File archConf = new File("confGestoSAT"); File dir = new File("docsGSAT"); dir.mkdir(); try { BufferedWriter bw = new BufferedWriter(new FileWriter(archConf)); bw.write(ipMySQL + ";" + Math.abs(puertoMySQL) + ";" + userMySQL + ";" + passMySQL + ";" + ipFTP + ";" + Math.abs(puertoFTP) + ";" + userFTP + ";" + passFTP + ";" + iva); bw.close(); this.iva = Math.abs(iva); Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://" + ipMySQL + ":" + puertoMySQL + "/?user=" + userMySQL + "&password=" + passMySQL); Statement statement = con.createStatement(); statement.executeUpdate("Create Database IF NOT EXISTS gestosat"); con.close(); con = DriverManager.getConnection("jdbc:mysql://" + ipMySQL + ":" + puertoMySQL + "/gestosat?user=" + userMySQL + "&password=" + passMySQL); statement = con.createStatement(); statement.executeUpdate("CREATE TABLE IF NOT EXISTS albaranes (" + " id_Albaran INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," + " fch_Creacion DATETIME NOT NULL ," + " Concepto VARCHAR (1000) NOT NULL ," + " fch_Entrega DATETIME ," + " Provincia VARCHAR (50) NOT NULL ," + " Poblacion VARCHAR (255) NOT NULL ," + " CP INTEGER NOT NULL ," + " Calle VARCHAR (255) NOT NULL ," + " Numero VARCHAR (10) NOT NULL ," + " Escalera VARCHAR (10) ," + " Piso INTEGER ," + " Puerta VARCHAR (5) ," + " Total DECIMAL(10,2) NOT NULL," + " id_Factura INTEGER ," + " id_Presupuesto INTEGER ," + " id_Cliente INTEGER NOT NULL ," + " Observaciones VARCHAR (1000)" + " )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS aparatos" + " (" + " id_Aparato INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," + " Tipo VARCHAR (50) NOT NULL ," + " Marca VARCHAR (100) NOT NULL ," + " Modelo VARCHAR (100) NOT NULL ," + " Color VARCHAR (50) NOT NULL ," + " Numero_serie VARCHAR (50) NOT NULL ," + " Observaciones VARCHAR (1000) ," + " id_Cliente INTEGER NOT NULL )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS averias" + " (id_Aparato INTEGER NOT NULL ," + " id_Entrada INTEGER NOT NULL ," + " Motivo VARCHAR (1000) NOT NULL," + " Descripcion VARCHAR (1000) NOT NULL)"); statement.executeUpdate("ALTER TABLE averias ADD CONSTRAINT PRIMARY KEY ( id_Aparato, id_Entrada )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS citas" + " (id_Cita INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," + " fch_Cita DATETIME NOT NULL ," + " Direccion INTEGER NOT NULL ," + " Motivo VARCHAR (1000) NOT NULL ," + " Observaciones VARCHAR (1000) ," + " id_Cliente INTEGER NOT NULL ," + " id_Entrada INTEGER NOT NULL" + " )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS citas_empleados" + " (" + " id_Cita INTEGER NOT NULL ," + " id_Usuario INTEGER NOT NULL" + " )"); statement.executeUpdate( "ALTER TABLE citas_empleados ADD CONSTRAINT PRIMARY KEY ( id_Cita, id_Usuario )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS clientes" + " (" + " id_Cliente INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," + " Nombre VARCHAR (150) NOT NULL ," + " Apellidos VARCHAR (250) NOT NULL ," + " NIF VARCHAR (12) NOT NULL ," + " Provincia VARCHAR (50) NOT NULL ," + " Poblacion VARCHAR (255) NOT NULL ," + " CP INTEGER NOT NULL ," + " Calle VARCHAR (255) NOT NULL ," + " Numero VARCHAR (5) NOT NULL ," + " Escalera VARCHAR (10) ," + " Piso INTEGER ," + " Puerta VARCHAR (5) ," + " tlf_Contacto INTEGER NOT NULL ," + " tlf_Auxiliar INTEGER ," + " Correo_electronico VARCHAR (255) ," + " Observaciones VARCHAR (1000)" + " ) "); statement.executeUpdate("CREATE TABLE IF NOT EXISTS direccion_citas" + " (id_Direccion INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," + " Provincia VARCHAR (50) NOT NULL ," + " Poblacion VARCHAR (255) NOT NULL ," + " CP INTEGER NOT NULL ," + " Calle VARCHAR (255) NOT NULL ," + " Numero VARCHAR (5) NOT NULL ," + " Escalera VARCHAR (10) ," + " Piso INTEGER ," + " Puerta VARCHAR (5) ," + " Observaciones VARCHAR (1000) " + " )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS entidades" + " (" + " id_Entidad INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," + " Nombre VARCHAR (255) NOT NULL ," + " NIF VARCHAR (12) NOT NULL ," + " Provincia VARCHAR (50) NOT NULL ," + " Poblacion VARCHAR (255) NOT NULL ," + " CP INTEGER NOT NULL ," + " Calle VARCHAR (255) NOT NULL ," + " Numero VARCHAR (5) NOT NULL ," + " Central CHAR (1) NOT NULL ," + " Correo_electronico VARCHAR (100) NOT NULL ," + " tlf_Fijo INTEGER ," + " tlf_Movil INTEGER NOT NULL ," + " Fax INTEGER" + " )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS entradas" + " (" + " id_Entrada INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," + " fch_Entrada DATETIME NOT NULL ," + " Lugar VARCHAR (150) ," + " Observaciones VARCHAR (1000) ," + " id_Usuario INTEGER NOT NULL" + " )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS facturas" + " (" + " id_Factura INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," + " fch_Creacion DATETIME NOT NULL ," + " Concepto VARCHAR (1000) NOT NULL ," + " Observaciones VARCHAR (1000) ," + " Total DECIMAL(10,2) NOT NULL, " + " Forma_pago VARCHAR (50) NOT NULL " + " )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS materiales_presupuestos" + " (" + " id_Presupuesto INTEGER NOT NULL ," + " id_Stock INTEGER NOT NULL ," + " Cantidad FLOAT NOT NULL" + " )"); statement.executeUpdate( "ALTER TABLE materiales_presupuestos ADD CONSTRAINT PRIMARY KEY ( id_Presupuesto, id_Stock )"); statement.executeUpdate( "CREATE TABLE IF NOT EXISTS materiales_utilizados" + " (" + " id_Albaran INTEGER NOT NULL ," + " id_Stock INTEGER NOT NULL ," + " Cantidad FLOAT" + " ) "); statement.executeUpdate( "ALTER TABLE materiales_utilizados ADD CONSTRAINT PRIMARY KEY ( id_Albaran, id_Stock )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS presupuestos" + " (" + " id_Presupuesto INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," + " fch_Creacion DATETIME NOT NULL ," + " Concepto VARCHAR (1000) NOT NULL ," + " fch_Validez DATETIME NOT NULL ," + " Aceptado CHAR (1) NOT NULL ," + " Forma_pago VARCHAR (150) ," + " Adelanto DECIMAL(10,2) ," + " Plazo INTEGER NOT NULL ," + " Condiciones VARCHAR (1000) ," + " Seguro VARCHAR (500) ," + " Garantia VARCHAR (1000) ," + " Observaciones VARCHAR (1000) ," + " Total DECIMAL (10,2) NOT NULL," + " id_Entrada INTEGER NOT NULL" + " )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS proveedores" + " (" + " id_Proveedor INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," + " Nombre VARCHAR (255) NOT NULL ," + " NIF VARCHAR (12) NOT NULL ," + " Provincia VARCHAR (50) NOT NULL ," + " Poblacion VARCHAR (255) NOT NULL ," + " CP INTEGER NOT NULL ," + " Calle VARCHAR (255) NOT NULL ," + " Numero VARCHAR (5) NOT NULL ," + " Piso INTEGER ," + " Escalera VARCHAR (50) ," + " Puerta VARCHAR (5) ," + " tlf_Fijo INTEGER NOT NULL ," + " tlf_Movil INTEGER ," + " Fax INTEGER ," + " Correo_electronico VARCHAR (255) NOT NULL" + " )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS recibos" + " (" + " id_Recibo INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," + " fch_Creacion DATETIME NOT NULL ," + " Provincia VARCHAR (50) NOT NULL ," + " Poblacion VARCHAR (255) NOT NULL ," + " CP INTEGER NOT NULL ," + " Calle VARCHAR (255) NOT NULL ," + " Numero VARCHAR (5) NOT NULL ," + " Escalera VARCHAR (10) ," + " Piso INTEGER ," + " Puerta VARCHAR (5) ," + " Observaciones VARCHAR (1000) ," + " id_Factura INTEGER NOT NULL " + " )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS stock" + " (" + " id_Stock INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," + " Nombre VARCHAR (255) NOT NULL ," + " Descripcion VARCHAR (1000) ," + " Precio_compra DECIMAL(10,2) NOT NULL ," + " Unidades FLOAT NOT NULL ," + " Precio_venta DECIMAL(10,2) NOT NULL ," + " num_Alertar FLOAT NOT NULL ," + " id_Proveedor INTEGER NOT NULL" + " )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS trabajos_presupuestados" + " (" + " id_Usuario INTEGER NOT NULL ," + " id_Presupuesto INTEGER NOT NULL ," + " Horas DECIMAL(10,2) NOT NULL ," + " Descripcion VARCHAR (1000)" + " )"); statement.executeUpdate( "ALTER TABLE trabajos_presupuestados ADD CONSTRAINT PRIMARY KEY ( id_Usuario, id_Presupuesto )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS trabajos_realizados" + " (" + " id_Usuario INTEGER NOT NULL ," + " id_Albaran INTEGER NOT NULL ," + " Horas DECIMAL(10,2) ," + " Descripcion VARCHAR(1000)" + " )"); statement.executeUpdate( "ALTER TABLE trabajos_realizados ADD CONSTRAINT PRIMARY KEY ( id_Usuario, id_Albaran )"); statement.executeUpdate("CREATE TABLE IF NOT EXISTS usuarios" + " (" + " id_Usuario INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," + " Nombre VARCHAR (100) NOT NULL ," + " Apellidos VARCHAR (100) NOT NULL ," + " Gerente CHAR (1) NOT NULL ," + " DNI VARCHAR (12) NOT NULL ," + " id_Entidad INTEGER NOT NULL ," + " Provincia VARCHAR (50) NOT NULL ," + " Poblacion VARCHAR (150) NOT NULL ," + " CP INTEGER NOT NULL ," + " Calle VARCHAR (255) NOT NULL ," + " Numero VARCHAR (5) NOT NULL ," + " Escalera VARCHAR (10) ," + " Piso INTEGER ," + " Puerta VARCHAR (5) ," + " tlf_Fijo INTEGER ," + " tlf_Movil INTEGER NOT NULL ," + " Correo_electronico VARCHAR (255) NOT NULL UNIQUE," + " Password VARCHAR (100) NOT NULL ," + " Precio_hora DECIMAL(10,2) NOT NULL ," + " Sueldo_base DECIMAL(10,2) NOT NULL ," + " Activo CHAR (1) NOT NULL" + " )"); statement.executeUpdate( "ALTER TABLE albaranes ADD CONSTRAINT FOREIGN KEY ( id_Cliente ) REFERENCES clientes ( id_Cliente ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE albaranes ADD CONSTRAINT FOREIGN KEY ( id_Factura ) REFERENCES facturas ( id_Factura ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE albaranes ADD CONSTRAINT FOREIGN KEY ( id_Presupuesto ) REFERENCES presupuestos ( id_Presupuesto ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE aparatos ADD CONSTRAINT FOREIGN KEY ( id_Cliente ) REFERENCES clientes ( id_Cliente ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE averias ADD CONSTRAINT FOREIGN KEY ( id_Aparato ) REFERENCES aparatos ( id_Aparato ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE averias ADD CONSTRAINT FOREIGN KEY ( id_Entrada ) REFERENCES entradas ( id_Entrada ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE citas ADD CONSTRAINT FOREIGN KEY ( id_Cliente ) REFERENCES clientes ( id_Cliente ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE citas ADD CONSTRAINT FOREIGN KEY ( Direccion ) REFERENCES direccion_citas ( id_Direccion ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE citas_empleados ADD FOREIGN KEY ( id_Cita ) REFERENCES citas ( id_Cita ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE citas_empleados ADD FOREIGN KEY ( id_Usuario ) REFERENCES usuarios ( id_Usuario ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE citas ADD CONSTRAINT FOREIGN KEY ( id_Entrada ) REFERENCES entradas ( id_Entrada ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE entradas ADD CONSTRAINT FOREIGN KEY ( id_Usuario ) REFERENCES usuarios ( id_Usuario ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE materiales_presupuestos ADD CONSTRAINT FOREIGN KEY ( id_Presupuesto ) REFERENCES presupuestos ( id_Presupuesto ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE materiales_presupuestos ADD CONSTRAINT FOREIGN KEY ( id_Stock ) REFERENCES stock ( id_Stock ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE materiales_utilizados ADD CONSTRAINT FOREIGN KEY ( id_Albaran ) REFERENCES albaranes ( id_Albaran ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE materiales_utilizados ADD CONSTRAINT FOREIGN KEY ( id_Stock ) REFERENCES stock ( id_Stock ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE presupuestos ADD CONSTRAINT FOREIGN KEY ( id_Entrada ) REFERENCES entradas ( id_Entrada ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE recibos ADD CONSTRAINT FOREIGN KEY ( id_Factura ) REFERENCES facturas ( id_Factura ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE stock ADD CONSTRAINT FOREIGN KEY ( id_Proveedor ) REFERENCES proveedores ( id_Proveedor ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE trabajos_presupuestados ADD CONSTRAINT FOREIGN KEY ( id_Presupuesto ) REFERENCES presupuestos ( id_Presupuesto ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE trabajos_presupuestados ADD CONSTRAINT FOREIGN KEY ( id_Usuario ) REFERENCES usuarios ( id_Usuario ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE trabajos_realizados ADD CONSTRAINT FOREIGN KEY ( id_Albaran ) REFERENCES albaranes ( id_Albaran ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE trabajos_realizados ADD CONSTRAINT FOREIGN KEY ( id_Usuario ) REFERENCES usuarios ( id_Usuario ) ON DELETE CASCADE"); statement.executeUpdate( "ALTER TABLE usuarios ADD CONSTRAINT FOREIGN KEY ( id_Entidad ) REFERENCES entidades ( id_Entidad ) ON DELETE CASCADE"); MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); sha256.update(pass.getBytes("UTF-8")); byte[] digest = sha256.digest(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < digest.length; i++) { sb.append(String.format("%02x", digest[i])); } pass = sb.toString(); Gerente gerente = new Gerente(nombre, apellidos, dni, poblacion, provincia, cp, calle, numero, escalera, piso, puerta, tlfFijo, tlfMovil, sueldo, precioHora, email, nombreEmp, nif, provinciaEmp, poblacionEmp, cpEmp, calleEmp, numeroEmp, emailEmp, tlfFijoEmp, tlfMovilEmp, faxEmp); // Guardar en la base de datos entidad y gerente statement.executeUpdate("INSERT INTO entidades (Nombre,NIF, Provincia, Poblacion, " + "CP, Calle, Numero, Central, Correo_electronico, tlf_Fijo, " + "tlf_Movil, Fax) VALUES('" + nombreEmp + "','" + nif + "','" + provinciaEmp + "', '" + poblacionEmp + "', '" + Math.abs(cpEmp) + "', '" + calleEmp + "', '" + numeroEmp + "', '" + 1 + "', '" + emailEmp + "','" + Math.abs(tlfFijoEmp) + "','" + Math.abs(tlfMovilEmp) + "','" + Math.abs(faxEmp) + "')"); statement.executeUpdate("INSERT INTO usuarios (Nombre, Apellidos, " + "Gerente, DNI, id_Entidad, Provincia, Poblacion, CP, " + "Calle, Numero, Escalera, Piso, Puerta, tlf_Fijo, tlf_Movil, " + "Correo_electronico, Password, Precio_hora, Sueldo_base," + "Activo) VALUES ('" + nombre + "', '" + apellidos + "', '" + 1 + "'," + " '" + dni + "','" + 1 + "','" + provincia + "','" + poblacion + "'" + ",'" + Math.abs(cp) + "','" + calle + "','" + numero + "','" + escalera + "'," + "'" + Math.abs(piso) + "', '" + puerta + "', '" + Math.abs(tlfFijo) + "','" + Math.abs(tlfMovil) + "','" + email + "','" + pass + "','" + Math.abs(precioHora) + "','" + Math.abs(sueldo) + "','" + 1 + "' )"); statement.executeUpdate("INSERT INTO proveedores (Nombre, " + " NIF, Provincia, Poblacion, CP, " + "Calle, Numero, Escalera, Piso, Puerta, tlf_Fijo, tlf_Movil, " + "Correo_electronico, Fax) VALUES ('Autoservicio'," + " '" + nif + "','" + provinciaEmp + "','" + poblacionEmp + "'," + "'" + cpEmp + "','" + calleEmp + "','" + numeroEmp + "','0'," + "'0', '0', '" + Math.abs(tlfFijoEmp) + "','" + Math.abs(tlfMovilEmp) + "','" + emailEmp + "','" + Math.abs(faxEmp) + "')"); con.close(); empleado = gerente; return (Gerente) empleado; } catch (IOException ex) { System.out.println("Error Archivo"); System.out.println(ex.toString()); return null; } catch (SQLException ex) { System.out.println(ex.toString()); return null; } catch (NoSuchAlgorithmException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return null; } catch (ClassNotFoundException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return null; } } public Empleado getEmpleado() { return empleado; } public boolean actualizarUsuario(Empleado empleado, String newPass, int id) { try { Class.forName("com.mysql.jdbc.Driver"); Statement statement = con.createStatement(); int respuesta; String consulta = "Update usuarios SET " + "nombre='" + empleado.getNombre() + "'," + "apellidos='" + empleado.getApellidos() + "'," + "dni='" + empleado.getDni() + "'," + "provincia='" + empleado.getProvincia() + "'," + "poblacion='" + empleado.getPoblacion() + "'," + "cp='" + empleado.getCp() + "'," + "calle='" + empleado.getCalle() + "'," + "numero='" + empleado.getNumero() + "'," + "escalera='" + empleado.getEscalera() + "'," + "piso='" + empleado.getPiso() + "'," + "puerta='" + empleado.getPuerta() + "'," + "correo_electronico='" + empleado.getEmail() + "'," + "precio_hora='" + empleado.getPrecioHora() + "'," + "sueldo_base='" + empleado.getSueldoBase() + "'," + "tlf_Fijo='" + empleado.getTlfFijo() + "'," + "tlf_Movil='" + empleado.getTlfMovil() + "'"; if (!newPass.equals("")) { // Calcular el nou Hash MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); sha256.update(newPass.getBytes("UTF-8")); byte[] digest = sha256.digest(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < digest.length; i++) { sb.append(String.format("%02x", digest[i])); } consulta += " , password='" + sb.toString() + "'"; } consulta += " Where id_usuario='" + id + "'"; respuesta = statement.executeUpdate(consulta); if (respuesta > 0) return true; else return false; } catch (ClassNotFoundException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } catch (NoSuchAlgorithmException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } catch (UnsupportedEncodingException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public boolean actualizarOficina(Oficina oficina) { try { Class.forName("com.mysql.jdbc.Driver"); Statement statement = con.createStatement(); int respuesta = statement.executeUpdate("Update entidades SET " + "Nombre='" + oficina.getNombre() + "'," + "Nif='" + oficina.getNif() + "'," + "Provincia='" + oficina.getProvincia() + "'," + "Poblacion='" + oficina.getPoblacion() + "'," + "CP='" + oficina.getCp() + "'," + "Calle='" + oficina.getCalle() + "'," + "Numero='" + oficina.getNumero() + "'," + "Correo_electronico='" + oficina.getEmail() + "'," + "tlf_Fijo='" + oficina.getTlfFijo() + "'," + "tlf_Movil='" + oficina.getTlfMovil() + "'," + "Fax='" + oficina.getFax() + "'" + " Where id_Entidad='1'"); if (respuesta > 0) return true; else return false; } catch (ClassNotFoundException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public int getIva() { return iva; } public boolean actualizarConfiguracion(Vector<String> mySQL, Vector<String> confSeg, int iva, String logo) throws Exception { FileReader file; try { this.iva = Math.abs(iva); BufferedImage image = null; byte[] imageByte; BASE64Decoder decoder = new BASE64Decoder(); imageByte = decoder.decodeBuffer(logo.split(",")[1]); ByteArrayInputStream bis = new ByteArrayInputStream(imageByte); image = ImageIO.read(bis); bis.close(); // write the image to a file File outputfile = new File("logo"); String formato = logo.split("/")[1].split(";")[0]; ImageIO.write(image, formato, outputfile); // MySQL if (mySQL.elementAt(0).equals(this.mySQL.elementAt(0))) { if (!mySQL.elementAt(1).equals(this.mySQL.elementAt(1)) && !mySQL.elementAt(2).equals(this.mySQL.elementAt(2)) && (!mySQL.elementAt(3).equals(this.mySQL.elementAt(3)) || !mySQL.elementAt(0).equals(""))) { Class.forName("com.mysql.jdbc.Driver"); this.con.close(); this.con = DriverManager.getConnection("jdbc:mysql://" + mySQL.elementAt(0) + ":" + Math.abs(Integer.parseInt(mySQL.elementAt(1))) + "/gestosat?user=" + mySQL.elementAt(2) + "&password=" + mySQL.elementAt(3)); this.mySQL.set(0, mySQL.elementAt(0)); this.mySQL.set(1, Math.abs(Integer.parseInt(mySQL.elementAt(1))) + ""); this.mySQL.set(2, mySQL.elementAt(2)); this.mySQL.set(3, mySQL.elementAt(3)); } } else { // Comprobar que pass != "" Process pGet = Runtime.getRuntime() .exec("mysqldump -u " + this.mySQL.elementAt(2) + " -p" + this.mySQL.elementAt(3) + " -h " + this.mySQL.elementAt(0) + " -P " + this.mySQL.elementAt(1) + " gestosat"); InputStream is = pGet.getInputStream(); FileOutputStream fos = new FileOutputStream("backupGestoSAT.sql"); byte[] bufferOut = new byte[1000]; int leido = is.read(bufferOut); while (leido > 0) { fos.write(bufferOut, 0, leido); leido = is.read(bufferOut); } fos.close(); Class.forName("com.mysql.jdbc.Driver"); this.con.close(); this.con = DriverManager.getConnection( "jdbc:mysql://" + mySQL.elementAt(0) + ":" + Math.abs(Integer.parseInt(mySQL.elementAt(1))) + "/gestosat?user=" + mySQL.elementAt(2) + "&password=" + mySQL.elementAt(3)); this.mySQL.set(0, mySQL.elementAt(0)); this.mySQL.set(1, Math.abs(Integer.parseInt(mySQL.elementAt(1))) + ""); this.mySQL.set(2, mySQL.elementAt(2)); this.mySQL.set(3, mySQL.elementAt(3)); Process pPut = Runtime.getRuntime() .exec("mysql -u " + mySQL.elementAt(2) + " -p" + mySQL.elementAt(3) + " -h " + mySQL.elementAt(0) + " -P " + Math.abs(Integer.parseInt(mySQL.elementAt(1))) + " gestosat"); OutputStream os = pPut.getOutputStream(); FileInputStream fis = new FileInputStream("backupGestoSAT.sql"); byte[] bufferIn = new byte[1000]; int escrito = fis.read(bufferIn); while (escrito > 0) { os.write(bufferIn, 0, leido); escrito = fis.read(bufferIn); } os.flush(); os.close(); fis.close(); } // FTP FTPClient cliente = new FTPClient(); if (!confSeg.elementAt(3).equals("")) { cliente.connect(confSeg.elementAt(0), Integer.parseInt(confSeg.elementAt(1))); if (cliente.login(confSeg.elementAt(2), confSeg.elementAt(3))) { cliente.setFileType(FTP.BINARY_FILE_TYPE); BufferedInputStream buffIn = new BufferedInputStream(new FileInputStream("backupGestoSAT.sql")); cliente.enterLocalPassiveMode(); cliente.storeFile("backupGestoSAT.sql", buffIn); buffIn.close(); cliente.logout(); cliente.disconnect(); this.confSeg = confSeg; } else return false; } File archConf = new File("confGestoSAT"); BufferedWriter bw = new BufferedWriter(new FileWriter(archConf)); bw.write(this.mySQL.elementAt(0) + ";" + Math.abs(Integer.parseInt(this.mySQL.elementAt(1))) + ";" + this.mySQL.elementAt(2) + ";" + this.mySQL.elementAt(3) + ";" + this.confSeg.elementAt(0) + ";" + Math.abs(Integer.parseInt(this.confSeg.elementAt(1))) + ";" + this.confSeg.elementAt(2) + ";" + this.confSeg.elementAt(3) + ";" + Math.abs(iva)); bw.close(); return true; } catch (Exception ex) { file = new FileReader("confGestoSAT"); BufferedReader b = new BufferedReader(file); String cadena; cadena = b.readLine(); String[] valores = cadena.split(";"); this.mySQL.add(valores[0]); this.mySQL.add(Math.abs(Integer.parseInt(valores[1])) + ""); this.mySQL.add(valores[2]); this.mySQL.add(valores[3]); con.close(); Class.forName("com.mysql.jdbc.Driver"); con = DriverManager .getConnection("jdbc:mysql://" + this.mySQL.elementAt(0) + ":" + this.mySQL.elementAt(1) + "/gestosat?user=" + this.mySQL.elementAt(2) + "&password=" + this.mySQL.elementAt(3)); this.confSeg.add(valores[4]); this.confSeg.add(Math.abs(Integer.parseInt(valores[5])) + ""); this.confSeg.add(valores[6]); this.confSeg.add(valores[7]); file.close(); Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public Vector<String> getMySQLConf() { Vector<String> aux = new Vector<String>(); aux.add(mySQL.elementAt(0)); aux.add(mySQL.elementAt(1)); aux.add(mySQL.elementAt(2)); return aux; } public Vector<String> getConfSeg() { Vector<String> aux = new Vector<String>(); aux.add(confSeg.elementAt(0)); aux.add(confSeg.elementAt(1)); aux.add(confSeg.elementAt(2)); return aux; } public boolean crearEmpleado(Empleado e, String pass) { try { Statement st = con.createStatement(); MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); sha256.update(pass.getBytes("UTF-8")); byte[] digest = sha256.digest(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < digest.length; i++) { sb.append(String.format("%02x", digest[i])); } if (st.executeUpdate("INSERT INTO usuarios (Nombre, Apellidos, " + "Gerente, DNI, id_Entidad, Provincia, Poblacion, CP, " + "Calle, Numero, Escalera, Piso, Puerta, tlf_Fijo, tlf_Movil, " + "Correo_electronico, Password, Precio_hora, Sueldo_base," + "Activo) VALUES ('" + e.getNombre() + "', '" + e.getApellidos() + "', '" + 0 + "'," + " '" + e.getDni() + "','" + 1 + "','" + e.getProvincia() + "','" + e.getPoblacion() + "'" + ",'" + e.getCp() + "','" + e.getCalle() + "','" + e.getNumero() + "','" + e.getEscalera() + "'," + "'" + e.getPiso() + "', '" + e.getPuerta() + "', '" + e.getTlfFijo() + "','" + e.getTlfMovil() + "','" + e.getEmail() + "','" + sb.toString() + "','" + e.getPrecioHora() + "','" + e.getSueldoBase() + "','" + 1 + "' )") > 0) return true; else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public boolean crearGerente(Gerente g, String pass) { try { Statement st = con.createStatement(); MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); sha256.update(pass.getBytes("UTF-8")); byte[] digest = sha256.digest(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < digest.length; i++) { sb.append(String.format("%02x", digest[i])); } if (st.executeUpdate("INSERT INTO usuarios (Nombre, Apellidos, " + "Gerente, DNI, id_Entidad, Provincia, Poblacion, CP, " + "Calle, Numero, Escalera, Piso, Puerta, tlf_Fijo, tlf_Movil, " + "Correo_electronico, Password, Precio_hora, Sueldo_base," + "Activo) VALUES ('" + g.getNombre() + "', '" + g.getApellidos() + "', '" + 1 + "'," + " '" + g.getDni() + "','" + 1 + "','" + g.getProvincia() + "','" + g.getPoblacion() + "'" + ",'" + g.getCp() + "','" + g.getCalle() + "','" + g.getNumero() + "','" + g.getEscalera() + "'," + "'" + g.getPiso() + "', '" + g.getPuerta() + "', '" + g.getTlfFijo() + "','" + g.getTlfMovil() + "','" + g.getEmail() + "','" + sb.toString() + "','" + g.getPrecioHora() + "','" + g.getSueldoBase() + "','" + 1 + "' )") > 0) return true; else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public Map getEmpleados(int id) { try { Statement st = con.createStatement(); ResultSet res = st.executeQuery("Select * From usuarios Where id_Usuario !='" + id + "'"); boolean activo; while (res.next()) { if ((res.getString("activo")).equals("1")) activo = true; else activo = false; if ((res.getString("Gerente")).equals("0")) empleados.put(res.getInt("id_Usuario"), new Empleado(res.getString("Nombre"), res.getString("Apellidos"), res.getString("DNI"), res.getString("Poblacion"), res.getString("Provincia"), res.getInt("CP"), res.getString("Calle"), res.getString("Numero"), res.getString("Escalera"), res.getInt("Piso"), res.getString("Puerta"), res.getInt("tlf_Fijo"), res.getInt("tlf_Movil"), res.getFloat("Sueldo_base"), res.getFloat("Precio_hora"), res.getString("Correo_electronico"), activo)); else empleados.put(res.getInt("id_Usuario"), new Gerente(res.getString("Nombre"), res.getString("Apellidos"), res.getString("DNI"), res.getString("Poblacion"), res.getString("Provincia"), res.getInt("CP"), res.getString("Calle"), res.getString("Numero"), res.getString("Escalera"), res.getInt("Piso"), res.getString("Puerta"), res.getInt("tlf_Fijo"), res.getInt("tlf_Movil"), res.getFloat("Sueldo_base"), res.getFloat("Precio_hora"), res.getString("Correo_electronico"), activo)); } return empleados; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return null; } } public Map getEmpleados() { try { Statement st = con.createStatement(); ResultSet res = st.executeQuery("Select * From usuarios Where activo=1"); while (res.next()) { if ((res.getString("Gerente")).equals("0")) empleados.put(res.getInt("id_Usuario"), new Empleado(res.getString("Nombre"), res.getString("Apellidos"), res.getString("DNI"), res.getString("Poblacion"), res.getString("Provincia"), res.getInt("CP"), res.getString("Calle"), res.getString("Numero"), res.getString("Escalera"), res.getInt("Piso"), res.getString("Puerta"), res.getInt("tlf_Fijo"), res.getInt("tlf_Movil"), res.getFloat("Sueldo_base"), res.getFloat("Precio_hora"), res.getString("Correo_electronico"), res.getBoolean("activo"))); else empleados.put(res.getInt("id_Usuario"), new Gerente(res.getString("Nombre"), res.getString("Apellidos"), res.getString("DNI"), res.getString("Poblacion"), res.getString("Provincia"), res.getInt("CP"), res.getString("Calle"), res.getString("Numero"), res.getString("Escalera"), res.getInt("Piso"), res.getString("Puerta"), res.getInt("tlf_Fijo"), res.getInt("tlf_Movil"), res.getFloat("Sueldo_base"), res.getFloat("Precio_hora"), res.getString("Correo_electronico"), res.getBoolean("activo"))); } return empleados; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return null; } } public Empleado getEmpleado(int id) { return (Empleado) empleados.get(id); } public Empleado cambiarUsuario(int id) { Empleado aux = (Empleado) empleados.get(id); if (aux.getClass().getName().equals("GestoSAT.Empleado")) empleados.put(id, new Gerente(aux.getNombre(), aux.getApellidos(), aux.getDni(), aux.getPoblacion(), aux.getProvincia(), aux.getCp(), aux.getCalle(), aux.getNumero(), aux.getEscalera(), aux.getPiso(), aux.getPuerta(), aux.getTlfFijo(), aux.getTlfMovil(), aux.getSueldoBase(), aux.getPrecioHora(), aux.getEmail(), aux.isActivo())); else empleados.put(id, new Empleado(aux.getNombre(), aux.getApellidos(), aux.getDni(), aux.getPoblacion(), aux.getProvincia(), aux.getCp(), aux.getCalle(), aux.getNumero(), aux.getEscalera(), aux.getPiso(), aux.getPuerta(), aux.getTlfFijo(), aux.getTlfMovil(), aux.getSueldoBase(), aux.getPrecioHora(), aux.getEmail(), aux.isActivo())); return (Empleado) (empleados.get(id)); } public boolean guardarEmpleado(Empleado emp, int id) { try { Statement st = con.createStatement(); int rango; if (emp.getClass().getName().equals("GestoSAT.Empleado")) rango = 0; else rango = 1; Class.forName("com.mysql.jdbc.Driver"); if (st.executeUpdate("Update usuarios SET Precio_hora='" + emp.getPrecioHora() + "'," + " Sueldo_base='" + emp.getSueldoBase() + "'," + "Gerente='" + rango + "' Where id_Usuario='" + id + "'") > 0) return true; else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public boolean deleteUser(int id) { try { Statement st = con.createStatement(); Class.forName("com.mysql.jdbc.Driver"); if (st.executeUpdate("DELETE FROM usuarios Where id_Usuario='" + id + "'") > 0) { empleados.remove(id); return true; } else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public boolean desactivar(int id) { try { Statement st = con.createStatement(); Class.forName("com.mysql.jdbc.Driver"); if (st.executeUpdate("Update usuarios SET Activo='0' Where id_Usuario='" + id + "'") > 0) return true; else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public boolean activar(int id) { try { Statement st = con.createStatement(); Class.forName("com.mysql.jdbc.Driver"); if (st.executeUpdate("Update usuarios SET Activo='1' Where id_Usuario='" + id + "'") > 0) return true; else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public boolean crearProveedor(Proveedor p) { try { Class.forName("com.mysql.jdbc.Driver"); Statement st = con.createStatement(); if (st.executeUpdate("INSERT INTO proveedores (Nombre, " + " NIF, Provincia, Poblacion, CP, " + "Calle, Numero, Escalera, Piso, Puerta, tlf_Fijo, tlf_Movil, " + "Correo_electronico, Fax) VALUES ('" + p.getNombre() + "'," + " '" + p.getNif() + "','" + p.getProvincia() + "','" + p.getPoblacion() + "'" + ",'" + p.getCp() + "','" + p.getCalle() + "','" + p.getNumero() + "','" + p.getEscalera() + "'," + "'" + p.getPiso() + "', '" + p.getPuerta() + "', '" + p.getTlfFijo() + "','" + p.getTlfMovil() + "','" + p.getEmail() + "','" + p.getFax() + "')") > 0) return true; else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public Map getProveedores() { try { Statement st = con.createStatement(); ResultSet res = st.executeQuery("Select * From proveedores"); while (res.next()) if (this.proveedor.putIfAbsent(res.getInt("id_Proveedor"), new Proveedor(res.getString("Nombre"), res.getString("NIF"), res.getString("Provincia"), res.getString("Poblacion"), res.getInt("CP"), res.getString("Calle"), res.getString("Numero"), res.getString("Escalera"), res.getInt("Piso"), res.getString("Puerta"), res.getInt("tlf_Fijo"), res.getInt("tlf_Movil"), res.getString("Correo_electronico"), res.getInt("Fax"), this)) != null) ((Proveedor) this.proveedor.get(res.getInt("id_Proveedor"))).actualizar(res.getString("Nombre"), res.getString("NIF"), res.getString("Provincia"), res.getString("Poblacion"), res.getInt("CP"), res.getString("Calle"), res.getString("Numero"), res.getString("Escalera"), res.getInt("Piso"), res.getString("Puerta"), res.getInt("tlf_Fijo"), res.getInt("tlf_Movil"), res.getString("Correo_electronico"), res.getInt("Fax")); st.close(); return this.proveedor; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return new HashMap(); } } public boolean eliminarProveedor(int id) { try { Statement st = con.createStatement(); Class.forName("com.mysql.jdbc.Driver"); if (st.executeUpdate("DELETE FROM proveedores Where id_Proveedor='" + id + "'") > 0) { proveedor.remove(id); return true; } else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public Proveedor getProveedor(int id) { return (Proveedor) proveedor.get(id); } //Modificar proveedor public boolean modificarProveedor(int id, Proveedor prov) { try { Statement st = con.createStatement(); Class.forName("com.mysql.jdbc.Driver"); if (st.executeUpdate("Update proveedores SET " + "Nombre='" + prov.getNombre() + "'," + "NIF='" + prov.getNif() + "'," + "Provincia='" + prov.getProvincia() + "'," + "Poblacion='" + prov.getPoblacion() + "'," + "CP='" + prov.getCp() + "'," + "Calle='" + prov.getCalle() + "'," + "Numero='" + prov.getNumero() + "'," + "Escalera='" + prov.getEscalera() + "'," + "Piso='" + prov.getPiso() + "'," + "Puerta='" + prov.getPuerta() + "'," + "tlf_Fijo='" + prov.getTlfFijo() + "'," + "tlf_Movil='" + prov.getTlfMovil() + "'," + "Correo_electronico='" + prov.getEmail() + "'," + "Fax='" + prov.getFax() + "'" + " Where id_Proveedor='" + id + "'") > 0) return true; else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public boolean addStock(int id, Stock s) { try { Class.forName("com.mysql.jdbc.Driver"); Statement st = con.createStatement(); Statement stStock = con.createStatement(); if (st.executeUpdate("INSERT INTO stock (Nombre, Descripcion, Precio_compra," + "Unidades, Precio_venta, num_Alertar,id_Proveedor) VALUES (" + "'" + s.getNombre() + "','" + s.getDescripcion() + "','" + s.getPrecioCompra() + "'," + "'" + Math.abs(s.getCantidad()) + "','" + s.getPrecioUnidad() + "','" + Math.abs(s.getAlerta()) + "'," + "'" + id + "')") > 0) { // Rcuperar datos ResultSet res = stStock.executeQuery("Select id_Stock FROM stock WHERE id_Proveedor='" + id + "' AND Nombre ='" + s.getNombre() + "' ORDER BY id_Proveedor DESC"); res.next(); this.getProveedor(id).setStock(res.getInt("id_Stock"), s); return true; } else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public Map getStock() { try { Map stock = new HashMap(); Class.forName("com.mysql.jdbc.Driver"); Statement st = con.createStatement(); ResultSet res = st.executeQuery( "Select * From stock S INNER JOIN proveedores P ON S.id_proveedor = P.id_Proveedor"); Proveedor p; this.getProveedores(); while (res.next()) { p = (Proveedor) this.proveedor.get(res.getInt("P.id_Proveedor")); Stock s = new Stock(res.getString("S.Nombre"), res.getFloat("S.Unidades"), res.getFloat("S.Precio_venta"), (String) res.getObject("S.Descripcion"), res.getFloat("S.Precio_compra"), res.getFloat("S.num_Alertar"), p); s = p.setStock(res.getInt("s.id_Stock"), s); stock.putIfAbsent(res.getInt("S.id_Stock"), s); } return stock; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return new HashMap(); } } public boolean actualizarStock(int id, float cantidad) { try { Class.forName("com.mysql.jdbc.Driver"); Statement st = con.createStatement(); ResultSet res = st.executeQuery("Select Unidades From stock Where id_Stock='" + id + "'"); if (res.next()) { if (st.executeUpdate("Update stock SET Unidades='" + (Math.abs(cantidad) + res.getFloat("Unidades")) + "' Where id_Stock='" + id + "'") > 0) return true; else return false; } else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public boolean actualizarStock(Integer id, String nombre, String desc, float precioCompra, float precioVenta, float alerta) { try { Statement st = con.createStatement(); Class.forName("com.mysql.jdbc.Driver"); if (st.executeUpdate("Update stock SET " + "Nombre='" + nombre + "'," + "Descripcion='" + desc + "'," + "Precio_compra='" + Math.abs(precioCompra) + "'," + "Precio_venta='" + Math.abs(precioVenta) + "'," + "num_Alertar='" + Math.abs(alerta) + "'" + " Where id_Stock='" + id + "'") > 0) return true; else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public int crearCliente(Cliente cliente) { try { Class.forName("com.mysql.jdbc.Driver"); Statement st = con.createStatement(); st.executeUpdate("INSERT INTO clientes (Nombre, Apellidos," + " NIF, Provincia, Poblacion, CP, " + "Calle, Numero, Escalera, Piso, Puerta, tlf_Contacto, tlf_Auxiliar, " + "Correo_electronico, Observaciones) VALUES ('" + cliente.getNombre() + "'," + "'" + cliente.getApellidos() + "'," + " '" + cliente.getNif() + "','" + cliente.getProvincia() + "','" + cliente.getPoblacion() + "'" + ",'" + cliente.getCp() + "','" + cliente.getCalle() + "','" + cliente.getNumero() + "','" + cliente.getEscalera() + "'," + "'" + cliente.getPiso() + "', '" + cliente.getPuerta() + "', '" + cliente.getTlfFijo() + "','" + cliente.getTlfMovil() + "','" + cliente.getEmail() + "','" + cliente.getObservaciones() + "')"); ResultSet res = st.executeQuery("SELECT * FROM clientes Order BY id_Cliente DESC"); if (res.next()) { int id = res.getInt("id_Cliente"); this.cliente.putIfAbsent(id, cliente); st.close(); return id; } else { st.close(); return 0; } } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return 0; } } public int guardarAparato(Aparato aparato, int id) { try { Class.forName("com.mysql.jdbc.Driver"); Statement st = con.createStatement(); st.executeUpdate("INSERT INTO aparatos (Tipo, Marca," + " Modelo, Color, Numero_serie, Observaciones, id_Cliente)" + " VALUES ('" + aparato.getTipo() + "'," + "'" + aparato.getMarca() + "'," + " '" + aparato.getModelo() + "','" + aparato.getColor() + "','" + aparato.getNumSerie() + "'" + ",'" + aparato.getObservaciones() + "','" + id + "')"); st.close(); st = con.createStatement(); ResultSet res = st.executeQuery("SELECT * FROM aparatos Order BY id_Aparato DESC"); if (res.next()) { int id_Aparato = res.getInt("id_Aparato"); st.close(); aparato.getCliente().setAparato(aparato, id_Aparato); return id_Aparato; } else { st.close(); return 0; } } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return 0; } } public int guardarEntrada(Entrada entrada, int id_Usuario) { try { Class.forName("com.mysql.jdbc.Driver"); Statement st = con.createStatement(); st.executeUpdate( "INSERT INTO entradas (fch_Entrada, Lugar," + " Observaciones, id_Usuario)" + " VALUES ('" + ((new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")) .format(entrada.getFchCreacion())) + "'," + "'" + entrada.getLugar() + "'," + " '" + entrada.getObservaciones() + "','" + id_Usuario + "')"); st.close(); st = con.createStatement(); ResultSet res = st.executeQuery("SELECT * FROM entradas Order BY id_Entrada DESC"); if (res.next()) { int id_Entrada = res.getInt("id_Entrada"); st.close(); entrada.getCliente().setEntrada(id_Entrada, entrada); this.documento.put(id_Entrada + ";Entrada", entrada); return id_Entrada; } else { st.close(); return 0; } } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return 0; } } public void guardarAveria(Averia averia, int id_Entrada, int id_Aparato) { try { Class.forName("com.mysql.jdbc.Driver"); Statement st = con.createStatement(); st.executeUpdate("INSERT INTO averias (id_Entrada, id_Aparato," + " Motivo, Descripcion)" + " VALUES ('" + id_Entrada + "'," + "'" + id_Aparato + "'," + " '" + averia.getMotivo() + "','" + averia.getObservaciones() + "')"); st.close(); } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); } } public Map getCliente() { try { Statement st = con.createStatement(); ResultSet res = st.executeQuery( "Select C.*, GROUP_CONCAT(REPLACE(A.Observaciones,',','~')) Observaciones_Aparato," + " GROUP_CONCAT(A.id_Aparato) id_Aparato, GROUP_CONCAT(A.Marca) Marca," + " GROUP_CONCAT(A.Tipo) Tipo, GROUP_CONCAT(A.Modelo) Modelo," + " GROUP_CONCAT(A.Color) Color, GROUP_CONCAT(A.Numero_Serie) Numero_Serie" + " From clientes C LEFT JOIN aparatos A ON C.id_Cliente = A.id_Cliente GROUP BY C.id_Cliente"); String[] ids_Aparato; String[] tipos; String[] marcas; String[] modelos; String[] colores; String[] numeros_Serie; String[] observaciones; Map aparatos; while (res.next()) { aparatos = new HashMap(); if (res.getString("id_Aparato") != null) { // Clients que tenen aparatos ids_Aparato = res.getString("id_Aparato").split(","); tipos = res.getString("Tipo").replaceAll(",", " , ").split(","); marcas = res.getString("Marca").replaceAll(",", " , ").split(","); modelos = res.getString("Modelo").replaceAll(",", " , ").split(","); colores = res.getString("Color").replaceAll(",", " , ").split(","); numeros_Serie = res.getString("Numero_Serie").replaceAll(",", " , ").split(","); observaciones = res.getString("Observaciones_Aparato").replaceAll(",", " , ").split(","); for (int i = 0; i < ids_Aparato.length; i++) aparatos.put(Integer.parseInt(ids_Aparato[i]), new Aparato(tipos[i].replaceFirst(" ", ""), marcas[i].replaceFirst(" ", ""), modelos[i].replaceFirst(" ", ""), colores[i].replaceFirst(" ", ""), numeros_Serie[i].replaceFirst(" ", ""), observaciones[i].replaceFirst(" ", ""))); } cliente.putIfAbsent(res.getInt("id_Cliente"), new Cliente(res.getString("C.Nombre"), res.getString("C.Apellidos"), res.getString("C.NIF"), res.getString("C.Provincia"), res.getString("C.Poblacion"), res.getInt("C.CP"), res.getString("C.Calle"), res.getString("C.Numero"), res.getString("C.Escalera"), res.getInt("C.Piso"), res.getString("C.Puerta"), res.getInt("C.tlf_Contacto"), res.getInt("C.tlf_Auxiliar"), res.getString("C.Correo_electronico"), res.getString("C.Observaciones"), aparatos, this)); } return cliente; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return null; } } public Cliente getCliente(int id) { if (cliente.get(id) == null) { Statement st; try { st = con.createStatement(); ResultSet res = st.executeQuery("SELECT * FROM clientes WHERE id_cliente=" + id); if (res.next()) this.cliente.put(id, new Cliente(res.getString("nombre"), res.getString("apellidos"), res.getString("nif"), res.getString("provincia"), res.getString("poblacion"), res.getInt("cp"), res.getString("calle"), res.getString("numero"), res.getString("escalera"), res.getInt("piso"), res.getString("puerta"), res.getInt("tlf_contacto"), res.getInt("tlf_auxiliar"), res.getString("correo_electronico"), res.getString("observaciones"), this)); } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); } } return (Cliente) cliente.get(id); } public int guardarDireccion(String provincia, String poblacion, int cp, String calle, String numero, String escalera, int piso, String puerta, String observaciones) { try { Class.forName("com.mysql.jdbc.Driver"); Statement st = con.createStatement(); st.executeUpdate("INSERT INTO direccion_citas (Provincia, Poblacion," + "CP, Calle, Numero, Escalera, Piso, Puerta, Observaciones)" + " VALUES ('" + provincia + "','" + poblacion + "','" + Math.abs(cp) + "'," + "'" + calle + "','" + numero + "','" + escalera + "','" + Math.abs(piso) + "'," + "'" + puerta + "','" + observaciones + "')"); ResultSet res = st.executeQuery("SELECT * FROM direccion_citas Order by id_Direccion DESC"); res.next(); int id = res.getInt("id_Direccion"); st.close(); return id; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return 0; } } public void guardarCita(Cita cita, int id_Cliente, int id_Entrada, int direccion) { try { Class.forName("com.mysql.jdbc.Driver"); Statement st = con.createStatement(); st.executeUpdate("INSERT INTO citas (fch_Cita, Motivo, Direccion, " + "Observaciones, id_Cliente, id_Entrada)" + " VALUES ('" + ((new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(cita.getFchCita())) + "', " + "'" + cita.getMotivo() + "', '" + direccion + "', '" + cita.getObservaciones() + "', " + "'" + id_Cliente + "','" + id_Entrada + "')"); st.close(); } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); } } public Map getAparatosCliente(int idCliente) { return ((Cliente) this.cliente.get(idCliente)).getAparatos(); } public Map getCitas(int id_Cliente) { try { Statement st = con.createStatement(); ResultSet res = st .executeQuery("Select id_Direccion, IF(DC.Provincia <> '0', DC.Provincia,'') Provincia," + "IF(DC.Poblacion <>'0',DC.Poblacion,'') Poblacion, " + "IF(DC.CP>0,DC.CP,'') CP, IF(DC.Calle<>'0',DC.Calle,'') Calle, " + "IF(DC.Numero<>'0',DC.Numero,'') Numero, IF(DC.Escalera<>'0',DC.Escalera,'') Escalera," + "IF(DC.Piso>0,DC.Piso,'') Piso, IF(DC.Puerta<>'0',DC.Puerta,'') Puerta, " + "if(DC.Observaciones<>'0',DC.Observaciones,'') Observaciones " + "From citas C INNER JOIN direccion_citas DC ON C.Direccion = DC.id_Direccion " + "Where C.id_Cliente=" + id_Cliente + " GROUP BY DC.id_Direccion"); Map citas = new HashMap(); Map valores; while (res.next()) { valores = new HashMap(); valores.put("provincia", res.getString("Provincia")); valores.put("poblacion", res.getString("Poblacion")); valores.put("cp", res.getString("CP")); valores.put("calle", res.getString("Calle")); valores.put("numero", res.getString("Numero")); valores.put("escalera", res.getString("Escalera")); valores.put("piso", res.getString("Piso")); valores.put("puerta", res.getString("Puerta")); valores.put("observaciones", res.getString("Observaciones")); citas.put(res.getInt("id_Direccion"), valores); } return citas; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return null; } } public Map entradasPendientes() { try { Statement st = con.createStatement(); ResultSet res = st .executeQuery("Select e.*, cli.*,av.*, ap.* FROM (entradas e LEFT JOIN (presupuestos p " + "LEFT JOIN albaranes a ON p.id_Presupuesto = a.id_Presupuesto) ON e.id_Entrada = p.id_Entrada ) INNER JOIN " + "((clientes cli INNER JOIN aparatos ap ON cli.id_Cliente = ap.id_Cliente) INNER JOIN averias av ON " + "ap.id_Aparato = av.id_Aparato) ON av.id_Entrada = e.id_Entrada WHERE a.id_albaran IS NULL ORDER BY fch_Entrada DESC "); Map entradas = new HashMap(); Cliente cli; Entrada entrada; while (res.next()) { if (this.documento.get(res.getString("id_Entrada") + ";Entrada") == null) { if (this.cliente.get(res.getInt("cli.id_Cliente")) == null) { cli = new Cliente(res.getString("cli.nombre"), res.getString("cli.apellidos"), res.getString("cli.nif"), res.getString("cli.provincia"), res.getString("cli.poblacion"), res.getInt("cli.cp"), res.getString("cli.calle"), res.getString("cli.numero"), res.getString("cli.escalera"), res.getInt("cli.piso"), res.getString("cli.puerta"), res.getInt("cli.tlf_Contacto"), res.getInt("cli.tlf_Auxiliar"), res.getString("cli.correo_electronico"), res.getString("cli.observaciones"), this); this.cliente.putIfAbsent(res.getInt("cli.id_Cliente"), cli); } else { cli = (Cliente) this.cliente.get(res.getInt("cli.id_Cliente")); } entrada = new Entrada(res.getString("e.observaciones"), res.getString("e.lugar"), res.getTimestamp("e.fch_Entrada"), this, cli, new Averia(res.getString("av.motivo"), res.getString("av.descripcion"), new Aparato(res.getString("ap.tipo"), res.getString("ap.marca"), res.getString("ap.modelo"), res.getString("ap.color"), res.getString("ap.numero_serie"), res.getString("ap.observaciones"), cli, res.getInt("ap.id_Aparato")), null)); cli.setEntrada(res.getInt("id_Entrada"), entrada); entradas.put(res.getString("id_Entrada") + ";Entrada", entrada); } else { entrada = (Entrada) this.documento.get(res.getString("id_Entrada") + ";Entrada"); entrada.actualizar(res.getString("e.observaciones"), res.getString("e.lugar"), res.getString("av.motivo")); entradas.put(res.getString("id_Entrada") + ";Entrada", entrada); } } this.documento.putAll(entradas); return entradas; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return null; } } public Map getProximasCitas() { try { Statement st = con.createStatement(); // Recuperar citas y no averias ResultSet res = st.executeQuery( "Select e.*, cli.*,cita.*, dir.*, GROUP_CONCAT(c_e.id_Usuario) empleados FROM (entradas e LEFT JOIN" + " (presupuestos p LEFT JOIN albaranes a ON p.id_Presupuesto = a.id_Presupuesto) ON e.id_Entrada = p.id_Entrada) INNER JOIN " + "((direccion_citas dir INNER JOIN ((citas cita LEFT JOIN citas_empleados c_e ON cita.id_Cita = c_e.id_Cita)" + " LEFT JOIN usuarios u ON u.id_Usuario = c_e.id_Usuario) ON cita.Direccion = dir.id_Direccion )" + " INNER JOIN clientes cli ON cli.id_Cliente = cita.id_Cliente) ON e.id_entrada = cita.id_Entrada" + " WHERE a.id_albaran IS NULL GROUP BY cita.id_Cita ORDER BY fch_Entrada DESC"); Map citas = new HashMap(); Cliente cli; Entrada entrada; while (res.next()) { Map aux_empleados = new HashMap(); if (res.getString("empleados") != null) { String[] aux = res.getString("empleados").split(","); for (int i = 0; i < aux.length; i++) aux_empleados.put(aux[i], this.getEmpleado(Integer.parseInt(aux[i]))); } if (this.documento.get(res.getString("id_Entrada") + ";Entrada") == null) { if (this.cliente.get(res.getInt("cli.id_Cliente")) == null) { cli = new Cliente(res.getString("cli.nombre"), res.getString("cli.apellidos"), res.getString("cli.nif"), res.getString("cli.provincia"), res.getString("cli.poblacion"), res.getInt("cli.cp"), res.getString("cli.calle"), res.getString("cli.numero"), res.getString("cli.escalera"), res.getInt("cli.piso"), res.getString("cli.puerta"), res.getInt("cli.tlf_Contacto"), res.getInt("cli.tlf_Auxiliar"), res.getString("cli.correo_electronico"), res.getString("cli.observaciones"), this); this.cliente.putIfAbsent(res.getInt("cli.id_Cliente"), cli); } else { cli = (Cliente) this.cliente.get(res.getInt("cli.id_Cliente")); } entrada = new Entrada(res.getString("e.observaciones"), res.getString("e.lugar"), res.getTimestamp("e.fch_Entrada"), this, cli, new Cita(res.getTimestamp("cita.fch_Cita"), res.getString("dir.provincia"), res.getString("dir.poblacion"), res.getInt("dir.cp"), res.getString("dir.calle"), res.getString("dir.numero"), res.getString("dir.escalera"), res.getInt("dir.piso"), res.getString("dir.puerta"), aux_empleados, res.getString("cita.motivo"), res.getString("cita.observaciones"), res.getString("dir.observaciones"), null)); cli.setEntrada(res.getInt("id_Entrada"), entrada); citas.put(res.getString("id_Entrada") + ";Entrada", entrada); } else { entrada = (Entrada) this.documento.get(res.getString("id_Entrada") + ";Entrada"); entrada.actualizar(res.getString("e.observaciones"), res.getTimestamp("cita.fch_Cita"), res.getString("cita.motivo"), res.getString("cita.observaciones"), aux_empleados); citas.put(res.getString("id_Entrada") + ";Entrada", entrada); } } this.documento.putAll(citas); return citas; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return null; } } public Map getCitasPendientes() { // Problemes en allbaran try { Calendar next7Days = Calendar.getInstance(); next7Days.setTime(new Date()); next7Days.add(Calendar.DAY_OF_YEAR, 7); Statement st = con.createStatement(); // Recuperar citas hoy ResultSet res = st.executeQuery( "Select e.*, cli.*,cita.*, dir.*, GROUP_CONCAT(c_e.id_Usuario) empleados FROM (entradas e LEFT JOIN " + " (presupuestos p LEFT JOIN albaranes a ON p.id_Presupuesto = a.id_Presupuesto) ON e.id_Entrada = p.id_Entrada) INNER JOIN " + " ((direccion_citas dir INNER JOIN ((citas cita LEFT JOIN citas_empleados c_e ON " + " c_e.id_Cita = cita.id_Cita) LEFT JOIN usuarios u ON c_e.id_Usuario = u.id_Usuario)" + " ON cita.Direccion = dir.id_Direccion )" + " INNER JOIN clientes cli ON cli.id_Cliente = cita.id_Cliente) ON e.id_entrada = cita.id_Entrada" + " Where a.id_albaran IS NULL AND cita.fch_Cita <= '" + ((new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(next7Days.getTime())) + "'" // Next 7 days + " GROUP BY cita.id_Cita ORDER BY cita.fch_Cita DESC"); Map citas = new HashMap(); Cliente cli; Entrada entrada; while (res.next()) { // Cambiar por citas Map aux_empleados = new HashMap(); if (res.getString("empleados") != null) { String[] aux = res.getString("empleados").split(","); for (int i = 0; i < aux.length; i++) aux_empleados.put(aux[i], this.getEmpleado(Integer.parseInt(aux[i]))); } if (this.documento.get(res.getString("id_Entrada") + ";Entrada") == null) { if (this.cliente.get(res.getInt("cli.id_Cliente")) == null) { cli = new Cliente(res.getString("cli.nombre"), res.getString("cli.apellidos"), res.getString("cli.nif"), res.getString("cli.provincia"), res.getString("cli.poblacion"), res.getInt("cli.cp"), res.getString("cli.calle"), res.getString("cli.numero"), res.getString("cli.escalera"), res.getInt("cli.piso"), res.getString("cli.puerta"), res.getInt("cli.tlf_Contacto"), res.getInt("cli.tlf_Auxiliar"), res.getString("cli.correo_electronico"), res.getString("cli.observaciones"), this); this.cliente.putIfAbsent(res.getInt("cli.id_Cliente"), cli); } else { cli = (Cliente) this.cliente.get(res.getInt("cli.id_Cliente")); } Entrada e = new Entrada(res.getString("e.observaciones"), res.getString("e.lugar"), res.getTimestamp("e.fch_Entrada"), this, cli, new Cita(res.getTimestamp("cita.fch_Cita"), res.getString("dir.provincia"), res.getString("dir.poblacion"), res.getInt("dir.cp"), res.getString("dir.calle"), res.getString("dir.numero"), res.getString("dir.escalera"), res.getInt("dir.piso"), res.getString("dir.puerta"), aux_empleados, res.getString("cita.motivo"), res.getString("cita.observaciones"), res.getString("dir.observaciones"), null)); cli.setEntrada(res.getInt("id_Entrada"), e); if (((Entrada) this.documento.get(res.getString("id_Entrada") + ";Entrada")) != null) if (((Entrada) this.documento.get(res.getString("id_Entrada") + ";Entrada")) .getPresupuesto() != null) { e.setPresupuesto( ((Entrada) this.documento.get(res.getString("id_Entrada") + ";Entrada")) .getPresupuesto()); e.getPresupuesto().setEntrada(e); } citas.put(res.getString("id_Entrada") + ";Entrada", e); } else { entrada = (Entrada) this.documento.get(res.getString("id_Entrada") + ";Entrada"); entrada.actualizar(res.getString("e.observaciones"), res.getTimestamp("cita.fch_Cita"), res.getString("cita.motivo"), res.getString("cita.observaciones"), aux_empleados); citas.put(res.getString("id_Entrada") + ";Entrada", entrada); } } this.documento.putAll(citas); return citas; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return null; } } public Map getEntradasPendientes() { Map entradas = new HashMap(); entradas.putAll(this.getProximasCitas()); entradas.putAll(this.entradasPendientes()); return entradas; } public Entrada getEntrada(int idEntrada) { if (this.documento.get(idEntrada + ";Entrada") != null) return (Entrada) this.documento.get(idEntrada + ";Entrada"); else { try { Statement st = con.createStatement(); ResultSet res = st .executeQuery("Select e.*, cli.*,av.*, ap.* FROM (entradas e LEFT JOIN (presupuestos p " + "LEFT JOIN albaranes a ON p.id_Presupuesto = a.id_Presupuesto) ON e.id_Entrada = p.id_Entrada ) INNER JOIN " + "((clientes cli INNER JOIN aparatos ap ON cli.id_Cliente = ap.id_Cliente) INNER JOIN averias av ON " + "ap.id_Aparato = av.id_Aparato) ON av.id_Entrada = e.id_Entrada WHERE e.id_Entrada=" + idEntrada + " ORDER BY fch_Entrada DESC"); Entrada entrada = null; Cliente cli; if (res.next()) { if (this.cliente.get(res.getInt("cli.id_Cliente")) == null) { cli = new Cliente(res.getString("cli.nombre"), res.getString("cli.apellidos"), res.getString("cli.nif"), res.getString("cli.provincia"), res.getString("cli.poblacion"), res.getInt("cli.cp"), res.getString("cli.calle"), res.getString("cli.numero"), res.getString("cli.escalera"), res.getInt("cli.piso"), res.getString("cli.puerta"), res.getInt("cli.tlf_Contacto"), res.getInt("cli.tlf_Auxiliar"), res.getString("cli.correo_electronico"), res.getString("cli.observaciones"), this); this.cliente.putIfAbsent(res.getInt("cli.id_Cliente"), cli); } else { cli = (Cliente) this.cliente.get(res.getInt("cli.id_Cliente")); } entrada = new Entrada(res.getString("e.observaciones"), res.getString("e.lugar"), res.getTimestamp("e.fch_Entrada"), this, cli, new Averia(res.getString("av.motivo"), res.getString("av.descripcion"), new Aparato(res.getString("ap.tipo"), res.getString("ap.marca"), res.getString("ap.modelo"), res.getString("ap.color"), res.getString("ap.numero_serie"), res.getString("ap.observaciones"), cli, res.getInt("ap.id_Aparato")), null)); cli.setEntrada(res.getInt("id_Entrada"), entrada); } else { res = st.executeQuery( "Select e.*, cli.*,cita.*, dir.*, GROUP_CONCAT(c_e.id_Usuario) empleados FROM (entradas e LEFT JOIN " + " (presupuestos p LEFT JOIN albaranes a ON p.id_Presupuesto = a.id_Presupuesto) ON e.id_Entrada = p.id_Entrada) INNER JOIN " + " ((direccion_citas dir INNER JOIN ((citas cita LEFT JOIN citas_empleados c_e ON " + " c_e.id_Cita = cita.id_Cita) LEFT JOIN usuarios u ON c_e.id_Usuario = u.id_Usuario)" + " ON cita.Direccion = dir.id_Direccion )" + " INNER JOIN clientes cli ON cli.id_Cliente = cita.id_Cliente) ON e.id_entrada = cita.id_Entrada" + " Where e.id_Entrada=" + idEntrada + " GROUP BY cita.id_Cita ORDER BY cita.fch_Cita DESC"); res.next(); if (this.documento.get(res.getString("id_Entrada") + ";Entrada") == null) { if (this.cliente.get(res.getInt("cli.id_Cliente")) == null) { cli = new Cliente(res.getString("cli.nombre"), res.getString("cli.apellidos"), res.getString("cli.nif"), res.getString("cli.provincia"), res.getString("cli.poblacion"), res.getInt("cli.cp"), res.getString("cli.calle"), res.getString("cli.numero"), res.getString("cli.escalera"), res.getInt("cli.piso"), res.getString("cli.puerta"), res.getInt("cli.tlf_Contacto"), res.getInt("cli.tlf_Auxiliar"), res.getString("cli.correo_electronico"), res.getString("cli.observaciones"), this); this.cliente.putIfAbsent(res.getInt("cli.id_Cliente"), cli); } else { cli = (Cliente) this.cliente.get(res.getInt("cli.id_Cliente")); } Map aux_empleados = new HashMap(); if (res.getString("empleados") != null) { String[] aux = res.getString("empleados").split(","); for (int i = 0; i < aux.length; i++) aux_empleados.put(aux[i], this.getEmpleado(Integer.parseInt(aux[i]))); } entrada = new Entrada(res.getString("e.observaciones"), res.getString("e.lugar"), res.getTimestamp("e.fch_Entrada"), this, cli, new Cita(res.getTimestamp("cita.fch_Cita"), res.getString("dir.provincia"), res.getString("dir.poblacion"), res.getInt("dir.cp"), res.getString("dir.calle"), res.getString("dir.numero"), res.getString("dir.escalera"), res.getInt("dir.piso"), res.getString("dir.puerta"), aux_empleados, res.getString("cita.motivo"), res.getString("cita.observaciones"), res.getString("dir.observaciones"), null)); cli.setEntrada(res.getInt("id_Entrada"), entrada); } } return entrada; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return null; } } } public boolean editarAveria(String id, String obs, String lugar, String motivo) { try { getEntrada(Integer.parseInt(id)).actualizar(obs, lugar, motivo); Class.forName("com.mysql.jdbc.Driver"); Statement st = con.createStatement(); if (st.executeUpdate("UPDATE entradas e INNER JOIN averias av ON " + " av.id_Entrada = e.id_Entrada " + " SET e.Observaciones='" + obs + "', " + "e.lugar='" + lugar + "'," + "av.motivo='" + motivo + "' Where e.id_Entrada='" + id + "'") > 0) return true; else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public boolean editarCita(String id, String obs_Entrada, Date fecha, String motivo, String obs_Cita, String empleados) { try { // Fer us de la funcio actualisar Entrada entrada = this.getEntrada(Integer.parseInt(id)); Cita cita = (Cita) entrada.getIncidencia(); Class.forName("com.mysql.jdbc.Driver"); Statement st = con.createStatement(); Statement stWorkers = con.createStatement(); String[] idEmpleados = empleados.split(","); boolean[] existentes; //ResultSet auxRes; String[] workers; ResultSet allWorkers = stWorkers .executeQuery("SELECT c.id_Cita id_Cita,GROUP_CONCAT(c_e.id_Usuario) empleados FROM " + "((citas_empleados c_e RIGHT JOIN citas c ON c_e.id_Cita = c.id_Cita)" + " INNER JOIN entradas e on c.id_Entrada = e.id_Entrada) Where e.id_Entrada =" + id); // Buscar diferencia de empeados true = est, false = no est if (allWorkers.next()) { int idCita = allWorkers.getInt("id_Cita"); if (allWorkers.getString("empleados") != null) { workers = allWorkers.getString("empleados").split(","); existentes = new boolean[workers.length]; for (int x = 0; x < workers.length; x++) { for (int y = 0; y < idEmpleados.length && !existentes[x]; y++) if (workers[x].equals(idEmpleados[y])) existentes[x] = true; if (!existentes[x]) { // Delete unused workers stWorkers.executeUpdate("DELETE FROM citas_empleados" + " Where id_Cita=" + idCita + " AND" + " id_Usuario=" + workers[x]); ((Empleado) this.empleados.get(Integer.parseInt(workers[x]))).removeCita(idCita); cita.removeEmpleado(Integer.parseInt(workers[x])); } } } // Put new workers if (!empleados.equals("")) for (int i = 0; i < idEmpleados.length; i++) { stWorkers.executeUpdate("INSERT IGNORE INTO citas_empleados" + " (id_Cita,id_Usuario) VALUES (" + idCita + "," + idEmpleados[i] + ")"); ((Empleado) this.empleados.get(Integer.parseInt(idEmpleados[i]))).setCita(idCita, cita); cita.setEmpleado(Integer.parseInt(idEmpleados[i]), (Empleado) this.empleados.get(idEmpleados[i])); } } // Multiple upload if (st.executeUpdate("UPDATE entradas e INNER JOIN citas c ON " + " c.id_Entrada = e.id_Entrada " + " SET e.Observaciones='" + obs_Entrada + "'," + " c.fch_cita='" + ((new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(fecha)) + "'," + " c.Observaciones='" + obs_Cita + "'," + " c.Motivo='" + motivo + "'" + " Where e.id_Entrada='" + id + "'") > 0) { entrada.actualizar(obs_Entrada, fecha, motivo, obs_Cita); return true; } else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public boolean deleteEntrada(int id) { try { Class.forName("com.mysql.jdbc.Driver"); Statement stDelete = con.createStatement(); Statement stIdCita = con.createStatement(); ResultSet res = stIdCita.executeQuery( "SELECT c.id_Cita FROM entradas e LEFT JOIN citas c ON e.id_Entrada = c.id_Entrada"); Statement stIdPresupost = con.createStatement(); ResultSet resPresupost = stIdPresupost.executeQuery( "SELECT p.id_Presupuesto FROM entradas e INNER JOIN presupuestos p ON e.id_Entrada = p.id_Entrada WHERE e.id_Entrada =" + id); if (resPresupost.next()) this.deletePresupuesto(resPresupost.getInt("p.id_Presupuesto")); if (res.next()) { int idCita = res.getInt("id_Cita"); if (stDelete.executeUpdate("DELETE FROM entradas WHERE id_Entrada=" + id) > 0) { if ((((Entrada) this.documento.get(id + ";Entrada")).getIncidencia().getClass().getName()) .equals("GestoSAT.Cita")) { Map empleados = ((Cita) ((Entrada) this.documento.get(id + ";Entrada")).getIncidencia()) .getEmpleados(); Iterator itEmp = empleados.entrySet().iterator(); while (itEmp.hasNext()) { Map.Entry aux = (Map.Entry) itEmp.next(); ((Empleado) aux.getValue()).removeCita(idCita); } } ((Entrada) this.documento.get(id + ";Entrada")).getCliente().deleteEntrada(id); this.documento.remove(id + ";Entrada"); return true; } else return false; } else return false; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public int crearPresupuesto(int idEntrada, Presupuesto presupuesto) { try { Class.forName("com.mysql.jdbc.Driver"); Statement st = con.createStatement(); String query = "INSERT INTO presupuestos (fch_Creacion, Concepto," + " fch_Validez, Aceptado, Forma_Pago, Adelanto, Plazo," + " Condiciones, Seguro, Garantia, Observaciones, Total, id_Entrada)" + " VALUES ('" + ((new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(presupuesto.getFchCreacion())) + "'," + " '" + presupuesto.getConcepto() + "','" + ((new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(presupuesto.getValidez())) + "',"; if (presupuesto.isAceptado()) query += "'1',"; else query += "'0',"; query += " '" + presupuesto.getFormaPago() + "','" + presupuesto.getAdelanto() + "'," + " '" + presupuesto.getPlazo() + "','" + presupuesto.getCondiciones() + "'," + " '" + presupuesto.getSeguro() + "', '" + presupuesto.getGarantia() + "'," + " '" + presupuesto.getObservaciones() + "'," + " '" + presupuesto.getTotal() + "', '" + idEntrada + "')"; st.executeUpdate(query); ResultSet res = st.executeQuery("SELECT id_Presupuesto FROM presupuestos ORDER BY id_Presupuesto DESC"); res.next(); int idPresupuesto = res.getInt("id_Presupuesto"); this.documento.put(idPresupuesto + ";Presupuesto", presupuesto); Iterator it = presupuesto.getTrabajo().entrySet().iterator(); while (it.hasNext()) { // Crear TrabajoPresupuesto Map.Entry auxTrabajo = (Map.Entry) it.next(); st.executeUpdate("INSERT INTO trabajos_presupuestados (" + "id_Usuario,id_Presupuesto,Horas,Descripcion)" + " VALUES ('" + auxTrabajo.getKey() + "','" + idPresupuesto + "'," + "'" + ((Trabajo) auxTrabajo.getValue()).getHoras() + "'," + "'" + ((Trabajo) auxTrabajo.getValue()).getDescripcion() + "')"); } it = presupuesto.getMaterial().entrySet().iterator(); while (it.hasNext()) { // Crear MaterialPresupuesto Map.Entry auxMaterial = (Map.Entry) it.next(); st.executeUpdate("INSERT INTO materiales_presupuestos (id_Stock," + "id_Presupuesto,Cantidad) VALUES ('" + auxMaterial.getKey() + "'," + "'" + idPresupuesto + "','" + ((MaterialTrabajos) auxMaterial.getValue()).getCantidad() + "')"); } st.close(); presupuesto.getEntrada().getCliente().setPresupuesto(idPresupuesto, presupuesto); return idPresupuesto; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return 0; } } public Map recuperarPresupuesto(int id_Entrada, Entrada entrada) { int id_Presupuesto = 0; this.getStock(); try { Map presupuesto = new HashMap(); Statement st = con.createStatement(); ResultSet res = st.executeQuery("Select * FROM presupuestos WHERE id_Entrada='" + id_Entrada + "' ORDER BY id_Presupuesto DESC "); if (res.next()) { id_Presupuesto = res.getInt("id_Presupuesto"); Statement stMaps = con.createStatement(); ResultSet resMaps = stMaps.executeQuery( "Select m_p.*,s.id_Proveedor FROM materiales_presupuestos m_p INNER JOIN stock s ON m_p.id_Stock = s.id_Stock WHERE m_p.id_Presupuesto='" + id_Presupuesto + "' ORDER BY m_p.id_Presupuesto DESC "); Map materiales = new HashMap(); while (resMaps.next()) { // Materiales materiales .put(resMaps.getInt("m_p.id_Stock"), new MaterialTrabajos( ((Proveedor) this.proveedor.get(resMaps.getInt("s.id_Proveedor"))) .getStock(resMaps.getInt("m_p.id_Stock")), resMaps.getFloat("m_p.Cantidad"))); } Map trabajos = new HashMap(); resMaps = stMaps.executeQuery( "SELECT * FROM trabajos_presupuestados t_p INNER JOIN presupuestos p ON t_p.id_Presupuesto = p.id_Presupuesto Where p.id_Presupuesto = '" + id_Presupuesto + "'"); while (resMaps.next()) { trabajos.put(resMaps.getInt("t_p.id_Usuario"), new Trabajo(resMaps.getFloat("t_p.horas"), resMaps.getString("t_p.Descripcion"), (Empleado) empleados.get(resMaps.getInt("t_p.id_Usuario")))); } stMaps.close(); Presupuesto p = new Presupuesto(res.getTimestamp("fch_Creacion"), res.getString("Concepto"), res.getTimestamp("fch_Validez"), res.getBoolean("Aceptado"), res.getString("Forma_Pago"), res.getFloat("Adelanto"), res.getInt("Plazo"), res.getString("Condiciones"), res.getString("Seguro"), res.getString("Garantia"), entrada, res.getString("Observaciones"), trabajos, materiales, this, res.getFloat("Total")); if (this.documento.putIfAbsent(id_Presupuesto + ";Presupuesto", p) == null) { entrada.getCliente().setPresupuesto(id_Presupuesto, p); presupuesto.put(id_Presupuesto + ";Presupuesto", p); } else { presupuesto.put(id_Presupuesto + ";Presupuesto", this.documento.get(id_Presupuesto + ";Presupuesto")); ((Presupuesto) this.documento.get(id_Presupuesto + ";Presupuesto")).actualizar( res.getString("Concepto"), res.getTimestamp("fch_Validez"), res.getBoolean("Aceptado"), res.getString("Forma_Pago"), res.getFloat("Adelanto"), res.getInt("Plazo"), res.getString("Condiciones"), res.getString("Seguro"), res.getString("Garantia"), entrada, res.getString("Observaciones"), trabajos, materiales, res.getFloat("Total")); } st.close(); } return presupuesto; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return new HashMap(); } } public Presupuesto getPresupuesto(int id_Presupuesto) { return (Presupuesto) this.documento.get(id_Presupuesto + ";Presupuesto"); } public boolean deletePresupuesto(int id_Presupuesto) { try { Statement st = con.createStatement(); /*Statement stAlbaran = con.createStatement(); ResultSet res = stAlbaran.executeQuery("SELECT a.id_Albaran FROM presupuestos p INNER JOIN albaranes a ON p.id_Presupuesto= a.id_Presupuesto WHERE p.id_Presupuesto="+id_Presupuesto); if(res.next()) this.deleteAlbaran(res.getInt("a.id_Albaran")); */ if (st.executeUpdate("Delete FROM presupuestos WHERE id_Presupuesto ='" + id_Presupuesto + "'") > 0) { ((Presupuesto) this.documento.get(id_Presupuesto + ";Presupuesto")).getEntrada() .setPresupuesto(null); ((Presupuesto) this.documento.get(id_Presupuesto + ";Presupuesto")).getEntrada().getCliente() .deletePresupuesto(id_Presupuesto); this.documento.remove(id_Presupuesto + ";Presupuesto"); return true; } else return false; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public boolean guardarPresupuesto(int id, Presupuesto presupuesto) { try { Statement st = con.createStatement(); int aceptado = 0; if (presupuesto.isAceptado()) aceptado = 1; if (st.executeUpdate("UPDATE presupuestos SET Concepto='" + presupuesto.getConcepto() + "'," + " fch_Validez='" + ((new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(presupuesto.getValidez())) + "'," + " Aceptado='" + aceptado + "'," + " Forma_pago='" + presupuesto.getFormaPago() + "'," + " Adelanto='" + presupuesto.getAdelanto() + "'," + " Plazo='" + presupuesto.getPlazo() + "'," + " Condiciones='" + presupuesto.getCondiciones() + "'," + " Seguro='" + presupuesto.getSeguro() + "'," + " Garantia='" + presupuesto.getGarantia() + "'," + " Observaciones='" + presupuesto.getObservaciones() + "'," + " Total='" + presupuesto.getTotal() + "'" + " WHERE id_Presupuesto='" + id + "'") > 0) { st.close(); // Trabajo Statement stWorkers = con.createStatement(); ResultSet resWorkers = stWorkers.executeQuery( "Select GROUP_CONCAT(id_Usuario) Empleados FROM trabajos_presupuestados WHERE id_Presupuesto='" + id + "' GROUP BY id_Presupuesto"); String[] idUsuarios; boolean[] empleadosExistentes; while (resWorkers.next()) { // Comprobar els que esxistisen i el que no idUsuarios = resWorkers.getString("Empleados").split(","); empleadosExistentes = new boolean[idUsuarios.length]; Statement stDelUsuarios = con.createStatement(); for (int x = 0; x < idUsuarios.length; x++) { for (int y = 0; y < presupuesto.getTrabajo().size() && !empleadosExistentes[x]; y++) if (idUsuarios[x].equals( presupuesto.getTrabajo().entrySet().toArray()[y].toString().split("=")[0])) empleadosExistentes[x] = true; if (!empleadosExistentes[x]) // Delete unused workers stDelUsuarios.executeUpdate("DELETE FROM trabajos_presupuestados WHERE id_Usuario='" + idUsuarios[x] + "' AND id_Presupuesto='" + id + "'"); // Borrar de la base de datos else stDelUsuarios.executeUpdate("UPDATE trabajos_presupuestados SET horas='" + ((Trabajo) presupuesto.getTrabajo().get(Integer.parseInt(idUsuarios[x]))) .getHoras() + "', descripcion='" + ((Trabajo) presupuesto.getTrabajo().get(Integer.parseInt(idUsuarios[x]))) .getDescripcion() + "' WHERE id_Usuario='" + idUsuarios[x] + "' AND id_Presupuesto='" + id + "'"); } stDelUsuarios.close(); } // Add els nous treballs Iterator itTrabajo = presupuesto.getTrabajo().entrySet().iterator(); while (itTrabajo.hasNext()) { Map.Entry auxTrabajo = (Map.Entry) itTrabajo.next(); stWorkers.executeUpdate("INSERT IGNORE INTO trabajos_presupuestados" + " (id_Presupuesto, id_Usuario, horas, descripcion) VALUES (" + " '" + id + "','" + auxTrabajo.getKey() + "'," + " '" + ((Trabajo) auxTrabajo.getValue()).getHoras() + "'," + " '" + ((Trabajo) auxTrabajo.getValue()).getDescripcion() + "')"); } stWorkers.close(); // Material Statement stStock = con.createStatement(); ResultSet resStock = stStock.executeQuery( "Select GROUP_CONCAT(id_Stock) Materiales FROM materiales_presupuestos WHERE id_Presupuesto='" + id + "' GROUP BY id_Presupuesto"); String[] idStock; boolean[] stockExistentes; if (resStock.next()) { // Comprobar els que esxistisen i el que no idStock = resStock.getString("Materiales").split(","); stockExistentes = new boolean[idStock.length]; Statement stDelStock = con.createStatement(); for (int x = 0; x < idStock.length; x++) { for (int y = 0; y < presupuesto.getMaterial().size() && !stockExistentes[x]; y++) if (idStock[x].equals( presupuesto.getMaterial().entrySet().toArray()[y].toString().split("=")[0])) stockExistentes[x] = true; if (!stockExistentes[x]) // Delete unused workers stDelStock.executeUpdate("DELETE FROM materiales_presupuestos WHERE id_Stock='" + idStock[x] + "' AND id_Presupuesto='" + id + "'"); // Borrar de la base de datos else stDelStock.executeUpdate("UPDATE materiales_presupuestos SET cantidad='" + ((MaterialTrabajos) presupuesto.getMaterial() .get(Integer.parseInt(idStock[x]))).getCantidad() + "' WHERE id_Stock='" + idStock[x] + "' AND id_Presupuesto='" + id + "'"); } stDelStock.close(); } // Add els nous treballs Iterator itStock = presupuesto.getMaterial().entrySet().iterator(); while (itStock.hasNext()) { Map.Entry auxStock = (Map.Entry) itStock.next(); stStock.executeUpdate("INSERT IGNORE INTO materiales_presupuestos" + " (id_Presupuesto, id_Stock, cantidad) VALUES (" + " '" + id + "','" + auxStock.getKey() + "'," + " '" + ((MaterialTrabajos) auxStock.getValue()).getCantidad() + "')"); } resStock.close(); return true; } else return false; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public int crearVenta(int idCliente, Albaran albaran) { try { // Recuperar datos del presupost i guardar Statement st = con.createStatement(); st.executeUpdate("INSERT INTO albaranes (fch_Creacion,Concepto,Provincia,Poblacion,CP,Calle,Numero," + "Escalera,Piso,Puerta,Total,id_Cliente,Observaciones) VALUES (" + "'" + ((new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(albaran.getFchCreacion())) + "'," + "'" + albaran.getConcepto() + "','" + albaran.getProvincia() + "','" + albaran.getPoblacion() + "'," + "'" + albaran.getCp() + "','" + albaran.getCalle() + "','" + albaran.getNumero() + "'," + "'" + albaran.getEscalera() + "','" + albaran.getPiso() + "','" + albaran.getPuerta() + "'," + "'" + albaran.getTotal() + "','" + idCliente + "','" + albaran.getObservaciones() + "')"); ResultSet res = st.executeQuery("SELECT id_Albaran FROM albaranes ORDER BY id_Albaran DESC"); res.next(); int idAlbaran = res.getInt("id_Albaran"); this.documento.put(idAlbaran + ";Albaran", albaran); Iterator it = albaran.getMaterialUtilizado().entrySet().iterator(); Map stock = this.getStock(); Statement stStock = con.createStatement(); while (it.hasNext()) { // Crear Material Map.Entry auxMaterial = (Map.Entry) it.next(); ((Stock) stock.get(Integer.parseInt(auxMaterial.getKey().toString()))) .quitar(((MaterialTrabajos) auxMaterial.getValue()).getCantidad()); st.executeUpdate("INSERT INTO materiales_utilizados (id_Stock," + "id_Albaran,Cantidad) VALUES ('" + auxMaterial.getKey() + "'," + "'" + idAlbaran + "','" + ((MaterialTrabajos) auxMaterial.getValue()).getCantidad() + "')"); stStock.executeUpdate("UPDATE stock set Unidades='" + ((Stock) stock.get(Integer.parseInt(auxMaterial.getKey().toString()))).getCantidad() + "' WHERE id_Stock =" + auxMaterial.getKey()); } stStock.close(); st.close(); albaran.getCliente().setAlbaran(idAlbaran, albaran); return idAlbaran; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return 0; } } public int getIdCliente(Cliente cliente) { this.getCliente(); Iterator itCliente = this.cliente.entrySet().iterator(); int idCliente = 0; while (itCliente.hasNext()) { Map.Entry auxCliente = (Map.Entry) itCliente.next(); if (cliente == auxCliente.getValue()) { idCliente = Integer.parseInt(auxCliente.getKey().toString()); break; } } return idCliente; } public int crearAlbaran(int idPresupuesto, Albaran albaran) { try { this.getStock(); int idCliente = this.getIdCliente(albaran.getCliente()); albaran.getPresupuesto().setAlbaran(albaran); // Recuperar datos del presupost i guardar Statement st = con.createStatement(); st.executeUpdate("INSERT INTO albaranes (fch_Creacion,Concepto,Provincia,Poblacion,CP,Calle,Numero," + "Escalera,Piso,Puerta,Total,id_Cliente,id_Presupuesto,Observaciones) VALUES (" + "'" + ((new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(albaran.getFchCreacion())) + "'," + "'" + albaran.getConcepto() + "','" + albaran.getProvincia() + "','" + albaran.getPoblacion() + "'," + "'" + albaran.getCp() + "','" + albaran.getCalle() + "','" + albaran.getNumero() + "'," + "'" + albaran.getEscalera() + "','" + albaran.getPiso() + "','" + albaran.getPuerta() + "'," + "'" + albaran.getTotal() + "','" + idCliente + "','" + idPresupuesto + "','" + albaran.getObservaciones() + "')"); ResultSet res = st.executeQuery("SELECT id_Albaran FROM albaranes ORDER BY id_Albaran DESC"); res.next(); int idAlbaran = res.getInt("id_Albaran"); this.documento.put(idAlbaran + ";Albaran", albaran); Iterator it = albaran.getMaterialUtilizado().entrySet().iterator(); Map stock = this.getStock(); Statement stStock = con.createStatement(); while (it.hasNext()) { // Crear Material Map.Entry auxMaterial = (Map.Entry) it.next(); ((Stock) stock.get(Integer.parseInt(auxMaterial.getKey().toString()))) .quitar(((MaterialTrabajos) auxMaterial.getValue()).getCantidad()); st.executeUpdate("INSERT INTO materiales_utilizados (id_Stock," + "id_Albaran,Cantidad) VALUES ('" + auxMaterial.getKey() + "'," + "'" + idAlbaran + "','" + ((MaterialTrabajos) auxMaterial.getValue()).getCantidad() + "')"); stStock.executeUpdate("UPDATE stock set Unidades='" + ((Stock) stock.get(Integer.parseInt(auxMaterial.getKey().toString()))).getCantidad() + "' WHERE id_Stock =" + auxMaterial.getKey()); } stStock.close(); it = albaran.getTrabajoRealizado().entrySet().iterator(); while (it.hasNext()) { Map.Entry auxTrabajo = (Map.Entry) it.next(); st.executeUpdate("INSERT INTO trabajos_realizados (" + "id_Usuario,id_Albaran,Horas,Descripcion)" + " VALUES ('" + auxTrabajo.getKey() + "','" + idAlbaran + "'," + "'" + ((Trabajo) auxTrabajo.getValue()).getHoras() + "'," + "'" + ((Trabajo) auxTrabajo.getValue()).getDescripcion() + "')"); } st.close(); albaran.getCliente().setAlbaran(idAlbaran, albaran); return idAlbaran; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return 0; } } public Map recuperarAlbaran(int id_Presupuesto) { int id_Albaran = 0; this.getStock(); try { Map mapAlbaran = new HashMap(); Statement st = con.createStatement(); ResultSet res = st.executeQuery("Select * FROM albaranes WHERE id_Presupuesto='" + id_Presupuesto + "' ORDER BY id_Presupuesto DESC "); if (res.next()) { id_Albaran = res.getInt("id_Albaran"); Statement stMaps = con.createStatement(); ResultSet resMaps = stMaps.executeQuery( "Select m_u.*,s.id_Proveedor FROM materiales_utilizados m_u INNER JOIN stock s ON m_u.id_Stock = s.id_Stock WHERE m_u.id_Albaran='" + id_Albaran + "' ORDER BY m_u.id_Albaran DESC "); Map materiales = new HashMap(); while (resMaps.next()) { // Materiales materiales .put(resMaps.getInt("m_u.id_Stock"), new MaterialTrabajos( ((Proveedor) this.proveedor.get(resMaps.getInt("s.id_Proveedor"))) .getStock(resMaps.getInt("m_u.id_Stock")), resMaps.getFloat("m_u.Cantidad"))); } Map trabajos = new HashMap(); resMaps = stMaps.executeQuery( "SELECT * FROM trabajos_realizados t_r INNER JOIN albaranes a ON t_r.id_Albaran = a.id_Albaran Where a.id_Albaran = '" + id_Albaran + "'"); while (resMaps.next()) { trabajos.put(resMaps.getInt("t_r.id_Usuario"), new Trabajo(resMaps.getFloat("t_r.horas"), resMaps.getString("t_r.Descripcion"), (Empleado) empleados.get(resMaps.getInt("t_r.id_Usuario")))); } stMaps.close(); Albaran albaran = new Albaran(res.getString("Concepto"), res.getString("Provincia"), res.getString("Poblacion"), res.getInt("CP"), res.getString("calle"), res.getString("numero"), res.getString("escalera"), res.getInt("piso"), res.getString("Puerta"), materiales, trabajos, res.getString("Observaciones"), res.getFloat("Total"), (res.getTimestamp("fch_Creacion")), (res.getTimestamp("fch_Entrega")), this.getPresupuesto(id_Presupuesto), this.getCliente(res.getInt("id_Cliente")), this); if (this.documento.putIfAbsent(id_Albaran + ";Albaran", albaran) == null) { ((Presupuesto) this.documento.get(id_Presupuesto + ";Presupuesto")).setAlbaran(albaran); albaran.getCliente().setAlbaran(id_Albaran, albaran); mapAlbaran.put(id_Albaran + ";Albaran", albaran); } else { ((Albaran) this.documento.get(id_Albaran + ";Albaran")).actualizarAlbaran( res.getString("Concepto"), res.getString("Provincia"), res.getString("Poblacion"), res.getInt("CP"), res.getString("calle"), res.getString("numero"), res.getString("escalera"), res.getInt("piso"), res.getString("Puerta"), materiales, trabajos, res.getString("Observaciones"), res.getFloat("Total")); //((Albaran)this.documento.get(id_Albaran+";Albaran")).setPresupuesto((Presupuesto)this.documento.get(id_Presupuesto+";Presupuesto")); mapAlbaran.put(id_Albaran + ";Albaran", this.documento.get(id_Albaran + ";Albaran")); } st.close(); } return mapAlbaran; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return new HashMap(); } } public Albaran getAlbaran(int idAlbaran) { return (Albaran) this.documento.get(idAlbaran + ";Albaran"); } public Factura getFactura(int idFactura) { return (Factura) this.documento.get(idFactura + ";Factura"); } public Recibo getRecibo(int idRecibo) { return (Recibo) this.documento.get(idRecibo + ";Recibo"); } /*public boolean deleteAlbaran(int id_Albaran){ // No se puede eliminar un albaran try { Statement st = con.createStatement(); if(st.executeUpdate("Delete FROM albaranes WHERE id_Albaran ='"+id_Albaran+"'")>0){ ((Albaran)this.documento.get(id_Albaran+";Albaran")).getPresupuesto().setAlbaran(null); ((Albaran)this.documento.get(id_Albaran+";Albaran")).getCliente().deleteAlbaran(id_Albaran); this.documento.remove(id_Albaran+";Albaran"); return true; }else return false; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } }*/ public boolean guardarAlbaran(int idAlbaran, Albaran albaran) { try { Map stock = this.getStock(); Statement st = con.createStatement(); if (st.executeUpdate("UPDATE albaranes SET Concepto='" + albaran.getConcepto() + "'," + " Provincia='" + albaran.getProvincia() + "'," + " Poblacion='" + albaran.getPoblacion() + "'," + " CP='" + albaran.getCp() + "'," + " Calle='" + albaran.getCalle() + "'," + " Numero='" + albaran.getNumero() + "'," + " Escalera='" + albaran.getEscalera() + "'," + " Piso='" + albaran.getPiso() + "'," + " Puerta='" + albaran.getPuerta() + "'," + " Observaciones='" + albaran.getObservaciones() + "'," + " Total='" + albaran.getTotal() + "'" + " WHERE id_Albaran='" + idAlbaran + "'") > 0) { st.close(); // Trabajo Statement stWorkers = con.createStatement(); ResultSet resWorkers = stWorkers.executeQuery( "Select GROUP_CONCAT(id_Usuario) Empleados FROM trabajos_realizados WHERE id_Albaran='" + idAlbaran + "' GROUP BY id_Albaran"); String[] idUsuarios; boolean[] empleadosExistentes; while (resWorkers.next()) { // Comprobar els que esxistisen i el que no idUsuarios = resWorkers.getString("Empleados").split(","); empleadosExistentes = new boolean[idUsuarios.length]; Statement stDelUsuarios = con.createStatement(); for (int x = 0; x < idUsuarios.length; x++) { for (int y = 0; y < albaran.getTrabajoRealizado().size() && !empleadosExistentes[x]; y++) if (idUsuarios[x].equals( albaran.getTrabajoRealizado().entrySet().toArray()[y].toString().split("=")[0])) empleadosExistentes[x] = true; if (!empleadosExistentes[x]) // Delete unused workers stDelUsuarios.executeUpdate("DELETE FROM trabajos_realizados WHERE id_Usuario='" + idUsuarios[x] + "' AND id_Albaran='" + idAlbaran + "'"); // Borrar de la base de datos else stDelUsuarios.executeUpdate("UPDATE trabajos_realizados SET horas='" + ((Trabajo) albaran.getTrabajoRealizado().get(Integer.parseInt(idUsuarios[x]))) .getHoras() + "', descripcion='" + ((Trabajo) albaran.getTrabajoRealizado().get(Integer.parseInt(idUsuarios[x]))) .getDescripcion() + "' WHERE id_Usuario='" + idUsuarios[x] + "' AND id_Albaran='" + idAlbaran + "'"); } stDelUsuarios.close(); } // Add els nous treballs Iterator itTrabajo = albaran.getTrabajoRealizado().entrySet().iterator(); while (itTrabajo.hasNext()) { Map.Entry auxTrabajo = (Map.Entry) itTrabajo.next(); stWorkers.executeUpdate("INSERT IGNORE INTO trabajos_realizados" + " (id_Albaran, id_Usuario, horas, descripcion) VALUES (" + " '" + idAlbaran + "','" + auxTrabajo.getKey() + "'," + " '" + ((Trabajo) auxTrabajo.getValue()).getHoras() + "'," + " '" + ((Trabajo) auxTrabajo.getValue()).getDescripcion() + "')"); } stWorkers.close(); // Material Statement stStock = con.createStatement(); ResultSet resStock = stStock.executeQuery( "Select GROUP_CONCAT(id_Stock) Materiales FROM materiales_utilizados WHERE id_Albaran='" + idAlbaran + "' GROUP BY id_Albaran"); String[] idStock = null; boolean[] stockExistentes = null; float aux_Cantidad; if (resStock.next()) { // Comprobar els que esxistisen i el que no idStock = resStock.getString("Materiales").split(","); stockExistentes = new boolean[idStock.length]; Statement stDelStock = con.createStatement(); ResultSet resActStock; for (int x = 0; x < idStock.length; x++) { for (int y = 0; y < albaran.getMaterialUtilizado().size() && !stockExistentes[x]; y++) if (idStock[x].equals(albaran.getMaterialUtilizado().entrySet().toArray()[y].toString() .split("=")[0])) stockExistentes[x] = true; if (!stockExistentes[x]) { // Delete unused workers { resActStock = stDelStock .executeQuery("SELECT cantidad FROM materiales_utilizados WHERE id_Stock='" + idStock[x] + "' AND id_Albaran='" + idAlbaran + "'"); resActStock.next(); aux_Cantidad = resActStock.getFloat("cantidad"); resActStock = stDelStock .executeQuery("SELECT unidades FROM stock WHERE id_Stock=" + idStock[x]); resActStock.next(); stDelStock.executeUpdate("UPDATE stock SET unidades='" + (aux_Cantidad + resActStock.getFloat("unidades")) + "' WHERE id_Stock=" + idStock[x]); ((Stock) stock.get(Integer.parseInt(idStock[x]))).anyadir(aux_Cantidad); stDelStock.executeUpdate("DELETE FROM materiales_utilizados WHERE id_Stock='" + idStock[x] + "' AND id_Albaran='" + idAlbaran + "'"); // Borrar de la base de datos } else { resActStock = stDelStock .executeQuery("SELECT cantidad FROM materiales_utilizados WHERE id_Stock='" + idStock[x] + "' AND id_Albaran='" + idAlbaran + "'"); resActStock.next(); aux_Cantidad = resActStock.getFloat("cantidad"); resActStock = stDelStock .executeQuery("SELECT unidades FROM stock WHERE id_Stock=" + idStock[x]); resActStock.next(); stDelStock .executeUpdate( "UPDATE stock SET unidades='" + ((aux_Cantidad - ((MaterialTrabajos) albaran.getMaterialUtilizado() .get(Integer.parseInt(idStock[x]))) .getCantidad()) + resActStock.getFloat("unidades")) + "' WHERE id_Stock=" + idStock[x]); if (aux_Cantidad > ((MaterialTrabajos) albaran.getMaterialUtilizado() .get(Integer.parseInt(idStock[x]))).getCantidad()) ((Stock) stock.get(Integer.parseInt(idStock[x]))) .anyadir((aux_Cantidad - ((MaterialTrabajos) albaran.getMaterialUtilizado() .get(Integer.parseInt(idStock[x]))).getCantidad())); else ((Stock) stock.get(Integer.parseInt(idStock[x]))) .quitar(-(aux_Cantidad - ((MaterialTrabajos) albaran.getMaterialUtilizado() .get(Integer.parseInt(idStock[x]))).getCantidad())); stDelStock.executeUpdate("UPDATE materiales_utilizados SET cantidad='" + ((MaterialTrabajos) albaran.getMaterialUtilizado() .get(Integer.parseInt(idStock[x]))).getCantidad() + "' WHERE id_Stock='" + idStock[x] + "' AND id_Albaran='" + idAlbaran + "'"); } } stDelStock.close(); } // Add els nous treballs Iterator itStock = albaran.getMaterialUtilizado().entrySet().iterator(); while (itStock.hasNext()) { Map.Entry auxStock = (Map.Entry) itStock.next(); if (idStock != null && stockExistentes != null) { for (int x = 0; x < idStock.length; x++) for (int y = 0; y < albaran.getMaterialUtilizado().size() && !stockExistentes[x]; y++) if (idStock[x].equals(albaran.getMaterialUtilizado().entrySet().toArray()[y] .toString().split("=")[0])) { resStock = stStock.executeQuery( "SELECT unidades FROM stock WHERE id_Stock=" + auxStock.getKey()); resStock.next(); aux_Cantidad = resStock.getFloat("unidades"); ((Stock) stock.get(Integer.parseInt(idStock[x]))).quitar(aux_Cantidad); stStock.executeUpdate("UPDATE stock SET unidades='" + (aux_Cantidad - ((MaterialTrabajos) auxStock.getValue()).getCantidad()) + "' WHERE id_Stock=" + auxStock.getKey()); } } else { resStock = stStock .executeQuery("SELECT unidades FROM stock WHERE id_Stock=" + auxStock.getKey()); resStock.next(); aux_Cantidad = resStock.getFloat("unidades"); ((Stock) stock.get(Integer.parseInt(auxStock.getKey().toString()))).quitar(aux_Cantidad); stStock.executeUpdate("UPDATE stock SET unidades='" + (aux_Cantidad - ((MaterialTrabajos) auxStock.getValue()).getCantidad()) + "' WHERE id_Stock=" + auxStock.getKey()); } stStock.executeUpdate("INSERT IGNORE INTO materiales_utilizados" + " (id_Albaran, id_Stock, cantidad) VALUES (" + " '" + idAlbaran + "','" + auxStock.getKey() + "'," + " '" + ((MaterialTrabajos) auxStock.getValue()).getCantidad() + "')"); } resStock.close(); return true; } else return false; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public void cargarVentasPendientes(int idCliente) { int id_Albaran = 0; this.getStock(); try { Statement st = con.createStatement(); ResultSet res = st.executeQuery("Select * FROM albaranes WHERE id_Cliente='" + idCliente + "' AND id_Factura IS NULL AND id_Presupuesto IS NULL ORDER BY id_Albaran DESC "); Statement stMaps; ResultSet resMaps; while (res.next()) { id_Albaran = res.getInt("id_Albaran"); stMaps = con.createStatement(); resMaps = stMaps.executeQuery( "Select m_u.*,s.id_Proveedor FROM materiales_utilizados m_u INNER JOIN stock s ON m_u.id_Stock = s.id_Stock WHERE m_u.id_Albaran='" + id_Albaran + "' ORDER BY m_u.id_Albaran DESC "); Map materiales = new HashMap(); while (resMaps.next()) { // Materiales materiales .put(resMaps.getInt("m_u.id_Stock"), new MaterialTrabajos( ((Proveedor) this.proveedor.get(resMaps.getInt("s.id_Proveedor"))) .getStock(resMaps.getInt("m_u.id_Stock")), resMaps.getFloat("m_u.Cantidad"))); } Albaran albaran = new Albaran(res.getString("Concepto"), res.getString("Provincia"), res.getString("Poblacion"), res.getInt("CP"), res.getString("calle"), res.getString("numero"), res.getString("escalera"), res.getInt("piso"), res.getString("Puerta"), materiales, res.getString("Observaciones"), res.getFloat("Total"), (res.getTimestamp("fch_Creacion")), this.getCliente(idCliente), this); if (this.documento.putIfAbsent(id_Albaran + ";Albaran", albaran) == null) albaran.getCliente().setAlbaran(id_Albaran, albaran); else ((Albaran) this.documento.get(id_Albaran + ";Albaran")).actualizarVenta( res.getString("Concepto"), res.getString("Provincia"), res.getString("Poblacion"), res.getInt("CP"), res.getString("calle"), res.getString("numero"), res.getString("escalera"), res.getInt("piso"), res.getString("Puerta"), materiales, res.getString("Observaciones"), res.getFloat("Total")); stMaps.close(); } st.close(); } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); } } public void cargarAlbaranesPendientes(int idCliente) { // Codig agafat de buscar albaranes, agafar tot y adaptar try { Statement st = con.createStatement(); // Albaran de Cita String consulta = "Select e.*, cli.*,cita.*, dir.*, a.*, GROUP_CONCAT(c_e.id_Usuario) empleados FROM (entradas e INNER JOIN" + " (presupuestos p INNER JOIN albaranes a ON p.id_Presupuesto = a.id_Presupuesto) ON e.id_Entrada = p.id_Entrada) INNER JOIN " + " ((direccion_citas dir INNER JOIN ((citas cita LEFT JOIN citas_empleados c_e ON cita.id_Cita = c_e.id_Cita)" + " LEFT JOIN usuarios u ON u.id_Usuario = c_e.id_Usuario) ON cita.Direccion = dir.id_Direccion )" + " INNER JOIN clientes cli ON cli.id_Cliente = cita.id_Cliente) ON e.id_entrada = cita.id_Entrada" + " WHERE a.id_Factura IS NULL AND a.id_Cliente=" + idCliente + " GROUP BY cita.id_Cita ORDER BY a.fch_Creacion DESC"; ResultSet res = st.executeQuery(consulta); Entrada entrada; Cliente cli; while (res.next()) { Map aux_empleados = new HashMap(); if (res.getString("empleados") != null) { String[] aux = res.getString("empleados").split(","); for (int i = 0; i < aux.length; i++) aux_empleados.put(aux[i], this.getEmpleado(Integer.parseInt(aux[i]))); } if (this.documento.get(res.getString("id_Entrada") + ";Entrada") == null) { if (this.cliente.get(res.getInt("cli.id_Cliente")) == null) { cli = new Cliente(res.getString("cli.nombre"), res.getString("cli.apellidos"), res.getString("cli.nif"), res.getString("cli.provincia"), res.getString("cli.poblacion"), res.getInt("cli.cp"), res.getString("cli.calle"), res.getString("cli.numero"), res.getString("cli.escalera"), res.getInt("cli.piso"), res.getString("cli.puerta"), res.getInt("cli.tlf_Contacto"), res.getInt("cli.tlf_Auxiliar"), res.getString("cli.correo_electronico"), res.getString("cli.observaciones"), this); this.cliente.putIfAbsent(res.getInt("cli.id_Cliente"), cli); } else { cli = (Cliente) this.cliente.get(res.getInt("cli.id_Cliente")); } entrada = new Entrada(res.getString("e.observaciones"), res.getString("e.lugar"), res.getTimestamp("e.fch_Entrada"), this, cli, new Cita(res.getTimestamp("cita.fch_Cita"), res.getString("dir.provincia"), res.getString("dir.poblacion"), res.getInt("dir.cp"), res.getString("dir.calle"), res.getString("dir.numero"), res.getString("dir.escalera"), res.getInt("dir.piso"), res.getString("dir.puerta"), aux_empleados, res.getString("cita.motivo"), res.getString("cita.observaciones"), res.getString("dir.observaciones"), null)); cli.setEntrada(res.getInt("id_Entrada"), entrada); this.documento.putIfAbsent(res.getInt("e.id_Entrada") + ";Entrada", entrada); } else { entrada = (Entrada) this.documento.get(res.getInt("e.id_Entrada") + ";Entrada"); } entrada.cargarPresupuesto(res.getInt("e.id_Entrada")); } // Obtener albaranes averias consulta = "Select e.*, cli.*,av.*, ap.*, a.* FROM (entradas e INNER JOIN (presupuestos p " + "INNER JOIN albaranes a ON p.id_Presupuesto = a.id_Presupuesto) ON e.id_Entrada = p.id_Entrada ) INNER JOIN " + "((clientes cli INNER JOIN aparatos ap ON cli.id_Cliente = ap.id_Cliente) INNER JOIN averias av ON " + "ap.id_Aparato = av.id_Aparato) ON av.id_Entrada = e.id_Entrada" + " WHERE a.id_Factura IS NULL AND a.id_Cliente=" + idCliente + " ORDER BY a.fch_Creacion DESC"; res = st.executeQuery(consulta); while (res.next()) { if (this.documento.get(res.getString("id_Entrada") + ";Entrada") == null) { if (this.cliente.get(res.getInt("cli.id_Cliente")) == null) { cli = new Cliente(res.getString("cli.nombre"), res.getString("cli.apellidos"), res.getString("cli.nif"), res.getString("cli.provincia"), res.getString("cli.poblacion"), res.getInt("cli.cp"), res.getString("cli.calle"), res.getString("cli.numero"), res.getString("cli.escalera"), res.getInt("cli.piso"), res.getString("cli.puerta"), res.getInt("cli.tlf_Contacto"), res.getInt("cli.tlf_Auxiliar"), res.getString("cli.correo_electronico"), res.getString("cli.observaciones"), this); this.cliente.putIfAbsent(res.getInt("cli.id_Cliente"), cli); } else { cli = (Cliente) this.cliente.get(res.getInt("cli.id_Cliente")); } entrada = new Entrada(res.getString("e.observaciones"), res.getString("e.lugar"), res.getTimestamp("e.fch_Entrada"), this, cli, new Averia(res.getString("av.motivo"), res.getString("av.descripcion"), new Aparato(res.getString("ap.tipo"), res.getString("ap.marca"), res.getString("ap.modelo"), res.getString("ap.color"), res.getString("ap.numero_serie"), res.getString("ap.observaciones"), cli, res.getInt("ap.id_Aparato")), null)); cli.setEntrada(res.getInt("id_Entrada"), entrada); this.documento.putIfAbsent(res.getInt("e.id_Entrada") + ";Etrada", entrada); } else { entrada = (Entrada) this.documento.get(res.getInt("e.id_Entrada") + ";Entrada"); } entrada.cargarPresupuesto(res.getInt("e.id_Entrada")); } } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); } } public int crearFactura(Factura factura) { try { Statement st = con.createStatement(); int idFactura = 0; st.executeUpdate("INSERT INTO facturas (fch_Creacion,Concepto,Observaciones,Forma_pago,Total) VALUES(" + "'" + ((new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(factura.getFchCreacion())) + "'," + "'" + factura.getConcepto() + "','" + factura.getObservaciones() + "','" + factura.getFormaPago() + "'," + "'" + factura.getTotal() + "')"); ResultSet res = st.executeQuery("SELECT id_Factura from facturas ORDER BY id_Factura DESC"); if (res.next()) { idFactura = res.getInt("id_Factura"); Iterator itAlbaranes = factura.getAlbaranes().entrySet().iterator(); while (itAlbaranes.hasNext()) { Map.Entry auxAlbaranes = (Map.Entry) itAlbaranes.next(); st.executeUpdate("UPDATE albaranes SET id_Factura='" + idFactura + "' WHERE id_Albaran ='" + auxAlbaranes.getKey() + "'"); } st.close(); this.documento.put(idFactura + ";Factura", factura); factura.getCliente().setFactura(idFactura, factura); } return idFactura; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return 0; } } public Map buscarCliente(String buscar) { try { Map mapClientes = new HashMap(); Statement st = con.createStatement(); ResultSet res = st.executeQuery("SELECT * FROM clientes WHERE CONCAT(Nombre,' ',Apellidos) LIKE '%" + buscar + "%' " + " OR Observaciones LIKE '%" + buscar + "%' OR NIF LIKE'%" + buscar + "%' " + " OR Provincia LIKE '%" + buscar + "%' OR Poblacion LIKE '%" + buscar + "%' " + " OR CP LIKE '%" + buscar + "%' OR Calle LIKE '%" + buscar + "%' " + " OR Numero LIKE '%" + buscar + "%' OR Escalera LIKE '%" + buscar + "%' " + " OR Piso LIKE '%" + buscar + "%' OR Puerta LIKE '%" + buscar + "%' " + " OR Correo_electronico LIKE '%" + buscar + "%' OR tlf_Contacto LIKE '%" + buscar + "%' " + " OR tlf_Auxiliar LIKE '%" + buscar + "%'"); this.getCliente(); while (res.next()) { mapClientes.put(res.getString("id_Cliente") + ";Cliente", this.getCliente(res.getInt("id_Cliente"))); } st.close(); return mapClientes; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return new HashMap(); } } public Map buscarEntrada(String buscar, boolean pendiente) { try { Statement st = con.createStatement(); Map entradas = new HashMap(); String consulta = "Select e.*, cli.*,av.*, ap.* FROM (entradas e LEFT JOIN (presupuestos p " + "LEFT JOIN albaranes a ON p.id_Presupuesto = a.id_Presupuesto) ON e.id_Entrada = p.id_Entrada ) INNER JOIN " + "((clientes cli INNER JOIN aparatos ap ON cli.id_Cliente = ap.id_Cliente) INNER JOIN averias av ON " + "ap.id_Aparato = av.id_Aparato) ON av.id_Entrada = e.id_Entrada WHERE ( " + "CONCAT(cli.nombre,' ',cli.apellidos) LIKE '%" + buscar + "%'" + " OR cli.Observaciones LIKE '%" + buscar + "%' OR cli.NIF LIKE'%" + buscar + "%' " + " OR cli.Provincia LIKE '%" + buscar + "%' OR cli.Poblacion LIKE '%" + buscar + "%' " + " OR cli.CP LIKE '%" + buscar + "%' OR cli.Calle LIKE '%" + buscar + "%' " + " OR cli.Numero LIKE '%" + buscar + "%' OR cli.Escalera LIKE '%" + buscar + "%' " + " OR cli.Piso LIKE '%" + buscar + "%' OR cli.Puerta LIKE '%" + buscar + "%' " + " OR cli.Correo_electronico LIKE '%" + buscar + "%' OR cli.tlf_Contacto LIKE '%" + buscar + "%' " + " OR cli.tlf_Auxiliar LIKE '%" + buscar + "%' OR e.lugar LIKE '%" + buscar + "%'" + " OR e.observaciones LIKE '%" + buscar + "%' OR av.motivo LIKE '%" + buscar + "%'" + " OR av.descripcion LIKE '%" + buscar + "%' OR ap.tipo LIKE '%" + buscar + "%'" + " OR ap.marca LIKE '%" + buscar + "%' OR ap.modelo LIKE '%" + buscar + "%'" + " OR ap.color LIKE '%" + buscar + "%' OR ap.numero_serie LIKE '" + buscar + "'" + " OR ap.observaciones LIKE '%" + buscar + "%')"; // Comprobar averies if (pendiente) consulta += " AND a.id_albaran IS NULL "; consulta += " ORDER BY fch_Entrada DESC"; ResultSet res = st.executeQuery(consulta); Entrada entrada; Cliente cli; while (res.next()) { if (this.documento.get(res.getString("id_Entrada") + ";Entrada") == null) { if (this.cliente.get(res.getInt("cli.id_Cliente")) == null) { cli = new Cliente(res.getString("cli.nombre"), res.getString("cli.apellidos"), res.getString("cli.nif"), res.getString("cli.provincia"), res.getString("cli.poblacion"), res.getInt("cli.cp"), res.getString("cli.calle"), res.getString("cli.numero"), res.getString("cli.escalera"), res.getInt("cli.piso"), res.getString("cli.puerta"), res.getInt("cli.tlf_Contacto"), res.getInt("cli.tlf_Auxiliar"), res.getString("cli.correo_electronico"), res.getString("cli.observaciones"), this); this.cliente.putIfAbsent(res.getInt("cli.id_Cliente"), cli); } else { cli = (Cliente) this.cliente.get(res.getInt("cli.id_Cliente")); } entrada = new Entrada(res.getString("e.observaciones"), res.getString("e.lugar"), res.getTimestamp("e.fch_Entrada"), this, cli, new Averia(res.getString("av.motivo"), res.getString("av.descripcion"), new Aparato(res.getString("ap.tipo"), res.getString("ap.marca"), res.getString("ap.modelo"), res.getString("ap.color"), res.getString("ap.numero_serie"), res.getString("ap.observaciones"), cli, res.getInt("ap.id_Aparato")), null)); cli.setEntrada(res.getInt("id_Entrada"), entrada); entradas.put(res.getString("id_Entrada") + ";Entrada", entrada); this.documento.putIfAbsent(res.getInt("e.id_Entrada") + ";Etrada", entrada); } else { entrada = (Entrada) this.documento.get(res.getString("id_Entrada") + ";Entrada"); entrada.actualizar(res.getString("e.observaciones"), res.getString("e.lugar"), res.getString("av.motivo")); entradas.put(res.getString("id_Entrada") + ";Entrada", entrada); } entrada.cargarPresupuesto(res.getInt("id_Entrada")); } // Comprobar citas consulta = "Select e.*, cli.*,cita.*, dir.*, GROUP_CONCAT(c_e.id_Usuario) empleados FROM (entradas e LEFT JOIN" + " (presupuestos p LEFT JOIN albaranes a ON p.id_Presupuesto = a.id_Presupuesto) ON e.id_Entrada = p.id_Entrada) INNER JOIN " + "((direccion_citas dir INNER JOIN ((citas cita LEFT JOIN citas_empleados c_e ON cita.id_Cita = c_e.id_Cita)" + " LEFT JOIN usuarios u ON u.id_Usuario = c_e.id_Usuario) ON cita.Direccion = dir.id_Direccion )" + " INNER JOIN clientes cli ON cli.id_Cliente = cita.id_Cliente) ON e.id_entrada = cita.id_Entrada" + " WHERE ( CONCAT(cli.nombre,' ',cli.apellidos) LIKE '%" + buscar + "%'" + " OR cli.Observaciones LIKE '%" + buscar + "%' OR cli.NIF LIKE'%" + buscar + "%' " + " OR cli.Provincia LIKE '%" + buscar + "%' OR cli.Poblacion LIKE '%" + buscar + "%' " + " OR cli.CP LIKE '%" + buscar + "%' OR cli.Calle LIKE '%" + buscar + "%' " + " OR cli.Numero LIKE '%" + buscar + "%' OR cli.Escalera LIKE '%" + buscar + "%' " + " OR cli.Piso LIKE '%" + buscar + "%' OR cli.Puerta LIKE '%" + buscar + "%' " + " OR cli.Correo_electronico LIKE '%" + buscar + "%' OR cli.tlf_Contacto LIKE '%" + buscar + "%' " + " OR cli.tlf_Auxiliar LIKE '%" + buscar + "%' OR e.lugar LIKE '%" + buscar + "%'" + " OR e.observaciones LIKE '%" + buscar + "%' OR cita.motivo LIKE '%" + buscar + "%'" + " OR cita.observaciones LIKE '%" + buscar + "%' OR dir.provincia LIKE '%" + buscar + "%'" + " OR dir.poblacion LIKE '%" + buscar + "%' OR dir.CP LIKE '%" + buscar + "%'" + " OR dir.Calle LIKE '%" + buscar + "%' OR dir.Numero LIKE '%" + buscar + "%'" + " OR dir.Escalera LIKE '%" + buscar + "%' OR dir.Piso LIKE '%" + buscar + "%'" + " OR dir.Puerta LIKE '%" + buscar + "%')"; if (pendiente) consulta += " AND a.id_albaran IS NULL "; consulta += " GROUP BY cita.id_Cita ORDER BY fch_Entrada DESC"; res = st.executeQuery(consulta); while (res.next()) { Map aux_empleados = new HashMap(); if (res.getString("empleados") != null) { String[] aux = res.getString("empleados").split(","); for (int i = 0; i < aux.length; i++) aux_empleados.put(aux[i], this.getEmpleado(Integer.parseInt(aux[i]))); } if (this.documento.get(res.getString("id_Entrada") + ";Entrada") == null) { if (this.cliente.get(res.getInt("cli.id_Cliente")) == null) { cli = new Cliente(res.getString("cli.nombre"), res.getString("cli.apellidos"), res.getString("cli.nif"), res.getString("cli.provincia"), res.getString("cli.poblacion"), res.getInt("cli.cp"), res.getString("cli.calle"), res.getString("cli.numero"), res.getString("cli.escalera"), res.getInt("cli.piso"), res.getString("cli.puerta"), res.getInt("cli.tlf_Contacto"), res.getInt("cli.tlf_Auxiliar"), res.getString("cli.correo_electronico"), res.getString("cli.observaciones"), this); this.cliente.putIfAbsent(res.getInt("cli.id_Cliente"), cli); } else { cli = (Cliente) this.cliente.get(res.getInt("cli.id_Cliente")); } entrada = new Entrada(res.getString("e.observaciones"), res.getString("e.lugar"), res.getTimestamp("e.fch_Entrada"), this, cli, new Cita(res.getTimestamp("cita.fch_Cita"), res.getString("dir.provincia"), res.getString("dir.poblacion"), res.getInt("dir.cp"), res.getString("dir.calle"), res.getString("dir.numero"), res.getString("dir.escalera"), res.getInt("dir.piso"), res.getString("dir.puerta"), aux_empleados, res.getString("cita.motivo"), res.getString("cita.observaciones"), res.getString("dir.observaciones"), null)); cli.setEntrada(res.getInt("id_Entrada"), entrada); entradas.put(res.getString("id_Entrada") + ";Entrada", entrada); this.documento.putIfAbsent(res.getInt("e.id_Entrada") + ";Entrada", entrada); } else { entrada = (Entrada) this.documento.get(res.getString("id_Entrada") + ";Entrada"); entrada.actualizar(res.getString("e.observaciones"), res.getTimestamp("cita.fch_Cita"), res.getString("cita.motivo"), res.getString("cita.observaciones"), aux_empleados); entradas.put(res.getString("id_Entrada") + ";Entrada", entrada); } entrada.cargarPresupuesto(res.getInt("id_Entrada")); } st.close(); return entradas; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return new HashMap(); } } public Map buscarPresupuesto(String buscar, boolean pendiente) { try { Map presupuestos = new HashMap(); Statement st = con.createStatement(); // Presupuestos citas String consulta = "Select e.*, cli.*,cita.*, dir.*, p.*, GROUP_CONCAT(c_e.id_Usuario) empleados FROM (entradas e LEFT JOIN" + " (presupuestos p LEFT JOIN albaranes a ON p.id_Presupuesto = a.id_Presupuesto) ON e.id_Entrada = p.id_Entrada) INNER JOIN " + " ((direccion_citas dir INNER JOIN ((citas cita LEFT JOIN citas_empleados c_e ON cita.id_Cita = c_e.id_Cita)" + " LEFT JOIN usuarios u ON u.id_Usuario = c_e.id_Usuario) ON cita.Direccion = dir.id_Direccion )" + " INNER JOIN clientes cli ON cli.id_Cliente = cita.id_Cliente) ON e.id_entrada = cita.id_Entrada" + " WHERE (CONCAT(cli.nombre,' ',cli.apellidos) LIKE '%" + buscar + "%'" + " OR cli.Observaciones LIKE '%" + buscar + "%' OR cli.NIF LIKE'%" + buscar + "%' " + " OR cli.Provincia LIKE '%" + buscar + "%' OR cli.Poblacion LIKE '%" + buscar + "%' " + " OR cli.CP LIKE '%" + buscar + "%' OR cli.Calle LIKE '%" + buscar + "%' " + " OR cli.Numero LIKE '%" + buscar + "%' OR cli.Escalera LIKE '%" + buscar + "%' " + " OR cli.Piso LIKE '%" + buscar + "%' OR cli.Puerta LIKE '%" + buscar + "%' " + " OR cli.Correo_electronico LIKE '%" + buscar + "%' OR cli.tlf_Contacto LIKE '%" + buscar + "%' " + " OR cli.tlf_Auxiliar LIKE '%" + buscar + "%' OR e.lugar LIKE '%" + buscar + "%'" + " OR e.observaciones LIKE '%" + buscar + "%' OR cita.motivo LIKE '%" + buscar + "%'" + " OR cita.observaciones LIKE '%" + buscar + "%' OR dir.provincia LIKE '%" + buscar + "%'" + " OR dir.poblacion LIKE '%" + buscar + "%' OR dir.CP LIKE '%" + buscar + "%'" + " OR dir.Calle LIKE '%" + buscar + "%' OR dir.Numero LIKE '%" + buscar + "%'" + " OR dir.Escalera LIKE '%" + buscar + "%' OR dir.Piso LIKE '%" + buscar + "%'" + " OR dir.Puerta LIKE '%" + buscar + "%' OR p.concepto LIKE '%" + buscar + "%'" + " OR p.forma_pago LIKE '%" + buscar + "%' OR p.condiciones LIKE '%" + buscar + "%'" + " OR p.seguro LIKE '%" + buscar + "%' OR p.garantia LIKE '%" + buscar + "%'" + " OR p.observaciones LIKE '%" + buscar + "%') AND p.Observaciones NOT LIKE '%| Documento auxiliar%' "; if (pendiente) consulta += " AND a.id_albaran IS NULL "; consulta += " GROUP BY cita.id_Cita ORDER BY p.fch_Creacion DESC"; ResultSet res = st.executeQuery(consulta); Entrada entrada; Cliente cli; while (res.next()) { Map aux_empleados = new HashMap(); if (res.getString("empleados") != null) { String[] aux = res.getString("empleados").split(","); for (int i = 0; i < aux.length; i++) aux_empleados.put(aux[i], this.getEmpleado(Integer.parseInt(aux[i]))); } if (this.documento.get(res.getString("id_Entrada") + ";Entrada") == null) { if (this.cliente.get(res.getInt("cli.id_Cliente")) == null) { cli = new Cliente(res.getString("cli.nombre"), res.getString("cli.apellidos"), res.getString("cli.nif"), res.getString("cli.provincia"), res.getString("cli.poblacion"), res.getInt("cli.cp"), res.getString("cli.calle"), res.getString("cli.numero"), res.getString("cli.escalera"), res.getInt("cli.piso"), res.getString("cli.puerta"), res.getInt("cli.tlf_Contacto"), res.getInt("cli.tlf_Auxiliar"), res.getString("cli.correo_electronico"), res.getString("cli.observaciones"), this); this.cliente.putIfAbsent(res.getInt("cli.id_Cliente"), cli); } else { cli = (Cliente) this.cliente.get(res.getInt("cli.id_Cliente")); } entrada = new Entrada(res.getString("e.observaciones"), res.getString("e.lugar"), res.getTimestamp("e.fch_Entrada"), this, cli, new Cita(res.getTimestamp("cita.fch_Cita"), res.getString("dir.provincia"), res.getString("dir.poblacion"), res.getInt("dir.cp"), res.getString("dir.calle"), res.getString("dir.numero"), res.getString("dir.escalera"), res.getInt("dir.piso"), res.getString("dir.puerta"), aux_empleados, res.getString("cita.motivo"), res.getString("cita.observaciones"), res.getString("dir.observaciones"), null)); cli.setEntrada(res.getInt("id_Entrada"), entrada); this.documento.putIfAbsent(res.getInt("e.id_Entrada") + ";Entrada", entrada); } else { entrada = (Entrada) this.documento.get(res.getInt("e.id_Entrada") + ";Entrada"); } entrada.cargarPresupuesto(res.getInt("e.id_Entrada")); presupuestos.put(res.getInt("p.id_Presupuesto") + ";Presupuesto", this.documento.get(res.getInt("p.id_Presupuesto") + ";Presupuesto")); } // Obtener presupuestos averias consulta = "Select e.*, cli.*,av.*, ap.*, p.* FROM (entradas e LEFT JOIN (presupuestos p " + "LEFT JOIN albaranes a ON p.id_Presupuesto = a.id_Presupuesto) ON e.id_Entrada = p.id_Entrada ) INNER JOIN " + "((clientes cli INNER JOIN aparatos ap ON cli.id_Cliente = ap.id_Cliente) INNER JOIN averias av ON " + "ap.id_Aparato = av.id_Aparato) ON av.id_Entrada = e.id_Entrada WHERE (" + " CONCAT(cli.nombre,' ',cli.apellidos) LIKE '%" + buscar + "%'" + " OR cli.Observaciones LIKE '%" + buscar + "%' OR cli.NIF LIKE'%" + buscar + "%' " + " OR cli.Provincia LIKE '%" + buscar + "%' OR cli.Poblacion LIKE '%" + buscar + "%' " + " OR cli.CP LIKE '%" + buscar + "%' OR cli.Calle LIKE '%" + buscar + "%' " + " OR cli.Numero LIKE '%" + buscar + "%' OR cli.Escalera LIKE '%" + buscar + "%' " + " OR cli.Piso LIKE '%" + buscar + "%' OR cli.Puerta LIKE '%" + buscar + "%' " + " OR cli.Correo_electronico LIKE '%" + buscar + "%' OR cli.tlf_Contacto LIKE '%" + buscar + "%' " + " OR cli.tlf_Auxiliar LIKE '%" + buscar + "%' OR e.lugar LIKE '%" + buscar + "%'" + " OR e.observaciones LIKE '%" + buscar + "%' OR av.motivo LIKE '%" + buscar + "%'" + " OR av.descripcion LIKE '%" + buscar + "%' OR ap.tipo LIKE '%" + buscar + "%'" + " OR ap.marca LIKE '%" + buscar + "%' OR ap.modelo LIKE '%" + buscar + "%'" + " OR ap.color LIKE '%" + buscar + "%' OR ap.numero_serie LIKE '%" + buscar + "%'" + " OR ap.observaciones LIKE '%" + buscar + "%' OR p.concepto LIKE '%" + buscar + "%'" + " OR p.forma_pago LIKE '%" + buscar + "%' OR p.condiciones LIKE '%" + buscar + "%'" + " OR p.seguro LIKE '%" + buscar + "%' OR p.garantia LIKE '%" + buscar + "%'" + " OR p.observaciones LIKE '%" + buscar + "%') AND p.Observaciones NOT LIKE '%| Documento auxiliar%' "; if (pendiente) consulta += " AND a.id_albaran IS NULL "; consulta += " ORDER BY p.fch_Creacion DESC"; res = st.executeQuery(consulta); while (res.next()) { if (this.documento.get(res.getString("id_Entrada") + ";Entrada") == null) { if (this.cliente.get(res.getInt("cli.id_Cliente")) == null) { cli = new Cliente(res.getString("cli.nombre"), res.getString("cli.apellidos"), res.getString("cli.nif"), res.getString("cli.provincia"), res.getString("cli.poblacion"), res.getInt("cli.cp"), res.getString("cli.calle"), res.getString("cli.numero"), res.getString("cli.escalera"), res.getInt("cli.piso"), res.getString("cli.puerta"), res.getInt("cli.tlf_Contacto"), res.getInt("cli.tlf_Auxiliar"), res.getString("cli.correo_electronico"), res.getString("cli.observaciones"), this); this.cliente.putIfAbsent(res.getInt("cli.id_Cliente"), cli); } else { cli = (Cliente) this.cliente.get(res.getInt("cli.id_Cliente")); } entrada = new Entrada(res.getString("e.observaciones"), res.getString("e.lugar"), res.getTimestamp("e.fch_Entrada"), this, cli, new Averia(res.getString("av.motivo"), res.getString("av.descripcion"), new Aparato(res.getString("ap.tipo"), res.getString("ap.marca"), res.getString("ap.modelo"), res.getString("ap.color"), res.getString("ap.numero_serie"), res.getString("ap.observaciones"), cli, res.getInt("ap.id_Aparato")), null)); cli.setEntrada(res.getInt("id_Entrada"), entrada); this.documento.putIfAbsent(res.getInt("e.id_Entrada") + ";Etrada", entrada); } else { entrada = (Entrada) this.documento.get(res.getInt("e.id_Entrada") + ";Entrada"); } entrada.cargarPresupuesto(res.getInt("e.id_Entrada")); presupuestos.put(res.getInt("p.id_Presupuesto") + ";Presupuesto", this.documento.get(res.getInt("p.id_Presupuesto") + ";Presupuesto")); } st.close(); return presupuestos; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return new HashMap(); } } public Map buscarAlbaran(String buscar, boolean pendiente) { try { Statement st = con.createStatement(); Map albaranes = new HashMap(); // Albaran de Cita String consulta = "Select e.*, cli.*,cita.*, dir.*, a.*, GROUP_CONCAT(c_e.id_Usuario) empleados FROM (entradas e INNER JOIN" + " (presupuestos p INNER JOIN albaranes a ON p.id_Presupuesto = a.id_Presupuesto) ON e.id_Entrada = p.id_Entrada) INNER JOIN " + " ((direccion_citas dir INNER JOIN ((citas cita LEFT JOIN citas_empleados c_e ON cita.id_Cita = c_e.id_Cita)" + " LEFT JOIN usuarios u ON u.id_Usuario = c_e.id_Usuario) ON cita.Direccion = dir.id_Direccion )" + " INNER JOIN clientes cli ON cli.id_Cliente = cita.id_Cliente) ON e.id_entrada = cita.id_Entrada" + " WHERE (CONCAT(cli.nombre,' ',cli.apellidos) LIKE '%" + buscar + "%'" + " OR cli.Observaciones LIKE '%" + buscar + "%' OR cli.NIF LIKE'%" + buscar + "%' " + " OR cli.Provincia LIKE '%" + buscar + "%' OR cli.Poblacion LIKE '%" + buscar + "%' " + " OR cli.CP LIKE '%" + buscar + "%' OR cli.Calle LIKE '%" + buscar + "%' " + " OR cli.Numero LIKE '%" + buscar + "%' OR cli.Escalera LIKE '%" + buscar + "%' " + " OR cli.Piso LIKE '%" + buscar + "%' OR cli.Puerta LIKE '%" + buscar + "%' " + " OR cli.Correo_electronico LIKE '%" + buscar + "%' OR cli.tlf_Contacto LIKE '%" + buscar + "%' " + " OR cli.tlf_Auxiliar LIKE '%" + buscar + "%' OR e.lugar LIKE '%" + buscar + "%'" + " OR e.observaciones LIKE '%" + buscar + "%' OR cita.motivo LIKE '%" + buscar + "%'" + " OR cita.observaciones LIKE '%" + buscar + "%' OR dir.provincia LIKE '%" + buscar + "%'" + " OR dir.poblacion LIKE '%" + buscar + "%' OR dir.CP LIKE '%" + buscar + "%'" + " OR dir.Calle LIKE '%" + buscar + "%' OR dir.Numero LIKE '%" + buscar + "%'" + " OR dir.Escalera LIKE '%" + buscar + "%' OR dir.Piso LIKE '%" + buscar + "%'" + " OR dir.Puerta LIKE '%" + buscar + "%' OR a.concepto LIKE '%" + buscar + "%'" + " OR a.total LIKE '%" + buscar + "%' OR a.observaciones LIKE '%" + buscar + "%'" + " OR a.Provincia LIKE '%" + buscar + "%' OR a.Poblacion LIKE '%" + buscar + "%' " + " OR a.CP LIKE '%" + buscar + "%' OR a.Calle LIKE '%" + buscar + "%' " + " OR a.Numero LIKE '%" + buscar + "%' OR a.Escalera LIKE '%" + buscar + "%' " + " OR a.Piso LIKE '%" + buscar + "%' OR a.Puerta LIKE '%" + buscar + "%')"; if (pendiente) consulta += " AND a.id_Factura IS NULL "; consulta += " GROUP BY cita.id_Cita ORDER BY a.fch_Creacion DESC"; ResultSet res = st.executeQuery(consulta); Entrada entrada; Cliente cli; while (res.next()) { Map aux_empleados = new HashMap(); if (res.getString("empleados") != null) { String[] aux = res.getString("empleados").split(","); for (int i = 0; i < aux.length; i++) aux_empleados.put(aux[i], this.getEmpleado(Integer.parseInt(aux[i]))); } if (this.documento.get(res.getString("id_Entrada") + ";Entrada") == null) { if (this.cliente.get(res.getInt("cli.id_Cliente")) == null) { cli = new Cliente(res.getString("cli.nombre"), res.getString("cli.apellidos"), res.getString("cli.nif"), res.getString("cli.provincia"), res.getString("cli.poblacion"), res.getInt("cli.cp"), res.getString("cli.calle"), res.getString("cli.numero"), res.getString("cli.escalera"), res.getInt("cli.piso"), res.getString("cli.puerta"), res.getInt("cli.tlf_Contacto"), res.getInt("cli.tlf_Auxiliar"), res.getString("cli.correo_electronico"), res.getString("cli.observaciones"), this); this.cliente.putIfAbsent(res.getInt("cli.id_Cliente"), cli); } else { cli = (Cliente) this.cliente.get(res.getInt("cli.id_Cliente")); } entrada = new Entrada(res.getString("e.observaciones"), res.getString("e.lugar"), res.getTimestamp("e.fch_Entrada"), this, cli, new Cita(res.getTimestamp("cita.fch_Cita"), res.getString("dir.provincia"), res.getString("dir.poblacion"), res.getInt("dir.cp"), res.getString("dir.calle"), res.getString("dir.numero"), res.getString("dir.escalera"), res.getInt("dir.piso"), res.getString("dir.puerta"), aux_empleados, res.getString("cita.motivo"), res.getString("cita.observaciones"), res.getString("dir.observaciones"), null)); cli.setEntrada(res.getInt("id_Entrada"), entrada); this.documento.putIfAbsent(res.getInt("e.id_Entrada") + ";Entrada", entrada); } else { entrada = (Entrada) this.documento.get(res.getInt("e.id_Entrada") + ";Entrada"); } entrada.cargarPresupuesto(res.getInt("e.id_Entrada")); albaranes.put(res.getInt("a.id_Albaran") + ";Albaran", this.documento.get(res.getInt("a.id_Albaran") + ";Albaran")); } // Obtener albaranes averias consulta = "Select e.*, cli.*,av.*, ap.*, a.* FROM (entradas e INNER JOIN (presupuestos p " + "INNER JOIN albaranes a ON p.id_Presupuesto = a.id_Presupuesto) ON e.id_Entrada = p.id_Entrada ) INNER JOIN " + "((clientes cli INNER JOIN aparatos ap ON cli.id_Cliente = ap.id_Cliente) INNER JOIN averias av ON " + "ap.id_Aparato = av.id_Aparato) ON av.id_Entrada = e.id_Entrada WHERE (" + " CONCAT(cli.nombre,' ',cli.apellidos) LIKE '%" + buscar + "%'" + " OR cli.Observaciones LIKE '%" + buscar + "%' OR cli.NIF LIKE'%" + buscar + "%' " + " OR cli.Provincia LIKE '%" + buscar + "%' OR cli.Poblacion LIKE '%" + buscar + "%' " + " OR cli.CP LIKE '%" + buscar + "%' OR cli.Calle LIKE '%" + buscar + "%' " + " OR cli.Numero LIKE '%" + buscar + "%' OR cli.Escalera LIKE '%" + buscar + "%' " + " OR cli.Piso LIKE '%" + buscar + "%' OR cli.Puerta LIKE '%" + buscar + "%' " + " OR cli.Correo_electronico LIKE '%" + buscar + "%' OR cli.tlf_Contacto LIKE '%" + buscar + "%' " + " OR cli.tlf_Auxiliar LIKE '%" + buscar + "%' OR e.lugar LIKE '%" + buscar + "%'" + " OR e.observaciones LIKE '%" + buscar + "%' OR av.motivo LIKE '%" + buscar + "%'" + " OR av.descripcion LIKE '%" + buscar + "%' OR ap.tipo LIKE '%" + buscar + "%'" + " OR ap.marca LIKE '%" + buscar + "%' OR ap.modelo LIKE '%" + buscar + "%'" + " OR ap.color LIKE '%" + buscar + "%' OR ap.numero_serie LIKE '%" + buscar + "%'" + " OR ap.observaciones LIKE '%" + buscar + "%' OR a.concepto LIKE '%" + buscar + "%'" + " OR a.total LIKE '%" + buscar + "%' OR a.observaciones LIKE '%" + buscar + "%'" + " OR a.Provincia LIKE '%" + buscar + "%' OR a.Poblacion LIKE '%" + buscar + "%' " + " OR a.CP LIKE '%" + buscar + "%' OR a.Calle LIKE '%" + buscar + "%' " + " OR a.Numero LIKE '%" + buscar + "%' OR a.Escalera LIKE '%" + buscar + "%' " + " OR a.Piso LIKE '%" + buscar + "%' OR a.Puerta LIKE '%" + buscar + "%')"; if (pendiente) consulta += " AND a.id_Factura IS NULL "; consulta += " ORDER BY a.fch_Creacion DESC"; res = st.executeQuery(consulta); while (res.next()) { if (this.documento.get(res.getString("id_Entrada") + ";Entrada") == null) { if (this.cliente.get(res.getInt("cli.id_Cliente")) == null) { cli = new Cliente(res.getString("cli.nombre"), res.getString("cli.apellidos"), res.getString("cli.nif"), res.getString("cli.provincia"), res.getString("cli.poblacion"), res.getInt("cli.cp"), res.getString("cli.calle"), res.getString("cli.numero"), res.getString("cli.escalera"), res.getInt("cli.piso"), res.getString("cli.puerta"), res.getInt("cli.tlf_Contacto"), res.getInt("cli.tlf_Auxiliar"), res.getString("cli.correo_electronico"), res.getString("cli.observaciones"), this); this.cliente.putIfAbsent(res.getInt("cli.id_Cliente"), cli); } else { cli = (Cliente) this.cliente.get(res.getInt("cli.id_Cliente")); } entrada = new Entrada(res.getString("e.observaciones"), res.getString("e.lugar"), res.getTimestamp("e.fch_Entrada"), this, cli, new Averia(res.getString("av.motivo"), res.getString("av.descripcion"), new Aparato(res.getString("ap.tipo"), res.getString("ap.marca"), res.getString("ap.modelo"), res.getString("ap.color"), res.getString("ap.numero_serie"), res.getString("ap.observaciones"), cli, res.getInt("ap.id_Aparato")), null)); cli.setEntrada(res.getInt("id_Entrada"), entrada); this.documento.putIfAbsent(res.getInt("e.id_Entrada") + ";Etrada", entrada); } else { entrada = (Entrada) this.documento.get(res.getInt("e.id_Entrada") + ";Entrada"); } entrada.cargarPresupuesto(res.getInt("e.id_Entrada")); albaranes.put(res.getInt("a.id_Albaran") + ";Albaran", this.documento.get(res.getInt("a.id_Albaran") + ";Albaran")); } // Buscar en ventas consulta = "SELECT a.*, cli.* FROM (((albaranes a INNER JOIN clientes cli ON a.id_Cliente = cli.id_Cliente)" + " INNER JOIN materiales_utilizados mat ON mat.id_Albaran=a.id_Albaran) INNER JOIN stock s ON s.id_stock = mat.id_stock)" + " WHERE (CONCAT(cli.nombre,' ',cli.apellidos) LIKE '%" + buscar + "%'" + " OR cli.Observaciones LIKE '%" + buscar + "%' OR cli.NIF LIKE'%" + buscar + "%' " + " OR cli.Provincia LIKE '%" + buscar + "%' OR cli.Poblacion LIKE '%" + buscar + "%' " + " OR cli.CP LIKE '%" + buscar + "%' OR cli.Calle LIKE '%" + buscar + "%' " + " OR cli.Numero LIKE '%" + buscar + "%' OR cli.Escalera LIKE '%" + buscar + "%' " + " OR cli.Piso LIKE '%" + buscar + "%' OR cli.Puerta LIKE '%" + buscar + "%' " + " OR cli.Correo_electronico LIKE '%" + buscar + "%' OR cli.tlf_Contacto LIKE '%" + buscar + "%' " + " OR cli.tlf_Auxiliar LIKE '%" + buscar + "%' OR a.concepto LIKE '%" + buscar + "%'" + " OR a.total LIKE '%" + buscar + "%' OR a.observaciones LIKE '%" + buscar + "%'" + " OR a.Provincia LIKE '%" + buscar + "%' OR a.Poblacion LIKE '%" + buscar + "%' " + " OR a.CP LIKE '%" + buscar + "%' OR a.Calle LIKE '%" + buscar + "%' " + " OR a.Numero LIKE '%" + buscar + "%' OR a.Escalera LIKE '%" + buscar + "%' " + " OR a.Piso LIKE '%" + buscar + "%' OR a.Puerta LIKE '%" + buscar + "%'" + " OR s.nombre LIKE '%" + buscar + "%' OR s.descripcion LIKE '" + buscar + "')"; if (pendiente) consulta += " AND a.id_Factura IS NULL "; consulta += " ORDER BY a.fch_Creacion DESC"; res = st.executeQuery(consulta); int id_Albaran; ResultSet resMaps; Statement stMaps; this.getStock(); while (res.next()) { id_Albaran = res.getInt("id_Albaran"); stMaps = con.createStatement(); resMaps = stMaps.executeQuery( "Select m_u.*,s.id_Proveedor FROM materiales_utilizados m_u INNER JOIN stock s ON m_u.id_Stock = s.id_Stock WHERE m_u.id_Albaran='" + id_Albaran + "' ORDER BY m_u.id_Albaran DESC "); Map materiales = new HashMap(); while (resMaps.next()) { // Materiales materiales .put(resMaps.getInt("m_u.id_Stock"), new MaterialTrabajos( ((Proveedor) this.proveedor.get(resMaps.getInt("s.id_Proveedor"))) .getStock(resMaps.getInt("m_u.id_Stock")), resMaps.getFloat("m_u.Cantidad"))); } stMaps.close(); Albaran albaran = new Albaran(res.getString("Concepto"), res.getString("Provincia"), res.getString("Poblacion"), res.getInt("CP"), res.getString("calle"), res.getString("numero"), res.getString("escalera"), res.getInt("piso"), res.getString("Puerta"), materiales, res.getString("Observaciones"), res.getFloat("Total"), res.getTimestamp("fch_Creacion"), this.getCliente(res.getInt("id_Cliente")), this); if (this.documento.putIfAbsent(id_Albaran + ";Albaran", albaran) == null) albaran.getCliente().setAlbaran(id_Albaran, albaran); else ((Albaran) this.documento.get(id_Albaran + ";Albaran")).actualizarVenta( res.getString("Concepto"), res.getString("Provincia"), res.getString("Poblacion"), res.getInt("CP"), res.getString("calle"), res.getString("numero"), res.getString("escalera"), res.getInt("piso"), res.getString("Puerta"), materiales, res.getString("Observaciones"), res.getFloat("Total")); albaranes.put(id_Albaran + ";Albaran", albaran); } return albaranes; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return new HashMap(); } } public Map recuperarFactura(int idAlbaran) { try { Map mapFactura = new HashMap(); // Torna un map de la facuta actual Statement st = con.createStatement(); ResultSet res = st.executeQuery( "SELECT f.*, a.id_Cliente id_Cliente,GROUP_CONCAT(concat(IF(e.id_entrada is null,'',e.id_entrada),';',id_Albaran)) EntradaAlbaran" + " FROM (((albaranes a INNER JOIN facturas f ON a.id_factura = f.id_factura) LEFT JOIN presupuestos p ON a.id_Presupuesto=p.id_Presupuesto)" + " LEFT JOIN entradas e ON e.id_entrada=p.id_entrada) WHERE a.id_Factura=(SELECT id_Factura FROM albaranes" + " WHERE id_Albaran=" + idAlbaran + ") AND a.id_Factura IS NOT NULL GROUP BY a.id_Factura"); Factura factura; String[] vecEntradasAlbaranes; if (res.next()) { vecEntradasAlbaranes = res.getString("EntradaAlbaran").split(","); factura = new Factura(res.getString("f.concepto"), res.getString("f.forma_pago"), res.getString("f.observaciones"), res.getTimestamp("f.fch_creacion"), this.getCliente(res.getInt("id_Cliente")), this); if (this.documento.putIfAbsent(res.getInt("f.id_Factura") + ";Factura", factura) == null) { mapFactura.putIfAbsent(res.getInt("f.id_Factura") + ";Factura", factura); ((Cliente) this.cliente.get(res.getInt("id_Cliente"))).setFactura(res.getInt("f.id_Factura"), factura); ((Albaran) this.documento.get(idAlbaran + ";Albaran")).setFactura(factura); factura.setAlbaran(idAlbaran, (Albaran) this.documento.get(idAlbaran + ";Albaran")); Map auxMap; for (int i = 0; i < vecEntradasAlbaranes.length; i++) { if (vecEntradasAlbaranes[i].split(";")[0].isEmpty()) { auxMap = this.recuperarVenta(Integer.parseInt(vecEntradasAlbaranes[i].split(";")[1])); ((Albaran) auxMap.get(Integer.parseInt(vecEntradasAlbaranes[i].split(";")[1]))) .setFactura(factura); factura.setAlbaran(Integer.parseInt(vecEntradasAlbaranes[i].split(";")[1]), (Albaran) auxMap.get(Integer.parseInt(vecEntradasAlbaranes[i].split(";")[1]))); } else { Entrada entrada = this .getEntrada(Integer.parseInt(vecEntradasAlbaranes[i].split(";")[0])); entrada.cargarPresupuesto(Integer.parseInt(vecEntradasAlbaranes[i].split(";")[0])); } } } else { factura = (Factura) this.documento.get(res.getInt("f.id_Factura") + ";Factura"); factura.actualizar(res.getString("f.concepto"), res.getString("f.forma_pago"), res.getString("f.observaciones")); factura.setAlbaran(idAlbaran, (Albaran) this.documento.get(idAlbaran + ";Albaran")); mapFactura.putIfAbsent(res.getInt("f.id_Factura") + ";Factura", factura); } ((Cliente) this.cliente.get(res.getInt("id_Cliente"))).setFactura(res.getInt("f.id_Factura"), factura); st.close(); } return mapFactura; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return new HashMap(); } } public void reuperarVentasCliente(int idCliente) { int id_Albaran = 0; this.getStock(); try { Statement st = con.createStatement(); ResultSet res = st.executeQuery("Select * FROM albaranes WHERE id_Cliente='" + idCliente + "' AND id_Presupuesto IS NULL ORDER BY id_Albaran DESC "); Statement stMaps; ResultSet resMaps; while (res.next()) { id_Albaran = res.getInt("id_Albaran"); stMaps = con.createStatement(); resMaps = stMaps.executeQuery( "Select m_u.*,s.id_Proveedor FROM materiales_utilizados m_u INNER JOIN stock s ON m_u.id_Stock = s.id_Stock WHERE m_u.id_Albaran='" + id_Albaran + "' ORDER BY m_u.id_Albaran DESC "); Map materiales = new HashMap(); while (resMaps.next()) { // Materiales materiales .put(resMaps.getInt("m_u.id_Stock"), new MaterialTrabajos( ((Proveedor) this.proveedor.get(resMaps.getInt("s.id_Proveedor"))) .getStock(resMaps.getInt("m_u.id_Stock")), resMaps.getFloat("m_u.Cantidad"))); } Albaran albaran = new Albaran(res.getString("Concepto"), res.getString("Provincia"), res.getString("Poblacion"), res.getInt("CP"), res.getString("calle"), res.getString("numero"), res.getString("escalera"), res.getInt("piso"), res.getString("Puerta"), materiales, res.getString("Observaciones"), res.getFloat("Total"), (res.getTimestamp("fch_Creacion")), this.getCliente(idCliente), this); if (this.documento.putIfAbsent(id_Albaran + ";Albaran", albaran) == null) { albaran.getCliente().setAlbaran(id_Albaran, albaran); } else ((Albaran) this.documento.get(id_Albaran + ";Albaran")).actualizarVenta( res.getString("Concepto"), res.getString("Provincia"), res.getString("Poblacion"), res.getInt("CP"), res.getString("calle"), res.getString("numero"), res.getString("escalera"), res.getInt("piso"), res.getString("Puerta"), materiales, res.getString("Observaciones"), res.getFloat("Total")); stMaps.close(); ((Cliente) this.cliente.get(idCliente)).setAlbaran(id_Albaran, (Albaran) this.documento.get(id_Albaran + ";Albaran")); } st.close(); } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); } } public Map recuperarVenta(int idAlbaran) { this.getStock(); try { Statement st = con.createStatement(); ResultSet res = st.executeQuery("Select * FROM albaranes WHERE id_Albaran='" + idAlbaran + "' AND id_Presupuesto IS NULL ORDER BY id_Albaran DESC "); Statement stMaps; ResultSet resMaps; Map albaranes = new HashMap(); if (res.next()) { stMaps = con.createStatement(); resMaps = stMaps.executeQuery( "Select m_u.*,s.id_Proveedor FROM materiales_utilizados m_u INNER JOIN stock s ON m_u.id_Stock = s.id_Stock WHERE m_u.id_Albaran='" + idAlbaran + "' ORDER BY m_u.id_Albaran DESC "); Map materiales = new HashMap(); while (resMaps.next()) { // Materiales materiales .put(resMaps.getInt("m_u.id_Stock"), new MaterialTrabajos( ((Proveedor) this.proveedor.get(resMaps.getInt("s.id_Proveedor"))) .getStock(resMaps.getInt("m_u.id_Stock")), resMaps.getFloat("m_u.Cantidad"))); } Albaran albaran = new Albaran(res.getString("Concepto"), res.getString("Provincia"), res.getString("Poblacion"), res.getInt("CP"), res.getString("calle"), res.getString("numero"), res.getString("escalera"), res.getInt("piso"), res.getString("Puerta"), materiales, res.getString("Observaciones"), res.getFloat("Total"), (res.getTimestamp("fch_Creacion")), this.getCliente(res.getInt("id_Cliente")), this); if (this.documento.putIfAbsent(idAlbaran + ";Albaran", albaran) == null) { albaran.getCliente().setAlbaran(idAlbaran, albaran); albaranes.put(idAlbaran, albaran); } else { ((Albaran) this.documento.get(idAlbaran + ";Albaran")).actualizarVenta( res.getString("Concepto"), res.getString("Provincia"), res.getString("Poblacion"), res.getInt("CP"), res.getString("calle"), res.getString("numero"), res.getString("escalera"), res.getInt("piso"), res.getString("Puerta"), materiales, res.getString("Observaciones"), res.getFloat("Total")); albaranes.put(idAlbaran, this.documento.get(idAlbaran + ";Albaran")); } //((Cliente)this.cliente.get(res.getInt("id_cliente"))).setAlbaran(idAlbaran,(Albaran)this.documento.get(idAlbaran+";Albaran")); stMaps.close(); } st.close(); return albaranes; } catch (Exception ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return new HashMap(); } } public Map buscarFactura(String buscar, boolean pendiente) { try { Statement st = con.createStatement(); Map facturas = new HashMap(); String consulta = "SELECT f.*,GROUP_CONCAT(if(e.id_entrada is null,'',e.id_entrada),';'," + " a.id_albaran) EntradasAlbaranes, a.* FROM ((((albaranes a INNER JOIN (facturas f LEFT JOIN recibos r ON" + " f.id_factura=r.id_factura) ON f.id_Factura=a.id_Factura)" + " INNER JOIN clientes cli ON a.id_cliente=cli.id_cliente)" + " LEFT JOIN presupuestos p ON a.id_Presupuesto=p.id_Presupuesto)" + " LEFT JOIN ((entradas e LEFT JOIN (citas cita INNER JOIN direccion_citas dir" + " ON cita.direccion = dir.id_direccion) ON cita.id_Entrada = e.id_entrada) LEFT JOIN" + " (citas_empleados c_e INNER JOIN usuarios u ON c_e.id_Usuario = u.id_Usuario)" + " ON cita.id_Cita=c_e.id_Cita) LEFT JOIN (averias av INNER JOIN aparatos ap" + " ON av.id_aparato = ap.id_aparato) ON e.id_Entrada=e.id_Entrada ON e.id_entrada=p.id_entrada)" + " WHERE (CONCAT(cli.nombre,' ',cli.apellidos) LIKE '%" + buscar + "%'" + " OR cli.Observaciones LIKE '%" + buscar + "%' OR cli.NIF LIKE'%" + buscar + "%' " + " OR cli.Provincia LIKE '%" + buscar + "%' OR cli.Poblacion LIKE '%" + buscar + "%' " + " OR cli.CP LIKE '%" + buscar + "%' OR cli.Calle LIKE '%" + buscar + "%' " + " OR cli.Numero LIKE '%" + buscar + "%' OR cli.Escalera LIKE '%" + buscar + "%' " + " OR cli.Piso LIKE '%" + buscar + "%' OR cli.Puerta LIKE '%" + buscar + "%' " + " OR cli.Correo_electronico LIKE '%" + buscar + "%' OR cli.tlf_Contacto LIKE '%" + buscar + "%' " + " OR cli.tlf_Auxiliar LIKE '%" + buscar + "%' OR e.lugar LIKE '%" + buscar + "%'" + " OR e.observaciones LIKE '%" + buscar + "%' OR av.motivo LIKE '%" + buscar + "%'" + " OR av.descripcion LIKE '%" + buscar + "%' OR ap.tipo LIKE '%" + buscar + "%'" + " OR ap.marca LIKE '%" + buscar + "%' OR ap.modelo LIKE '%" + buscar + "%'" + " OR ap.color LIKE '%" + buscar + "%' OR ap.numero_serie LIKE '%" + buscar + "%'" + " OR ap.observaciones LIKE '%" + buscar + "%' OR a.concepto LIKE '%" + buscar + "%'" + " OR a.total LIKE '%" + buscar + "%' OR a.observaciones LIKE '%" + buscar + "%'" + " OR a.Provincia LIKE '%" + buscar + "%' OR a.Poblacion LIKE '%" + buscar + "%' " + " OR a.CP LIKE '%" + buscar + "%' OR a.Calle LIKE '%" + buscar + "%' " + " OR a.Numero LIKE '%" + buscar + "%' OR a.Escalera LIKE '%" + buscar + "%' " + " OR a.Piso LIKE '%" + buscar + "%' OR a.Puerta LIKE '%" + buscar + "%'" + " OR cita.motivo LIKE '%" + buscar + "%' OR cita.observaciones LIKE '%" + buscar + "%'" + " OR dir.provincia LIKE '%" + buscar + "%' OR dir.poblacion LIKE '%" + buscar + "%'" + " OR dir.CP LIKE '%" + buscar + "%' OR dir.Calle LIKE '%" + buscar + "%'" + " OR dir.Numero LIKE '%" + buscar + "%'OR dir.Escalera LIKE '%" + buscar + "%'" + " OR dir.Piso LIKE '%" + buscar + "%' OR dir.Puerta LIKE '%" + buscar + "%'" + " OR f.concepto LIKE '%" + buscar + "%' OR f.observaciones LIKE '%" + buscar + "%'" + " OR f.forma_pago LIKE '%" + buscar + "%') "; if (pendiente) consulta += " AND r.id_Recibo IS NULL "; consulta += " GROUP BY f.id_Factura"; ResultSet res = st.executeQuery(consulta); while (res.next()) { // agafar id Albaran i anar a carregar facturas String[] idsEntAlb = res.getString("EntradasAlbaranes").split(",")[0].split(";"); if (idsEntAlb[0].isEmpty()) { // Venta this.recuperarVenta(Integer.parseInt(idsEntAlb[1])); } else { // Entrada int id_Albaran = Integer.parseInt(idsEntAlb[1]); Statement stMaps = con.createStatement(); ResultSet resMaps = stMaps.executeQuery( "Select m_u.*,s.id_Proveedor FROM materiales_utilizados m_u INNER JOIN stock s ON m_u.id_Stock = s.id_Stock WHERE m_u.id_Albaran='" + id_Albaran + "' ORDER BY m_u.id_Albaran DESC "); Map materiales = new HashMap(); while (resMaps.next()) { // Materiales materiales .put(resMaps.getInt("m_u.id_Stock"), new MaterialTrabajos( ((Proveedor) this.proveedor.get(resMaps.getInt("s.id_Proveedor"))) .getStock(resMaps.getInt("m_u.id_Stock")), resMaps.getFloat("m_u.Cantidad"))); } Map trabajos = new HashMap(); resMaps = stMaps.executeQuery( "SELECT * FROM trabajos_realizados t_r INNER JOIN albaranes a ON t_r.id_Albaran = a.id_Albaran Where a.id_Albaran = '" + id_Albaran + "'"); while (resMaps.next()) { trabajos.put(resMaps.getInt("t_r.id_Usuario"), new Trabajo(resMaps.getFloat("t_r.horas"), resMaps.getString("t_r.Descripcion"), (Empleado) empleados.get(resMaps.getInt("t_r.id_Usuario")))); } stMaps.close(); Albaran albaran = new Albaran(res.getString("a.Concepto"), res.getString("a.Provincia"), res.getString("a.Poblacion"), res.getInt("a.CP"), res.getString("a.calle"), res.getString("a.numero"), res.getString("a.escalera"), res.getInt("a.piso"), res.getString("a.Puerta"), materiales, trabajos, res.getString("a.Observaciones"), res.getFloat("a.Total"), (res.getTimestamp("a.fch_Creacion")), (res.getTimestamp("a.fch_Entrega")), null, this.getCliente(res.getInt("a.id_Cliente")), this); if (this.documento.putIfAbsent(id_Albaran + ";Albaran", albaran) == null) { albaran.getCliente().setAlbaran(id_Albaran, albaran); } else { ((Albaran) this.documento.get(id_Albaran + ";Albaran")).actualizarAlbaran( res.getString("a.Concepto"), res.getString("a.Provincia"), res.getString("a.Poblacion"), res.getInt("a.CP"), res.getString("a.calle"), res.getString("a.numero"), res.getString("a.escalera"), res.getInt("a.piso"), res.getString("a.Puerta"), materiales, trabajos, res.getString("a.Observaciones"), res.getFloat("a.Total")); } stMaps.close(); } facturas.putAll(this.recuperarFactura(Integer.parseInt(idsEntAlb[1]))); } st.close(); return facturas; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return new HashMap(); } } public boolean guardarFactura(int idFactura, Factura factura) { try { Statement st = con.createStatement(); if (st.executeUpdate("UPDATE facturas set concepto='" + factura.getConcepto() + "'," + "forma_pago='" + factura.getFormaPago() + "',observaciones='" + factura.getObservaciones() + "'," + "total=" + factura.getTotal() + " WHERE id_factura=" + idFactura) > 0) { Iterator itALbaranes = factura.getAlbaranes().entrySet().iterator(); String condicion = ""; while (itALbaranes.hasNext()) { Map.Entry aux = (Map.Entry) itALbaranes.next(); if (condicion.isEmpty()) condicion += " id_Albaran = " + aux.getKey(); else condicion += " OR id_Albaran = " + aux.getKey(); } if (st.executeUpdate("UPDATE albaranes set id_factura=null WHERE id_Factura =" + idFactura) > 0) { if (st.executeUpdate( "UPDATE albaranes set id_factura=" + idFactura + " WHERE " + condicion) > 0) { st.close(); return true; } else { st.close(); return false; } } else { st.close(); return false; } } else { st.close(); return false; } } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public boolean guardarCliente(int idCliente, Cliente cli) { try { Statement st = con.createStatement(); if (st.executeUpdate("UPDATE clientes set nombre='" + cli.getNombre() + "',apellidos='" + cli.getApellidos() + "'," + "nif='" + cli.getNif() + "',provincia='" + cli.getProvincia() + "',poblacion='" + cli.getPoblacion() + "'," + "cp='" + cli.getCp() + "',calle='" + cli.getCalle() + "',numero='" + cli.getNumero() + "'," + "escalera='" + cli.getEscalera() + "',piso='" + cli.getPiso() + "',puerta='" + cli.getPuerta() + "'," + "tlf_contacto='" + cli.getTlfFijo() + "',tlf_auxiliar='" + cli.getTlfMovil() + "'," + "correo_electronico='" + cli.getEmail() + "',observaciones='" + cli.getObservaciones() + "' " + " WHERE id_Cliente=" + idCliente) > 0) { st.close(); return true; } else { st.close(); return false; } } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } public int crearRecibo(int idFactura, Recibo recibo) { try { Statement st = con.createStatement(); st.executeUpdate("INSERT INTO recibos(fch_creacion,provincia,poblacion,cp,calle," + "numero,escalera,piso,puerta,observaciones,id_Factura) VALUES(" + "'" + ((new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(recibo.getFchCreacion())) + "'," + "'" + recibo.getProvincia() + "','" + recibo.getPoblacion() + "','" + recibo.getCp() + "'," + "'" + recibo.getCalle() + "','" + recibo.getNumero() + "','" + recibo.getEscalera() + "'," + "'" + recibo.getPiso() + "','" + recibo.getPuerta() + "','" + recibo.getObservaciones() + "','" + idFactura + "')"); ResultSet res = st.executeQuery("SELECT id_Recibo FROM recibos WHERE fch_creacion='" + ((new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(recibo.getFchCreacion())) + "' ORDER BY id_factura DESC"); int id_Recibo = 0; if (res.next()) { id_Recibo = res.getInt("id_Recibo"); this.documento.put(id_Recibo + ";Recibo", recibo); recibo.getFactura().getCliente().setRecibo(id_Recibo, recibo); } return id_Recibo; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return 0; } } public Map recuperarRecibo(int idFactura) { try { Statement st = con.createStatement(); ResultSet res = st.executeQuery("SELECT * FROM recibos WHERE id_Factura =" + idFactura); Map mapRecibo = new HashMap(); Recibo recibo; if (res.next()) { recibo = new Recibo(res.getString("provincia"), res.getString("poblacion"), res.getInt("cp"), res.getString("calle"), res.getString("numero"), res.getString("escalera"), res.getInt("piso"), res.getString("puerta"), res.getString("observaciones"), this.getFactura(res.getInt("id_Factura")), this); if (this.documento.putIfAbsent(res.getInt("id_Recibo") + ";Recibo", recibo) == null) { mapRecibo.put(res.getInt("id_Recibo") + ";Recibo", recibo); } else { mapRecibo.put(res.getInt("id_Recibo") + ";Recibo", this.documento.get(res.getInt("id_Recibo") + ";Recibo")); } recibo.getCliente().setRecibo(res.getInt("id_Recibo"), recibo); } st.close(); return mapRecibo; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return new HashMap(); } } public Map buscarRecibo(String buscar) { try { Statement st = con.createStatement(); Map recibos = new HashMap(); Iterator facturas; String consulta = "SELECT r.*,f.*,GROUP_CONCAT(if(e.id_entrada is null,'',e.id_entrada),';'," + " a.id_albaran) EntradasAlbaranes, a.* FROM ((((albaranes a INNER JOIN (facturas f INNER JOIN recibos r ON" + " f.id_factura=r.id_factura) ON f.id_Factura=a.id_Factura)" + " INNER JOIN clientes cli ON a.id_cliente=cli.id_cliente)" + " LEFT JOIN presupuestos p ON a.id_Presupuesto=p.id_Presupuesto)" + " LEFT JOIN ((entradas e LEFT JOIN (citas cita INNER JOIN direccion_citas dir" + " ON cita.direccion = dir.id_direccion) ON cita.id_Entrada = e.id_entrada) LEFT JOIN" + " (citas_empleados c_e INNER JOIN usuarios u ON c_e.id_Usuario = u.id_Usuario)" + " ON cita.id_Cita=c_e.id_Cita) LEFT JOIN (averias av INNER JOIN aparatos ap" + " ON av.id_aparato = ap.id_aparato) ON e.id_Entrada=e.id_Entrada ON e.id_entrada=p.id_entrada)" + " WHERE (CONCAT(cli.nombre,' ',cli.apellidos) LIKE '%" + buscar + "%'" + " OR cli.Observaciones LIKE '%" + buscar + "%' OR cli.NIF LIKE'%" + buscar + "%' " + " OR cli.Provincia LIKE '%" + buscar + "%' OR cli.Poblacion LIKE '%" + buscar + "%' " + " OR cli.CP LIKE '%" + buscar + "%' OR cli.Calle LIKE '%" + buscar + "%' " + " OR cli.Numero LIKE '%" + buscar + "%' OR cli.Escalera LIKE '%" + buscar + "%' " + " OR cli.Piso LIKE '%" + buscar + "%' OR cli.Puerta LIKE '%" + buscar + "%' " + " OR cli.Correo_electronico LIKE '%" + buscar + "%' OR cli.tlf_Contacto LIKE '%" + buscar + "%' " + " OR cli.tlf_Auxiliar LIKE '%" + buscar + "%' OR e.lugar LIKE '%" + buscar + "%'" + " OR e.observaciones LIKE '%" + buscar + "%' OR av.motivo LIKE '%" + buscar + "%'" + " OR av.descripcion LIKE '%" + buscar + "%' OR ap.tipo LIKE '%" + buscar + "%'" + " OR ap.marca LIKE '%" + buscar + "%' OR ap.modelo LIKE '%" + buscar + "%'" + " OR ap.color LIKE '%" + buscar + "%' OR ap.numero_serie LIKE '%" + buscar + "%'" + " OR ap.observaciones LIKE '%" + buscar + "%' OR a.concepto LIKE '%" + buscar + "%'" + " OR a.total LIKE '%" + buscar + "%' OR a.observaciones LIKE '%" + buscar + "%'" + " OR a.Provincia LIKE '%" + buscar + "%' OR a.Poblacion LIKE '%" + buscar + "%' " + " OR a.CP LIKE '%" + buscar + "%' OR a.Calle LIKE '%" + buscar + "%' " + " OR a.Numero LIKE '%" + buscar + "%' OR a.Escalera LIKE '%" + buscar + "%' " + " OR a.Piso LIKE '%" + buscar + "%' OR a.Puerta LIKE '%" + buscar + "%'" + " OR cita.motivo LIKE '%" + buscar + "%' OR cita.observaciones LIKE '%" + buscar + "%'" + " OR dir.provincia LIKE '%" + buscar + "%' OR dir.poblacion LIKE '%" + buscar + "%'" + " OR dir.CP LIKE '%" + buscar + "%' OR dir.Calle LIKE '%" + buscar + "%'" + " OR dir.Numero LIKE '%" + buscar + "%'OR dir.Escalera LIKE '%" + buscar + "%'" + " OR dir.Piso LIKE '%" + buscar + "%' OR dir.Puerta LIKE '%" + buscar + "%'" + " OR f.concepto LIKE '%" + buscar + "%' OR f.observaciones LIKE '%" + buscar + "%'" + " OR f.forma_pago LIKE '%" + buscar + "%' OR r.observaciones LIKE '%" + buscar + "%'" + " OR r.Provincia LIKE '%" + buscar + "%' OR r.Poblacion LIKE '%" + buscar + "%' " + " OR r.CP LIKE '%" + buscar + "%' OR r.Calle LIKE '%" + buscar + "%' " + " OR r.Numero LIKE '%" + buscar + "%' OR r.Escalera LIKE '%" + buscar + "%' " + " OR r.Piso LIKE '%" + buscar + "%' OR r.Puerta LIKE '%" + buscar + "%') GROUP BY f.id_Factura"; ResultSet res = st.executeQuery(consulta); while (res.next()) { // agafar id Albaran i anar a carregar facturas String[] idsEntAlb = res.getString("EntradasAlbaranes").split(",")[0].split(";"); if (idsEntAlb[0].isEmpty()) { // Venta this.recuperarVenta(Integer.parseInt(idsEntAlb[1])); } else { // Entrada int id_Albaran = Integer.parseInt(idsEntAlb[1]); Statement stMaps = con.createStatement(); ResultSet resMaps = stMaps.executeQuery( "Select m_u.*,s.id_Proveedor FROM materiales_utilizados m_u INNER JOIN stock s ON m_u.id_Stock = s.id_Stock WHERE m_u.id_Albaran='" + id_Albaran + "' ORDER BY m_u.id_Albaran DESC "); Map materiales = new HashMap(); while (resMaps.next()) { // Materiales materiales .put(resMaps.getInt("m_u.id_Stock"), new MaterialTrabajos( ((Proveedor) this.proveedor.get(resMaps.getInt("s.id_Proveedor"))) .getStock(resMaps.getInt("m_u.id_Stock")), resMaps.getFloat("m_u.Cantidad"))); } Map trabajos = new HashMap(); resMaps = stMaps.executeQuery( "SELECT * FROM trabajos_realizados t_r INNER JOIN albaranes a ON t_r.id_Albaran = a.id_Albaran Where a.id_Albaran = '" + id_Albaran + "'"); while (resMaps.next()) { trabajos.put(resMaps.getInt("t_r.id_Usuario"), new Trabajo(resMaps.getFloat("t_r.horas"), resMaps.getString("t_r.Descripcion"), (Empleado) empleados.get(resMaps.getInt("t_r.id_Usuario")))); } stMaps.close(); Albaran albaran = new Albaran(res.getString("a.Concepto"), res.getString("a.Provincia"), res.getString("a.Poblacion"), res.getInt("a.CP"), res.getString("a.calle"), res.getString("a.numero"), res.getString("a.escalera"), res.getInt("a.piso"), res.getString("a.Puerta"), materiales, trabajos, res.getString("a.Observaciones"), res.getFloat("a.Total"), (res.getTimestamp("a.fch_Creacion")), (res.getTimestamp("a.fch_Entrega")), null, this.getCliente(res.getInt("a.id_Cliente")), this); if (this.documento.putIfAbsent(id_Albaran + ";Albaran", albaran) == null) { albaran.getCliente().setAlbaran(id_Albaran, albaran); } else { ((Albaran) this.documento.get(id_Albaran + ";Albaran")).actualizarAlbaran( res.getString("a.Concepto"), res.getString("a.Provincia"), res.getString("a.Poblacion"), res.getInt("a.CP"), res.getString("a.calle"), res.getString("a.numero"), res.getString("a.escalera"), res.getInt("a.piso"), res.getString("a.Puerta"), materiales, trabajos, res.getString("a.Observaciones"), res.getFloat("a.Total")); } stMaps.close(); } facturas = this.recuperarFactura(Integer.parseInt(idsEntAlb[1])).entrySet().iterator(); while (facturas.hasNext()) { Map.Entry aux = (Map.Entry) facturas.next(); if (this.documento.putIfAbsent(res.getInt("r.id_Recibo") + ";Recibo", ((Factura) aux.getValue()).getRecibo()) == null) ((Factura) aux.getValue()).getCliente().setRecibo(res.getInt("r.id_recibo"), ((Factura) aux.getValue()).getRecibo()); recibos.put(res.getInt("r.id_Recibo") + ";Recibo", ((Factura) aux.getValue()).getRecibo()); } } st.close(); return recibos; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return new HashMap(); } } public boolean entregaAlbaran(int idAlbaran, Albaran albaran) { try { Statement st = con.createStatement(); if (st.executeUpdate("UPDATE albaranes SET fch_Entrega='" + ((new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(albaran.getFchEntrega())) + "' " + " WHERE id_Albaran='" + idAlbaran + "'") > 0) { st.close(); return true; } else return false; } catch (SQLException ex) { Logger.getLogger(GestoSAT.class.getName()).log(Level.SEVERE, null, ex); return false; } } }