From d8c30055f45dfc6d96023a5e344b3258ce3bd5e0 Mon Sep 17 00:00:00 2001 From: Jose Alberto Guerra Ugalde Date: Tue, 31 Oct 2023 16:34:26 -0600 Subject: [PATCH] =?UTF-8?q?31/10/23=20-=20Cambios=20en=20Cliente,=20Produc?= =?UTF-8?q?tos=20y=20Nota=20-=20Se=20ampli=C3=B3=20el=20campo=20de=20la=20?= =?UTF-8?q?cantidad=20cuando=20se=20agrega=20un=20producto.=20-=20Se=20agr?= =?UTF-8?q?eg=C3=B3=20que=20mande=20un=20Toast=20cuando=20se=20hace=20clic?= =?UTF-8?q?=20en=20Back=20en=20Cliente=20para=20que=20avise=20que=20hay=20?= =?UTF-8?q?que=20hacer=20clic=20en=20"Guardar"=20-=20Se=20corrigieron=20la?= =?UTF-8?q?s=20acciones=20cuando=20se=20hace=20Back=20en=20algunas=20panta?= =?UTF-8?q?llas.=20-=20Se=20puso=20c=C3=B3digo=20para=20que=20en=20nota=20?= =?UTF-8?q?muestre=20de=20diferente=20color=20los=20productos=20de=20Venta?= =?UTF-8?q?=20y=20Preventa.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B4A/B4XMainPage.bas | 45 +++++-- B4A/C_Cliente.bas | 38 +++--- B4A/C_Nota.bas | 12 +- B4A/C_Principal.bas | 13 ++- B4A/C_Productos.bas | 62 ++++++---- B4A/Durakelo.b4a | 66 ++++++----- B4A/Durakelo.b4a.meta | 19 +-- B4A/FileHandler.bas | 162 ++++++++++++++++++++++++++ B4A/Files/login.bal | Bin 11314 -> 11931 bytes B4A/Files/logo_durakelo_192xx192.jpeg | Bin 0 -> 5420 bytes B4A/Files/nota.bal | Bin 6934 -> 6934 bytes B4A/Files/proditem.bal | Bin 5141 -> 5141 bytes B4A/Starter.bas | 3 + B4A/Tracker.bas | 4 +- 14 files changed, 320 insertions(+), 104 deletions(-) create mode 100644 B4A/FileHandler.bas create mode 100644 B4A/Files/logo_durakelo_192xx192.jpeg diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index dec967d..0e1a10b 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -24,6 +24,8 @@ Sub Class_Globals Private xui As XUI Public login As B4XMainPage Dim rp As RuntimePermissions + Public Provider As FileProvider + Public principal As C_Principal 'Antes seleccion Public clientes As C_Clientes 'Antes Colonia Public cliente As C_Cliente 'Antes fila @@ -139,6 +141,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) ' ruta = Starter.ruta ruta = File.DirInternal kh.Initialize(Me, "kh") + Provider.Initialize ' If(FirstTime) Then ' g.Initialize("GPS") ' End If @@ -404,15 +407,20 @@ Sub JobDone(Job As HttpJob) End If End Sub -Sub Activity_KeyPress (key As Int) As Boolean - ' BACK key pressed - If key=KeyCodes.KEYCODE_BACK Then - ' I want to capture the key here so I return True - 'StartActivity(Main) - ExitApplication - 'Return True - End If - ' Returning False signals the system to handle the key +'Sub Activity_KeyPress (key As Int) As Boolean +' ' BACK key pressed +' If key=KeyCodes.KEYCODE_BACK Then +' ' I want to capture the key here so I return True +' 'StartActivity(Main) +' ExitApplication +' 'Return True +' End If +' ' Returning False signals the system to handle the key +' Return False +'End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + ExitApplication Return False End Sub @@ -526,3 +534,22 @@ Sub copiaDB ToastMessageShow("Sin permisos", True) End If End Sub + +'Enviamos la base de datos por correo o Whatsapp +Private Sub b_envioBD_Click +' copiaDB +' Sleep(1000) + Dim FileName As String = "kmt.db" + 'copy the shared file to the shared folder + Log("xxxxxx:"&Provider.SharedFolder) + Sleep(1000) + File.Copy(File.DirInternal, FileName, Provider.SharedFolder, FileName) + Dim email As Email + email.To.Add("cheveguerra@gmail.com") + email.Subject = "subject" + email.Attachments.Add(Provider.GetFileUri(FileName)) +' email.Attachments.Add(Provider.GetFileUri(FileName)) 'second attachment + Dim in As Intent = email.GetIntent + in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION + StartActivity(in) +End Sub \ No newline at end of file diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas index 6f5c193..f6d8bec 100644 --- a/B4A/C_Cliente.bas +++ b/B4A/C_Cliente.bas @@ -144,8 +144,8 @@ Private Sub B4XPage_Created (Root1 As B4XView) Root = Root1 Root.RemoveAllViews Root.LoadLayout("Cliente") - c=Starter.skmt.ExecQuery("select CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_BFACTURA,CAT_CL_BCREDITO from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") - s=Starter.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c= Starter.skmt.ExecQuery("select CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_BFACTURA,CAT_CL_BCREDITO from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + s = Starter.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") If c.RowCount > 0 Then c.Position = 0 la_cuenta.Text = c.GetString("CAT_CL_CODIGO") @@ -226,10 +226,9 @@ Sub B4XPage_Appear FACTURA = 0 End If - If FACTURA = "1" Then - b_factura.Visible = True - - End If +' If FACTURA = "1" Then +' b_factura.Visible = True +' End If End If If CREDITO = "1" Then @@ -288,7 +287,7 @@ Sub B4XPage_Appear B_VENTA.Visible = True gest.Visible = True End If - Log(">>>>>>>>>>>> "&Starter.tipov) +' Log(">>>>>>>>>>>> "&Starter.tipov) End Sub Sub GPS_LocationChanged (Location1 As Location) @@ -320,15 +319,14 @@ Sub Tels_Click B4XPages.ShowPage("NoVenta") End Sub -Sub Activity_KeyPress (key As Int) As Boolean - ' BACK key pressed - If key=KeyCodes.KEYCODE_BACK Then - ' I want to capture the key here so I return True -' StartActivity(colonia) - 'Return True +Private Sub B4XPage_CloseRequest As ResumableSub + If Subs.hayPedido Then + ToastMessageShow("Hay VENTA, por favor presiona GUARDAR para continuar.", True) + Return False + Else + B4XPages.ShowPage("Principal") + Return False End If - ' Returning False signals the system to handle the key - Return False End Sub Sub Tar_Click @@ -350,7 +348,7 @@ Sub Guardar_Click c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") c.Position=0 usuario = c.GetString("USUARIO") - + c=Starter.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") c.Position=0 If c.GetString("CUANTOS") > 0 Then @@ -360,11 +358,11 @@ Sub Guardar_Click Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") End If c.Close - + Starter.skmt.ExecNonQuery("delete from pedido3") Starter.skmt.ExecNonQuery("INSERT INTO PEDIDO3 SELECT PE_PRECIO2, PE_TIPO, PE_FOLIO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, SUM(PE_COSTO_TOT) AS PE_COSTO_TOT, PE_COSTOU, SUM(PE_CANT) As PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, 1 As PE_FECHA, PE_USUARIO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) GROUP BY PE_PRECIO2, PE_TIPO, PE_FOLIO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTOU, PE_PRONOMBRE, PE_PROID, PE_CLIENTE ") c=Starter.skmt.ExecQuery("select PE_PRECIO2,PE_TIPO,PE_FOLIO,PE_DESC,PE_COSTO_SIN,PE_RUTA,PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE, PE_FECHA,PE_USUARIO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") - + If c.RowCount>0 Then For i=0 To c.RowCount -1 c.Position=i @@ -373,7 +371,7 @@ Sub Guardar_Click End If Starter.skmt.ExecNonQuery("delete from pedido WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) ") Starter.skmt.ExecNonQuery("INSERT INTO PEDIDO SELECT * FROM PEDIDO3") - + B4XPages.ShowPage("Principal") ' StartActivity(seleccion) End Sub @@ -958,7 +956,7 @@ Sub B_GUARDAR_Click Panel1.Visible = False B_EXIBI.Visible = True - b_factura.Visible = True +' b_factura.Visible = True HIST.Visible = True Tar.VISIBLE = True B_IMP.Visible = True diff --git a/B4A/C_Nota.bas b/B4A/C_Nota.bas index 89bc386..b7c475b 100644 --- a/B4A/C_Nota.bas +++ b/B4A/C_Nota.bas @@ -55,7 +55,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) C.Position=0 Existe = C.GetString("EXISTE") C.Close - c=Starter.skmt.ExecQuery("select PE_PRONOMBRE,PE_COSTO_TOT, PE_CANT, PE_FOLIO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PRONOMBRE asc") + c=Starter.skmt.ExecQuery("select PE_PRONOMBRE, PE_COSTO_TOT, PE_CANT, PE_FOLIO, PE_TIPO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PRONOMBRE asc") ListView1.Clear If c.RowCount>0 Then For i=0 To c.RowCount -1 @@ -96,9 +96,9 @@ Sub B4XPage_Appear C.Position=0 Existe = C.GetString("EXISTE") C.Close - c=Starter.skmt.ExecQuery("select PE_PRONOMBRE,PE_COSTO_TOT, PE_CANT, PE_FOLIO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PRONOMBRE asc") + c=Starter.skmt.ExecQuery("select PE_PRONOMBRE,PE_COSTO_TOT, PE_CANT, PE_FOLIO, PE_TIPO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PRONOMBRE asc") ListView1.Clear - + Private cs As CSBuilder If c.RowCount>0 Then For i=0 To c.RowCount -1 c.Position=i @@ -110,7 +110,11 @@ Sub B4XPage_Appear label2 = ListView1.TwoLinesLayout.SecondLabel label2.TextSize = 10 label2.TextColor = Colors.Blue - ListView1.AddTwoLines(c.GetString("PE_PRONOMBRE"),"Cantidad #"& c.GetString("PE_CANT")& " SubTotal $"& c.GetString("PE_COSTO_TOT")& " Folio "& c.GetString("PE_FOLIO")) + cs.Initialize + Private elColor = Colors.Black + If c.GetString("PE_TIPO") = "PREVENTA" Then elColor = Colors.RGB(200,95,20) + Log(c.GetString("PE_PRONOMBRE") & "|" & elColor) + ListView1.AddTwoLines(cs.Color(elColor).append(c.GetString("PE_PRONOMBRE")).Pop,"Cantidad #"& c.GetString("PE_CANT")& " SubTotal $"& c.GetString("PE_COSTO_TOT")& " Folio "& c.GetString("PE_FOLIO")) folio = c.GetString("PE_FOLIO") Next End If diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index 056c8fd..835e15e 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -1889,14 +1889,15 @@ Sub JobDone(Job As HttpJob) End Sub -Sub Activity_KeyPress (key As Int) As Boolean +Private Sub B4XPage_CloseRequest As ResumableSub ' BACK key pressed - If key=KeyCodes.KEYCODE_BACK Then - ' I want to capture the key here so I return True - StartActivity(Main) - 'Return True - End If +' If key=KeyCodes.KEYCODE_BACK Then +' ' I want to capture the key here so I return True +' StartActivity(Main) +' 'Return True +' End If ' Returning False signals the system to handle the key + B4XPages.ShowPage("Login") Return False End Sub diff --git a/B4A/C_Productos.bas b/B4A/C_Productos.bas index c76b3ff..954c729 100644 --- a/B4A/C_Productos.bas +++ b/B4A/C_Productos.bas @@ -540,7 +540,7 @@ Sub b_prodMenos_Click ' clv_prods_ll.GetValue(index).As(Map).Get("almacen") = clv_prods_ll.GetValue(index).As(Map).Get("almacen") + 1 End If If laCant.Text = "" Then laCant.Text = 0 - laCant.Text = $"$1.0{laCant.Text - 1}"$ + laCant.Text = $"${NumberFormat2((laCant.Text - 1), 1, 0, 0, False)}"$ If laCant.Text < 0 Then laCant.Text = 0 Private tmpMap As Map = clv_prods_ll.GetValue(index).As(Map) Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") @@ -559,6 +559,7 @@ Sub b_prodMenos_Click nombreX = "CAMBIO"&Subs.traeRMINombre(id) precioX = precioX * -1 End If + Log(">>>>>>> Insertamos prod desde prodMenos") Subs.actualizaProducto(almacenX, precioX, laCant.text, nombreX, id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, Starter.tipov) cuentaProds If Subs.totalPedido < 1 Then laCant.Text = "0" @@ -582,16 +583,16 @@ Sub b_prodMas_Click ' Log(clv_prods_ll.GetValue(index).As(Map)) clv_prods_ll.GetValue(index).As(Map).Put("almacen", (inv - 1)) inv = inv - 1 - laCant.Text = $"$1.0{laCant.Text+1}"$ + laCant.Text = $"${NumberFormat2((laCant.Text + 1), 1, 0, 0, False)}"$ ' Log(clv_prods_ll.GetValue(index).As(Map)) End If else If laCant.Text + 1 <= inv And lfila.Text = "PRODUCTOS" Then ' LogColor(inv, Colors.blue) - laCant.Text = $"$1.0{laCant.Text + 1}"$ + laCant.Text = $"${NumberFormat2((laCant.Text + 1), 1, 0, 0, False)}"$ Log(Subs.totalPedido) else If lfila.Text = "RMI" And laCant.Text + 1 <= inv And (Subs.totalPedido - precio > 1) Then ' LogColor(inv, Colors.blue) - laCant.Text = $"$1.0{laCant.Text + 1}"$ + laCant.Text = $"${NumberFormat2((laCant.Text + 1), 1, 0, 0, False)}"$ Log(Subs.totalPedido) else if Subs.totalPedido < 1 Then laCant.Text = "0" @@ -605,6 +606,7 @@ Sub b_prodMas_Click nombreX = "CAMBIO"&Subs.traeRMINombre(id) precioX = precioX * -1 End If + Log(">>>>>>> Insertamos prod desde prodMas") Subs.actualizaProducto(almacenX, precioX, laCant.text, nombreX, id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, Starter.tipov) cuentaProds If Subs.totalPedido < 1 Then @@ -616,6 +618,24 @@ Sub b_prodMas_Click ' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) End Sub + +Private Sub et_pCant_FocusChanged (HasFocus As Boolean) +' LogColor($"focus changed=${HasFocus}"$, Colors.Magenta) + etCantHasFocus = HasFocus +' Dim index As Int = clv_prods_ll.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(2).GetView(2) +' Log("%%%%%%%%%%%%%%%% - " & Sender.As(EditText).text) + Try + If Sender.As(EditText).Text = "" Then Sender.As(EditText).Text = "0" + Sender.As(EditText).Text = $"${NumberFormat2(Sender.As(EditText).Text, 1, 0, 0, False)}"$ + cuentaProds + Catch + Log(LastException) + End Try +End Sub + Private Sub et_pCant_TextChanged (Old As String, New As String) ' LogColor($"txt changed: ${Old}|${New}, hasfocus=${etCantHasFocus}"$,Colors.Magenta) ' If Not(Old = "0" And New = "") And etCantHasFocus Then cuentaProds @@ -627,18 +647,19 @@ Private Sub et_pCant_TextChanged (Old As String, New As String) Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) Dim pnl As B4XView = pnl0.GetView(0) Dim laCant As B4XView = pnl.GetView(2).GetView(2) +' Log(clv_prods_ll.GetValue(index).As(Map)) Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") - Log("++++++++++ " & precio) +' Log("++++++++++ " & precio) Dim tempTot As String = Subs.totalPedido Dim disp As String = 0 If tempTot > 0 Then disp = (Subs.totalPedido / precio) - 1 disp = NumberFormat2(disp, 1, 0, 0, False) Log($"${laCant.text}, ${precio}, DISPONIBLES: ${disp}"$) +' Private inv As String=clv_prods_ll.GetValue(index).As(Map).Get("almacen") Private inv As String=clv_prods_ll.GetValue(index).As(Map).Get("almacen") - Private inv As String=clv_prods_ll.GetValue(index).As(Map).Get("almacen") - If(New = "" Or New = Null) Then New = 0 +' If(New = "" Or New = Null) Then New = 0 If(New > inv) Then Sender.As(EditText).text = inv End If @@ -654,17 +675,18 @@ Private Sub et_pCant_TextChanged (Old As String, New As String) ' elProd = Subs.traeProdNombre(id) Log("NO RMI") End If - ' Log($"inventario=${inv}"$) -' Dim tmpCant As String = laCant.text +' Log($"inventario=${inv}"$) +' Dim tmpCant As String = laCant.text If laCant.Text = "" Then laCant.Text = "0" - If laCant.Text > disp Then - Log($"Ponemos laCant en: ${disp}"$) -' laCant.Text = "" - laCant.text = "0" -' etCantHasFocus = True - End If +' If laCant.Text > disp Then +' Log($"Ponemos laCant en: ${disp}"$) +'' laCant.Text = "" +' laCant.text = "0" +'' etCantHasFocus = True +' End If If Not(Old = "0" And New = "") And laCant.Text <> Null And laCant.Text <> "" And etCantHasFocus Then - Subs.actualizaProducto(almacenX, precioX, laCant.Text, nombreX, id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta) + Log(">>>>>> Insertamos prod desde et_pCante_TextChanged") + Subs.actualizaProducto(almacenX, precioX, laCant.Text, nombreX, id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, Starter.tipov) cuentaProds End If Catch @@ -679,12 +701,6 @@ Private Sub et_pCant_TextChanged (Old As String, New As String) End If End Sub -Private Sub et_pCant_FocusChanged (HasFocus As Boolean) -' LogColor($"focus changed=${HasFocus}"$, Colors.Magenta) - etCantHasFocus = HasFocus - cuentaProds -End Sub - Sub cuentaProds 'LogColor($"Productos de la orden: ${c_prodsX.GetString("cantProds")}, Total: ${c_prodsX.GetString("costoTotal")}"$, Colors.red) ' Log("===========================") @@ -1121,7 +1137,7 @@ Sub Busca_TextChanged (Old As String, New As String) listaProds.Initialize listaHints.Initialize Sleep(0) - Dim p As ResultSet = Starter.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD from CAT_GUNAPROD2 where CAT_GP_NOMBRE like '%${New}%' and CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_CLASIF <> 'PROMOS' order by CAT_GP_NOMBRE"$) + Dim p As ResultSet = Starter.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${query} where CAT_GP_NOMBRE like '%${New}%' and CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_CLASIF <> 'PROMOS' order by CAT_GP_NOMBRE"$) ' c2= Starter.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from " & query & " where CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO =? AND CAT_GP_TIPOPROD <> 1 and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID) ", Array As String( Value, Value) Log("Llamamos LlenaProdsLL") LlenaProdsLL(p, Null) diff --git a/B4A/Durakelo.b4a b/B4A/Durakelo.b4a index ac62cc1..08181e0 100644 --- a/B4A/Durakelo.b4a +++ b/B4A/Durakelo.b4a @@ -166,7 +166,7 @@ File246=marker-verde-15.png File247=marker-verde-16.png File248=marker-verde-17.png File249=marker-verde-18.png -File25=K-b27c0809.png +File25=kelloggs.png File250=marker-verde-19.png File251=marker-verde-2.png File252=marker-verde-20.png @@ -177,7 +177,7 @@ File256=marker-verde-24.png File257=marker-verde-25.png File258=marker-verde-26.png File259=marker-verde-27.png -File26=kelloggs.png +File26=keymon_logo.png File260=marker-verde-28.png File261=marker-verde-29.png File262=marker-verde-3.png @@ -188,7 +188,7 @@ File266=marker-verde-33.png File267=marker-verde-34.png File268=marker-verde-35.png File269=marker-verde-36.png -File27=keymon_logo.png +File27=kmt.db File270=marker-verde-37.png File271=marker-verde-38.png File272=marker-verde-39.png @@ -199,7 +199,7 @@ File276=marker-verde-42.png File277=marker-verde-43.png File278=marker-verde-44.png File279=marker-verde-45.png -File28=kmt.db +File28=login.bal File280=marker-verde-46.png File281=marker-verde-47.png File282=marker-verde-48.png @@ -210,7 +210,7 @@ File286=marker-verde-51.png File287=marker-verde-52.png File288=marker-verde-53.png File289=marker-verde-54.png -File29=login.bal +File29=logo sanfer.jpg File290=marker-verde-55.png File291=marker-verde-56.png File292=marker-verde-57.png @@ -222,7 +222,7 @@ File297=marker-verde-61.png File298=marker-verde-62.png File299=marker-verde-63.png File3=alerta.jpg -File30=logo sanfer.jpg +File30=Logo_durakelo_192xx192.jpeg File300=marker-verde-64.png File301=marker-verde-65.png File302=marker-verde-66.png @@ -736,43 +736,45 @@ Library11=firebasenotifications Library12=fusedlocationprovider Library13=gifdecoder Library14=googlemaps -Library15=gps -Library16=ime -Library17=javaobject -Library18=json -Library19=okhttputils2 +Library15=googlemapsextras +Library16=gps +Library17=ime +Library18=javaobject +Library19=json Library2=baqrcode -Library20=phone -Library21=preoptimizedclv -Library22=randomaccessfile -Library23=reflection -Library24=runtimepermissions -Library25=serial -Library26=sql -Library27=xcustomlistview -Library28=zxing_scanner -Library29=googlemapsextras +Library20=okhttputils2 +Library21=phone +Library22=preoptimizedclv +Library23=randomaccessfile +Library24=reflection +Library25=runtimepermissions +Library26=serial +Library27=sql +Library28=xcustomlistview +Library29=zxing_scanner Library3=batteryprogressview +Library30=contentresolver Library4=bitmapcreator Library5=byteconverter Library6=camera Library7=compressstrings Library8=core Library9=fileprovider -ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~'End of default text.~\n~~\n~AddApplicationText(~\n~~\n~~\n~)~\n~AddManifestText()~\n~AddManifestText()~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~~\n~~\n~'/////////////// FLP y FBMessageing MOD Inicia /////////////////////~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.FirebaseAnalytics)~\n~CreateResourceFromFile(Macro, FirebaseNotifications.FirebaseNotifications)~\n~'CreateResourceFromFile(Macro, FirebaseAnalytics.Crashlytics)~\n~SetServiceAttribute(Tracker, android:foregroundServiceType, "location")~\n~'/////////////// FLP y FBMessageing MOD Termina /////////////////////~\n~~\n~'Si al cargar un mapa de google manda este error "java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion". agregar la siguiente linea:~\n~AddApplicationText()~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~SetApplicationAttribute(android:exported, "true")~\n~AddManifestText() +ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~'End of default text.~\n~~\n~AddApplicationText(~\n~~\n~~\n~)~\n~AddManifestText()~\n~AddManifestText()~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~~\n~~\n~'/////////////// FLP y FBMessageing MOD Inicia /////////////////////~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.FirebaseAnalytics)~\n~CreateResourceFromFile(Macro, FirebaseNotifications.FirebaseNotifications)~\n~'CreateResourceFromFile(Macro, FirebaseAnalytics.Crashlytics)~\n~SetServiceAttribute(Tracker, android:foregroundServiceType, "location")~\n~'/////////////// FLP y FBMessageing MOD Termina /////////////////////~\n~~\n~'Si al cargar un mapa de google manda este error "java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion". agregar la siguiente linea:~\n~AddApplicationText()~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~SetApplicationAttribute(android:exported, "true")~\n~AddManifestText()~\n~~\n~'Para provider (Envio de base de datos por whatsapp)~\n~AddApplicationText(~\n~ ~\n~ ~\n~ ~\n~ )~\n~CreateResource(xml, provider_paths,~\n~ ~\n~ ~\n~ ~\n~ ~\n~ ~\n~ ) Module1=B4XMainPage Module10=C_Promos Module11=C_TicketsDia Module12=DBRequestManager Module13=EscPosPrinter -Module14=FirebaseMessaging -Module15=kms_helperSubs -Module16=ManageExternalStorage -Module17=MAPA_RUTAS -Module18=Starter -Module19=Subs +Module14=FileHandler +Module15=FirebaseMessaging +Module16=kms_helperSubs +Module17=ManageExternalStorage +Module18=MAPA_RUTAS +Module19=Starter Module2=BatteryUtilities -Module20=Tracker +Module20=Subs +Module21=Tracker Module3=C_Cliente Module4=C_Clientes Module5=C_Historico @@ -781,14 +783,14 @@ Module7=C_NoVenta Module8=C_Principal Module9=C_Productos NumberOfFiles=365 -NumberOfLibraries=29 -NumberOfModules=20 +NumberOfLibraries=30 +NumberOfModules=21 Version=12.5 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Durakelo #VersionCode: 1 - #VersionName: 3.10.09 + #VersionName: 3.10.31 'SupportedOrientations possible values: unspecified, landscape or portrait. #SupportedOrientations: portrait #CanInstallToExternalStorage: False diff --git a/B4A/Durakelo.b4a.meta b/B4A/Durakelo.b4a.meta index 02a0785..8e21463 100644 --- a/B4A/Durakelo.b4a.meta +++ b/B4A/Durakelo.b4a.meta @@ -12,6 +12,7 @@ ModuleBookmarks18= ModuleBookmarks19= ModuleBookmarks2= ModuleBookmarks20= +ModuleBookmarks21= ModuleBookmarks3= ModuleBookmarks4= ModuleBookmarks5= @@ -33,6 +34,7 @@ ModuleBreakpoints18= ModuleBreakpoints19= ModuleBreakpoints2= ModuleBreakpoints20= +ModuleBreakpoints21= ModuleBreakpoints3= ModuleBreakpoints4= ModuleBreakpoints5= @@ -41,7 +43,7 @@ ModuleBreakpoints7= ModuleBreakpoints8= ModuleBreakpoints9= ModuleClosedNodes0= -ModuleClosedNodes1= +ModuleClosedNodes1=2,3,4,5,6,7 ModuleClosedNodes10= ModuleClosedNodes11= ModuleClosedNodes12= @@ -50,17 +52,18 @@ ModuleClosedNodes14= ModuleClosedNodes15= ModuleClosedNodes16= ModuleClosedNodes17= -ModuleClosedNodes18=1 -ModuleClosedNodes19=10,12,14 +ModuleClosedNodes18= +ModuleClosedNodes19=1 ModuleClosedNodes2= -ModuleClosedNodes20= +ModuleClosedNodes20=10,12,14 +ModuleClosedNodes21= ModuleClosedNodes3= ModuleClosedNodes4= ModuleClosedNodes5= -ModuleClosedNodes6= +ModuleClosedNodes6=1 ModuleClosedNodes7= -ModuleClosedNodes8= +ModuleClosedNodes8=1 ModuleClosedNodes9= -NavigationStack=C_Principal,Btn_UbicarR_Click,2555,5,MAPA_RUTAS,Globals,48,0,MAPA_RUTAS,MapFragment1_Ready,239,0,MAPA_RUTAS,OnInfoWindowClickListener1_click,245,6,C_Principal,B_PROXIMA_Click,2442,6,C_Principal,Resumen_Click,2428,0,C_TicketsDia,Class_Globals,0,0,Visual Designer,principal.bal,-100,2,Visual Designer,ticketsDia.bal,-100,1,C_TicketsDia,B4XPage_Created,22,0 +NavigationStack=C_Productos,cuentaProds,703,0,C_Cliente,Guardar_Click,337,0,Visual Designer,nota.bal,-100,3,C_Cliente,Tels_Click,313,0,C_Cliente,Tar_Click,324,0,B4XMainPage,JobDone,403,0,B4XMainPage,B4XPage_CloseRequest,418,0,C_Principal,B4XPage_CloseRequest,1885,0,C_Cliente,B4XPage_CloseRequest,320,6,C_Productos,et_pCant_TextChanged,648,0,C_Productos,et_pCant_FocusChanged,629,1 SelectedBuild=0 -VisibleModules=18,1,8,15,6,3,7,9,19,10,17,11 +VisibleModules=19,1,8,16,6,3,7,9,20,10,21 diff --git a/B4A/FileHandler.bas b/B4A/FileHandler.bas new file mode 100644 index 0000000..a9529f8 --- /dev/null +++ b/B4A/FileHandler.bas @@ -0,0 +1,162 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11 +@EndOfDesignText@ +'Requiere la librería "ContentResolver" y "FileProvider" o "AppUpdating" +' +'Copiar este codigo al boton_Click que se quiere que importe la base de datos. +' +' Private Sub b_importarBD_Click +' Private FH As FileHandler +' FH.Initialize +' Wait For (FH.Load) Complete (Result As LoadResult) 'Abre un fileManager para seleccionar la base de datos a importar. +' File.Copy(Result.Dir, Result.FileName, File.DirInternal, "kmt.db") 'Copia la base de datos seleccionada al directorio interno. +' Starter.skmt.Initialize(Starter.ruta,"kmt.db", True) 'Reiniciliza la base de datos con la recien importada. +' ToastMessageShow("¡BD importada!", False) +' End Sub + +Sub Class_Globals + #if B4A + Private ion As Object + Private OldIntent As Intent + #end if + Type LoadResult (Success As Boolean, Dir As String, FileName As String, RealName As String, Size As Long, Modified As Long, MimeType As String) +End Sub + +Public Sub Initialize + +End Sub + +#if B4A +Public Sub SaveAs (Source As InputStream, MimeType As String, Title As String) As ResumableSub + Dim intent As Intent + intent.Initialize("android.intent.action.CREATE_DOCUMENT", "") + intent.AddCategory("android.intent.category.OPENABLE") + intent.PutExtra("android.intent.extra.TITLE", Title) + intent.SetType(MimeType) + StartActivityForResult(intent) + Wait For ion_Event (MethodName As String, Args() As Object) + If -1 = Args(0) Then 'resultCode = RESULT_OK + Dim result As Intent = Args(1) + Dim jo As JavaObject = result + Dim ctxt As JavaObject + Dim out As OutputStream = ctxt.InitializeContext.RunMethodJO("getContentResolver", Null).RunMethod("openOutputStream", Array(jo.RunMethod("getData", Null))) + File.Copy2(Source, out) + out.Close + Return True + End If + Return False +End Sub + +Public Sub Load As ResumableSub + Dim cc As ContentChooser + cc.Initialize("cc") + cc.Show("application/octet-stream", "Choose text file") + Wait For CC_Result (Success As Boolean, Dir As String, FileName As String) + Log($"***************************${CRLF}${Dir}${CRLF} ${FileName}"$) + Dim res As LoadResult = CreateLoadResult(Success, Dir, FileName) + Log($"***************************${CRLF}${res.FileName}${CRLF} ${res}"$) + If res.Success Then ExtractInformationFromURI(res.FileName, res) + Return res +End Sub + +Private Sub StartActivityForResult(i As Intent) + Dim jo As JavaObject = GetBA + ion = jo.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null) + jo.RunMethod("startActivityForResult", Array(ion, i)) +End Sub + +Private Sub GetBA As Object + Return Me.As(JavaObject).RunMethod("getBA", Null) +End Sub + +Private Sub ExtractInformationFromURI (Uri As String, res As LoadResult) + Try + + Dim resolver As ContentResolver + resolver.Initialize("") + Dim u As Uri + u.Parse(Uri) + Dim rs As ResultSet = resolver.Query(u, Null, "", Null, "") + If rs.NextRow Then + Dim columns As B4XSet = B4XCollections.CreateSet + For i = 0 To rs.ColumnCount - 1 + columns.Add(rs.GetColumnName(i)) + Next + If columns.Contains("_display_name") Then res.RealName = rs.GetString("_display_name") + If columns.Contains("_size") Then res.Size = rs.GetLong("_size") + If columns.Contains("last_modified") Then res.Modified = rs.GetLong("last_modified") + If columns.Contains("mime_type") Then res.MimeType = rs.GetString("mime_type") + End If + rs.Close + + Catch + Log("error extracting information from file provider") + Log(LastException) + End Try +End Sub + +Public Sub CheckForReceivedFiles As LoadResult + Dim Activity As Activity = B4XPages.GetNativeParent(B4XPages.MainPage) + If IsRelevantIntent(Activity.GetStartingIntent) Then + Dim in As Intent = Activity.GetStartingIntent + Dim uri As String + If in.HasExtra("android.intent.extra.STREAM") Then + uri = in.As(JavaObject).RunMethod("getParcelableExtra", Array("android.intent.extra.STREAM")) + Else + uri = in.GetData + End If + Dim res As LoadResult = CreateLoadResult(True, "ContentDir", uri) + ExtractInformationFromURI(res.FileName, res) + Return res + End If + Return CreateLoadResult(False, "", "") +End Sub + +Private Sub IsRelevantIntent(in As Intent) As Boolean + If in.IsInitialized And in <> OldIntent And in.Action = in.ACTION_VIEW Then + OldIntent = in + Return True + End If + Return False +End Sub + +#else if B4i +Public Sub SaveAs(ParentPage As Object, AnchorView As Object, Text As String) As ResumableSub + Dim avc As ActivityViewController + avc.Initialize("avc", Array(Text)) + avc.Show(B4XPages.GetNativeParent(ParentPage), AnchorView) + Wait For avc_Complete (Success As Boolean, ActivityType As String) + Return Success +End Sub + +Public Sub Load (ParentPage As Object, AnchorView As Object) As ResumableSub + Dim DocumentPicker As DocumentPickerViewController + DocumentPicker.InitializeImport("picker", Array("public.text")) + DocumentPicker.Show(B4XPages.GetNativeParent(ParentPage), AnchorView) + Wait For Picker_Complete (Success As Boolean, URLs As List) + If Success And URLs.Size > 0 Then + Return UrlToLoadResult(URLs.Get(0)) + End If + Return CreateLoadResult(False, "", "") +End Sub + +Public Sub UrlToLoadResult(url As String) As LoadResult + Dim res As LoadResult = CreateLoadResult(IIf(File.Exists(url, ""), True, False), url, "") + res.RealName = res.Dir.SubString(res.Dir.LastIndexOf("/") + 1) + res.Size = File.Size(res.Dir, "") + Return res +End Sub +#end if + +Private Sub CreateLoadResult (Success As Boolean, Dir As String, FileName As String) As LoadResult + Dim t1 As LoadResult + t1.Initialize + t1.Success = Success + t1.Dir = Dir + t1.FileName = FileName + Return t1 +End Sub + diff --git a/B4A/Files/login.bal b/B4A/Files/login.bal index 57df9777449a93d24a5e8036cd27717eee3a848c..2eb529d632c8288d9bbedceb251de7110373872b 100644 GIT binary patch delta 461 zcmdlKF*}x*m4ShQmxY0W3rMR@=0|lJo-CUhL95;ry zGBQd`zRT!b&kPg=YGVK?2kGSoVjdudiSq*4d_c?(!~#fcK_s>i5?dIFEdpf2%oGK( z#ei5Gh$RqgE(S>$XYxWOX-fqlPY#IXfmjiVtpsGlj8X=&Va`*5iEsYM#LdXqzWFcn zVs>C$$?sHWP447V z*t|l`o)IdfqS3(>$jHDT1vG>1Ts- delta 386 zcmbOoyD5T~m4Sib3o`=)7m!w&$g9lF4rDmRySX}hI8L;c*_hJG$S6Mf6{B-KCr|>U ziW`W58W>oBmt->Q#q66eb3YVe`o}nV zA&Mj9l}d+DD2kbo7}I*0|4`CFXR9K diff --git a/B4A/Files/logo_durakelo_192xx192.jpeg b/B4A/Files/logo_durakelo_192xx192.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..77503a0e05c21b3f6f0ca7f170cf1a20a5df3f5e GIT binary patch literal 5420 zcmdUzXH*kwx5tOxM7k)&$Pq=Py-HI`a?m4469FOg9ONJ+2O}sDAS6d=3SthRprS?r z1*Alf5I{^QLIebqA|*&j5RfJbB}CG0y!Wp6uJwMp_kMf#tUYVi%=66b-?R7rKWmL} zTsQ+LyEr;K0%Brf!0)015K@8DfQ0x@`+1fSnWVJjPm`6FmXel}m6w;3m6Ma-rL;?4 zVYh;uoT7^2ZY5=96=nHds%omrYNBi9pDz*nIa5MXRy0vrK~6z*_y1_ZHb6xdXam|L z#C`$9Rm3Dz#Dwnv5CDitiK6`(@PC__xP+vXw2Z8ryn<)|K^YJieOp{oLP|ky6z=<{+)+87lKjtorfmdCz1Io~mot@cP8mH@_HnLr#8==H7i;hYlMYF+6Hv zX=Q!lq|NEy&Nw=qb$0Q-;NuJR^A8C7Bm7cCWK{IkYw-z*$fV@7^o-1`o42y_3+~=4 zEV}>TVM%G(^B3h6l`rdGHxL?$P0cMGo$tE3DerrFhlWQ+KaY)1Owt*%U+3l*zAY}X z);Bh{*xQ^RJ3qO^0Ez#?`X|}HaH)v6#3e;bD)W;|OgvHK5-O5XddH+y9Xw@1W7U2+ zeqC1mRNk|?cDaM*UQCUPai8S(=v&Yav3{ccC)xiF?8g6#?4Mx&!!-%)k`NOmPeKKN z0DSL~>?6Rxx4Vx34W7;|f9=UW@>Kj^Tvib68?F7;bA(`|dw3wm$*c9w^t2RBKi_K9 zN7r4mv060_Rh1C*gP6LMFkkE1Mpm;^VIBUww9yXMYaD%A_xI^o{eAB)JI3}Wm9Ij% z4gowBra#uX(9q7k3ccWwwUz{~Z`#x)PgWaUj5=Sod;z^=A4EJznNPZXyxQJ+^~GxM z=)9@);J6>vPb0pMxx=uaUC?fv3fMf-oVqlY zzij=m45}8bXg#Q^_eDSBjZ|&``8@*G$ecf{^EC&cb~YwC{~>8F&-qI z(2g@oJNhB~ez*76Ip+xwjA0-?JmcmFQqXZCJfioTnDnk8nm3nATb!PIp3ztaJ?N*ZFK?wZvR%eExU9fyj zu_-kvEaA~_8Xdc=f>^LRPy*Qq14nS0VN4%#dWhVajZh{x^2s&K)~dx(i$jiI{| z8|wt!tdJZc7wQ~k9pgLWt|BpdW zhiL>x??1@I^D?UG12N#3H-4M%FB`%_LY_X1<|~~lX)R_zR?jdE=+?K4QJ~qiTUx#a z)zPX>I=*q>h2RCbR;6ZK@)W0%^@fgU57vzzyhS=be9Z_d1fc9&=p@LLL!W1=sr}|s zVguBKxyH~;M;}E(JXo~r@yK|4wF|!Rz=|DbLhpXk(r6LOb{5e=OG_}qu(Z2EI9~Isx(ubilL7}nwk|ip!;og zJ;aP_4XMp{_f}3 zl(5`$@k9W}o3Xa)z&brUw?)ppCA#2`teK%n(}GdIbJ8>)N6{zt*dOk^jHaRAzf&s1 z7~wdIs6unyoNgEOCGc6-K$F!kRQU>Q8Z^eIZmgn|B=$7lqfv8te~LY>uex1q+p*AH$fG@n6f%zCIHx$JaKUVLrp zjaiX8$%#`Zsily-Ju63**k_V;r;Axx?Ds6*6N6TQVDQrcU(Z1usmu*-BVJDi2)Q zuh~rszwdnUYW10^l81BUsY!tWMo}rzn=YU1&DbgYJf1aktUWmcn_IKG_ywn?-o4H$_c$nmnMaNu^5dt$c0v#r%QwZ#yShR6U+ib#{>JdEdy>OK&N)iH* z4R!K-JEjo0Y2l$B$wnVwPFKcMED~9AtF<*#Hf~v*yV<-YKK3r}S5YHAK%qDp25V10 z&bAKgB`m-d?muwFr!f~c1`;2KA=A{L|M+lt!7C=1{bs`S zmWe9F^~lSB!t&5Ezy8YTv5ymz)ba#3dX5y@K{I-|N$4IHypDtRxc$(^L;s1F z3zb)hh&q-%zM=Fq@}-qc#*?b>-Opcq>57NPYxV8=*mNyV_I>!l3d`ibnu_7;xS1&o zvjH+w2R_EqM(>!(Ta_(O9U;CB6cYkiXIMGEo!>J0c8>)Whd+Fgi{bGpp z6*2G;N6vnYS{w3pU*I&|xd&mu>M@vK zam>l@WAkW=Ps*)ljTzq!^1`w$jaR0mB=X&_*icp#nAQ%%RIgEz3DQ^l5AGnpTy1Ny zBOlJ7O+wk!&tQmOh+q&_SD5n>S?bH$u;js4Ezl!7B07 z|D?`hciCr)pp>RYAV^(R39lyucxDt787!(*V> zbH3btrGf9@OiI2Ly+!P$(9kkN7UVP`AY);#?bYm>q9nsfo}Ol0`f=(xp(X3;Pu1>% zFrD8QcTW~k%&=o;1&Oy&exXj6Uy2pZjR}Fnr8U^eK=$9S`4wOtPAMI>LalO5eMbG3 zm`u#!`RsBtSv5Y8QDzlekh|gjI)Y31fN3`%nR3h=IG{3=$#7}YNUOIf%jcU~8ya$A z>xs%;f_o>w)zJ?+2u8h%EXwBIlC6b+_`9YG@7un#uXkhw@}*2_8$@;mtOoOoy1JzG zm`$#LMH7duA7CmftX8;RAwfr0LpI{M661oAX)Pg;f#aS-riEltp6KTy4m8xaP-E!J ziTkn#PGEPvf1X${N`&fiuLMl+y!a$?1SD6|}JXPI+%ZNO;}dYv>HDPfJWjYDBYfmh*P zliOs5cs68J@X6B%2IdynFgITD(y~`ZxU1sqm3pFMFGc6~mDwSZNO5m;z==DGly-NQ z^?^XFlHW4Xy66*rD(NEE_7@QQHafv*0u{`KMq(NYi`w(lFe$-bU zMhgL0%Uk#Yf@84O4a)rRl( zst?x{hKgayu)$aot)s;)m+dD67Up*L;dbO%S6jw|?6u;JOrsp9$dx;T=@TBx5&H@c z%G?{hr(^GWbSRgkQJ<6Iymapk@#6y8fOm@Jv?|BaqMc#(KYF!z)m`IGMv2pUm%LQl z4<|R?fO|ZyQ6_T}mj!(y#|bRG3*$I#!j7}T1hx;bgL(p13}G4c%DN3+)-0+KD&s_B z*Idt@TiWrc?|1ykPx1E!HptIHfKlGth&>JiifN zwd_?j++*TFiwpAA)b9G&vtH~ZQ#f2?9_Uid?@wteKTI7fzWu1&m+sD&r;um2q;j$9;|AQ6W z84x&bm39%or!ee+g1i0rUhh}dnBr8_53Um4~LTuS$Ct!5{HXX4B|pl^=CkR~bk5FpuDglRQOL4fg9{*dlIYH1Q*Zv70<+9dHT=){i~xsG10Mwwsx6dhvBwOxS|)~6R%zGCUhUAXNR_*gz35&=qYp{%So*GGc~-m-_`HhBD-fG7&9Xg zjcGHQ#$*#J#;h{`agLVM#dG7>GAXl%i{Q_A9?Y1mo7Kh(+~4+WXZx!Lg(ZmTR`n9F zqBdVit@i7=h?f3l75WObd;$49NQXIrFR7>?*d_>_w#R;J0MCtwHaLq*Q`B6b*RA=!EiPDBPVg>dLa*9QgUC8kZN>?Q^3U1ab2s2 zO_UfBH#W(te$<|Y(~6tmh(aMSEmKk3o9!N?R@Z~{pd&i*;+)`C%^4vey%=yVlXd@( zIs(xr`?v6RCB8r@xstgsgYUqlvB!MLyHGNvoH*O=4O6LHQm0YM6Zb@Q?+poT3&(@W z*k&BUcNLRm7GEPf1_oF5>~uO6-&_?S{l8>Ss&axIa$vtz`8sGP7Jfi#m1l$BefW!TYqVaJ=^~FA>YW^zYLC)E86!iCSY(GLi~@)1(K4p@5VG>vOU|@3{Kr_|1J_!6B!2Q< zz&cGEE$T=a^Z~dEC+!_rnV7PPI5wB{bpy*qE(bjz`P;>nA2l&h#IFm1gNrB&mV`q4 zdbj6?%HHR8F3?!w@!0wAqiX|Oq)gf^I}j5;Ta-4F)n&6A%cv0-9E%m7I(5j=3%tI+ zl=%|38xw)O0g?T#-y&K(iUX6kj_S9pDOp?ibmwes=b4Y!aEgn*JEm#n?O|b&Z+<6c zSe3yaF(F#RlSUKH&ubUv;!mEOTfz6Gn!Rm-efYpK%e)5K7pXa|$#N`;sayoDV<@v+xnM0yn{2;Kc_z`$CCDPBp8LF z9b5D-;GLPwBI&^Jk5I);@n6es>+G-M_{wzRCWdDsI&8bi90Zf>@X@qvITjviH|==h TYW@klOUYmINB;dCBAoaSa>%9V literal 0 HcmV?d00001 diff --git a/B4A/Files/nota.bal b/B4A/Files/nota.bal index f8786e750a8df11d6f0fa0cfe8c4d0b2928e7f13..669e6b396a0e9f154513895d0b4ef14eec26c3ab 100644 GIT binary patch delta 14 VcmbPcHqC5