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 Private xui As XUI
Public login As B4XMainPage Public login As B4XMainPage
Dim rp As RuntimePermissions Dim rp As RuntimePermissions
Public Provider As FileProvider
Public principal As C_Principal 'Antes seleccion Public principal As C_Principal 'Antes seleccion
Public clientes As C_Clientes 'Antes Colonia Public clientes As C_Clientes 'Antes Colonia
Public cliente As C_Cliente 'Antes fila Public cliente As C_Cliente 'Antes fila
@@ -139,6 +141,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
' ruta = Starter.ruta ' ruta = Starter.ruta
ruta = File.DirInternal ruta = File.DirInternal
kh.Initialize(Me, "kh") kh.Initialize(Me, "kh")
Provider.Initialize
' If(FirstTime) Then ' If(FirstTime) Then
' g.Initialize("GPS") ' g.Initialize("GPS")
' End If ' End If
@@ -404,15 +407,20 @@ Sub JobDone(Job As HttpJob)
End If End If
End Sub End Sub
Sub Activity_KeyPress (key As Int) As Boolean 'Sub Activity_KeyPress (key As Int) As Boolean
' BACK key pressed ' ' BACK key pressed
If key=KeyCodes.KEYCODE_BACK Then ' If key=KeyCodes.KEYCODE_BACK Then
' I want to capture the key here so I return True ' ' I want to capture the key here so I return True
'StartActivity(Main) ' 'StartActivity(Main)
ExitApplication ' ExitApplication
'Return True ' 'Return True
End If ' End If
' Returning False signals the system to handle the key ' ' Returning False signals the system to handle the key
' Return False
'End Sub
Private Sub B4XPage_CloseRequest As ResumableSub
ExitApplication
Return False Return False
End Sub End Sub
@@ -526,3 +534,22 @@ Sub copiaDB
ToastMessageShow("Sin permisos", True) ToastMessageShow("Sin permisos", True)
End If End If
End Sub 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 = Root1
Root.RemoveAllViews Root.RemoveAllViews
Root.LoadLayout("Cliente") 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)") 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)") 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 If c.RowCount > 0 Then
c.Position = 0 c.Position = 0
la_cuenta.Text = c.GetString("CAT_CL_CODIGO") la_cuenta.Text = c.GetString("CAT_CL_CODIGO")
@@ -226,10 +226,9 @@ Sub B4XPage_Appear
FACTURA = 0 FACTURA = 0
End If End If
If FACTURA = "1" Then ' If FACTURA = "1" Then
b_factura.Visible = True ' b_factura.Visible = True
' End If
End If
End If End If
If CREDITO = "1" Then If CREDITO = "1" Then
@@ -288,7 +287,7 @@ Sub B4XPage_Appear
B_VENTA.Visible = True B_VENTA.Visible = True
gest.Visible = True gest.Visible = True
End If End If
Log(">>>>>>>>>>>> "&Starter.tipov) ' Log(">>>>>>>>>>>> "&Starter.tipov)
End Sub End Sub
Sub GPS_LocationChanged (Location1 As Location) Sub GPS_LocationChanged (Location1 As Location)
@@ -320,15 +319,14 @@ Sub Tels_Click
B4XPages.ShowPage("NoVenta") B4XPages.ShowPage("NoVenta")
End Sub End Sub
Sub Activity_KeyPress (key As Int) As Boolean Private Sub B4XPage_CloseRequest As ResumableSub
' BACK key pressed If Subs.hayPedido Then
If key=KeyCodes.KEYCODE_BACK Then ToastMessageShow("Hay VENTA, por favor presiona GUARDAR para continuar.", True)
' I want to capture the key here so I return True Return False
' StartActivity(colonia) Else
'Return True B4XPages.ShowPage("Principal")
Return False
End If End If
' Returning False signals the system to handle the key
Return False
End Sub End Sub
Sub Tar_Click Sub Tar_Click
@@ -958,7 +956,7 @@ Sub B_GUARDAR_Click
Panel1.Visible = False Panel1.Visible = False
B_EXIBI.Visible = True B_EXIBI.Visible = True
b_factura.Visible = True ' b_factura.Visible = True
HIST.Visible = True HIST.Visible = True
Tar.VISIBLE = True Tar.VISIBLE = True
B_IMP.Visible = True B_IMP.Visible = True

View File

@@ -55,7 +55,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
C.Position=0 C.Position=0
Existe = C.GetString("EXISTE") Existe = C.GetString("EXISTE")
C.Close 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 ListView1.Clear
If c.RowCount>0 Then If c.RowCount>0 Then
For i=0 To c.RowCount -1 For i=0 To c.RowCount -1
@@ -96,9 +96,9 @@ Sub B4XPage_Appear
C.Position=0 C.Position=0
Existe = C.GetString("EXISTE") Existe = C.GetString("EXISTE")
C.Close 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 ListView1.Clear
Private cs As CSBuilder
If c.RowCount>0 Then If c.RowCount>0 Then
For i=0 To c.RowCount -1 For i=0 To c.RowCount -1
c.Position=i c.Position=i
@@ -110,7 +110,11 @@ Sub B4XPage_Appear
label2 = ListView1.TwoLinesLayout.SecondLabel label2 = ListView1.TwoLinesLayout.SecondLabel
label2.TextSize = 10 label2.TextSize = 10
label2.TextColor = Colors.Blue 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") folio = c.GetString("PE_FOLIO")
Next Next
End If End If

View File

@@ -1889,14 +1889,15 @@ Sub JobDone(Job As HttpJob)
End Sub End Sub
Sub Activity_KeyPress (key As Int) As Boolean Private Sub B4XPage_CloseRequest As ResumableSub
' BACK key pressed ' BACK key pressed
If key=KeyCodes.KEYCODE_BACK Then ' If key=KeyCodes.KEYCODE_BACK Then
' I want to capture the key here so I return True ' ' I want to capture the key here so I return True
StartActivity(Main) ' StartActivity(Main)
'Return True ' 'Return True
End If ' End If
' Returning False signals the system to handle the key ' Returning False signals the system to handle the key
B4XPages.ShowPage("Login")
Return False Return False
End Sub 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 ' clv_prods_ll.GetValue(index).As(Map).Get("almacen") = clv_prods_ll.GetValue(index).As(Map).Get("almacen") + 1
End If End If
If laCant.Text = "" Then laCant.Text = 0 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 If laCant.Text < 0 Then laCant.Text = 0
Private tmpMap As Map = clv_prods_ll.GetValue(index).As(Map) Private tmpMap As Map = clv_prods_ll.GetValue(index).As(Map)
Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") 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) nombreX = "CAMBIO"&Subs.traeRMINombre(id)
precioX = precioX * -1 precioX = precioX * -1
End If End If
Log(">>>>>>> Insertamos prod desde prodMenos")
Subs.actualizaProducto(almacenX, precioX, laCant.text, nombreX, id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, Starter.tipov) Subs.actualizaProducto(almacenX, precioX, laCant.text, nombreX, id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, Starter.tipov)
cuentaProds cuentaProds
If Subs.totalPedido < 1 Then laCant.Text = "0" If Subs.totalPedido < 1 Then laCant.Text = "0"
@@ -582,16 +583,16 @@ Sub b_prodMas_Click
' Log(clv_prods_ll.GetValue(index).As(Map)) ' Log(clv_prods_ll.GetValue(index).As(Map))
clv_prods_ll.GetValue(index).As(Map).Put("almacen", (inv - 1)) clv_prods_ll.GetValue(index).As(Map).Put("almacen", (inv - 1))
inv = 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)) ' Log(clv_prods_ll.GetValue(index).As(Map))
End If End If
else If laCant.Text + 1 <= inv And lfila.Text = "PRODUCTOS" Then else If laCant.Text + 1 <= inv And lfila.Text = "PRODUCTOS" Then
' LogColor(inv, Colors.blue) ' LogColor(inv, Colors.blue)
laCant.Text = $"$1.0{laCant.Text + 1}"$ laCant.Text = $"${NumberFormat2((laCant.Text + 1), 1, 0, 0, False)}"$
Log(Subs.totalPedido) Log(Subs.totalPedido)
else If lfila.Text = "RMI" And laCant.Text + 1 <= inv And (Subs.totalPedido - precio > 1) Then else If lfila.Text = "RMI" And laCant.Text + 1 <= inv And (Subs.totalPedido - precio > 1) Then
' LogColor(inv, Colors.blue) ' LogColor(inv, Colors.blue)
laCant.Text = $"$1.0{laCant.Text + 1}"$ laCant.Text = $"${NumberFormat2((laCant.Text + 1), 1, 0, 0, False)}"$
Log(Subs.totalPedido) Log(Subs.totalPedido)
else if Subs.totalPedido < 1 Then else if Subs.totalPedido < 1 Then
laCant.Text = "0" laCant.Text = "0"
@@ -605,6 +606,7 @@ Sub b_prodMas_Click
nombreX = "CAMBIO"&Subs.traeRMINombre(id) nombreX = "CAMBIO"&Subs.traeRMINombre(id)
precioX = precioX * -1 precioX = precioX * -1
End If End If
Log(">>>>>>> Insertamos prod desde prodMas")
Subs.actualizaProducto(almacenX, precioX, laCant.text, nombreX, id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, Starter.tipov) Subs.actualizaProducto(almacenX, precioX, laCant.text, nombreX, id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, Starter.tipov)
cuentaProds cuentaProds
If Subs.totalPedido < 1 Then If Subs.totalPedido < 1 Then
@@ -616,6 +618,24 @@ Sub b_prodMas_Click
' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) ' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$)
End Sub 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) Private Sub et_pCant_TextChanged (Old As String, New As String)
' LogColor($"txt changed: ${Old}|${New}, hasfocus=${etCantHasFocus}"$,Colors.Magenta) ' LogColor($"txt changed: ${Old}|${New}, hasfocus=${etCantHasFocus}"$,Colors.Magenta)
' If Not(Old = "0" And New = "") And etCantHasFocus Then cuentaProds ' 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 pnl0 As B4XView = clv_prods_ll.GetPanel(index)
Dim pnl As B4XView = pnl0.GetView(0) Dim pnl As B4XView = pnl0.GetView(0)
Dim laCant As B4XView = pnl.GetView(2).GetView(2) 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 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") Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio")
Log("++++++++++ " & precio) ' Log("++++++++++ " & precio)
Dim tempTot As String = Subs.totalPedido Dim tempTot As String = Subs.totalPedido
Dim disp As String = 0 Dim disp As String = 0
If tempTot > 0 Then disp = (Subs.totalPedido / precio) - 1 If tempTot > 0 Then disp = (Subs.totalPedido / precio) - 1
disp = NumberFormat2(disp, 1, 0, 0, False) disp = NumberFormat2(disp, 1, 0, 0, False)
Log($"${laCant.text}, ${precio}, DISPONIBLES: ${disp}"$) 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")
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 If(New > inv) Then
Sender.As(EditText).text = inv Sender.As(EditText).text = inv
End If End If
@@ -654,17 +675,18 @@ Private Sub et_pCant_TextChanged (Old As String, New As String)
' elProd = Subs.traeProdNombre(id) ' elProd = Subs.traeProdNombre(id)
Log("NO RMI") Log("NO RMI")
End If End If
' Log($"inventario=${inv}"$) ' Log($"inventario=${inv}"$)
' Dim tmpCant As String = laCant.text ' Dim tmpCant As String = laCant.text
If laCant.Text = "" Then laCant.Text = "0" If laCant.Text = "" Then laCant.Text = "0"
If laCant.Text > disp Then ' If laCant.Text > disp Then
Log($"Ponemos laCant en: ${disp}"$) ' Log($"Ponemos laCant en: ${disp}"$)
' laCant.Text = "" '' laCant.Text = ""
laCant.text = "0" ' laCant.text = "0"
' etCantHasFocus = True '' etCantHasFocus = True
End If ' End If
If Not(Old = "0" And New = "") And laCant.Text <> Null And laCant.Text <> "" And etCantHasFocus Then 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 cuentaProds
End If End If
Catch Catch
@@ -679,12 +701,6 @@ Private Sub et_pCant_TextChanged (Old As String, New As String)
End If End If
End Sub End Sub
Private Sub et_pCant_FocusChanged (HasFocus As Boolean)
' LogColor($"focus changed=${HasFocus}"$, Colors.Magenta)
etCantHasFocus = HasFocus
cuentaProds
End Sub
Sub cuentaProds Sub cuentaProds
'LogColor($"Productos de la orden: ${c_prodsX.GetString("cantProds")}, Total: ${c_prodsX.GetString("costoTotal")}"$, Colors.red) 'LogColor($"Productos de la orden: ${c_prodsX.GetString("cantProds")}, Total: ${c_prodsX.GetString("costoTotal")}"$, Colors.red)
' Log("===========================") ' Log("===========================")
@@ -1121,7 +1137,7 @@ Sub Busca_TextChanged (Old As String, New As String)
listaProds.Initialize listaProds.Initialize
listaHints.Initialize listaHints.Initialize
Sleep(0) 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) ' 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") Log("Llamamos LlenaProdsLL")
LlenaProdsLL(p, Null) LlenaProdsLL(p, Null)

View File

@@ -166,7 +166,7 @@ File246=marker-verde-15.png
File247=marker-verde-16.png File247=marker-verde-16.png
File248=marker-verde-17.png File248=marker-verde-17.png
File249=marker-verde-18.png File249=marker-verde-18.png
File25=K-b27c0809.png File25=kelloggs.png
File250=marker-verde-19.png File250=marker-verde-19.png
File251=marker-verde-2.png File251=marker-verde-2.png
File252=marker-verde-20.png File252=marker-verde-20.png
@@ -177,7 +177,7 @@ File256=marker-verde-24.png
File257=marker-verde-25.png File257=marker-verde-25.png
File258=marker-verde-26.png File258=marker-verde-26.png
File259=marker-verde-27.png File259=marker-verde-27.png
File26=kelloggs.png File26=keymon_logo.png
File260=marker-verde-28.png File260=marker-verde-28.png
File261=marker-verde-29.png File261=marker-verde-29.png
File262=marker-verde-3.png File262=marker-verde-3.png
@@ -188,7 +188,7 @@ File266=marker-verde-33.png
File267=marker-verde-34.png File267=marker-verde-34.png
File268=marker-verde-35.png File268=marker-verde-35.png
File269=marker-verde-36.png File269=marker-verde-36.png
File27=keymon_logo.png File27=kmt.db
File270=marker-verde-37.png File270=marker-verde-37.png
File271=marker-verde-38.png File271=marker-verde-38.png
File272=marker-verde-39.png File272=marker-verde-39.png
@@ -199,7 +199,7 @@ File276=marker-verde-42.png
File277=marker-verde-43.png File277=marker-verde-43.png
File278=marker-verde-44.png File278=marker-verde-44.png
File279=marker-verde-45.png File279=marker-verde-45.png
File28=kmt.db File28=login.bal
File280=marker-verde-46.png File280=marker-verde-46.png
File281=marker-verde-47.png File281=marker-verde-47.png
File282=marker-verde-48.png File282=marker-verde-48.png
@@ -210,7 +210,7 @@ File286=marker-verde-51.png
File287=marker-verde-52.png File287=marker-verde-52.png
File288=marker-verde-53.png File288=marker-verde-53.png
File289=marker-verde-54.png File289=marker-verde-54.png
File29=login.bal File29=logo sanfer.jpg
File290=marker-verde-55.png File290=marker-verde-55.png
File291=marker-verde-56.png File291=marker-verde-56.png
File292=marker-verde-57.png File292=marker-verde-57.png
@@ -222,7 +222,7 @@ File297=marker-verde-61.png
File298=marker-verde-62.png File298=marker-verde-62.png
File299=marker-verde-63.png File299=marker-verde-63.png
File3=alerta.jpg File3=alerta.jpg
File30=logo sanfer.jpg File30=Logo_durakelo_192xx192.jpeg
File300=marker-verde-64.png File300=marker-verde-64.png
File301=marker-verde-65.png File301=marker-verde-65.png
File302=marker-verde-66.png File302=marker-verde-66.png
@@ -736,43 +736,45 @@ Library11=firebasenotifications
Library12=fusedlocationprovider Library12=fusedlocationprovider
Library13=gifdecoder Library13=gifdecoder
Library14=googlemaps Library14=googlemaps
Library15=gps Library15=googlemapsextras
Library16=ime Library16=gps
Library17=javaobject Library17=ime
Library18=json Library18=javaobject
Library19=okhttputils2 Library19=json
Library2=baqrcode Library2=baqrcode
Library20=phone Library20=okhttputils2
Library21=preoptimizedclv Library21=phone
Library22=randomaccessfile Library22=preoptimizedclv
Library23=reflection Library23=randomaccessfile
Library24=runtimepermissions Library24=reflection
Library25=serial Library25=runtimepermissions
Library26=sql Library26=serial
Library27=xcustomlistview Library27=sql
Library28=zxing_scanner Library28=xcustomlistview
Library29=googlemapsextras Library29=zxing_scanner
Library3=batteryprogressview Library3=batteryprogressview
Library30=contentresolver
Library4=bitmapcreator Library4=bitmapcreator
Library5=byteconverter Library5=byteconverter
Library6=camera Library6=camera
Library7=compressstrings Library7=compressstrings
Library8=core Library8=core
Library9=fileprovider 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 Module1=B4XMainPage
Module10=C_Promos Module10=C_Promos
Module11=C_TicketsDia Module11=C_TicketsDia
Module12=DBRequestManager Module12=DBRequestManager
Module13=EscPosPrinter Module13=EscPosPrinter
Module14=FirebaseMessaging Module14=FileHandler
Module15=kms_helperSubs Module15=FirebaseMessaging
Module16=ManageExternalStorage Module16=kms_helperSubs
Module17=MAPA_RUTAS Module17=ManageExternalStorage
Module18=Starter Module18=MAPA_RUTAS
Module19=Subs Module19=Starter
Module2=BatteryUtilities Module2=BatteryUtilities
Module20=Tracker Module20=Subs
Module21=Tracker
Module3=C_Cliente Module3=C_Cliente
Module4=C_Clientes Module4=C_Clientes
Module5=C_Historico Module5=C_Historico
@@ -781,14 +783,14 @@ Module7=C_NoVenta
Module8=C_Principal Module8=C_Principal
Module9=C_Productos Module9=C_Productos
NumberOfFiles=365 NumberOfFiles=365
NumberOfLibraries=29 NumberOfLibraries=30
NumberOfModules=20 NumberOfModules=21
Version=12.5 Version=12.5
@EndOfDesignText@ @EndOfDesignText@
#Region Project Attributes #Region Project Attributes
#ApplicationLabel: Durakelo #ApplicationLabel: Durakelo
#VersionCode: 1 #VersionCode: 1
#VersionName: 3.10.09 #VersionName: 3.10.31
'SupportedOrientations possible values: unspecified, landscape or portrait. 'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait #SupportedOrientations: portrait
#CanInstallToExternalStorage: False #CanInstallToExternalStorage: False

View File

@@ -12,6 +12,7 @@ ModuleBookmarks18=
ModuleBookmarks19= ModuleBookmarks19=
ModuleBookmarks2= ModuleBookmarks2=
ModuleBookmarks20= ModuleBookmarks20=
ModuleBookmarks21=
ModuleBookmarks3= ModuleBookmarks3=
ModuleBookmarks4= ModuleBookmarks4=
ModuleBookmarks5= ModuleBookmarks5=
@@ -33,6 +34,7 @@ ModuleBreakpoints18=
ModuleBreakpoints19= ModuleBreakpoints19=
ModuleBreakpoints2= ModuleBreakpoints2=
ModuleBreakpoints20= ModuleBreakpoints20=
ModuleBreakpoints21=
ModuleBreakpoints3= ModuleBreakpoints3=
ModuleBreakpoints4= ModuleBreakpoints4=
ModuleBreakpoints5= ModuleBreakpoints5=
@@ -41,7 +43,7 @@ ModuleBreakpoints7=
ModuleBreakpoints8= ModuleBreakpoints8=
ModuleBreakpoints9= ModuleBreakpoints9=
ModuleClosedNodes0= ModuleClosedNodes0=
ModuleClosedNodes1= ModuleClosedNodes1=2,3,4,5,6,7
ModuleClosedNodes10= ModuleClosedNodes10=
ModuleClosedNodes11= ModuleClosedNodes11=
ModuleClosedNodes12= ModuleClosedNodes12=
@@ -50,17 +52,18 @@ ModuleClosedNodes14=
ModuleClosedNodes15= ModuleClosedNodes15=
ModuleClosedNodes16= ModuleClosedNodes16=
ModuleClosedNodes17= ModuleClosedNodes17=
ModuleClosedNodes18=1 ModuleClosedNodes18=
ModuleClosedNodes19=10,12,14 ModuleClosedNodes19=1
ModuleClosedNodes2= ModuleClosedNodes2=
ModuleClosedNodes20= ModuleClosedNodes20=10,12,14
ModuleClosedNodes21=
ModuleClosedNodes3= ModuleClosedNodes3=
ModuleClosedNodes4= ModuleClosedNodes4=
ModuleClosedNodes5= ModuleClosedNodes5=
ModuleClosedNodes6= ModuleClosedNodes6=1
ModuleClosedNodes7= ModuleClosedNodes7=
ModuleClosedNodes8= ModuleClosedNodes8=1
ModuleClosedNodes9= 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 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") 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) skmt.Initialize(File.DirInternal,"kmt.db", True)
StartService(Tracker) StartService(Tracker)
#if not(DEBUG)
logger = False
#end if
End Sub End Sub
Private Sub BTAdmin_StateChanged (NewState As Int, OldState As Int) Private Sub BTAdmin_StateChanged (NewState As Int, OldState As Int)

View File

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