diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index f300b5d..2387516 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -92,6 +92,8 @@ Sub Class_Globals Private et_propina As EditText Private cb_pagoPropina As B4XComboBox ' Private p_test As Panel + Private tipoPago As String = "VENTA" + Dim n2t As numeroATexto End Sub 'You can add more parameters here. @@ -224,16 +226,22 @@ Sub B4XPage_Appear Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("MACIMP","0")) End If Printer1.Initialize(Me, "Printer1") + n2t.Initialize + Log(n2t.NumberToWords(456.50)) + Log(n2t.NumberToWords(456.51)) +' For x = 198 To 305 +' Log(NumberFormat2(x&".52", 1,2,2,True) & " -> " & n2t.NumberToWords(x&".52")) +' Next End Sub Sub B4XPage_CloseRequest As ResumableSub ' BACK key pressed 'Return True to close, False to cancel - If clv_prods_ll.AsView.Visible Then + If p_pago.visible Then 'Si se esta mostrando el popup de pago, lo cerramos. + p_pago.Visible = False + Else If clv_prods_ll.AsView.Visible Then 'SI se muestran los clv_prods_ll.AsView.Visible = False lv_categorias.Visible = True - Else If p_pago.visible Then - p_pago.Visible = False else If p_mesa.Visible Then If Subs.revisaCierreAdmin Then p_transparenteCierreAdmin.Visible = True Else p_transparenteCierreAdmin.Visible = False p_mesa.Visible = False @@ -918,6 +926,7 @@ Private Sub p_mesasItem_Click ' Log(p_prods.Width) ' p_prods.Width = clv_prods_ll.GetBase.Width ' clv_prods_ll.Base_Resize(400,Root.Height) + tipoPago = "VENTA" clv_prods_ll.AsView.Visible = False lv_categorias.Visible = True ' Log(Sender.As(Panel).tag) @@ -1033,10 +1042,10 @@ End Sub Private Sub b_pagoCerrar_Click p_pago.Visible = False If cb_pago.SelectedItem = "Efectivo" Then - Private tipoPago As String = "EFECTIVO" + tipoPago = "EFECTIVO" Else 'Pago con tarjeta - Private tipoPago As String = "TARJETA" + tipoPago = "TARJETA" End If Private sigTicket As String = Subs.traeConsecutivoTicket("CERRADA", tipoPago) Starter.skmt.ExecNonQuery($"update CAT_MESAS set M_PAGO = null, M_TICKET = null, M_ESTATUS = null, M_MESERO = null, M_COMENSALES = null where M_ID = '${Starter.mesaActual}'"$) @@ -1044,11 +1053,19 @@ Private Sub b_pagoCerrar_Click Starter.skmt.ExecNonQuery($"update PEDIDO set PE_TIPO = '${tipoPago}', PE_TICKET = '${sigTicket}' where PE_MESA = '${Starter.mesaActual}' and PE_TIPO = 'VENTA' and PE_TICKET = '${Starter.ticketActual}'"$) ' Log($"update PEDIDO set PE_TIPO = '${tipoPago}', PE_TICKET = '${sigTicket}' where PE_MESA = '${Starter.mesaActual}' and PE_TIPO = 'VENTA' and PE_TICKET = '${Starter.ticketActual}'"$) Private laPropina As String = "0" - If et_propina.Text <> "" Then laPropina = et_propina.Text - + If et_propina.Text <> "" Then + laPropina = et_propina.Text +' Starter.skmt.ExecNonQuery($"insert into PROPINAS (PR_MESA, PR_TICKET, PR_PAGO, PR_PROPINA, PT_MESERO, PR_FECHA) values ('${Starter.mesaActual}', '${sigTicket}', '${tipoPago}', '${laPropina}', '${Starter.meseroActual}', '${DateTime.Date(DateTime.Now)}')"$) + End If Starter.skmt.ExecNonQuery($"update PEDIDO_TICKET set PT_PAGO = '${tipoPago}', PT_TICKET = '${sigTicket}', PT_TARJETA = '${cb_pago.SelectedItem}', PT_PROPINA = '${laPropina}', PT_PAGO_PROPINA = '${cb_pagoPropina.SelectedItem}' where PT_MESA = '${Starter.mesaActual}' and PT_TICKET = '${Starter.ticketActual}' and PT_PAGO = 'VENTA'"$) ' Log($"update PEDIDO_TICKET set PT_PAGO = '${tipoPago}', PT_TICKET = '${sigTicket}' where PT_MESA = '${Starter.mesaActual}' and PT_TICKET = '${Starter.ticketActual}' and PT_PAGO = 'VENTA"$) - B4XPage_CloseRequest + Log(tipoPago) + Starter.ticketActual = sigTicket + b_imprimirTicket_Click +' Log("Close Request") +' B4XPage_CloseRequest + Sleep(1000) + WobbleMenu1_Tab1Click End Sub Private Sub cb_pago_SelectedIndexChanged (Index As Int) @@ -1146,10 +1163,12 @@ End Sub Private Sub et_inicioDia_EnterPressed If et_inicioDia.Text.trim = "INICIO DIA" Then - p_transparenteCierreAdmin.Visible = False + p_transparenteCierreAdmin.Visible = False et_inicioDia.Text = "" Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("CIERRE ADMIN")) Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("CIERRE ADMIN","0")) + Starter.skmt.ExecNonQuery("delete from PEDIDO") + Starter.skmt.ExecNonQuery("delete from PEDIDO_TICKET") End If End Sub @@ -1290,7 +1309,6 @@ Sub b_imp_Click Else ToastMessageShow("¡Es necesario que NO haya mesas abiertas para realizar el cierre!", True) End If - ' Printer1.WriteString("__________" & CRLF) ' Printer1.WriteString("------------------------------" & CRLF) ' Printer1.WriteString("----ESTE TICKET NO ES UN -----" & CRLF) @@ -1658,17 +1676,15 @@ Private Sub b_regresarProds_Click End Sub Private Sub b_imprimirTicket_Click - Private imprimirEste As Boolean = True + Private imprimirEste As Boolean = False Private logger As Boolean = True Private TAMANO As Int Private ESPACIO As Int Private BLANCO As String Private c, s As Cursor - Private l_total, la_cuenta As Label l_total.Initialize("l") la_cuenta.Initialize("2") - b_imp.Enabled = False ' If l_total.Text <> Null And l_total.Text <> "null" Then Subs.ponImpreso(la_cuenta.Text) 'Solo lo marcamos como impreso si tiene venta (total > 0). ProgressDialogShow("Imprimiendo, un momento ...") @@ -1698,7 +1714,6 @@ Private Sub b_imprimirTicket_Click Sleep(500) impresoraConectada = False End If - DateTime.DateFormat = "MM/dd/yyyy" Private sDate,sTime As String sDate = DateTime.Date(DateTime.Now) @@ -1718,69 +1733,84 @@ Private Sub b_imprimirTicket_Click Dim myimage As AnImage = Printer1.ImageToBWIMage(bmp) myimage = Printer1.DitherImage2D(myimage, 128) myimage= Printer1.PackImage(myimage) - -' Mesero: Donald--------- # Mesa -' Mesero: Luis----------- # Mesa -' ...........................2 - If imprimirEste Then Printer1.WriteString(CRLF) ' nudge the printer to show the user something is happening If imprimirEste Then Printer1.WriteString(Printer1.REVERSE) If imprimirEste Then Printer1.PrintImage(myimage) If imprimirEste Then Printer1.WriteString(Printer1.UNREVERSE) Try - If imprimirEste Then Printer1.WriteString("LA LANTERNA RISTORANTE" & CRLF) - If logger Then Log("LA LANTERNA RISTORANTE" & CRLF) + If imprimirEste Then Printer1.WriteString("RESTAURANTE Y COCINA ITALIANA PEVEL" & CRLF) + If logger Then Log("RESTAURANTE Y COCINA ITALIANA PEVEL" & CRLF) + If imprimirEste Then Printer1.WriteString("RFC: RCI230918DAA " & CRLF) + If logger Then Log("RFC: RCI230918DAA" & CRLF) + If imprimirEste Then Printer1.WriteString("REG FSC: GENERAL DE LEY DE PERSONAS MORALES" & CRLF) + If logger Then Log("REG FSC: GENERAL DE LEY DE PERSONAS MORALES" & CRLF) + If imprimirEste Then Printer1.WriteString("DOM FSC: PASEO DE LAS PALMAS NO. 275, LOCAL B" & CRLF) + If logger Then Log("DOM FSC: PASEO DE LAS PALMAS NO. 275, LOCAL B" & CRLF) + If imprimirEste Then Printer1.WriteString("EXPEDIDO EN: PASEO DE LAS PALMAS NO. 275, LOCAL B" & CRLF) + If logger Then Log("EXPEDIDO EN: PASEO DE LAS PALMAS NO. 275, LOCAL B" & CRLF) + If imprimirEste Then Printer1.WriteString("TEL: 55 5207 9969" & CRLF) + If logger Then Log("TEL: 55 5207 9969" & CRLF) If imprimirEste Then Printer1.WriteString("No. Ticket: " & Starter.ticketActual & CRLF) If logger Then Log("No. Ticket: " & Starter.ticketActual & CRLF) - If imprimirEste Then Printer1.WriteString(sDate &" " & sTime & CRLF) - If logger Then Log(sDate &" " & sTime & CRLF) + If imprimirEste Then Printer1.WriteString("CDMX " & sDate &" " & sTime & CRLF) + If logger Then Log("CDMX " & sDate &" " & sTime & CRLF) If imprimirEste Then Printer1.WriteString($"Mesero: ${Starter.meseroActual}${Subs.rellenaHasta(15 - Starter.meseroActual.Length)}${Printer1.BOLD} # Mesa${CRLF}"$) If logger Then Log($"Mesero: ${Starter.meseroActual}${Subs.rellenaHasta(15 - Starter.meseroActual.Length)} # Mesa${CRLF}"$) - If imprimirEste Then Printer1.WriteString($"${Printer1.BOLD}${Subs.alineaDerecha(Starter.mesaActual, 28, " ")}"$) - If logger Then Log($"${Subs.alineaDerecha(Starter.mesaActual, 28, " ")}"$) + If imprimirEste Then Printer1.WriteString(Printer1.NOBOLD) + If imprimirEste Then Printer1.WriteString($"Comensales: ${Starter.comensalesActuales}${Subs.rellenaHasta(14 - Starter.mesaActual.Length)}${Printer1.BOLD} ${Starter.mesaActual}${CRLF}"$) + If logger Then Log($"Comensales: ${Starter.comensalesActuales}${Subs.rellenaHasta(14 - Starter.mesaActual.Length)}${Starter.mesaActual}${CRLF}"$) +' If imprimirEste Then Printer1.WriteString($"${Printer1.BOLD}${Subs.alineaDerecha(Starter.mesaActual, 28, " ")}"$) +' If logger Then Log($"${Subs.alineaDerecha(Starter.mesaActual, 28, " ")}"$) ' If imprimirEste Then Printer1.WriteString("ID.Cliente: " & la_cuenta.Text & CRLF) ' If logger Then Log("ID.Cliente: " & la_cuenta.Text & CRLF) If imprimirEste Then Printer1.WriteString(" " & CRLF) - If logger Then Log(" " & CRLF) - c = Starter.skmt.ExecQuery($"select * from PEDIDO where PE_MESA = '${Starter.mesaActual}' and PE_TIPO = 'VENTA' and PE_TICKET = '${Starter.ticketActual}'"$) + c = Starter.skmt.ExecQuery($"select * from PEDIDO where PE_MESA = '${Starter.mesaActual}' and PE_TIPO = '${tipoPago}' and PE_TICKET = '${Starter.ticketActual}'"$) If c.RowCount > 0 Then + If imprimirEste Then Printer1.WriteString(Printer1.NOBOLD) For i = 0 To c.RowCount - 1 c.Position = i - Private elNombre As String = c.GetString("PE_PRONOMBRE") If elNombre.Length > 30 Then elNombre.SubString2(0, 30) - If imprimirEste Then Printer1.WriteString($"${c.GetString("PE_CANT")} ${elNombre}${CRLF}${Subs.alineaDerecha("$"&NumberFormat2(c.GetString("PE_COSTO_TOT"), 1, 2, 2, True), 30, ".")}${CRLF}"$) Log($"${c.GetString("PE_CANT")} ${elNombre}${CRLF}${Subs.alineaDerecha("$"&NumberFormat2(c.GetString("PE_COSTO_TOT"), 1, 2, 2, True), 30, ".")}${CRLF}"$) Next End If - c = Starter.skmt.ExecQuery($"select * from PEDIDO_TICKET where PT_MESA = '${Starter.mesaActual}' and PT_PAGO = 'VENTA' and PT_TICKET = '${Starter.ticketActual}'"$) + c = Starter.skmt.ExecQuery($"select *, ifnull(PT_PROPINA, "0") as propina from PEDIDO_TICKET where PT_MESA = '${Starter.mesaActual}' and PT_PAGO = '${tipoPago}' and PT_TICKET = '${Starter.ticketActual}'"$) +' Log($"Rowcount: ${c.RowCount}"$) If c.RowCount > 0 Then c.Position = 0 - If imprimirEste Then Printer1.WriteString($"${CRLF}Total: $${NumberFormat2(c.GetString("PT_MONTO"), 1, 2, 2, True)}"$) - If logger Then Log($"${CRLF}Total: $${NumberFormat2(c.GetString("PT_MONTO"), 1, 2, 2, True)}"$) +' Log(c.GetString("propina")) + Private elTotal As String = c.GetString("PT_MONTO") + If c.GetString("propina") <> 0 And c.GetString("PT_PAGO_PROPINA") = "Tarjeta" Then + If imprimirEste Then Printer1.WriteString($"${CRLF}Propina: $${NumberFormat2(c.GetString("PT_PROPINA"), 1, 2, 2, True)}"$) + If logger Then Log($"${CRLF}Propina: $${NumberFormat2(c.GetString("PT_PROPINA"), 1, 2, 2, True)}"$) + elTotal = elTotal + c.GetString("PT_PROPINA") + End If + + If imprimirEste Then Printer1.WriteString($"${CRLF}Total: $${NumberFormat2(elTotal, 1, 2, 2, True)}"$) + If logger Then Log($"${CRLF}Total: $${NumberFormat2(elTotal, 1, 2, 2, True)}"$) + If imprimirEste Then Printer1.WriteString($"${CRLF}${n2t.NumberToWords(NumberFormat2(elTotal, 1, 2, 2, False))}"$) + If logger Then Log($"${CRLF}${n2t.NumberToWords(NumberFormat2(elTotal, 1, 2, 2, False))}"$) + If tipoPago <> "VENTA" Then + If imprimirEste Then Printer1.WriteString($"${CRLF}Forma de pago: ${c.GetString("PT_PAGO")}"$) + If logger Then Log($"${CRLF}Forma de pago: ${c.GetString("PT_PAGO")}"$) + End If End If - - If imprimirEste Then Printer1.WriteString(Printer1.UNREVERSE) If imprimirEste Then Printer1.WriteString(Printer1.NOBOLD) -' printer.WriteLine("------------VENTA-------------") -' printer.WriteLine("TOTAL COMPRA: $:" & total_cliente) -' Printer1.WriteString(Printer1.DEFAULTS & CRLF) If imprimirEste Then Printer1.WriteString(CRLF) - ' Printer1.WriteString(Printer1.SINGLE) - 'Printer1.WriteString("------------------------------") - ' Printer1.WriteString(Printer1.HIGH) - ' Printer1.Justify = 1 -' If imprimirEste Then Printer1.WriteString( "Nombre y Firma del cliente" & CRLF) -' If logger Then Log( "Nombre y Firma del cliente" & CRLF) -' If imprimirEste Then Printer1.WriteString(CRLF) -' If imprimirEste Then Printer1.WriteString(CRLF) -' If imprimirEste Then Printer1.WriteString(CRLF) - ' Printer1.WriteString(Printer1.DEFAULTS) - ' Printer1.WriteString(Printer1.SINGLE) -' If imprimirEste Then Printer1.WriteString("__________" & CRLF) -' If logger Then Log("__________" & CRLF) + If imprimirEste Then Printer1.WriteString("------------------------------" & CRLF) + If logger Then Log("------------------------------" & CRLF) + + If tipoPago <> "VENTA" Then + If imprimirEste Then Printer1.WriteString("----------- PAGADO -----------" & CRLF) + If logger Then Log("------------ PAGADO ----------" & CRLF) + Else + If imprimirEste Then Printer1.WriteString("---------- NO PAGADO ---------" & CRLF) + If logger Then Log("---------- NO PAGADO ---------" & CRLF) + End If + + If imprimirEste Then Printer1.WriteString("------------------------------" & CRLF) If logger Then Log("------------------------------" & CRLF) If imprimirEste Then Printer1.WriteString("----ESTE TICKET NO ES UN -----" & CRLF) @@ -1803,6 +1833,7 @@ Private Sub b_imprimirTicket_Click Sleep(1000) b_imp.Enabled = True ProgressDialogHide +' B4XPage_CloseRequest End Sub Private Sub cb_pagoPropina_SelectedIndexChanged (Index As Int) diff --git a/B4A/Files/principal.bal b/B4A/Files/principal.bal index 31533df..f3436b7 100644 Binary files a/B4A/Files/principal.bal and b/B4A/Files/principal.bal differ diff --git a/B4A/Lanterna.b4a b/B4A/Lanterna.b4a index e014db1..07fe421 100644 --- a/B4A/Lanterna.b4a +++ b/B4A/Lanterna.b4a @@ -69,17 +69,18 @@ Module2=C_Principal Module3=DBRequestManager Module4=errorManager Module5=EscPosPrinter -Module6=Starter -Module7=Subs +Module6=numeroATexto +Module7=Starter +Module8=Subs NumberOfFiles=23 NumberOfLibraries=17 -NumberOfModules=7 +NumberOfModules=8 Version=12.8 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Lanterna #VersionCode: 1 - #VersionName: 4.02.13 + #VersionName: 4.02.14 'SupportedOrientations possible values: unspecified, landscape or portrait. #SupportedOrientations: portrait #CanInstallToExternalStorage: False diff --git a/B4A/Lanterna.b4a.meta b/B4A/Lanterna.b4a.meta index e4c5fd2..6d1bf79 100644 --- a/B4A/Lanterna.b4a.meta +++ b/B4A/Lanterna.b4a.meta @@ -6,6 +6,7 @@ ModuleBookmarks4= ModuleBookmarks5= ModuleBookmarks6= ModuleBookmarks7= +ModuleBookmarks8= ModuleBreakpoints0= ModuleBreakpoints1= ModuleBreakpoints2= @@ -14,14 +15,16 @@ ModuleBreakpoints4= ModuleBreakpoints5= ModuleBreakpoints6= ModuleBreakpoints7= +ModuleBreakpoints8= ModuleClosedNodes0= ModuleClosedNodes1=12 -ModuleClosedNodes2=50,51,52 +ModuleClosedNodes2=28 ModuleClosedNodes3= ModuleClosedNodes4= ModuleClosedNodes5= ModuleClosedNodes6= -ModuleClosedNodes7=47,48,68 -NavigationStack=Starter,Service_Start,53,0,C_Principal,B4XPage_Created,169,0,C_Principal,p_mesasItem_Click,925,0,C_Principal,LlenaProdsLL,401,6,C_Principal,b_prodMas_Click,304,0,Visual Designer,principal.bal,-100,1,Visual Designer,login.bal,-100,5,B4XMainPage,user_TextChanged,240,6,B4XMainPage,JobDone,206,0,C_Principal,b_prodMenos_Click,256,0 +ModuleClosedNodes7= +ModuleClosedNodes8=47,48,68 +NavigationStack=numeroATexto,NumberToWordsPositive,40,6,C_Principal,p_mesasItem_Click,922,0,C_Principal,Class_Globals,88,1,C_Principal,b_regresarProds_Click,1664,0,C_Principal,b_imprimirTicket_Click,1826,6,C_Principal,Printer1_Error,1195,0,C_Principal,b_mesaCerrar_Click,1008,0,Visual Designer,principal.bal,-100,6,C_Principal,b_pagoCerrar_Click,1060,2,C_Principal,b_imp_Click,1205,2,C_Principal,et_inicioDia_EnterPressed,1164,2 SelectedBuild=0 -VisibleModules=1,6,7,2,3 +VisibleModules=1,7,8,2,3,6 diff --git a/B4A/Subs.bas b/B4A/Subs.bas index 0a8f112..dd8cdc4 100644 --- a/B4A/Subs.bas +++ b/B4A/Subs.bas @@ -200,6 +200,7 @@ Sub revisaBD 'ignore kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_MESEROS(MS_ID TEXT, MS_NOMBRE TEXT, MS_MESAS_ASIGNADAS TEXT)") kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PEDIDO (PE_PRECIO2 TEXT,PE_TIPO TEXT,PE_FOLIO NUMERIC,PE_DESC NUMERIC,PE_COSTO_SIN TEXT,PE_MESA TEXT,PE_CEDIS TEXT,PE_COSTO_TOT NUMERIC,PE_COSTOU NUMERIC,PE_CANT NUMERIC,PE_PRONOMBRE TEXT,PE_PROID TEXT,PE_TICKET TEXT,PE_FECHA TEXT,PE_MESERO TEXT)") kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PEDIDO_TICKET (PT_FACT TEXT, PT_COSTO_SIN TEXT, PT_MESA TEXT, PT_PAGO TEXT, PT_ALMACEN TEXT, PT_LON TEXT, PT_LAT TEXT, PT_TICKET TEXT, PT_FECHA TEXT, PT_MESERO TEXT, PT_COMENSALES INTEGER, PT_NOART NUMERIC, PT_MONTO TEXT, PT_ENVIO_OK INTEGER, PT_TIEMPO_TIENDA FLOAT, PT_FACTURA INTEGER)") +' kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PROPINAS (PR_MESA TEXT, PR_TICKET TEXT, PR_PAGO TEXT, PR_PROPINA TEXT, PT_MESERO TEXT, PR_FECHA TEXT)") agregaColumna("PEDIDO_TICKET", "PT_TICKET", "TEXT") agregaColumna("PEDIDO_TICKET", "PT_TARJETA", "TEXT") agregaColumna("PEDIDO_TICKET", "PT_PROPINA", "TEXT") @@ -1483,6 +1484,7 @@ Sub rellenaHasta(tamano As Int) As String Return relleno End Sub + 'CAT_GUNAPRODS, CAT_MESAS y CAT_MESEROS '1782 '10.0.0.106 diff --git a/B4A/numeroATexto.bas b/B4A/numeroATexto.bas new file mode 100644 index 0000000..cc3eb4e --- /dev/null +++ b/B4A/numeroATexto.bas @@ -0,0 +1,135 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=12.8 +@EndOfDesignText@ +Sub Class_Globals + Dim UnitWords() As String = Array As String( _ + "", "un", "dos", "tres", "cuatro", _ + "cinco", "seis", "siete", "ocho", "nueve", _ + "diez", "once", "doce", "trece", "catorce", _ + "quince", "dieciseis", "diecisiete", "dieciocho", "diecinueve" _ + ) + Dim TenWords() As String = Array As String( _ + "", "diez", "veinte", "treinta", "cuarenta", _ + "cincuenta", "sesenta", "setenta", "ochenta", "noventa" _ + ) + 'only need to go up to Pentillions to handle largest Long integer, but while we're here... + Dim ThousandWords() As String = Array As String( _ + "", "mil", "millon", "billon", "trillon", _ + "Cuadrillon", "Pentillion", "Sexillion", "Septillion", "Octillion" _ + ) + Dim moneda As String = "pesos" +End Sub + +'Initializes the object. You can add parameters to this method if needed. +Public Sub Initialize + Return Me +End Sub + +Sub NumberToWords(N As Double) As String + If N < 0 Then + Return "Minus " & NumberToWordsPositive(-N) + Else + Return NumberToWordsPositive(N) 'including zero + End If +End Sub + +Sub NumberToWordsPositive(N0 As Double) As String + Private N As Long + Private temp1() As String = Regex.Split("\.", NumberFormat2(N0, 1, 2, 2, False)) + Private conDecimales As Boolean = False + Private losCents As String = 0 +' Log(N0) +' Log(temp1.Length) +' Log(temp1(0)) + If temp1.Length > 1 Then + conDecimales = True + N = temp1(0) + losCents = temp1(1) +' Log($"Con Decimales: ${losCents}"$) + Else + N = N0 + End If +' Log(">> " & N) + If N = 0 Then + Return "Cero" 'that gets rid of that pesky special case + End If + Dim GroupsOfThree(10) As Int + Dim NumGroupsOfThree As Int = 0 + Do While N <> 0 + GroupsOfThree(NumGroupsOfThree) = N Mod 1000 + NumGroupsOfThree = NumGroupsOfThree + 1 + N = N / 1000 + Loop + + Dim Temp As String = "" + For GroupOfThree = NumGroupsOfThree - 1 To 0 Step -1 + Dim ThisGroup As Int = GroupsOfThree(GroupOfThree) + If ThisGroup <> 0 Then + If Temp.Length <> 0 Then +' If GroupOfThree = 0 And ThisGroup < 100 Then +' Temp = Temp & " y " + '' If Temp.Contains("mil y ") Then Temp = "mil " +' Else +' Temp = Temp & " " +' End If + Temp = Temp & " " + End If + Temp = Temp & NumberToWords1000(ThisGroup) + If GroupOfThree <> 0 Then +' Log($"${Temp} - ${ThousandWords(GroupOfThree)}"$) + Temp = Temp & " " & ThousandWords(GroupOfThree) + If Temp = "un mil" Then +' Log(9) + Temp = "mil" + End If + End If + End If + Next + Temp = Temp.Substring2(0,1).ToUppercase & Temp.SubString(1) + + Return Temp & $" ${moneda} ${NumberFormat2(losCents, 2, 0, 0, False)}/100 M.N."$ +End Sub + +Sub NumberToWords1000(N As Int) As String + If N < 100 Then +' Log(1) + Return NumberToWords100(N) + End If + Dim Hundreds As String = UnitWords(N / 100) & "cientos" 'Hundreds always non-blank since N < 100 already done + If UnitWords(N/100) = "nueve" Then Hundreds = "novecientos" + If UnitWords(N/100) = "cinco" Then Hundreds = "quinientos" + If UnitWords(N/100) = "siete" Then Hundreds = "setecientos" +' Log($"${N/100} - ${UnitWords(N / 100)}"$) + If UnitWords(N / 100) = "un" Then Hundreds = "ciento" + + Dim TensUnits As String = NumberToWords100(N Mod 100) 'TensUnits could be blank if digits are 00 + If TensUnits.Length = 0 Then +' Log(2) + If UnitWords(N / 100) = "un" Then Hundreds = "cien" + Return Hundreds + Else +' Log(3) + Return Hundreds & " " & TensUnits + End If +End Sub + +Sub NumberToWords100(N As Int) As String + If N < 20 Then + Return UnitWords(N) + End If + Dim Tens As String = TenWords(N / 10) 'Tens always non-blank since N < 20 already done + Dim Units As String = UnitWords(N Mod 10) 'Units could be blank if digit is 0 + If Units.Length = 0 Then + Return Tens + Else +' Log($"${Tens} - ${Units}"$) + If Tens = "veinte" Then + Return "veinti" & Units + Else + Return Tens & " y " & Units + End If + End If +End Sub \ No newline at end of file