31/10/23 - Cambios en Cliente, Productos y Nota

- Se amplió el campo de la cantidad cuando se agrega un producto.
- Se agregó que mande un Toast cuando se hace clic en Back en Cliente para que avise que hay que hacer clic en "Guardar"
- Se corrigieron las acciones cuando se hace Back en algunas pantallas.
- Se puso código para que en nota muestre de diferente color los productos de Venta y Preventa.
This commit is contained in:
2023-10-31 16:34:26 -06:00
parent 524e32ffae
commit d8c30055f4
14 changed files with 320 additions and 104 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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~<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33"/>~\n~<supports-screens android:largeScreens="true" ~\n~ android:normalScreens="true" ~\n~ android:smallScreens="true" ~\n~ android:anyDensity="true"/>)~\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~<meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyBlBnx3O-DncOSv3oFIp-12wgujOYYcl-U"/>~\n~<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />~\n~)~\n~AddManifestText(<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="33" />)~\n~AddManifestText(<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />)~\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(<uses-library android:name="org.apache.http.legacy" android:required="false"/>)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~SetApplicationAttribute(android:exported, "true")~\n~AddManifestText(<queries><package android:name="com.google.android.apps.maps" /></queries>)
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~<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33"/>~\n~<supports-screens android:largeScreens="true" ~\n~ android:normalScreens="true" ~\n~ android:smallScreens="true" ~\n~ android:anyDensity="true"/>)~\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~<meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyBlBnx3O-DncOSv3oFIp-12wgujOYYcl-U"/>~\n~<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />~\n~)~\n~AddManifestText(<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="33" />)~\n~AddManifestText(<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />)~\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(<uses-library android:name="org.apache.http.legacy" android:required="false"/>)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~SetApplicationAttribute(android:exported, "true")~\n~AddManifestText(<queries><package android:name="com.google.android.apps.maps" /></queries>)~\n~~\n~'Para provider (Envio de base de datos por whatsapp)~\n~AddApplicationText(~\n~ <provider android:name="android.support.v4.content.FileProvider" android:authorities="$PACKAGE$.provider" android:exported="false" android:grantUriPermissions="true">~\n~ <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/>~\n~ </provider>~\n~ )~\n~CreateResource(xml, provider_paths,~\n~ <paths>~\n~ <external-files-path name="name" path="" />~\n~ <files-path name="name" path="" />~\n~ <files-path name="name" path="shared" />~\n~ </paths>~\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

View File

@@ -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

162
B4A/FileHandler.bas Normal file
View File

@@ -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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Binary file not shown.

View File

@@ -56,6 +56,9 @@ Sub Service_Start (StartingIntent As Intent)
If File.Exists(File.DirInternal, "kmt.db") = False Then File.Copy(File.DirAssets, "kmt.db", File.DirInternal, "kmt.db")
skmt.Initialize(File.DirInternal,"kmt.db", True)
StartService(Tracker)
#if not(DEBUG)
logger = False
#end if
End Sub
Private Sub BTAdmin_StateChanged (NewState As Int, OldState As Int)

View File

@@ -92,7 +92,7 @@ Public Sub StartFLP
Log("StartFLP - flpStarted="&flpStarted)
Do While FLP.IsConnected = False
Sleep(500)
If Starter.logger Then Log("sleeping")
If Starter.logger Then Log("dk - sleeping")
Loop
' If flpStarted = False Then
If Starter.logger Then Log("RequestLocationUpdates")
@@ -107,7 +107,7 @@ Public Sub StartFLP2Reqs
If Starter.logger Then Log("StartFLP - flpStarted="&flpStarted)
Do While FLP.IsConnected = False
Sleep(500)
If Starter.logger Then Log("sleeping")
If Starter.logger Then Log("dk - sleeping")
Loop
dameUltimaUbicacionConocida 'Regresamos ultima ubicacion conocida
FLP.RequestLocationUpdates(CreateLocationRequest2times) 'Buscamos ubicacion 2 peticiones