Files
Guna_Carta_Porte/B4A/C_Principal.bas

352 lines
12 KiB
QBasic

B4A=true
Group=Default Group
ModulesStructureVersion=1
Type=Class
Version=12.8
@EndOfDesignText@
Sub Class_Globals
Private Root As B4XView 'ignore
Private xui As XUI 'ignore
Dim DBReqServer As String
' Para el PDFViewer
Dim pdf As PdfiumCore
Private PDFView1 As PDFView
Private btnFirst As Button
Private btnPrev As Button
Private lblPages As Label
Private btnNext As Button
Private btnLast As Button
Private glPages As Int
Private p_pdfViewer As Panel
Private pdfViewerActivo As Boolean
Private p_controles_pdf As Panel
Private pdfURL As String
Private l_2 As Label
Dim cartaPorteLista As Boolean
Private l_downloadPDF As Label
Private ProgressBarPDF As ProgressBar
Private p_downloadPDF As Panel
Private p_progress1 As Panel
Private l_porcentaje As Label
Private detenerLoop As Boolean = False
Private b_descargaCartaPorte As Button
Dim logger As Boolean = True
Dim hoy As String
Dim usuario, almacen, rutapreventa As String = ""
Private b_verCartaPorte As Button
Private p_botones As Panel
Private et_ruta As EditText
Private l_ruta1 As Label
Private l_almacen As Label
End Sub
'You can add more parameters here.
Public Sub Initialize As Object
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
Root.LoadLayout("principal")
hoy = DateTime.Date(DateTime.Now)
End Sub
Sub B4XPage_Appear
Subs.centraPanel(p_botones, Root.Width)
b_verCartaPorte.Enabled = False
If File.Exists(File.DirInternal,"cartaPorte.pdf") Then
DateTime.DateFormat = "yyyyMMdd"
Dim hoy As String = DateTime.Date(DateTime.Now)
Log($"${DateTime.Date(File.LastModified(File.DirInternal,"cartaPorte.pdf"))}|${hoy}"$)
If (DateTime.Date(File.LastModified(File.DirInternal,"cartaPorte.pdf")) = hoy) Then
b_verCartaPorte.Enabled = True
End If
End If
b_descargaCartaPorte.Enabled = False
et_ruta.Text = "131"
l_almacen.Text= Subs.traeAlmacen
et_ruta.RequestFocus
End Sub
Sub B4XPage_CloseRequest As ResumableSub
' BACK key pressed
'Return True to close, False to cancel
If pdfViewerActivo Then
pdfViewerActivo = False
p_pdfViewer.Visible = False
Else
B4XPages.ShowPage("Mainpage")
End If
Return False
End Sub
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
Private Sub b_descargaCartaPorte_Click
If 1 = 1 Or Not(File.Exists(File.DirInternal,"cartaPorte.pdf")) Then 'Si no existe la descargamos ...
If logger Then LogColor("No hay carta porte.", Colors.Red)
descargaCartaPorte ' la descargamos.
Do While Not(cartaPorteLista) 'Mientras no se termine de descargar la carta porte, esperamos ...
Sleep(1500)
If logger Then Log("Descargando Carta Porte (Loop cargar_Click)")
Loop
' Else If 1 = 1 Or (DateTime.Date(File.LastModified(File.DirInternal,"cartaPorte.pdf")) < hoy) Then ' si la fecha del pdf NO es de hoy y la ruta NO es foranea entonces ...
' LogColor("La carta porte es vieja.", Colors.Red)
' descargaCartaPorte ' la descargamos.
' Do While Not(cartaPorteLista) 'Mientras no se termine de descargar la carta porte, esperamos ...
' Sleep(1000)
' If logger Then Log("Descargando Carta Porte (Loop cargar_Click)")
' If detenerLoop Then Exit
' detenerLoop = False
' Loop
Else
cartaPorteLista = True
If logger Then LogColor("Ya hay carta porte con fecha de hoy", Colors.Green)
Private MB As Int
MB = Msgbox2("¿Quiere descargarla nuevamente?", "YA SE DESCARGO LA CARTA PORTE", "Si", "", "No", Null) 'ignore
If MB = DialogResponse.Positive Then
descargaCartaPorte
Do While Not(cartaPorteLista) 'Mientras no se termine de descargar la carta porte esperamos ...
Sleep(1000)
If logger Then Log("Descargando Carta Porte (Loop cargar_Click)")
If detenerLoop Then Exit
detenerLoop = False
Loop
ELSE IF MB = DialogResponse.NEGATIVE Then
' descargaCartaPorte
ELSE IF MB = DialogResponse.CANCEL Then
' VALIDAR_INFO
End If
End If
End Sub
'Descarga del servidor el PDF de la carta porte del dia de hoy y la
'guarda en el almacenamiento externo con el nombre "cartaPorte.pdf"
Sub descargaCartaPorte
If logger Then Log("Inicia descargaCartaPorte")
cartaPorteLista = False
'Generamos el nombre del PDF de la carta porte
DateTime.DateFormat = "ddMMyyyy"
Private rutaX As String = et_ruta.text 'rutaPreventa
Private almacenX As String = Subs.traeAlmacen
'#################################
Private almacenX As String = "2" 'almacen
'#################################
Private cartaPortePDF As String = $"CPORTE${almacenX}_${rutaX}.pdf"$
' cartaPortePDF = "CPORTE2_100_Prueba.pdf" 'Para pruebas
' Log(cartaPortePDF)
'Para el servidor
Private pdfServer As String = "keymon.lat"
If DBReqServer.IndexOf("10.0.0.205") > -1 Then pdfServer = "10.0.0.205"
' Log(pdfServer)
pdfURL = $"https://${pdfServer}/CartaPorteKelloggs/CartaPorteMovil${DateTime.Date(DateTime.now)}/${cartaPortePDF}"$
LogColor(pdfURL,Colors.Red)
' Log("Iniciamos wait for descargaCartaPorteyProgreso")
Wait For (descargaCartaPorteyProgreso(pdfURL)) Complete (Success As Boolean)
' Log("Terminamos wait for descargaCartaPorteyProgreso")
l_porcentaje.Text = "0%"
ProgressBarPDF.Progress = 0
' Log("Ocultamos panel descarga")
Subs.panelOculto(p_downloadPDF)
If logger Then Log(p_progress1.Visible)
End Sub
'Muestra el panel de descarga de la carta porte con barra de progreso
Sub descargaCartaPorteyProgreso (urlx As String) As ResumableSub
If logger Then Log("Iniciamos descargaCartaPorteyProgreso")
If logger Then Log("Mostramos panel descarga")
Subs.panelVisible(p_downloadPDF, 0, 0)
Subs.centraPanel(p_progress1, Root.Width)
Subs.centraEtiqueta(l_downloadPDF, p_progress1.Width)
Subs.centraEtiqueta(l_porcentaje, p_progress1.Width)
Subs.centraProgressBar(ProgressBarPDF, p_progress1.Width)
Dim job_PDF As HttpJob
job_PDF.Initialize("job_PDF",Me)
' job_PDF.GetRequest.Timeout = 120000 ' Timeout a 2 minutos
job_PDF.Download(urlx)
'Para la barra de progreso
' == TaskIdToJob == necesita que se agregue "HU2_PUBLIC" a "Conditional Symbols" (Project/Build Configurations) (Ctrl+B)
Dim TaskToJob As Map = HttpUtils2Service.TaskIdToJob
Do While HttpUtils2Service.TaskIdToJob.IsInitialized = False
Log("Waiting for HttpUtils2Service to be ready.")
Sleep(20)
Loop
Dim TaskId As Int
Do While TaskId = 0
For Each id As Int In TaskToJob.Keys
If TaskToJob.Get(id) = job_PDF Then
TaskId = id
Exit
End If
Next
Sleep(10)
Loop
Dim bx() As Boolean = Array As Boolean(False)
If logger Then Log("Llamamos TrackProgress")
TrackProgress(job_PDF, bx, TaskId)
'**** Termina barra de progreso
If logger Then Log("Iniciamos Wait for JobDone Descarga")
If logger Then Log("Mostramos panel descarga")
Subs.panelVisible(p_downloadPDF, 0, 0)
Wait for (job_PDF) JobDone (job_PDF As HttpJob)
' Log("Terminamos Wait for JobDone Descarga ")
If job_PDF.Success = False Then Log("Error PDF")
If job_PDF.Success = True Then
Log("Carta descargada con exito")
If logger Then Log("Ocultamos downloader")
cartaPorteLista = True
' // Delete existing file
' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
' Wait For B4XPAges_PermissionResult (Permission As String, Result As Boolean)
If logger Then Log("Ocultamos downloader 2")
If File.Exists(File.DirInternal,"cartaPorte.pdf") Then
' Log("Borramos carta anterior")
File.Delete(File.DirInternal,"cartaPorte.pdf")
End If
' // Save new file
Dim outNewAPK As OutputStream = File.OpenOutput(File.DirInternal,"cartaPorte.pdf", False)
File.Copy2(job_PDF.GetInputStream, outNewAPK)
' Log("Guardamos nueva carta")
outNewAPK.Close
Log("APK dir: "&File.DirInternal)
Log("Carta porte lista")
ToastMessageShow("Carta Porte descargada exitosamente!!", False)
b_verCartaPorte.Enabled = True
' AQUI VA EL CODIGO DE CARTA PORTE DSCARGADA
Subs.panelOculto(p_downloadPDF)
' p_progress1.Visible = False
Else
Log("Hubo un error, intente de nuevo")
job_PDF.Release
Subs.panelOculto(p_downloadPDF)
' p_progress1.Visible = False
If usuario <> "KMTSKLL1" Then
If File.Exists(File.DirInternal,"cartaPorte.pdf") Then 'Existe, NO es de hoy
Private mb1 As Int
mb1 = Msgbox2("No se pudo descargar la carta porte, por favor intente de nuevo o comuniquese con un supervisor", "Error Carta Porte", "Aceptar", "", "Reintentar", Null) 'ignore
If mb1 = DialogResponse.Positive Then
' Activity.Finish
' ExitApplication
detenerLoop = True
B4XPages.ShowPage("Principal")
ELSE IF mb1 = DialogResponse.NEGATIVE Then
descargaCartaPorte
ELSE IF mb1 = DialogResponse.CANCEL Then
' VALIDAR_INFO
End If
Else
LogColor("Hay carta porte vieja PERO la ruta es Foranea", Colors.RGB(255,131,0))
ToastMessageShow("Hay carta porte de dias anteriores y la ruta es foranea.", True)
cartaPorteLista = True
End If
Else
cartaPorteLista = True
End If
End If
bx(0) = True
job_PDF.Release
' Log("Termina descargaCartaPorteyProgreso")
Return job_PDF.Success
End Sub
'Para visualizar el progreso de la descarga
Private Sub TrackProgress (j As HttpJob, Stop() As Boolean, TaskId As Int)
Do While Stop(0) = False
If j.Out.IsInitialized Then
Dim TotalLength As Long = j.Response.ContentLength
Dim size As Long = File.Size(HttpUtils2Service.TempFolder, TaskId)
' Log(size & ", " & TotalLength & " | " & ((size/TotalLength)*100))
ProgressBarPDF.Progress = (size/TotalLength)*100
l_porcentaje.Text = $"$1.0{((size/TotalLength)*100)} %"$
End If
Sleep(100)
Loop
If (size/TotalLength) = 1 Then Subs.panelOculto(p_downloadPDF)
' Log("TrackProgress - "&size & ", " & TotalLength)
End Sub
Sub PDFium_loadComplete(pages As Int)
' Log($"PDFium_loadComplete(${pages})"$)
glPages = pages
lblPages.Text = $"${glPages}"$
End Sub
Sub PDFium_onInitiallyRendered(page As Int)
Log($"PDFium_onInitiallyRendered(${page})"$)
End Sub
Sub PDFium_onPageChanged(page As Int, TotalPages As Int)
' Log($"PDFium_onPageChanged(${page},${TotalPages})"$)
lblPages.Text = $"${page+1}/${glPages}"$
End Sub
Sub PDFium_PageNum(page As Int)
Log($"PDFium_PageNum(${page})"$)
End Sub
Sub PDFium_Show()
Log($"PDFium_Show()"$)
End Sub
Sub btnFirst_Click
PDFView1.jumpTo2(0,False)
End Sub
Sub btnPrev_Click
PDFView1.jumpTo2(PDFView1.CurrentPage-1,False)
End Sub
Sub btnNext_Click
PDFView1.jumpTo2(PDFView1.CurrentPage+1,False)
End Sub
Sub btnLast_Click
PDFView1.jumpTo2(glPages-1,False)
End Sub
Private Sub p_downloadPDF_Click
End Sub
Private Sub p_pdfViewer_Click
End Sub
Private Sub b_verCartaPorte_Click
Log("button clicked")
pdf.Initialize("PDFium")
' PNL_ACCESO.Visible = False
' Panel7.Visible = False
p_pdfViewer.Width = GetDeviceLayoutValues.Width
p_pdfViewer.Height = GetDeviceLayoutValues.Height
PDFView1.Width = GetDeviceLayoutValues.Width-20
' p_controles_pdf.Width = GetDeviceLayoutValues.Width-20
If logger Then Log($"pantalla: ${GetDeviceLayoutValues.Width}x${GetDeviceLayoutValues.Height} - panel: ${p_pdfViewer.Width}x${p_pdfViewer.Height}"$)
Subs.panelVisible(p_pdfViewer, 0, 0)
pdfViewerActivo = True
Subs.centraPanel(p_controles_pdf, Root.Width)
' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
' ######### Se necesita la libreria FileProvider #########
Dim cfg As Configurator = PDFView1.fromUri(File.DirInternal,"/cartaPorte.pdf")
cfg.SetEventname("PDFium")
cfg.pageFitPolicy("BOTH").autoSpacing(True).enableSwipe(True).pageSnap(True).swipeHorizontal(False).addOnErrorListener.addOnLoadCompleteListener.addOnPageChangeListener.addOnPageErrorListener.load
End Sub
Private Sub et_ruta_TextChanged (Old As String, New As String)
If New <> "" Then
b_descargaCartaPorte.Enabled = True
Else
b_descargaCartaPorte.Enabled = False
End If
End Sub