Computed field codice per sommare campi entity refrence prepopulate
Salve a tutti, per sopperire ad un problema di views con le aggregazioni, avrei bisogno di calcolare la somma di più campi referenziati con prepopulate, ma non ho idea della sintatti da usare.
Lo scenario è questo:
Tipo di contenuto Padre = Costo
il quale contiene un campo calcolato chiamato somma_quote
Tipo di contenuto Figlio = Quota di destinazione
il quale contiene i campi:
entity reference prepopulate chiamato rif_costo
un campo numerico chiamato importo_quota
Vorrei che.. salvando un nodo di tipo quota di destinazione, automaicamente venisse sommato l'importo quota nel tipo di contenuto costo, nel campo somma quote
In pratica il sub totale risiederebbe nel campo padre.
Il problema è duplice perchè:
1 non ho idea del codice da scrivere nel campo calcolato
2 non so se è fattibile in quanto l'operazione avverrebbe quando salvo il nodo figlio, ma il campo calcolato risiede nel nodo padre.
Risposte
Ciao, potresti usare Rules
Ciao, potresti usare Rules per lanciare il ricalcolo e salvataggio del nodo padre attraverso il riferimento rif_costo nel momento in cui salvi o crei un contenuto di tipo "Quota di destinazione".
Credo che con Rules potresti risolvere senza scrivere codice.
Altrimenti dovresti utilizzare gli hook hook_node_insert() e hook_node_update().
Qualcosa come (importante: non testato, giusto per darti un'idea):
<?php
// Su aggiornamento
function nomemodulo_node_update($node) {
// Il nodo aggiornato è una quota di destinazione
if ($node->type === 'quota_destinazione') {
// Carico il padre
$costo = node_load($node->rif_costo[LANGUAGE_NONE][0]['target_id']);
if ($costo) {
// Trovo tutte le quote che afferiscono allo stesso costo della quota aggiornata
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'quota_destinazione')
->propertyCondition('status', NODE_PUBLISHED) // se necessario, solo pubblicati
->fieldCondition('rif_costo', 'target_id', $costo->nid, '=');
$quoteQuery = $query->execute();
if (isset($quoteQuery['node'])) {
// Carico tutte le quote
$quote = node_load_multiple(array_keys($quoteQuery['node']));
$somma = 0;
// Somma quote
foreach ($quote as $quota) {
$somma += $quota->importo_quota[LANGUAGE_NONE][0]['value'];
}
// Aggiornamento campo padre e salvataggio
$costo->somma_quote[LANGUAGE_NONE][0]['value'] = $somma;
node_save($costo);
}
}
}
}
?>
cosa simile è necessaria alla creazione di una nuova quota.