no message
This commit is contained in:
+73
-15
@@ -91,11 +91,50 @@ class Abrechnung extends IPSModule
|
||||
{
|
||||
parent::ApplyChanges();
|
||||
$this->RegisterTariffVariableProfiles();
|
||||
$this->RegisterTariffWebhook();
|
||||
$this->EnsureVisuTariffObjects();
|
||||
$this->InitializeVisuTariffDefaults();
|
||||
$this->UpdateTariffOverview();
|
||||
}
|
||||
|
||||
private function RegisterTariffWebhook()
|
||||
{
|
||||
$webhook = $this->GetTariffWebhookPath();
|
||||
$ids = @IPS_GetInstanceListByModuleID('{015A6EB8-D6E5-4B93-B496-0D3F77AE9FE1}');
|
||||
if (empty($ids)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$hookID = $ids[0];
|
||||
$hooks = json_decode(IPS_GetProperty($hookID, 'Hooks'), true);
|
||||
$hooks = is_array($hooks) ? $hooks : [];
|
||||
$found = false;
|
||||
|
||||
foreach ($hooks as $index => $hook) {
|
||||
if (($hook['Hook'] ?? '') !== $webhook) {
|
||||
continue;
|
||||
}
|
||||
$hooks[$index]['TargetID'] = $this->InstanceID;
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!$found) {
|
||||
$hooks[] = [
|
||||
'Hook' => $webhook,
|
||||
'TargetID' => $this->InstanceID
|
||||
];
|
||||
}
|
||||
|
||||
IPS_SetProperty($hookID, 'Hooks', json_encode($hooks));
|
||||
IPS_ApplyChanges($hookID);
|
||||
}
|
||||
|
||||
private function GetTariffWebhookPath()
|
||||
{
|
||||
return '/hook/belevo_abrechnung_tariffs_' . $this->InstanceID;
|
||||
}
|
||||
|
||||
private function EnsureVisuTariffObjects()
|
||||
{
|
||||
$this->RegisterVariableString('VisuTariffOverview', 'Tarife bearbeiten', '~HTMLBox', 10);
|
||||
@@ -347,12 +386,11 @@ class Abrechnung extends IPSModule
|
||||
$typeOptions .= '<option value="' . $this->h($type) . '">' . $this->h($type) . '</option>';
|
||||
}
|
||||
|
||||
$instanceID = (int)$this->InstanceID;
|
||||
$payloadID = (int)$this->GetIDForIdent('VisuTariffPayload');
|
||||
$webhookPath = $this->GetTariffWebhookPath();
|
||||
$status = $this->h(@GetValue($this->GetIDForIdent('VisuTariffStatus')));
|
||||
|
||||
$html = "
|
||||
<div class='belevo-tariffs' data-instance='" . $instanceID . "'>
|
||||
<div class='belevo-tariffs'>
|
||||
<style>
|
||||
.belevo-tariffs{font-family:Arial,Helvetica,sans-serif;font-size:13px;color:#202124;max-width:980px}
|
||||
.belevo-tariffs table{width:100%;border-collapse:collapse;background:#fff}
|
||||
@@ -366,6 +404,8 @@ class Abrechnung extends IPSModule
|
||||
.belevo-tariffs button.danger{color:#9b1c1c;border-color:#d7a6a6;background:#fff5f5}
|
||||
.belevo-tariffs .status{margin-left:8px;color:#4b5563}
|
||||
</style>
|
||||
<form method='post' action='" . $this->h($webhookPath) . "' target='belevo_tariff_save_frame'>
|
||||
<input type='hidden' name='payload' value=''>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -380,17 +420,25 @@ class Abrechnung extends IPSModule
|
||||
</table>
|
||||
<div class='actions'>
|
||||
<button type='button' data-action='add'>Zeile hinzufügen</button>
|
||||
<button type='button' data-action='save' class='primary'>Tarife speichern</button>
|
||||
<button type='submit' data-action='save' class='primary'>Tarife speichern</button>
|
||||
<span class='status'>" . $status . "</span>
|
||||
</div>
|
||||
</form>
|
||||
<iframe name='belevo_tariff_save_frame' style='display:none;width:0;height:0;border:0'></iframe>
|
||||
<template data-row-template>" . $this->BuildTariffEditorRow('Netztarif', date('Y-01-01'), date('Y-12-31'), '0.000') . "</template>
|
||||
<script>
|
||||
(function(){
|
||||
var root=document.currentScript.closest('.belevo-tariffs');
|
||||
if(!root||root.dataset.bound==='1'){return;}
|
||||
root.dataset.bound='1';
|
||||
var form=root.querySelector('form');
|
||||
var tbody=root.querySelector('tbody');
|
||||
var status=root.querySelector('.status');
|
||||
window.addEventListener('message',function(event){
|
||||
if(event&&event.data&&event.data.type==='belevoTariffSave'){
|
||||
status.textContent=event.data.message||'Gespeichert.';
|
||||
}
|
||||
});
|
||||
function bindDelete(row){
|
||||
var btn=row.querySelector('[data-action=delete]');
|
||||
if(btn){btn.onclick=function(){row.parentNode.removeChild(row);};}
|
||||
@@ -404,7 +452,7 @@ root.querySelector('[data-action=add]').onclick=function(){
|
||||
tbody.appendChild(row);
|
||||
bindDelete(row);
|
||||
};
|
||||
root.querySelector('[data-action=save]').onclick=function(){
|
||||
form.onsubmit=function(){
|
||||
var rows=[];
|
||||
Array.prototype.forEach.call(tbody.querySelectorAll('tr'),function(row){
|
||||
var type=row.querySelector('[data-field=unit_type]').value;
|
||||
@@ -415,17 +463,10 @@ root.querySelector('[data-action=save]').onclick=function(){
|
||||
rows.push({unit_type:type,start:start,end:end,price:price});
|
||||
}
|
||||
});
|
||||
var payload=JSON.stringify(rows);
|
||||
form.querySelector('input[name=payload]').value=JSON.stringify(rows);
|
||||
status.textContent='Speichern...';
|
||||
if(typeof requestAction==='function'){
|
||||
requestAction(" . $payloadID . ",payload);
|
||||
status.textContent='Speichern gesendet.';
|
||||
}else if(window.parent&&typeof window.parent.requestAction==='function'){
|
||||
window.parent.requestAction(" . $payloadID . ",payload);
|
||||
status.textContent='Speichern gesendet.';
|
||||
}else{
|
||||
status.textContent='Fehler: requestAction nicht verfügbar.';
|
||||
}
|
||||
window.setTimeout(function(){status.textContent='Gesendet. Tabelle wird nach dem Speichern aktualisiert.';},800);
|
||||
return true;
|
||||
};
|
||||
})();
|
||||
</script>
|
||||
@@ -599,6 +640,23 @@ root.querySelector('[data-action=save]').onclick=function(){
|
||||
}
|
||||
}
|
||||
|
||||
public function ProcessHookData()
|
||||
{
|
||||
$message = '';
|
||||
try {
|
||||
$payload = $_POST['payload'] ?? '';
|
||||
$message = $this->SaveTariffTableFromPayload($payload);
|
||||
SetValue($this->GetIDForIdent('VisuTariffStatus'), $message);
|
||||
$this->UpdateTariffOverview();
|
||||
} catch (Throwable $e) {
|
||||
$message = 'Fehler beim Speichern der Tarifliste: ' . $e->getMessage();
|
||||
SetValue($this->GetIDForIdent('VisuTariffStatus'), $message);
|
||||
}
|
||||
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
echo '<!doctype html><html><body><script>try{parent.postMessage({type:"belevoTariffSave",message:' . json_encode($message) . '}, "*");}catch(e){}</script>' . $this->h($message) . '</body></html>';
|
||||
}
|
||||
|
||||
// ====================== PDF-Erstellung ======================
|
||||
|
||||
public function GenerateInvoices()
|
||||
|
||||
Reference in New Issue
Block a user