mirror of
https://github.com/KeymonSoft/Mariana.git
synced 2026-04-17 21:06:16 +00:00
17/9/23 - Cambios en mandappendientes y agregamos RepaldoDiario
- Se hicieron cambios en mandaPendeintes porque se estaban enviado SIEMPRE todos los pedidos. - Se agregó la clase C_RespaldoDiario para implementar el respaldo de las tablas de inventarios, paquetes y pedidos.
This commit is contained in:
@@ -94,6 +94,8 @@ Sub Class_Globals
|
||||
Private b_envioBD As Button
|
||||
Public Provider As FileProvider
|
||||
Public rutaBDBackup As String = ""
|
||||
Dim MES1 As ManageExternalStorage
|
||||
Dim device As Phone
|
||||
End Sub
|
||||
|
||||
Public Sub Initialize
|
||||
@@ -138,8 +140,8 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
ruta = Starter.ruta
|
||||
|
||||
Provider.Initialize
|
||||
Subs.borraArribaDe100Errores ' Para Websockets
|
||||
Subs.borraArribaDe600RenglonesBitacora ' Para Websockets
|
||||
' Subs.borraArribaDe100Errores ' Para Websockets
|
||||
' Subs.borraArribaDe600RenglonesBitacora ' Para Websockets
|
||||
If File.Exists(ruta, "kmt.db") = False Then
|
||||
File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db")
|
||||
Log(File.DirAssets)
|
||||
@@ -166,6 +168,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_GIRO(GIRO TEXT)")
|
||||
' skmt.ExecNonQuery("drop table kmt_info")
|
||||
skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS kmt_info (CAT_CL_FOTO BLOB, CAT_CL_NUM_SERIEFISICO TEXT, CAT_CL_MTOCOMPRA TEXT, CAT_CL_CEDIS TEXT, CAT_CL_LAT TEXT, CAT_CL_LONG TEXT, CAT_CL_FBAJA TEXT, CAT_CL_FALTA TEXT, CAT_CL_CP TEXT, CAT_CL_EDO TEXT, CAT_CL_MUNI TEXT, CAT_CL_COLONIA TEXT, CAT_CL_CALLE2 TEXT, CAT_CL_CALLE1 TEXT, CAT_CL_NOINT TEXT, CAT_CL_NOEXT TEXT, CAT_CL_CALLE TEXT, CAT_CL_EMAIL TEXT, CAT_CL_TELEFONO TEXT, CAT_CL_ATIENTE2 TEXT, CAT_CL_ATIENDE1 TEXT, CAT_CL_NOMBRE TEXT, CAT_CL_GIRO TEXT, CAT_CL_DIAS_VISITA TEXT, CAT_CL_TIPO_RUTA TEXT, CAT_CL_RUTA TEXT, CAT_CL_CODIGO TEXT, gestion NUMERIC, CAT_CL_DIASEMANA TEXT, CAT_CL_SECUENCIA INT)")
|
||||
Subs.agregaColumna("PEDIDO", "PE_ENVIO_OK", "TEXT")
|
||||
Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna "CAT_CL_DIASEMANA" en la tabla
|
||||
c=skmt.ExecQuery("SELECT COUNT(*) AS fCol FROM pragma_table_info('kmt_info') WHERE name='CAT_CL_DIASEMANA'")
|
||||
c.Position = 0
|
||||
@@ -211,9 +214,6 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
skmt.ExecNonQuery("INSERT INTO HIST_STAY_OUT(HSO_INI, HSO_FIN) VALUES (0,0)")
|
||||
End If
|
||||
C.Close
|
||||
' server = "http://keymon.com.mx:1782"
|
||||
'server = "http://201.99.139.28:1783"
|
||||
' reqManager.Initialize(Me, server)
|
||||
l_version.Text = Application.VersionName
|
||||
'este codigo es para lo del menu
|
||||
PopupMenu.Initialize("PopupMenu", b_menu)
|
||||
@@ -255,6 +255,27 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
' ToastMessageShow("No permission", True)
|
||||
' End If
|
||||
p_appUpdate.Visible = False
|
||||
MES1.Initialize(Me, "MES1")
|
||||
' get the device SDK version
|
||||
Dim SdkVersion As Int = device.SdkVersion
|
||||
' Choose which permission to request in order to access external storgage
|
||||
If SdkVersion < 30 Then
|
||||
' Log("SDK = " & SdkVersion & " : Requesting WRITE_EXTERNAL_STORAGE permission")
|
||||
Dim rp As RuntimePermissions
|
||||
rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE) ' Implicit read capability if granted
|
||||
Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
|
||||
' Log($"PERMISSION_WRITE_EXTERNAL_STORAGE = ${Result}"$)
|
||||
Else
|
||||
' Log("SDK = " & SdkVersion & " : Requesting MANAGE_EXTERNAL_STORAGE permission")
|
||||
' Log("On Entry MANAGE_EXTERNAL_STORAGE = " & MES1.HasPermission)
|
||||
If Not(MES1.HasPermission) Then
|
||||
MsgboxAsync("This app requires access to all files, please enable the option", "Manage All Files")
|
||||
Wait For Msgbox_Result(Res As Int)
|
||||
' Log("Getting permission")
|
||||
MES1.GetPermission
|
||||
Wait For MES_StorageAvailable
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Sub B4XPage_Appear
|
||||
@@ -673,6 +694,7 @@ Sub B_SERVER_Click
|
||||
If Logger Then Log("Inicializamos reqManager con " & Starter.server)
|
||||
reqManager.Initialize(Me, Starter.server)
|
||||
CallSubDelayed(Starter, "reinicializaReqManager")
|
||||
s.reqManagerReInit 'Inicializamos el reqManager de C_Subs.
|
||||
Subs.panelVisible(p_Main,0,0)
|
||||
p_appUpdate.Visible = False
|
||||
' Entrar.Visible = True
|
||||
|
||||
@@ -185,12 +185,12 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
s.Close
|
||||
btAdmin.Initialize("BlueTeeth")
|
||||
cmp20.Initialize("Printer")
|
||||
reqManager.Initialize(Me, B4XPages.MainPage.SERVER)
|
||||
End Sub
|
||||
|
||||
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
|
||||
|
||||
Sub B4XPage_Appear
|
||||
reqManager.Initialize(Me, Starter.server)
|
||||
Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA)
|
||||
Wait For B4XPage_PermissionResult (Permission As String, resultC As Boolean)
|
||||
Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
|
||||
@@ -439,14 +439,14 @@ Sub Guardar_Click
|
||||
c.Position=0
|
||||
usuario = c.GetString("USUARIO")
|
||||
c.Close
|
||||
c=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 = skmt.ExecQuery("Select sum(pe_costo_tot) As TOTAL_CLIE, SUM(PE_CANT) As CANT_CLIE, COUNT(*) As CUANTOS, PC_ENVIO_OK FROM PEDIDO left join PEDIDO_CLIENTE Where pc_cliente = pe_cliente And PE_CLIENTE IN (Select cuenta from cuentaa)")
|
||||
c.Position=0
|
||||
If c.GetString("CUANTOS") > 0 Then
|
||||
Private cbFactura As Int = 0
|
||||
If cb_factura.Checked Then cbFactura = 1
|
||||
skmt.ExecNonQuery("delete from NOVENTA where NV_CLIENTE In (select cuenta from cuentaa)")
|
||||
skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)")
|
||||
skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ENVIO_OK, PC_FACTURA) VALUES (?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,0, cbFactura))
|
||||
skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_ENVIO_OK, PC_FACTURA) VALUES (?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"), c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps, c.GetString("PC_ENVIO_OK"), cbFactura))
|
||||
skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)")
|
||||
End If
|
||||
c.Close
|
||||
@@ -455,12 +455,12 @@ Sub Guardar_Click
|
||||
skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_OUT = ? where HSS_OUT = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(sTime))
|
||||
' skmt.ExecNonQuery("UPDATE HIST_STAY_STORE set HSS_TOT = HSS_OUT - HSS_IN where HSS_CODIGO In (select cuenta from cuentaa)")
|
||||
Try
|
||||
c=skmt.ExecQuery(" Select (substr(HSS_OUT,1,2) - substr(HSS_IN,1,2)) - Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then 1 Else 0 end HORAS_TOTALES, " & _
|
||||
"Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then (substr(HSS_OUT,3,2) + 60 - substr(HSS_IN,3,2)) " & _
|
||||
" Else (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) End - Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then 1 Else 0 end MINUTOS_TOTALES, " & _
|
||||
"Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then (substr(HSS_OUT,5,2) + 60 - substr(HSS_IN,5,2)) " & _
|
||||
" Else (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) end SEGUNDOS_TOTALES " & _
|
||||
" from HIST_STAY_STORE where HSS_CODIGO In (Select cuenta from cuentaa) ")
|
||||
c=skmt.ExecQuery("Select (substr(HSS_OUT,1,2) - substr(HSS_IN,1,2)) - Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then 1 Else 0 end HORAS_TOTALES, " & _
|
||||
"Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then (substr(HSS_OUT,3,2) + 60 - substr(HSS_IN,3,2)) " & _
|
||||
" Else (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) End - Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then 1 Else 0 end MINUTOS_TOTALES, " & _
|
||||
"Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then (substr(HSS_OUT,5,2) + 60 - substr(HSS_IN,5,2)) " & _
|
||||
" Else (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) end SEGUNDOS_TOTALES " & _
|
||||
" from HIST_STAY_STORE where HSS_CODIGO In (Select cuenta from cuentaa) ")
|
||||
c.Position = 0
|
||||
stay_hh = c.GetString("HORAS_TOTALES") * 60 * 60
|
||||
stay_mi = c.GetString("MINUTOS_TOTALES") * 60
|
||||
@@ -737,7 +737,7 @@ Sub RB4_CheckedChange(Checked As Boolean)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'Sub b_like_Click
|
||||
Sub b_like_Click
|
||||
' Panel1.Visible = True
|
||||
' b_like.Visible = False
|
||||
' Tar.Visible = False
|
||||
@@ -745,16 +745,16 @@ End Sub
|
||||
' gest.Visible = False
|
||||
' b_venta.Visible = False
|
||||
' Guardar.Visible = False
|
||||
'End Sub
|
||||
End Sub
|
||||
|
||||
'Sub B_GPS_Click
|
||||
Sub B_GPS_Click
|
||||
' Dim result As Int
|
||||
' result = Msgbox2("Esta seguro de cambiar las coordenadas de este cliente", "Aviso GPS", "SI", "", "NO", LoadBitmap(File.DirAssets, "alerta.jpg")) 'Ignore
|
||||
' If result = DialogResponse.Positive Then
|
||||
' skmt.ExecNonQuery2("UPDATE kmt_info SET CAT_CL_LAT = ?, CAT_CL_LONG = ? where CAT_CL_CODIGO In (Select cuenta from cuentaa)", Array As Object(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps))
|
||||
' B4XPage_Appear
|
||||
' End If
|
||||
'End Sub
|
||||
End Sub
|
||||
|
||||
Private Sub p_cliente_Click
|
||||
'Nada aqui, solo esta para que los clics no se pasen hacia atras.
|
||||
@@ -767,18 +767,39 @@ End Sub
|
||||
|
||||
Sub mandaPendientes
|
||||
Log("MandaPendientes")
|
||||
'PEDIDO_CLIENTE (Pendientes)
|
||||
c=skmt.ExecQuery("SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_FACTURA FROM PEDIDO_CLIENTE where PC_ENVIO_OK <> 1")
|
||||
Log($"Pedido_Cliente PENDIENTE: ${c.RowCount}"$)
|
||||
If c.RowCount>0 Then
|
||||
For i=0 To c.RowCount -1
|
||||
'PEDIDO (Pendientes)
|
||||
c=skmt.ExecQuery("SELECT PE_ENVIO_OK, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO FROM PEDIDO where PE_ENVIO_OK <> 1")
|
||||
Log($"Pedido PENDIENTE: ${c.RowCount}"$)
|
||||
If c.RowCount > 0 Then
|
||||
For i = 0 To c.RowCount -1
|
||||
c.Position=i
|
||||
Dim cmd As DBCommand
|
||||
|
||||
cmd.Initialize
|
||||
cmd.Name = "DELETE_PEDIDO_MARDS_PE"
|
||||
cmd.Parameters = Array As Object(ALMACEN, B4XPages.MainPage.principal.l_ruta.text,c.GetString("PE_CLIENTE") )
|
||||
reqManager.ExecuteCommand(cmd , "DEL_PE")
|
||||
|
||||
cmd.Initialize
|
||||
cmd.Name = "insert_pedido_MARDS"
|
||||
cmd.Parameters = Array As Object(C.GetString("PE_CEDIS"),ALMACEN,C.GetString("PE_COSTO_TOT"),C.GetString("PE_COSTOU"),C.GetString("PE_CANT"),C.GetString("PE_PRONOMBRE"),C.GetString("PE_PROID"),C.GetString("PE_CLIENTE"),C.GetString("PE_FECHA"),C.GetString("PE_USUARIO"),C.GetString("PE_RUTA"), C.GetString("PE_COSTO_SIN"),C.GetString("PE_DESC"),c.GetString("PE_FOLIO"))
|
||||
reqManager.ExecuteCommand(cmd , $"ins_pedidosPendientes_prods_${c.GetString("PE_CLIENTE")}"$)
|
||||
Next
|
||||
End If
|
||||
|
||||
'PEDIDO_CLIENTE (Pendientes)
|
||||
c = skmt.ExecQuery("SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_FACTURA, PC_ENVIO_OK FROM PEDIDO_CLIENTE where PC_ENVIO_OK <> 1")
|
||||
Log($"Pedido_Cliente PENDIENTE: ${c.RowCount}"$)
|
||||
If c.RowCount > 0 Then
|
||||
For i = 0 To c.RowCount - 1
|
||||
c.Position = i
|
||||
Log($"**************** PC_ENVIO_OK: ${c.GetString("PC_ENVIO_OK")} "$)
|
||||
Dim cmd As DBCommand
|
||||
cmd.Initialize
|
||||
cmd.Name = "DELETE_PEDIDO_MARDS_PC"
|
||||
cmd.Parameters = Array As Object(ALMACEN, B4XPages.MainPage.principal.l_ruta.text,c.GetString("PC_CLIENTE") )
|
||||
reqManager.ExecuteCommand(cmd , "DEL_PC")
|
||||
|
||||
|
||||
Dim cmd As DBCommand
|
||||
cmd.Initialize
|
||||
cmd.Name = "insert_pedidos_MARDS"
|
||||
@@ -788,31 +809,11 @@ Sub mandaPendientes
|
||||
Next
|
||||
End If
|
||||
|
||||
'PEDIDO (Pendientes)
|
||||
c=skmt.ExecQuery("SELECT PC_ENVIO_OK, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO FROM pedido_cliente left join PEDIDO where pc_cliente = pe_cliente and pc_envio_ok <> 1")
|
||||
Log($"Pedido PENDIENTE: ${c.RowCount}"$)
|
||||
If c.RowCount>0 Then
|
||||
For i=0 To c.RowCount -1
|
||||
c.Position=i
|
||||
Dim cmd As DBCommand
|
||||
|
||||
cmd.Initialize
|
||||
cmd.Name = "DELETE_PEDIDO_MARDS_PE"
|
||||
cmd.Parameters = Array As Object(ALMACEN, B4XPages.MainPage.principal.l_ruta.text,c.GetString("PE_CLIENTE") )
|
||||
reqManager.ExecuteCommand(cmd , "DEL_PE")
|
||||
|
||||
cmd.Initialize
|
||||
cmd.Name = "insert_pedido_MARDS"
|
||||
cmd.Parameters = Array As Object(C.GetString("PE_CEDIS"),ALMACEN,C.GetString("PE_COSTO_TOT"),C.GetString("PE_COSTOU"),C.GetString("PE_CANT"),C.GetString("PE_PRONOMBRE"),C.GetString("PE_PROID"),C.GetString("PE_CLIENTE"),C.GetString("PE_FECHA"),C.GetString("PE_USUARIO"),C.GetString("PE_RUTA"), C.GetString("PE_COSTO_SIN"),C.GetString("PE_DESC"),c.GetString("PE_FOLIO"))
|
||||
reqManager.ExecuteCommand(cmd , $"ins_pedidosPendientes_prods_${c.GetString("PE_CLIENTE")}"$)
|
||||
Next
|
||||
End If
|
||||
|
||||
'ABONOS
|
||||
Dim ab As Cursor = skmt.ExecQuery($"SELECT * from ABONOS where a_enviado is null"$)
|
||||
Log(ab.RowCount)
|
||||
' Log(ab.RowCount)
|
||||
If ab.RowCount > 0 Then
|
||||
For i=0 To ab.RowCount -1
|
||||
For i = 0 To ab.RowCount -1
|
||||
ab.Position = i
|
||||
Dim cmd As DBCommand
|
||||
cmd.Initialize
|
||||
@@ -845,6 +846,7 @@ Sub JobDone(Job As HttpJob)
|
||||
Log("JOBDONE CLIENTE . " & Job.Success)
|
||||
If Job.Success = False Then
|
||||
' ToastMessageShow("Error: " & Job.ErrorMessage, True)
|
||||
' LogColor("JobDone Error: '" & reqManager.HandleJob(Job).tag, Colors.red) 'Mod por CHV - 211027
|
||||
Else
|
||||
LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211027
|
||||
If Job.JobName = "DBRequest" Then
|
||||
@@ -873,6 +875,7 @@ Sub JobDone(Job As HttpJob)
|
||||
Log(resultado.Tag & ": " & k & ": " & records(resultado.Columns.Get(k)))
|
||||
Next
|
||||
Next
|
||||
skmt.ExecNonQuery($"UPDATE PEDIDO set PE_ENVIO_OK = 1 where PE_CLIENTE = '${cliente}'"$)
|
||||
End If
|
||||
End If
|
||||
|
||||
|
||||
@@ -49,12 +49,12 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db")
|
||||
End If
|
||||
' skmt.Initialize(ruta,"kmt.db", True)
|
||||
reqManager.Initialize(Me, B4XPages.MainPage.SERVER)
|
||||
End Sub
|
||||
|
||||
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
|
||||
|
||||
Sub B4XPage_Appear
|
||||
reqManager.Initialize(Me, Starter.server)
|
||||
e_comm.Text=""
|
||||
tgl.Initialize
|
||||
If Not(Starter.gps.GPSEnabled) Then
|
||||
|
||||
@@ -72,12 +72,10 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
'load the layout to Root
|
||||
Root.LoadLayout("pedido")
|
||||
i_fotol.Visible = False
|
||||
' B4XPages.MainPage.reqManager.Initialize(Me, "http://177.244.63.54:1782")
|
||||
ruta = File.DirInternal
|
||||
If File.Exists(ruta, "kmt.db") = False Then
|
||||
File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db")
|
||||
End If
|
||||
' skmt.Initialize(ruta,"kmt.db", True)
|
||||
End Sub
|
||||
|
||||
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
|
||||
|
||||
@@ -10,6 +10,7 @@ Sub Class_Globals
|
||||
Private Root As B4XView 'ignore
|
||||
Private xui As XUI 'ignore
|
||||
Dim reqManager As DBRequestManager
|
||||
Dim rd As C_RespaldoDiario
|
||||
Dim conectado As String
|
||||
Dim t1 As Timer
|
||||
Dim sb As StringBuilder
|
||||
@@ -236,6 +237,8 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
'load the layout to Root
|
||||
Root.LoadLayout("principal")
|
||||
s.Initialize(Me, "Subs")
|
||||
rd.Initialize 'Inicializamos el respaldo diario.
|
||||
rd.vacuum
|
||||
EJECUTANDO=1
|
||||
Dim ruta As String
|
||||
img2.Visible =False
|
||||
@@ -305,8 +308,12 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
End Sub
|
||||
|
||||
Sub B4XPage_Appear
|
||||
s.reqManagerReInit 'Reiniciamos el DBReqManager por si hay modificacion en el servidor.
|
||||
' s.reqManagerReInit 'Reiniciamos el DBReqManager de C_Subs por si hay modificacion en el servidor.
|
||||
reqManager.Initialize(Me, Starter.server)
|
||||
' B4XPages.MainPage.cliente.mandaPendientes 'Ejecutamos mandaPendientes.
|
||||
rd.respaldaPedido
|
||||
rd.respaldaInventarios
|
||||
rd.respaldaPaquetes
|
||||
nvo_cliente.Enabled = False
|
||||
HORAINGRESO ="000000"
|
||||
Btn_Ubicar.Left = (Root.Width/2) - (Btn_Ubicar.Width/2)
|
||||
|
||||
125
B4A/C_RespaldoDiario.bas
Normal file
125
B4A/C_RespaldoDiario.bas
Normal file
@@ -0,0 +1,125 @@
|
||||
B4A=true
|
||||
Group=Default Group
|
||||
ModulesStructureVersion=1
|
||||
Type=Class
|
||||
Version=12.2
|
||||
@EndOfDesignText@
|
||||
Sub Class_Globals
|
||||
Private Root As B4XView 'ignore
|
||||
Private xui As XUI 'ignore
|
||||
Dim skmt, rkmt As SQL
|
||||
Dim rp As RuntimePermissions
|
||||
Dim safePath As String
|
||||
Dim fechaHoy As String
|
||||
Dim skmtAttached As Boolean = False
|
||||
End Sub
|
||||
|
||||
'You can add more parameters here.
|
||||
Public Sub Initialize As Object
|
||||
' Log("************************** " & safePath)
|
||||
Dim Dirp As String = File.DirRootExternal
|
||||
Dim Dir As String
|
||||
Dim Dir2 As String
|
||||
Try
|
||||
File.MakeDir(Dirp,"/kmts")
|
||||
Dir = "/kmts"
|
||||
' Log("creado en kmts " & Dirp & Dir)
|
||||
Catch
|
||||
Dir = ""
|
||||
' Log("creado en raiz")
|
||||
End Try
|
||||
' safePath = rp.GetSafeDirDefaultExternal("./")
|
||||
safePath = Dirp & Dir
|
||||
rkmt.Initialize(safePath,"md.rkmt.km", True)
|
||||
skmt.Initialize(File.DirInternal,"kmt.db", False)
|
||||
rkmt.ExecNonQuery($"create table if not exists pedidos (pe_folio NUMERIC, pe_desc NUMERIC, pe_costo_sin TEXT, pe_ruta TEXT, pe_cedis TEXT, pe_costo_tot NUMERIC, pe_costou NUMERIC, pe_cant NUMERIC, pe_pronombre TEXT, pe_proid TEXT, pe_cliente TEXT, pe_fecha TEXT, pe_usuario TEXT, pe_envio_ok TEXT)"$)
|
||||
rkmt.ExecNonQuery($"create table if not exists inventarios (cat_gp_iniciativa TEXT, cat_gp_tipoprod TEXT, cat_gp_dev TEXT, cat_gp_almacen NUMERIC, cat_gp_id TEXT, cat_gp_nombre TEXT, cat_gp_imp1 TEXT, cat_gp_imp2 TEXT, cat_gp_precio TEXT, cat_gp_clasif TEXT, cat_gp_sts TEXT, cat_gp_tipo TEXT, cat_gp_subtipo TEXT, cat_gp_tipoprod2 TEXT, fecha TEXT)"$)
|
||||
rkmt.ExecNonQuery($"create table if not exists paquetes (cat_dp_precio_simptos TEXT, cat_dp_precio TEXT, cat_dp_almacen TEXT, cat_dp_id TEXT, cat_dp_idprod TEXT, cat_dp_tipo TEXT, cat_dp_pzas TEXT, cat_dp_usuario TEXT, cat_dp_fecha TEXT, cat_dp_regalo TEXT, cat_dp_clasif TEXT, fecha TEXT)"$)
|
||||
DateTime.DateFormat = "MM/dd/yyyy"
|
||||
fechaHoy = DateTime.Date(DateTime.Now)
|
||||
revisaSkmtAttached
|
||||
Return Me
|
||||
End Sub
|
||||
|
||||
'This event will be called once, before the page becomes visible.
|
||||
Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
Root = Root1
|
||||
'load the layout to Root
|
||||
End Sub
|
||||
|
||||
Sub revisaSkmtAttached
|
||||
skmtAttached = False
|
||||
Dim rs As ResultSet = rkmt.ExecQuery("SELECT * FROM pragma_database_list")
|
||||
Do While rs.NextRow 'Revisamos si esta montada "kmt.db" como "skmt" y si no, la montamos.
|
||||
If rs.GetString("name") = "skmt1" Then skmtAttached = True
|
||||
Loop
|
||||
If Not(skmtAttached) Then
|
||||
rkmt.ExecNonQuery($"attach database '${File.Combine(File.DirInternal, "kmt.db")}' as skmt1;"$)
|
||||
skmtAttached = True
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'Copia la tabla PEDIDO a rkmt.db en la tarjeta del celular.
|
||||
Sub respaldaPedido
|
||||
Private inicio As String = DateTime.Now
|
||||
Log("copiando pedidos ...")
|
||||
rkmt.BeginTransaction
|
||||
rkmt.ExecNonQuery($"delete from pedidos where substr(pe_fecha, 1, 10) = '${fechaHoy}'"$)
|
||||
rkmt.ExecNonQuery($"insert into pedidos (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, pe_envio_ok) select * from skmt1.pedido where substr(pe_fecha, 1, 10) = '${fechaHoy}'"$)
|
||||
rkmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!!
|
||||
rkmt.EndTransaction
|
||||
Log(((DateTime.Now - inicio)/1000) & " segs")
|
||||
End Sub
|
||||
|
||||
'Copia la tabla CAT_GUNAPRODS a rkmt.db en la tarjeta del celular.
|
||||
Sub respaldaInventarios
|
||||
Log($"Borrando de fecha ${fechaHoy}"$)
|
||||
Private inicio As String = DateTime.Now
|
||||
Log("copiando inventarios ...")
|
||||
' rkmt.ExecNonQuery($"delete from inventarios where substr(fecha, 1, 10) = '${fechaHoy}'"$)
|
||||
rkmt.BeginTransaction
|
||||
rkmt.ExecNonQuery($"delete from inventarios where fecha = '${fechaHoy}'"$)
|
||||
rkmt.ExecNonQuery($"insert into inventarios (cat_gp_iniciativa, cat_gp_tipoprod, cat_gp_dev, cat_gp_almacen, cat_gp_id, cat_gp_nombre, cat_gp_imp1, cat_gp_imp2, cat_gp_precio, cat_gp_clasif, cat_gp_sts, cat_gp_tipo, cat_gp_subtipo, fecha) select cat_gp_iniciativa, cat_gp_tipoprod, cat_gp_dev, cat_gp_almacen, cat_gp_id, cat_gp_nombre, cat_gp_imp1, cat_gp_imp2, cat_gp_precio, cat_gp_clasif, cat_gp_sts, cat_gp_tipo, cat_gp_subtipo, '${fechaHoy}' as fecha from skmt1.cat_gunaprod"$)
|
||||
rkmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!!
|
||||
rkmt.EndTransaction
|
||||
Log(((DateTime.Now - inicio)/1000) & " segs")
|
||||
End Sub
|
||||
|
||||
'Copia la tabla CAT_DETALLE_PAQ a rkmt.db en la tarjeta del celular.
|
||||
Sub respaldaPaquetes
|
||||
Private inicio As String = DateTime.Now
|
||||
Log("copiando paquetes ...")
|
||||
rkmt.BeginTransaction
|
||||
' rkmt.ExecNonQuery($"delete from paquetes where substr(fecha, 1, 10) = '${fechaHoy}'"$)
|
||||
rkmt.ExecNonQuery($"delete from paquetes where fecha = '${fechaHoy}'"$)
|
||||
rkmt.ExecNonQuery($"insert into paquetes (cat_dp_precio_simptos, cat_dp_precio, cat_dp_almacen, cat_dp_id, cat_dp_idprod, cat_dp_tipo, cat_dp_pzas, cat_dp_usuario, cat_dp_fecha, cat_dp_regalo, cat_dp_clasif, fecha) select cat_dp_precio_simptos, cat_dp_precio, cat_dp_almacen, cat_dp_id, cat_dp_idprod, cat_dp_tipo, cat_dp_pzas, cat_dp_usuario, cat_dp_fecha, cat_dp_regalo, cat_dp_clasif, '${fechaHoy}' as fecha from skmt1.cat_detalles_paq"$)
|
||||
rkmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!!
|
||||
rkmt.EndTransaction
|
||||
Log(((DateTime.Now - inicio)/1000) & " segs")
|
||||
End Sub
|
||||
|
||||
Sub vacuum
|
||||
Log("Vacuum")
|
||||
rkmt.ExecNonQuery("vacuum;")
|
||||
End Sub
|
||||
|
||||
'Agrega una columna a la tabla especificada.
|
||||
'Hay que indicar el "tipo" de la columna (TEXT, INTEGER, ETC)
|
||||
'Ej. agregaColumna("TABLA", "COLUMNA", "TIPO")
|
||||
Sub agregaColumna(tabla As String, columna As String, tipo As String) 'ignore
|
||||
Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna en la tabla
|
||||
Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery($"SELECT COUNT(*) AS fCol FROM pragma_table_info('${tabla}') WHERE name='${columna}'"$)
|
||||
c.Position = 0
|
||||
If c.GetString("fCol") = 0 Then 'Si no esta la columna la agregamos
|
||||
B4XPages.MainPage.skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$)
|
||||
Log($"Columna "${columna} ${tipo}", agregada a "${tabla}"."$)
|
||||
End If
|
||||
Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch
|
||||
Try
|
||||
B4XPages.MainPage.skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$)
|
||||
Log($"Columna "${columna} ${tipo}", agregada a "${tabla}".."$)
|
||||
Catch
|
||||
Log(LastException)
|
||||
End Try
|
||||
End Try
|
||||
End Sub
|
||||
@@ -54,7 +54,7 @@ Sub reqManagerInit As DBRequestManager
|
||||
Return rm
|
||||
End Sub
|
||||
|
||||
'Reinicializamos el DBReqServer.
|
||||
'Reinicializamos el DBReqServer de C_Subs.
|
||||
Sub reqManagerReInit
|
||||
Log("reqManager ReInit")
|
||||
reqManager = reqManagerInit
|
||||
@@ -580,7 +580,7 @@ Sub mandaPendientes 'ignore
|
||||
cmd.Name = "insert_abono_MARDS"
|
||||
cmd.Parameters = Array As Object( ab.GetString("a_usuario"), ab.GetString("a_ruta"), ab.GetString("a_cliente"), ab.GetString("a_abono"), ab.GetString("a_fecha") )
|
||||
reqManager.ExecuteCommand(cmd , $"ins_abonosPendientes_${ab.GetString("a_cliente")}"$)
|
||||
if logger then Log($"ins_abonosPendientes_${ab.GetString("a_cliente")}"$)
|
||||
If logger Then Log($"ins_abonosPendientes_${ab.GetString("a_cliente")}"$)
|
||||
Next
|
||||
End If
|
||||
ab.Close
|
||||
|
||||
@@ -41,7 +41,7 @@ Public Sub ExecuteQuery(Command As DBCommand, Limit As Int, Tag As Object)
|
||||
WriteList(Command.Parameters, out2)
|
||||
out2.Close
|
||||
j.PostBytes(link & "?method=query", ms.ToBytesArray)
|
||||
j.GetRequest.Timeout = 10000 'timeout del request (10 segs)
|
||||
j.GetRequest.Timeout = 20000 'timeout del request (20 segs)
|
||||
End Sub
|
||||
|
||||
'Executes a batch of (non-select) commands.
|
||||
|
||||
79
B4A/ManageExternalStorage.bas
Normal file
79
B4A/ManageExternalStorage.bas
Normal file
@@ -0,0 +1,79 @@
|
||||
B4A=true
|
||||
Group=Default Group
|
||||
ModulesStructureVersion=1
|
||||
Type=Class
|
||||
Version=10.7
|
||||
@EndOfDesignText@
|
||||
' Version 1.00
|
||||
#Event: StorageAvailable
|
||||
Sub Class_Globals
|
||||
Private ion As Object
|
||||
Private mCallback As Object
|
||||
Private mEventName As String
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
' This pretty trivial class is modeled on (plagiarised from!) Erel's ExternalStorage class
|
||||
' It applies to devices implementing SDK30 and later
|
||||
' It allows apps to access the internal 'external' storage as was possible on earlier Android versions ussing traditional file I/O
|
||||
' You must manually add 'AddPermission(android.permission.MANAGE_EXTERNAL_STORAGE)' to the manifest
|
||||
' You must ensure that you provide the package name of your app in Sub GetPermission
|
||||
' This class uses the MANAGE_APP_ALL_FILES_ACCESS_PERMISSION intent action to direct users to a system settings page
|
||||
' They must enable the option on that page to give permission
|
||||
|
||||
'Initializes the object
|
||||
Public Sub Initialize (Callback As Object, EventName As String)
|
||||
mCallback = Callback
|
||||
mEventName = EventName
|
||||
End Sub
|
||||
|
||||
|
||||
' Determine if the app already has MANAGE_EXTERNAL_STORAGE call Environment.isExternalStorageManager()
|
||||
' Return True if this app already has MANAGE_EXTERNAL_STORAGE permission
|
||||
Public Sub HasPermission As Boolean
|
||||
Dim has As Boolean
|
||||
Dim jo As JavaObject
|
||||
jo.InitializeStatic("android.os.Environment")
|
||||
has = jo.RunMethod("isExternalStorageManager", Null)
|
||||
Return has
|
||||
End Sub
|
||||
|
||||
' Check whether this app has MANAGE_EXTERNAL_STORAGE permission
|
||||
' If not show the user a dialog to enable MANAGE_EXTERNAL_STORAGE permission for this app
|
||||
' Raises the StorageAvailable event in the calling activity when complete
|
||||
Public Sub GetPermission
|
||||
If HasPermission Then
|
||||
RaiseEvent
|
||||
Return
|
||||
End If
|
||||
Dim in As Intent
|
||||
' Be sure to reference your app package name in "pakageg:xxx"
|
||||
in.Initialize("android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION", $"package:${Application.PackageName}"$)
|
||||
StartActivityForResult(in)
|
||||
End Sub
|
||||
|
||||
|
||||
Private Sub RaiseEvent
|
||||
Log("Calling : " & mEventName & "_StorageAvailable")
|
||||
CallSubDelayed(mCallback, mEventName & "_StorageAvailable")
|
||||
End Sub
|
||||
|
||||
|
||||
Private Sub ion_Event (MethodName As String, Args() As Object) As Object
|
||||
RaiseEvent
|
||||
Return Null
|
||||
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 As Object(ion, i))
|
||||
End Sub
|
||||
|
||||
Private Sub GetBA As Object
|
||||
Dim jo As JavaObject = Me
|
||||
Return jo.RunMethod("getBA", Null)
|
||||
End Sub
|
||||
|
||||
@@ -730,16 +730,18 @@ Module11=C_Pedidos
|
||||
Module12=C_Principal
|
||||
Module13=C_Productos
|
||||
Module14=C_Promos
|
||||
Module15=C_Subs
|
||||
Module16=C_TicketsDia
|
||||
Module17=C_UpdateAvailable
|
||||
Module18=CameraExClass2
|
||||
Module19=DBRequestManager
|
||||
Module15=C_RespaldoDiario
|
||||
Module16=C_Subs
|
||||
Module17=C_TicketsDia
|
||||
Module18=C_UpdateAvailable
|
||||
Module19=CameraExClass2
|
||||
Module2=B4XMainPage
|
||||
Module20=MAPA_RUTAS
|
||||
Module21=Starter
|
||||
Module22=Subs
|
||||
Module23=Tracker
|
||||
Module20=DBRequestManager
|
||||
Module21=ManageExternalStorage
|
||||
Module22=MAPA_RUTAS
|
||||
Module23=Starter
|
||||
Module24=Subs
|
||||
Module25=Tracker
|
||||
Module3=BatteryUtilities
|
||||
Module4=C_Cliente
|
||||
Module5=C_Clientes
|
||||
@@ -749,8 +751,8 @@ Module8=C_Nota
|
||||
Module9=C_NoVenta
|
||||
NumberOfFiles=347
|
||||
NumberOfLibraries=29
|
||||
NumberOfModules=23
|
||||
Version=12.5
|
||||
NumberOfModules=25
|
||||
Version=12.2
|
||||
@EndOfDesignText@
|
||||
#Region Project Attributes
|
||||
#ApplicationLabel: Mariana
|
||||
|
||||
@@ -124,7 +124,6 @@ End Sub
|
||||
|
||||
Sub reinicializaReqManager
|
||||
reqManager.Initialize(Me, server)
|
||||
' B4XPages.MainPage.reqManager.Initialize(Me, server)
|
||||
If logger Then Log(server)
|
||||
End Sub
|
||||
|
||||
|
||||
25
B4A/Subs.bas
25
B4A/Subs.bas
@@ -784,12 +784,12 @@ End Sub
|
||||
Sub guardaProductoSinGestion(cedis As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoVenta As String)
|
||||
LogColor("guardaProductoSinGestion: "&prodId&", cant="&cant, Colors.Magenta)
|
||||
Private c As Cursor
|
||||
B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, (cant * costoU), costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoVenta))
|
||||
B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_RUTA, PE_COSTO_SIN, PE_FOLIO, PE_ENVIO_OK) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,0) ", Array As Object (cedis, (cant * costoU), costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoVenta))
|
||||
B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cant, prodId))
|
||||
c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)")
|
||||
c.Position=0
|
||||
B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)")
|
||||
B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clienteId, fecha, usuario, c.GetString("CANT_CLIE"), c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps, cedis, c.GetString("TOTAL_CLIE_SIN")))
|
||||
B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO, PC_LON, PC_LAT, PC_ALMACEN, PC_RUTA, PC_COSTO_SIN, PC_ENVIO_OK) VALUES (?,?,?,?,?,?,?,?,?,?,0)", Array As Object(clienteId, fecha, usuario, c.GetString("CANT_CLIE"), c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps, cedis, c.GetString("TOTAL_CLIE_SIN")))
|
||||
End Sub
|
||||
|
||||
Sub actualizaProducto(cedis As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoVenta As String)
|
||||
@@ -1299,4 +1299,25 @@ Sub logJobDoneResultados(resultado As DBResult)
|
||||
LogColor(k & " = " & records(resultado.Columns.Get(k)), Colors.RGB(215,37,0))
|
||||
Next
|
||||
Next
|
||||
End Sub
|
||||
|
||||
'Agrega una columna a la tabla especificada.
|
||||
'Hay que indicar el "tipo" de la columna (TEXT, INTEGER, ETC)
|
||||
'Ej. agregaColumna("TABLA", "COLUMNA", "TIPO")
|
||||
Sub agregaColumna(tabla As String, columna As String, tipo As String) 'ignore
|
||||
Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna en la tabla
|
||||
Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery($"SELECT COUNT(*) AS fCol FROM pragma_table_info('${tabla}') WHERE name='${columna}'"$)
|
||||
c.Position = 0
|
||||
If c.GetString("fCol") = 0 Then 'Si no esta la columna la agregamos
|
||||
B4XPages.MainPage.skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$)
|
||||
Log($"Columna "${columna} ${tipo}", agregada a "${tabla}"."$)
|
||||
End If
|
||||
Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch
|
||||
Try
|
||||
B4XPages.MainPage.skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$)
|
||||
Log($"Columna "${columna} ${tipo}", agregada a "${tabla}".."$)
|
||||
Catch
|
||||
Log(LastException)
|
||||
End Try
|
||||
End Try
|
||||
End Sub
|
||||
Reference in New Issue
Block a user