Exemplo n.º 1
0
        static void Main(string[] args)
        {
            var services = new ServicesController();

            var action = "";

            while (action != "F")
            {
                while (action != "F")
                {
                    NewLine();
                    Console.WriteLine("-----------------------");
                    Console.WriteLine("       M E N U");
                    Console.WriteLine("-----------------------");
                    Console.WriteLine("    O R D E N E S ");
                    NewLine();

                    Console.WriteLine("- 'C' para Crear una Orden");
                    Console.WriteLine("- 'D' para Eliminar una Orden");
                    Console.WriteLine("- 'M' para Modificar una Orden");
                    Console.WriteLine("- 'L' para Listar todas las Ordenes");
                    Console.WriteLine("- 'A' para mostrar Cliente con mayor compras por País");
                    Console.WriteLine("- 'B' para mostrar Producto más vendido por País");
                    Console.WriteLine("Ingrese 'F' para Finalizar");

                    action = Console.ReadLine().ToUpper();

                    switch (action)
                    {
                    case "M":

                        var orderId        = 0;
                        var orderUpdateDto = new OrderDto();

                        NewLine();
                        Console.WriteLine("MODIFICAR ORDEN:");
                        Console.WriteLine("----------------");
                        NewLine();
                        Console.WriteLine("Ingrese Id de la Orden a modificar:");
                        if (!int.TryParse(Console.ReadLine(), out orderId))
                        {
                            NewLine();
                            Console.WriteLine($"El Id de Orden ingresado no es válido!");
                            break;
                        }

                        if (!string.IsNullOrWhiteSpace(orderId.ToString()))
                        {
                            var orderDtoFind = services.orderServices.GetOrderDtoByID(orderId, services);

                            if (orderDtoFind == null)
                            {
                                break;
                            }

                            orderUpdateDto = orderDtoFind;

                            orderUpdateDto = OrderCreateEdit("UPDATE", services, orderUpdateDto);
                        }
                        else
                        {
                            break;
                        }

                        var lastAddedOrderMod = services.orderServices.GetAll(services)
                                                .Where(o => o.CustomerID == orderUpdateDto.CustomerID && o.EmployeeID == orderUpdateDto.EmployeeID)
                                                .LastOrDefault();

                        var totalAmountMod = orderUpdateDto.calculateTotalAmount();

                        NewLine();
                        Console.WriteLine("ORDEN MODIFICADA CON ÉXITO");

                        NewLine();
                        Console.WriteLine("PRESIONE CUALQUIER TECLA PARA CONTINUAR...");
                        Console.ReadKey();

                        break;

                    case "D":

                        var orderDtoRemove = new OrderDto();

                        do
                        {
                            NewLine();
                            Console.WriteLine("ELIMINAR ORDEN:");
                            Console.WriteLine("-----------------");
                            Console.WriteLine("Ingrese el ID de la Orden a ELIMINAR:");


                            var orderRemoveId = -1;

                            bool isInt = int.TryParse(Console.ReadLine(), out orderRemoveId);

                            if (isInt)
                            {
                                orderDtoRemove = services.orderServices.GetOrderDtoByID(orderRemoveId, services);

                                if (orderDtoRemove == null)
                                {
                                    //throw new Exception("ERROR: No se encontró la Orden o no existe!");
                                    NewLine();
                                    Console.WriteLine("ERROR: No se encontró la Orden o no existe!");
                                    NewLine();
                                    break;
                                }
                                else
                                {
                                    if (orderDtoRemove.ShipCountry == "Mexico" || orderDtoRemove.ShipCountry == "France")
                                    {
                                        NewLine();
                                        Console.WriteLine($"No se puede eliminar una Orden de un Cliente de '{orderDtoRemove.ShipCountry}'!");
                                        NewLine();
                                        break;
                                    }
                                    else
                                    {
                                        services.orderServices.Remove(orderDtoRemove, services);
                                        break;
                                    }
                                }
                            }

                            orderDtoRemove = null;

                            //throw new Exception("ERROR: No se encontró la Orden o no existe!");
                            NewLine();
                            Console.WriteLine("ERROR: No se encontró la Orden o no existe!");
                            NewLine();
                        }while (orderDtoRemove == null);

                        break;

                    case "C":

                        NewLine();
                        Console.WriteLine("CREAR ORDEN");
                        Console.WriteLine("-------------");


                        var orderDtoNew = new OrderDto();

                        var orderDto = OrderCreateEdit("CREATE", services, orderDtoNew);

                        if (orderDto == null)
                        {
                            NewLine();
                            Console.WriteLine("La Orden no se ha generado.");
                            break;
                        }

                        var lastAddedOrder = services.orderServices.GetAll(services)
                                             .Where(o => o.CustomerID == orderDto.CustomerID && o.EmployeeID == orderDto.EmployeeID)
                                             .LastOrDefault();

                        if (lastAddedOrder == null)
                        {
                            Console.WriteLine("Hubo un ERROR al intentar obtener la nueva Orden creada.");
                            break;
                        }

                        var totalAmount = orderDto.calculateTotalAmount();

                        if (totalAmount == 0)
                        {
                            Console.WriteLine("Hubo un ERROR al intentar calcular el Importe de la Orden creada.");
                            break;
                        }

                        NewLine();
                        Console.WriteLine("ORDEN CREADA CON ÉXITO");
                        NewLine();
                        Console.WriteLine($"La Orden con ID '{lastAddedOrder.OrderID}' con importe $ {totalAmount} se ha creado correctamente.");
                        NewLine();
                        Console.WriteLine("PRESIONE CUALQUIER TECLA PARA CONTINUAR...");
                        Console.ReadKey();

                        break;

                    case "L":

                        //LISTAR TODAS LAS ÓRDENES:
                        //mostrar Id de factura, Cliente Nombre e importe total:

                        NewLine();
                        Console.WriteLine("LISTANDO TODAS LAS ÓRDENES...");
                        NewLine();

                        var ordersList = services.orderServices.GetAll(services);

                        foreach (var order in ordersList)
                        {
                            var customerGetId = order.CustomerID;

                            if (customerGetId != null)
                            {
                                var customer = services.customerServices.GetCustomerDtoByID(customerGetId, services);


                                var orderDetails = services.orderDetailsServices.GetAll()
                                                   .Where(d => d.OrderID == order.OrderID)
                                                   .Select(d => d)
                                                   .ToList();

                                order.Order_Details = orderDetails;

                                NewLine();
                                Console.WriteLine($"ID: {order.OrderID} - NOMBRE CLIENTE: '{customer.ContactName}' - IMPORTE TOTAL: ${order.calculateTotalAmount()}");
                            }
                        }

                        PressKeyToContinue();
                        break;

                    case "A":

                        //mostrar por País: cliente con mayor compra:
                        NewLine();
                        Console.WriteLine("LISTANDO CLIENTES...");
                        NewLine();

                        var bestCustomersList = services.customerServices.GetBestCostumer(services);

                        NewLine();
                        Console.WriteLine("LISTADO DE MEJORES CLIENTES (MEJORES COMPRADORES) POR PAÍS");
                        Console.WriteLine("----------------------------------------------------------");

                        foreach (var bestCustomer in bestCustomersList)
                        {
                            NewLine();
                            Console.WriteLine($"PAÍS : {bestCustomer.Country} - NOMBRE MEJOR CLIENTE : '{bestCustomer.Name}'");
                        }

                        PressKeyToContinue();
                        break;

                    case "B":

                        //mostrar por País: producto más vendido:
                        NewLine();
                        Console.WriteLine("LISTANDO PRODUCTOS...");
                        NewLine();

                        var bestSellerProductList = services.productServices.GetBestSellProduct(services);

                        NewLine();
                        Console.WriteLine("LISTADO DEL PRODUCTO MÁS VENDIDO POR PAÍS");
                        Console.WriteLine("-----------------------------------------");

                        foreach (var bestSellerProduct in bestSellerProductList)
                        {
                            NewLine();
                            Console.WriteLine($"PAÍS : {bestSellerProduct.Country} - PRODUCTO MÁS VENDIDO : '{bestSellerProduct.Name}'");
                        }

                        PressKeyToContinue();
                        break;

                    case "F":

                        NewLine();
                        Console.WriteLine("Saliendo...");

                        break;

                    default:

                        NewLine();
                        Console.WriteLine("La opción no es válida.");
                        Console.WriteLine("Por favor selecciona una opción del menú.");

                        break;
                    }
                }
            }

            NewLine();
            Console.WriteLine("Programa finalizado.");
            Console.ReadKey();
        }