|
@@ -2,12 +2,15 @@
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* @file
|
|
* @file
|
|
|
- * Parandab views_data_export rea renderdamise Drupal 11 jaoks.
|
|
|
|
|
|
|
+ * Parandab views_data_export rea renderdamise + views_aggregator expression
|
|
|
|
|
+ * funktsiooni Drupal 11 jaoks.
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
use Drupal\views\Plugin\views\row\Fields;
|
|
use Drupal\views\Plugin\views\row\Fields;
|
|
|
use Drupal\views\ResultRow;
|
|
use Drupal\views\ResultRow;
|
|
|
use Drupal\views\ViewExecutable;
|
|
use Drupal\views\ViewExecutable;
|
|
|
|
|
+use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
|
|
|
|
|
+use Drupal\Core\Entity\EntityInterface;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Implements hook_views_data_export_row_alter().
|
|
* Implements hook_views_data_export_row_alter().
|
|
@@ -40,3 +43,110 @@ function mustikas_export_views_data_export_row_alter(&$row, ResultRow $result, V
|
|
|
// DataExport style ootab, et iga rida oleks assoc massiiv väljadest.
|
|
// DataExport style ootab, et iga rida oleks assoc massiiv väljadest.
|
|
|
$row = $rendered;
|
|
$row = $rendered;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * Implements hook_views_aggregation_functions_info().
|
|
|
|
|
+ *
|
|
|
|
|
+ * Lisab "expression" agregeerimisfunktsiooni: arvutab [a] - [b] summa
|
|
|
|
|
+ * (D7 views_aggregator/views_calc analogg, nt liikmemaksu saldo).
|
|
|
|
|
+ */
|
|
|
|
|
+function mustikas_export_views_aggregation_functions_info() {
|
|
|
|
|
+ return [
|
|
|
|
|
+ 'mustikas_expression_diff' => [
|
|
|
|
|
+ 'title' => t('Expression (diff)'),
|
|
|
|
|
+ 'handler' => '_mustikas_expression_diff',
|
|
|
|
|
+ ],
|
|
|
|
|
+ ];
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * Arvutab kahe välja vahe summa (agr_par = "field_a|field_b").
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param array $rows
|
|
|
|
|
+ * Vaate tulemuste read.
|
|
|
|
|
+ * @param string $aggr_par
|
|
|
|
|
+ * Parameeter kujul "field_deebet|field_kreedit".
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return mixed
|
|
|
|
|
+ * Summeeritud vahe väärtus.
|
|
|
|
|
+ */
|
|
|
|
|
+function _mustikas_expression_diff(array $rows, string $aggr_par = '') {
|
|
|
|
|
+ $parts = explode('|', $aggr_par);
|
|
|
|
|
+ $a = $parts[0] ?? '';
|
|
|
|
|
+ $b = $parts[1] ?? '';
|
|
|
|
|
+
|
|
|
|
|
+ $total = 0.0;
|
|
|
|
|
+ foreach ($rows as $row) {
|
|
|
|
|
+ $av = isset($row->{$a}) ? (float) $row->{$a} : 0.0;
|
|
|
|
|
+ $bv = isset($row->{$b}) ? (float) $row->{$b} : 0.0;
|
|
|
|
|
+ $total += ($av - $bv);
|
|
|
|
|
+ }
|
|
|
|
|
+ return $total;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * Implements hook_entity_view_alter().
|
|
|
|
|
+ *
|
|
|
|
|
+ * Lisa emal_liige node lehele arvutatud liikmemaksu saldo ja viimane
|
|
|
|
|
+ * tasumise kuupäev (D7 views_aggregator blokkide analogg).
|
|
|
|
|
+ */
|
|
|
|
|
+function mustikas_export_entity_view_alter(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display) {
|
|
|
|
|
+ if ($entity->getEntityTypeId() !== 'node' || $entity->bundle() !== 'emal_liige') {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $nid = (int) $entity->id();
|
|
|
|
|
+ $conn = \Drupal::database();
|
|
|
|
|
+
|
|
|
|
|
+ // Saldo = SUM(deebet) - SUM(kreedit) kande_tyyp=6 (liikmemaks) kannetel.
|
|
|
|
|
+ $saldo = $conn->query(
|
|
|
|
|
+ "SELECT
|
|
|
|
|
+ COALESCE(SUM(CASE WHEN d.field_deebet_value IS NOT NULL THEN d.field_deebet_value ELSE 0 END), 0) -
|
|
|
|
|
+ COALESCE(SUM(CASE WHEN k.field_kreedit_value IS NOT NULL THEN k.field_kreedit_value ELSE 0 END), 0) AS saldo
|
|
|
|
|
+ FROM {node__field_kasutaja} kas
|
|
|
|
|
+ LEFT JOIN {node__field_deebet} d ON d.entity_id = kas.entity_id AND d.langcode = kas.langcode
|
|
|
|
|
+ LEFT JOIN {node__field_kreedit} k ON k.entity_id = kas.entity_id AND k.langcode = kas.langcode
|
|
|
|
|
+ WHERE kas.field_kasutaja_target_id = :nid
|
|
|
|
|
+ AND EXISTS (SELECT 1 FROM {node__field_kande_tyyp} kt
|
|
|
|
|
+ WHERE kt.entity_id = kas.entity_id AND kt.field_kande_tyyp_target_id = 6)",
|
|
|
|
|
+ [':nid' => $nid]
|
|
|
|
|
+ )->fetchField();
|
|
|
|
|
+
|
|
|
|
|
+ // Viimane tasumise kpv = MAX(field_date) kande_tyyp=6 ja deebet != 0.
|
|
|
|
|
+ $kpv = $conn->query(
|
|
|
|
|
+ "SELECT MAX(fd.field_date_value)
|
|
|
|
|
+ FROM {node__field_kasutaja} kas
|
|
|
|
|
+ JOIN {node__field_date} fd ON fd.entity_id = kas.entity_id
|
|
|
|
|
+ JOIN {node__field_deebet} d ON d.entity_id = kas.entity_id
|
|
|
|
|
+ WHERE kas.field_kasutaja_target_id = :nid
|
|
|
|
|
+ AND d.field_deebet_value IS NOT NULL AND d.field_deebet_value <> 0
|
|
|
|
|
+ AND EXISTS (SELECT 1 FROM {node__field_kande_tyyp} kt
|
|
|
|
|
+ WHERE kt.entity_id = kas.entity_id AND kt.field_kande_tyyp_target_id = 6)",
|
|
|
|
|
+ [':nid' => $nid]
|
|
|
|
|
+ )->fetchField();
|
|
|
|
|
+
|
|
|
|
|
+ $items = [];
|
|
|
|
|
+ if ($saldo !== NULL && $saldo !== '') {
|
|
|
|
|
+ $items[] = [
|
|
|
|
|
+ '#type' => 'item',
|
|
|
|
|
+ '#title' => t('Liikmemaksu saldo'),
|
|
|
|
|
+ '#markup' => number_format((float) $saldo, 2, '.', ''),
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ if ($kpv !== NULL && $kpv !== '') {
|
|
|
|
|
+ $items[] = [
|
|
|
|
|
+ '#type' => 'item',
|
|
|
|
|
+ '#title' => t('Viimane tasumise kpv.'),
|
|
|
|
|
+ '#markup' => \Drupal::service('date.formatter')->format(strtotime($kpv), 'custom', 'd.m.Y'),
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!empty($items)) {
|
|
|
|
|
+ $build['liikmemaks'] = [
|
|
|
|
|
+ '#type' => 'container',
|
|
|
|
|
+ '#weight' => 50,
|
|
|
|
|
+ '#attributes' => ['class' => ['liikmemaks-saldo']],
|
|
|
|
|
+ 'items' => $items,
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+}
|