Пример #1
0
        static void Main(string[] args)
        {
            #region Variables
            string   respuesta;
            Cliente  clienteFactura     = new Cliente();
            string   clienteID          = string.Empty;
            string   respuestaFactura   = string.Empty;
            string   respuestaDetalle   = string.Empty;
            Factura  factura            = new Factura();
            string   productoID         = string.Empty;
            Producto productoDetalle    = new Producto();
            Detalle  detalle            = new Detalle();
            double   subtotal           = 0;
            double   descuento          = 0;
            double   impuesto           = 0;
            double   total              = 0;
            Cliente  clienteActualizar  = new Cliente();
            Producto productoActualizar = new Producto();
            Cliente  cliente            = new Cliente();
            Producto producto           = new Producto();
            #endregion

            //Inicio de listas
            List <Factura>  listaFacturas  = new List <Factura>();
            List <Cliente>  listaClientes  = new List <Cliente>();
            List <Producto> listaProductos = new List <Producto>();
            //llenar las listas
            listaClientes  = ClienteController.JSONListadoDeClientes();
            listaProductos = ProductoController.JSONListadoDeProductos();
            listaFacturas  = FacturaController.JSONListadoDeFacturas();

            int opcion = 0;
            do
            {
                do
                {
                    Console.Clear();

                    Console.WriteLine("Seleccione la Opcion");
                    Console.WriteLine("1.- Emitir Factura");
                    Console.WriteLine("2.- Agregar Cliente");
                    Console.WriteLine("3.- Editar Cliente");
                    Console.WriteLine("4.- Agregar Producto");
                    Console.WriteLine("5.- Editar Producto");
                    Console.WriteLine("6.- Salir");


                    opcion = int.Parse(Console.ReadLine());

                    Console.Clear();
                } while ((opcion > 6) || (opcion < 1));

                switch (opcion)
                {
                case 1:
                    #region Proceso de Emision de facturas
                    Console.WriteLine("EMITIR FACTURA");

                    //Busqueda de cliente
                    do
                    {
                        Console.WriteLine("Ingrese la cedula del cliente");
                        clienteID      = Console.ReadLine();
                        clienteFactura = ClienteController.BuscarClientePorID(listaClientes, clienteID);
                        if (clienteFactura == null)
                        {
                            Console.WriteLine("No existe cliente con esa cédula");
                            //Si el cliente no existe permite ir al menu principal
                            Console.WriteLine("Desea salir para ingresar al cliente S/N:");
                            respuesta = Console.ReadLine();
                            if (respuesta == "S")
                            {
                                break;
                            }
                        }
                        //Se asegura que haya un cliente hasta continuar
                    } while (clienteFactura == null);
                    //Fin bsuqueda de Cliente

                    Console.WriteLine("\n Nombres: {0} {1}", clienteFactura.Nombres, clienteFactura.Apellidos);
                    Console.WriteLine("Teléfono: {0} Dirección: {1}", clienteFactura.Telefono, clienteFactura.Direccion);

                    //Agrega datos de la cabecera de factura
                    factura.ID            = listaFacturas.Count + 1;
                    factura.Fecha         = DateTime.Now;
                    factura.Cliente       = clienteFactura;
                    factura.ListaDetalles = new List <Detalle>();

                    //Inicia el ingreso del detalle
                    do
                    {
                        //Generacion de detalle
                        do
                        {
                            productoDetalle = new Producto();

                            //Busqueda de producto, se repite ahsta que se encuentre uno
                            do
                            {
                                Console.WriteLine("Ingrese el producto a facturar");
                                productoID = Console.ReadLine();

                                productoDetalle = ProductoController.BuscarProductoPorID(listaProductos, productoID);

                                if (productoDetalle == null)
                                {
                                    Console.WriteLine("El producto no existe, reingrese el ID");
                                }
                                //Asegura que ingrese un producto existente
                            } while (productoDetalle == null);
                            //Fin Busqueda de Producto

                            //Ingreso de infromacion relacionada al detalle
                            detalle          = new Detalle();
                            detalle.ID       = factura.ListaDetalles.Count + 1;
                            detalle.ID       = int.Parse(factura.ID.ToString() + detalle.ID.ToString());
                            detalle.Producto = productoDetalle;
                            Console.WriteLine(detalle.Producto.Nombre);
                            Console.WriteLine("Ingrese la cantidad del producto");
                            detalle.Cantidad = double.Parse(Console.ReadLine());
                            Console.WriteLine("Ingrese el descuento");
                            detalle.Descuento = double.Parse(Console.ReadLine());

                            //calculo de valores del detalle
                            subtotal  = detalle.Cantidad * detalle.Producto.Precio;
                            descuento = (subtotal) * (detalle.Descuento / 100);
                            impuesto  = (subtotal - descuento) * (detalle.Producto.Impuesto / 100);
                            total     = subtotal - descuento + impuesto;
                            Console.WriteLine("Código | Nombre | Precio | Cantidad | Subtotal | Descuento | Impuesto | Total }");
                            Console.WriteLine("{0}    | {1} | {2} | {3} | {4} | {5} | {6} | {7}", detalle.Producto.ID.ToString(), detalle.Producto.Nombre.ToString(), detalle.Producto.Precio.ToString(), detalle.Cantidad.ToString(), subtotal.ToString(), descuento.ToString(), impuesto.ToString(), total.ToString());
                            //Validacion de que el ingreso de la respuesta este correcto
                            do
                            {
                                Console.WriteLine("Esta correcto lo ingresado: S/N");
                                respuestaDetalle = Console.ReadLine();
                            } while ((respuestaDetalle != "N") && (respuestaDetalle != "S"));
                            //Fin validacion
                        } while (respuestaDetalle == "N");
                        //Fin generacion Detaller
                        //Agrega el detaller
                        factura.ListaDetalles.Add(detalle);
                        //Validacion de que el ingreso de la respuesta este correcto
                        do
                        {
                            Console.WriteLine("Desea ingresar otro Item: S/N");
                            respuestaFactura = Console.ReadLine();
                        } while ((respuestaFactura != "N") && (respuestaFactura != "S"));
                        //Fin validacion
                    }while (respuestaFactura == "S");
                    //Fin de ingreso de detalle
                    //agrega la factura actual a la lista de facturs
                    listaFacturas.Add(factura);
                    //Detalle de la Facturas
                    Console.WriteLine("\nCABECERA DE FACTURA");
                    Console.WriteLine("Nombres: {0} {1}", factura.Cliente.Nombres, factura.Cliente.Apellidos);
                    Console.WriteLine("Teléfono: {0} Dirección: {1}", factura.Cliente.Telefono, factura.Cliente.Direccion);

                    Console.WriteLine("\nDETALLE DE FACTURA");
                    Console.WriteLine("Código | Nombre | Precio | Cantidad | Subtotal | Descuento | Impuesto | Total }");
                    foreach (Detalle detalleItem in factura.ListaDetalles)
                    {
                        subtotal  = detalleItem.Cantidad * detalleItem.Producto.Precio;
                        descuento = (subtotal) * (detalleItem.Descuento / 100);
                        impuesto  = (subtotal - descuento) * (detalleItem.Producto.Impuesto / 100);
                        total     = subtotal - descuento + impuesto;

                        Console.WriteLine("{0} | {1} | {2} | {3} | {4} | {5} | {6} | {7}", detalleItem.Producto.ID.ToString(), detalleItem.Producto.Nombre.ToString(), detalleItem.Producto.Precio.ToString(), detalleItem.Cantidad.ToString(), subtotal.ToString(), descuento.ToString(), impuesto.ToString(), total.ToString());
                    }
                    //envia a escribir las facturas
                    FacturaController.ListadoDeFacturasJSON(listaFacturas);
                    Console.WriteLine("Presiones cualquier tecla para continuar");
                    Console.ReadKey();
                    #endregion

                    break;

                case 2:
                    #region Proceso para agregar Clientes
                    Console.WriteLine("Agregar Cliente");
                    Console.WriteLine("Cédula: ");
                    cliente.ID = Console.ReadLine();
                    Console.WriteLine("Apellidos: ");
                    cliente.Apellidos = Console.ReadLine();
                    Console.WriteLine("Nombres: ");
                    cliente.Nombres = Console.ReadLine();
                    Console.WriteLine("Dirección: ");
                    cliente.Direccion = Console.ReadLine();
                    Console.WriteLine("Teléfono: ");
                    cliente.Telefono = Console.ReadLine();

                    Console.WriteLine("Los datos ingresados están correctos?? S/N");
                    respuesta = Console.ReadLine();
                    if (respuesta == "S")
                    {
                        if (listaClientes == null)
                        {
                            listaClientes = new List <Cliente>();
                        }
                        listaClientes.Add(cliente);
                        ClienteController.ListadoDeClientesJSON(listaClientes);
                    }

                    Console.WriteLine("Presiones cualquier tecla para continuar");
                    Console.ReadKey();
                    #endregion

                    break;

                case 3:
                    #region Proceso para editar Clientes
                    Console.WriteLine("Editar Cliente");
                    //Busqueda de cliente
                    do
                    {
                        Console.WriteLine("Ingrese la cedula del cliente");
                        clienteID = Console.ReadLine();
                        cliente   = ClienteController.BuscarClientePorID(listaClientes, clienteID);
                        if (cliente == null)
                        {
                            Console.WriteLine("No existe cliente con esa cédula");
                            //Si el cliente no existe permite ir al menu principal
                            Console.WriteLine("Desea salir para ingresar al cliente S/N:");
                            respuesta = Console.ReadLine();
                            if (respuesta == "S")
                            {
                                break;
                            }
                        }
                        //Se asegura que haya un cliente hasta continuar
                    } while (cliente == null);
                    //Fin bsuqueda de Cliente

                    Console.WriteLine("\n Nombres: {0} {1}", cliente.Nombres, cliente.Apellidos);
                    Console.WriteLine("Teléfono: {0} Dirección: {1}", cliente.Telefono, cliente.Direccion);

                    do
                    {
                        Console.WriteLine("Si desea actualizar el cliente presione -A- si desea eliminarlo presiones -E-");
                        respuesta = Console.ReadLine();
                    } while ((respuesta != "A") && (respuesta != "E"));
                    //Si desea actualizar
                    if (respuesta == "A")
                    {
                        Console.WriteLine("Datos para actualizar");
                        Console.WriteLine("Cédula: ");
                        clienteActualizar.ID = Console.ReadLine();
                        Console.WriteLine("Apellidos: ");
                        clienteActualizar.Apellidos = Console.ReadLine();
                        Console.WriteLine("Nombres: ");
                        clienteActualizar.Nombres = Console.ReadLine();
                        Console.WriteLine("Dirección: ");
                        clienteActualizar.Direccion = Console.ReadLine();
                        Console.WriteLine("Teléfono: ");
                        clienteActualizar.Telefono = Console.ReadLine();

                        Console.WriteLine("Los datos ingresados están correctos?? S/N");
                        respuesta = Console.ReadLine();
                        if (respuesta == "S")
                        {
                            var clienteARemover = listaClientes.SingleOrDefault(c => c.ID == cliente.ID);
                            if (clienteARemover != null)
                            {
                                listaClientes.Remove(clienteARemover);
                            }

                            listaClientes.Add(clienteActualizar);
                            ClienteController.ListadoDeClientesJSON(listaClientes);
                            Console.WriteLine("Dato Actualizado con éxito");
                        }
                        else
                        {
                            Console.WriteLine("No se hicieron cambios en los datos");
                        }
                    }
                    //Si desea eliminar
                    if (respuesta == "E")
                    {
                        Console.WriteLine("Desea eliminar al cliente?? S/N");
                        respuesta = Console.ReadLine();
                        if (respuesta == "S")
                        {
                            var clienteARemover = listaClientes.SingleOrDefault(c => c.ID == cliente.ID);
                            if (clienteARemover != null)
                            {
                                listaClientes.Remove(clienteARemover);
                            }

                            ClienteController.ListadoDeClientesJSON(listaClientes);
                            Console.WriteLine("Dato eliminado con éxito");
                        }
                        else
                        {
                            Console.WriteLine("No se hicieron cambios en los datos");
                        }
                    }

                    Console.WriteLine("Presione cualquier tecla para continuar");
                    Console.ReadKey();
                    #endregion

                    break;

                case 4:
                    #region Proceso para agregar producto
                    Console.WriteLine("Agregar Producto");
                    Console.WriteLine("ID: ");
                    producto.ID = Console.ReadLine();
                    Console.WriteLine("Nombre: ");
                    producto.Nombre = Console.ReadLine();
                    Console.WriteLine("Precio unitario: ");
                    producto.Precio = double.Parse(Console.ReadLine());
                    Console.WriteLine("Impuesto grabado: ");
                    producto.Impuesto = double.Parse(Console.ReadLine());

                    Console.WriteLine("Los datos ingresados están correctos?? S/N");
                    respuesta = Console.ReadLine();
                    if (respuesta == "S")
                    {
                        if (listaProductos == null)
                        {
                            listaProductos = new List <Producto>();
                        }
                        listaProductos.Add(producto);
                        ProductoController.ListadoDeProductosJSON(listaProductos);
                    }
                    Console.WriteLine("Presione cualquier tecla para continuar");
                    Console.ReadKey();
                    #endregion

                    break;

                case 5:
                    #region Proceso para editar producto
                    Console.WriteLine("Editar Producto");
                    //Busqueda de producto, se repite ahsta que se encuentre uno
                    do
                    {
                        Console.WriteLine("Ingrese el producto a editar");
                        productoID = Console.ReadLine();

                        producto = ProductoController.BuscarProductoPorID(listaProductos, productoID);

                        if (producto == null)
                        {
                            Console.WriteLine("El producto no existe, reingrese el ID");
                        }
                        //Asegura que ingrese un producto existente
                    } while (producto == null);
                    //Fin Busqueda de Producto

                    Console.WriteLine("ID: {0}  Nombre: {1}  Precio: {2}  Impuesto: {3}", producto.ID, producto.Nombre, producto.Precio, producto.Impuesto);

                    do
                    {
                        Console.WriteLine("Si desea actualizar el producto presione -A- si desea eliminarlo presione -E-");
                        respuesta = Console.ReadLine();
                    } while ((respuesta != "A") && (respuesta != "E"));
                    //Si desea actualizar
                    if (respuesta == "A")
                    {
                        Console.WriteLine("Datos para actualizar");
                        Console.WriteLine("ID: ");
                        productoActualizar.ID = Console.ReadLine();
                        Console.WriteLine("Nombre: ");
                        productoActualizar.Nombre = Console.ReadLine();
                        Console.WriteLine("Precio unitario: ");
                        productoActualizar.Precio = double.Parse(Console.ReadLine());
                        Console.WriteLine("Impuesto grabado: ");
                        productoActualizar.Impuesto = double.Parse(Console.ReadLine());

                        Console.WriteLine("Los datos ingresados están correctos?? S/N");
                        respuesta = Console.ReadLine();
                        if (respuesta == "S")
                        {
                            var productoARemover = listaProductos.SingleOrDefault(p => p.ID == producto.ID);
                            if (productoARemover != null)
                            {
                                listaProductos.Remove(productoARemover);
                            }

                            listaProductos.Add(productoActualizar);
                            ProductoController.ListadoDeProductosJSON(listaProductos);
                            Console.WriteLine("Datos Actualizados con éxito");
                        }
                        else
                        {
                            Console.WriteLine("No se hicieron cambios en los datos");
                        }
                    }
                    //Si desea eliminar
                    if (respuesta == "E")
                    {
                        Console.WriteLine("Desea eliminar al producto?? S/N");
                        respuesta = Console.ReadLine();
                        if (respuesta == "S")
                        {
                            var productoARemover = listaProductos.SingleOrDefault(p => p.ID == producto.ID);
                            if (productoARemover != null)
                            {
                                listaProductos.Remove(productoARemover);
                            }

                            ProductoController.ListadoDeProductosJSON(listaProductos);
                            Console.WriteLine("Datos Actualizados con éxito");
                        }
                        else
                        {
                            Console.WriteLine("No se hicieron cambios en los datos");
                        }
                    }


                    Console.WriteLine("Presione cualquier tecla para continuar");
                    Console.ReadKey();
                    #endregion

                    break;

                case 6:
                    Console.WriteLine("Presione cualquier tecla para continuar");
                    Console.ReadKey();
                    break;
                }
                Console.Clear();
            } while (opcion != 6);
        }