2 Commits

Author SHA1 Message Date
fbb76fed9b VERSION 6.03.03
- Se amplio el tamaño del listview en el historico y se agrego el numbre del vendedor.
2026-03-02 12:18:18 -06:00
5426e434ca VERSION 6.02.21
- Se agrego que cuando hagan clic en el nombre del cliente se actualicen automaticamente las coordenadas en web.
2026-02-26 16:13:15 -06:00
10 changed files with 215 additions and 61 deletions

View File

@@ -25,8 +25,6 @@ Version=9.85
'Ctrl + clic para Git: ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=-ExecutionPolicy&Args=Bypass&Args=-File&Args=..\_git_tag.ps1&Args=%22%PROJECT%%22&Args=%22%PROJECT_NAME%%22 'Ctrl + clic para Git: ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=-ExecutionPolicy&Args=Bypass&Args=-File&Args=..\_git_tag.ps1&Args=%22%PROJECT%%22&Args=%22%PROJECT_NAME%%22
'########################################################################################################### '###########################################################################################################
#End Region #End Region
'Ctrl + click ide://run?file=%WINDIR%\System32\cmd.exe&Args=/c&Args=github&Args=..\..\
Sub Class_Globals Sub Class_Globals
Private Root As B4XView Private Root As B4XView
@@ -203,6 +201,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
Subs.agregaColumna("CAT_GUNAPROD", "CAT_GP_PRECIO10", "TEXT DEFAULT '0'") Subs.agregaColumna("CAT_GUNAPROD", "CAT_GP_PRECIO10", "TEXT DEFAULT '0'")
Subs.agregaColumna("PEDIDO_CLIENTE", "PC_GUARDADO", "TEXT DEFAULT '0'") Subs.agregaColumna("PEDIDO_CLIENTE", "PC_GUARDADO", "TEXT DEFAULT '0'")
Subs.agregaColumna("CAT_GUNAPROD2", "CAT_GP_VARREQ3", "TEXT DEFAULT '0'") Subs.agregaColumna("CAT_GUNAPROD2", "CAT_GP_VARREQ3", "TEXT DEFAULT '0'")
Subs.agregaColumna("HIST_VENTAS", "HVD_USUARIO", "TEXT")
Subs.agregaColumna("CAT_GUNAPROD2", "MARCA", "TEXT") Subs.agregaColumna("CAT_GUNAPROD2", "MARCA", "TEXT")
Subs.agregaColumna("CAT_GUNAPROD", "MARCA", "TEXT") Subs.agregaColumna("CAT_GUNAPROD", "MARCA", "TEXT")

View File

@@ -337,9 +337,7 @@ Sub B4XPage_Appear
End If End If
c.Close c.Close
If ALMACEN = "1" Then If ALMACEN = "1" Then
Tels.Visible = False ocultamosBotonesPorGeocerca
gest.Visible = False
' B_GPS.Visible = False
End If End If
If ALMACEN = "4" Then If ALMACEN = "4" Then
' b_like.Visible = True ' b_like.Visible = True
@@ -361,12 +359,22 @@ Sub B4XPage_Appear
Else Else
' b_like.Visible = False ' b_like.Visible = False
End If End If
If ALMACEN = "16" Or ALMACEN = "13" Then If Not(Subs.geocercaActiva) And ALMACEN = "16" Or ALMACEN = "13" Then
Log("Mostramos botones venta")
Tels.Visible = True Tels.Visible = True
gest.Visible = True gest.Visible = True
b_ventaabordo.Visible = True
End If
If Not(Subs.geocercaActiva) Then
Log("Mostramos botones venta")
Tels.Visible = True
gest.Visible = True
b_ventaabordo.Visible = True
Else
Log("Ocultamos botones venta")
ocultamosBotonesPorGeocerca
End If End If
Tels.Visible = True
gest.Visible = True
' h = B4XPages.MainPage.skmt.ExecQuery("SELECT CUENTA from CUENTAA") ' h = B4XPages.MainPage.skmt.ExecQuery("SELECT CUENTA from CUENTAA")
' h.Position = 0 ' h.Position = 0
@@ -446,42 +454,41 @@ Sub B4XPage_disappear
End Sub End Sub
Sub GPS_LocationChanged (Location1 As Location) Sub GPS_LocationChanged (Location1 As Location)
' LogColor($"Entrando a Cliente.GPS_LocationChanged"$, Colors.red) LogColor($"Entrando a Cliente.GPS_LocationChanged"$, Colors.red)
' If Tracker.FLP.GetLastKnownLocation.IsInitialized And Tracker.FLP.GetLastKnownLocation.Latitude <> 0 Then If Tracker.FLP.GetLastKnownLocation.IsInitialized And Tracker.FLP.GetLastKnownLocation.Latitude <> 0 Then
' B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude
' B4XPages.MainPage.lon_gps = Tracker.FLP.GetLastKnownLocation.Longitude B4XPages.MainPage.lon_gps = Tracker.FLP.GetLastKnownLocation.Longitude
'' Log("Coords set to: " & B4XPages.MainPage.lat_gps & " and " & B4XPages.MainPage.lon_gps) ' Log("Coords set to: " & B4XPages.MainPage.lat_gps & " and " & B4XPages.MainPage.lon_gps)
' End If End If
B4XPages.MainPage.lat_gps = Location1.Latitude
B4XPages.MainPage.lon_gps = Location1.Longitude
Dim locTienda As Location Dim l1, l2 As Location
locTienda.Initialize2(m_lat, m_lon) l1.Initialize2(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)
' Log($"Coordenadas de la tienda - lat:${m_lat}, lon:${m_lon}"$) ' Log($"Coordenadas de la tienda - lat:${m_lat}, lon:${m_lon}"$)
l2.Initialize2(m_lat, m_lon)
BT_QR.Enabled = True BT_QR.Enabled = True
LA_GPS.TextColor = Colors.Blue LA_GPS.TextColor = Colors.Blue
LA_GPS.Text = "CON UBICACION GPS" LA_GPS.Text = "CON UBICACION GPS"
distance = Location1.DistanceTo(locTienda) 'Distancia de la ubicacion actual a coords de la tienda. Log("CON UBICACION GPS")
Log("Distancia a tienda: " & distance) ' B_GPS.Enabled = True
If distance < 50 Then 'now we need the distance between our location and the target location
gest.Visible = True distance = l1.DistanceTo(l2) 'the result is in meter
Log(distance)
Log((Subs.geocercaActiva And distance < 100))
Log(Not(Subs.geocercaActiva))
If (Subs.geocercaActiva And distance < 100) Or (Not(Subs.geocercaActiva)) Then
Log("Mostramos botones venta")
LA_GEO.TextColor = Colors.Blue
Tels.Visible = True Tels.Visible = True
If la_cuenta.Text = "0" Then gest.Visible = True
b_ventaabordo.Visible = False b_ventaabordo.Visible = True
Else
b_ventaabordo.Visible = True
End If
Else Else
LA_GEO.TextColor = Colors.Red ' LA_GEO.TextColor = Colors.Red
If Subs.traeGeocerca Then
ocultamosBotonesPorGeocerca
End If
End If End If
LA_GEO.Text= $"$1.2{distance/1000} kms"$ LA_GEO.Text= $"$1.2{distance/1000} kms"$
B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS") B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS")
B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_GPS (HGDATE, HGLAT, HGLON) VALUES(?,?,?) ", Array As Object (sDate & sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_GPS (HGDATE, HGLAT, HGLON) VALUES(?,?,?) ", Array As Object (sDate & sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps))
' CallSubDelayed(Tracker, "CreateLocationRequest") CallSubDelayed(Tracker, "CreateLocationRequest")
End Sub End Sub
Sub ListView1_ItemLongClick (Position As Int, Value As Object) Sub ListView1_ItemLongClick (Position As Int, Value As Object)
@@ -1048,6 +1055,7 @@ Sub B_GUARDA_C_Click
Tar.Visible = True Tar.Visible = True
Tels.Visible = True Tels.Visible = True
gest.Visible = True gest.Visible = True
b_ventaabordo.Visible = True
' b_like.Visible = False ' b_like.Visible = False
Guardar.Visible = True Guardar.Visible = True
End Sub End Sub
@@ -1428,7 +1436,7 @@ Sub JobDone(Job As HttpJob)
B4XPages.MainPage.skmt.ExecNonQuery($"UPDATE ABONOS set a_enviado = 1 where a_cliente = '${cliente}'"$) B4XPages.MainPage.skmt.ExecNonQuery($"UPDATE ABONOS set a_enviado = 1 where a_cliente = '${cliente}'"$)
End If End If
End If End If
'CLIENTES NUEVOS 'CLIENTES NUEVOS
If Job.JobName = "DBRequest" Then If Job.JobName = "DBRequest" Then
Dim resultado As DBResult = reqManager.HandleJob(Job) Dim resultado As DBResult = reqManager.HandleJob(Job)
@@ -1445,6 +1453,14 @@ Sub JobDone(Job As HttpJob)
End If End If
End If End If
'Guarda coords nuevas
If Job.JobName = "DBRequest" Then
Dim resultado As DBResult = reqManager.HandleJob(Job)
If resultado.Tag = "insCoordsNuevas" Then
ToastMessageShow("Coordenadas actualizadas", False)
End If
End If
'CUESTIONARIO 'CUESTIONARIO
If Job.JobName = "DBRequest" Then If Job.JobName = "DBRequest" Then
Dim resultado As DBResult = reqManager.HandleJob(Job) Dim resultado As DBResult = reqManager.HandleJob(Job)
@@ -1737,4 +1753,27 @@ Sub ocultamosBotonesPorGeocerca
gest.Visible = False gest.Visible = False
b_ventaabordo.Visible = False b_ventaabordo.Visible = False
Tels.Visible = False Tels.Visible = False
End Sub
Private Sub la_nombre_Click
Log("Clicked")
If Not(Subs.geocercaActiva) Then
Log("Enviando coords")
DateTime.DateFormat = "MM/dd/yyyy"
sDate=DateTime.Date(DateTime.Now)
sTime=DateTime.Time(DateTime.Now)
B4XPages.MainPage.skmt.ExecNonQuery($"update kmt_info set cat_cl_lat = '${B4XPages.MainPage.lat_gps}', cat_cl_long = '${B4XPages.MainPage.lon_gps}' where cat_cl_codigo = '${la_cuenta.text}'"$)
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "insert_coordsNuevas_INTMEX"
cmd.Parameters = Array As Object(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, Subs.traeAlmacen, Subs.traeRuta, la_cuenta.text)
' cmd.Parameters = Array As Object("1", "1", "5", "6", "CLN13478")
Log($"${Subs.traeAlmacen}, ${Subs.traeRuta},${la_cuenta.text},${B4XPages.MainPage.lat_gps},${B4XPages.MainPage.lon_gps}"$)
reqManager.ExecuteCommand(cmd , "insCoordsNuevas")
ToastMessageShow("Coordenadas actualizadas", False)
B4XPage_Appear
Else
ToastMessageShow("Geocerca activada", False)
End If
End Sub End Sub

View File

@@ -55,6 +55,7 @@ End Sub
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
Sub B4XPage_Appear Sub B4XPage_Appear
ListView1.Height = Root.Height * 0.8
If Not(Starter.gps.GPSEnabled) Then If Not(Starter.gps.GPSEnabled) Then
ToastMessageShow("Es necesario tener el GPS encendido", True) ToastMessageShow("Es necesario tener el GPS encendido", True)
StartActivity(Starter.gps.LocationSettingsIntent) StartActivity(Starter.gps.LocationSettingsIntent)
@@ -65,8 +66,9 @@ Sub B4XPage_Appear
C.Position=0 C.Position=0
Existe = C.GetString("EXISTE") Existe = C.GetString("EXISTE")
C.Close C.Close
c=B4XPages.MainPage.skmt.ExecQuery("select HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) order by HVD_PRONOMBRE asc") c=B4XPages.MainPage.skmt.ExecQuery("select HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT,HVD_USUARIO from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) order by HVD_PRONOMBRE asc")
ListView1.Clear ListView1.Clear
ListView1.TwoLinesLayout.ItemHeight = 70dip
If c.RowCount>0 Then If c.RowCount>0 Then
For i=0 To c.RowCount -1 For i=0 To c.RowCount -1
c.Position=i c.Position=i
@@ -78,7 +80,7 @@ Sub B4XPage_Appear
label2 = ListView1.TwoLinesLayout.SecondLabel label2 = ListView1.TwoLinesLayout.SecondLabel
label2.TextSize = 10 label2.TextSize = 10
label2.TextColor = Colors.Blue label2.TextColor = Colors.Blue
ListView1.AddTwoLines(c.GetString("HVD_PRONOMBRE"),"Cantidad #"& c.GetString("HVD_CANT")& " SubTotal $"& c.GetString("HVD_COSTO_TOT")) ListView1.AddTwoLines(c.GetString("HVD_PRONOMBRE"),"Cantidad #"& c.GetString("HVD_CANT")& " SubTotal $"& c.GetString("HVD_COSTO_TOT") & CRLF & "Usuario: " & c.GetString("HVD_USUARIO"))
Next Next
End If End If
If Existe <> 0 Then If Existe <> 0 Then

View File

@@ -57,6 +57,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
' L_CANT.Text = c.GetString("PC_NOART") ' L_CANT.Text = c.GetString("PC_NOART")
' L_TOTAL.Text = c.GetString("PC_MONTO") ' L_TOTAL.Text = c.GetString("PC_MONTO")
' End If ' End If
p_nota.Height = Root.Height : p_nota.Width = Root.Width
End Sub End Sub
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.

View File

@@ -998,6 +998,7 @@ Sub cargar_Click
cmd.Initialize cmd.Initialize
cmd.Name = "select_hist_datos_INTMEX_2" cmd.Name = "select_hist_datos_INTMEX_2"
cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) cmd.Parameters = Array As Object(e_ruta.text, ALMACEN)
Log($"===> ${e_ruta.text}, ${ALMACEN}"$)
reqManager.ExecuteQuery(cmd , 0, "hist_datos") reqManager.ExecuteQuery(cmd , 0, "hist_datos")
cmd.Initialize cmd.Initialize
@@ -1814,7 +1815,9 @@ Sub JobDone(Job As HttpJob)
Dim HVD_PRONOMBRE As String = records(RESULT.Columns.Get("HVD_PRONOMBRE")) Dim HVD_PRONOMBRE As String = records(RESULT.Columns.Get("HVD_PRONOMBRE"))
Dim HVD_CANT As String = records(RESULT.Columns.Get("HVD_CANT")) Dim HVD_CANT As String = records(RESULT.Columns.Get("HVD_CANT"))
Dim HVD_COSTO_TOT As String = records(RESULT.Columns.Get("HVD_COSTO_TOT")) Dim HVD_COSTO_TOT As String = records(RESULT.Columns.Get("HVD_COSTO_TOT"))
B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_VENTAS(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT) VALUES (?,?,?,?)", Array As Object (HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT)) Dim HVD_USUARIO As String = records(RESULT.Columns.Get("USUARIO"))
Log(HVD_USUARIO)
B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_VENTAS(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT,HVD_USUARIO) VALUES (?,?,?,?,?)", Array As Object (HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT,HVD_USUARIO))
Next Next
Listo3 =1 Listo3 =1
If PB1.Progress = 0 Then If PB1.Progress = 0 Then

Binary file not shown.

View File

@@ -164,7 +164,7 @@ Version=12.8
#Region Project Attributes #Region Project Attributes
#ApplicationLabel: Intmex #ApplicationLabel: Intmex
#VersionCode: 1 #VersionCode: 1
#VersionName: 6.02.20 GPS #VersionName: 6.03.03
'SupportedOrientations possible values: unspecified, landscape or portrait. 'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait #SupportedOrientations: portrait
#CanInstallToExternalStorage: False #CanInstallToExternalStorage: False

View File

@@ -91,6 +91,6 @@ ModuleClosedNodes6=
ModuleClosedNodes7= ModuleClosedNodes7=
ModuleClosedNodes8= ModuleClosedNodes8=
ModuleClosedNodes9= ModuleClosedNodes9=
NavigationStack=C_Cliente,Guardar_Click,619,6,C_Cliente,mandaPendientes,1277,0,Diseñador Visual,cliente.bal,-100,3,C_Cliente,Class_Globals,137,0,C_Cliente,B4XPage_Appear,238,0,C_Cliente,B4XPage_Created,209,6,C_Principal,Class_Globals,0,0,B4XMainPage,b_guardar_Click,789,0,Main,Activity_Create,29,0,B4XMainPage,Class_Globals,24,0 NavigationStack=C_Nota,Initialize,39,0,C_Nota,p_nota_Click,312,0,C_Nota,B4XPage_Created,57,6,C_Historico,GPS_LocationChanged,86,0,C_Nota,B4XPage_Appear,58,2,C_Historico,B4XPage_Created,49,0,Diseñador Visual,nota.bal,-100,6,C_Principal,JobDone,1804,2,C_Principal,cargar_Click,980,4,C_Historico,B4XPage_Appear,66,6,B4XMainPage,B4XPage_Created,197,0
SelectedBuild=0 SelectedBuild=0
VisibleModules=28,2,13,20,14,29,15,4,11,21 VisibleModules=28,2,13,14,29,15,4,11,21,7,9

View File

@@ -1556,4 +1556,15 @@ Sub traeGeocerca As Boolean
If c.GetInt("CAT_VA_VALOR") = 0 Then usarGeo = False If c.GetInt("CAT_VA_VALOR") = 0 Then usarGeo = False
End If End If
Return usarGeo Return usarGeo
End Sub
'Revisa si la geocerca debe de estar activa
Sub geocercaActiva As Boolean
Private resultado As Boolean = True
Private c As Cursor = Starter.skmt.ExecQuery("select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'GEOCERCA'")
If c.RowCount > 0 Then
c.Position = 0
If c.GetString("CAT_VA_VALOR") = 0 Then resultado = False
End If
Return resultado
End Sub End Sub

View File

@@ -1,28 +1,127 @@
# SCRIPT: _juntaBas.ps1 - Versión Saneada y Optimizada para LLM # SCRIPT: _juntaBas_Master_FinalIA.ps1
$OutputFile="_CODIGO_COMPLETO_PARA_LLM.txt" # FIX: Corregida sintaxis de comillas y concatenación de tags XML.
# OBJETIVO: Fuente de verdad para IA con navegación ultra estructurada.
# Eliminar el archivo anterior si existe (IMPORTANTE) $ErrorActionPreference = 'SilentlyContinue'
Remove-Item -Path $OutputFile -ErrorAction SilentlyContinue $Dir = Get-Location
$LT = [char]60; $GT = [char]62; $SL = [char]47
$NL = [Environment]::NewLine
Write-Host "Iniciando fusion para LLM..." Write-Output '--- GENERANDO MASTER IA DEFINITIVO (FIX ESTRUCTURAL) ---'
# Itera sobre los archivos .bas, .b4a, .b4j # 1. PARSEO DEL PROYECTO .B4A
Get-ChildItem -Path ".\*" -Include @("*.bas", "*.b4a", "*.b4j") | ForEach-Object { $b4a = Get-ChildItem -Path ".\*" -Include "*.b4a" -Recurse | Select-Object -First 1
$currentFile = $_.Name $Name = 'App'; $Ver = '0.0'; $ModulosValidos = @(); $Librerias = @()
Write-Host "Procesando: $currentFile"
# --- ENCABEZADO ESTRUCTURADO Y COMENTADO EN B4X (Agregado al archivo) --- if ($b4a) {
Add-Content -Path $OutputFile -Value "`n'======================================================================================" $lines = [System.IO.File]::ReadAllLines($b4a.FullName)
Add-Content -Path $OutputFile -Value $"// ARCHIVO_INICIO: ${currentFile}" foreach ($L in $lines) {
Add-Content -Path $OutputFile -Value "'======================================================================================`n" if ($L -match '#ApplicationLabel:\s*(.*)') { $Name = $Matches[1].Trim() }
if ($L -match '#VersionName:\s*(.*)') { $Ver = $Matches[1].Trim() }
# Vuelca el contenido del archivo if ($L -match '^Module\d+=(.*)') {
Get-Content -Encoding UTF8 -Path $_.FullName -Raw | Add-Content -Path $OutputFile $m = [System.IO.Path]::GetFileName($Matches[1].Trim())
if (-not $m.EndsWith(".bas") -and $m -ne "Main") { $m += ".bas" }
# --- DELIMITADOR DE FIN DE ARCHIVO (Agregado al archivo) --- $ModulosValidos += $m
Add-Content -Path $OutputFile -Value "`n'======================================================================================" }
Add-Content -Path $OutputFile -Value $"// ARCHIVO_FIN: ${currentFile}" if ($L -match '^Library\d+=(.*)') { $Librerias += $Matches[1].Trim() }
Add-Content -Path $OutputFile -Value "'======================================================================================`n" }
} }
Write-Host "`nProceso terminado. Se ha creado el archivo: $OutputFile" $OutName = "_" + $Name + "_" + $Ver + "_IA.md"
$OutFile = Join-Path $Dir $OutName
# 2. HEADER CON TUS INSTRUCCIONES CRÍTICAS
$CurrentDate = Get-Date -Format 'yyyy-MM-dd HH:mm'
$Header = @"
# PROYECTO: $Name
- Version: $Ver
- Fecha: $CurrentDate
- Librerias Activas: $($Librerias -join ", ")
## INSTRUCCIONES CRITICAS (B4A / BASIC4ANDROID)
0. **Integridad del Contexto:** Antes de procesar peticiones, cuenta si el numero de modulos listados en el indice coincide con los detallados en el cuerpo.
1. **Source of Truth (Codigo):** Este archivo contiene el codigo fuente ACTUAL del proyecto.
2. **Source of Truth (Librerias):** Basa tus sugerencias en la lista de 'Librerias Activas'.
3. **Anti-Alucinacion:** Antes de sugerir, VERIFICA la 'Interfaz Pública' o el código fuente del módulo.
4. **Existencia Estricta:** Si una variable/Sub no está en el texto, NO EXISTE.
5. **Formato:** Usa bloques 'vb'.
6. **Navegacion Estructural:** Usa los tags <module>, <interface> y <method> para localizar codigo.
7. **Inferencia de Datos:** Deduce la BD solo de los strings SQL presentes.
"@
Set-Content -Path $OutFile -Value $Header -Encoding UTF8
# 3. LISTAR ARCHIVOS
$files = Get-ChildItem -Path $Dir -Include *.bas,*.b4a -Recurse | Where-Object {
$_.FullName -notmatch 'Objects' -and ($_.Extension -eq '.b4a' -or $ModulosValidos -contains $_.Name)
}
# 4. INDICE DE MODULOS
Add-Content $OutFile ($NL + "## INDICE DE MODULOS" + $NL) -Encoding UTF8
foreach ($f in $files) {
$Ref = $f.Name.Replace('.', '').Replace(' ', '-').ToLower()
Add-Content $OutFile ("- [" + $f.Name + "](#modulo-" + $Ref + ")") -Encoding UTF8
}
# 5. CODIGO FUENTE ESTRUCTURADO
Add-Content $OutFile ($NL + '## CODIGO FUENTE DETALLADO' + $NL) -Encoding UTF8
foreach ($f in $files) {
Write-Host " -> $($f.Name)... " -NoNewline
$txt = [System.IO.File]::ReadAllLines($f.FullName)
# Pre-escaneo para <interface>
$Methods = @()
foreach ($line in $txt) {
if ($line.Trim() -match '^(?:Public\s+|Private\s+)?Sub\s+([\w\d_]+)') {
$Methods += $Matches[1]
}
}
$Ref = $f.Name.Replace('.', '').Replace(' ', '-').ToLower()
Add-Content $OutFile "$NL<module name='$($f.Name)' id='modulo-$Ref'>" -Encoding UTF8
Add-Content $OutFile " <interface>" -Encoding UTF8
foreach($m in $Methods) {
Add-Content $OutFile " <method_ref name='$m' />" -Encoding UTF8
}
Add-Content $OutFile " </interface>$NL" -Encoding UTF8
Add-Content $OutFile "```vb" -Encoding UTF8
$skip = ($f.Extension -eq '.b4a')
foreach ($l in $txt) {
$trim = $l.Trim()
if ($skip) {
if ($trim.StartsWith("#") -and -not $trim.StartsWith("#Region")) { Add-Content $OutFile $l -Encoding UTF8 }
if ($l.Contains("@EndOfDesignText@")) { $skip = $false }
continue
}
# Inicio de Método
if ($trim -match '^(?:Public\s+|Private\s+)?Sub\s+([\w\d_]+)') {
Add-Content $OutFile "<method name='$($Matches[1])'>" -Encoding UTF8
}
# Limpieza de comentarios y escritura de línea
if ($trim.StartsWith("'")) {
if (-not ($trim.StartsWith("'#") -or ($trim -match 'TODO:') -or ($trim -match 'FIX:'))) { continue }
}
if (-not [string]::IsNullOrWhiteSpace($trim)) {
Add-Content $OutFile $l -Encoding UTF8
}
# Fin de Método
if ($trim -eq "End Sub") {
Add-Content $OutFile "</method>" -Encoding UTF8
}
}
Add-Content $OutFile "```$NL</module>" -Encoding UTF8
Write-Host "OK" -ForegroundColor Green
}
Write-Output ("--- FINALIZADO: " + $OutName + " ---")