/// <summary> /// Validar Cambios /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ValidarCambios(object sender, RoutedEventArgs e) { string estadoNota = null; //Conseguir el estado de la nota switch (listEstado.SelectedIndex) { case 0: estadoNota = "Pendiente"; break; case 1: estadoNota = "Urgente"; break; case 2: estadoNota = "Reclamación"; break; case 3: estadoNota = "Listo"; miNota.fechaEntrega = dateEntrega.Text; break; } //Si la nota está en listo, se debe pedir quién la realizó if (estadoNota.Equals("Listo") && listEmpleados.SelectedIndex == -1) { MessageBox.Show("Seleccione al empleado de la lista quien despachó esta nota", "La Modistería | Error"); listEmpleados.SelectedIndex = 1; } else { //Verificación de cambios int i = 0; int j = 0; foreach (String[] fila in cambiosFilas) { foreach (string celda in fila) { if (celda != "") { switch (j) { case 0: miNota.listaTrabajos.ElementAt(i).cantidad = int.Parse(celda); Console.WriteLine("Se cambió la cantidad del trabajo (" + i + "): " + miNota.listaTrabajos.ElementAt(i).cantidad); break; case 1: miNota.listaTrabajos.ElementAt(i).descripcion = celda; Console.WriteLine("Se cambió la descripcion del trabajo (" + i + "): " + miNota.listaTrabajos.ElementAt(i).descripcion); break; } } j++; } i++; j = 0; } //Registro en la BD var cfg = new Configuration(); cfg.Configure(); var sessions = cfg.BuildSessionFactory(); var sess = sessions.OpenSession(); //Buscar el id del empleado quien hizo la nota en la lista de empleados bool cambioEmplRealiza=true; 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); cambioEmplRealiza=false; } //Actualización de los valores de la nota miNota.estadoNota = estadoNota; if(cambioEmplRealiza) miNota.hechaPor = idEmpleadaRealizaNota; miNota.descripcionEstado = txtDescripcion.Text; //Si se abonó algo, se debe registrar dicho abono con la fecha de hoy //Se debe restar el acumulado de abonos al total para obtener el saldo if (!string.IsNullOrEmpty(txtAbono.Text)) { //Obtener el abono y ver que no sea mayor a lo que se debe (saldo) float montoAbono = Convert.ToSingle(txtAbono.Text, CultureInfo.InvariantCulture); float nuevoSaldo= miNota.saldo-montoAbono; Console.WriteLine("La deuda es de: "+miNota.saldo); Console.WriteLine("Se le ha abonado: " + miNota.anticipo); Console.WriteLine("Se van a abonar: "+montoAbono); //Si se abona más de lo que se debe, se tiene un error if (nuevoSaldo < 0) MessageBox.Show("El abono es mayor a lo que se debe. Ingrese un abono válido ....", "La Modisteria | Abono de una nota", MessageBoxButton.OK, MessageBoxImage.Error); //Si es positivo, se procede al registro del anticipo else { //Crear el anticipo a registrar Anticipo anticipoHoy = new Anticipo { fecha = DateTime.Today.ToString("d"), monto = montoAbono }; //Guardar este anticipo de hoy miNota.addAnticipo(anticipoHoy); //Guardo el anticipo total actualizado miNota.anticipo += anticipoHoy.monto; Console.WriteLine("El nuevo abono acumulado de la nota es: "+miNota.anticipo); //Restar el anticipo general del total de la nota miNota.saldo = miNota.total - miNota.anticipo; Console.WriteLine("El nuevo saldo de la nota es: "+miNota.saldo); //Se imprime comprobación del abono de la nota MessageBox.Show("Se abonaron $"+anticipoHoy.monto+" el día "+anticipoHoy.fecha+" a la nota No."+miNota.folioNota, "La Modisteria | Abono de una nota", MessageBoxButton.OK, MessageBoxImage.Information); //Se actualiza la información de la nota sess.SaveOrUpdate(miNota); sess.Flush(); //Se cierra la ventana sess.Close(); this.Close(); } } //Se aplica cualquier cambio a la nota adicional else { sess.SaveOrUpdate(miNota); sess.Flush(); sess.Close(); this.Close(); } } }
/// <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> /// Agrega un anticipo a la lista de anticipos /// </summary> /// <param name="t"></param> protected internal virtual void addAnticipo(Anticipo t) { t.idNota = this; listaAnticipos.Add(t); }