[
"autonomous agent",
{
"init": "{
$nom_AA = 'Vinculacions';
// Portal
//$_Portal = '5WVBJQHTEP54AEYUJGTQKWTXTXZSJQWA';
$_Portal = trigger.address; //Hauria de ser fix amb adr Portal original
if ( $_Portal != trigger.address ) bounce( 'Portal no reconegut' );
// Principals
$args = trigger.data;
$adr__ = trigger.initial_address;
$idgeto = trigger.output[[ asset != base ]].asset;
$dades = $args.dades otherwise {};
$__dada = $refval => {
data_feed[[ oracles = $args._Registre, feed_name = $refval, ifnone = false ]]
};
// Abreviacions
$proces = $args.proces;
$operacio = $args.operacio;
$idprop = $args.idprop;
$nova_idprop = $args.nova_idprop;
$ref = $args.ref;
$val = $args.val;
// Si no s'ha lliurat l'argument especificat bota l'accés
$__arg = $arg =>
$args[ $arg ] otherwise
bounce( "Cal proporcionar el valor de: " || $arg );
// Admin isox
if ( $proces == 'nova_isox' ) {
$ord_isox = $__dada( 'ordinal_isox' ) + 1;
$_actuant_es_isox_000 = $__dada( 'isox_000' ) == $adr__ ;
$_estat_isox_actuant = $__dada( 'isox_' || $adr__ || '_estat' ) otherwise '';
$autoritzacio = $_actuant_es_isox_000 OR $_estat_isox_actuant == 'habilitat';
if ( ! $autoritzacio ) bounce( 'No autoritzada per a no isox' );
$index_baules_isox = $__dada( 'isox_' || $adr__ || '_index_baules' ) otherwise 1;
$mitjana_index_baules = $__dada( 'mitjana_index_baules' ) otherwise 1;
$factor_topall_index_baules = $__dada( 'Factor_Topall_Index_Baules' ) otherwise 1.5;
if ( $index_baules_isox > $mitjana_index_baules * $factor_topall_index_baules )
bounce( 'No autoritzada per massa baules' );
$estat_isox = $__dada( 'isox_' || $args.adr || '_estat') otherwise '';
if ( $estat_isox == 'habilitat' )
bounce( 'Ja hi consta una isox habilitada amb aquesta adreça' );
$_aspirant = $__dada( 'aspirant_' || $args.adr );
if ( $_actuant_es_isox_000 ) {
$index_baules_nou_isox = $args.index_baules otherwise $mitjana_index_baules;
$dades_alta = [ 'isox_000', 'isox_000', 1, $index_baules_nou_isox ];
} else {
$nombre_avals =
$__dada( 'isox_' || $adr__ || '_aval_2' ) ? 2 :
$__dada( 'isox_' || $adr__ || '_aval_1' ) ? 1 :
0;
if ( $nombre_avals == 2 ) bounce( "Ja n'has avalat 2" );
if ( !! $_aspirant ) {
$_proposant = $__dada( 'aspirant_' || $args.adr || '_proposant' );
if ( $_proposant == $adr__ )
bounce( "Els dos avals han de provenir d'adreces diferents" );
$index_baules_proposant =
$__dada( 'isox_' || $_proposant || '_index_baules' ) otherwise 1;
$index_baules_nouisox = 1 + round( ( $index_baules_proposant + $index_baules_isox ) / 2 );
$index_absolut = $index_baules_nouisox + ( $mitjana_index_baules * ( $ord_isox - 1 ) );
$nova_mitjana_index_baules = round( $index_absolut / $ord_isox );
$dades[ 'isox_' || $adr__ || '_aval_' || ( $nombre_avals + 1 ) ] = $args.adr;
$dades_alta = [ $_proposant, $adr__, $index_baules_nouisox, $nova_mitjana_index_baules ];
} else {
$dades[ 'aspirant_' || $args.adr ] = timestamp;
$dades[ 'aspirant_' || $args.adr || '_proposant' ] = $adr__;
$dades[ 'isox_' || $adr__ || '_aval_' || ( $nombre_avals + 1 ) ] = $args.adr;
}
}
if ( !! $dades_alta[0] ) {
$dades[ 'ordinal_isox' ] = $ord_isox;
$dades[ 'isox_' || $ord_isox ] = $args.adr;
$dades[ 'isox_' || $args.adr || '_ordinal' ] = 'isox_' || $ord_isox;
$dades[ 'isox_' || $args.adr || '_proposant' ] = $dades_alta[0];
$dades[ 'isox_' || $args.adr || '_confirmant' ] = $dades_alta[1];
$dades[ 'isox_' || $args.adr || '_data' ] = timestamp;
$dades[ 'isox_' || $args.adr || '_estat' ] = 'habilitat';
$dades[ 'isox_' || $args.adr || '_index_baules' ] = $dades_alta[2];
$dades[ 'mitjana_index_baules' ] = $dades_alta[3];
}
}
if ( $proces == 'nou_estat_isox' ) {
$_isox = $__dada( $idprop || '_adr' ) otherwise $args.adr;
$nou_estat = $__dada( $idprop || '_estat' ) otherwise $args.estat;
$estat_actual = $__dada( 'isox_' || $_isox || '_estat' ) otherwise '';
if ( ! $estat_actual )
bounce( 'No hi consta cap isox amb aquesta adreça' );
if ( $estat_actual == $nou_estat )
bounce( "L'estat actual és el mateix que el proposat" );
if ( $operacio == 'proposta' ) {
$dades[ $nova_idprop || '_adr' ] = $args.adr;
$dades[ $nova_idprop || '_estat' ] = $args.estat;
} else {
$nou_estat = $__dada( $idprop || '_estat' ) otherwise $args.estat;
$dades[ 'isox_' || $args.adr || '_estat' ] = $nou_estat;
}
}
// Admin delegacions
if ( $proces == 'nova_delegacio' OR $proces == 'final_delegacio' ) {
$ref_entitat = 'entitat_' || $__arg( 'nom' );
$estat_entitat = $__dada( $ref_entitat || '_estat' ) otherwise '';
$adr_entitat = $__dada( $ref_entitat || '_adr' ) otherwise '';
if ( $estat_entitat != 'operatiu' )
bounce( 'Entitat inexistent o no operativa' );
if ( $adr_entitat != $adr__ )
bounce( "L'adreça de l'entitat no és l'actuant" );
// $ords = [ "1", "2", "3", "4", "5" ];
$ords = [ "1", "2", "3" ]; // per als TESTS
$ord_delegada_trobada = [];
$semiref_delegada = $ref_entitat || '_delegada_';
$__troba_delegada = $o => {
$adr_delegada = $__dada( $semiref_delegada || $o ) otherwise '';
if (
! $ord_delegada_trobada[0]
AND $adr_delegada == $args.adr
)
$ord_delegada_trobada[0] = $o;
};
//foreach( $ords, 5, $__troba_delegada );
foreach( $ords, 3, $__troba_delegada ); // per als TESTS
if ( $proces == 'nova_delegacio' ) {
if ( !! $ord_delegada_trobada[0] )
bounce( 'Ja hi consta una delegada amb aquesta adreça' );
$lloc_trobat = [];
$__troba_lloc_lliure = $o => {
if (
! $__dada( $semiref_delegada || $o ) AND
! $lloc_trobat[0]
) {
$dades[ $semiref_delegada || $o ] = $args.adr;
$lloc_trobat[0] = $o;
}
};
//$troba_lloc_lliure = map( $ords, 5, $__troba_lloc_lliure );
$troba_lloc_lliure = map( $ords, 3, $__troba_lloc_lliure ); // per als TESTS
if ( ! $lloc_trobat[0] )
bounce( 'Ja consten com a habilitades totes les delegacions possibles' );
}
if ( $proces == 'final_delegacio' ) {
if ( ! $ord_delegada_trobada[0] )
bounce( 'No hi consta cap delegada amb aquesta adreça' );
$dades[ $semiref_delegada || $ord_delegada_trobada[0] ] = '';
}
}
// Admin vincles
if ( $args.admin_vincles ) {
$tipus_vincle = $__dada( $idprop || '_tipus' ) otherwise $__arg( 'tipus' );
$nom_vincle = $__dada( $idprop || '_nom' ) otherwise $__arg( 'nom' );
$ref_vincle = $tipus_vincle || '_' || $nom_vincle;
$ord_vincle = $__dada( $ref_vincle ) otherwise '---';
$nou_ord_vincle = $__dada( 'ordinal_' || $tipus_vincle ) + 1;
if ( $proces == 'nou_vincle' ) {
$_vincle = $__dada( $idprop || '_adr' ) otherwise $__arg( 'adr' );
// No ha d'estar registrat
if ( $ord_vincle != '---' )
bounce( "Ja n'hi ha un amb aquest nom" );
// Adreça única
$adr_registrada = $__dada( $ref_vincle || '_adr' );
if ( !! $adr_registrada )
bounce( "Ja n'hi ha un amb aquesta adreça" );
//...
if ( $operacio == 'proposta' ) {
$dades[ $nova_idprop || '_adr' ] = $args.adr;
$dades[ $nova_idprop || '_nom' ] = $args.nom;
} else {
$dades[ $ref_vincle ] = $ord_vincle;
$dades[ $ref_vincle || '_adr' ] = $_vincle;
$dades[ $ref_vincle || '_estat' ] = 'operatiu';
$dades[ $tipus_vincle || '_' || $nou_ord_vincle ] = $ref_vincle;
$dades[ 'ordinal_' || $tipus_vincle ] = $nou_ord_vincle;
}
}
if ( $proces == 'nou_estat_vincle' ) {
// Ha d'estar registrat
if ( $ord_vincle != '---' )
bounce( "No n'hi ha cap amb aquest nom" );
//...
if ( $operacio == 'proposta' ) {
$dades[ $nova_idprop || '_adr' ] = $args.adr;
$dades[ $nova_idprop || '_estat' ] = $args.estat;
} else {
$nou_estat = $__dada( $idprop || '_estat' ) otherwise $args.estat;
$dades[ $ref_vincle || '_estat' ] = $nou_estat;
if ( $nou_estat == 'operatiu' ) {
$dades[ $ref_vincle ] = $nou_ord_vincle;
$dades[ $tipus_vincle || '_' || $nou_ord_vincle ] = $ref_vincle;
} else {
$dades[ $ref_vincle ] = '---';
$dades[ $tipus_vincle || '_' || $ord_vincle ] = '---';
}
}
}
}
$registre = {};
$registre.dades = $dades;
}",
"messages": [
{
"app": "data",
"payload": "{ $registre }"
},
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{ $args._Registre }",
"amount": "{ $__dada( 'Provisio' ) }"
}
]
}
},
{
"app": "state",
"state": "{
if ( !! $nou_estat )
response[ 'Nou estat ' || $ref_vincle ] = $nou_estat;
if ( $args.admin_vincles ) {
response[ 'Proposta' ] = $nova_idprop otherwise $ref otherwise 'drecera';
response[ 'operacio' ] = $operacio;
}
response[ 'proces' ] = $proces;
}"
}
]
}
]