/// <summary>
        /// Loads user preferences and displays them
        /// </summary>
        private void LoadPreferences()
        {
            DescuentoValue        = UserPreferences.GetDescuento();
            DescuentoInitialValue = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", DescuentoValue);

            NumeroReciboValue        = UserPreferences.GetNumeroRecibo();
            NumeroReciboInitialValue = NumeroReciboValue;

            UbicacionValue        = UserPreferences.GetPreferredLocation();
            UbicacionInitialValue = UbicacionValue;

            RecibosValue        = UserPreferences.GetRecibosLocation();
            RecibosInitialValue = RecibosValue;

            FacturasValue        = UserPreferences.GetFacturasLocation();
            FacturasInitialValue = FacturasValue;

            ReconexionValue        = UserPreferences.GetReconexionValue();
            ReconexionInitialValue = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", ReconexionValue);

            AfiliacionValue        = UserPreferences.GetAfiliacionValue();
            AfiliacionInitialValue = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", AfiliacionValue);

            DerivacionValue        = UserPreferences.GetDerivacionValue();
            DerivacionInitialValue = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", DerivacionValue);

            TrasladoValue        = UserPreferences.GetTrasladoValue();
            TrasladoInitialValue = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", TrasladoValue);

            TVvalue        = UserPreferences.GetTVValue();
            TVInitialValue = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", TVvalue);

            Megas3Value        = UserPreferences.Get3MegasValue();
            Megas3InitialValue = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", Megas3Value);

            Megas5Value        = UserPreferences.Get5MegasValue();
            Megas5InitialValue = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", Megas5Value);

            Megas7Value        = UserPreferences.Get7MegasValue();
            Megas7InitialValue = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", Megas7Value);

            Megas10Value        = UserPreferences.Get10MegasValue();
            Megas10InitialValue = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", Megas10Value);

            (ComboTV3Value, ComboInternet3Value) = UserPreferences.GetCombo3();
            Combo3TVInitialValue       = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", ComboTV3Value);
            Combo3InternetInitialValue = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", ComboInternet3Value);

            (ComboTV5Value, ComboInternet5Value) = UserPreferences.GetCombo5();
            Combo5TVInitialValue       = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", ComboTV5Value);
            Combo5InternetInitialValue = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", ComboInternet5Value);

            (ComboTV7Value, ComboInternet7Value) = UserPreferences.GetCombo7();
            Combo7TVInitialValue       = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", ComboTV7Value);
            Combo7InternetInitialValue = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", ComboInternet7Value);

            (ComboTV10Value, ComboInternet10Value) = UserPreferences.GetCombo10();
            Combo10TVInitialValue       = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", ComboTV10Value);
            Combo10InternetInitialValue = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", ComboInternet10Value);
        }
        /// <summary>
        /// Creates a single invoice
        /// </summary>
        /// <param name="customer">Customer associated with the invoice</param>
        /// <returns>A invoice object</returns>
        private Factura CreateInvoice(Customer customer)
        {
            StringBuilder numeroFactura = new StringBuilder(customer.Cedula).Append("-").Append(TypeOfRecibos.MENSUALIDAD).Append("-").Append(DateManager.GetMonthInSpanish()).Append("-").Append(DateManager.GetToday().Year);
            DateTime      fecha         = DateManager.GetToday();
            Mes           mesCargado    = DateManager.GetMonth();
            DateTime      fechaLimite;
            List <Cargo>  cargos = new List <Cargo>();

            if (customer.HasTV && customer.HasInternet)
            {
                fechaLimite = DateManager.GetDateLimit(false);
                if (customer.EstadoTV == Estado.Pendiente || customer.EstadoInternet == Estado.Pendiente)
                {
                    return(null);
                }
                else
                {
                    //No pending
                    int internet = 0, tv = 0;
                    switch (customer.Megas)
                    {
                    case 3:
                        (tv, internet) = UserPreferences.GetCombo3();
                        break;

                    case 5:
                        (tv, internet) = UserPreferences.GetCombo5();
                        break;

                    case 7:
                        (tv, internet) = UserPreferences.GetCombo7();
                        break;

                    case 10:
                        (tv, internet) = UserPreferences.GetCombo10();
                        break;
                    }

                    internet -= customer.Descuento;

                    if (IncompleteCharge(customer.FechaAfiliacionInternet))
                    {
                        Calculadora.CalcularPrecioRealBasadoEnDias(ref internet, 30 - DateManager.GetToday().Day);
                    }

                    if (IncompleteCharge(customer.FechaAfiliacionTV))
                    {
                        if (DateManager.GetToday().Day < 16)
                        {
                            Calculadora.CalcularPrecioRealBasadoEnDias(ref tv, 30 - DateManager.GetToday().Day);
                        }
                        else
                        {
                            tv = 0;
                        }
                    }

                    Cargo cargoTV       = new Cargo(tv, 0, Concepto.TV);
                    Cargo cargoInternet = new Cargo(internet, 0, Concepto.Internet);

                    cargos.Add(cargoTV);
                    cargos.Add(cargoInternet);

                    AddPreviousCharges(customer.Cedula, cargos);
                    return(new Factura(numeroFactura.ToString(), fecha, fechaLimite, mesCargado, cargos, customer.Cedula));
                }
            }
            else if (customer.HasInternet)
            {
                if (customer.EstadoInternet == Estado.Pendiente)
                {
                    return(null);
                }


                fechaLimite = DateManager.GetDateLimit(false);
                int internet = 0;

                switch (customer.Megas)
                {
                case 3:
                    internet = UserPreferences.Get3MegasValue();
                    break;

                case 5:
                    internet = UserPreferences.Get5MegasValue();
                    break;

                case 7:
                    internet = UserPreferences.Get7MegasValue();
                    break;

                case 10:
                    internet = UserPreferences.Get10MegasValue();
                    break;
                }
                internet -= customer.Descuento;

                if (IncompleteCharge(customer.FechaAfiliacionInternet))
                {
                    Calculadora.CalcularPrecioRealBasadoEnDias(ref internet, 30 - DateManager.GetToday().Day);
                }

                Cargo cargoInternet = new Cargo(internet, 0, Concepto.Internet);

                cargos.Add(cargoInternet);

                AddPreviousCharges(customer.Cedula, cargos);
                return(new Factura(numeroFactura.ToString(), fecha, fechaLimite, mesCargado, cargos, customer.Cedula));
            }
            else if (customer.HasTV)
            {
                if (customer.EstadoTV == Estado.Pendiente)
                {
                    return(null);
                }

                fechaLimite = DateManager.GetDateLimit(true);

                int tv = UserPreferences.GetTVValue();

                if (IncompleteCharge(customer.FechaAfiliacionTV))
                {
                    if (DateManager.GetToday().Day < 16)
                    {
                        Calculadora.CalcularPrecioRealBasadoEnDias(ref tv, 30 - DateManager.GetToday().Day);
                    }
                    else
                    {
                        tv = 0;
                    }
                }

                Cargo cargoTV = new Cargo(tv, 0, Concepto.TV);

                cargos.Add(cargoTV);

                AddPreviousCharges(customer.Cedula, cargos);
                return(new Factura(numeroFactura.ToString(), fecha, fechaLimite, mesCargado, cargos, customer.Cedula));
            }
            else
            {
                if (customer.Saldo == 0)
                {
                    return(null);
                }
                //If program hits this part, it means customer has no services but it owes money
                fechaLimite = DateManager.GetDateLimit(true);
            }
            //Get previous charges
            AddPreviousCharges(customer.Cedula, cargos);
            return(new Factura(numeroFactura.ToString(), fecha, fechaLimite, mesCargado, cargos, customer.Cedula));
        }