create-complete-prt-procedure.jsโข7.15 kB
import net from 'net';
const pythonCode = `
# ============================================================================
# CREA PROCEDURA PRT ASSIGNMENT COMPLETA IN CODA A TUTTE LE PROCEDURE
# ============================================================================
# 1. AGGIUNGI DOPO LA POSIZIONE 21 (IN CODA)
import sys
# AddOperation(pos) aggiunge PRIMA della posizione specificata
# Per aggiungere in coda dopo la 21, usiamo posizione 21 che inserisce DOPO la 20
# Ma vogliamo dopo la 21, quindi... forse AddOperation aggiunge IN quella posizione?
# Proviamo con il secondo parametro (gruppo) = None esplicito
new_position = 21
print(f"Aggiunta operazione dopo posizione {new_position}", file=sys.stderr)
# 2. CREA NUOVA OPERAZIONE - AddOperation(position, group)
# Dalla documentazione: AddOperation aggiunge un'operazione
# Se position = 22 e ci sono 21 ops, dovrebbe aggiungere in coda
# Ma l'errore dice "valid 1 to 21" - forse il range รจ inclusivo?
# Proviamo con position 21 + group None
operation = visum.Procedures.Operations.AddOperation(21, None)
operation.SetAttValue("OPERATIONTYPE", 101) # PrT Assignment
print(f"Operazione creata in posizione {new_position} (tipo 101)", file=sys.stderr)
# 3. ACCEDI AI PARAMETRI PRT ASSIGNMENT (proprieta corretta!)
params = operation.PrTAssignmentParameters
print(f"Parametri PrT Assignment accessibili!", file=sys.stderr)
# 4. CONFIGURA PARAMETRI DI BASE
# Non configuriamo VRCODE e TSYSSET perche potrebbero non esistere in questo progetto
# Useremo solo i parametri equilibrium
# Configura tipo di assignment
# OperationTypeAssignmentPrT = 101 include vari sotto-tipi
# Per Equilibrium assignment, accedi ai parametri specifici
try:
equilibrium_params = operation.PrTEquilibriumAssignmentParameters
# Parametri equilibrium
equilibrium_params.SetAttValue("NUMITER", 50) # Numero iterazioni
equilibrium_params.SetAttValue("PRECISIONDEMAND", 0.01) # Precisione
print(f"Parametri Equilibrium configurati (50 iter, prec 0.01)", file=sys.stderr)
config_type = "Equilibrium Assignment"
except:
print(f"Equilibrium params non disponibili, uso config base", file=sys.stderr)
config_type = "Base PrT Assignment"
# 5. VERIFICA CONFIGURAZIONE
operation_type = operation.AttValue("OPERATIONTYPE")
operation_name = "PrT Assignment (auto-created)"
print(f"Operazione configurata: {operation_name}", file=sys.stderr)
# 6. FASI 1 e 2 COMPLETATE - NON ESEGUIAMO
print(f"Procedura PrT Assignment creata e configurata!", file=sys.stderr)
print(f"FASE 1: Creazione operazione - COMPLETATA", file=sys.stderr)
print(f"FASE 2: Configurazione parametri - COMPLETATA", file=sys.stderr)
print(f"FASE 3: Esecuzione - SALTATA (da fare manualmente o via API)", file=sys.stderr)
# 7. VERIFICA FINALE
# Verifichiamo che l'operazione sia stata davvero creata
verification = None
try:
created_op = visum.Procedures.Operations.ItemByKey(new_position)
verification = {
"exists": True,
"type": created_op.AttValue("OPERATIONTYPE"),
"params_accessible": True
}
print(f"Verifica: operazione {new_position} esiste con tipo {verification['type']}", file=sys.stderr)
except Exception as e:
verification = {
"exists": False,
"error": str(e)
}
print(f"Verifica fallita: {e}", file=sys.stderr)
# 8. RITORNA RISULTATO COMPLETO
result = {
"status": "ok",
"phase_1_creation": "completed",
"phase_2_configuration": "completed",
"phase_3_execution": "skipped",
"created": True,
"position": new_position,
"operation_type": operation_type,
"operation_name": operation_name,
"config_type": config_type,
"params_accessible": True,
"params_type": str(type(params)),
"verification": verification,
"note": "Procedura creata in coda. Eseguire manualmente da Visum o via visum.Procedures.Execute()"
}
`;
const client = new net.Socket();
let welcomeReceived = false;
console.log('๐ CREAZIONE PROCEDURA PRT ASSIGNMENT COMPLETA');
console.log('=' .repeat(60));
client.connect(7901, '::1', () => {
console.log('โ
Connesso al server TCP sulla porta 7901\n');
});
client.on('data', (data) => {
const response = JSON.parse(data.toString());
if (!welcomeReceived && response.type === 'project_welcome') {
console.log('๐ Welcome message ricevuto');
console.log(` Progetto: ${response.projectName}`);
console.log(` Nodi: ${response.network.nodes}, Links: ${response.network.links}\n`);
welcomeReceived = true;
// Invia comando Python
const request = {
type: 'query',
requestId: Date.now(),
description: 'Crea e configura procedura PrT Assignment completa',
code: pythonCode
};
console.log('๐ค Invio comando per creare procedura PrT Assignment...\n');
client.write(JSON.stringify(request) + '\n');
} else {
console.log('=' .repeat(60));
console.log('๐ RISULTATO OPERAZIONE\n');
if (response.success) {
const res = response.result;
console.log('โ
SUCCESSO!\n');
console.log('๐ FASI COMPLETATE:');
console.log(` โ
FASE 1 (Creazione): ${res.phase_1_creation}`);
console.log(` โ
FASE 2 (Configurazione): ${res.phase_2_configuration}`);
console.log(` โญ๏ธ FASE 3 (Esecuzione): ${res.phase_3_execution}`);
console.log('\n๐ DETTAGLI OPERAZIONE:');
console.log(` ๐ Posizione: ${res.position} (in coda a tutte le procedure)`);
console.log(` ๐ง Tipo operazione: ${res.operation_type} (${res.config_type})`);
console.log(` ๐ Nome: ${res.operation_name}`);
console.log(` โ๏ธ Parametri accessibili: ${res.params_accessible ? 'โ
SI' : 'โ NO'}`);
console.log(` ๏ฟฝ Tipo parametri: ${res.params_type}`);
if (res.verification) {
console.log('\n๐ VERIFICA:');
console.log(` Operazione esiste: ${res.verification.exists ? 'โ
SI' : 'โ NO'}`);
if (res.verification.exists) {
console.log(` Tipo verificato: ${res.verification.type}`);
}
}
console.log('\n๐ก NOTA:');
console.log(` ${res.note}`);
console.log('\n๐ PROCEDURA PRT ASSIGNMENT CREATA E CONFIGURATA!');
console.log('๐ฏ API FUNZIONANTE: operation.PrTAssignmentParameters');
} else {
console.log('โ ERRORE!\n');
console.log(`Messaggio: ${response.error}`);
}
console.log(`\nโฑ๏ธ Tempo esecuzione: ${response.executionTimeMs}ms`);
console.log(`โฑ๏ธ Tempo risposta: ${response.responseTimeMs}ms`);
console.log('=' .repeat(60));
client.destroy();
}
});
client.on('close', () => {
console.log('\n๐ Connessione chiusa');
});
client.on('error', (err) => {
console.error('โ Errore:', err.message);
});