/// <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(); } } }
/// <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(); }