From 30f86d054fd6ddcbc4ff241e4249404633448cfc Mon Sep 17 00:00:00 2001 From: cvaldes1201 Date: Thu, 23 May 2024 13:11:01 -0600 Subject: [PATCH] Picking --- B4A/B4XMainPage.bas | 8 +- B4A/C_Principal.bas | 191 +++++++++- B4A/C_picking.bas | 554 +++++++++++++++++++++++++++++ B4A/Files/icon_22-[convertido].png | Bin 0 -> 40734 bytes B4A/Files/picking.bal | Bin 0 -> 20598 bytes B4A/Files/principal.bal | Bin 20180 -> 20801 bytes B4A/Files/salma13.png | Bin 0 -> 3715 bytes B4A/GUNA_Reparto.b4a | 114 +++--- B4A/GUNA_Reparto.b4a.meta | 7 +- B4A/Starter.bas | 1 + B4A/Subs.bas | 4 + 11 files changed, 818 insertions(+), 61 deletions(-) create mode 100644 B4A/C_picking.bas create mode 100644 B4A/Files/icon_22-[convertido].png create mode 100644 B4A/Files/picking.bal create mode 100644 B4A/Files/salma13.png diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index 5d369d6..9892803 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -43,6 +43,7 @@ Sub Class_Globals ' Public historico As C_Historico Public detalleVenta As C_DetalleVenta Public detalle_promo As C_Detalle_Promo + Public picking As C_picking Dim reqManager As DBRequestManager ' Dim ruta As String Dim usuario As String @@ -83,6 +84,7 @@ Sub Class_Globals Private lv_server As ListView Public Provider As FileProvider Public rutaBDBackup As String = "" + Dim rutarep As String End Sub Public Sub Initialize @@ -102,6 +104,8 @@ Private Sub B4XPage_Created (Root1 As B4XView) clientes.Initialize B4XPages.AddPage("Clientes", clientes) cliente.Initialize + B4XPages.AddPage("picking", picking) + picking.Initialize B4XPages.AddPage("Cliente", cliente) ' foto.Initialize ' B4XPages.AddPage("Foto", foto) @@ -136,6 +140,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS RECHAZOS (R_FECHA TEXT, R_CLIENTE TEXT, R_CLI_ORIG TEXT, R_PRODID TEXT, R_CANT TEXT, R_RECHAZO INT)") Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS VENTAS (V_FECHA TEXT, V_CLIENTE TEXT, V_CLI_ORIG TEXT, V_PRODID TEXT, V_CANT TEXT, V_RECHAZO INT)") Subs.agregaColumna("REPARTO", "REP_PRODREGISTRO", "TEXT") + Subs.agregaColumna("PICKING_REPARTO", "FECHA", "TEXT") Subs.agregaColumna("kmt_info", "SECUENCIA", "INT") Subs.agregaColumna("REPARTO", "REP_PRODID", "TEXT") Subs.agregaColumna("REPARTO", "REP_CLI_ORIG", "TEXT") @@ -147,7 +152,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS wayPoints (codigo TEXT, indice INT)") ' Dim server As String = "http://11.0.0.151:1782" Dim server As String = "http://187.189.244.154:1782" -' Dim server As String = "http://11.0.0.222:1782" +' Dim server As String = "http://11.0.0.12:1782" ' server = "http://10.0.0.205:1782" ' server = "http://11.0.0.44:1782" reqManager.Initialize(Me, B4XPages.MainPage.server) @@ -163,6 +168,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) ' IMEN.Text = "" 'P.GetDeviceId ' IMEI = "" 'P.GetDeviceId ' End If + Subs.agregaColumna("PICKING_REPARTO","ESTATUS","INT") End Sub Sub B4XPage_Appear diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index 08cf1f4..b9c6863 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -89,6 +89,8 @@ Sub Class_Globals Private l_rechazo As Label Private Label9 As Label Dim cp As Cursor + + Private b_picking As Button End Sub 'You can add more parameters here. @@ -161,6 +163,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) End Sub Sub B4XPage_Appear + b_picking.visible = False Subs.centraPanel(p_principal, Root.Width) ' c=Starter.skmt.ExecQuery("select noversion from version") ' c.Position=0 @@ -188,6 +191,7 @@ Sub B4XPage_Appear If f.RowCount > 0 Then f.Position = 0 l_ruta.Text = f.GetString("RUTAA") + End If f.Close If l_ruta.Text = 0 Then @@ -392,7 +396,26 @@ Sub B4XPage_Appear Label9.Visible = False L_MONTOE.Visible = False End If + checachek +End Sub +Sub checachek + c = Starter.skmt.ExecQuery("SELECT * FROM PICKING_REPARTO") + If c.RowCount > 0 Then + b = Starter.skmt.ExecQuery("SELECT MOSTRAR FROM CHECAR") + If b.RowCount > 0 Then + b.Position = 0 + If b.GetString("MOSTRAR") = 0 Then + b_picking.Visible = True + Else If b.GetString("MOSTRAR") = 1 Then + b_picking.Visible =False + End If + b.Close + End If + Else + b_picking.Visible =False + End If + c.Close End Sub Sub IsConnectedToInternet As Boolean 'ignore @@ -419,7 +442,12 @@ Sub to_number_vb (valor As Object) As String End Sub Sub trabajar_Click - B4XPages.ShowPage("Clientes") + If b_picking.Visible = True Then + MsgboxAsync("Favor de hacer el picking.","Atención") + Else + + B4XPages.ShowPage("Clientes") + End If End Sub Sub Subir_Click @@ -620,6 +648,7 @@ Sub cargar_Click Starter.skmt.ExecNonQuery("delete from HIST_VENTAS") Starter.skmt.ExecNonQuery("delete from HIST_VENTAS2") Starter.skmt.ExecNonQuery("delete from NOVENTA") + Starter.skmt.ExecNonQuery("delete from PICKING_REPARTO") Else Log("********************* Hay ruta, NO BORRAMOS TODO") End If @@ -645,6 +674,11 @@ Sub cargar_Click reqs.Add("gunaprod") End If + cmd.Initialize + cmd.Name = "select_conversiones_GUNA" + cmd.Parameters = Array As Object(ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "conversion") + reqs.Add("conversion") cmd.Initialize cmd.Name = "select_cliente_guna_re_REPG2" @@ -653,6 +687,15 @@ Sub cargar_Click Log($"Pedimos kmt_datos"$) reqs.Add("kmt_datos") + + cmd.Initialize + cmd.Name = "select_picking_reparto" + cmd.Parameters = Array As Object(ALMACEN,e_ruta.text,ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "p_reparto") + Log($"Pedimos p_reparto"$) +' reqs.Add("p_reparto") + + cmd.Initialize cmd.Name = "select_ventad_guna_re_REPG2" cmd.Parameters = Array As Object(e_ruta.text, ALMACEN, ALMACEN) @@ -717,6 +760,35 @@ Sub cargar_Click reqs.Add("hist_datos") 'reparto rechazo REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT End If + + If ALMACEN = "66" Then + ALMACEN = "67" + cargo = 2 + cmd.Initialize + cmd.Name = "select_punteo_guna_re_REPG2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN,ALMACEN, ALMACEN,ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "punteo") + reqs.Add("punteo") + + cmd.Initialize + cmd.Name = "select_almacen_guna_re_REPG2" + cmd.Parameters = Array As Object(ALMACEN, e_ruta.text, ALMACEN, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "gunaprod") + reqs.Add("gunaprod") + + cmd.Initialize + cmd.Name = "select_cliente_guna_re_REPG2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN, ALMACEN,ALMACEN,e_ruta.text, ALMACEN, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "kmt_datos") + reqs.Add("kmt_datos") + + cmd.Initialize + cmd.Name = "select_ventad_guna_re_REPG2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "hist_datos") + reqs.Add("hist_datos") + 'reparto rechazo REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT + End If ' c=Starter.skmt.ExecQuery("SELECT REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA FROM REPARTO") ' If c.RowCount > 0 Then @@ -952,6 +1024,37 @@ Sub JobDone(Job As HttpJob) Starter.skmt.EndTransaction End If End If + + + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "conversion" Then 'query tag + If reqs.IndexOf("conversion") > -1 Then + reqs.RemoveAt(reqs.IndexOf("conversion")) +' Log(reqs.Size) + End If + If reqs.IndexOf("conversion") > 0 Then + reqs.RemoveAt(reqs.IndexOf("conversion")) + Log(reqs.Size) + End If + Starter.skmt.BeginTransaction + Starter.skmt.ExecNonQuery("delete from CAT_CONVERSION") + For Each records() As Object In result.Rows + + Dim IDCONVER As String = records(result.Columns.Get("CAT_GP_ID")) + Dim NOMBRECONVER As String = records(result.Columns.Get("CAT_GP_NOMBRE")) + Dim CAJASPIEZAS As String = records(result.Columns.Get("CAT_GP_CONVERSION1")) + Dim BLISTERPIEZAS As String = records(result.Columns.Get("CAT_GP_CONVERSION2")) + Dim PRECIOPIEZAS As String = records(result.Columns.Get("CAT_GP_PRECIO")) + + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_CONVERSION (ID, NOMBRE, CAJASPIEZAS, BLISTERPIEZAS, PRECIO) VALUES (?,?,?,?,?)", Array As Object (IDCONVER,NOMBRECONVER, CAJASPIEZAS,BLISTERPIEZAS,PRECIOPIEZAS)) + Next + Starter.skmt.TransactionSuccessful + Starter.skmt.EndTransaction + End If + End If + If Job.JobName = "DBRequest" Then Dim result As DBResult = reqManager.HandleJob(Job) @@ -1027,6 +1130,54 @@ Sub JobDone(Job As HttpJob) Next End If End If + +' If Job.JobName = "DBRequest" Then +' Dim result As DBResult = reqManager.HandleJob(Job) +' If result.Tag = "p_reparto" Then 'query tag +' If reqs.IndexOf("p_reparto") > -1 Then +' reqs.RemoveAt(reqs.IndexOf("p_reparto")) +'' Log(reqs.Size) +' End If +' If reqs.IndexOf("p_reparto") > 0 Then +' reqs.RemoveAt(reqs.IndexOf("p_reparto")) +' Log(reqs.Size) +' End If +' Starter.skmt.BeginTransaction +' For Each records() As Object In result.Rows +' +' Dim HIST_PN_CODIGO_PRODUCTO As String = records(result.Columns.Get("HIST_PN_CODIGO_PRODUCTO")) +' Dim HIST_PN_NOMBRE_PRODUCTO As String = records(result.Columns.Get("HIST_PN_NOMBRE_PRODUCTO")) +' Dim HIST_PN_CANT_PIEZAS_OR As String = records(result.Columns.Get("HIST_PN_CANT_PIEZAS_OR")) +' Dim HIST_PN_CANT_CAJAS_OR As String = records(result.Columns.Get("HIST_PN_CANT_CAJAS_OR")) +' Dim HIST_PN_CANT_BLISTER_OR As String = records(result.Columns.Get("HIST_PN_CANT_BLISTER_OR")) +' Dim HIST_PN_CANT_CAJAS As String = records(result.Columns.Get("HIST_PN_CANT_CAJAS")) +' Dim HIST_PN_CANT_PIEZAS As String = records(result.Columns.Get("HIST_PN_CANT_PIEZAS")) +' Dim HIST_PN_CANT_BLISTER As String = records(result.Columns.Get("HIST_PN_CANT_BLISTER")) +' Starter.skmt.ExecNonQuery2("INSERT INTO PICKING_REPARTO(HIST_PN_CODIGO_PRODUCTO, HIST_PN_NOMBRE_PRODUCTO, HIST_PN_CANT_PIEZAS_OR, HIST_PN_CANT_CAJAS_OR, HIST_PN_CANT_BLISTER_OR, HIST_PN_CANT_CAJAS, HIST_PN_CANT_PIEZAS, HIST_PN_CANT_BLISTER, ESTATUS) VALUES (?,?,?,?,?,?,?,?,0)", Array As Object (HIST_PN_CODIGO_PRODUCTO, HIST_PN_NOMBRE_PRODUCTO, HIST_PN_CANT_PIEZAS_OR, HIST_PN_CANT_CAJAS_OR, HIST_PN_CANT_BLISTER_OR, HIST_PN_CANT_CAJAS, HIST_PN_CANT_PIEZAS, HIST_PN_CANT_BLISTER)) +' +' Next +' Starter.skmt.TransactionSuccessful +' Starter.skmt.EndTransaction +' End If +' End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "p_reparto" Then 'query tag + For Each records() As Object In result.Rows + Dim HIST_PN_CODIGO_PRODUCTO As String = records(result.Columns.Get("HIST_PN_CODIGO_PRODUCTO")) + Dim HIST_PN_NOMBRE_PRODUCTO As String = records(result.Columns.Get("HIST_PN_NOMBRE_PRODUCTO")) + Dim HIST_PN_CANT_PIEZAS_OR As String = records(result.Columns.Get("HIST_PN_CANT_PIEZAS_OR")) + Dim HIST_PN_CANT_CAJAS_OR As String = records(result.Columns.Get("HIST_PN_CANT_CAJAS_OR")) + Dim HIST_PN_CANT_BLISTER_OR As String = records(result.Columns.Get("HIST_PN_CANT_BLISTER_OR")) + Dim HIST_PN_CANT_CAJAS As String = records(result.Columns.Get("HIST_PN_CANT_CAJAS")) + Dim HIST_PN_CANT_PIEZAS As String = records(result.Columns.Get("HIST_PN_CANT_PIEZAS")) + Dim HIST_PN_CANT_BLISTER As String = records(result.Columns.Get("HIST_PN_CANT_BLISTER")) + Dim FECHA_PICKING As String = records(result.Columns.Get("HIST_PN_FECHA")) + Starter.skmt.ExecNonQuery2("INSERT INTO PICKING_REPARTO(HIST_PN_CODIGO_PRODUCTO, HIST_PN_NOMBRE_PRODUCTO, HIST_PN_CANT_PIEZAS_OR, HIST_PN_CANT_CAJAS_OR, HIST_PN_CANT_BLISTER_OR, HIST_PN_CANT_CAJAS, HIST_PN_CANT_PIEZAS, HIST_PN_CANT_BLISTER, ESTATUS, FECHA) VALUES (?,?,?,?,?,?,?,?,0,?)", Array As Object (HIST_PN_CODIGO_PRODUCTO, HIST_PN_NOMBRE_PRODUCTO, HIST_PN_CANT_PIEZAS_OR, HIST_PN_CANT_CAJAS_OR, HIST_PN_CANT_BLISTER_OR, HIST_PN_CANT_CAJAS, HIST_PN_CANT_PIEZAS, HIST_PN_CANT_BLISTER,FECHA_PICKING)) + Next + End If + End If If Job.JobName = "DBRequest" Then Dim result As DBResult = reqManager.HandleJob(Job) @@ -1181,6 +1332,11 @@ Sub JobDone(Job As HttpJob) ProgressDialogHide ' Log(reqs.size) ' Log("Terminamos lo descarga de ruta!") + + c = Starter.skmt.ExecQuery("SELECT * FROM CHECAR") + If c.RowCount = 0 Then + Starter.skmt.ExecNonQuery2("insert into CHECAR (MOSTRAR) VALUES(?)", Array As String("0")) + End If End If End Sub @@ -1222,7 +1378,12 @@ End Sub Sub BUSCA_Click ' StartActivity(BUSCAR) - B4XPages.ShowPage("Buscar") + If b_picking.Visible = True Then + MsgboxAsync("Favor de hacer el picking.","Atención") + Else +' StartActivity(BUSCAR) + B4XPages.ShowPage("Buscar") + End If End Sub Sub b_mapa_Click @@ -1236,6 +1397,8 @@ Sub e_ruta_EnterPressed If RES = DialogResponse.POSITIVE Then e_ruta.Text = "" Starter.skmt.ExecNonQuery("delete from pedido_cliente") + Starter.skmt.ExecNonQuery("delete from PICKING_REPARTO") + Starter.skmt.ExecNonQuery("delete from CHECAR") Starter.skmt.ExecNonQuery("delete from pedido") Starter.skmt.ExecNonQuery("delete from noventa") Starter.skmt.ExecNonQuery("delete from clie_act") @@ -1278,6 +1441,9 @@ Sub t1_tick End Sub Sub B_CLIEPROD_Click + If b_picking.Visible = True Then + MsgboxAsync("Favor de hacer el picking.","Atención") + Else BUSCA.Visible = False connecta.Visible = False trabajar.Visible = False @@ -1339,7 +1505,7 @@ Sub B_CLIEPROD_Click ' End If ' ListView1.AddTwoLines(c.GetString("HVD_PRONOMBRE") & " " & c.GetString("HVD_CLIENTE") , c.GetString("HVD_CANT") & " " & ESTATUS ) ' Next -' End If + End If End Sub Sub B_REGRESA_Click @@ -1354,10 +1520,25 @@ End Sub ''''''''''''''''''''''''''''MAPA RUTAS Sub Btn_Ubicar_Ru_Click - StartActivity(MAPA_RUTAS) + If b_picking.Visible = True Then + MsgboxAsync("Favor de hacer el picking.","Atención") + Else + + StartActivity(MAPA_RUTAS) + End If End Sub 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. Private Sub b_tabulador_Click - B4XPages.ShowPage("tabulador") + If b_picking.Visible = True Then + MsgboxAsync("Favor de hacer el picking.","Atención") + Else + B4XPages.ShowPage("tabulador") + End If +End Sub + + + +Private Sub b_picking_Click + B4XPages.ShowPage("picking") End Sub \ No newline at end of file diff --git a/B4A/C_picking.bas b/B4A/C_picking.bas new file mode 100644 index 0000000..347d75b --- /dev/null +++ b/B4A/C_picking.bas @@ -0,0 +1,554 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.8 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Dim lb_folioselec As Label + Dim c As Cursor + Dim d As Cursor + Dim cl_picking As CustomListView + Private b_guardapicking As Button + Dim cmd As DBCommand + Dim reqManager As DBRequestManager + + Private toast As BCToast + Private Capturing As Boolean + Private rp As RuntimePermissions + Private detector As JavaObject + Private camEx As CameraExClass + Private LastPreview As Long + Private IntervalBetweenPreviewsMs As Int = 100 + Dim codigoencontrado As String + + Private p_producto As Panel + Private l_nombreproducto As Label + Private et_catori_piezas As EditText + Private et_cantesc_piezas As EditText + Private et_catori_cajas As EditText + Private et_cantesc_cajas As EditText + Private et_cantesc_blister As EditText + Private et_catori_blister As EditText + Private btnStartStop As ImageView + Private et_codigo As EditText + Private l_ordenamiento As Label + Dim posision As Int = 0 + Private Panel6 As Panel + Private pnlPreview As Panel + Private B_cerrar As Button + Private b_entradamanual As Button + Private p_entradamaual As Panel + Private et_entradamanual As EditText + Private b_cancelar As Button + Private b_terminar As Button + Dim sDate,sTime As String + Private l_totales As Label + Private l_faltantes As Label + Private l_porcentaje As Label + Private l_fecha As Label + Private btnStartStop2 As ImageView + Dim delanteatras As Int + Dim f As Cursor + Dim regreso As Int +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 + Root.LoadLayout("picking") + 'load the layout to Root + +' reqManager.Initialize(Me, Starter.DBReqServer) + + 'camara + Panel6.Width = Root.Width + Panel6.Height= Root.Height + Panel6.Visible = False + toast.Initialize(Root) +' StopCamera +' B4XPages.SetTitle(Me, "Barcode Example") +' CreateDetector (Array("AZTEC", "CODE_128", "CODE_39", "CODE_93", "CODABAR", "DATA_MATRIX", "EAN_13", "EAN_8", "ITF", "PDF417", "QR_CODE", "UPC_A", "UPC_E")) + +End Sub + +Sub B4XPage_Appear + btnStartStop2.Visible = False +' c = Starter.skmt.ExecQuery("SELECT CUENTA FROM CUENTAA WHERE ESTATUS = 1") +' c.Position = 0 +' Log(c.RowCount) +' If c.RowCount >= 1 Then +' b_cancelar.Visible = False +' lb_folioselec.Text = c.GetString("CUENTA") +' btnStartStop2.Visible = True +' d = Starter.skmt.ExecQuery("SELECT FECHACONSULTA FROM FECHA") +' d.Position = 0 +' l_fecha.Text = d.GetString("FECHACONSULTA") +' d.Close +' Else + b_cancelar.Visible = False + btnStartStop2.Visible = False +' lb_folioselec.Text = B4XPages.MainPage.seleccion.folioactual +' l_fecha.Text = B4XPages.MainPage.seleccion.fechabusqueda +' End If + +' c.Close + + p_producto.Visible = True + c = Starter.skmt.ExecQuery("SELECT * FROM PICKING_REPARTO WHERE ESTATUS = 0 ORDER BY HIST_PN_NOMBRE_PRODUCTO") + d = Starter.skmt.ExecQuery("SELECT * FROM PICKING_REPARTO") + Log(c.RowCount) + l_faltantes.Text = d.RowCount - c.RowCount + 1 + l_totales.text = d.RowCount + l_porcentaje.Text = NumberFormat2((l_faltantes.Text * 100)/l_totales.Text,1,2,2,True) + If c.RowCount = 1 Then + c.Position = 0 +' l_ordenamiento.Text = c.GetString("CAT_DF_RUTAO") + et_codigo.Text = c.GetString("HIST_PN_CODIGO_PRODUCTO") + l_nombreproducto.Text = c.GetString("HIST_PN_NOMBRE_PRODUCTO") + et_catori_piezas.Text = c.GetString("HIST_PN_CANT_PIEZAS_OR") + et_catori_cajas.Text = c.GetString("HIST_PN_CANT_CAJAS_OR") + et_catori_blister.Text = c.GetString("HIST_PN_CANT_BLISTER_OR") + et_cantesc_piezas.Text = c.GetString("HIST_PN_CANT_PIEZAS") + et_cantesc_cajas.Text = c.GetString("HIST_PN_CANT_CAJAS") + et_cantesc_blister.Text = c.GetString("HIST_PN_CANT_BLISTER") + b_guardapicking.Text = "Terminar picking" + Else If c.RowCount > 1 Then + Log(c.RowCount) + c.Position = 0 +' l_ordenamiento.Text = c.GetString("CAT_DF_RUTAO") + et_codigo.Text = c.GetString("HIST_PN_CODIGO_PRODUCTO") + l_nombreproducto.Text = c.GetString("HIST_PN_NOMBRE_PRODUCTO") + et_catori_piezas.Text = c.GetString("HIST_PN_CANT_PIEZAS_OR") + et_catori_cajas.Text = c.GetString("HIST_PN_CANT_CAJAS_OR") + et_catori_blister.Text = c.GetString("HIST_PN_CANT_BLISTER_OR") + et_cantesc_piezas.Text = c.GetString("HIST_PN_CANT_PIEZAS") + et_cantesc_cajas.Text = c.GetString("HIST_PN_CANT_CAJAS") + et_cantesc_blister.Text = c.GetString("HIST_PN_CANT_BLISTER") + b_guardapicking.Text = "Guardar" + Else +' Msgbox2Async("No existen datos de la ruta: "& B4XPages.MainPage.seleccion.folioactual &" del almacen: "& B4XPages.MainPage.almacen.almacenselec,"Atención","Aceptar","","",Null, False) + Wait For Msgbox_Result (result As Int) + If result=DialogResponse.POSITIVE Then + B4XPages.ShowPage("seleccion") + End If + End If + c.Close + +' p_producto.Visible = True 'PARA PRUEBAS + reqManager.Initialize(Me, B4XPages.MainPage.server) +End Sub + +''camara +' +'Private Sub B4XPage_Disappear +' If Panel6.Visible = True Then +' Panel6.Visible = False +' StopCamera +' End If +'End Sub +' +' +'Sub btnStartStop_Click +' delanteatras = 1 +' If Capturing = False Then +' Panel6.Visible = True +' StartCamera +' Else +' Panel6.Visible = False +' StopCamera +' End If +'End Sub +' +'Sub btnStartStop2_Click +' delanteatras = 2 +' If Capturing = False Then +' Panel6.Visible = True +' StartCamera +' Else +' Panel6.Visible = False +' StopCamera +' End If +'End Sub +' +'Private Sub B_cerrar_Click +' If et_codigo.Text.Length = 0 Then +' Panel6.Visible = False +' StopCamera +' btnFlash2_Click +' Else +' Panel6.Visible = False +' StopCamera +' et_codigo_EnterPressed +' btnFlash2_Click +' End If +'End Sub +' +'Private Sub StopCamera +'' et_codigo.Text = "" +' Capturing = False +' pnlPreview.Visible = False +' If camEx.IsInitialized Then +' camEx.Release +' End If +'End Sub +' +'Private Sub StartCameraShared +' pnlPreview.Visible = True +' Capturing = True +'End Sub +' +'Private Sub FoundBarcode (msg As String) +'' et_codigo.Text = msg +' toast.Show($"Found [Color=Red][b][plain]${msg}[/plain][/b][/Color]"$) +' Log(msg) +' codigoencontrado = msg +'' If et_codigo.Text.Length > 1 Then +' B_cerrar_Click +'' End If +'End Sub +' +'Private Sub StartCamera +' rp.CheckAndRequest(rp.PERMISSION_CAMERA) +' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' If Result = False Then +' toast.Show("No permission!") +' Return +' End If +' StartCameraShared +' camEx.Initialize(pnlPreview, False, Me, "Camera1") +' Wait For Camera1_Ready (Success As Boolean) +' If Success Then +' camEx.SetContinuousAutoFocus +' camEx.CommitParameters +' camEx.StartPreview +' btnFlash_Click +' Else +' toast.Show("Error opening camera") +' StopCamera +' End If +'End Sub +' +'Sub btnFlash_Click +' Dim f() As Float = camEx.GetFocusDistances +' Log(f(0) & ", " & f(1) & ", " & f(2)) +' Dim flashModes As List = camEx.GetSupportedFlashModes +' If flashModes.IsInitialized = False Then +' ToastMessageShow("Flash not supported.", False) +' Return +' End If +' Dim flash As String = "torch" +'' LogColor(flash,Colors.Red) +' camEx.SetFlashMode(flash) +' ToastMessageShow(flash, False) +' camEx.CommitParameters +'End Sub +' +'Sub btnFlash2_Click +' Dim f() As Float = camEx.GetFocusDistances +' Log(f(0) & ", " & f(1) & ", " & f(2)) +' Dim flashModes As List = camEx.GetSupportedFlashModes +' If flashModes.IsInitialized = False Then +' ToastMessageShow("Flash not supported.", False) +' Return +' End If +' Dim flash As String = "off" +'' LogColor(flash,Colors.Red) +' camEx.SetFlashMode("off") +' ToastMessageShow(flash, False) +' camEx.CommitParameters +'End Sub +' +'Private Sub CreateDetector (Codes As List) +' Dim ctxt As JavaObject +' ctxt.InitializeContext +' Dim builder As JavaObject +' builder.InitializeNewInstance("com/google/android/gms/vision/barcode/BarcodeDetector.Builder".Replace("/", "."), Array(ctxt)) +' Dim barcodeClass As String = "com/google/android/gms/vision/barcode/Barcode".Replace("/", ".") +' Dim barcodeStatic As JavaObject +' barcodeStatic.InitializeStatic(barcodeClass) +' Dim format As Int +' For Each formatName As String In Codes +' format = Bit.Or(format, barcodeStatic.GetField(formatName)) +' Next +' builder.RunMethod("setBarcodeFormats", Array(format)) +' detector = builder.RunMethod("build", Null) +' Dim operational As Boolean = detector.RunMethod("isOperational", Null) +' If operational = False Then +' toast.Show("Failed to create detector") +' End If +' btnStartStop.Enabled = operational +'End Sub +' +'Private Sub Camera1_Preview (data() As Byte) +' If DateTime.Now > LastPreview + IntervalBetweenPreviewsMs Then +' 'Dim n As Long = DateTime.Now +' Dim frameBuilder As JavaObject +' Dim bb As JavaObject +' bb = bb.InitializeStatic("java.nio.ByteBuffer").RunMethod("wrap", Array(data)) +' frameBuilder.InitializeNewInstance("com/google/android/gms/vision/Frame.Builder".Replace("/", "."), Null) +' +' 'New Code +' Dim In As InputStream +' In.InitializeFromBytesArray(camEx.PreviewImageToJpeg(data, 100), 0, data.Length) +' Dim bmp As Bitmap +' 'Log(TestPnl.Top) +'' TestPnl.Top = 40dip +'' TestPnl.Width = pnlPreview.Width +' bmp.Initialize2(In) +' bmp = bmp.Rotate(90) +' bmp = bmp.Crop(0, bmp.Height * .3, bmp.Width, bmp.Height * .3) +' 'bmp = bmp.Resize(bmp.Width, bmp.Height * .8, True) +' 'QrTestPnl.SetBitmap(bmp) +' 'Dim B As Bitmap = camEx.PreviewImageToJpeg(data, 100) +' 'bmp.Rotate(270) +' +' frameBuilder.RunMethod("setBitmap", Array(bmp)) 'instead of the setImageData line +' 'frameBuilder.RunMethod("setBitmap", Array(TestPnl.GetBitmap)) 'instead of the setImageData line +' 'End of new code +' +' +' +' +' 'Old Code +'' Dim cs As CameraSize = camEx.GetPreviewSize +'' frameBuilder.RunMethod("setImageData", Array(bb, cs.Width, cs.Height, 842094169)) +' +' +' Dim frame As JavaObject = frameBuilder.RunMethod("build", Null) +' Dim SparseArray As JavaObject = detector.RunMethod("detect", Array(frame)) +' LastPreview = DateTime.Now +' Dim Matches As Int = SparseArray.RunMethod("size", Null) +' If Matches > 0 Then +' Dim barcode As JavaObject = SparseArray.RunMethod("valueAt", Array(0)) +' Dim raw As String = barcode.GetField("rawValue") +' FoundBarcode(raw) +' End If +' End If +'End Sub +' +''fin camara + +Private Sub et_codigo_EnterPressed + If delanteatras = 1 Then + +' If et_codigo.Text = codigoencontrado Then + p_producto.Visible = True +' btnFlash2_Click +' Else If et_codigo.Text = codigoencontrado Then +' MsgboxAsync("Escanea el codigo nuevamente.","Atención") +'' btnFlash2_Click +' End If + + Else If delanteatras = 2 Then + + d = Starter.skmt.ExecQuery2("SELECT * FROM CAT_DETALLEFOLIO WHERE CAT_DF_ID = ? AND CAT_DF_ESTATUS = ?",Array As String (codigoencontrado,1)) + Log(d.RowCount) + If d.RowCount > 0 Then + d.Position = 0 + et_codigo.Text = codigoencontrado + p_producto.Visible = True + l_ordenamiento.Text = d.GetString("CAT_DF_RUTAO") + et_codigo.Text = d.GetString("CAT_DF_ID") + l_nombreproducto.Text = d.GetString("CAT_DF_NOMBRE") + et_catori_piezas.Text = d.GetString("CAT_DF_PIEZAS") + et_catori_cajas.Text = d.GetString("CAT_DF_CAJAS") + et_catori_blister.Text = d.GetString("CAT_DF_BLISTER") + et_cantesc_piezas.Text = d.GetString("CAT_DF_PIEZAS") + et_cantesc_cajas.Text = d.GetString("CAT_DF_CAJAS") + et_cantesc_blister.Text = d.GetString("CAT_DF_BLISTER") + b_guardapicking.Text = "Guardar" + Else + MsgboxAsync("El codigo aun no ha sido escaneado","Atencion.") + End If + d.Close + End If +End Sub + +Private Sub b_entradamanual_Click + If p_producto.Visible Then + p_entradamaual.Visible = False + Else If p_entradamaual.Visible Then + p_entradamaual.Visible = False + Else + p_entradamaual.Visible = True + End If +End Sub + +Private Sub et_entradamanual_EnterPressed + If et_codigo.Text = et_entradamanual.Text Then + p_producto.Visible = True + p_entradamaual.Visible = False + et_entradamanual.Text = "" + Else + MsgboxAsync("Por favor captura el codigo correcto.","Atención") + End If +End Sub + +Private Sub b_cancelar_Click + Starter.skmt.ExecNonQuery("delete from CUENTAA") + B4XPages.ShowPage("seleccion") +End Sub + +Private Sub b_guardapicking_Click + regreso = 0 + DateTime.DateFormat = "dd/MM/yyyy" + DateTime.Timeformat = "HH:mm:ss" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + + If b_guardapicking.Text = "Terminar picking" Then + If p_producto.Visible Then + Dim bopiezas As Int + Dim bocajas As Int + Dim boblister As Int + bopiezas = et_catori_piezas.Text - et_cantesc_piezas.Text + bocajas = et_catori_cajas.Text - et_cantesc_cajas.Text + boblister = et_catori_blister.Text - et_cantesc_blister.Text + Log(bopiezas) + + Private CAJASPIEZAS As Int + Private BLISTERPIEZAS As Int + Private totalpiezas As Int + Private preciototal As Float + Private precioorden As Float + Private cantidadbo As Int + Private preciobo As Float + +' c = Starter.skmt.ExecQuery2("SELECT CAJASPIEZAS, BLISTERPIEZAS, PRECIO FROM CAT_CONVERSION WHERE ID = ? AND NOMBRE = ?", Array As String(et_codigo.Text, l_nombreproducto.Text)) +' d = Starter.skmt.ExecQuery2("SELECT CANTIDAD FROM CAT_DETALLEFOLIO WHERE CAT_DF_ID = ? AND CAT_DF_NOMBRE = ?",Array As String(et_codigo.Text, l_nombreproducto.Text)) +' d.Position = 0 +' c.Position = 0 +' CAJASPIEZAS = c.GetString("CAJASPIEZAS") * et_cantesc_cajas.Text +' BLISTERPIEZAS = c.GetString("BLISTERPIEZAS") * et_cantesc_blister.Text +' Log("Cajas a piezas es = "&CAJASPIEZAS) +' Log("blister a piezas es = "&BLISTERPIEZAS) +' totalpiezas = CAJASPIEZAS + BLISTERPIEZAS + et_cantesc_piezas.Text +' Log("total piezas es = "&totalpiezas) +' preciototal = c.GetString("PRECIO")* totalpiezas +' Log("total precio = "& preciototal) +' precioorden = c.GetString("PRECIO") * d.GetString("CANTIDAD") +' cantidadbo = d.GetString("CANTIDAD") - totalpiezas +' preciobo = cantidadbo * c.GetString("PRECIO") +' c.Close +' d.Close + Starter.skmt.ExecNonQuery2("UPDATE CHECAR SET MOSTRAR = ?" ,Array As String(1)) +' Starter.skmt.ExecNonQuery2("UPDATE CUENTAA SET ESTATUS = ? WHERE CUENTA = ?",Array As String (0,lb_folioselec.Text)) + Starter.skmt.ExecNonQuery2("UPDATE PICKING_REPARTO SET ESTATUS = ?, HIST_PN_CANT_PIEZAS_OR = ?, HIST_PN_CANT_CAJAS_OR = ?, HIST_PN_CANT_BLISTER_OR = ?, HIST_PN_CANT_CAJAS = ?, HIST_PN_CANT_PIEZAS = ?, HIST_PN_CANT_BLISTER = ? WHERE HIST_PN_CODIGO_PRODUCTO = ? and HIST_PN_NOMBRE_PRODUCTO = ?",Array As String(1, et_catori_piezas.Text, et_catori_cajas.Text, et_catori_blister.Text, et_cantesc_cajas.Text, et_cantesc_piezas.Text, et_cantesc_blister.Text, et_codigo.Text, l_nombreproducto.Text)) + posision = posision + 1 + p_producto.Visible = False + b_cancelar.Visible = False + mandapicking + B4XPages.ShowPage("principal") + End If + + Else + + If p_producto.Visible Then + Dim bopiezas As Int + Dim bocajas As Int + Dim boblister As Int + bopiezas = et_catori_piezas.Text - et_cantesc_piezas.Text + bocajas = et_catori_cajas.Text - et_cantesc_cajas.Text + boblister = et_catori_blister.Text - et_cantesc_blister.Text + Log(bopiezas) + + Private CAJASPIEZAS As Int + Private BLISTERPIEZAS As Int + Private totalpiezas As Int + Private preciototal As Float + Private precioorden As Float + Private cantidadbo As Int + Private preciobo As Float + +' c = Starter.skmt.ExecQuery2("SELECT CAJASPIEZAS, BLISTERPIEZAS, PRECIO FROM CAT_CONVERSION WHERE ID = ? AND NOMBRE = ?", Array As String(et_codigo.Text, l_nombreproducto.Text)) +' d = Starter.skmt.ExecQuery2("SELECT CANTIDAD FROM CAT_DETALLEFOLIO WHERE CAT_DF_ID = ? AND CAT_DF_NOMBRE = ?",Array As String(et_codigo.Text, l_nombreproducto.Text)) +' d.Position = 0 +' If c.RowCount > 0 Then +' c.Position = 0 +' CAJASPIEZAS = c.GetString("CAJASPIEZAS") * et_cantesc_cajas.Text +' BLISTERPIEZAS = c.GetString("BLISTERPIEZAS") * et_cantesc_blister.Text +' Log("Cajas a piezas es = "&CAJASPIEZAS) +' Log("blister a piezas es = "&BLISTERPIEZAS) +' totalpiezas = CAJASPIEZAS + BLISTERPIEZAS + et_cantesc_piezas.Text +' Log("total piezas es = "&totalpiezas) +' preciototal = c.GetString("PRECIO")* totalpiezas +' Log("total precio = "& preciototal) +' precioorden = c.GetString("PRECIO") * d.GetString("CANTIDAD") +' cantidadbo = d.GetString("CANTIDAD") - totalpiezas +' preciobo = cantidadbo * c.GetString("PRECIO") +' c.Close +' d.Close +' Else +' +' End If +' Starter.skmt.ExecNonQuery2("UPDATE CUENTAA SET ESTATUS = ? WHERE CUENTA = ?",Array As String (1,lb_folioselec.Text)) + Starter.skmt.ExecNonQuery2("UPDATE PICKING_REPARTO SET ESTATUS = ?, HIST_PN_CANT_PIEZAS_OR = ?, HIST_PN_CANT_CAJAS_OR = ?, HIST_PN_CANT_BLISTER_OR = ?, HIST_PN_CANT_CAJAS = ?, HIST_PN_CANT_PIEZAS = ?, HIST_PN_CANT_BLISTER = ? WHERE HIST_PN_CODIGO_PRODUCTO = ? and HIST_PN_NOMBRE_PRODUCTO = ?",Array As String(1, et_catori_piezas.Text, et_catori_cajas.Text, et_catori_blister.Text, et_cantesc_cajas.Text, et_cantesc_piezas.Text, et_cantesc_blister.Text, et_codigo.Text, l_nombreproducto.Text)) + posision = posision + 1 + p_producto.Visible = False + b_cancelar.Visible = False + B4XPage_Appear + + + Else + + End If + End If + +End Sub + + +Sub mandapicking + c = Starter.skmt.ExecQuery("SELECT * from PICKING_REPARTO") + If c.RowCount > 0 Then + Private folio As String = Subs.hmsKMT + For i=0 To c.RowCount -1 + c.Position=i + f=Starter.skmt.ExecQuery("select RUTAA from RUTAA") + If f.RowCount > 0 Then + f.Position = 0 + Dim ruta As String = f.GetString("RUTAA") + End If + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insertGUNApickingreparto" + cmd.Parameters = Array As Object(B4XPages.MainPage.almacen,ruta,c.GetString("HIST_PN_CODIGO_PRODUCTO"),c.GetString("HIST_PN_NOMBRE_PRODUCTO") ,c.GetString("HIST_PN_CANT_CAJAS_OR") ,c.GetString("HIST_PN_CANT_PIEZAS_OR") ,c.GetString("HIST_PN_CANT_BLISTER_OR") ,c.GetString("HIST_PN_CANT_CAJAS") ,c.GetString("HIST_PN_CANT_PIEZAS") ,c.GetString("HIST_PN_CANT_BLISTER"), B4XPages.MainPage.usuario,c.GetString("FECHA")) + reqManager.ExecuteCommand(cmd , "picking_rep") + Next + c.Close + End If +End Sub + +Private Sub b_regresar_Click + regreso = regreso +1 + Log(regreso) + c = Starter.skmt.ExecQuery("SELECT * FROM PICKING_REPARTO WHERE ESTATUS = 1 ORDER BY HIST_PN_NOMBRE_PRODUCTO") + d = Starter.skmt.ExecQuery("SELECT * FROM PICKING_REPARTO") + Log(c.RowCount) +' l_faltantes.Text = d.RowCount - c.RowCount + 1 +' l_totales.text = d.RowCount +' l_porcentaje.Text = NumberFormat2((l_faltantes.Text * 100)/l_totales.Text,1,2,2,True) + If c.RowCount > 0 Then + If c.RowCount >= regreso Then + c.Position = c.RowCount - regreso +' l_ordenamiento.Text = c.GetString("CAT_DF_RUTAO") + et_codigo.Text = c.GetString("HIST_PN_CODIGO_PRODUCTO") + l_nombreproducto.Text = c.GetString("HIST_PN_NOMBRE_PRODUCTO") + et_catori_piezas.Text = c.GetString("HIST_PN_CANT_PIEZAS_OR") + et_catori_cajas.Text = c.GetString("HIST_PN_CANT_CAJAS_OR") + et_catori_blister.Text = c.GetString("HIST_PN_CANT_BLISTER_OR") + et_cantesc_piezas.Text = c.GetString("HIST_PN_CANT_PIEZAS") + et_cantesc_cajas.Text = c.GetString("HIST_PN_CANT_CAJAS") + et_cantesc_blister.Text = c.GetString("HIST_PN_CANT_BLISTER") +' b_guardapicking.Text = "Terminar picking" + c.Close + End If + End If +End Sub diff --git a/B4A/Files/icon_22-[convertido].png b/B4A/Files/icon_22-[convertido].png new file mode 100644 index 0000000000000000000000000000000000000000..6a8255541cd1900ce0bb995eb31e3c4952e3f717 GIT binary patch literal 40734 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 z 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 Be$xN| literal 0 HcmV?d00001 diff --git a/B4A/Files/picking.bal b/B4A/Files/picking.bal new file mode 100644 index 0000000000000000000000000000000000000000..739fcddcf8278eb33c35e50e545d63720ccfe6fe GIT binary patch literal 20598 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 bL@PiNMliYxBREaXPt7eTE22qQ7mNK5Pw8Br literal 0 HcmV?d00001 diff --git a/B4A/Files/principal.bal b/B4A/Files/principal.bal index 7b6a40775abed3c4f4c817459c3dd22f460db144..db9553dfb13dd5ba0fee4216de5b079083e0635a 100644 GIT binary patch delta 501 zcmcaIm+{~tMqXA11_p691_mx5Z9b7VnlmZBATv2TGcSE(iVqW`*5r*$#jMOgNtVfq z%+mG3K$aj73jwhR5?d6=2CD+nVn8eo#1cR(iNuydVoM{jWsumiNNhPIwmgJg4>nW* zNkS2ct%Sr@Mq;ZVu~m`SYDjE#B(??;TN8<`#SoA1nKqJy4iZ}ziLD1@>jSX?5E}xq z5fB>#u?Z5}6v&2!oZ057EQO4Whc>gbJ>`^R0;x9P1d{MLVFz*oAknk=4gWbi#{HWO x<+T_Y4@}N-4givZ_9l!6Cx37@oxER2WOBbf=j4gzMw8Erb4}jw$H&CT001OHHHiQK delta 404 zcmX@Oi1Er?MqXA128Mq?f(uBSP2`Q2tR`GHsfhy{UI2#GC> z#1;XvnSq!Eh(&=|42Z>nSOSSHiNuydVoM{jWf1Io23Z7$K@N#6kHl6$Vk;uCm5|uV zNNg1(wki@^4T-G|W;;WCpn)WziNw}IVrwI@b&%M)ldD*yMGb)>MnG%=#IP_j-Mo&a Xkdbl!W(BsVoST&e&e=^?50nA`uYDT^ diff --git a/B4A/Files/salma13.png b/B4A/Files/salma13.png new file mode 100644 index 0000000000000000000000000000000000000000..d1d3d2a3dd8e76f079c1587cff343f0370782a39 GIT binary patch literal 3715 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 literal 0 HcmV?d00001 diff --git a/B4A/GUNA_Reparto.b4a b/B4A/GUNA_Reparto.b4a index 116654b..795a439 100644 --- a/B4A/GUNA_Reparto.b4a +++ b/B4A/GUNA_Reparto.b4a @@ -3,26 +3,29 @@ File1=alert2.png File10=guna_viejo.png File11=guna_viejo2.png File12=historico.bal -File13=intmex_logo_192x192.jpg -File14=itembuttonblue.png -File15=kelloggs.png -File16=login.bal -File17=logo_mariana.jpeg -File18=logo_mariana.jpg -File19=logo-guna-18.png +File13=icon_22-[convertido].png +File14=intmex_logo_192x192.jpg +File15=itembuttonblue.png +File16=kelloggs.png +File17=login.bal +File18=logo_mariana.jpeg +File19=logo_mariana.jpg File2=cliente.bal -File20=MainPage.bal -File21=mapa_cliente.bal -File22=mariana_logo_192x192.jpg -File23=no_venta.bal -File24=planfia_logo.png -File25=principal.bal -File26=proditem.bal -File27=productos.bal -File28=profina.jpg -File29=PROFINA.png +File20=logo-guna-18.png +File21=MainPage.bal +File22=mapa_cliente.bal +File23=mariana_logo_192x192.jpg +File24=no_venta.bal +File25=picking.bal +File26=planfia_logo.png +File27=principal.bal +File28=proditem.bal +File29=productos.bal File3=clientes.bal -File30=sync.png +File30=profina.jpg +File31=PROFINA.png +File32=SALMA13.png +File33=sync.png File4=dbc.png File5=detalleVenta.bal File6=durakelo1.png @@ -53,6 +56,9 @@ FileGroup28=Default Group FileGroup29=Default Group FileGroup3=Default Group FileGroup30=Default Group +FileGroup31=Default Group +FileGroup32=Default Group +FileGroup33=Default Group FileGroup4=Default Group FileGroup5=Default Group FileGroup6=Default Group @@ -61,30 +67,31 @@ FileGroup8=Default Group FileGroup9=Default Group Group=Default Group Library1=appupdating -Library10=googlemapsextras -Library11=gps -Library12=ime -Library13=javaobject -Library14=json -Library15=okhttputils2 -Library16=phone -Library17=randomaccessfile -Library18=reflection -Library19=runtimepermissions +Library10=googlemaps +Library11=googlemapsextras +Library12=gps +Library13=ime +Library14=javaobject +Library15=json +Library16=okhttputils2 +Library17=phone +Library18=randomaccessfile +Library19=reflection Library2=b4xpages -Library20=serial -Library21=sql -Library22=togglelibrary -Library23=xcustomlistview -Library24=zxing_scanner -Library25=fileprovider +Library20=runtimepermissions +Library21=serial +Library22=sql +Library23=togglelibrary +Library24=xcustomlistview +Library25=zxing_scanner +Library26=bctoast Library3=baqrcode Library4=byteconverter Library5=camera Library6=compressstrings Library7=core -Library8=fusedlocationprovider -Library9=googlemaps +Library8=fileprovider +Library9=fusedlocationprovider 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~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~'End of default text.~\n~~\n~''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~AddManifestText()~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~'AddManifestText()~\n~'AddManifestText()~\n~'AddManifestText() 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~AddManifestText()~\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~SetServiceAttribute(Tracker, android:foregroundServiceType, "location")~\n~'/////////////// FLP y FBMessageing MOD Termina /////////////////////~\n~~\n~'Si al cargar un mapa de google mande este error "java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion". agregar la siguiente linea:~\n~AddApplicationText()~\n~~\n~'/////////////////////// App Updating ////////////////~\n~ AddManifestText(~\n~ )~\n~ AddApplicationText(~\n~ ~\n~ ~\n~ ~\n~ )~\n~ CreateResource(xml, provider_paths,~\n~ ~\n~ ~\n~ ~\n~ ~\n~ ~\n~ )~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~~\n~AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)~\n~AddPermission(android.permission.INTERNET)~\n~AddPermission(android.permission.INSTALL_PACKAGES)~\n~AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~CreateResourceFromFile(Macro, JhsIceZxing1.CaturePortrait)~\n~ ~\n~SetApplicationAttribute(android:largeHeap, "true")~\n~~\n~AddManifestText(~\n~ ~\n~ )~\n~ ~\n~ SetApplicationAttribute(android:allowBackup, "false") Module1=appUpdater Module10=C_Historico @@ -92,20 +99,21 @@ Module11=C_Mapas Module12=C_NoVenta Module13=C_NuevoCliente Module14=C_Pedidos -Module15=C_Principal -Module16=C_Productos -Module17=C_tabulador -Module18=C_TicketsDia -Module19=C_UpdateAvailable +Module15=C_picking +Module16=C_Principal +Module17=C_Productos +Module18=C_tabulador +Module19=C_TicketsDia Module2=B4XMainPage -Module20=CameraExClass -Module21=DBRequestManager -Module22=foto -Module23=MAPA_CLIENTE -Module24=MAPA_RUTAS -Module25=Starter -Module26=Subs -Module27=Tracker +Module20=C_UpdateAvailable +Module21=CameraExClass +Module22=DBRequestManager +Module23=foto +Module24=MAPA_CLIENTE +Module25=MAPA_RUTAS +Module26=Starter +Module27=Subs +Module28=Tracker Module3=BatteryUtilities Module4=C_Buscar Module5=C_Cliente @@ -113,15 +121,15 @@ Module6=C_Clientes Module7=C_Detalle_Promo Module8=C_DetalleVenta Module9=C_Foto -NumberOfFiles=30 -NumberOfLibraries=25 -NumberOfModules=27 +NumberOfFiles=33 +NumberOfLibraries=26 +NumberOfModules=28 Version=12.5 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: GUNA Reparto #VersionCode: 1 - #VersionName: 4.04.20 + #VersionName: 4.05.20 'SupportedOrientations possible values: unspecified, landscape or portrait. #SupportedOrientations: portrait #CanInstallToExternalStorage: False diff --git a/B4A/GUNA_Reparto.b4a.meta b/B4A/GUNA_Reparto.b4a.meta index 9b0c607..9803e30 100644 --- a/B4A/GUNA_Reparto.b4a.meta +++ b/B4A/GUNA_Reparto.b4a.meta @@ -19,6 +19,7 @@ ModuleBookmarks24= ModuleBookmarks25= ModuleBookmarks26= ModuleBookmarks27= +ModuleBookmarks28= ModuleBookmarks3= ModuleBookmarks4= ModuleBookmarks5= @@ -47,6 +48,7 @@ ModuleBreakpoints24= ModuleBreakpoints25= ModuleBreakpoints26= ModuleBreakpoints27= +ModuleBreakpoints28= ModuleBreakpoints3= ModuleBreakpoints4= ModuleBreakpoints5= @@ -75,6 +77,7 @@ ModuleClosedNodes24= ModuleClosedNodes25= ModuleClosedNodes26= ModuleClosedNodes27= +ModuleClosedNodes28= ModuleClosedNodes3= ModuleClosedNodes4= ModuleClosedNodes5= @@ -82,6 +85,6 @@ ModuleClosedNodes6= ModuleClosedNodes7= ModuleClosedNodes8= ModuleClosedNodes9= -NavigationStack=Diseñador Visual,cliente.bal,-100,3,C_Cliente,HIST_Click,240,0,C_DetalleVenta,B4XPage_Appear,175,0,Subs,traemosCantYMonto,747,0,Subs,traeCantYMonto2,782,0,C_Cliente,B4XPage_Appear,151,6,C_Cliente,GPS_LocationChanged,175,0,B4XMainPage,B4XPage_Created,143,0,B4XMainPage,i_engrane_Click,299,0,Starter,Process_Globals,29,0,C_Principal,cargar_Click,720,0 +NavigationStack=B4XMainPage,B4XPage_Created,141,3,DBRequestManager,ExecuteCommand,54,0,C_Principal,JobDone,1164,3,C_picking,B4XPage_Appear,139,0,C_picking,Class_Globals,43,0,C_picking,mandapicking,515,6,C_picking,b_guardapicking_Click,500,1,C_Principal,trabajar_Click,432,0,C_Principal,B4XPage_Appear,386,0,C_Principal,checachek,411,6 SelectedBuild=0 -VisibleModules=1,2,15,3,4,5,6,7,8,9,25 +VisibleModules=1,2,16,3,4,5,6,7,8,9,15,26,22 diff --git a/B4A/Starter.bas b/B4A/Starter.bas index 5847470..5e24d59 100644 --- a/B4A/Starter.bas +++ b/B4A/Starter.bas @@ -32,6 +32,7 @@ Sub Process_Globals Public SharedFolder As String 'Para actualizar apk Dim cedisLocation As Location Dim reqManager As DBRequestManager +' Dim server As String = "http://11.0.0.12:1782" Dim server As String = "http://187.189.244.154:1782" ' Dim server As String = "http://11.0.0.222:1782" Dim muestraProgreso = 0 diff --git a/B4A/Subs.bas b/B4A/Subs.bas index d885002..9141cb3 100644 --- a/B4A/Subs.bas +++ b/B4A/Subs.bas @@ -206,6 +206,10 @@ Sub revisaBD 'ignore kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS bitacora(fecha INTEGER, texto TEXT)") 'Bitacora ' kmt.ExecNonQuery("DROP TABLE IF EXISTS CAT_FOLIOS") kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS REPARTO_GEO (CLIENTE TEXT, USUARIO TEXT, FECHA_PUNTEO TEXT, LATITUD TEXT, LONGITUD TEXT, ALMACEN TEXT, RUTA_REPARTO TEXT, RUTA_PREV TEXT, FECHA_PREVENTA TEXT, MOTIVO TEXT, COMENTARIO TEXT, TIPO TEXT, ENVIO TEXT)") + kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PICKING_REPARTO (HIST_PN_CODIGO_PRODUCTO TEXT, HIST_PN_NOMBRE_PRODUCTO TEXT, HIST_PN_CANT_PIEZAS_OR TEXT, HIST_PN_CANT_CAJAS_OR TEXT, HIST_PN_CANT_BLISTER_OR TEXT, HIST_PN_CANT_CAJAS TEXT, HIST_PN_CANT_PIEZAS TEXT, HIST_PN_CANT_BLISTER TEXT, ESTATUS INT)") + kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CHECAR (MOSTRAR INT)") + kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_CONVERSION(ID TEXT, NOMBRE TEXT, CAJASPIEZAS TEXT, BLISTERPIEZAS TEXT, PRECIO TEXT)") +' kmt.ExecNonQuery("DROP TABLE IF EXISTS PICKING_REPARTO") 'Tabla para la bitacora de errores If Not(errorLog.IsInitialized) Then errorLog.Initialize(Starter.ruta, "errorLog.db", True) errorLog.ExecNonQuery("CREATE TABLE IF NOT EXISTS errores(fecha INTEGER, error TEXT)")