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 Dim b As Cursor Private b_check As Button Dim reqManager As DBRequestManager Dim cmd As DBCommand Dim c As Cursor Dim RES As String 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 reqManager.Initialize(Me, Subs.traeDBReqServer) b_check.visible = True 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 c = B4XPages.MainPage.skmt.ExecQuery("SELECT * FROM CHECADO_CHECK") If c.RowCount = 0 Then b_check.Visible = False Else b_check.Visible = True End If checachek 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 cmd.Initialize cmd.Name = "select_cat_placa_guna" cmd.Parameters = Array As Object(Subs.traeAlmacen,et_ruta.Text) reqManager.ExecuteQuery(cmd , 0, "placa") ' cmd.Initialize ' cmd.Name = "select_cat_kmt_info_guna" ' cmd.Parameters = Array As Object(almacen,et_ruta.Text) ' reqManager.ExecuteQuery(cmd , 0, "kmt_datos") 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) Log(DateTime.Date(DateTime.now)) pdfURL = $"https://${pdfServer}/CartaPorteGuna/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 DESCARGADA!!!!! B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM RUTAA") B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO RUTAA(RUTAA) VALUES (?)", Array As Object (et_ruta.TEXT)) cmd.Initialize cmd.Name = "insert_checkcp_GUNA" cmd.Parameters = Array As Object(Subs.traeAlmacen,et_ruta.Text,B4XPages.MainPage.usuario) reqManager.ExecuteCommand(cmd , $"ins_checkcpPendientes_head_${usuario}"$) 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 Sub checachek b = B4XPages.MainPage.skmt.ExecQuery("SELECT CHECADO FROM CHECADO_CHECK") If b.RowCount > 0 Then b.Position = 0 If b.GetString("CHECADO") = 0 Then b_check.Visible = True Else If b.GetString("CHECADO") = 1 Then b_check.Visible =False End If b.Close End If End Sub Private Sub b_check_Click B4XPages.ShowPage("checklist") End Sub Sub et_ruta_EnterPressed If et_ruta.Text = "FIN DIA" Then RES = Msgbox2("Seguro que desea hacer el cierre todos los datos se borraran?","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore If RES = DialogResponse.POSITIVE Then et_ruta.Text = "" B4XPages.MainPage.skmt.ExecNonQuery("delete from CHECADO_CHECK") B4XPages.MainPage.skmt.ExecNonQuery("delete from CHECKLIST2") B4XPages.MainPage.skmt.ExecNonQuery("delete from PLACAS") ' Starter.skmt.ExecNonQuery("delete from kmt_info") B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM RUTAA") B4XPage_Appear End If ' Starter.waypointsOrdered.Clear End If End Sub 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 Dim RESULT As DBResult = reqManager.HandleJob(Job) If RESULT.Tag = "placa" Then 'query tag B4XPages.MainPage.skmt.ExecNonQuery("delete from PLACAS") For Each records() As Object In RESULT.Rows Dim placa As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PLACAS(PLACA) VALUES (?)", Array As Object (placa)) B4XPage_Appear Next End If End If ' If Job.JobName = "DBRequest" Then ' Dim RESULT As DBResult = reqManager.HandleJob(Job) ' If RESULT.Tag = "kmt_datos" Then 'query tag ' For Each records() As Object In RESULT.Rows ' ' Dim CAT_CL_CODIGO As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_RUTA As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_DIAS_VISITA As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_NOMBRE As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_ATIENDE1 As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_ATIENTE2 As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_TELEFONO As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_EMAIL As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_CALLE As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_NOEXT As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_NOINT As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_CALLE1 As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_CALLE2 As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_COLONIA As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_MUNI As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_EDO As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_CP As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_LONG As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_LAT As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_MTOCOMPRA As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_BCREDITO As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_LIMITECREDITO As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' Dim CAT_CL_SALDODISPONIBLE As String = records(RESULT.Columns.Get("CAT_VE_PLACAS")) ' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info(PLACA) VALUES (?)", Array As Object (placa)) ' Next ' End If ' End If c = B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM CHECADO_CHECK") c.Position = 0 If c.GetString("CUANTOS") = 0 Then B4XPages.MainPage.skmt.ExecNonQuery2("insert into CHECADO_CHECK (CHECADO) VALUES(?)", Array As String("0")) Else If c.GetString("CUANTOS") = 1 Then End If End If End Sub