Pour résumer :
J’ai pu completer la class userFonction avec les éléments suivant, pour faire une fonction searchByTags.
class userFunction {
const UIDDELIMITER = '__';
protected $tags;
protected $name;
private static $_templateArray = array();
/*public static function plop($_arg1 = '') {
return 'Argument 1 : ' . $_arg1;
}*/
private static function cast($_inputs) {
if (is_object($_inputs) && class_exists($_inputs->getEqType_name())) {
$return = cast($_inputs, $_inputs->getEqType_name());
if (method_exists($return, 'decrypt')) {
$return->decrypt();
}
return $return;
}
if (is_array($_inputs)) {
$return = array();
foreach ($_inputs as $input) {
$return[] = self::cast($input);
}
return $return;
}
return $_inputs;
}
public function getEqType_name() {
return $this->eqType_name;
}
public function getName() {
return $this->name;
}
public static function searchByTags($_search) {
$values = array(
'search' => '%' . $_search . '%'
);
$sql = 'SELECT ' . DB::buildField(__CLASS__) . '
FROM eqLogic
WHERE tags LIKE :search';
return self::cast(DB::Prepare($sql, $values, DB::FETCH_TYPE_ALL, PDO::FETCH_CLASS, __CLASS__));
}
}
Avec le report des fonctions : cast, getEqType_name et getName, puisqu’elle ne sont pas présentes dans core.inc.php.
Ensuite j’ai développer un bloc code dans un scénario récurrent (cron => 15 9-17 * * 1-5) qui chercher dans des équipements du plugin stockexchange
//$mySearch=eqLogic::searchByString('Bourse');
$mySearch = userFunction::searchByTags('Bourse');
//$nbS=count($meSearch);
//$scenario->setLog($nbS, 0);
$globale = 0;
foreach($mySearch as $eq) {
$equip = $eq->getName();//Recuperation des nom eqLogic
$comd = cmd::byString('#[MesTests]['.$equip.'][Symbole]#')->execCmd();//Recuperation de la valeur dans la commande Symbole de eqLogic
$cota = cmd::byString('#[MesTests]['.$equip.'][Prix]#')->execCmd();//Recuperation de la commande Symbole
$qte = cmd::byString('#[MesTests]['.$comd.'][Qte]#')->execCmd();//Recuperation de la commande Symbole
$pris2revient = cmd::byString('#[MesTests]['.$comd.'][PrixDeRevient]#')->execCmd();
$valo = $qte * $cota;
$plusValue = ($cota-$pris2revient) * $qte;
cmd::byString('#[MesTests]['.$comd.'][Valorisation]#')->event($valo);
$scenario->setLog('EQ name : '.$equip.' table : '.$table.' CMD name : '.$comd.' Qte : '.$qte.' Achat : '.$pris2revient.' ValoJ : '.$cota.' +Value : '.$plusValue);
$globale = $globale + $plusValue;
};
$myVar = $scenario->setData('maPlusValue', $globale);
$scenario->setLog('Totale +/- Value : '.$globale);
Que j’ai pu coupler avec des virtuels alimentés eux même par un google sheet depuis un autre bloc code dans un autre scénario.
$api = "https://sheet2api.com/v1/MyKeyApi/actions";
$json = file_get_contents($api);
$jsonData = json_decode($json,true);
//$nb = count($jsonData);
//$scenario->setlog('Pouet : '.$jsonData[1]['Qt'].' : '.$nb);
foreach ($jsonData as $index => $data) {
cmd::byString('#[MesTests]['.$data[Code].'][Valeurs]#')->event($data[Valeurs]);
$scenario->setlog($data[Valeurs]);
cmd::byString('#[MesTests]['.$data[Code].'][CodeValeur]#')->event($data[Code]);
$scenario->setlog($data[Code]);
cmd::byString('#[MesTests]['.$data[Code].'][Qte]#')->event($data[Qt]);
$scenario->setlog($data[Qt]);
cmd::byString('#[MesTests]['.$data[Code].'][PrixDeRevient]#')->event($data[PrixDeRevient]);
$scenario->setlog($data[PrixDeRevient]);
};
En dernier lieu je pousse le résulat final dans un variable, pour l’afficher sur le dasboard ou lametric
]
Donc un grand merci pour votre aide. Ainsi qu’a @Mips pour son plugin (Même si les API appelé ne sont pas toujours très à jour. Peut aller voir d’autre ailleurs )
Pour aller plus loin, je vais chercher :
- la possibilité de variabiliser l’objet parent (ici [‹ MesTest ›]) pour me permettre de changer mes équipements de place sans revinir sur le code.
- trouver comment rafraichir les équipements depuis le code. Afin de consulter des dernières cotation.
- Vérifier via le code si l’équipement existe pour prévenir de bug en cas de changement.
En espérant que cela inspire d’autre 