예제 #1
0
        /// <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();
                }
            }
        }
예제 #3
0
 /// <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);
 }