Clase en C# .Net para convertir una cantidad monetaria en letra.

Comparto una clase que sirve para convertir un número decimal a una cantidad en letra.

Es decir si queremos convertir el numero 50.56 nos daría como resultado “Cincuenta pesos 56/100 M.N”.

La clase está diseñada para mostrar cantidades monetarias en dólares, euros y pesos mexicanos, pero no es difícil modificar para la moneda que se desee.


public class Moneda
    {
        private String[] UNIDADES = { "", "un ", "dos ", "tres ", "cuatro ", "cinco ", "seis ", "siete ", "ocho ", "nueve " };
        private String[] DECENAS = {"diez ", "once ", "doce ", "trece ", "catorce ", "quince ", "dieciseis ",
        "diecisiete ", "dieciocho ", "diecinueve", "veinte ", "treinta ", "cuarenta ",
        "cincuenta ", "sesenta ", "setenta ", "ochenta ", "noventa "};
        private String[] CENTENAS = {"", "ciento ", "doscientos ", "trecientos ", "cuatrocientos ", "quinientos ", "seiscientos ",
        "setecientos ", "ochocientos ", "novecientos "};

        private Regex r;

        public String Convertir(String numero, bool mayusculas,string moneda="PESOS")
        {

            String literal = "";
            String parte_decimal;
            //si el numero utiliza (.) en lugar de (,) -> se reemplaza
            numero = numero.Replace(".", ",");

            //si el numero no tiene parte decimal, se le agrega ,00
            if (numero.IndexOf(",") == -1)
            {
                numero = numero + ",00";
            }
            //se valida formato de entrada -> 0,00 y 999 999 999,00
            r = new Regex(@"\d{1,9},\d{1,2}");
            MatchCollection mc = r.Matches(numero);
            if (mc.Count > 0)
            {
                //se divide el numero 0000000,00 -> entero y decimal
                String[] Num = numero.Split(',');

                string MN = " M.N.";
                if (moneda != "PESOS")
                    MN = "";

                //de da formato al numero decimal
                parte_decimal =moneda+" "+ Num[1] + "/100"+MN;
                //se convierte el numero a literal
                if (int.Parse(Num[0]) == 0)
                {//si el valor es cero
                    literal = "cero ";
                }
                else if (int.Parse(Num[0]) > 999999)
                {//si es millon
                    literal = getMillones(Num[0]);
                }
                else if (int.Parse(Num[0]) > 999)
                {//si es miles
                    literal = getMiles(Num[0]);
                }
                else if (int.Parse(Num[0]) > 99)
                {//si es centena
                    literal = getCentenas(Num[0]);
                }
                else if (int.Parse(Num[0]) > 9)
                {//si es decena
                    literal = getDecenas(Num[0]);
                }
                else
                {//sino unidades -> 9
                    literal = getUnidades(Num[0]);
                }
                //devuelve el resultado en mayusculas o minusculas
                if (mayusculas)
                {
                    return (literal + parte_decimal).ToUpper();
                }
                else
                {
                    return (literal + parte_decimal);
                }
            }
            else
            {//error, no se puede convertir
                return literal = null;
            }
        }

        /* funciones para convertir los numeros a literales */

        private String getUnidades(String numero)
        {   // 1 - 9
            //si tuviera algun 0 antes se lo quita -> 09 = 9 o 009=9
            String num = numero.Substring(numero.Length - 1);
            return UNIDADES[int.Parse(num)];
        }

        private String getDecenas(String num)
        {// 99
            int n = int.Parse(num);
            if (n < 10) {//para casos como -> 01 - 09
                return getUnidades(num);
            }
            else if (n > 19)
            {//para 20...99
                String u = getUnidades(num);
                if (u.Equals(""))
                { //para 20,30,40,50,60,70,80,90
                    return DECENAS[int.Parse(num.Substring(0, 1)) + 8];
                }
                else
                {
                    return DECENAS[int.Parse(num.Substring(0, 1)) + 8] + "y " + u;
                }
            }
            else
            {//numeros entre 11 y 19
                return DECENAS[n - 10];
            }
        }

        private String getCentenas(String num)
        {// 999 o 099
            if (int.Parse(num) > 99)
            {//es centena
                if (int.Parse(num) == 100)
                {//caso especial
                    return " cien ";
                }
                else
                {
                    return CENTENAS[int.Parse(num.Substring(0, 1))] + getDecenas(num.Substring(1));
                }
            }
            else
            {//por Ej. 099
                //se quita el 0 antes de convertir a decenas
                return getDecenas(int.Parse(num) + "");
            }
        }

        private String getMiles(String numero)
        {// 999 999
            //obtiene las centenas
            String c = numero.Substring(numero.Length - 3);
            //obtiene los miles
            String m = numero.Substring(0, numero.Length - 3);
            String n = "";
            //se comprueba que miles tenga valor entero
            if (int.Parse(m) > 0)
            {
                n = getCentenas(m);
                return n + "mil " + getCentenas(c);
            }
            else
            {
                return "" + getCentenas(c);
            }

        }

        private String getMillones(String numero)
        { //000 000 000
            //se obtiene los miles
            String miles = numero.Substring(numero.Length - 6);
            //se obtiene los millones
            String millon = numero.Substring(0, numero.Length - 6);
            String n = "";
            if (millon.Length > 1)
            {
                n = getCentenas(millon) + "millones ";
            }
            else
            {
                n = getUnidades(millon) + "millon ";
            }
            return n + getMiles(miles);
        }

    }

Y se utiliza así:


//creamos el objeto
Moneda oMoneda = new Moneda();

//primer parametro es la cantidad en string
//segundo parametro es si queremos que sea mayuscula
//tercer parametro la moneda
string resultado = oMoneda.Convertir("50.56", true,"PESOS"));

Sistema para reclutamiento en Línea | Código fuente | MVC 5 C# .Net

El sistema para reclutamiento junto a su código fuente es un producto que he decido vender por el precio de $ 300 dólares o si eres de México por $ 5,500 pesos mexicanos.

Algunos módulos y características son los siguientes:

  • Publicación de vacantes
  • Contacto con candidatos
  • Historial de visitas a las vacantes
  • Responsivo
  • Registro de candidatos
  • Búsquedas de candidatos y vacantes
  • Ligas amigables

El siguiente video describe su funcionalidad de manera detallada.

Se puede adaptar con precio extra a las necesidades requeridas.

La tecnología utilizada es MVC5 .Net C#,  y la base de datos en SQL Server.

Comprar

¿Cómo recuperar mi usuario cuando fue eliminado o modifique la contraseña en Gym HDELEON 1.0, 1.7?

En este video explico cómo puedes recuperar tu usuario en la versión gratuita y la 1.7 si es que lo eliminaste o modificaste su contraseña y no la recuerdas.

Te invito a que te suscribas: https://www.youtube.com/c/hdeleonnet

 

Llenar una cadena a una longitud especificada con un carácter repetido en C# .Net

Esta función sirve para llenar una cadena la cual necesitemos que tenga a la izquierda un carácter repetidamente hasta llegar a una longitud, por ejemplo si deseamos tener cadenas con una longitud de 5 caracteres y con el formato 00001, esta función podría funcionar para llenar un número que nos llegue como 1 y ponerle los 0 a la izquierda hasta que sea 5 su longitud.

La función recibe 3 parámetros, el primero es el carácter para rellenar, el segundo es la longitud deseada y el tercer es la cadena original. Nos regresara la cadena rellenada. La clase es la siguiente:


public class StringTool
{

        public static string FillCharacterStart(char character, int length,string word )
        {
            string result = word;
            for (int i=word.Length;i&lt;length;i++)
            {
                result = character + result;
            }

            return result;
        }
}

Y así se utiliza:


string cadena = StringTool.FillCharacterStart('0', 5, "1");

//resultado: 00001

Crear archivo de Excel en C# .Net sin utilizar Librerías de office #spreadsheetlight #DataTable

En este video te muestro como crear un archivo de Excel desde C# .Net sin utilizar las librerías de Office.

Utilizaremos una librería creada por el MIT llamada spreadsheetlight

Sitio web de spreadsheetlight: http://spreadsheetlight.com/sample-code/


string pathFile = AppDomain.CurrentDomain.BaseDirectory + "miExcel.xlsx";

SLDocument oSLDocument = new SLDocument();

System.Data.DataTable dt = new System.Data.DataTable();

//columnas
dt.Columns.Add("Nombre",typeof(string));
dt.Columns.Add("Edad",typeof(int));
dt.Columns.Add("Sexo",typeof(string));

//registros , rows
dt.Rows.Add("Pepe",19,"Hombre");
dt.Rows.Add("Ana",20,"Mujer");
dt.Rows.Add("Perla",30,"Mujer");

oSLDocument.ImportDataTable(1, 1, dt, true);

oSLDocument.SaveAs(pathFile);

¿Cómo crear el xml 3.3 con impuestos federales? cfdi C# .Net? | catálogos | SAT #1

Te invito a que te suscribas a mi canal de youtube para mas videos interesantes sobre programación.

En este primer video te mostrare como agregar un impuesto al concepto y al nodo principal comprobante.

Descargar código: Clic aquí

Curso facturación electrónica básico: https://www.youtube.com/watch?v=XlTz0NRQLm4&list=PLWYKfSbdsjJg-yuu9K53GwthkEE8lkXDL

Curso creación pdf a partir de xml 3.3: https://www.youtube.com/watch?v=gHSC8GrEC5g&list=PLWYKfSbdsjJi6sOjwqZqotNnpWf7Jl_me

Catálogos mysql: https://www.youtube.com/watch?v=ZpHROAfzxsM

Curso gratis para crear el archivo PDF a partir de un XML 3.3 ya timbrado. C# .Net #SAT #cfdi




Con este curso de 4 videos te enseño como crear el archivo pdf a partir de un XML ya timbrado con C# .Net.

Te invito a que te suscribas a mi canal de youtube para mas videos interesantes sobre programación.

La ventaja que tiene ese curso, es que haremos el archivo pdf a partir de un archivo HTML, esto es útil para cuando el cliente pide muchos cambios en su formato (es más fácil capacitarlo a que el mismo mueva el archivo html que capacitarlo en crystal reports por ejemplo).

Me enfoco para crear el archivo PDF con un proyecto simple de consola, para que así veas que puedes implementarlo en cualquier tipo de proyecto de C# .Net: mvc .net, asp, Windows form, WPF, WCF etc.

1.- En el primer video nos enfocaremos a obtener la información del xml 3.3 en un objeto, y para ello te muestro como es posible hacer el parseo de los datos del xml para posterior poder manipularlos.

2.- En este segundo video nos centraremos en convertir un archivo html a pdf, y de igual manera te mostrare como ejecutar Razor para que nuestro html sea manipulado dinámicamente (no importa que el proyecto no sea web, yo te muestro como hacerlo).

3.- En este video te muestro como crear el código QR como el SAT lo requiere.

4.- En este video, te muestro como hacer el archivo PDF conforme al anexo 20, al igual veremos cómo crear el texto de la cantidad total de la factura con letra.

5.- Por último, te enseño como puedes navegar a elementos mas profundos, en este caso los impuestos, y de esta manera puedas representarlos en tu pdf.

Con estos 5 videos seras capaz de crear el archivo PDF sin problemas.

 

Catálogos para facturar CFDI 3.3 SAT en SQLite

ULTIMA ACTUALIZACIÓN DE LOS CATÁLOGOS: 3 DE ENERO 2018

Pongo a disposición los catálogos en sqlite publicados por SAT necesarios para la facturación 3.3.

Estaré actualizándolos conforme el SAT libere nuevos registros. Solo dar clic en el siguiente enlace:



DESCARGAR CATÁLOGOS SAT

Si deseas descargar los catálogos para sql server entra aquí

Si deseas descargar los catálogos para mysql entra aquí

¿Cómo crear el archivo pdf a partir de un xml timbrado 3.3 C# .Net? | Anexo 20 | SAT #4

En este cuarto y último video de este curso veremos como crear el pdf a partir del anexo 20, a parte veremos como introducir la cantidad total con letra.

Código del video: clic aquí

Primer video: https://www.youtube.com/watch?v=gHSC8GrEC5g

Segundo video: https://www.youtube.com/watch?v=ZppyFAM2JQM

Tercer video: https://www.youtube.com/watch?v=2l9y_dbguaQ

Curso para que aprendas a crear el xml 3.3 desde cero: https://www.youtube.com/watch?v=XlTz0NRQLm4&list=PLWYKfSbdsjJg-yuu9K53GwthkEE8lkXDL

Catálogos sat mysql: https://hdeleon.net/catalogos-para-facturar-3-3-sat-en-mysql/

¿Cómo crear el archivo pdf a partir de un xml timbrado 3.3 C# .Net? | Creación de QR | SAT #3

En este tercer video te mostrare como crear el código QR como lo exige el SAT.

Código del video: clic aquí

Primer video: https://www.youtube.com/watch?v=gHSC8GrEC5g

Segundo video: https://www.youtube.com/watch?v=ZppyFAM2JQM

Cuarto video: https://youtu.be/0nmqpoCTUuM

Curso para que aprendas a crear el xml 3.3 desde cero: https://www.youtube.com/watch?v=XlTz0NRQLm4&list=PLWYKfSbdsjJg-yuu9K53GwthkEE8lkXDL

Catálogos sat mysql: https://hdeleon.net/catalogos-para-facturar-3-3-sat-en-mysql/