{"id":18206,"date":"2025-07-11T16:18:27","date_gmt":"2025-07-11T15:18:27","guid":{"rendered":"https:\/\/marinaport.hu\/app\/?page_id=18206"},"modified":"2026-04-19T18:32:53","modified_gmt":"2026-04-19T17:32:53","slug":"login","status":"publish","type":"page","link":"https:\/\/marinaport.hu\/app\/login\/","title":{"rendered":"login"},"content":{"rendered":"\n\n\n<p>[wp-members status=&#8221;in&#8221; role=&#8221;administrator,editor&#8221;]<\/p>\n\n\n\n<div style=\"font-family: sans-serif; max-width: 800px; margin: 0 auto; padding: 10px;\">\n    <script src=\"https:\/\/www.gstatic.com\/firebasejs\/9.23.0\/firebase-app-compat.js\"><\/script>\n    <script src=\"https:\/\/www.gstatic.com\/firebasejs\/9.23.0\/firebase-auth-compat.js\"><\/script>\n    <script src=\"https:\/\/www.gstatic.com\/firebasejs\/9.23.0\/firebase-database-compat.js\"><\/script>\n\n    <script>\n        var firebaseConfig = {\n            apiKey: \"AIzaSyDyHeexzDlwFVL3kowJ3sDBlXiPjCCVg2w\",\n            authDomain: \"wellness-ee025.firebaseapp.com\",\n            databaseURL: \"https:\/\/wellness-ee025-default-rtdb.firebaseio.com\",\n            projectId: \"wellness-ee025\",\n            storageBucket: \"wellness-ee025.appspot.com\",\n            messagingSenderId: \"196714975370\",\n            appId: \"1:196714975370:web:6548565d62a5e6252ddd73\",\n            measurementId: \"G-GJWK46QM3D\"\n        };\n        if (!firebase.apps.length) { \n            firebase.initializeApp(firebaseConfig); \n        }\n    <\/script>\n\n    <div style=\"display: flex; justify-content: space-between; align-items: center;\">\n        <h3>Klubk\u00e1rtya Napl\u00f3<\/h3>\n        <button id=\"kijelentkezes-gomb\" onclick=\"kilepes()\" style=\"display: none; padding: 5px 10px; background-color: #d9534f; color: white; border: none; border-radius: 4px; cursor: pointer;\">Kijelentkez\u00e9s<\/button>\n    <\/div>\n\n    <div id=\"bejelentkezo-kontener\" style=\"margin-bottom: 20px; padding: 15px; background-color: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);\">\n        <h4 style=\"margin-top: 0;\">Bejelentkez\u00e9s sz\u00fcks\u00e9ges<\/h4>\n        <input type=\"email\" id=\"login-email\" placeholder=\"E-mail c\u00edm\" style=\"padding: 8px; width: 100%; max-width: 300px; margin-bottom: 10px; display: block; border: 1px solid #ccc; border-radius: 4px;\">\n        <input type=\"password\" id=\"login-jelszo\" placeholder=\"Jelsz\u00f3\" style=\"padding: 8px; width: 100%; max-width: 300px; margin-bottom: 10px; display: block; border: 1px solid #ccc; border-radius: 4px;\">\n        <button onclick=\"belepes()\" style=\"padding: 9px 15px; background-color: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer;\">Bejelentkez\u00e9s<\/button>\n        <p id=\"login-hiba\" style=\"color: red; margin-top: 10px; display: none;\"><\/p>\n    <\/div>\n\n    <div id=\"kereso-kontener\" style=\"display: none; margin-bottom: 20px; padding: 15px; background-color: #f9f9f9; border: 1px solid #ddd; border-radius: 8px;\">\n        <label for=\"datum-valaszto\" style=\"font-weight: bold; display: block; margin-bottom: 8px;\">V\u00e1lasszon egy napot:<\/label>\n        <input type=\"date\" id=\"datum-valaszto\" style=\"padding: 8px; font-size: 16px; border-radius: 4px; border: 1px solid #ccc;\">\n        <button onclick=\"indulALekerdezes()\" style=\"padding: 9px 15px; font-size: 16px; background-color: #4CAF50; color: white; border: none; border-radius: 4px; cursor: pointer; margin-left: 10px;\">Lek\u00e9rdez\u00e9s<\/button>\n    <\/div>\n\n    <div id=\"tranzakciok-reszletek\"><\/div>\n\n    <script>\n        var auth = firebase.auth();\n        var db = firebase.database();\n        \n        var keresoKontener = document.getElementById('kereso-kontener');\n        var bejelentkezoKontener = document.getElementById('bejelentkezo-kontener');\n        var kijelentkezesGomb = document.getElementById('kijelentkezes-gomb');\n        var tranzakciokReszletek = document.getElementById('tranzakciok-reszletek');\n        var datumValaszto = document.getElementById('datum-valaszto');\n\n        \/\/ Mai nap be\u00e1ll\u00edt\u00e1sa\n        var maiNap = new Date().toISOString().split('T')[0];\n        datumValaszto.value = maiNap;\n\n        \/\/ BEJELENTKEZ\u00c9S \u00c1LLAPOT\u00c1NAK FIGYEL\u00c9SE\n        auth.onAuthStateChanged(function(user) {\n            if (user) {\n                \/\/ Ha be van jelentkezve: Mutatjuk a keres\u0151t \u00e9s a kijelentkez\u00e9s gombot\n                bejelentkezoKontener.style.display = 'none';\n                keresoKontener.style.display = 'block';\n                kijelentkezesGomb.style.display = 'inline-block';\n                tranzakciokReszletek.innerHTML = \"\"; \n            } else {\n                \/\/ Ha nincs bejelentkezve: Mutatjuk a bejelentkez\u0151 \u0171rlapot\n                keresoKontener.style.display = 'none';\n                kijelentkezesGomb.style.display = 'none';\n                bejelentkezoKontener.style.display = 'block';\n                tranzakciokReszletek.innerHTML = \"\";\n            }\n        });\n\n        \/\/ BEJELENTKEZ\u00c9S F\u00dcGGV\u00c9NY\n        window.belepes = function() {\n            var email = document.getElementById('login-email').value;\n            var jelszo = document.getElementById('login-jelszo').value;\n            var hibaMezo = document.getElementById('login-hiba');\n\n            if(!email || !jelszo) {\n                hibaMezo.style.display = 'block';\n                hibaMezo.innerText = \"K\u00e9rem adja meg az e-mail c\u00edmet \u00e9s a jelsz\u00f3t!\";\n                return;\n            }\n\n            auth.signInWithEmailAndPassword(email, jelszo)\n                .then(function(userCredential) {\n                    hibaMezo.style.display = 'none';\n                    \/\/ A rendszer automatikusan \u00e9szleli a bel\u00e9p\u00e9st \u00e9s friss\u00edti a fel\u00fcletet\n                })\n                .catch(function(error) {\n                    hibaMezo.style.display = 'block';\n                    hibaMezo.innerText = \"Helytelen e-mail c\u00edm vagy jelsz\u00f3!\";\n                    console.error(error);\n                });\n        };\n\n        \/\/ KIJELENTKEZ\u00c9S F\u00dcGGV\u00c9NY\n        window.kilepes = function() {\n            auth.signOut().then(function() {\n                \/\/ Sikeres kijelentkez\u00e9s\n            }).catch(function(error) {\n                console.error(\"Hiba a kijelentkez\u00e9skor:\", error);\n            });\n        };\n\n        \/\/ A M\u00c1R M\u0170K\u00d6D\u0150 LEK\u00c9RDEZ\u00c9S\n        window.indulALekerdezes = function() {\n            var valasztottDatum = datumValaszto.value; \n\n            if (!valasztottDatum) {\n                alert(\"K\u00e9rj\u00fck, v\u00e1lasszon egy d\u00e1tumot!\");\n                return;\n            }\n\n            tranzakciokReszletek.innerHTML = \"<p>Tranzakci\u00f3k bet\u00f6lt\u00e9se a(z) <strong>\" + valasztottDatum + \"<\/strong> napra...<\/p>\";\n\n            var terminalLekerdezes = db.ref('Terminal').get();\n            var tranzakcioLekerdezes = db.ref('Klubkartya naplo\/' + valasztottDatum).get();\n\n            Promise.all([terminalLekerdezes, tranzakcioLekerdezes]).then(function(snapshots) {\n                var terminalSnapshot = snapshots[0];\n                var tranzakcioSnapshot = snapshots[1];\n                \n                var terminalNevek = terminalSnapshot.val() || {};\n                var napiTranzakciok = tranzakcioSnapshot.val();\n\n                var html = \"<h3 style='border-bottom: 2px solid #4CAF50; padding-bottom: 5px;'>\" + valasztottDatum + \" napi tranzakci\u00f3k<\/h3>\";\n                \n                if (napiTranzakciok) {\n                    var csoportositott = {};\n                    \n                    for (var ido in napiTranzakciok) {\n                        var tranzakcio = napiTranzakciok[ido];\n                        var terminalId = tranzakcio.terminalId;\n                        \n                        if (!csoportositott[terminalId]) {\n                            csoportositott[terminalId] = { tranzakciok: [], osszesen: 0, borravaloOsszesen: 0 };\n                        }\n                        tranzakcio.ido = ido;\n                        \n                        var tip = parseFloat(tranzakcio.tipAmount) || 0; \n                        var total = parseFloat(tranzakcio.totalAmount) || 0;\n                        \n                        csoportositott[terminalId].tranzakciok.push(tranzakcio);\n                        csoportositott[terminalId].osszesen += total;\n                        csoportositott[terminalId].borravaloOsszesen += tip;\n                    }\n\n                    for (var tId in csoportositott) {\n                        var terminalNev = terminalNevek[tId] || \"Ismeretlen Termin\u00e1l\";\n                        html += \"<h4 style='margin-top: 25px; color: #333;'>\" + terminalNev + \" (\" + tId + \")<\/h4>\";\n                        \n                        html += \"<table style='width: 100%; border-collapse: collapse; margin-bottom: 20px; border: 1px solid #ddd;'>\";\n                        html += \"<thead style='background-color: #4CAF50; color: white;'><tr>\";\n                        html += \"<th style='padding: 10px; border: 1px solid #ddd; text-align: left;'>Id\u0151pont<\/th>\";\n                        html += \"<th style='padding: 10px; border: 1px solid #ddd; text-align: left;'>N\u00e9v<\/th>\";\n                        html += \"<th style='padding: 10px; border: 1px solid #ddd; text-align: right;'>Borraval\u00f3<\/th>\";\n                        html += \"<th style='padding: 10px; border: 1px solid #ddd; text-align: right;'>\u00d6sszeg<\/th>\";\n                        html += \"<\/tr><\/thead><tbody>\";\n                        \n                        var csoportTranzakcioi = csoportositott[tId].tranzakciok;\n                        \n                        for(var i = 0; i < csoportTranzakcioi.length; i++) {\n                            var t = csoportTranzakcioi[i];\n                            html += \"<tr>\";\n                            html += \"<td style='padding: 8px; border: 1px solid #ddd;'>\" + t.ido.replace(\/-\/g, ':') + \"<\/td>\";\n                            html += \"<td style='padding: 8px; border: 1px solid #ddd;'>\" + (t.cardHolderName || \"\") + \"<\/td>\";\n                            html += \"<td style='padding: 8px; border: 1px solid #ddd; text-align: right;'>\" + (t.tipAmount || 0) + \"<\/td>\";\n                            html += \"<td style='padding: 8px; border: 1px solid #ddd; text-align: right;'>\" + (t.totalAmount || 0) + \"<\/td>\";\n                            html += \"<\/tr>\";\n                        }\n\n                        html += \"<\/tbody><tfoot style='font-weight: bold; background-color: #f2f2f2;'><tr>\";\n                        html += \"<td colspan='2' style='padding: 10px; border: 1px solid #ddd; text-align: right;'>Termin\u00e1l \u00f6sszesen:<\/td>\";\n                        html += \"<td style='padding: 10px; border: 1px solid #ddd; text-align: right;'>\" + csoportositott[tId].borravaloOsszesen + \"<\/td>\";\n                        html += \"<td style='padding: 10px; border: 1px solid #ddd; text-align: right;'>\" + csoportositott[tId].osszesen + \"<\/td>\";\n                        html += \"<\/tr><\/tfoot><\/table>\";\n                    }\n\n                } else {\n                    html += \"<div style='padding: 20px; background-color: #fff3cd; border: 1px solid #ffeeba; border-radius: 4px; color: #856404;'>Ezen a napon (\" + valasztottDatum + \") nem t\u00f6rt\u00e9nt tranzakci\u00f3.<\/div>\";\n                }\n                tranzakciokReszletek.innerHTML = html;\n                \n            }).catch(function(error) {\n                console.error(\"Hiba:\", error);\n                tranzakciokReszletek.innerHTML = \"<p style='color:red;'><strong>Hiba t\u00f6rt\u00e9nt:<\/strong> \" + error.message + \"<\/p>\";\n            });\n        }\n    <\/script>\n<\/div>\n\n\n<p>[\/wp-members]<\/p>\n\n\n\n<script src=\"https:\/\/www.gstatic.com\/firebasejs\/9.23.0\/firebase-app-compat.js\"><\/script>\n<script src=\"https:\/\/www.gstatic.com\/firebasejs\/9.23.0\/firebase-auth-compat.js\"><\/script>\n<script src=\"https:\/\/www.gstatic.com\/firebasejs\/9.23.0\/firebase-database-compat.js\"><\/script>\n\n<script>\nconst firebaseConfig = {\n  apiKey: \"AIzaSyDyHeexzDlwFVL3kowJ3sDBlXiPjCCVg2w\",\n  authDomain: \"wellness-ee025.firebaseapp.com\",\n  databaseURL: \"https:\/\/wellness-ee025-default-rtdb.firebaseio.com\",\n  projectId: \"wellness-ee025\",\n  storageBucket: \"wellness-ee025.appspot.com\",\n  messagingSenderId: \"196714975370\",\n  appId: \"1:196714975370:web:6548565d62a5e6252ddd73\"\n};\nif (!firebase.apps.length) { firebase.initializeApp(firebaseConfig); }\nconst db = firebase.database();\nconst auth = firebase.auth();\n\nauth.signInAnonymously().catch(err => console.error(\"Auth hiba:\", err));\n<\/script>\n\n<div style=\"font-family: Arial; padding: 20px; border: 1px solid #ccc; border-radius: 8px; max-width: 600px; margin: 20px auto;\">\n    <h3>CSV Borraval\u00f3 hozz\u00e1ad\u00e1s<\/h3>\n    <input type=\"file\" id=\"csvInput\" accept=\".csv\" style=\"margin-bottom: 20px; width: 100%;\"><br>\n    <button id=\"processBtn\" style=\"padding: 12px 24px; background: #27ae60; color: white; border: none; cursor: pointer; border-radius: 4px; width: 100%;\">Feldolgoz\u00e1s ind\u00edt\u00e1sa<\/button>\n    <div id=\"status\" style=\"margin-top: 20px; padding: 10px; border-radius: 4px; background: #f8f9fa;\">V\u00e1lasszon ki egy CSV f\u00e1jlt!<\/div>\n<\/div>\n\n<script>\ndocument.getElementById('processBtn').addEventListener('click', async () => {\n    const fileInput = document.getElementById('csvInput');\n    const status = document.getElementById('status');\n    \n    if (!fileInput.files.length) { alert(\"V\u00e1lasszon ki egy f\u00e1jlt!\"); return; }\n\n    const file = fileInput.files[0];\n    const reader = new FileReader();\n\n    reader.onload = async (e) => {\n        try {\n            status.innerHTML = \"Elemz\u00e9s...\";\n            const lines = e.target.result.split(\/\\r?\\n\/).filter(l => l.trim() !== \"\");\n            const separator = lines[0].includes(';') ? ';' : ',';\n            const clean = (str) => str ? str.replace(\/\"\/g, '').trim() : \"\";\n\n            const headers = lines[0].split(separator).map(clean);\n            const datumIdx = headers.indexOf(\"D\u00e1tum\");\n            const transIdIdx = headers.indexOf(\"Tranzakci\u00f3 azonos\u00edt\u00f3\");\n            const szamlaszamIdx = headers.indexOf(\"Sz\u00e1mlasz\u00e1m\");\n\n            if (datumIdx === -1 || transIdIdx === -1) throw new Error(\"Hib\u00e1s CSV fejl\u00e9c!\");\n\n            const egyediDatumok = new Set();\n            for (let i = 1; i < lines.length; i++) {\n                const cells = lines[i].split(separator);\n                if (cells[datumIdx]) {\n                    \/\/ M\u00d3DOS\u00cdT\u00c1S: A d\u00e1tum felismer\u00e9se, hogy Mac-en \u00e9s Windows-on is m\u0171k\u00f6dj\u00f6n (k\u00f6t\u0151jel, pont, perjel)\n                    let rawDate = clean(cells[datumIdx]);\n                    let dateMatch = rawDate.match(\/^(\\d{4})[.\\-\/\\s]+(\\d{1,2})[.\\-\/\\s]+(\\d{1,2})\/);\n                    if (dateMatch) {\n                        let ev = dateMatch[1];\n                        let ho = dateMatch[2].length === 1 ? '0' + dateMatch[2] : dateMatch[2];\n                        let nap = dateMatch[3].length === 1 ? '0' + dateMatch[3] : dateMatch[3];\n                        egyediDatumok.add(ev + '-' + ho + '-' + nap);\n                    }\n                }\n            }\n\n            status.innerHTML = \"Adatb\u00e1zis lek\u00e9rdez\u00e9se...\";\n            const tipMap = new Map();\n            \n            const promises = Array.from(egyediDatumok).map(nap => \n                db.ref(`Klubkartya naplo\/${nap}`).get().then(snap => {\n                    if (snap.exists()) {\n                        Object.values(snap.val()).forEach(tr => {\n                            if (tr.transactionId) tipMap.set(String(tr.transactionId), tr.tipAmount || 0);\n                        });\n                    }\n                })\n            );\n\n            await Promise.all(promises);\n\n            status.innerHTML = \"CSV friss\u00edt\u00e9se...\";\n            \n            const modositottFejlec = lines[0].replace(\"Sz\u00e1mlasz\u00e1m\", \"Borraval\u00f3\");\n            const resultLines = [modositottFejlec];\n\n            for (let i = 1; i < lines.length; i++) {\n                let cells = lines[i].split(separator);\n                const tId = clean(cells[transIdIdx]);\n                if (tipMap.has(tId)) {\n                    cells[szamlaszamIdx] = `\"${tipMap.get(tId)}\"`;\n                }\n                resultLines.push(cells.join(separator));\n            }\n\n            const blob = new Blob([\"\\ufeff\" + resultLines.join('\\r\\n')], { type: 'text\/csv;charset=utf-8;' });\n            const link = document.createElement(\"a\");\n            link.href = URL.createObjectURL(blob);\n            link.download = \"kesz_\" + file.name;\n            link.click();\n            \n            status.innerHTML = \"Sikeresen elk\u00e9sz\u00fclt \u00e9s let\u00f6ltve!\";\n            status.style.color = \"green\";\n\n        } catch (err) {\n            status.innerHTML = \"HIBA: \" + err.message;\n            status.style.color = \"red\";\n        }\n    };\n    reader.readAsText(file);\n});\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Klubk\u00e1rtya Napl\u00f3 Kijelentkez\u00e9s Bejelentkez\u00e9s sz\u00fcks\u00e9ges Bejelentkez\u00e9s V\u00e1lasszon egy napot: Lek\u00e9rdez\u00e9s CSV Borraval\u00f3 hozz\u00e1ad\u00e1s Feldolgoz\u00e1s ind\u00edt\u00e1sa V\u00e1lasszon ki egy CSV f\u00e1jlt!<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"blank","meta":{"footnotes":""},"class_list":["post-18206","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/marinaport.hu\/app\/wp-json\/wp\/v2\/pages\/18206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marinaport.hu\/app\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/marinaport.hu\/app\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/marinaport.hu\/app\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/marinaport.hu\/app\/wp-json\/wp\/v2\/comments?post=18206"}],"version-history":[{"count":51,"href":"https:\/\/marinaport.hu\/app\/wp-json\/wp\/v2\/pages\/18206\/revisions"}],"predecessor-version":[{"id":21994,"href":"https:\/\/marinaport.hu\/app\/wp-json\/wp\/v2\/pages\/18206\/revisions\/21994"}],"wp:attachment":[{"href":"https:\/\/marinaport.hu\/app\/wp-json\/wp\/v2\/media?parent=18206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}