ventanas.parqueadero.ventas.java Source code

Java tutorial

Introduction

Here is the source code for ventanas.parqueadero.ventas.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ventanas.parqueadero;

import com.sun.glass.events.KeyEvent;
import ventanas.ventas.*;
import controllers.BillingJpaController;
import controllers.ClientProviderJpaController;
import controllers.ConfigurationsJpaController;
import controllers.PersonJpaController;
import controllers.ProductJpaController;
import controllers.UsersJpaController;
import controllers.exceptions.NonexistentEntityException;
import entities.Billing;
import entities.ClientProvider;
import entities.Configurations;
import entities.DetailBilling;
import entities.Product;
import entities.Users;
import java.awt.event.KeyListener;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Formatter;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.Query;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableCellRenderer;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
import org.joda.time.DateTime;
import org.joda.time.Period;
import org.joda.time.PeriodType;
import utilitarios.TabsIndex;
import ventanas.administracion.LoginApp;
import ventanas.mainForm;

/**
 *
 * @author macbookpro
 */
public class ventas extends javax.swing.JPanel implements KeyListener {

    static BillingJpaController controller = null;
    static PersonJpaController controllerPerson = null;
    static ProductJpaController controllerProducto = null;
    static ClientProviderJpaController controllerClient = null;
    static ConfigurationsJpaController configController = null;
    public ProductJpaController productController;
    static UsersJpaController userscontroller;
    public static List<Billing> ventas;
    private String secuencial;
    private int numberTickets;
    private int numSecuencial;
    private Configurations config;

    /**
     * Creates new form ventas
     */
    public ventas() {
        initComponents();
        controller = new BillingJpaController();
        controllerPerson = new PersonJpaController();
        controllerProducto = new ProductJpaController();
        controllerClient = new ClientProviderJpaController();
        configController = new ConfigurationsJpaController();
        productController = new ProductJpaController();
        userscontroller = new UsersJpaController();
        secuencial = "";
        checkInitVars();
        verTabla(false);
    }

    /**
     * Chequear las variables de configuracion necesarias
     */
    private void checkInitVars() {
        //verificar que el producto de parquimetro este configurado
        Query q = productController.getEm()
                .createQuery("Select p from Product p where p.code =:code and p.active=true");
        q.setParameter("code", "park001");
        List<Product> productList = q.getResultList();
        if (productList.isEmpty()) {
            btnNuevo.setEnabled(false);
            JOptionPane.showMessageDialog(this,
                    "El item parqumetro no est activo.\n Vaya a la seccin Inventario > Productos",
                    "Advertencia", JOptionPane.WARNING_MESSAGE);
        } else {
            btnNuevo.setEnabled(true);
        }
    }

    /**
     *
     * @param configs
     * @return
     */
    private int getValue(List<Configurations> configs) {
        if (configs == null) {
            return 0;
        }
        return Integer.valueOf(configs.get(0).getValor());
    }

    /**
     * Chequear que haya variables de configuracion
     */
    private List<Configurations> checkConfigurations(String code) {
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("code", code);

        List<Configurations> configs = configController.namedQuery("Configurations.findByCode", parameters);

        if (configs.isEmpty()) {
            JOptionPane.showMessageDialog(this, "No existe la variable de configuracin: " + code, "ERROR",
                    JOptionPane.ERROR_MESSAGE);

        }
        return configs;
    }

    /**
     *
     * @param refresh
     */
    public static void verTabla(boolean refresh) {
        dBTable1.createControlPanel();
        Calendar date = Calendar.getInstance();
        date.set(Calendar.HOUR_OF_DAY, 0);
        date.set(Calendar.MINUTE, 0);
        ventas = controller.findByDayAndCollector2(date.getTime(), LoginApp.userLogged, refresh);
        dBTable1.setEditable(false);
        dBTable1.setSortEnabled(false);

        setEmiterAndCollecter(ventas);
        fijarDatos(ventas);
    }

    /**
     *
     * @param ventas
     */
    private static void fijarDatos(List<Billing> ventas) {
        try {
            labelResultado.setText("Resultado: " + ventas.size());
            String methodNames[] = { "getFecha", "getPlaca", "getCliente", "getInicio", "getFin", "getNumero",
                    "getTotal", "getEstado", "getEmisor", "getCobrador" };
            dBTable1.refreshDataObject(ventas, methodNames);
            dBTable1.getColumn(0).setPreferredWidth(150);
            dBTable1.getColumn(1).setPreferredWidth(100);
            dBTable1.getColumn(2).setPreferredWidth(200);
            dBTable1.getColumn(3).setPreferredWidth(100);
            dBTable1.getColumn(4).setPreferredWidth(100);
            dBTable1.getColumn(5).setPreferredWidth(80);
            dBTable1.getColumn(6).setPreferredWidth(60);
            dBTable1.getColumn(7).setPreferredWidth(80);
            dBTable1.getColumn(8).setPreferredWidth(80);
            dBTable1.getColumn(9).setPreferredWidth(80);

            DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
            rightRenderer.setHorizontalAlignment(DefaultTableCellRenderer.RIGHT);

            dBTable1.getColumn(3).setCellRenderer(rightRenderer);
            dBTable1.getColumn(4).setCellRenderer(rightRenderer);
        } catch (Exception ex) {
            Logger.getLogger(ventas.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        contenedor = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        btnBuscar = new javax.swing.JButton();
        dateDesde = new com.toedter.calendar.JDateChooser();
        dateDesde.setDate(new Date());
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        dateHasta = new com.toedter.calendar.JDateChooser();
        dateHasta.setDate(new Date());
        jSeparator1 = new javax.swing.JSeparator();
        btnCancelar = new javax.swing.JButton();
        jXTitledPanel1 = new org.jdesktop.swingx.JXTitledPanel();
        dBTable1 = new quick.dbtable.DBTable();
        labelResultado = new javax.swing.JLabel();
        btnNuevo = new javax.swing.JButton();
        btnPago1 = new javax.swing.JButton();
        btnImprimir = new javax.swing.JButton();
        btnAnular = new javax.swing.JButton();
        btnPago = new javax.swing.JButton();
        searchTicketTxt = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        btnNuevo1 = new javax.swing.JButton();

        addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                formKeyReleased(evt);
            }
        });

        contenedor.setBackground(new java.awt.Color(255, 255, 255));
        contenedor.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                contenedorKeyPressed(evt);
            }

            public void keyReleased(java.awt.event.KeyEvent evt) {
                contenedorKeyReleased(evt);
            }
        });

        jLabel3.setFont(new java.awt.Font("Arial", 1, 18)); // NOI18N
        jLabel3.setText("Parqueadero");

        btnBuscar.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        btnBuscar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/imagenes/magnifier12.png"))); // NOI18N
        btnBuscar.setText("Buscar");
        btnBuscar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnBuscar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBuscarActionPerformed(evt);
            }
        });

        jLabel4.setFont(new java.awt.Font("Arial", 1, 12)); // NOI18N
        jLabel4.setText("Desde:");

        jLabel5.setFont(new java.awt.Font("Arial", 1, 12)); // NOI18N
        jLabel5.setText("Hasta:");

        btnCancelar.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        btnCancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/imagenes/wiping16.png"))); // NOI18N
        btnCancelar.setText("Limpiar");
        btnCancelar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnCancelar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });

        jXTitledPanel1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jXTitledPanel1KeyReleased(evt);
            }
        });

        labelResultado.setFont(new java.awt.Font("Arial", 1, 12)); // NOI18N
        labelResultado.setText("Resultados: ");

        btnNuevo.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        btnNuevo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/imagenes/folder112.png"))); // NOI18N
        btnNuevo.setMnemonic('N');
        btnNuevo.setText("Nuevo");
        btnNuevo.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnNuevo.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnNuevo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNuevoActionPerformed(evt);
            }
        });
        btnNuevo.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                btnNuevoKeyPressed(evt);
            }

            public void keyReleased(java.awt.event.KeyEvent evt) {
                btnNuevoKeyReleased(evt);
            }
        });

        btnPago1.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        btnPago1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/imagenes/salir.png"))); // NOI18N
        btnPago1.setMnemonic('S');
        btnPago1.setText("Salir");
        btnPago1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnPago1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnPago1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnPago1ActionPerformed(evt);
            }
        });

        btnImprimir.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        btnImprimir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/imagenes/printer67.png"))); // NOI18N
        btnImprimir.setMnemonic('I');
        btnImprimir.setText("Imprimir");
        btnImprimir.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnImprimir.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnImprimir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnImprimirActionPerformed(evt);
            }
        });

        btnAnular.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        btnAnular.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/imagenes/trash.png"))); // NOI18N
        btnAnular.setMnemonic('A');
        btnAnular.setText("Anular");
        btnAnular.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnAnular.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnAnular.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAnularActionPerformed(evt);
            }
        });

        btnPago.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        btnPago.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/imagenes/Banknotes.png"))); // NOI18N
        btnPago.setMnemonic('P');
        btnPago.setText("Pagar");
        btnPago.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnPago.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnPago.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnPagoActionPerformed(evt);
            }
        });

        searchTicketTxt.setFont(new java.awt.Font("Lucida Grande", 1, 14)); // NOI18N
        searchTicketTxt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                searchTicketTxtActionPerformed(evt);
            }
        });
        searchTicketTxt.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                searchTicketTxtKeyTyped(evt);
            }

            public void keyPressed(java.awt.event.KeyEvent evt) {
                searchTicketTxtKeyPressed(evt);
            }

            public void keyReleased(java.awt.event.KeyEvent evt) {
                searchTicketTxtKeyReleased(evt);
            }
        });

        jLabel6.setFont(new java.awt.Font("Lucida Grande", 1, 13)); // NOI18N
        jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel6.setText("Placa o Nmero de ticket:");

        btnNuevo1.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        btnNuevo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/imagenes/refresh.png"))); // NOI18N
        btnNuevo1.setMnemonic('N');
        btnNuevo1.setText("Actualizar");
        btnNuevo1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnNuevo1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnNuevo1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNuevo1ActionPerformed(evt);
            }
        });
        btnNuevo1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                btnNuevo1KeyPressed(evt);
            }

            public void keyReleased(java.awt.event.KeyEvent evt) {
                btnNuevo1KeyReleased(evt);
            }
        });

        javax.swing.GroupLayout jXTitledPanel1Layout = new javax.swing.GroupLayout(
                jXTitledPanel1.getContentContainer());
        jXTitledPanel1.getContentContainer().setLayout(jXTitledPanel1Layout);
        jXTitledPanel1Layout.setHorizontalGroup(jXTitledPanel1Layout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jXTitledPanel1Layout.createSequentialGroup().addContainerGap()
                        .addGroup(jXTitledPanel1Layout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(dBTable1, javax.swing.GroupLayout.Alignment.TRAILING,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
                                        Short.MAX_VALUE)
                                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
                                        jXTitledPanel1Layout.createSequentialGroup().addGroup(jXTitledPanel1Layout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                                .addGroup(jXTitledPanel1Layout.createSequentialGroup()
                                                        .addGap(0, 233, Short.MAX_VALUE).addComponent(jLabel6,
                                                                javax.swing.GroupLayout.PREFERRED_SIZE, 182,
                                                                javax.swing.GroupLayout.PREFERRED_SIZE))
                                                .addGroup(jXTitledPanel1Layout.createSequentialGroup()
                                                        .addComponent(
                                                                labelResultado,
                                                                javax.swing.GroupLayout.PREFERRED_SIZE, 134,
                                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                                        .addPreferredGap(
                                                                javax.swing.LayoutStyle.ComponentPlacement.RELATED,
                                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                Short.MAX_VALUE)
                                                        .addComponent(btnNuevo1)))
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addGroup(jXTitledPanel1Layout
                                                        .createParallelGroup(
                                                                javax.swing.GroupLayout.Alignment.LEADING, false)
                                                        .addGroup(jXTitledPanel1Layout.createSequentialGroup()
                                                                .addComponent(btnNuevo,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE, 67,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                                .addPreferredGap(
                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                .addComponent(btnPago,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE, 70,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                                .addPreferredGap(
                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                .addComponent(btnAnular,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE, 65,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                                .addGap(5, 5, 5)
                                                                .addComponent(btnImprimir,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE, 71,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                                .addPreferredGap(
                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                .addComponent(btnPago1,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE, 67,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                                                        .addComponent(searchTicketTxt))))
                        .addContainerGap()));
        jXTitledPanel1Layout.setVerticalGroup(
                jXTitledPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                        javax.swing.GroupLayout.Alignment.TRAILING,
                        jXTitledPanel1Layout.createSequentialGroup().addContainerGap().addGroup(jXTitledPanel1Layout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addGroup(jXTitledPanel1Layout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(labelResultado, javax.swing.GroupLayout.PREFERRED_SIZE, 26,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addComponent(btnPago1, javax.swing.GroupLayout.Alignment.TRAILING))
                                .addComponent(btnImprimir).addComponent(btnAnular).addComponent(btnNuevo)
                                .addComponent(btnPago).addComponent(btnNuevo1))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(jXTitledPanel1Layout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                        .addComponent(searchTicketTxt, javax.swing.GroupLayout.DEFAULT_SIZE, 37,
                                                Short.MAX_VALUE)
                                        .addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(dBTable1, javax.swing.GroupLayout.PREFERRED_SIZE, 404,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));

        javax.swing.GroupLayout contenedorLayout = new javax.swing.GroupLayout(contenedor);
        contenedor.setLayout(contenedorLayout);
        contenedorLayout.setHorizontalGroup(contenedorLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(contenedorLayout.createSequentialGroup().addContainerGap()
                        .addGroup(contenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(contenedorLayout.createSequentialGroup().addGap(6, 6, 6)
                                        .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 64,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(dateDesde, javax.swing.GroupLayout.PREFERRED_SIZE, 174,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addGap(18, 18, 18)
                                        .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 97,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(dateHasta, javax.swing.GroupLayout.PREFERRED_SIZE, 153,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(btnBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 64,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(btnCancelar).addGap(0, 137, Short.MAX_VALUE))
                                .addGroup(contenedorLayout.createSequentialGroup().addComponent(jLabel3)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jSeparator1))
                                .addComponent(jXTitledPanel1, javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addContainerGap()));
        contenedorLayout.setVerticalGroup(contenedorLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, contenedorLayout.createSequentialGroup()
                        .addGap(14, 14, 14)
                        .addGroup(contenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addGroup(contenedorLayout.createSequentialGroup().addComponent(jLabel3)
                                        .addGap(10, 10, 10)
                                        .addGroup(contenedorLayout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 28,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addGroup(contenedorLayout
                                                        .createParallelGroup(
                                                                javax.swing.GroupLayout.Alignment.TRAILING, false)
                                                        .addComponent(jLabel4,
                                                                javax.swing.GroupLayout.Alignment.LEADING,
                                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                Short.MAX_VALUE)
                                                        .addComponent(dateDesde,
                                                                javax.swing.GroupLayout.Alignment.LEADING,
                                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                Short.MAX_VALUE))
                                                .addComponent(dateHasta, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                                        .addGap(44, 44, 44))
                                .addGroup(contenedorLayout.createSequentialGroup()
                                        .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addGap(8, 8, 8)
                                        .addGroup(contenedorLayout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                                .addComponent(btnBuscar).addComponent(btnCancelar))
                                        .addGap(28, 28, 28)))
                        .addComponent(jXTitledPanel1, javax.swing.GroupLayout.DEFAULT_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addContainerGap()));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(contenedor,
                        javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE,
                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));
        layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                        .addComponent(contenedor, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 0, Short.MAX_VALUE)));
    }// </editor-fold>//GEN-END:initComponents

    private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNuevoActionPerformed
        abrirFormTickets();
    }//GEN-LAST:event_btnNuevoActionPerformed

    private void generarSecuencial() {
        List<Configurations> sequences = new ArrayList<>();

        Object data = configController.getEntityManager()
                .createNativeQuery("Select valor from configuraciones where codigo = 'SECUENCIAL_ACT' ")
                .getSingleResult();
        System.out.println(data);
        sequences = checkConfigurations("SECUENCIAL_ACT");

        if (!sequences.isEmpty()) {
            secuencial = sequences.get(0).getValue();
        }

        //        secuencial = data.toString();
        numSecuencial = Integer.parseInt(secuencial);
        numSecuencial++;
        //        secuencial = formatoSecuencial(numSecuencial);
    }

    /**
     * Formatear la secuancia de laf actura
     *
     * @param numero
     * @return
     */
    private String formatoSecuencial(int numero) {
        Formatter fmt = new Formatter();
        fmt.format("%09d", numero);
        System.out.println("El numero formateado " + fmt);
        return fmt.toString();
    }

    /**
     *
     */
    private void abrirFormTickets() {

        try {
            //limpiar el filtro
            if (!searchTicketTxt.getText().isEmpty()) {
                searchByTicketOrPlaca();
            }

            //        generarSecuencial();
            //generar la hora de la bd
            Date initDate = convertToDate_DatabaseDate();

            Billing b = new Billing();
            b.setDetailBillingList(new ArrayList<DetailBilling>());
            b.setEmissiondate(initDate);

            b.setEmissiondate(new Date());
            b.setUser(LoginApp.userLogged);
            //fijar por defecto el contribuyente: CONSUMIDOR FINAL
            ClientProvider consumidorFinal = controllerClient.findClientProvider(2);
            b.setClientProviderid(consumidorFinal);
            b.setNumber(secuencial);
            b.setTotal(BigDecimal.ZERO);
            b.setSubtotal(BigDecimal.ZERO);

            //emisor
            b.setEmitterPerson(LoginApp.userLogged.getId());

            EntryParkingForm form = new EntryParkingForm(null, true, b);
            form.setLocationRelativeTo(null);
            form.setVisible(true);

            verTabla(true);
        } catch (ParseException ex) {
            Logger.getLogger(ventas.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void btnAnularActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAnularActionPerformed

        try {
            if (ventas.isEmpty()) {
                JOptionPane.showMessageDialog(this, "Seleccione una fila", "ERROR", JOptionPane.ERROR_MESSAGE);
                return;
            }

            //solo el usuario administrador puede anular
            if (!LoginApp.userLogged.getRol().equals("Administrador")) {
                JOptionPane.showMessageDialog(this,
                        "Solo el administrador de la aplicacin puede anular tickets\n. Contctese a informtica a la ext: 149",
                        "ERROR", JOptionPane.ERROR_MESSAGE);
                return;
            }

            int indice = dBTable1.getSelectedRow();
            Billing b = ventas.get(indice);

            //verificar que no sea de otro dia
            Calendar currentDate = Calendar.getInstance();
            currentDate.setTime(new Date());
            currentDate.set(Calendar.HOUR_OF_DAY, 0);
            currentDate.set(Calendar.MINUTE, 0);
            currentDate.set(Calendar.SECOND, 0);
            if (b.getEmissiondate().before(currentDate.getTime())) {
                JOptionPane.showMessageDialog(this, "No puede anular tickets de fechas anteriores", "ERROR",
                        JOptionPane.ERROR_MESSAGE);
                return;
            }

            int confirmado = JOptionPane.showOptionDialog(btnAnular,
                    "  Desea anular la factura con nmero,      \n" + "   " + b.getNumber() + "!.\n" + " \n",
                    "Alerta", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,
                    new Object[] { "Si", "No", "Cancelar" }, "Si");

            if (JOptionPane.OK_OPTION == confirmado) {
                System.out.println("si");
                List<DetailBilling> listaDetalle = b.getDetailBillingList();
                BigDecimal cantidad;
                Product product;
                /*
                 for (DetailBilling detalle : listaDetalle) {
                    
                 cantidad = detalle.getQuantity();
                 product = detalle.getProductId();
                 cantidad = cantidad.add(product.getStock());
                 product.setStock(cantidad);
                 controllerProducto.edit(product);
                    
                 }*/

                b.setState("ANULADA");
                controller.edit(b);
                verTabla(true);
            } else {
                System.out.println("no");

            }
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ventas.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(ventas.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_btnAnularActionPerformed

    private void actualizarProductosPorFacturaAnulada() {

    }

    private void btnImprimirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnImprimirActionPerformed
        int indice = dBTable1.getSelectedRow();
        System.out.println("======>" + indice);
        Billing b = ventas.get(indice);
        List<Billing> facturas = new ArrayList<>();
        facturas.add(b);
        Locale local = Locale.getDefault();
        ResourceBundle resource = ResourceBundle.getBundle("values", local);
        String reportPath = resource.getString("pathJasper") + "comPark.jasper";

        //parameters 
        Map<String, Object> params = new HashMap<>();
        params.put("code", "institutionName");
        List<Configurations> list = configController.namedQuery("Configurations.findByCode", params);

        Map<String, String> parameters = new HashMap<>();
        parameters.put("institution", list.get(0).getValor());

        try {
            FileInputStream fis = new FileInputStream(reportPath);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(fis);
            JasperReport jasperReport = (JasperReport) JRLoader.loadObject(bufferedInputStream);
            JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(facturas);
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(),
                    beanCollectionDataSource);
            // view report to UI
            //            JasperViewer.viewReport(jasperPrint, false);
            JasperPrintManager.printReport(jasperPrint, false);
            JasperViewer viewer = new JasperViewer(jasperPrint, false);
            viewer.viewReport(jasperPrint, false);
            viewer.setVisible(true);

        } catch (JRException ex) {
            Logger.getLogger(ventas.class.getName()).log(Level.SEVERE, null, ex);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ventas.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_btnImprimirActionPerformed

    private static Date convertToDate_DatabaseDate() throws ParseException {
        Query q = controller.getEm().createNativeQuery("select now()");
        Object hourDB = q.getSingleResult();
        String hour = hourDB.toString().substring(0, hourDB.toString().length() - 2);
        System.out.println("=>" + hourDB);
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
        return format.parse(hour);
    }

    private void btnPagoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPagoActionPerformed

        try {
            int indice = dBTable1.getSelectedRow();
            Billing b = ventas.get(indice);

            Object state = controller.getEm().createNativeQuery("Select estado from factura where id=" + b.getId())
                    .getSingleResult();

            if (state.toString().equals("Pagada")) {
                JOptionPane.showMessageDialog(this, "El ticket ya ha sido PAGADO.\n Actualice la tabla de datos",
                        "ERROR", JOptionPane.ERROR_MESSAGE);
                verTabla(true);
                return;
            }

            if (state.toString().equals("ANULADA")) {
                JOptionPane.showMessageDialog(this, "El ticket ha sido ANULADO.\n Actualice la tabla de datos",
                        "ERROR", JOptionPane.ERROR_MESSAGE);
                verTabla(true);
                return;
            }

            if (state.equals("CONTRATO")) {
                JOptionPane.showMessageDialog(this, "El ticket es de tipo CONTRATO.\n No se puede pagar.", "ERROR",
                        JOptionPane.ERROR_MESSAGE);
                verTabla(true);
                return;
            }

            //calcular el tiempo de pago
            Date timeStart = b.getDetailBillingList().get(0).getTimestart();
            DateTime start = new DateTime(timeStart);

            //obtener la fecha de la base de datos
            //generar la hora de la bd
            Date endJava = convertToDate_DatabaseDate();
            DateTime end = new DateTime(endJava);

            Period $period = new Period(start, end, PeriodType.yearMonthDayTime());
            int days = $period.getDays();
            int hours = $period.getHours();
            int minutes = $period.getMinutes();

            System.out.println("DIA " + $period.getDays());
            System.out.println("HORAS: " + $period.getHours());
            System.out.println("MINUTOS: " + $period.getMinutes());

            Product product = b.getDetailBillingList().get(0).getProductId();
            BigDecimal price = product.getSaleprice();
            BigDecimal quantity = BigDecimal.ZERO;
            String tiempo = days + ":" + hours + ":" + minutes;

            if (hours >= 1) {
                quantity = new BigDecimal(hours);
            }

            if (minutes > 0) {
                quantity = quantity.add(BigDecimal.ONE);
            }

            if (days >= 1) {
                int hoursPerDay = days * 24;
                quantity = quantity.add(new BigDecimal(hoursPerDay));
            }

            BigDecimal totalIva = price.multiply(quantity).multiply(product.getPercentageIva());
            BigDecimal total = product.getSaleprice().multiply(quantity).add(totalIva);
            total = total.setScale(2, RoundingMode.HALF_UP);

            CobroParkForm dialog = new CobroParkForm(new javax.swing.JFrame(), Boolean.TRUE, b, tiempo, days, hours,
                    minutes, quantity, endJava, total);
            dialog.setVisible(true);
            verTabla(true);
        } catch (ParseException ex) {
            Logger.getLogger(ventas.class.getName()).log(Level.SEVERE, null, ex);
        }

    }//GEN-LAST:event_btnPagoActionPerformed

    private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuscarActionPerformed

        Map<String, Object> variables = new HashMap<String, Object>();
        Calendar start = Calendar.getInstance();
        start.setTime(dateDesde.getDate());
        start.set(Calendar.HOUR_OF_DAY, 0);
        start.set(Calendar.MINUTE, 0);
        start.set(Calendar.SECOND, 0);

        Calendar end = Calendar.getInstance();
        end.setTime(dateHasta.getDate());
        end.set(Calendar.HOUR_OF_DAY, 23);
        end.set(Calendar.MINUTE, 59);
        end.set(Calendar.SECOND, 0);

        variables.put("startDate", start.getTime());
        variables.put("endDate", end.getTime());
        ventas = controller.namedQuery("Billing.findByFilter2", variables);

        setEmiterAndCollecter(ventas);
        fijarDatos(ventas);
    }//GEN-LAST:event_btnBuscarActionPerformed

    /**
     * Agregado para informacion de emisor y cobrador
     * @param ventas 
     */
    private static void setEmiterAndCollecter(List<Billing> ventas) {
        Users emitter = null;
        Users collecter = null;
        for (Billing venta : ventas) {
            Integer emisorId = venta.getEmitterPerson();
            Integer collectorId = venta.getCollectorPerson();

            if (emisorId != null && emisorId != 0) {
                emitter = userscontroller.findUsers(emisorId);
                venta.setEmisor(emitter.getUsuario());
            }

            if (collectorId != null && collectorId != 0) {
                collecter = userscontroller.findUsers(collectorId);
                venta.setCobrador(collecter.getUsuario());

            }
        }
    }

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        // TODO add your handling code here:
        searchTicketTxt.setText("");
        dateDesde.setDate(new Date());
        dateHasta.setDate(new Date());
        verTabla(true);
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void btnPago1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPago1ActionPerformed
        int index = mainForm.pestanias.getSelectedIndex();
        if (index != -1) {
            mainForm.pestanias.remove(index);
            mainForm.CerrarPestana(TabsIndex.PARQUEADERO_BOLETERIA.getIndex());
        }
    }//GEN-LAST:event_btnPago1ActionPerformed

    private void btnNuevoKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_btnNuevoKeyReleased
        //        System.out.println("GIM=>" + evt.getKeyCode());
        System.out.println("RELEASEGIM=>" + evt.getKeyCode());
        if (evt.getKeyCode() == KeyEvent.VK_N) {
            abrirFormTickets();
        }
    }//GEN-LAST:event_btnNuevoKeyReleased

    private void btnNuevoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_btnNuevoKeyPressed
        //        System.out.println("GIM=>" + evt.getKeyCode());
        //        System.out.println("GIM=>" + evt.getKeyCode());
        //        if (evt.getKeyCode() == KeyEvent.VK_N) {
        //            abrirFormTickets();
        //        }
    }//GEN-LAST:event_btnNuevoKeyPressed

    private void contenedorKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_contenedorKeyPressed

    }//GEN-LAST:event_contenedorKeyPressed

    private void searchTicketTxtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_searchTicketTxtActionPerformed

    }//GEN-LAST:event_searchTicketTxtActionPerformed

    private void searchTicketTxtKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_searchTicketTxtKeyTyped

    }//GEN-LAST:event_searchTicketTxtKeyTyped

    private void searchTicketTxtKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_searchTicketTxtKeyPressed

    }//GEN-LAST:event_searchTicketTxtKeyPressed

    private void searchTicketTxtKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_searchTicketTxtKeyReleased
        searchByTicketOrPlaca();
    }//GEN-LAST:event_searchTicketTxtKeyReleased

    private void formKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_formKeyReleased
        System.out.println("==>");
    }//GEN-LAST:event_formKeyReleased

    private void contenedorKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_contenedorKeyReleased
        System.out.println("==>");
    }//GEN-LAST:event_contenedorKeyReleased

    private void jXTitledPanel1KeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jXTitledPanel1KeyReleased
        System.out.println("==>");
    }//GEN-LAST:event_jXTitledPanel1KeyReleased

    private void btnNuevo1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNuevo1ActionPerformed
        verTabla(true);
    }//GEN-LAST:event_btnNuevo1ActionPerformed

    private void btnNuevo1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_btnNuevo1KeyPressed
        // TODO add your handling code here:
    }//GEN-LAST:event_btnNuevo1KeyPressed

    private void btnNuevo1KeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_btnNuevo1KeyReleased
        // TODO add your handling code here:
    }//GEN-LAST:event_btnNuevo1KeyReleased

    private void searchByTicketOrPlaca() {
        String text = searchTicketTxt.getText();
        //        if(text.isEmpty()){
        //            //buscar lo del dia
        //            fijarDatos(ventas);
        //            return;
        //        }

        Date desde = dateDesde.getDate();
        Date hasta = dateHasta.getDate();

        Calendar calDesde = Calendar.getInstance();
        calDesde.setTime(desde);
        calDesde.set(Calendar.HOUR_OF_DAY, 0);
        calDesde.set(Calendar.MINUTE, 0);
        calDesde.set(Calendar.SECOND, 0);

        Calendar calHasta = Calendar.getInstance();
        calHasta.setTime(hasta);
        calHasta.set(Calendar.HOUR_OF_DAY, 23);
        calHasta.set(Calendar.MINUTE, 59);
        calHasta.set(Calendar.SECOND, 59);

        Map<String, Object> variables = new HashMap<>();
        variables.put("criteria", text.toLowerCase() + "%");
        variables.put("from", calDesde.getTime());
        variables.put("until", calHasta.getTime());
        ventas = controller.namedQuery("Billing.findByTicketOrPlaca", variables);

        setEmiterAndCollecter(ventas);
        fijarDatos(ventas);
    }

    private void abrirVentana(final Billing b) {
        VentasForm dialog = new VentasForm(new javax.swing.JFrame(), true, b);
        dialog.setVisible(true);
        verTabla(true);
    }

    @Override
    public void keyTyped(java.awt.event.KeyEvent e) {
        System.out.println("keyTyped: " + e);
    }

    @Override
    public void keyPressed(java.awt.event.KeyEvent e) {
        System.out.println("keyPressed: " + e);
    }

    @Override
    public void keyReleased(java.awt.event.KeyEvent e) {
        System.out.println("keyReleased: " + e);
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAnular;
    private javax.swing.JButton btnBuscar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnImprimir;
    private javax.swing.JButton btnNuevo;
    private javax.swing.JButton btnNuevo1;
    private javax.swing.JButton btnPago;
    private javax.swing.JButton btnPago1;
    public javax.swing.JPanel contenedor;
    private static quick.dbtable.DBTable dBTable1;
    private com.toedter.calendar.JDateChooser dateDesde;
    private com.toedter.calendar.JDateChooser dateHasta;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JSeparator jSeparator1;
    private org.jdesktop.swingx.JXTitledPanel jXTitledPanel1;
    private static javax.swing.JLabel labelResultado;
    private javax.swing.JTextField searchTicketTxt;
    // End of variables declaration//GEN-END:variables

}