private void imprimirTicketNuevo(OrdenProductoSerializable nueva)
        {
            Console.WriteLine("Imprimiendo ticket nuevo " + nueva);
            ImprimePedido ip = new ImprimePedido();

            ip.ImprimirNuevo(nueva);
        }
        private void imprimirTicketEditado(OrdenProductoSerializable viejo, OrdenProductoSerializable nueva)
        {
            Console.WriteLine("Imprimiendo ticket editado viejo " + viejo + " nuevo " + nueva);
            ImprimePedido ip = new ImprimePedido();

            ip.ImprimirEditado(viejo, nueva);
        }
        private void limpiarOrdenesEliminadas(List <OrdenProductoSerializable> lista, List <Orden> ordenesActivas)
        {
            List <OrdenProductoSerializable> toDelete = new List <OrdenProductoSerializable>();

            foreach (OrdenProductoSerializable ops in lista)
            {
                if (!(ordenesActivas.Any(prod => prod.id_orden == ops.Id_orden)))
                {
                    toDelete.Add(ops);
                }
            }
            foreach (OrdenProductoSerializable del in toDelete)
            {
                OrdenProductoSerializable elem = lista.Find(op => op.Id_orden == del.Id_orden);
                lista.Remove(elem);
            }
        }
        private void timerActualizar_Tick(object sender, EventArgs e)
        {
            if (actualizando)
            {
                return;               // Si sigue actualizando retorna
            }
            actualizando = true;
            Console.WriteLine("Aqui");

            // Obtiene todas las ordenes activas y comprueba errores
            List <Orden> ordenesActivas = ControlOrdenes.Instance.GetLista();

            if (ordenesActivas == null)
            {
                MessageBox.Show("Comprueba tu conexion");
                actualizando = false;
                return;
            }
            // Path para el archivo donde se guardan los pedidos activos
            string path = Environment.GetEnvironmentVariable("USERPROFILE") + "\\Restaurant";
            string file = path + "\\PedidosActivos.json";

            try
            {
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                if (!File.Exists(file))
                {
                    File.WriteAllText(file, "[]");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("No se pudo abrir el fichero");
                actualizando = false;
                return;
            }

            try
            {
                // SE cargan todas las pedidos previas
                string ordenesViejas = File.ReadAllText(file);
                List <OrdenProductoSerializable> listVieja = JsonConvert.DeserializeObject <List <OrdenProductoSerializable> >(ordenesViejas);
                // Se limpian los pedidos que ya no se necesitan
                limpiarOrdenesEliminadas(listVieja, ordenesActivas);

                // Se cargan todos los pedidos actuales y se crean los objetos serializables de estos
                List <OrdenProducto> lista = ControlOrdenProductos.Instance.GetLista();

                List <OrdenProductoSerializable> list2 = new List <OrdenProductoSerializable>();
                foreach (OrdenProducto op in lista)
                {
                    OrdenProductoSerializable s = OrdenProductoSerializable.FromOrdenProducto(op);
                    list2.Add(s);
                }

                // Sew guardan los nuevos pedidos
                File.WriteAllText(file, JsonConvert.SerializeObject(list2));


                // Pedidos eliminado, nuevos y editados
                List <OrdenProductoSerializable> nuevas     = ordenesNuevas(listVieja, list2);
                List <OrdenProductoSerializable> eliminadas = ordenesEliminadas(listVieja, list2);
                List <OrdenProductoSerializable> editadas   = ordenesEditadas(eliminadas, nuevas);

                // Si existen pedidos pendientes
                if (eliminadas.Count > 0 || nuevas.Count > 0 || editadas.Count > 0)
                {
                    // Si es la primer vez que se entra al metodo se pergunta si se quiere imprimir los pendientes
                    if (firstTime)
                    {
                        DialogResult result = MessageBox.Show(this, "Existen ordenes pendientes, Imprimir?", "Advertencia", MessageBoxButtons.YesNo);
                        firstTime = false;
                        if (result != DialogResult.Yes)
                        {
                            actualizando = false;
                            return;
                        }
                        ;
                    }

                    // Se carga la configuracion de las categorias que se dean imprimir
                    string configFile = path + "\\Impresiones.config";
                    List <CategoriaProducto> categoriasParaImprimir = JsonConvert.DeserializeObject <List <CategoriaProducto> >(File.ReadAllText(configFile));
                    List <Orden>             ordenesActivas2        = ControlOrdenes.Instance.GetLista();

                    // Se imprime si es necesario
                    foreach (OrdenProductoSerializable nueva in nuevas)
                    {
                        Console.WriteLine("Se ha agregado " + nueva);
                        if (categoriasParaImprimir.Any(cpi => cpi.id_categoria == nueva.Id_categoria))
                        {
                            if (ordenesActivas2.Where(oa => oa.id_orden == nueva.Id_orden).ToList().Count > 0)
                            {
                                imprimirTicketNuevo(nueva);
                            }
                        }
                    }
                    foreach (OrdenProductoSerializable nueva in eliminadas)
                    {
                        Console.WriteLine("Se ha eliminado " + nueva);
                        if (categoriasParaImprimir.Any(cpi => cpi.id_categoria == nueva.Id_categoria))
                        {
                            if (ordenesActivas2.Where(oa => oa.id_orden == nueva.Id_orden).ToList().Count > 0)
                            {
                                imprimirTicketEliminado(nueva);
                            }
                        }
                    }

                    foreach (OrdenProductoSerializable nueva in editadas)
                    {
                        OrdenProductoSerializable viejo = listVieja.Find(ops => ops.Id_orden_producto == nueva.Id_orden_producto - 1);
                        Console.WriteLine("Se ha editado " + nueva);
                        if (categoriasParaImprimir.Any(cpi => cpi.id_categoria == nueva.Id_categoria))
                        {
                            if (ordenesActivas2.Where(oa => oa.id_orden == nueva.Id_orden).ToList().Count > 0)
                            {
                                imprimirTicketEditado(viejo, nueva);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                try
                {
                    File.WriteAllText(file, "[]");
                }
                catch { }
                MessageBox.Show("Error desconocido");
            }

            firstTime    = false;
            actualizando = false;
        }
Example #5
0
        public bool ImprimirEditado(OrdenProductoSerializable viejo, OrdenProductoSerializable nuevo)
        {
            try
            {
                PrintDocument document = new PrintDocument();
                document.DefaultPageSettings.Landscape = true;
                document.PrintPage += new PrintPageEventHandler((sender, e) =>
                {
                    Graphics g   = e.Graphics;
                    Brush brush  = new SolidBrush(Color.Black);
                    Pen pen      = new Pen(brush);
                    Font font    = new Font("Arial", 12);
                    string linea = "";
                    int x        = 0, y = 0;

                    g.DrawString("ELIMINADO", font, new SolidBrush(Color.Red), x + 10, y);
                    y += 30;

                    string[] producto = ("" + viejo).Split(' ');

                    for (int i = 0; i < producto.Length; i++)
                    {
                        string word = producto[i] + " ";
                        if (linea.Length + word.Length >= width)
                        {
                            g.DrawString(linea, font, brush, x + 10, y);
                            y    += 30;
                            linea = "";
                            i--;
                        }
                        else
                        {
                            linea += word;
                        }
                    }

                    if (linea.Length > 0)
                    {
                        g.DrawString(linea, font, brush, x + 10, y);
                        y += 30;
                    }

                    if (viejo.Variantes.Count > 0)
                    {
                        linea = "";
                        g.DrawString("-::-Variantes:", font, brush, x + 10, y);
                        y += 30;
                        foreach (var variante in viejo.Variantes)
                        {
                            string[] variant = variante.Nombre.Split(' ');

                            for (int i = 0; i < variant.Length; i++)
                            {
                                string word = variant[i] + " ";
                                if (linea.Length + word.Length >= width)
                                {
                                    g.DrawString(linea, font, brush, x + 10, y);
                                    y    += 30;
                                    linea = "";
                                    i--;
                                }
                                else
                                {
                                    linea += word;
                                }
                            }

                            if (linea.Length > 0)
                            {
                                g.DrawString(linea, font, brush, x + 10, y);
                                y += 30;
                            }
                        }
                    }

                    g.DrawString("Cantidad: " + viejo.Cantidad, font, brush, x + 10, y);
                    y += 30;

                    g.DrawString("AGREGADO", font, new SolidBrush(Color.Red), x + 10, y);
                    y += 30;

                    producto = ("" + nuevo).Split(' ');

                    for (int i = 0; i < producto.Length; i++)
                    {
                        string word = producto[i] + " ";
                        if (linea.Length + word.Length >= width)
                        {
                            g.DrawString(linea, font, brush, x + 10, y);
                            y    += 30;
                            linea = "";
                            i--;
                        }
                        else
                        {
                            linea += word;
                        }
                    }

                    if (linea.Length > 0)
                    {
                        g.DrawString(linea, font, brush, x + 10, y);
                        y += 30;
                    }

                    if (nuevo.Variantes.Count > 0)
                    {
                        linea = "";
                        g.DrawString("-::-Variantes:", font, brush, x + 10, y);
                        y += 30;
                        foreach (var variante in nuevo.Variantes)
                        {
                            string[] variant = variante.Nombre.Split(' ');

                            for (int i = 0; i < variant.Length; i++)
                            {
                                string word = variant[i] + " ";
                                if (linea.Length + word.Length >= width)
                                {
                                    g.DrawString(linea, font, brush, x + 10, y);
                                    y    += 30;
                                    linea = "";
                                    i--;
                                }
                                else
                                {
                                    linea += word;
                                }
                            }

                            if (linea.Length > 0)
                            {
                                g.DrawString(linea, font, brush, x + 10, y);
                                y += 30;
                            }
                        }
                    }

                    g.DrawString("-::-Cantidad: " + nuevo.Cantidad, font, brush, x + 10, y);
                    y += 30;

                    if (nuevo.Comentarios.Length > 0)
                    {
                        string[] coment = nuevo.Comentarios.Split(' ');
                        linea           = "-::-Comentarios: ";

                        for (int i = 0; i < coment.Length; i++)
                        {
                            string word = coment[i] + " ";
                            if (linea.Length + word.Length >= width)
                            {
                                g.DrawString(linea, font, brush, x + 10, y);
                                y    += 30;
                                linea = "";
                                i--;
                            }
                            else
                            {
                                linea += word;
                            }
                        }

                        if (linea.Length > 0)
                        {
                            g.DrawString(linea, font, brush, x + 10, y);
                            y += 30;
                        }
                    }
                    g.DrawString("Mesa: " + nuevo.Mesa, font, brush, x + 10, y);
                    y += 30;
                });

                document.Print();
                return(true);
            }
            catch (Exception e)
            {
                Log.Write("Error no se puedo imprimir");
                MessageBox.Show("Error no se puedo imprimir");
                return(false);
            }

            /* PrintPreviewDialog ppDialog = new PrintPreviewDialog();
             * ppDialog.Document = document;
             * ppDialog.Show();
             */
        }