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 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 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 almacenX As String = "2" 'almacen Private rutaX As String = "131" 'rutapreventa 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