/// <summary>
        /// Crea las instancias de trabajo por cada fila de la nota, y registra la nota en la BD
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Crear_Nota(object sender, RoutedEventArgs e)
        {
            bool valido = true;
            int indiceConcepto;
            Concepto concepto = null; ;
            Producto producto = null; ;
            Trabajo trabajo = null;
            Anticipo anticipo = null;
            Nota nota = null;
            trabajos.Clear();

            //Si se acaba de cerrar la ventana del formulario, ya no debe registrarse una nota
            if (!regreso)
            {
                //La fecha de entrega debe ser válida
                if (fechaEntrega.Text.Equals(""))
                {
                    valido = false;
                    fechaEntrega.Text = "*";
                    MessageBox.Show("Ingrese una fecha de entrega para continuar ....", "La Modistería | ERROR");
                }

                //Debe haberse elegido un nombre
                if (string.IsNullOrEmpty(notaNombreCliente.Text))
                {
                    valido = false;
                    MessageBox.Show("No se seleccionó un cliente para esta nota. Elija uno del buscador o registre uno nuevo para continuar ....", "La Modistería | ERROR");
                }

                //Si el anticipo se quedó vacío, se pone un cero
                if (string.IsNullOrEmpty(txtAnticipo.Text))
                    txtAnticipo.Text = "0";

                //Si es válido, se prosigue con la captura de la nota
                if (valido)
                {
                    //Creación de una instancia de trabajo por cada fila válida
                    for (int i = 0; i < 6; i++)
                    {
                        //Si fue utilizada, es decir no está vacío el importe
                        if (!importesBox[i].Text.Equals(""))
                        {
                            //Conversión del importe a flotante
                            float importeFila = Convert.ToSingle(importesBox[i].Text, CultureInfo.InvariantCulture);

                            //Conversión del precio unitario a flotante
                            float pu = Convert.ToSingle(PUBox[i].Text, CultureInfo.InvariantCulture);

                            //Obtención del tipo de trabajo
                            string tipoTrabajo = tipoTrabajoBoxes[i].Text;

                            switch (tipoTrabajo)
                            {
                                case "C":
                                    //1.- Conseguir el índice del concepto en el combo box
                                    indiceConcepto = comboBoxes[i].SelectedIndex;
                                    //2.- Conseguir la compostura
                                    concepto = composturas[indiceConcepto];
                                    //3.- Crear la instancia
                                    trabajo = new Trabajo
                                    {
                                        cantidad = Int32.Parse(cantidadesBox[i].Text),
                                        descripcion = descripcionesBox[i].Text,
                                        importe = importeFila,
                                        concepto = concepto,
                                        precioUnitario = pu
                                    };
                                    break;

                                case "H":
                                    //1.- Conseguir el índice del concepto en el combo box
                                    indiceConcepto = comboBoxes[i].SelectedIndex;
                                    //2.- Conseguir la hechura
                                    concepto = hechuras[indiceConcepto];
                                    //3.- Crear la instancia
                                    trabajo = new Trabajo
                                    {
                                        cantidad = Int32.Parse(cantidadesBox[i].Text),
                                        descripcion = descripcionesBox[i].Text,
                                        importe = importeFila,
                                        concepto = concepto,
                                        precioUnitario = pu
                                    };
                                    break;

                                case "P":
                                    //1.- Conseguir el índice del concepto en el combo box
                                    indiceConcepto = comboBoxes[i].SelectedIndex;
                                    //2.- Conseguir la compostura
                                    producto = productos[indiceConcepto];
                                    //3.- Crear la instancia
                                    trabajo = new Trabajo
                                    {
                                        cantidad = Int32.Parse(cantidadesBox[i].Text),
                                        descripcion = descripcionesBox[i].Text,
                                        importe = importeFila,
                                        producto = producto,
                                        precioUnitario = pu
                                    };
                                    break;
                            }

                            //Registro del trabajo en una lista de trabajos
                            trabajos.Add(trabajo);
                        }
                        //Si está vacío el importe pero no la descripción, se debe concatenar a la
                        //descripción del trabajo anterior
                        else if (!descripcionesBox[i].Text.Equals(""))
                        {
                            Console.WriteLine("Se tiene una descripción huérfana ....");
                            Console.WriteLine(trabajos.ElementAt(trabajos.Count - 1).descripcion);

                            //Se debe recuperar el trabajo anterior
                            trabajos.ElementAt(trabajos.Count - 1).descripcion += " " + descripcionesBox[i].Text;
                            Console.WriteLine(trabajos.ElementAt(trabajos.Count - 1).descripcion);
                        }
                    }

                    //Conversión del saldo
                    float saldo = Convert.ToSingle(txtSaldo.Text, CultureInfo.InvariantCulture);

                    //Conversión del total
                    float totalF = Convert.ToSingle(txtTotal.Text, CultureInfo.InvariantCulture);

                    //Buscar el id del empleado quien hizo la nota en la lista de empleados
                    int idEmpleadaRealizaNota = 0;

                    try
                    {
                        var emplRealizaNota = empleadas.Where(item => item.nombre.Equals(listEmpleados.SelectedItem.ToString()));
                        idEmpleadaRealizaNota = ((Empleada)(emplRealizaNota.ElementAt(0))).idEmpleado;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex);
                    }

                    //Creación de la nota
                    nota = new Nota
                    {
                        folioNota = Int32.Parse(txtFolio.Text),
                        fechaCreacion = DateTime.Today.ToString("d"),
                        fechaEntrega = fechaEntrega.Text,
                        estadoNota = "Pendiente",
                        descripcionEstado = "",
                        tipoPago = txtFormaPago.SelectionBoxItem.ToString(),
                        total = totalF,
                        saldo = saldo,
                        creadaPor = idEmpleadaRealizaNota,
                        hechaPor = 0,
                        idCliente = clienteActual
                    };

                    //Volcar los trabajos a la nota
                    foreach (Trabajo item in trabajos) nota.addTrabajo(item);

                    //Volcar los anticipos a la nota
                    if (!txtAnticipo.Equals("0"))
                    {
                        anticipo = new Anticipo
                        {
                            fecha = fechaNota.Text,
                            monto = Convert.ToSingle(txtAnticipo.Text, CultureInfo.InvariantCulture)
                        };
                        nota.addAnticipo(anticipo);
                        nota.anticipo = anticipo.monto;

                        Console.WriteLine(anticipo.fecha);
                        Console.WriteLine(anticipo.monto);
                    }

                    //Mostrar la nota para imprimirla
                    TicketForm ticket;

                    //Si se eligió que se va a imprimir la nota, se manda true como segundo parámetro
                    if (checkCorreo.IsChecked == true) ticket = new TicketForm(nota, 4);
                    else ticket = new TicketForm(nota, 3);
                    ticket.Closing += ticket_Closing;
                    ticket.Show();
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Carga los datos de la nota en el formulario
        /// </summary>
        private void Cargar_Nota()
        {
            //Sesión de conexión a la base de datos
            var cfg = new Configuration();
            cfg.Configure();
            var sessions = cfg.BuildSessionFactory();
            var sess = sessions.OpenSession();

            //Consulta a la BD
            IQuery q = sess.CreateQuery("FROM Nota where folioNota=" + folioNota);
            var resultados = q.List<Nota>();

            //Llenar los campos
            miNota = resultados[0];

            //Estado de la nota
            switch (miNota.estadoNota)
            {
                case "Pendiente":
                    listEstado.SelectedIndex = 0;
                    break;
                case "Urgente":
                    listEstado.SelectedIndex = 1;
                    break;
                case "Reclamación":
                    listEstado.SelectedIndex = 2;
                    break;
                case "Listo":
                    listEstado.SelectedIndex = 3;
                    break;
            }

            txtDescripcion.Text = miNota.descripcionEstado;
            txtCliente.Text = miNota.idCliente.nombre;
            txtTipoPago.Text = miNota.tipoPago;
            txtTotal.Text = miNota.total.ToString(CultureInfo.InvariantCulture);
            txtSaldo.Text = miNota.saldo.ToString(CultureInfo.InvariantCulture);
            dateEntrega.Text = miNota.fechaEntrega;

            //Conseguir los datos del empleado quien hizo la nota
            IQuery q2 = sess.CreateQuery("SELECT nombre FROM Empleada where idEmpleado=" + miNota.creadaPor);
            var resultados2 = q2.List<string>();
            txtEmpleado.Text = resultados2[0];

            try
            {
                //Conseguir los datos del empleado quien hizo los trabajos de la nota
                IQuery q3 = sess.CreateQuery("SELECT nombre FROM Empleada where idEmpleado=" + miNota.hechaPor);
                var resultados3 = q3.List<string>();
                string nombreEmpleado = resultados3[0];
                Console.WriteLine(nombreEmpleado);

                foreach (var item in listEmpleados.Items)
                {
                    Console.WriteLine(item);

                    if (item.Equals(nombreEmpleado))
                    {
                        listEmpleados.SelectedItem = item;
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                Console.WriteLine("Aún no hay un empleado quien haya despachado la nota");
            }

            //Cargar lista de anticipos en una lista local
            foreach (Anticipo item in miNota.listaAnticipos)
                anticiposNota.Add(item);

            //Cargar tabla de trabajos
            //Tabla de trabajos de la nota
            int i = 0;
            List<ContenidoNota> contenidoNota = new List<ContenidoNota>();
            foreach (Trabajo item in miNota.listaTrabajos)
            {
                string nombreConcepto = null;

                if (item.concepto != null)
                    nombreConcepto = item.concepto.nombre;
                else
                    nombreConcepto = item.producto.nombre;

                contenidoNota.Add(new ContenidoNota()
                {
                    cantidad = item.cantidad,
                    concepto = nombreConcepto,
                    descripcion = item.descripcion,
                    pu = item.precioUnitario,
                    importe = item.importe
                });
                i++;
            }
            dataGridTrabajos.ItemsSource = contenidoNota;

            //Cargar la cantidad de trabajos
            for (int j = 0; j <= i; j++)
            {
                string[] arr = new string[] { "", "", "", "","" };
                cambiosFilas.Add(arr);
                Console.WriteLine("Posición vacía añadida ...");
            }

                sess.Close();
        }