Package GUI

Source Code of GUI.ventanaDeCarta

/*
* 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 GUI;

import Administracion.Mesero;
import Pedidos.Comanda;
import Pedidos.Platillo;
import Pedidos.SugerenciaDelChef;
import SistemaDeKioscos.ServicioDeAccesoABaseDeDatos;
import SistemaDeKioscos.ServicioDeImpresion;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.util.ArrayList;
import java.util.Formatter;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Vector;
import javax.swing.JOptionPane;

/**
*
* @author Administrador
*/
public class ventanaDeCarta extends javax.swing.JFrame {

    Mesero mesero = new Mesero();
    Comanda orden = new Comanda();
    int numeroDeMesa;
    private VentanaMesero menuMesas;
    ServicioDeAccesoABaseDeDatos baseDeDatos;
    Platillo platilloSeleccionado;
    private int idDeComanda = -1;
    Vector<Integer> idRecomendacionesDelChef = new Vector();
    int recomendacionesDeChefPorApuntar = 0;

    /**
     * Creates new form ventanaDeCarta
     */
    public ventanaDeCarta() {
        baseDeDatos = new ServicioDeAccesoABaseDeDatos();
        initComponents();
        cargarRecomendacionDelChef();
    }

    public ventanaDeCarta(int numeroDeMesa) {
        this.numeroDeMesa = numeroDeMesa;
        baseDeDatos = new ServicioDeAccesoABaseDeDatos();
        initComponents();
        cargarRecomendacionDelChef();
    }

    /**
     * Constructor que permite reusar un servicio de base de datos ya en uso
     *
     * @param numeroDeMesa El número de mesa elegida
     * @param MenuMesas la ventana que le precede
     */
    public ventanaDeCarta(int numeroDeMesa, VentanaMesero MenuMesas) {
        this.numeroDeMesa = numeroDeMesa;
        this.menuMesas = MenuMesas;
        baseDeDatos = menuMesas.baseDeDatos; //obtenemos el servicio de bd que se está usado
        initComponents();
        cargarRecomendacionDelChef();
        //TODO borrar esta por una versión que permita cargar la comanda anterior abierta
    }

    /**
     * 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() {

        jPanel2 = new javax.swing.JPanel();
        btnSinPagar = new javax.swing.JButton();
        btnImprimirCocina = new javax.swing.JButton();
        verOrden = new javax.swing.JButton();
        btnpagar = new javax.swing.JButton();
        jSplitPane1 = new javax.swing.JSplitPane();
        listaCategorias = new javax.swing.JTabbedPane();
        tabSopas = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        pnlSopas = new javax.swing.JPanel();
        tabPastas = new javax.swing.JPanel();
        jScrollPane9 = new javax.swing.JScrollPane();
        pnlPastas = new javax.swing.JPanel();
        tabEnsaladas = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        pnlEnsaladas = new javax.swing.JPanel();
        tabAves = new javax.swing.JPanel();
        jScrollPane3 = new javax.swing.JScrollPane();
        pnlAves = new javax.swing.JPanel();
        tabCarnes = new javax.swing.JPanel();
        jScrollPane8 = new javax.swing.JScrollPane();
        pnlCarnes = new javax.swing.JPanel();
        tabCortes = new javax.swing.JPanel();
        jScrollPane10 = new javax.swing.JScrollPane();
        pnlCortes = new javax.swing.JPanel();
        tabBebidas = new javax.swing.JPanel();
        jScrollPane6 = new javax.swing.JScrollPane();
        pnlBebidas = new javax.swing.JPanel();
        tabPostres = new javax.swing.JPanel();
        jScrollPane5 = new javax.swing.JScrollPane();
        pnlPostres = new javax.swing.JPanel();
        tabCafé = new javax.swing.JPanel();
        jScrollPane4 = new javax.swing.JScrollPane();
        pnlCafé = new javax.swing.JPanel();
        tabMariscos = new javax.swing.JPanel();
        jScrollPane7 = new javax.swing.JScrollPane();
        pnlMariscos = new javax.swing.JPanel();
        pnlRecomendacionChef = new javax.swing.JPanel();
        pnlEncabezadoRecomendaciones = new javax.swing.JPanel();
        lblTitulo = new javax.swing.JLabel();
        btnAgregarRecomendacion = new javax.swing.JButton();
        btnQuitarRecomendacion = new javax.swing.JButton();
        pnlPlatillosRecomendacion = new javax.swing.JPanel();
        pnlNumeroDeRecomendaciones = new javax.swing.JPanel();
        lblApuntadas = new javax.swing.JLabel();
        lblNumeroApuntadas = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Registro de Pedido");
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosed(java.awt.event.WindowEvent evt) {
                formWindowClosed(evt);
            }
        });

        btnSinPagar.setText("Dejar Orden Sin Pagar");
        btnSinPagar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSinPagarActionPerformed(evt);
            }
        });
        jPanel2.add(btnSinPagar);

        btnImprimirCocina.setText("Imprimir en Cocina");
        btnImprimirCocina.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnImprimirCocinaActionPerformed(evt);
            }
        });
        jPanel2.add(btnImprimirCocina);

        verOrden.setText("VerOrden");
        verOrden.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                verOrdenActionPerformed(evt);
            }
        });
        jPanel2.add(verOrden);

        btnpagar.setText("Mandar Orden a Pagar");
        btnpagar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnpagarActionPerformed(evt);
            }
        });
        jPanel2.add(btnpagar);

        getContentPane().add(jPanel2, java.awt.BorderLayout.PAGE_START);

        jSplitPane1.setDividerLocation(300);
        jSplitPane1.setAutoscrolls(true);
        jSplitPane1.setMaximumSize(new java.awt.Dimension(2147483, 2147483));
        jSplitPane1.setPreferredSize(new java.awt.Dimension(641, 200));

        listaCategorias.setTabPlacement(javax.swing.JTabbedPane.RIGHT);
        listaCategorias.setAutoscrolls(true);
        listaCategorias.setMinimumSize(new java.awt.Dimension(240, 28));
        listaCategorias.setName(""); // NOI18N

        tabSopas.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                tabSopasComponentShown(evt);
            }
        });
        tabSopas.setLayout(new java.awt.BorderLayout());

        pnlSopas.setLayout(new javax.swing.BoxLayout(pnlSopas, javax.swing.BoxLayout.Y_AXIS));
        jScrollPane1.setViewportView(pnlSopas);

        tabSopas.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        listaCategorias.addTab("Sopas", tabSopas);

        tabPastas.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                tabPastasComponentShown(evt);
            }
        });
        tabPastas.setLayout(new java.awt.BorderLayout());

        pnlPastas.setLayout(new javax.swing.BoxLayout(pnlPastas, javax.swing.BoxLayout.Y_AXIS));
        jScrollPane9.setViewportView(pnlPastas);

        tabPastas.add(jScrollPane9, java.awt.BorderLayout.CENTER);

        listaCategorias.addTab("Pastas", tabPastas);

        tabEnsaladas.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                tabEnsaladasComponentShown(evt);
            }
        });
        tabEnsaladas.setLayout(new java.awt.BorderLayout());

        pnlEnsaladas.setLayout(new javax.swing.BoxLayout(pnlEnsaladas, javax.swing.BoxLayout.Y_AXIS));
        jScrollPane2.setViewportView(pnlEnsaladas);

        tabEnsaladas.add(jScrollPane2, java.awt.BorderLayout.CENTER);

        listaCategorias.addTab("Ensaladas", tabEnsaladas);

        tabAves.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                tabAvesComponentShown(evt);
            }
        });
        tabAves.setLayout(new java.awt.BorderLayout());

        pnlAves.setLayout(new javax.swing.BoxLayout(pnlAves, javax.swing.BoxLayout.Y_AXIS));
        jScrollPane3.setViewportView(pnlAves);

        tabAves.add(jScrollPane3, java.awt.BorderLayout.CENTER);

        listaCategorias.addTab("Aves", tabAves);

        tabCarnes.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                tabCarnesComponentShown(evt);
            }
        });
        tabCarnes.setLayout(new java.awt.BorderLayout());

        pnlCarnes.setLayout(new javax.swing.BoxLayout(pnlCarnes, javax.swing.BoxLayout.Y_AXIS));
        jScrollPane8.setViewportView(pnlCarnes);

        tabCarnes.add(jScrollPane8, java.awt.BorderLayout.CENTER);

        listaCategorias.addTab("Carnes", tabCarnes);

        tabCortes.setPreferredSize(new java.awt.Dimension(235, 424));
        tabCortes.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                tabCortesComponentShown(evt);
            }
        });
        tabCortes.setLayout(new java.awt.BorderLayout());

        pnlCortes.setLayout(new javax.swing.BoxLayout(pnlCortes, javax.swing.BoxLayout.Y_AXIS));
        jScrollPane10.setViewportView(pnlCortes);

        tabCortes.add(jScrollPane10, java.awt.BorderLayout.CENTER);

        listaCategorias.addTab("Cortes", tabCortes);

        tabBebidas.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                tabBebidasComponentShown(evt);
            }
        });
        tabBebidas.setLayout(new java.awt.BorderLayout());

        pnlBebidas.setLayout(new javax.swing.BoxLayout(pnlBebidas, javax.swing.BoxLayout.Y_AXIS));
        jScrollPane6.setViewportView(pnlBebidas);

        tabBebidas.add(jScrollPane6, java.awt.BorderLayout.CENTER);

        listaCategorias.addTab("Bebidas", tabBebidas);

        tabPostres.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                tabPostresComponentShown(evt);
            }
        });
        tabPostres.setLayout(new java.awt.BorderLayout());

        pnlPostres.setLayout(new javax.swing.BoxLayout(pnlPostres, javax.swing.BoxLayout.Y_AXIS));
        jScrollPane5.setViewportView(pnlPostres);

        tabPostres.add(jScrollPane5, java.awt.BorderLayout.CENTER);

        listaCategorias.addTab("Postres", tabPostres);

        tabCafé.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                tabCaféComponentShown(evt);
            }
        });
        tabCafé.setLayout(new java.awt.BorderLayout());

        pnlCafé.setLayout(new javax.swing.BoxLayout(pnlCafé, javax.swing.BoxLayout.Y_AXIS));
        jScrollPane4.setViewportView(pnlCafé);

        tabCafé.add(jScrollPane4, java.awt.BorderLayout.CENTER);

        listaCategorias.addTab("Café", tabCafé);

        tabMariscos.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                tabMariscosComponentShown(evt);
            }
        });
        tabMariscos.setLayout(new java.awt.BorderLayout());

        pnlMariscos.setLayout(new javax.swing.BoxLayout(pnlMariscos, javax.swing.BoxLayout.Y_AXIS));
        jScrollPane7.setViewportView(pnlMariscos);

        tabMariscos.add(jScrollPane7, java.awt.BorderLayout.CENTER);

        listaCategorias.addTab("Mariscos", tabMariscos);

        jSplitPane1.setLeftComponent(listaCategorias);

        pnlRecomendacionChef.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        pnlRecomendacionChef.setPreferredSize(new java.awt.Dimension(235, 424));
        pnlRecomendacionChef.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                pnlRecomendacionChefComponentShown(evt);
            }
        });
        pnlRecomendacionChef.setLayout(new java.awt.BorderLayout());

        lblTitulo.setFont(new java.awt.Font("Tahoma", 3, 12)); // NOI18N
        lblTitulo.setText("Recomendación del chef");

        btnAgregarRecomendacion.setText("+");
        btnAgregarRecomendacion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarRecomendacionActionPerformed(evt);
            }
        });

        btnQuitarRecomendacion.setText("-");
        btnQuitarRecomendacion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnQuitarRecomendacionActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout pnlEncabezadoRecomendacionesLayout = new javax.swing.GroupLayout(pnlEncabezadoRecomendaciones);
        pnlEncabezadoRecomendaciones.setLayout(pnlEncabezadoRecomendacionesLayout);
        pnlEncabezadoRecomendacionesLayout.setHorizontalGroup(
            pnlEncabezadoRecomendacionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlEncabezadoRecomendacionesLayout.createSequentialGroup()
                .addGroup(pnlEncabezadoRecomendacionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlEncabezadoRecomendacionesLayout.createSequentialGroup()
                        .addComponent(btnQuitarRecomendacion, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(163, 163, 163))
                    .addGroup(pnlEncabezadoRecomendacionesLayout.createSequentialGroup()
                        .addComponent(btnAgregarRecomendacion)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(lblTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, 159, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(0, 0, Short.MAX_VALUE))
        );
        pnlEncabezadoRecomendacionesLayout.setVerticalGroup(
            pnlEncabezadoRecomendacionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlEncabezadoRecomendacionesLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlEncabezadoRecomendacionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblTitulo)
                    .addComponent(btnAgregarRecomendacion))
                .addGap(1, 1, 1)
                .addComponent(btnQuitarRecomendacion)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pnlRecomendacionChef.add(pnlEncabezadoRecomendaciones, java.awt.BorderLayout.PAGE_START);
        pnlRecomendacionChef.add(pnlPlatillosRecomendacion, java.awt.BorderLayout.CENTER);

        lblApuntadas.setText("Apuntadas:");

        lblNumeroApuntadas.setText("0");

        javax.swing.GroupLayout pnlNumeroDeRecomendacionesLayout = new javax.swing.GroupLayout(pnlNumeroDeRecomendaciones);
        pnlNumeroDeRecomendaciones.setLayout(pnlNumeroDeRecomendacionesLayout);
        pnlNumeroDeRecomendacionesLayout.setHorizontalGroup(
            pnlNumeroDeRecomendacionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlNumeroDeRecomendacionesLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblApuntadas)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 358, Short.MAX_VALUE)
                .addComponent(lblNumeroApuntadas, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        pnlNumeroDeRecomendacionesLayout.setVerticalGroup(
            pnlNumeroDeRecomendacionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlNumeroDeRecomendacionesLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlNumeroDeRecomendacionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblApuntadas)
                    .addComponent(lblNumeroApuntadas))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pnlRecomendacionChef.add(pnlNumeroDeRecomendaciones, java.awt.BorderLayout.PAGE_END);

        jSplitPane1.setRightComponent(pnlRecomendacionChef);

        getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnImprimirCocinaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnImprimirCocinaActionPerformed
        this.dispose();
        menuMesas.registrarMovimiento();
        int opcion = JOptionPane.showConfirmDialog(this, "¿Desea imprimir en cocina?");
        if (opcion == JOptionPane.YES_OPTION) {
            String textoComanda = "";
            ArrayList<Platillo> platilosDeOrden = orden.getPlatillos();
            for (int i = 0; i < platilosDeOrden.size(); i++) {
                Platillo p = platilosDeOrden.get(i);
                textoComanda += p.getNombrePlatillo() + "\n";//TODO tal vez necesite adaptarse para casos en que el nombre de platillo tenga más de 30 caracteres
            }
            textoComanda += orden.getOvservaciones();
            if (textoComanda != "") {

                DialogoImpresionComanda impresionComanda = new DialogoImpresionComanda(this, false);
                impresionComanda.ponerTexto(textoComanda);
                impresionComanda.setVisible(true);
                PrinterJob job = PrinterJob.getPrinterJob();
//                PageFormat pageFormat = new PageFormat();
//                Paper papel = new Paper();
//                papel.setSize(0.0525, 0.1);
//                pageFormat.setPaper(papel);
//                job.setPrintable(impresionComanda, pageFormat);
//                DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
//        DocAttributeSet attr_set
//                = new HashDocAttributeSet();
//        attr_set.add(MediaSize.ISO.A8);
//        Doc doc = new SimpleDoc(bytes, flavor, attr_set);
                job.setPrintable(impresionComanda);
                boolean doPrint = job.printDialog();
                if (doPrint) {
                    try {
                        // job.setJobName("Ciao bella");

                        job.print();
                    } catch (PrinterException e) {
                        // The job did not successfully
                        // complete
                    }
                }
                impresionComanda.setVisible(false);
                System.out.println("Ya debería estar imprimiéndose");
                ServicioDeImpresion.imprimirCocina(textoComanda);//TODO tal vez necesite adaptarse para casos en que el nombre de platillo tenga más de 30 caracteres

                //TODO agregar recomendaciones del chef en nueva comanda con platillos
                //en vez de idRecomendacionesDelChef.add(baseDeDatos.agregarNuevaRecomendacionDelChefAComanda(idDeComanda, mesero, numeroDeMesa));
                //idDeComanda = baseDeDatos.nuevaComandaConPlatillos(orden, mesero, numeroDeMesa);
                int[] ids = baseDeDatos.nuevaComandaConPlatillos(orden, mesero, numeroDeMesa, recomendacionesDeChefPorApuntar);
                idDeComanda = ids[0];
                idRecomendacionesDelChef.add(ids[1]);
                recomendacionesDeChefPorApuntar = 0;
                lblNumeroApuntadas.setText(idRecomendacionesDelChef.size() + recomendacionesDeChefPorApuntar + "");

                System.out.println("");
                //al momento de imprimir guardar en BD
                //TODO guardar platillos en la base de datos
                for (int i = 0; i < platilosDeOrden.size(); i++) {
                    Platillo p = platilosDeOrden.get(i);
                    baseDeDatos.agregarPlatilloAComanda(p, orden, idDeComanda);
                }

            }
            //TODO preguntar si imprime solo los alimentos que no había mandado o todos de nuevo
        }
    }//GEN-LAST:event_btnImprimirCocinaActionPerformed

    private void verOrdenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_verOrdenActionPerformed
        ventanaVerComanda verComanda = new ventanaVerComanda();
        verComanda.setOrden(orden);
        verComanda.setVisible(true);
    }//GEN-LAST:event_verOrdenActionPerformed

    private void btnpagarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnpagarActionPerformed
        int opcion = JOptionPane.showConfirmDialog(this, "Al imprimir se cerrará la cuenta, si desea agregar platillos posteriormente haga una cuenta nueva");//avisar que al imprimir se cerrará la cuenta
        if (opcion == JOptionPane.YES_OPTION) {//si han elegido que sí
            //TODO que al momento de cobrar también le agregue el precio de las recomendaciones del día
            imprimirEnCaja();//mandar a imprimir a caja
            //des-reservar mesa
            baseDeDatos.desReservarMesa(mesero, numeroDeMesa);
            //marcar comanda como cerrada
            baseDeDatos.cerrarComanda(idDeComanda);
            //TODO volver al menú inicio
        }
    }//GEN-LAST:event_btnpagarActionPerformed

    private void pnlRecomendacionChefComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_pnlRecomendacionChefComponentShown

    }//GEN-LAST:event_pnlRecomendacionChefComponentShown

    private void btnAgregarRecomendacionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarRecomendacionActionPerformed
        agregarRecomendacionAComanda();
    }//GEN-LAST:event_btnAgregarRecomendacionActionPerformed

    private void btnQuitarRecomendacionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnQuitarRecomendacionActionPerformed
        quitarRecomendacionAComanda();
    }//GEN-LAST:event_btnQuitarRecomendacionActionPerformed

    private void tabCaféComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_tabCaféComponentShown
        String catego = "cafes";
        Hashtable<String, Double[]> datosplatillos = obtenerPlatillos(catego);
    }//GEN-LAST:event_tabCaféComponentShown

    private void tabPostresComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_tabPostresComponentShown
        String catego = "postres";
        Hashtable<String, Double[]> datosplatillos = obtenerPlatillos(catego);
    }//GEN-LAST:event_tabPostresComponentShown

    private void tabBebidasComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_tabBebidasComponentShown
        String catego = "bebidas";
        Hashtable<String, Double[]> datosplatillos = obtenerPlatillos(catego);
    }//GEN-LAST:event_tabBebidasComponentShown

    private void tabMariscosComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_tabMariscosComponentShown
        String catego = "mariscos";
        Hashtable<String, Double[]> datosplatillos = obtenerPlatillos(catego);
    }//GEN-LAST:event_tabMariscosComponentShown

    private void tabCortesComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_tabCortesComponentShown
        String catego = "cortes";
        Hashtable<String, Double[]> datosplatillos = obtenerPlatillos(catego);
    }//GEN-LAST:event_tabCortesComponentShown

    private void tabCarnesComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_tabCarnesComponentShown
        String catego = "carnes";
        Hashtable<String, Double[]> datosplatillos = obtenerPlatillos(catego);
    }//GEN-LAST:event_tabCarnesComponentShown

    private void tabAvesComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_tabAvesComponentShown
        String catego = "aves";
        Hashtable<String, Double[]> datosplatillos = obtenerPlatillos(catego);
    }//GEN-LAST:event_tabAvesComponentShown

    private void tabEnsaladasComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_tabEnsaladasComponentShown
        String catego = "ensaladas";
        Hashtable<String, Double[]> datosplatillos = obtenerPlatillos(catego);
    }//GEN-LAST:event_tabEnsaladasComponentShown

    private void tabPastasComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_tabPastasComponentShown
        String catego = "pastas";
        Hashtable<String, Double[]> datosplatillos = obtenerPlatillos(catego);
    }//GEN-LAST:event_tabPastasComponentShown

    private void btnSinPagarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSinPagarActionPerformed
        if (JOptionPane.showConfirmDialog(this, "¿Realmente desea dejar la cuenta sin pagar?") == JOptionPane.YES_OPTION) {
            String observaciones = JOptionPane.showInputDialog("Escriba por que se dejará sin pagar");
            orden.setOvservaciones(observaciones);
        }
        //TODO dejar sin pagar en la BD
    }//GEN-LAST:event_btnSinPagarActionPerformed

    private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed
        menuMesas.setVisible(true);
    }//GEN-LAST:event_formWindowClosed

    private void tabSopasComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_tabSopasComponentShown
        String catego = "sopas";
        Hashtable<String, Double[]> datosplatillos = obtenerPlatillos(catego);
    }//GEN-LAST:event_tabSopasComponentShown

    public Mesero getMesero() {
        return mesero;
    }

    public void setMesero(Mesero mesero) {
        this.mesero = mesero;
    }

    public int getNumeroDeMesa() {
        return numeroDeMesa;
    }

    public void setNumeroDeMesa(int numeroDeMesa) {
        this.numeroDeMesa = numeroDeMesa;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (Exception ex) {
            java.util.logging.Logger.getLogger(ventanaDeCarta.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ventanaDeCarta().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregarRecomendacion;
    private javax.swing.JButton btnImprimirCocina;
    private javax.swing.JButton btnQuitarRecomendacion;
    private javax.swing.JButton btnSinPagar;
    private javax.swing.JButton btnpagar;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane10;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JScrollPane jScrollPane5;
    private javax.swing.JScrollPane jScrollPane6;
    private javax.swing.JScrollPane jScrollPane7;
    private javax.swing.JScrollPane jScrollPane8;
    private javax.swing.JScrollPane jScrollPane9;
    private javax.swing.JSplitPane jSplitPane1;
    private javax.swing.JLabel lblApuntadas;
    private javax.swing.JLabel lblNumeroApuntadas;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JTabbedPane listaCategorias;
    private javax.swing.JPanel pnlAves;
    private javax.swing.JPanel pnlBebidas;
    private javax.swing.JPanel pnlCafé;
    private javax.swing.JPanel pnlCarnes;
    private javax.swing.JPanel pnlCortes;
    private javax.swing.JPanel pnlEncabezadoRecomendaciones;
    private javax.swing.JPanel pnlEnsaladas;
    private javax.swing.JPanel pnlMariscos;
    private javax.swing.JPanel pnlNumeroDeRecomendaciones;
    private javax.swing.JPanel pnlPastas;
    private javax.swing.JPanel pnlPlatillosRecomendacion;
    private javax.swing.JPanel pnlPostres;
    private javax.swing.JPanel pnlRecomendacionChef;
    private javax.swing.JPanel pnlSopas;
    private javax.swing.JPanel tabAves;
    private javax.swing.JPanel tabBebidas;
    private javax.swing.JPanel tabCafé;
    private javax.swing.JPanel tabCarnes;
    private javax.swing.JPanel tabCortes;
    private javax.swing.JPanel tabEnsaladas;
    private javax.swing.JPanel tabMariscos;
    private javax.swing.JPanel tabPastas;
    private javax.swing.JPanel tabPostres;
    private javax.swing.JPanel tabSopas;
    private javax.swing.JButton verOrden;
    // End of variables declaration//GEN-END:variables

    /**
     * Permite obtener los platillos por categoría
     */
    private Hashtable<String, Double[]> obtenerPlatillos(String catego) {
        System.out.println("mostrando " + catego);
        Hashtable<String, Double[]> datosplatillos = new Hashtable<String, Double[]>();
        catego = catego.toLowerCase();
        //TODO para practicidad las imágenes de los patillos si las hay guardarlas con el mismo nombre del platillo y con extensión jpeg
        baseDeDatos.obtenerPlatillosPorCategoría(catego, datosplatillos);
        //TODO renderizar imágenes de los platillos en el panel
        if (catego == "sopas") {
            pnlSopas.removeAll();
        } else if (catego == "pastas") {
            //TODO poner bebidas por secciones
            pnlPastas.removeAll();
        } else if (catego == "ensaladas") {
            pnlEnsaladas.removeAll();
        } else if (catego == "aves") {
            pnlAves.removeAll();
        } else if (catego == "carnes") {
            pnlCarnes.removeAll();
        } else if (catego == "cortes") {
            pnlCortes.removeAll();
            //} else if (catego == "guarniciones para carne") {
            //    pnlGuarniciones.removeAll();
            //} else if (catego == "salsas y especias") {
//            pnlSalsas.removeAll();
        } else {
            System.err.println("oops");
        }
        //JDK 7
//        switch (catego) {
//            case "sopas":
//                pnlSopas.removeAll();
//                break;
//            //TODO poner bebidas por secciones
//            // case ""
//            case "pastas":
//                pnlPastas.removeAll();
//                break;
//            case "ensaladas":
//                pnlEnsaladas.removeAll();
//                break;
//            case "aves":
//                pnlAves.removeAll();
//                break;
//            case "carnes":
//                pnlCarnes.removeAll();
//                break;
//            case "cortes":
//                pnlCortes.removeAll();
//                break;
//            case "guarniciones para carne":
//                pnlGuarniciones.removeAll();
//                break;
//            case "salsas y especias":
//                pnlSalsas.removeAll();
//                break;
//            default:
//                System.err.println("oops");
//                break;
//        }

        for (Map.Entry<String, Double[]> platillito : datosplatillos.entrySet()) {
            String nombrecito = platillito.getKey();
            System.out.println(nombrecito);
            Double[] precios = platillito.getValue();
            Formatter formatoNumero = new Formatter();

            //System.out.println("$" + precios);
            System.out.println(precios.length);

            //parte común
            PnlPlatillo panelPlatillo = new PnlPlatillo();
            panelPlatillo.setNombrePlatillo(nombrecito);
            //System.out.println((""));
            System.out.println(String.format("Precio:$\t%.2f", precios[1]));
            panelPlatillo.setPrecio(precios[1]);
            System.out.println("IVA" + precios[2]);
            panelPlatillo.setIva(precios[2]);
            panelPlatillo.setCategoria(catego);

            //    jScrollPane1.add(panelPlatillo);
            panelPlatillo.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    PnlPlatillo panel = (PnlPlatillo) e.getComponent();
                    platilloSeleccionado = new Platillo();
                    platilloSeleccionado.setNombrePlatillo(panel.getNombrePlatillo());
                    platilloSeleccionado.setPrecio(panel.getPrecio());
                    platilloSeleccionado.setIva(panel.getIva());
                    platilloSeleccionado.setCategoria(panel.getCategoria());

                    System.out.println("SEleccionado:" + platilloSeleccionado.getNombrePlatillo());
                    int opcion = JOptionPane.showConfirmDialog(null, "¿Desea Agregar " + platilloSeleccionado.getNombrePlatillo() + "?");
                    switch (opcion) {
                        case JOptionPane.YES_OPTION:
                            System.out.println("Usted ha elegido sí");
                            String canti = JOptionPane.showInputDialog("¿Cuantos " + panel.getNombrePlatillo() + " desea agregar?");
                            if (canti != "") {
                                int cantidadDePlatillos = Integer.parseInt(canti);
                                platilloSeleccionado.setCantidad(cantidadDePlatillos);
                            }//en cualquier error dejamos solamente uno
                            //Agregar platillos a orden
                            orden.addPlatillo(platilloSeleccionado);
                            orden.mostrarPlatillosEnPantalla();
                            //TODO procesamiento para agregar aderezos a alguna categorias de comida
                            if (platilloSeleccionado.getCategoria() == "carnes" || platilloSeleccionado.getCategoria() == "cortes") {
                                //TODO menu de aderezos y salsas para carnes
                                DialogoAderezos aderezos = new DialogoAderezos(baseDeDatos, platilloSeleccionado.getCategoria());//muestra odos los aderezos de la categoría
                                orden.addPlatillo(aderezos.platilloSeleccionado);//Agregamos los aderezos y guarniciones a la orden
                            }
                            break;
                        default:
                            System.out.println("Usted ha elegido no");
                            break;
                    };
                    //TODO para el caso de carnes y cortes preguntar por guarnición y/o salsa
                    //TODO para el caso de ensaladas preguntar por aderezos
                }
            });

            if (catego == "sopas") {
                pnlSopas.add(panelPlatillo);
                //TODO verificar que cargue todas las secciones
            } else if (catego == "pastas") {
                pnlPastas.add(panelPlatillo);
            } else if (catego == "ensaladas") {
                pnlEnsaladas.add(panelPlatillo);
            } else if (catego == "aves") {
                pnlAves.add(panelPlatillo);
            } else if (catego == "carnes") {
                pnlCarnes.add(panelPlatillo);
            } else if (catego == "cortes") {
                pnlCortes.add(panelPlatillo);

                //jScrollPane1.setViewportView(pnlCortes);
                //jScrollPane1.add(panelPlatillo);
//            } else if (catego == "guarniciones para carne") {
//                pnlGuarniciones.add(panelPlatillo);
//            } else if (catego == "salsas y especias") {
//                pnlSalsas.add(panelPlatillo);
            } else {
                System.err.println("oops");
            }

        }
        return datosplatillos;
    }

    private void imprimirEnCaja() {
        //TODO hacer que dialogo imprimir sea una clase aparte
        //TODO hacer que dialogo imprimir implemente Printable
        String textoComanda = "";
        ArrayList<Platillo> platilosDeOrden = orden.getPlatillos();
        double subtotal = 0;
        double iva = 0;
        for (int i = 0; i < platilosDeOrden.size(); i++) {
            Platillo p = platilosDeOrden.get(i);
            textoComanda += String.format("%s - $.2f - $.2f\n", p.getNombrePlatillo(), p.getPrecio(), p.getIva());//TODO tal vez necesite adaptarse para casos en que el nombre de platillo tenga más de 30 caracteres
            subtotal += p.getPrecio();
            iva += p.getIva();
        }
        //TODO que al momento de cobrar también le agregue el precio de las recomendaciones del día
        textoComanda += String.format("Subtotal:$\t%.2f\n", subtotal);
        textoComanda += String.format("IVA:$\t%.2f\n", iva);
        textoComanda += String.format("TOTAL:$\t%.2f\n", (iva + subtotal));// agregarle el IVA

        if (textoComanda != "") {
            ServicioDeImpresion.imprimirCaja(textoComanda);
        }
    }

    /**
     * Permite obtener los platillos por un id de recomendación del día
     */
    private Hashtable<String, Double[]> obtenerPlatillosDeRecomendacionDelChef(int idRecomendacion) {
        System.out.println("id de recomendación del chef del día: " + idRecomendacion);
        Hashtable<String, Double[]> datosplatillos = new Hashtable<String, Double[]>();

        baseDeDatos.obtenerPlatillosDeRecomendacionDeChef(idRecomendacion, datosplatillos);
        //centinela para imprimir
        Iterator it = datosplatillos.entrySet().iterator();
        System.out.println("mostrando platillos obtenidos de BD:");
        // while (it.hasNext()) {
//            Map.Entry pairs = (Map.Entry) it.next();
        //          System.out.println(pairs.getKey() + " = " + pairs.getValue());
//            it.remove(); // avoids a ConcurrentModificationException
        //      }
        return datosplatillos;
    }

    private void agregarRecomendacionAComanda() {
        recomendacionesDeChefPorApuntar += 1;
        SugerenciaDelChef sugerencia = new SugerenciaDelChef(baseDeDatos.obtenerPrecioDeRecomendacionDelChefDelDia());//TODO obtener el precio de la sugerencia del chef
        //TODO
        orden.addPlatillo(sugerencia);
        lblNumeroApuntadas.setText(idRecomendacionesDelChef.size() - 1 + recomendacionesDeChefPorApuntar + "");
    }

    private void quitarRecomendacionAComanda() {
        int id = idRecomendacionesDelChef.get(idRecomendacionesDelChef.size() - 1);
        if (baseDeDatos.QuitarRecomendacionDeComanda(id)) {
            idRecomendacionesDelChef.remove(id);
        }
        lblNumeroApuntadas.setText(idRecomendacionesDelChef.size() + recomendacionesDeChefPorApuntar + "");
    }

    public Comanda getOrden() {
        return orden;
    }

    public void setOrden(Comanda orden) {
        this.orden = orden;
    }

    public ServicioDeAccesoABaseDeDatos getBaseDeDatos() {
        return baseDeDatos;
    }

    public void setBaseDeDatos(ServicioDeAccesoABaseDeDatos baseDeDatos) {
        this.baseDeDatos = baseDeDatos;
    }

    public Platillo getPlatilloSeleccionado() {
        return platilloSeleccionado;
    }

    public void setPlatilloSeleccionado(Platillo platilloSeleccionado) {
        this.platilloSeleccionado = platilloSeleccionado;
    }

    private void cargarRecomendacionDelChef() {
        // carga desde BD la recomendación del chef del día
        System.out.println("Obteniendo recomendación de hoy...");
        int idRecomendacion = baseDeDatos.obtenerIdRecomendacionDeChef();
        idRecomendacionesDelChef.add(idRecomendacion);
        //TODO cargar platillos de la recomendación del día
        Hashtable<String, Double[]> datosplatillos = obtenerPlatillosDeRecomendacionDelChef(idRecomendacion);
//        Iterator it = datosplatillos.entrySet().iterator();
//        while (it.hasNext()) {
//            Map.Entry pairs = (Map.Entry) it.next();
//            System.out.println(pairs.getKey() + " = " + pairs.getValue());
//            it.remove(); // avoids a ConcurrentModificationException
//        }
        for (Map.Entry<String, Double[]> platillito : datosplatillos.entrySet()) {
            String nombrecito = platillito.getKey();
            System.out.println(nombrecito);
            Double[] precios = platillito.getValue();
            Formatter formatoNumero = new Formatter();

            //System.out.println("$" + precios);
            System.out.println(precios.length);

            //parte común
            PnlPlatillo panelPlatillo = new PnlPlatillo();
            panelPlatillo.setNombrePlatillo(nombrecito);
            //System.out.println((""));
            System.out.println(String.format("Precio:$\t%.2f", precios[1]));
            panelPlatillo.setPrecio(precios[1]);
            System.out.println("IVA" + precios[2]);
            panelPlatillo.setIva(precios[2]);
            //panelPlatillo.setCategoria(catego);//TODO obtener categoría de los platillos para la recomendación del chef

            //    jScrollPane1.add(panelPlatillo);
            panelPlatillo.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    PnlPlatillo panel = (PnlPlatillo) e.getComponent();
                    platilloSeleccionado = new Platillo();
                    platilloSeleccionado.setNombrePlatillo(panel.getNombrePlatillo());
                    platilloSeleccionado.setPrecio(panel.getPrecio());
                    platilloSeleccionado.setIva(panel.getIva());
                    platilloSeleccionado.setCategoria(panel.getCategoria());
                    System.out.println("SEleccionado:" + platilloSeleccionado.getNombrePlatillo());
                    int opcion = JOptionPane.showConfirmDialog(null, "¿Desea Agregar un " + platilloSeleccionado.getNombrePlatillo() + "?");
                    switch (opcion) {
                        case JOptionPane.YES_OPTION:
                            System.out.println("Usted ha elegido sí");
                            //Agregar platillos a orden
                            orden.addPlatillo(platilloSeleccionado);
                            orden.mostrarPlatillosEnPantalla();
                            break;
                        default:
                            System.out.println("Usted ha elegido no");
                            break;
                    };
                    //TODO para el caso de carnes y cortes preguntar por guarnición y/o salsa
                    //TODO para el caso de ensaladas preguntar por aderezos
                }
            });

            pnlPlatillosRecomendacion.add(panelPlatillo);
        }
        //TODO cargar el numero de recomendaciones del día ya incluidos en la comanda
        System.out.println("==============================");
    }
}
TOP

Related Classes of GUI.ventanaDeCarta

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.