{"id":31,"date":"2025-12-03T21:44:05","date_gmt":"2025-12-03T20:44:05","guid":{"rendered":"https:\/\/www.tenniscaldes.com\/gestio\/?page_id=31"},"modified":"2026-01-28T20:11:23","modified_gmt":"2026-01-28T19:11:23","slug":"registre-de-socis","status":"publish","type":"page","link":"https:\/\/www.tenniscaldes.com\/gestio\/registre-de-socis\/","title":{"rendered":"Registre de socis"},"content":{"rendered":"<h4 style=\"text-align: center;\">\u26a0\ufe0f<br \/>\nTots els socis han de fer el <strong>nou registre 2026<\/strong><\/h4>\n    <div class=\"tcb-register-wrapper\">\n                <div id=\"tcb-family-validation\" class=\"tcb-member-message tcb-member-error\" role=\"alert\" tabindex=\"-1\" hidden><\/div>\n        <form class=\"tcb-register-form\" method=\"post\">\n\n            <div class=\"tcb-form-header\">\n                <h2>Registra't com a soci<\/h2>\n                <p>Omple les teves dades per donar-te d'alta com a soci del club.<\/p>\n            <\/div>\n\n            <div class=\"tcb-form-section\">\n                <h3>Dades personals<\/h3>\n\n                <div class=\"tcb-form-row tcb-form-row-half\">\n                    <div class=\"tcb-form-field\">\n                        <label>Nom<\/label>\n                        <input type=\"text\" name=\"first_name\" value=\"\" required>\n                    <\/div>\n                    <div class=\"tcb-form-field\">\n                        <label>Cognoms<\/label>\n                        <input type=\"text\" name=\"last_name\" value=\"\" required>\n                    <\/div>\n                <\/div>\n\n                <div class=\"tcb-form-row\">\n                    <div class=\"tcb-form-field\">\n                        <label>Email (ser\u00e0 el teu usuari)<\/label>\n                        <input type=\"email\" name=\"email\" value=\"\" required>\n                    <\/div>\n                <\/div>\n\n                <div class=\"tcb-form-row tcb-form-row-half\">\n                    <div class=\"tcb-form-field\">\n                        <label>Tel\u00e8fon<\/label>\n                        <input type=\"text\" name=\"phone\" value=\"\" required>\n                    <\/div>\n\n                    <div class=\"tcb-form-field\">\n        <label>IBAN (compte bancari per domiciliar la quota)<\/label>\n        <input type=\"text\" name=\"iban\" value=\"\" required placeholder=\"ES00 0000 0000 0000 0000 0000\">\n        <p class=\"tcb-field-help\">\n            Exemple: ES12 1234 5678 9012 3456 7890\n        <\/p>\n    <\/div>\n\n    <div class=\"tcb-form-row\">\n  <div class=\"tcb-form-field\">\n    <div class=\"tcb-consent-box\">\n      <label class=\"tcb-consent-label\">\n        <input type=\"checkbox\" name=\"sepa_consent\" value=\"1\"  required>\n        <span>Accepto la domiciliacio bancaria de la quota del Club Tennis Caldes mitjancant l IBAN indicat.<\/span>\n      <\/label>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n                    \n                    <div class=\"tcb-form-field\">\n                        <label>Pa\u00eds<\/label>\n                        <input type=\"text\" name=\"country\" required value=\"Espanya\">\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"tcb-form-section\">\n                <h3>Adre\u00e7a<\/h3>\n\n                <div class=\"tcb-form-row\">\n                    <div class=\"tcb-form-field\">\n                        <label>Adre\u00e7a<\/label>\n                        <input type=\"text\" name=\"address\" value=\"\" required>\n                    <\/div>\n                <\/div>\n\n                <div class=\"tcb-form-row tcb-form-row-three\">\n                    <div class=\"tcb-form-field\">\n                        <label>Poblaci\u00f3<\/label>\n                        <input type=\"text\" name=\"city\" value=\"\" required>\n                    <\/div>\n                    <div class=\"tcb-form-field\">\n                        <label>Codi postal<\/label>\n                        <input type=\"text\" name=\"postal_code\" value=\"\" required>\n                    <\/div>\n                    <div class=\"tcb-form-field\">\n                        <label>Prov\u00edncia<\/label>\n                        <input type=\"text\" name=\"province\" value=\"\" required>\n                    <\/div>\n\n                    <div class=\"tcb-form-row\">\n    \n<\/div>\n\n                <\/div>\n            <\/div>\n\n            <div class=\"tcb-form-section\">\n                <h3>Modalitat de soci<\/h3>\n\n                <div class=\"tcb-form-row\">\n                    <div class=\"tcb-form-field\">\n                        <label>Tria la modalitat<\/label>\n                       <select name=\"membership_type\" id=\"tcb-membership-type\" required>\n    <option value=\"individual\"  selected='selected'>Individual - 80 EUR<\/option>\n    <option value=\"familiar\" >Familiar - 130 EUR + 10 EUR extra a partir del tercer membre<\/option>\n    <option value=\"monoparental\" >Monoparental (adult + menor) - 100 EUR<\/option>\n    <option value=\"reduida\" >Reducida (&gt;65 o &lt;18) - 45 EUR<\/option>\n<\/select>\n\n                        <p class=\"tcb-field-help\">\n                            En mode familiar o monoparental podras afegir els altres membres de la unitat familiar.\n                        <\/p>\n                    <\/div>\n                <\/div>\n\n                <div id=\"tcb-family-members\" class=\"tcb-family-box\" style=\"display:none;\">\n                    <div class=\"tcb-family-header\">\n                        <h4>Membres familiars<\/h4>\n                        <p>Afegeix adults i menors que formaran part de la quota familiar.<\/p>\n                    <\/div>\n\n                    <div id=\"family-container\"><\/div>\n\n<button type=\"button\" id=\"tcb-add-family-btn\" class=\"tcb-btn-secondary\" onclick=\"tcbAddFamily()\">\u2795 Afegir un nou membre<\/button>\n                <\/div>\n            <\/div>\n\n            <input type=\"hidden\" id=\"tcb_register_nonce\" name=\"tcb_register_nonce\" value=\"ea0ecbd31e\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/gestio\/wp-json\/wp\/v2\/pages\/31\" \/>\n            <div class=\"tcb-form-footer\">\n               \n                <button type=\"submit\" id=\"tcb-register-submit\" class=\"tcb-btn-primary\">\n    <span class=\"tcb-btn-text\">\u2714\ufe0f Crear compte de soci<\/span>\n    <span class=\"tcb-spinner\" aria-hidden=\"true\"><\/span>\n<\/button>\n\n                <p class=\"tcb-footer-note\">\n                    Rebr\u00e0s un email amb el teu usuari i contrasenya per accedir a la zona de socis.\n                <\/p>\n            <\/div>\n\n        <\/form>\n    <\/div>\n\n    <script>\n    (function() {\n        var typeSelect = document.getElementById('tcb-membership-type');\n        var famBox = document.getElementById('tcb-family-members');\n\nvar addBtn = document.getElementById('tcb-add-family-btn');\n\nfunction tcbFamilyLimitRefresh() {\n    if (!typeSelect || !addBtn) return;\n\n    var val = typeSelect.value;\n    var box = document.getElementById('family-container');\n    var count = box ? box.querySelectorAll('.family-member-card').length : 0;\n\n    if (val === 'monoparental') {\n        \/\/ Max 1\n        addBtn.disabled = (count >= 1);\n        addBtn.style.opacity = (count >= 1) ? '0.5' : '1';\n        addBtn.style.cursor  = (count >= 1) ? 'not-allowed' : 'pointer';\n    } else {\n        addBtn.disabled = false;\n        addBtn.style.opacity = '1';\n        addBtn.style.cursor  = 'pointer';\n    }\n}\n\n\n\n        if (typeSelect) {\n           typeSelect.addEventListener('change', function() {\n    var val = this.value;\n    if (val === 'familiar' || val === 'monoparental') {\n        famBox.style.display = 'block';\n    } else {\n        famBox.style.display = 'none';\n    }\n    var active = val === 'familiar' || val === 'monoparental';\n    document.querySelectorAll('.family-member-card').forEach(function(card) {\n        card.querySelectorAll('input, select, button').forEach(function(input) { input.disabled = !active; });\n        if (active) familyContactRefresh(card);\n    });\n    tcbFamilyLimitRefresh();\n});\n\n        }\n\n        var nextFamilyIndex = 0;\n        var postedFamily = [];\n\n        function familyContactRefresh(card) {\n            var age = card.querySelector('[data-family-age]');\n            var checkbox = card.querySelector('[data-family-parent]');\n            var email = card.querySelector('[data-family-email]');\n            var minor = age.value === 'minor';\n            card.querySelector('[data-family-parent-option]').hidden = !minor;\n            checkbox.disabled = !minor;\n            if (!minor) checkbox.checked = false;\n            email.disabled = minor && checkbox.checked;\n            email.required = !email.disabled;\n            card.querySelector('[data-family-email-row]').hidden = email.disabled;\n            email.setCustomValidity('');\n        }\n\n        window.tcbAddFamily = function(data) {\n            var box = document.getElementById('family-container');\n            if (!box) return;\n            var count = box.querySelectorAll('.family-member-card').length;\n            if (!data && typeSelect.value === 'monoparental' && count >= 1) {\n                alert('En la modalitat monoparental nom\u00e9s pots afegir 1 membre familiar.');\n                return;\n            }\n            var idx = nextFamilyIndex++;\n            var card = document.createElement('div');\n            card.className = 'family-member-card';\n            card.innerHTML = '<div class=\"tcb-form-row tcb-form-row-half\">'\n                + '<div class=\"tcb-form-field\"><label>Nom membre<\/label><input type=\"text\" name=\"family['+idx+'][first_name]\" data-family-first required><\/div>'\n                + '<div class=\"tcb-form-field\"><label>Cognoms<\/label><input type=\"text\" name=\"family['+idx+'][last_name]\" data-family-last required><\/div><\/div>'\n                + '<div class=\"tcb-form-row\"><div class=\"tcb-form-field\"><label>Tipus<\/label><select name=\"family['+idx+'][type]\" data-family-age><option value=\"adult\">Adult<\/option><option value=\"minor\">Menor<\/option><\/select><\/div><\/div>'\n                + '<div class=\"tcb-form-row\" data-family-parent-option hidden><div class=\"tcb-form-field\"><label><input type=\"checkbox\" name=\"family['+idx+'][use_parent_email]\" value=\"1\" data-family-parent> Menor sense correu propi: utilitzar el correu del titular<\/label><p class=\"tcb-field-help\">El menor tindr\u00e0 un usuari propi. Els avisos i les dades d\u2019acc\u00e9s s\u2019enviaran al correu del titular.<\/p><\/div><\/div>'\n                + '<div class=\"tcb-form-row\" data-family-email-row><div class=\"tcb-form-field\"><label>Email del familiar<\/label><input type=\"email\" name=\"family['+idx+'][email]\" data-family-email required><p class=\"tcb-field-help\">Ha de ser un correu diferent del titular i dels altres familiars.<\/p><\/div><\/div>'\n                + '<div class=\"tcb-form-row\"><button type=\"button\" class=\"tcb-btn-remove-member\" onclick=\"tcbRemoveFamily(this)\">Treure membre<\/button><\/div>';\n            box.appendChild(card);\n            if (data) {\n                card.querySelector('[data-family-first]').value = data.first_name || '';\n                card.querySelector('[data-family-last]').value = data.last_name || '';\n                card.querySelector('[data-family-email]').value = data.email || '';\n                card.querySelector('[data-family-age]').value = data.type === 'minor' ? 'minor' : 'adult';\n                card.querySelector('[data-family-parent]').checked = !!data.use_parent_email || (data.type === 'minor' && !data.email);\n            }\n            card.addEventListener('change', function(event) {\n                if (event.target.matches('[data-family-age], [data-family-parent]')) familyContactRefresh(card);\n            });\n            familyContactRefresh(card);\n            tcbFamilyLimitRefresh();\n        };\n\n        window.tcbRemoveFamily = function(btn) {\n            var card = btn.closest('.family-member-card');\n            if (card) card.remove();\n            tcbFamilyLimitRefresh();\n        };\n\n        var form = document.querySelector('.tcb-register-form');\n        var btn = document.getElementById('tcb-register-submit');\n        var warning = document.getElementById('tcb-family-validation');\n        if (form && btn) {\n            form.addEventListener('input', function(event) {\n                if (event.target.matches('input[type=\"email\"]')) {\n                    form.querySelectorAll('[data-family-email]').forEach(function(input) { input.setCustomValidity(''); });\n                    warning.hidden = true;\n                }\n            });\n            form.addEventListener('submit', function(event) {\n                warning.hidden = true;\n                var seen = {};\n                var parentEmail = form.querySelector('[name=\"email\"]').value.trim().toLowerCase();\n                seen[parentEmail] = true;\n                var error = '';\n                if (typeSelect.value === 'monoparental' && form.querySelectorAll('.family-member-card').length > 1) {\n                    error = 'En la modalitat monoparental nom\u00e9s pots afegir 1 membre familiar. Treu els membres sobrants.';\n                }\n                form.querySelectorAll('.family-member-card').forEach(function(card) {\n                    var input = card.querySelector('[data-family-email]');\n                    input.setCustomValidity('');\n                    if (input.disabled || !input.value.trim()) return;\n                    var email = input.value.trim().toLowerCase();\n                    var name = (card.querySelector('[data-family-first]').value + ' ' + card.querySelector('[data-family-last]').value).trim();\n                    var message = '';\n                    if (email === parentEmail) message = 'No es pot crear l\u2019usuari de ' + name + ' amb el mateix email del titular. Si \u00e9s menor sense correu propi, marca \u00abUtilitzar el correu del titular\u00bb.';\n                    else if (seen[email]) message = 'L\u2019email de ' + name + ' es repeteix en un altre familiar. Indica un correu diferent.';\n                    seen[email] = true;\n                    if (message) { input.setCustomValidity(message); if (!error) error = message; }\n                });\n                if (error || !form.checkValidity()) {\n                    event.preventDefault();\n                    if (error) { warning.textContent = error; warning.hidden = false; warning.focus(); }\n                    form.reportValidity();\n                    return;\n                }\n                btn.classList.add('is-loading');\n                btn.disabled = true;\n            });\n        }\n\n        if (Array.isArray(postedFamily)) postedFamily.forEach(function(data) { tcbAddFamily(data); });\n        if (typeSelect) typeSelect.dispatchEvent(new Event('change'));\n        tcbFamilyLimitRefresh();\n\n\n    })();\n    <\/script>\n    \n","protected":false},"excerpt":{"rendered":"<p>\u26a0\ufe0f Tots els socis han de fer el nou registre 2026<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-nosidebar.php","meta":{"footnotes":""},"class_list":["post-31","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.tenniscaldes.com\/gestio\/wp-json\/wp\/v2\/pages\/31","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tenniscaldes.com\/gestio\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.tenniscaldes.com\/gestio\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.tenniscaldes.com\/gestio\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tenniscaldes.com\/gestio\/wp-json\/wp\/v2\/comments?post=31"}],"version-history":[{"count":4,"href":"https:\/\/www.tenniscaldes.com\/gestio\/wp-json\/wp\/v2\/pages\/31\/revisions"}],"predecessor-version":[{"id":47,"href":"https:\/\/www.tenniscaldes.com\/gestio\/wp-json\/wp\/v2\/pages\/31\/revisions\/47"}],"wp:attachment":[{"href":"https:\/\/www.tenniscaldes.com\/gestio\/wp-json\/wp\/v2\/media?parent=31"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}