From 9ea95e39f1c957512e67095ffbafea863253d97c Mon Sep 17 00:00:00 2001 From: Javier Date: Fri, 26 Sep 2025 13:35:27 -0600 Subject: [PATCH] v. 5.08.31 --- B4A/B4XMainPage.bas | 30 ++ B4A/C_Cliente.bas | 864 ++++++++++++++++++++++++++++++++----- B4A/C_NoVenta.bas | 162 +++++++ B4A/C_Principal.bas | 32 +- B4A/Files/cliente.bal | Bin 38461 -> 38023 bytes B4A/Files/detalleventa.bal | Bin 9210 -> 9210 bytes B4A/Files/login.bal | Bin 22025 -> 23375 bytes B4A/Files/no_venta.bal | Bin 7570 -> 8781 bytes B4A/Subs.bas | 58 +++ B4A/guna_reparto.b4a | 6 +- B4A/guna_reparto.b4a.meta | 2 +- 11 files changed, 1044 insertions(+), 110 deletions(-) diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index a1baed4..b2bfeb1 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -1273,12 +1273,17 @@ Sub Class_Globals Dim a As Cursor Dim f As Cursor Private b_abono As Button + Private cb_importarBDWA As CheckBox + Private p_importarBDWA As Panel + + Dim intentUsado As Boolean = False End Sub Public Sub Initialize ' B4XPages.GetManager.LogEvents = True End Sub + 'This event will be called once, before the page becomes visible. Private Sub B4XPage_Created (Root1 As B4XView) Root = Root1 @@ -1363,6 +1368,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) Subs.agregaColumna("kmt_info", "SECUENCIA", "INT") + Subs.agregaColumna("NOVENTA", "NV_FOTO2", "BLOB") Subs.agregaColumna("kmt_info", "CAT_CL_SALDODISPONIBLE", "TEXT") Subs.agregaColumna("kmt_info", "CAT_CL_DIASCREDITO", "INT") Subs.agregaColumna("kmt_info", "HORAENT", "TEXT") @@ -1416,6 +1422,11 @@ Private Sub B4XPage_Created (Root1 As B4XView) ' IMEN.Text = "" 'P.GetDeviceId ' IMEI = "" 'P.GetDeviceId ' End If + + 'Revisamos si se disparo el intent de cargar la base de datos desde WhatApp. + If Subs.traeUsarIntentBDWA Then + Subs.importaBDDesdeWhatsApp + End If End Sub Sub B4XPage_Appear @@ -1443,6 +1454,13 @@ Sub B4XPage_Appear usuario = c.GetString("USUARIO") End If c.Close + + cb_importarBDWA.Checked = Subs.traeUsarIntentBDWA + If user.Text.Trim = "KMTS1" Then + p_importarBDWA.Visible = True + Else + p_importarBDWA.Visible = False + End If ' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) ' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) ' If Result Then @@ -1734,6 +1752,12 @@ Private Sub i_engrane_Click ' l_server.Text = Starter.server et_server.Text = server Subs.panelVisible(p_appUpdate, 0, 0) + + If user.Text.Trim = "KMTS1" Then + p_importarBDWA.Visible = True + Else + p_importarBDWA.Visible = False + End If End Sub Private Sub B4XPage_CloseRequest As ResumableSub @@ -2202,4 +2226,10 @@ End Sub Private Sub p_appUpdate_Click +End Sub + +Private Sub cb_importarBDWA_CheckedChange(Checked As Boolean) +' LogColor($"cb_importarBDWA_CheckedChange = ${Checked}"$, Colors.Red) + Starter.skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'IMPORTAR_BD_WA'") + Starter.skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('IMPORTAR_BD_WA', '${Checked}')"$) End Sub \ No newline at end of file diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas index c05a6ce..25d0f36 100644 --- a/B4A/C_Cliente.bas +++ b/B4A/C_Cliente.bas @@ -27,6 +27,10 @@ Sub Class_Globals Dim NOMBRE As String Dim c As Cursor Dim s As Cursor + Dim limite_credito As Double + Dim banderaabono As String + + Dim ListView1 As ListView Dim la_cuenta As Label Dim La_nombre As Label @@ -174,6 +178,7 @@ End Sub Sub B4XPage_Appear banderaimp = 0 + banderaabono = 0 escreditoono = 0 Tipoentrega = "CONTADO" ' Subs.centraPanel(p_principal, Root.Width) @@ -415,6 +420,11 @@ Sub B4XPage_Appear GPS_LocationChanged(Tracker.FLP.GetLastKnownLocation) End If + Dim x1 As Cursor =Starter.skmt.ExecQuery("SELECT IFNULL(CAT_CL_LIMITECREDITO,0) AS CAT_CL_LIMITECREDITO FROM kmt_info where CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") + x1.Position = 0 + limite_credito = 0 + l_montopag.Text = x1.GetString("CAT_CL_LIMITECREDITO") + ' Dim fotomostrar As Cursor = Starter.skmt.ExecQuery("SELECT foto FROM FOTOS where CLIENTE IN (SELECT CUENTA FROM CUENTAA)") ' If fotomostrar.RowCount > 0 Then ' Dim fotomostrar1 As Cursor = Starter.skmt.ExecQuery("SELECT foto FROM FOTOS where CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND foto IS NULL") @@ -552,12 +562,15 @@ Sub gest_Click If u.RowCount > 0 Then If u.GetString("SALDO_PENDIENTE") <> 0 Then If y.RowCount > 0 Then - If u.GetString("SALDO_PENDIENTE") = y.GetString("a_abono") Then + Log(NumberFormat2(u.GetDouble("SALDO_PENDIENTE"),0,2,2,False) &" = " & NumberFormat2(y.GetDouble("a_abono"),0,2,2,False)) + If NumberFormat2(u.GetDouble("SALDO_PENDIENTE"),0,2,2,False) = NumberFormat2(y.GetDouble("a_abono"),0,2,2,False) Then checacredito Else + Log("aqui") MsgboxAsync("Para poder hacer una entrega se necesita liquidar el(los) pagare(s)","Atención") End If Else + Log("aqui") MsgboxAsync("Para poder hacer una entrega se necesita liquidar el(los) pagare(s)","Atención") End If Else If u.GetString("SALDO_PENDIENTE") = 0 Then @@ -585,6 +598,7 @@ Sub checacredito Dim x1 As Cursor =Starter.skmt.ExecQuery("SELECT IFNULL(CAT_CL_LIMITECREDITO,0) AS CAT_CL_LIMITECREDITO FROM kmt_info where CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") x1.Position = 0 + limite_credito = 0 If CREDITO = 1 And x1.GetString("CAT_CL_LIMITECREDITO") <> 0 Then '''' se debe de cambiar a si acepta o no credito, aparte de tener la bandera a credito Msgbox2Async("EL CLIENTE TIENE CREDITO DISPONIBLE, UNA VEZ SELECCIONADA UNA OPCION NO SE PODRA MODIFICAR!!!!!","Forma de pago","","Credito","Efectivo",LoadBitmap(File.DirAssets,"alert2.png"),False) Wait For Msgbox_Result (Result As Int) @@ -607,6 +621,7 @@ Sub checacredito Log(12) escreditoono = 1 ' If l_total.Text.Replace(",","") <= NumberFormat2( x1.GetString("CAT_CL_LIMITECREDITO").Replace(",",""),0,2,2,False) Then + limite_credito = x1.GetString("CAT_CL_LIMITECREDITO") esPagoACreditoGuardamosPagare'' para brincar el r Log(3) '' descomentar @@ -743,9 +758,23 @@ Sub esPagoACreditoGuardamosPagare B_IMP_Click banderaimp = 1 Else - Starter.skmt.ExecNonQuery2("INSERT INTO PAGARES (PA_ALMACEN, PA_RUTA_REP, PA_RUTAPREV, PA_FECHA_PREV, PA_CAPTURA, PA_MONTO, PA_USUARIO, PA_CLIENTE,PA_TICKET) VALUES(?,?,?,?,?,?,?,?,?) ", Array As Object (almacen,rutarep,rutaprev,fechaprev,(sDate),l_total.Text.Replace(",",""),usuario,cuenta,NOTA)) - B_IMP_Click - banderaimp = 1 + If l_total.Text.Replace(",","") <= limite_credito Then + Starter.skmt.ExecNonQuery2("INSERT INTO PAGARES (PA_ALMACEN, PA_RUTA_REP, PA_RUTAPREV, PA_FECHA_PREV, PA_CAPTURA, PA_MONTO, PA_USUARIO, PA_CLIENTE,PA_TICKET) VALUES(?,?,?,?,?,?,?,?,?) ", Array As Object (almacen,rutarep,rutaprev,fechaprev,(sDate),l_total.Text.Replace(",",""),usuario,cuenta,NOTA)) + B_IMP_Click + banderaimp = 1 + Else + Log(limite_credito) + Msgbox2Async("Se debe de realizar un pago por " & NumberFormat2((l_total.Text.Replace(",","")-limite_credito),0,2,2,False) & " por que exede el limite de credito","Atención","","Aceptar","Cancelar",LoadBitmap(File.DirAssets,"alert2.png"),False) + Wait For Msgbox_Result (Result As Int) + If Result= DialogResponse.CANCEL Then + Starter.skmt.ExecNonQuery2("INSERT INTO PAGARES (PA_ALMACEN, PA_RUTA_REP, PA_RUTAPREV, PA_FECHA_PREV, PA_CAPTURA, PA_MONTO, PA_USUARIO, PA_CLIENTE,PA_TICKET) VALUES(?,?,?,?,?,?,?,?,?) ", Array As Object (almacen,rutarep,rutaprev,fechaprev,(sDate),l_total.Text.Replace(",",""),usuario,cuenta,NOTA)) + tipo_abonox = "abono" + banderaabono = 1 + banderaimp = 1 + B_IMP_Click + End If + End If + End If End Sub @@ -1971,35 +2000,62 @@ Sub CreateListItem(mostrar As String, mostrar1 As String, mostrar2 As String) As ' Guardar referencia al label en el Tag del checkbox CheckBox1.Tag = l_folio + Return p End Sub Sub CheckBox1_CheckedChange(Checked As Boolean) - If ChangingCheckboxesProgrammatically Then Return + + + If ChangingCheckboxesProgrammatically Then Return Dim chk As CheckBox = Sender + If chk.Checked = False Then - If Checked Then - ' Obtener directamente el label desde el Tag del checkbox - Dim l_folio As Label = chk.Tag - Log("Folio seleccionado: " & l_folio.Text) - Folio = l_folio.Text - ' Indicar que estamos cambiando checkboxes programáticamente - ChangingCheckboxesProgrammatically = True - - ' Desmarcar todos los demás checkboxes - For i = 0 To clv_abonos.Size - 1 - Dim p As Panel = clv_abonos.GetPanel(i) - Dim panelCheckbox As CheckBox = GetCheckboxFromPanel(p) - - If panelCheckbox <> Null And panelCheckbox <> chk Then - panelCheckbox.Checked = False - End If - Next - - ' Restaurar flag - ChangingCheckboxesProgrammatically = False + et_abono.Text = "" End If + + If Checked Then + ' Obtener directamente el label desde el Tag del checkbox + Dim l_folio As Label = chk.Tag + + Log("Folio seleccionado: " & l_folio.Text) + Folio = l_folio.Text + ' Indicar que estamos cambiando checkboxes programáticamente + ChangingCheckboxesProgrammatically = True + + If tipo_abonox = "cxc" Then + Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(a_abono),0) AS a_abono FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) AND a_ticket = ?", Array As String(Folio)) + Log(Folio) + y.position = 0 + Dim u As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(SALDO_PENDIENTE),0) AS SALDO_PENDIENTE FROM ABONOSP WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND NOTA = ?", Array As String(Folio)) + u.Position = 0 + + et_abono.Text = u.GetDouble("SALDO_PENDIENTE") - y.GetDouble("a_abono") + Else If tipo_abonox = "abono" Then + Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(a_abono),0) AS a_abono FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) AND a_ticket = ?", Array As String(Folio)) + Log(Folio) + y.position = 0 + c = Starter.skmt.ExecQuery($"select iFNULL(sum(PA_MONTO),0) AS SALDO_PENDIENTE from PAGARES where PA_CLIENTE = '${la_cuenta.Text}'"$) + c.Position = 0 + + et_abono.Text = c.GetDouble("SALDO_PENDIENTE") - y.GetDouble("a_abono") + End If + + ' Desmarcar todos los demás checkboxes + For i = 0 To clv_abonos.Size - 1 + Dim p As Panel = clv_abonos.GetPanel(i) + Dim panelCheckbox As CheckBox = GetCheckboxFromPanel(p) + + If panelCheckbox <> Null And panelCheckbox <> chk Then + panelCheckbox.Checked = False + End If + Next + + ' Restaurar flag + ChangingCheckboxesProgrammatically = False + End If + End Sub Sub GetCheckboxFromPanel(p As Panel) As CheckBox @@ -2022,108 +2078,492 @@ End Sub Private Sub b_abono_Click ' p_abono.Visible = False If et_abono.Text <> "" Then - If almacen = 92 Then +' If almacen = 92 Then +' +' Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(a_abono),0) AS a_abono FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) AND a_ticket = ?", Array As String(Folio)) +' Log(Folio) +' y.position = 0 +' Dim u As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(SALDO_PENDIENTE),0) AS SALDO_PENDIENTE FROM ABONOSP WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND NOTA = ?", Array As String(Folio)) +' u.Position = 0 +' +' If y.GetString("a_abono") > 0 Then +' Log((u.GetString("SALDO_PENDIENTE") + y.GetString("a_abono"))) +' If et_abono.text > (u.GetString("SALDO_PENDIENTE") - y.GetString("a_abono")) Then +' MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" ) +' Else +' If et_abono.Text <> "" And et_abono.Text > 0 Then +' If itemselect <> "SELECCIONA UNA OPCION" Then +' If Folio <> "" Then +' Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True) +' Wait For Msgbox_Result (resultado As Int) +' If resultado = DialogResponse.POSITIVE Then +' imprime_abonopagare +' End If +' Else +' MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención") +' End If +' Else +' MsgboxAsync("Por favor selecciona un metodo de pago","Atención") +' End If +' End If +' End If +' Else +' +' Log("entramos aqui") +' If Folio <> "" Then +' If et_abono.text >= u.GetString("SALDO_PENDIENTE") Then +' MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" ) +' Else +' If et_abono.Text <> "" And et_abono.Text > 0 Then +' If itemselect <> "SELECCIONA UNA OPCION" Then +' +' Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True) +' Wait For Msgbox_Result (resultado As Int) +' If resultado = DialogResponse.POSITIVE Then +' imprime_abonopagare +' End If +' +' Else +' MsgboxAsync("Por favor selecciona un metodo de pago","Atención") +' End If +' End If +' End If +' Else +' MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención") +' End If +' End If +' +' Else + +' If et_abono.text > l_montoabonostotal.text Then +' MsgboxAsync("El monto a abonar no puede ser mayor que el monto total","Atención" ) +' Else +' If et_abono.Text <> "" And et_abono.Text > 0 Then +' If itemselect <> "SELECCIONA UNA OPCION" Then +' If Folio <> "" Then +' +'' Dim k As Cursor = Starter.skmt.ExecQuery("SELECT CUENTA from CUENTAA") +'' k.Position = 0 +'' Log(k.GetString("CUENTA")) +'' Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT a_abono FROM ABONOS WHERE a_cliente = ?", Array As String(k.GetString("CUENTA"))) +'' y.position = 0 +'' If y.RowCount = 0 Then +' Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True) +' Wait For Msgbox_Result (resultado As Int) +' If resultado = DialogResponse.POSITIVE Then +' imprime_abonopagare +' End If +'' Else If et_abono.Text > y.GetString("a_abono") Then +'' Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True) +'' Wait For Msgbox_Result (resultado As Int) +'' If resultado = DialogResponse.POSITIVE Then +'' imprime_abonopagare +'' End If +'' Else If et_abono.Text = y.GetString("a_abono") Then +'' p_abono.Visible = False +'' et_abono.Text = "" +'' Else If et_abono.Text < y.GetString("a_abono") Then +'' p_abono.Visible = False +'' MsgboxAsync("El pago no puede ser menor al monto capturado.","Atención") +'' et_abono.Text = "" +'' End If +' Else +' MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención") +' End If +' Else +' MsgboxAsync("Por favor selecciona un metodo de pago","Atención") +' End If +' End If +' End If + Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(a_abono),0) AS a_abono FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) AND a_ticket = ?", Array As String(Folio)) Log(Folio) y.position = 0 Dim u As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(SALDO_PENDIENTE),0) AS SALDO_PENDIENTE FROM ABONOSP WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND NOTA = ?", Array As String(Folio)) u.Position = 0 - If y.GetString("a_abono") > 0 Then - Log((u.GetString("SALDO_PENDIENTE") + y.GetString("a_abono"))) - If et_abono.text >= (u.GetString("SALDO_PENDIENTE") - y.GetString("a_abono")) Then - MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" ) - Else - If et_abono.Text <> "" And et_abono.Text > 0 Then - If itemselect <> "SELECCIONA UNA OPCION" Then - If Folio <> "" Then - Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True) - Wait For Msgbox_Result (resultado As Int) - If resultado = DialogResponse.POSITIVE Then - imprime_abonopagare + If y.GetDouble("a_abono") > 0 Then + + + If tipo_abonox = "cxc" Then + + Log((u.GetDouble("SALDO_PENDIENTE") + y.GetDouble("a_abono"))) + If et_abono.text > (u.GetDouble("SALDO_PENDIENTE") - y.GetDouble("a_abono")) Then + Log("aqui") + MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" ) + Else + If et_abono.Text <> "" And et_abono.Text > 0 Then + If itemselect <> "SELECCIONA UNA OPCION" Then + If Folio <> "" Then + Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + imprime_abonopagare + End If + Else + MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención") End If Else - MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención") + MsgboxAsync("Por favor selecciona un metodo de pago","Atención") End If - Else - MsgboxAsync("Por favor selecciona un metodo de pago","Atención") End If End If + + Else If tipo_abonox = "abono" Then + + If Folio <> "" Then + c = Starter.skmt.ExecQuery($"select iFNULL(sum(PA_MONTO),0) AS SALDO_PENDIENTE from PAGARES where PA_CLIENTE = '${la_cuenta.Text}'"$) + c.Position = 0 +' Log(c.GetString("SALDO_PENDIENTE") &" "& u.GetString("SALDO_PENDIENTE")) + If et_abono.text > (c.GetDouble("SALDO_PENDIENTE") - y.GetDouble("a_abono")) Then + Log("aqui") + MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" ) + Else + If et_abono.Text <> "" And et_abono.Text > 0 Then + If itemselect <> "SELECCIONA UNA OPCION" Then + + Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + imprime_abonopagare + End If + + Else + MsgboxAsync("Por favor selecciona un metodo de pago","Atención") + End If + End If + End If + Else + MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención") + End If + End If + + Else Log("entramos aqui") - If Folio <> "" Then - If et_abono.text >= u.GetString("SALDO_PENDIENTE") Then - MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" ) - Else - If et_abono.Text <> "" And et_abono.Text > 0 Then - If itemselect <> "SELECCIONA UNA OPCION" Then + If tipo_abonox = "cxc" Then + If Folio <> "" Then + If et_abono.text > u.GetDouble("SALDO_PENDIENTE") Then + Log("aqui") + MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" ) + Else + If et_abono.Text <> "" And et_abono.Text > 0 Then + If itemselect <> "SELECCIONA UNA OPCION" Then - Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True) - Wait For Msgbox_Result (resultado As Int) - If resultado = DialogResponse.POSITIVE Then - imprime_abonopagare + Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + imprime_abonopagare + End If + + Else + MsgboxAsync("Por favor selecciona un metodo de pago","Atención") End If - - Else - MsgboxAsync("Por favor selecciona un metodo de pago","Atención") - End If - End If - End If - Else - MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención") - End If - End If - - Else - - If et_abono.text > l_montoabonostotal.text Then - MsgboxAsync("El monto a abonar no puede ser mayor que el monto total","Atención" ) - Else - If et_abono.Text <> "" And et_abono.Text > 0 Then - If itemselect <> "SELECCIONA UNA OPCION" Then - If Folio <> "" Then - -' Dim k As Cursor = Starter.skmt.ExecQuery("SELECT CUENTA from CUENTAA") -' k.Position = 0 -' Log(k.GetString("CUENTA")) -' Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT a_abono FROM ABONOS WHERE a_cliente = ?", Array As String(k.GetString("CUENTA"))) -' y.position = 0 -' If y.RowCount = 0 Then - Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True) - Wait For Msgbox_Result (resultado As Int) - If resultado = DialogResponse.POSITIVE Then - imprime_abonopagare End If -' Else If et_abono.Text > y.GetString("a_abono") Then -' Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True) -' Wait For Msgbox_Result (resultado As Int) -' If resultado = DialogResponse.POSITIVE Then -' imprime_abonopagare -' End If -' Else If et_abono.Text = y.GetString("a_abono") Then -' p_abono.Visible = False -' et_abono.Text = "" -' Else If et_abono.Text < y.GetString("a_abono") Then -' p_abono.Visible = False -' MsgboxAsync("El pago no puede ser menor al monto capturado.","Atención") -' et_abono.Text = "" -' End If - Else - MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención") End If Else - MsgboxAsync("Por favor selecciona un metodo de pago","Atención") + MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención") + End If + Else If tipo_abonox = "abono" Then + + '''checar + + If Folio <> "" Then + c = Starter.skmt.ExecQuery($"select iFNULL(sum(PA_MONTO),0) AS SALDO_PENDIENTE from PAGARES where PA_CLIENTE = '${la_cuenta.Text}'"$) + c.Position = 0 +' Log(c.GetString("SALDO_PENDIENTE") &" "& u.GetString("SALDO_PENDIENTE")) + If et_abono.text > c.GetDouble("SALDO_PENDIENTE") Then + Log("aqui") + MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" ) + Else + If et_abono.Text <> "" And et_abono.Text > 0 Then + If itemselect <> "SELECCIONA UNA OPCION" Then + + Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + imprime_abonopagare + End If + + Else + MsgboxAsync("Por favor selecciona un metodo de pago","Atención") + End If + End If + End If + Else + MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención") End If End If + End If - End If + + +' End If End If ime.HideKeyboard End Sub +Sub imprime_abonopagare2 + c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + DateTime.DateFormat = "MM/dd/yyyy" + DateTime.TimeFormat = "HH:mm:ss" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c.Close +' ProgressDialogShow("Imprimiendo, un momento ...") +' Printer1.DisConnect +' If Not(Printer1.IsConnected) Then +' Log("Conectando a impresora ...") +' Printer1.Connect +' Private cont As Int = 0 +' Do While Not(impresoraConectada) +' Sleep(1000) +' Log("++++++ " & cont) +' cont = cont + 1 +' If cont = 2 Then Printer1.Connect 'Tratamos de reconectar +' If cont > 3 Then impresoraConectada = True +' Loop +' Sleep(500) +' impresoraConectada = False +' Else +' Log("conectando 2") +' Printer1.Connect +' Private cont As Int = 0 +' Do While Not(impresoraConectada) Or Not(Printer1.IsConnected) +' Sleep(1000) +' Log("****** " & cont) +' cont = cont + 1 +' If cont = 2 Then Printer1.Connect +' If cont > 3 Then impresoraConectada = True +' Loop +' Sleep(500) +' impresoraConectada = False +' End If + + ProgressDialogShow("Imprimiendo, un momento ...") + Printer1.DisConnect + If Not(Printer1.IsConnected) Then +' If logger Then Log("conectando 1") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) + Sleep(1000) + cont = cont + 1 + If cont = 7 Then Printer1.Connect 'Tratamos de reconectar + If cont > 15 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + Else +' If logger Then Log("conectando 2") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) Or Not(Printer1.IsConnected) + Sleep(1000) + cont = cont + 1 + If cont = 2 Then Printer1.Connect + If cont > 4 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + End If + TAMANO = 0 + ESPACIO = 22 + BLANCO = " " + Dim bmp As Bitmap + bmp.InitializeResize(File.DirAssets, "logo-guna-18.jpg", 192, 192, True) 'ignore + Dim myimage As AnImage = Printer1.ImageToBWIMage(bmp) + myimage = Printer1.DitherImage2D(myimage, 128) + myimage= Printer1.PackImage(myimage) + Printer1.WriteString(CRLF) ' nudge the printer to show the user something is happening + Printer1.WriteString(Printer1.REVERSE) + Printer1.PrintImage(myimage) + Printer1.WriteString(Printer1.UNREVERSE) + Dim telefono As String = "" + Dim c7 As Cursor = Starter.skmt.ExecQuery("select IFNULL(CAT_CL_TELEFONO,' ') AS CAT_CL_TELEFONO FROM kmt_info WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") + If c7.RowCount > 0 Then + c7.Position = 0 + telefono = c7.GetString("CAT_CL_TELEFONO") + End If + c7.Close + + + + Printer1.WriteString("DISTRIBUIDORA ROCHA TULA PACHUCA" & CRLF) +' Printer1.WriteString(sucursal & CRLF) + Printer1.WriteString(sDate & CRLF) + Printer1.WriteString(sTime & CRLF) + Printer1.WriteString("Reparto:" & usuario & CRLF) + Printer1.WriteString("Tienda: " & La_nombre.Text & CRLF) + Printer1.WriteString("ID.Cliente: " & la_cuenta.Text & CRLF) + Printer1.WriteString("Calle: " & la_Calle.Text & CRLF) + Printer1.WriteString("Colonia: " & la_col.Text & CRLF) + Printer1.WriteString("Telefono: " & telefono & CRLF) + Printer1.WriteString(" " & CRLF) + Dim notaabono As String + Dim saldopendiente As Double + Dim saldopendiente2 As Double + + If tipo_abonox = "abono" Then + + + c = Starter.skmt.ExecQuery($"select distinct hvd_num_ticket from hist_ventas where hvd_cliente = '${la_cuenta.Text}' and HVD_PRONOMBRE <> 'Cobranza Pendiente' "$) + If c.RowCount > 0 Then + c.Position = 0 + notaabono = c.GetString("HVD_NUM_TICKET") + End If + c.Close + + c = Starter.skmt.ExecQuery($"select iFNULL(sum(PA_MONTO),0) AS SALDO_PENDIENTE from PAGARES where PA_CLIENTE = '${la_cuenta.Text}'"$) + If c.RowCount > 0 Then + c.Position = 0 + saldopendiente = c.GetDouble("SALDO_PENDIENTE") + Log(c.GetString("SALDO_PENDIENTE")) + End If + c.Close + + + Dim saldopendiente1 As Double = 0 + Dim c4 As Cursor= Starter.skmt.ExecQuery("SELECT Ifnull(SUM(a_abono),0) AS SALDO_PENDIENTE FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) and a_tipoabono is not null") + If c4.RowCount > 0 Then + c4.Position = 0 + Dim c5 As Cursor= Starter.skmt.ExecQuery("SELECT Ifnull(a_abono,0) AS SALDO_PENDIENTE FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) and a_tipoabono is not null") + saldopendiente1 = c4.GetDouble("SALDO_PENDIENTE") + + + End If + c4.Close + + Else If tipo_abonox = "cxc" Then + c = Starter.skmt.ExecQuery("SELECT NOTA, SUM(SALDO_PENDIENTE) AS SALDO_PENDIENTE FROM ABONOSP WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + If c.RowCount > 0 Then + c.Position = 0 + notaabono = c.GetString("NOTA") + saldopendiente = c.GetDouble("SALDO_PENDIENTE") + End If + c.Close + + Dim saldopendiente1 As Double = 0 + Dim c4 As Cursor= Starter.skmt.ExecQuery("SELECT Ifnull(SUM(a_abono),0) AS SALDO_PENDIENTE FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) and a_tipoabono is null") + If c4.RowCount > 0 Then + c4.Position = 0 + Dim c5 As Cursor= Starter.skmt.ExecQuery("SELECT Ifnull(a_abono,0) AS SALDO_PENDIENTE FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) and a_tipoabono is null") + saldopendiente1 = c4.GetDouble("SALDO_PENDIENTE") + End If + c4.Close + + + c = Starter.skmt.ExecQuery2("SELECT SUM(SALDO_PENDIENTE) AS SALDO_PENDIENTE FROM ABONOSP WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND NOTA = ?",Array As String(Folio)) + If c.RowCount > 0 Then + c.Position = 0 + saldopendiente2 = c.GetDouble("SALDO_PENDIENTE") + End If + c.Close + + Dim saldopendiente3 As Double = 0 + Dim c4 As Cursor= Starter.skmt.ExecQuery2("SELECT Ifnull(SUM(a_abono),0) AS SALDO_PENDIENTE FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) and a_tipoabono is null AND a_ticket = ?",Array As String(Folio)) + If c4.RowCount > 0 Then + c4.Position = 0 +' Dim c5 As Cursor= Starter.skmt.ExecQuery("SELECT Ifnull(a_abono,0) AS SALDO_PENDIENTE FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) and a_tipoabono is null") + saldopendiente3 = c4.GetDouble("SALDO_PENDIENTE") + End If + c4.Close + + End If + + + +' c = Starter.skmt.ExecQuery("SELECT NOTA FROM ABONOSP WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA)") +' If c.RowCount > 0 Then +' c.Position = 0 +' notaabono = c.GetString("NOTA") +' End If + Dim numpago As Int = c5.RowCount + 1 + Log(notaabono) + Log(et_abono.Text) + Printer1.WriteString("Comprobante de pago del pagare" & CRLF) + Printer1.WriteString("Folio: " & NOTA &"-"&(numpago)& CRLF) + Printer1.WriteString("Monto deuda: " & (NumberFormat2(l_total.Text.Replace(",",""),0,2,2,False)) & CRLF) + Printer1.WriteString("Monto abono: " & (NumberFormat2((l_total.Text.Replace(",","")-limite_credito),0,2,2,False)) & CRLF) + Printer1.WriteString("Restante "&NOTA&": " &(NumberFormat(limite_credito,0,2)) & CRLF) + Printer1.WriteString("Fecha Abono: " & sDate & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString("------------------------------" & CRLF) + Printer1.WriteString("-------------FIRMA------------" & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + DateTime.DateFormat = "ddMMyyyy" + sDate=DateTime.Date(DateTime.Now) + itemselect = "EFECTIVO" + +' Items.Add("TRANSFERENCIA") +' Items.Add("EFECTIVO") +' Items.Add("CHEQUE") + Dim tipopagotick As String = "" + If itemselect = "TRANSFERENCIA" Then + tipopagotick = "T" + Else If itemselect = "EFECTIVO" Then + tipopagotick = "E" + Else If itemselect = "CHEQUE" Then + tipopagotick = "C" + End If + + Printer1.WriteBarCode("I",NOTA&sDate&tipopagotick&numpago) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + Sleep(1000) + Printer1.DisConnect + ProgressDialogHide + + +' Msgbox2Async("Deseas imprimir de nuevo el ticket?", "ATENCION","SI","", "NO",LoadBitmap(File.DirAssets,"alert2.png"), False) +' +' Wait For Msgbox_Result (resultado As Int) +' If resultado = DialogResponse.POSITIVE Then +' imprime_abonopagare +' Else +' p_abono.Visible = False +' Starter.skmt.ExecNonQuery($"INSERT INTO ABONOS(a_usuario, a_ruta, a_cliente, a_abono, a_fecha,a_tipoabono,TIPO_PAGO,a_ticket,a_numpago) VALUES ('${Subs.traeUsuarioDeBD}', '${Subs.traeRuta(Subs.traeCliente)}', '${Subs.traeCliente}' ,'${NumberFormat2((l_total.Text.Replace(",","")-limite_credito),0,2,2,False) }', '${Subs.fechaKMT(DateTime.now)}', 1,'${itemselect}','${Folio}','${numpago}')"$) +' ToastMessageShow("Abono guardado", False) +' End If + + If banderaimp = 1 Then + Msgbox2Async("Deseas imprimir de nuevo el abono?", "ATENCION","SI","", "NO",LoadBitmap(File.DirAssets,"alert2.png"), False) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + imprime_abonopagare2 + Else + Starter.skmt.ExecNonQuery($"INSERT INTO ABONOS(a_usuario, a_ruta, a_cliente, a_abono, a_fecha,a_tipoabono,TIPO_PAGO,a_ticket,a_numpago) VALUES ('${Subs.traeUsuarioDeBD}', '${Subs.traeRuta(Subs.traeCliente)}', '${Subs.traeCliente}' ,'${NumberFormat2((l_total.Text.Replace(",","")-limite_credito),0,2,2,False) }', '${Subs.fechaKMT(DateTime.now)}', 1,'EFECTIVO','${NOTA}','${numpago}')"$) + ToastMessageShow("Abono guardado", False) + Guardado + End If +' printer.Flush + ' printer.Close + Else If banderaimp = 0 Then + Msgbox2Async("Deseas imprimir de nuevo el PAGARE?", "ATENCION","SI","", "NO",LoadBitmap(File.DirAssets,"alert2.png"), False) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + imprime_abonopagare2 + End If + End If + + + +End Sub + 'Sub hazpago ' h = Starter.skmt.ExecQuery("SELECT CUENTA from CUENTAA") ' h.Position = 0 @@ -2250,7 +2690,7 @@ Sub imprime_abonopagare If tipo_abonox = "abono" Then - c = Starter.skmt.ExecQuery($"select distinct hvd_num_ticket from hist_ventas where hvd_cliente = '${la_cuenta.Text}'"$) + c = Starter.skmt.ExecQuery($"select distinct hvd_num_ticket from hist_ventas where hvd_cliente = '${la_cuenta.Text}' and HVD_PRONOMBRE <> 'Cobranza Pendiente' "$) If c.RowCount > 0 Then c.Position = 0 notaabono = c.GetString("HVD_NUM_TICKET") @@ -2933,7 +3373,11 @@ Sub imprime_pagare If resultado = DialogResponse.POSITIVE Then imprime_pagare Else - Guardado + If banderaabono = 1 Then + imprime_abonopagare2 + Else + Guardado + End If End If ' printer.Flush ' printer.Close @@ -3765,4 +4209,222 @@ Private Sub l_telefono_LongClick As ResumableSub End If Return True +End Sub + +Private Sub HIST_LongClick + c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c.Close +' ProgressDialogShow("Imprimiendo, un momento ...") +' Printer1.DisConnect +' If Not(Printer1.IsConnected) Then + '' Log("Conectando a impresora ...") +' Printer1.Connect +' Private cont As Int = 0 +' Do While Not(impresoraConectada) +' Sleep(1000) + '' Log("++++++ " & cont) +' cont = cont + 1 +' If cont = 2 Then Printer1.Connect 'Tratamos de reconectar +' If cont > 3 Then impresoraConectada = True +' Loop +' Sleep(500) +' impresoraConectada = False +' Else + '' Log("conectando 2") +' Printer1.Connect +' Private cont As Int = 0 +' Do While Not(impresoraConectada) Or Not(Printer1.IsConnected) +' Sleep(1000) + '' Log("****** " & cont) +' cont = cont + 1 +' If cont = 2 Then Printer1.Connect +' If cont > 3 Then impresoraConectada = True +' Loop +' Sleep(500) +' impresoraConectada = False +' End If + + ProgressDialogShow("Imprimiendo, un momento ...") + Printer1.DisConnect + If Not(Printer1.IsConnected) Then +' If logger Then Log("conectando 1") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) + Sleep(1000) + cont = cont + 1 + If cont = 7 Then Printer1.Connect 'Tratamos de reconectar + If cont > 15 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + Else +' If logger Then Log("conectando 2") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) Or Not(Printer1.IsConnected) + Sleep(1000) + cont = cont + 1 + If cont = 2 Then Printer1.Connect + If cont > 4 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + End If + TAMANO = 0 + ESPACIO = 28 + BLANCO = " " + Dim Ticket As String = 0 + Dim c6 As Cursor = Starter.skmt.ExecQuery("select distinct HVD_NUM_TICKET FROM HIST_VENTAS WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + If c6.RowCount > 0 Then + c6.Position = 0 + Ticket = c6.GetString("HVD_NUM_TICKET") + End If + c6.Close + DateTime.DateFormat = "dd/MM/yyyy" + DateTime.TimeFormat = "HH:mm:ss" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + Printer1.WriteString("Tienda: " & B4XPages.MainPage.cliente.La_nombre.Text & CRLF) + Printer1.WriteString("ID.Cliente: " & B4XPages.MainPage.cliente.la_cuenta.Text & CRLF) + Printer1.WriteString("Num. Ticket: " & Ticket & CRLF) + Printer1.WriteString("Fecha: " & sDate &" " & sTime & CRLF) + Printer1.WriteString("------------------------------" & CRLF) + c = Starter.skmt.ExecQuery("SELECT * FROM HIST_VENTAS WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + If c.RowCount > 0 Then + Printer1.WriteString("------------Picking------------" & CRLF) + Printer1.WriteString("------------------------------" & CRLF) + Printer1.WriteString("ESTE NO ES UN TICKET DE ENTREGA" & CRLF) + Printer1.WriteString("SOLO ES INFORMATIVO" & CRLF) + Printer1.WriteString("------------------------------" & CRLF) + Printer1.WriteString(" " & CRLF) + ' aqui es donde esta el pedo de julieta de los descuentos quitar el precio2 pero meter un if para saber si es ruta especial o es normal o que show. + s=Starter.skmt.ExecQuery($"select HVD_PRONOMBRE, HVD_CANT, length(HVD_CANT) as L_CANT, HVD_COSTO_TOT, length(HVD_COSTO_TOT) as L_COSTOU,HVD_PROID, HVD_CODPROMO,IFNULL(HVD_RECHAZOCANT,0) AS HVD_RECHAZOCANT, HVD_RECHAZO FROM HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) order by HVD_PROID"$) + If S.RowCount>0 Then + For i=0 To S.RowCount -1 + S.Position=i + Log(s.GetString("HVD_RECHAZO")) + If s.GetString("HVD_CANT") - s.GetString("HVD_RECHAZOCANT") > 0 Then + If s.GetString("HVD_CODPROMO") = Subs.traeAlmacen Then + Printer1.Justify = 0 + Printer1.WriteString((s.GetString("HVD_CANT") - s.GetString("HVD_RECHAZOCANT") )&" "&s.GetString("HVD_PRONOMBRE") & CRLF) + + +' Dim punit As String = NumberFormat2((s.GETSTRING("HVD_COSTO_TOT")/s.GetString("HVD_CANT")),0,2,2,False) +' TAMANO = punit.Length + TAMANO + ' + '' Private ptot As String = NumberFormat2((punit*s.GetString("HVD_CANT")),0,2,2,False) +' Private ptot As String = NumberFormat2(( (s.GetString("HVD_CANT") - s.GetString("HVD_RECHAZOCANT")) * punit ),0,2,2,False) +' TAMANO = ptot.Length + TAMANO +' +' ESPACIO = (ESPACIO - TAMANO)/2 + '' Log(ESPACIO) +' For E=0 To ESPACIO -1 +' BLANCO = " " & BLANCO +' Next +' Printer1.Justify = 0 +' Printer1.WriteString( (s.GetString("HVD_CANT") - s.GetString("HVD_RECHAZOCANT"))& BLANCO) +' Printer1.Justify = 1 +' Printer1.WriteString( punit & BLANCO) +' Printer1.Justify = 2 +' Printer1.WriteString( ptot & CRLF ) +' TAMANO = 0 +' ESPACIO = 29 +' BLANCO = " " + Else If s.GetString("HVD_RECHAZO") = 1 Then + Printer1.Justify = 0 + Printer1.WriteString((s.GetString("HVD_CANT") - s.GetString("HVD_RECHAZOCANT")) &" "&s.GetString("HVD_PRONOMBRE") & CRLF) + +' Private vc5 As Cursor = Starter.skmt.ExecQuery($"select iFNULL(CAT_GP_PRECIO,0) AS CAT_GP_PRECIO from CAT_GUNAPROD where CAT_GP_ID = '${s.GetString("HVD_PROID")}'"$) +' vc5.Position = 0 +' Dim punit As String = NumberFormat2((vc5.GetString("CAT_GP_PRECIO")),0,2,2,False) +' TAMANO = punit.Length + TAMANO +' vc5.Close +' +' Private ptot As String = NumberFormat2(( (s.GetString("HVD_CANT") - s.GetString("HVD_RECHAZOCANT")) * punit ),0,2,2,False) +' TAMANO = ptot.Length + TAMANO +' +' ESPACIO = (ESPACIO - TAMANO)/2 + '' Log(ESPACIO) +' For E=0 To ESPACIO -1 +' BLANCO = " " & BLANCO +' Next +' Printer1.Justify = 0 +' Printer1.WriteString( (s.GetString("HVD_CANT") - s.GetString("HVD_RECHAZOCANT"))& BLANCO) +' Printer1.Justify = 1 +' Printer1.WriteString( punit & BLANCO) +' Printer1.Justify = 2 +' Printer1.WriteString(ptot& CRLF ) +' TAMANO = 0 +' ESPACIO = 29 +' BLANCO = " " + Printer1.Justify = 0 + End If + End If + Next + End If + End If + Printer1.Justify = 0 + s.Close + Printer1.WriteString(" " & CRLF) + s=Starter.skmt.ExecQuery($"select HVD_PRONOMBRE, HVD_CANT, length(HVD_CANT) as L_CANT, HVD_COSTO_TOT, length(HVD_COSTO_TOT) as L_COSTOU,HVD_PROID, HVD_CODPROMO,IFNULL(HVD_RECHAZOCANT,0) AS HVD_RECHAZOCANT FROM HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) AND HVD_RECHAZO = 0 AND HVD_CODPROMO <> '${Subs.traeAlmacen}' AND HVD_PRONOMBRE <> 'Cobranza Pendiente' order by HVD_CODPROMO, ESPROMO DESC, HVD_PROID"$) + + If S.RowCount>0 Then + Printer1.WriteString("-------PROMOS ENTREGA--------" & CRLF) + Printer1.WriteString("Cant. Precio Importe" & CRLF) + Printer1.WriteString("------------------------------" & CRLF) + + For i=0 To S.RowCount -1 + S.Position=i + If s.GetString("HVD_CANT") - s.GetString("HVD_RECHAZOCANT") > 0 Then + If s.GetString("HVD_CODPROMO") <> Subs.traeAlmacen Then + Printer1.Justify = 0 + If s.GetString("HVD_CODPROMO") = s.GetString("HVD_PROID") Then + Printer1.WriteString("* "&s.GetString("HVD_PRONOMBRE") & CRLF) + Else + Printer1.WriteString((s.GetString("HVD_CANT") - s.GetString("HVD_RECHAZOCANT"))&" "&s.GetString("HVD_PRONOMBRE") & CRLF) + End If +' Dim punit As String =NumberFormat2((s.GETSTRING("HVD_COSTO_TOT")/s.GetString("HVD_CANT")),0,2,2,False) +' TAMANO = punit.Length + TAMANO + ' +' Private ptot As String = NumberFormat2((punit*s.GetString("HVD_CANT")),0,2,2,False) +' TAMANO = ptot.Length + TAMANO +' ESPACIO = (ESPACIO - TAMANO)/2 +' Log(ESPACIO) +' For E=0 To ESPACIO -1 +' BLANCO = " " & BLANCO +' Next +' Printer1.Justify = 0 +' Printer1.WriteString( (s.GetString("HVD_CANT") - s.GetString("HVD_RECHAZOCANT"))& BLANCO) +' Printer1.Justify = 1 +' Printer1.WriteString( punit & BLANCO) +' Printer1.Justify = 2 +' Printer1.WriteString(ptot & CRLF ) +' TAMANO = 0 +' ESPACIO = 29 +' BLANCO = " " + Printer1.Justify = 0 + Else + End If + End If + Next + End If + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString("------------------------------" & CRLF) + Printer1.WriteString("ESTE NO ES UN TICKET DE ENTREGA" & CRLF) + Printer1.WriteString("SOLO ES INFORMATIVO" & CRLF) + Printer1.WriteString("------------------------------" & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + Printer1.WriteString(" " & CRLF) + Sleep(1000) + Printer1.DisConnect + ProgressDialogHide +' Guardado End Sub \ No newline at end of file diff --git a/B4A/C_NoVenta.bas b/B4A/C_NoVenta.bas index 706b91f..ee41537 100644 --- a/B4A/C_NoVenta.bas +++ b/B4A/C_NoVenta.bas @@ -26,6 +26,15 @@ Sub Class_Globals Dim reqManager As DBRequestManager Private cb_reprogramar As CheckBox Dim reprogramar As Int = 0 + + Private camEx As CameraExClass + Dim frontCamera As Boolean = False + Private p_cam As Panel + Dim nombrefoto As String = "0" + Private p_camara As Panel + Private teclado As IME + Dim fototomada As String + Private b_foto As Button End Sub 'You can add more parameters here. @@ -52,6 +61,10 @@ Sub B4XPage_Appear r_4.Checked = False cb_reprogramar.Checked = False + p_camara.Width = Root.Width + p_camara.Height = Root.Height + p_camara.Visible = False + CallSubDelayed(Tracker, "Track") CallSubDelayed(Tracker, "StartFLPSmall") If Tracker.FLP.IsInitialized And Tracker.FLP.GetLastKnownLocation.IsInitialized Then 'Si tenemos "UltimaUbicaccionConocida" la usamos. @@ -62,6 +75,11 @@ Sub B4XPage_Appear End If End Sub + + + + + Sub GPS_LocationChanged (Location1 As Location) ' LogColor($"Entrando a Cliente.GPS_LocationChanged"$, Colors.red) If Tracker.FLP.GetLastKnownLocation.IsInitialized And Tracker.FLP.GetLastKnownLocation.Latitude <> 0 Then @@ -265,4 +283,148 @@ Private Sub cb_reprogramar_CheckedChange(Checked As Boolean) Else reprogramar = 0 End If +End Sub + +Private Sub InitializeCamera2 + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA) + Wait For B4XPage_PermissionResult (Permission As String, resultC As Boolean) + If resultC Then + camEx.Initialize(p_cam, frontCamera, Me, "Camera1") + frontCamera = camEx.Front + Log("inicializamos Camara") + Else + ToastMessageShow("No permission Camara!!!", True) + End If +End Sub + +Sub Camera1_Ready (Success As Boolean) + Log("Camara ready") + If Success Then + camEx.SetJpegQuality(90) + camEx.SetContinuousAutoFocus + camEx.CommitParameters + camEx.StartPreview + Log(camEx.GetPreviewSize) + Else + ToastMessageShow("Cannot open camera.", True) + Log("Cannot open camera") + End If +End Sub + +Sub Camera1_PictureTaken (Data()As Byte) + + DateTime.DateFormat="ddMMyyyyHHmmss" + nombrefoto = DateTime.Now & "_FOTO1.png" + teclado.HideKeyboard + fototomada = nombrefoto + + + Log("tome foto") + Dim filename As String = fototomada + Dim Dirp As String = File.DirInternal + Dim Dir As String + Dim Dir2 As String + Try + File.MakeDir(Dirp,"/md") + Dir = "/md" + Log("creado en promotoria " & Dirp & Dir) + Catch + Dir = "" + Log("creado en raiz") + End Try + + Try + File.MakeDir(Dirp & Dir,"/reduccion") + Dir2 = "/reduccion" + Log("creado en promotoria " & Dirp & Dir & Dir2) + Catch + Dir = "" + Log("creado en raiz") + End Try + + camEx.SavePictureToFile(Data, Dirp&Dir, filename) + camEx.StartPreview 'restart preview +' ToastMessageShow("Picture saved." & CRLF & "File size: " & File.Size(Dir, filename) & Dir &"," & filename, True) + Log("Picture saved." & CRLF & "File size: " & File.Size(Dir, filename) & Dir &"," & filename) + + + Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 225, 300, True) + Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False) + img.WriteToStream(out, 100, "PNG") +' foto4 = File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto3) + + out.Close + + + + + + motivo = "CERRADO" + DateTime.DateFormat = "MM/dd/yyyy" + DateTime.TimeFormat="HHmmss" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=Starter.skmt.ExecQuery("select CUENTA from cuentaa") + c.Position = 0 + cuenta = c.GetString("CUENTA") + c=Starter.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + Dim rutaactualizar As String + Dim rut As Cursor = Starter.skmt.ExecQuery("SELECT CAT_CL_RUTA FROM kmt_info WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") + If rut.RowCount > 0 Then + rut.Position = 0 + rutaactualizar = rut.GetString("CAT_CL_RUTA") + End If + Starter.skmt.ExecNonQuery($"DELETE FROM NOVENTA WHERE NV_CLIENTE IN (select cuenta from cuentaa)"$) + Starter.skmt.ExecNonQuery2("INSERT INTO NOVENTA (NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON,NV_RUTA,NV_REPROGRAMAR,NV_FOTO) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object (cuenta,sDate & sTime, usuario, motivo,e_comm.text, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps,rutaactualizar,reprogramar,File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto))) + Starter.skmt.ExecNonQuery($"UPDATE kmt_info set gestion = 3, HORAENT = '${sDate & " " & sTime}' where CAT_CL_CODIGO In (select cuenta from cuentaa) and CAT_CL_RUTA = '${rutaactualizar}'"$) + Starter.skmt.ExecNonQuery("DELETE FROM PEDIDO WHERE PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + Starter.skmt.ExecNonQuery("update HIST_VENTAS SET HVD_RECHAZO = 1, HVD_RECHAZOCANT = HVD_CANT, HVD_RECHAZOCANTC = CANTC, BCAJAS = 0 , CANTC = 0 WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + Starter.skmt.ExecNonQuery($"update HIST_VENTAS set HVD_RECHAZO = 2, HVD_RECHAZOCANT = HVD_RECHAZOCANT WHERE HVD_PROID = HVD_CODPROMO and HVD_CLIENTE in (Select CUENTA from cuentaa)"$) + + p_camara.Visible = False + StopCamera2 + B4XPages.ShowPage("Principal") + +End Sub + +Private Sub p_camara_Click + +End Sub + +Private Sub b_foto_Click + + camEx.TakePicture + p_camara.Visible = False + +End Sub + +Private Sub StopCamera2 +' Capturing = False + If camEx.IsInitialized Then + camEx.Release + End If +End Sub + +Private Sub r_1_CheckedChange(Checked As Boolean) + InitializeCamera2 + p_camara.Visible = True + Subs.centraPanel(p_cam,p_camara.Width) + + p_camara.BringToFront +End Sub + + + +Private Sub B4XPage_CloseRequest As ResumableSub + If p_camara.Visible Then + p_camara.Visible = False + StopCamera2 + r_1.Checked = False + Else + B4XPages.ShowPage("Cliente") + End If + Return False End Sub \ No newline at end of file diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index a68e12c..0a435f5 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -857,16 +857,16 @@ End Sub Sub envioinfo ' NOVENTA - c = Starter.skmt.ExecQuery("SELECT NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON, NV_FOTO, NV_REPROGRAMAR FROM NOVENTA") + c = Starter.skmt.ExecQuery("SELECT NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON, NV_FOTO,NV_FOTO2, NV_REPROGRAMAR FROM NOVENTA") D=Starter.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS_NOVENTA FROM NOVENTA") If c.RowCount>0 Then For i=0 To c.RowCount -1 c.Position=i - foto1 = c.GetBlob("NV_FOTO") + Dim fotoenvio() As Byte = C.GetBlob("NV_FOTO2") Dim cmd As DBCommand cmd.Initialize - cmd.Name = "insert_reparto_REPG_GUNA_VN" - cmd.Parameters = Array As Object(C.GetString("NV_CLIENTE"),C.GetString("NV_FECHA"),C.GetString("NV_USER"),C.GetString("NV_MOTIVO"),C.GetString("NV_COMM"),C.GetString("NV_LAT"),C.GetString("NV_LON"), ALMACEN, l_ruta.Text, C.GetString("NV_REPROGRAMAR")) + cmd.Name = "insert_reparto_REPG_GUNA_VN2" + cmd.Parameters = Array As Object(C.GetString("NV_CLIENTE"),C.GetString("NV_FECHA"),C.GetString("NV_USER"),C.GetString("NV_MOTIVO"),C.GetString("NV_COMM"),C.GetString("NV_LAT"),C.GetString("NV_LON"), ALMACEN, l_ruta.Text, C.GetString("NV_REPROGRAMAR"),fotoenvio) reqManager.ExecuteCommand(cmd , "inst_noventa_") Next c.Close @@ -1956,7 +1956,7 @@ Sub connecta_Click Dim cmd As DBCommand cmd.Initialize cmd.Name = "select_ruta_re_REPG_GUNA_VN" - cmd.Parameters = Array As Object(ALMACEN, e_ruta.text, imei) + cmd.Parameters = Array As Object() ' Log($"${ALMACEN}, ${e_ruta.text}, ${imei}"$) reqManager.ExecuteQuery(cmd , 0, "ruta") ToastMessageShow("Validando Conexión." , True) @@ -2861,4 +2861,26 @@ Sub StartPrinter cmp20.Connect(PairedDevices.Get(L1.Get(resimp))) End If End If +End Sub + +Private Sub ImageView1_LongClick + ' NOVENTA + c = Starter.skmt.ExecQuery("SELECT NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON, NV_FOTO,NV_FOTO2, NV_REPROGRAMAR FROM NOVENTA") + D=Starter.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS_NOVENTA FROM NOVENTA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + + Dim fotoenvia() As Byte = c.GetBlob("NV_FOTO") + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_reparto_REPG_GUNA_VN2" + cmd.Parameters = Array As Object(C.GetString("NV_CLIENTE"),C.GetString("NV_FECHA"),C.GetString("NV_USER"),C.GetString("NV_MOTIVO"),C.GetString("NV_COMM"),C.GetString("NV_LAT"),C.GetString("NV_LON"), ALMACEN, l_ruta.Text,fotoenvia) + reqManager.ExecuteCommand(cmd , "inst_noventa_") + Next + c.Close + End If + d.Position=0 + cuantos_noventa = D.GetString("CUANTOS_NOVENTA") + d.Close End Sub \ No newline at end of file diff --git a/B4A/Files/cliente.bal b/B4A/Files/cliente.bal index a4784af97c8879a6c39515e0b8a6c8f946700cc5..10fa1842d6001a28603b148a81fb047f51999b96 100644 GIT binary patch delta 2542 zcma)7dr*{B6yLML!nY}`3%(YJ&Ct;S(d8v7Xp3QkqAZ9{)D`r@P!`Y-UnGK<4}@gS z@K4TO`%ay4XU^TVeBa4h z`R0A{KJGG^Y=Iz?Dd~S+U7sa#X@lHT4oT8hw{Ce+FVeb^Od&}mnMyLv2`4#WgA-16 z!YNL8x)V-y!ZV!kOa~5=&2l`*W;@|IPI#^pPLuSWu>hV@k#N^@cw&|*D__(uS|KjZ z%Fi7uCt_GQ%QV|)%FW5o%}ZaxbrD#j4(uQKhQlIeii@}@3U8?W=Zsdc7{-bEX{lTr z&7adV#Oz2`z|`FQ^lWYzD>d@db zDJ;zHEt*kM#cVM%H^*|`aO-*VtxCQvLTd6E2@olD`BumwO4>Z&o)Vg*WrMrJVFR|t z$KdXnBDRkYke2{fP8x-?W>sQ)axj|oY8)~<09!JGuzk87N-%W34nD_G6AEEBwr&r> zqM1R2cDxq~doX!MB&y~sa7VD0@)tUo9|>)#P19l8T!+KqX*P#JL=Uh!{enB)i+2`| z$MQTi?B!1PVS0LkvY*XaH6C1`L*x7txYMY{5et~3Y4~ZnmompeDc`1pTJCK>c{9L% z?&$z|N>NsWOy=PnH5|fo+F5^PyOD~Q>7wmmlZg<(*z@r3wSn+8PvkhoH^6b8$Tw8y6uD?=)F+va zx@Il0)m0B7R;TFTB=%jW#fGeCIE9S`Z=?TGfe?!wzqA?ZnQmY!#o~vmClE=}TTP2_ zN}9TC4L}1mS%WPlYHZ&cx9$1;AB#rc6DMQoxuq!I^ir&>a%r%_gPmG?ppf}e)+*p zXtFb!USN#Ij&%Zlmmf3e2eR?5og=`8+8ub;&r>%2pcz9~YTvp*YQcw=izEs&Eti<4 zg%%Y9=Wt<}#^*diM-5rbR%|KEfFIGk@_qQp-j2(3t`N9Pt#}Am_!*zC61=at?7ocs zR^NiF)`~`{uDV#SSPF5C%9wyB*3@9zsvx9NpklQbx!kq(7PQ%uZ*$#BR+fDHD-*x| z>ck&)nO~Opb(aV%o-Oh459{HEJ&7AGJZlm+ElI4e!6}9PaYETRJXz=^w;FGAW5|a1 zqMvCmZ&N#gJ0zBwyK7Uk?%X30*t_Rf5{0?#+U@%UfNgugKnRW5Zv=$jY59XhVP1du z*+ZuJla{|o+=)V8F}o-B!e)`MIo2Ds6$8+eBVb^00CZ4RkrC}=;?upHKm-ZDC48bf z=*e*#Sa+>~=%VZJTJde@v=^rHe_TEbk9h7y8*4D8*pH?#3d@VFg&B@tmEOlACBE1a z?|}z5MWJFNYrJZr7S7NJB}m4P;s73716bzwv1<^T-=TaE6Qt!^;sA$~j$mVs1*Oar z88Oi`88>dL!KzKZsKPlp>?DT~p+c8{Les?kM&{VWB4f{n2n zmnuJXtupJaYn7jp<|S3`VgsVXW#yaU8O`0hIJ#mebhD9AE~Xv4LEZdaIBu|-zC%>V ziW=x)gn?shgdP{)-FWEZ!i?8R@j2~N$joN*zXbSw;@642HrS&O%KizsTW*A$Q*1Rb zzfgl-=v}43hui(29p9|f4D3aGN6PGw{9?%^LuD<18?g=E?91ZB;k|aps;UI38L8I~ acCZV@u7w(>R;e+%(u;Y&}s$7TJNieS}j^_wbqNao+!|_`{fdB$IQIVZ{Pm*y?w{-w|uK~ zU!&B^O(Kz$3KEH&{Oq9n^XkxX{MQ(W*=7d*`cPqz;7NC5D( z<_lLmDl?5Hiy_bum^;TfqrhU85-}>;HEH_S`151p{~emvY06|To)_qjCsaf zOF^lb?H*&pe0{j5a}OhNWgIh{I?<40ER3S8OOobT3UW&d&2#x`JYUtlnKV9w&tKzn zMvi55$}n3Dg=`@@!kwAXWu#>!rE*0icB=fPQU0j)_Q4o+cvQ4wYdrIlVJtM}nN8*q zoNWuoVpDQmtaY7w7{GAr0q^&u5NDm_b5#yIt#JdML}OiY0-7_8^;&OFR&+lS$OAl@ z7=Z(`*7D`Qviz}biV8kL?c`V@s`H&hiKIW<5rwnU2E)ho$>p#a*N#i4@v?6`){XYS z?U_OKS{dr6DbyQ!>>JDW;h?Faqx(}uN1xan;jJlxJP&L>!nuzv%*R&lV{15yK24@tRJ7ZPNu|{2rHk%2Aoc5B4LMC7r77y8sb&+z^ z=aj?eoZFU@Kqx#n#_J36H-bdgML(>HPr%09k=|dDhTTtz@D&ZLxWaDi$PYlx41d^z ziA5UqZc=JUU@#@FFJtV%;+X+hJtMgPJ(}_ge`-%EyHoy*Z9)hR!2CS160!MWSo^3F zBXNI?0-F*ADfNXRB?7)-vF&Fiz?uRD-u4Z#6?!Oc%J+dhyfY~hnot`Yi1L~7(2UKi z2g?2Jr)j3s+=LdU#L5Ce*+Sl9N&2X05Sp#)3+4lEFnMG8JYP&J3c?#E1+-X;XYB+y zfPH7BD-S%gqXi?vg5g_ST$O@<7d5~^p2$X1g7RQDUa?;we24n#6wEO z__O>>;Uxl` zz6;%WVip?UqJwd<2cul>j2=I%2zq|FZI8O16E1dCDBPGydyo|i_d~1W*sa~1v14Bn zk6qCKmmR#z&*A;bd8LcSR9>M~UYx50ej^bt+3$8WtI0JI;W`a}kjT2upKZNC0NA!a z83?5gzezy2MZ;|pS=XXn?RS{wE)8uYZbYGvtHTm|`I#q7H4VZ|^F6R*r9YaN_|*?o zQR@qE757zYuxW`xevVk8DJslR+*a#>+QqGSX(_uW2^dkW0I_8MP)v8RV|f@WDvqxa z^-*|YUOe8e6)<_}Mx49Cn;v#|+#chHdY!-?NacNU;B2aM_=$@u=PxA1sP13Yrn=215`tKnmcVy#CL}f;X$sc6=CO=S?0su>l2ZaCt delta 15 Xcmez6{>y#CMCHlvW&9^UP?iD!L$U{i diff --git a/B4A/Files/login.bal b/B4A/Files/login.bal index 58d9a0b47f12c3b28089093314831d3d875b9e09..d8de9a44a67ca7ede677e90bafd1793d7afc18ea 100644 GIT binary patch delta 1934 zcma)+Ur^Ll6vuxD1o`d6F8mf$mW5qiLLgWXSpG!lvY@ge!~bD?(NLI?!Q2gD#$KY( zQk0nT7%D+(nf;M;aShXE`t#I_6VppgO*Zw`j1NdpmCbD5du8En`Ow3;`}v)F?!D*S z^SwJdL-TW#oSCZ)~JRU9*1_l3|A9V9aKm6E`m1!C3c=xL2r{E90*Z zr(sPxYz-_PwhFcuwhop7vniaZuwCISa5l^Vb1J-E;SCDAz&WrdHEmcE^)7vA8x_t| zIA7rcg`ZNm5L^Uv!#2T+VVhwk3YRKeCVBW#kVly)SGYpqN`2-G1+WGn9 zwQW(Q{C|BtMw~kK?>j8F>g@@CW%GtjVkM4ZYB1+%~rCyUzw@5@EVSB+gdkat~ zhbBqWgly;|3_>&H;>C0uf8z<#QT}z8jgGOo-6hwHi`1>W(_`aHA$?L5QA28IRHc$a+oygv_2WFz6$i#xGT8b0o{8CwFYH2r}k2D$ZY-MJ)f4mrbwn7v&2y9*weyyp$+5SANYudDD2o z=HR5NOnRMjs$5)DYsTS0cQNm2ObU-zoh07nOXG_r8SH2_xUa_GX`dOHdYf|TG|$%f z!@pJgi08KLU2>j*^G|N@=ZKPc$nQi!xtz823QdTjOv^=0@I;G)Q@nTSY&6N#voT3d zER}LjmU2ECWjP-kB}$=5%$A5kxW;X;r^>KQ{wqo?ir#`Awuo{-_045UDKxb_H6^D+ zLF0U{p`WH@rw;mckm%H#{{G>&af%e+1;9m^XuGCg!XVvNz&pb8E{4mn#K;fd|NI_+ z#QYTjh0yE!0R00DAHotNFW&r1JRAKgh8b9bl=Q0Qoy1>&IEnvm$l|G;oA~#(B6LXi zh%}@Q4*+8I{4qQ$3Yf-M^oXdi!+RP>h_2xRS}fOMqh-Ud^9#-XaHz>g6p}%q#{|tH zXn`9$jnf4NkG1H0q|=NGyWDby!e|oo(3(j%IaKH3bFGFY9J9p@XsJ52^{a_IFaKdVjW3OO6E9) zV*|&j#A&2-l5vY&LdMpEkjZft$GbSrCe9({l6I3!q&$+DV++Um9Pi<{Kw?*5av^6F zaa_!C3CE=zmvL<6*hakhMawykBUX?K@(T*h;#c`d7>MGaVlh(uv;CbB{f#Q@&sO2< z+;TKovv6;5hU#FLAjHxXWe2ufSD+Kyj7Gd_Q{r@q2EDeA(1mMhaX4IF8QVo^?2~NM zu>4Lz!1>G+=tgqS$V&!BhJuz`fa* z+8wgo08ZLIqt32n9pZpJMn=BW*EQA`o~Q~qb5%hnq?f^sUXH5=L)LW%yTEgflT^q* zRS!w64Ta1JB(eJ4Xsl}m535;)u(3fNYQ}({>RMelXc}#spu9<8n8a?Hpu9yv8fM4f zHXFG^VT2U1{^9-dT>@bKJq9LPc9cMQpTZa^V*TQiUk}*GLkf>ba!R2a99)UrdG;ne zn~;oO4qITHnn*&EQ&-3eVb>N;Q(z}j$!d_!)i}Y{sqxTL;3a4-%f&Z#h3Io$0GObq z?0CLjL)3Dp2qy7meXaQI2yO6G(3+C0X|h(qD}5a8=Ew13X^jDYAMJ!0N@u4l3P&4s z;KLUU#p;=m8oX?8&~Mj^mPRFDtTPW6Q^GMSF%=$Tf0G$z@p;oTn8UVaJ^1l$P7+Qv gYp}0A246M%U|t$u!2Bemiv9gbT`owQvwW=WFH=toWB>pF diff --git a/B4A/Files/no_venta.bal b/B4A/Files/no_venta.bal index 798cf961902dcde4d614829d94b77edd6ad094b5..9445d10fc5d46b5a446b0758026cfe16a6c4f99c 100644 GIT binary patch delta 652 zcmY*WO)mpc6n(e!V>%t}w58t$m8c3!5)%nQNC@4Dg*2ljkub)D7Kub+Vgxy)WG_G;()AcWZ52z#mO^BxV3=#0OSWNIYc}tQ+}Au}*oG{)Wp9|J4a-0c zwjhLOpt)%vYsEWANdaO%Sp!ll5z16Tm=JaFb_efp@EGwpAwftwc*?=kOUb55qZ#x8!{gwHv|M=1(LJExmpbxWpAC0I6?fVr zcoa_PWom~A(hLPI5}qlH@=DVxsY=-ZA;3+ODijt8ZY)GQqx;0h37#+dxIu6ac%JOR z&rmdNQZ8z5z!-N7_&9DCG delta 199 zcmX@>GRc~km4Si5m6?Ho3rI^%SUDGN`2Aj`+ZzyJV{>lw=c diff --git a/B4A/Subs.bas b/B4A/Subs.bas index 3fa207f..78e19ce 100644 --- a/B4A/Subs.bas +++ b/B4A/Subs.bas @@ -19,6 +19,8 @@ Sub Process_Globals Dim rutaMaxPoints As Int = 3000 Dim rutaHrsAtras As Int = 48 ' Dim rutaInicioHoy As String = "" + Dim in As Intent + Dim intentUsado As Boolean = False End Sub 'Pone el valor de phn.Model en la variable global "devModel" @@ -41,6 +43,62 @@ Sub getPhnId As String 'ignore Return devModel End Sub +' Se revisa si hay una intención (intent) de abrir una base de datos y si es así, entonces se importa esa base de datos. +Sub importaBDDesdeWhatsApp +' Private tmpBDWA As Boolean = traeUsarIntentBDWA + Log("Revisamos intent de importar desde whatsapp") + Log(B4XPages.MainPage.intentUsado) + Log(in) + If Not(in.IsInitialized) Then in = B4XPages.GetNativeParent(B4XPages.MainPage).GetStartingIntent ' Si se usa esta funcion en Mainpage, se pone "Me" en lugar de B4XPages.MainPage. + If Not(B4XPages.MainPage.intentUsado) And in <> Null Then +' Log(in) + LogColor("Importamos base de datos desde Whatsapp.", Colors.blue) + B4XPages.MainPage.intentUsado = True +' Log(in.As(String)) + If in.GetData <> Null Then + Dim XmlData As String + XmlData = in.GetData + Try + Dim OutStr As OutputStream = File.OpenOutput(File.DirInternal,"kmt.db",False) + Dim InStr As InputStream = File.OpenInput("ContentDir",XmlData) + File.Copy2(InStr,OutStr) + LogColor("BD copiada a interna.", Colors.Blue) + OutStr.Close + If in.As(String).Contains("whatsapp") Then ToastMessageShow("BD cargada desde Whatsapp", False) + Catch + Log(LastException) + End Try +' ExitApplication +' Starter.skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'IMPORTAR_BD_WA'") +' Starter.skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('IMPORTAR_BD_WA', '${tmpBDWA}')"$) + Private a As Cursor = Starter.skmt.ExecQuery($"select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'APP_NAME'"$) + If a.RowCount > 0 Then + a.Position = 0 + ToastMessageShow($"BD de "${a.GetString("CAT_VA_VALOR")}" cargada."$, True) + End If + a = Starter.skmt.ExecQuery($"select * from usuarioa"$) + If a.RowCount > 0 Then + a.Position = 0 + B4XPages.MainPage.user.Text = a.GetString("USUARIO") + B4XPages.MainPage.pass.Text = a.GetString("PASS") + End If + End If + End If +End Sub + +'Regresa si se debe de usar el intent de importar la base d datos desde Whatsapp. +Sub traeUsarIntentBDWA As Boolean 'ignore + Private BDWA As Boolean = False + Private x As Cursor = Starter.skmt.ExecQuery($"select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'IMPORTAR_BD_WA'"$) + If x.RowCount > 0 Then + x.Position = 0 + If x.GetString("CAT_VA_VALOR") = "true" Then BDWA = True + End If +' Log($"cb_importarBDWA = ${BDWA}"$) + Return BDWA +End Sub + + 'Comprime y regresa un texto (str) en base64 Sub compress(str As String) As String 'ignore 'Requiere la libreria "CompressStrings" diff --git a/B4A/guna_reparto.b4a b/B4A/guna_reparto.b4a index 116121f..c259dc8 100644 --- a/B4A/guna_reparto.b4a +++ b/B4A/guna_reparto.b4a @@ -219,7 +219,7 @@ Library6=compressstrings Library7=core 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~' AddPermission(android.permission.MANAGE_EXTERNAL_STORAGE)~\n~' SetApplicationAttribute(android:allowBackup, "false")~\n~' ~\n~' ~\n~' AddManifestText(~\n~' )~\n~' AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~AddApplicationText(~\n~)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~AddApplicationText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~)~\n~''CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~AddManifestText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~)~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~) 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~~\n~'///////////////////////// FLP Y PUSH /////////////~\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~'//////////////////////////////////////////////////////~\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~AddApplicationText(~\n~ ~\n~ ~\n~ ~\n~)~\n~CreateResource(xml, provider_paths,~\n~~\n~ ~\n~ ~\n~ ~\n~~\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.MANAGE_EXTERNAL_STORAGE")~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~AddManifestText()~\n~AddApplicationText(~\n~~\n~ ~\n~ )~\n~AddPermission(android.permission.BLUETOOTH_ADVERTISE)~\n~AddPermission(android.permission.BLUETOOTH_CONNECT)~\n~AddPermission(android.permission.BLUETOOTH_SCAN)~\n~AddManifestText() +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~' AddPermission(android.permission.MANAGE_EXTERNAL_STORAGE)~\n~' SetApplicationAttribute(android:allowBackup, "false")~\n~' ~\n~' ~\n~' AddManifestText(~\n~' )~\n~' AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~~\n~~\n~~\n~~\n~~\n~~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~AddApplicationText(~\n~)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~AddApplicationText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~)~\n~''CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~AddManifestText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~)~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~) 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~~\n~'///////////////////////// FLP Y PUSH /////////////~\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~'//////////////////////////////////////////////////////~\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~AddApplicationText(~\n~ ~\n~ ~\n~ ~\n~)~\n~CreateResource(xml, provider_paths,~\n~~\n~ ~\n~ ~\n~ ~\n~~\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.MANAGE_EXTERNAL_STORAGE")~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~AddManifestText()~\n~AddApplicationText(~\n~~\n~ ~\n~ )~\n~ ~\n~ 'Para que se registre para abrir bases de datos~\n~ AddActivityText(main,~\n~~\n~~\n~~\n~~\n~~\n~)~\n~AddPermission(android.permission.BLUETOOTH_ADVERTISE)~\n~AddPermission(android.permission.BLUETOOTH_CONNECT)~\n~AddPermission(android.permission.BLUETOOTH_SCAN)~\n~AddManifestText()~\n~~\n~ Module1=appUpdater Module10=C_Foto Module11=C_Historico @@ -254,12 +254,12 @@ Module9=C_DetalleVenta NumberOfFiles=96 NumberOfLibraries=27 NumberOfModules=31 -Version=13.4 +Version=12.8 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Guna Reparto #VersionCode: 1 - #VersionName: 5.08.29 + #VersionName: 5.08.31 '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 745d7bd..d5ee55a 100644 --- a/B4A/guna_reparto.b4a.meta +++ b/B4A/guna_reparto.b4a.meta @@ -94,6 +94,6 @@ ModuleClosedNodes6= ModuleClosedNodes7= ModuleClosedNodes8= ModuleClosedNodes9= -NavigationStack=C_Cliente,b_cancel_pagare_Click,2995,2,C_Cliente,Class_Globals,1,0,C_Cliente,CheckBox1_CheckedChange,1976,0,C_Cliente,b_cxc_Click,1794,6,C_Cliente,cb_tipopago_SelectedIndexChanged,1788,0,C_Cheklist,Class_Globals,0,0,C_Cliente,b_acred_Click,1771,0,C_Cliente,b_abono_Click,2070,6,C_Principal,Class_Globals,0,0,B4XMainPage,B4XPage_Created,1304,0 +NavigationStack=C_Cliente,esPagoACreditoGuardamosPagare,764,0,C_Cliente,b_cxc_Click,1822,0,C_Cliente,b_abono_Click,2157,6,C_Cliente,CreateListItem,1985,0,C_NoVenta,GUARDA_Click,176,0,C_NoVenta,Camera1_PictureTaken,378,0,C_Cliente,CheckBox1_CheckedChange,2000,6,Diseñador Visual,principal.bal,-100,1,C_Cliente,gest_Click,567,2,C_Principal,JobDone,1765,0,C_Principal,connecta_Click,1939,0 SelectedBuild=0 VisibleModules=2,16,4,5,6,7,9,30,29,27