Mein "echtes" SQL-STATEMENT muss erstmaligen und weiteren Formularaufruf unterscheiden können. Des weiteren auf die Eingabe in einem Text-Rabattfeld und die Auswahl eines anderen Listbox-SQL-Feldes aus einer weiteren Tabelle reagieren. Zusätzlich soll die Summe in "deuteschem" Währungsformat angezeigt werden. Das habe ich nun so gelöst:
Code:
SELECT COALESCE(SUM(`F352`),0)+${input:preiskorrektur}+(SELECT (CASE ${input:status} WHEN 'Kind' THEN SUM(`F559`) ELSE SUM(`F457`) END) FROM `#__visforms_11` WHERE `id` IN ${input:programmauswahl} AND `published` = 1) as value, REPLACE(CONCAT(ROUND(COALESCE(SUM(`F352`),0)+${input:preiskorrektur}+(SELECT (CASE ${input:status} WHEN 'Kind' THEN SUM(`F559`) ELSE SUM(`F457`) END) FROM `#__visforms_11` WHERE `id` IN ${input:programmauswahl} AND `published` = 1),2),' €'),'.',',') as label FROM `#__visforms_10` WHERE `published` = 1 AND `created_by` = '${user:id}'
Ist schon ziemlich komplex (für meine Verhältnisse). Letztendlich scheitere ich aber dabei an der Berücksichtigung eines Rabatt-Text-Feldes (
Code:
${input:preiskorrektur}
), was ich beim Reload nicht berücksichtigen kann (wenn man erst den Rabattwert eingibt und danach nochmals eine Option der Listbox-SQL(RELOAD) wählt, geht es behelfsmäßig) . Löse das jetzt endgültig im onVisformsAfterEditFormSave, wenn der bearbeitete Datensatz auch wirklich final gespeichert wurde. Dort berechne ich die $summe aller Einzelpreise und Rabatte aus allen Datensätzen eines Users mit
Code:
"SELECT SUM(`F352`)+SUM(`F439`) FROM `#__visforms_10` WHERE `published` = 1 AND `created_by` = ".$form->data->created_by
und aktualisiere dessen Datensätze mit
Code:
"UPDATE `#__visforms_{$form->id}` SET `F408` = '$summe' WHERE `published` = 1 AND `created_by` = ".$form->data->created_by
So habe ich alles was ich brauche. Für mich die einfachste und sicherste Berechnung, die für alle Ansichten passt. Vielen Dank Aicha für deine Hilfe.