From 09d1e9c1519d54783965bf1a1cb1935ce046abbe Mon Sep 17 00:00:00 2001 From: Daniel Ursache Dogariu Date: Wed, 10 Jan 2024 22:57:30 +0200 Subject: [PATCH] Revert twopercent template and js --- backend/static_extras/js/twopercent.js | 433 ++++++++++++------------- backend/templates/v1/twopercent.html | 56 ++-- 2 files changed, 225 insertions(+), 264 deletions(-) diff --git a/backend/static_extras/js/twopercent.js b/backend/static_extras/js/twopercent.js index eddcfa9a..4d16cdb5 100644 --- a/backend/static_extras/js/twopercent.js +++ b/backend/static_extras/js/twopercent.js @@ -1,267 +1,232 @@ $(function () { - $('.description').shorten({ - moreText: 'Arată mai mult', - lessText: 'Arată mai puțin', - showChars: 200 - }); - - let errors = { - server_error: "Se pare că am întâmpinat o eroare pe server. Vă rugăm încercați din nou.", - fields_error: "Se pare că următoarele date sunt invalide: " - } - let ngoUrl = window.location.href; - let form = $("#twopercent"); - - let invalidFormAlert = $("#invalid-form-alert"); - let submitFormButton = $("#submit-twopercent-form"); - let signForm = $('#sign-form') - let submitForm = $('.signature-container') - - let cnpField = $("#cnp") - - $('[data-toggle="popover"]').popover({ - trigger: "focus", - placement: ($(window).width() > 790) ? "right" : "bottom" - }); - - let errorClass = "has-error"; - let invalidFields = {}; - - function showError(context) { - invalidFields[context.id] = true; - - let el = $(context); - el.parent().addClass(errorClass); - el.popover({ - content: "Valoarea acestui câmp este invalidă.", - title: "", - placement: ($(window).width() > 790) ? "right" : "bottom", - trigger: "focus" + $('.description').shorten({ + moreText: 'Arata mai mult', + lessText: 'Arata mai putin', + showChars: 200 }); - } - - function hideError(context) { - delete invalidFields[context.id]; - - let el = $(context); - el.parent().removeClass(errorClass); - el.popover('destroy'); - } - - $("#nume, #prenume, #strada, #bloc, #scara, #etaj, #ap, #localitate").on("blur", function () { - let val = this.value; - if (!val) return; - - let regex = /^[\w\s.\-ăîâșțşţ]+$/gi; - // if we have no match - if (!val.match(regex)) { - showError(this); - } else { - hideError(this); - } - }); - - /******************************************************************************/ - /**** Validare CNP ****/ - - /******************************************************************************/ - /** - * Validate CNP ( valid for 1800-2099 ) - * - * @return boolean - * @param p_cnp - */ - // copyright https://github.com/cristian-datu/CNP - function validCNP(p_cnp) { - let i = 0, year = 0, hashResult = 0, cnp = [], hashTable = [2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7, 9]; - if (p_cnp.length !== 13) { - return false; - } - for (i = 0; i < 13; i++) { - cnp[i] = parseInt(p_cnp.charAt(i), 10); - if (isNaN(cnp[i])) { - return false; - } - if (i < 12) { - hashResult = hashResult + (cnp[i] * hashTable[i]); - } - } - hashResult = hashResult % 11; - if (hashResult === 10) { - hashResult = 1; - } - year = (cnp[1] * 10) + cnp[2]; - switch (cnp[0]) { - case 1 : - case 2 : { - year += 1900; - } - break; - case 3 : - case 4 : { - year += 1800; - } - break; - case 5 : - case 6 : { - year += 2000; - } - break; - case 7 : - case 8 : - case 9 : { - year += 2000; - if (year > (parseInt(new Date().getYear(), 10) - 14)) { - year -= 100; - } - } - break; - default : { - return false; - } - } - if (year < 1800 || year > 2099) { - return false; - } - return (cnp[12] === hashResult); - } - - cnpField.on("blur", function () { - let val = this.value; - // if the user provided a value make sure it's valid - if (val && !validCNP(val)) { - showError(this); - } else { - hideError(this); + var errors = { + server_error: "Se pare ca am intampinat o eroare pe server. Va rugam incercati din nou.", + fields_error: "Se pare ca urmatoarele date sunt invalide: " } - }); + var ngoUrl = window.location.href; + var form = $("#twopercent"); - $('#email').on('blur', function () { - let email = $(this).val().trim(); + var invalidFormAlert = $("#invalid-form-alert"); + var submitFormButton = $("#submit-twopercent-form"); + var signForm = $('#sign-form') + var submitForm = $('.signature-container') - let regex = /[\w.-]+@[\w.-]+.\w+/ - if (email && !regex.test(email)) { - showError(this); - } else { - hideError(this); - } - }); + var cnpField = $("#cnp") - $('#telefon').on('blur', function () { - let telefon = $(this).val().trim(); + $('[data-toggle="popover"]').popover({ + trigger: "focus", + placement: ( $(window).width() > 790 ) ? "right" : "bottom" + }); - if (telefon && (telefon.length !== 10 || telefon.slice(0, 2) !== "07")) { - showError(this); - } else { - hideError(this); + var errorClass = "has-error"; + var invalidFields = {}; + function showError (context) { + invalidFields[context.id] = true; + + var el = $(context); + el.parent().addClass(errorClass); + el.popover({ + content: "Valoarea acestui camp este invalida.", + title: "", + placement: ( $(window).width() > 790 ) ? "right" : "bottom", + trigger: "focus" + }); } - }); - - signForm.on('click', function (ev) { - let cnpVal = cnpField.val() - - if (!cnpVal) { - ev.preventDefault() - showError(cnpField) - cnpField.focus() - } else { - if (!validCNP(cnpVal)) { - ev.preventDefault() - showError(cnpField) - cnpField.focus() - } else { - // else, the form will be submitted - hideError(cnpField) - $('').attr('type', 'hidden') - .attr('name', "wants-to-sign").attr('value', 'True') - .appendTo(form); - } - } - }) + function hideError (context) { + delete invalidFields[context.id]; - form.on("submit", function (ev) { - ev.preventDefault(); + var el = $(context); + el.parent().removeClass(errorClass); + el.popover('destroy'); + } - $(this).find("input").blur(); + $("#nume, #prenume, #strada, #bloc, #scara, #etaj, #ap, #localitate").on("blur", function(){ + var val = this.value; + if(!val) return; - let len = 0; - for (let o in invalidFields) { - len++; - } + var regex = /^[\w\s.\-ăîâșțşţ]+$/gi; + // if we have no match + if(!val.match(regex)) { + showError(this); + } else { + hideError(this); + } + }); - if (len === 0) { - // all ok - invalidFormAlert.addClass("hidden"); - } else { - invalidFormAlert.removeClass("hidden"); - return; + /******************************************************************************/ + /**** Validare CNP ****/ + /******************************************************************************/ + /** + * Validate CNP ( valid for 1800-2099 ) + * + * @param string $p_cnp + * @return boolean + */ + // copyright https://github.com/cristian-datu/CNP + function validCNP( p_cnp ) { + var i=0 , year=0 , hashResult=0 , cnp=[] , hashTable=[2,7,9,1,4,6,3,5,8,2,7,9]; + if( p_cnp.length !== 13 ) { return false; } + for( i=0 ; i<13 ; i++ ) { + cnp[i] = parseInt( p_cnp.charAt(i) , 10 ); + if( isNaN( cnp[i] ) ) { return false; } + if( i < 12 ) { hashResult = hashResult + ( cnp[i] * hashTable[i] ); } + } + hashResult = hashResult % 11; + if( hashResult === 10 ) { hashResult = 1; } + year = (cnp[1]*10)+cnp[2]; + switch( cnp[0] ) { + case 1 : case 2 : { year += 1900; } break; + case 3 : case 4 : { year += 1800; } break; + case 5 : case 6 : { year += 2000; } break; + case 7 : case 8 : case 9 : { year += 2000; if( year > ( parseInt( new Date().getYear() , 10 ) - 14 ) ) { year -= 100; } } break; + default : { return false; } + } + if( year < 1800 || year > 2099 ) { return false; } + return ( cnp[12] === hashResult ); } - // add ajax field - $('').attr('type', 'hidden') - .attr('name', "ajax").attr('value', "true") - .appendTo(this); + cnpField.on("blur", function(){ + var val = this.value; + // if the user provided a value make sure it's valid + if( val && !validCNP(val) ) { + showError(this); + } else { + hideError(this); + } + }); - if (grecaptcha && typeof grecaptcha.execute == "function") { - grecaptcha.execute(); - } - }); + $('#email').on('blur', function() { + var email = $(this).val().trim(); - window.onSubmit = function (token) { + var regex = /[\w.-]+@[\w.-]+.\w+/ + if( email && !regex.test(email) ) { + showError(this); + } else { + hideError(this); + } + }); - submitFormButton.removeClass("btn-primary").attr("disabled", true); - signForm.removeClass("btn-primary").attr("disabled", true); + $('#telefon').on('blur', function() { + var telefon = $(this).val().trim(); - $('').attr('type', 'hidden') - .attr('name', "g-recaptcha-response").attr('value', token) - .appendTo(form); + if( telefon && (telefon.length != 10 || telefon.slice(0, 2) !== "07") ) { + showError(this); + } else { + hideError(this); + } + }); + signForm.on('click', function (ev) { + var cnpVal = cnpField.val() - $.ajax({ - url: ngoUrl, - type: "POST", - dataType: "json", - data: form.serialize(), - success: function (data) { - if (data.url) { - window.location = data.url; + if (!cnpVal) { + ev.preventDefault() + showError(cnpField) + cnpField.focus() } else { - message = errors["server_error"]; - submitFormButton.addClass("btn-primary").removeClass("btn-success").attr("disabled", false); - signForm.addClass("btn-primary").removeClass("btn-success").attr("disabled", false); - - invalidFormAlert.removeClass("hidden").find("span").text(message); - grecaptcha.reset(); + if (!validCNP(cnpVal)) { + ev.preventDefault() + showError(cnpField) + cnpField.focus() + } else { + // else, the form will be submitted + hideError(cnpField) + $('').attr('type', 'hidden') + .attr('name', "wants-to-sign").attr('value', 'True') + .appendTo(form); + } } - }, - error: function (data) { + }) - if (grecaptcha && typeof grecaptcha.reset == "function") { - grecaptcha.reset() + form.on("submit", function(ev){ + ev.preventDefault(); + + $(this).find("input").blur(); + + var len = 0; + for (var o in invalidFields) { + len++; } - let response = data.responseJSON; - let message; - if (data.status === 500 || response.server) { - message = errors["server_error"]; - } else if (response.fields && response.fields.length) { - message = errors["fields_error"]; - - for (let field in response.fields) { - message += response.fields + ", "; - } - message = message.slice(0, -2); + if( len == 0 ) { + // all ok + invalidFormAlert.addClass("hidden"); } else { - message = errors["server_error"]; + invalidFormAlert.removeClass("hidden"); + return; } - submitFormButton.addClass("btn-primary").removeClass("btn-success").attr("disabled", false); - invalidFormAlert.removeClass("hidden").find("span").text(message); - } + // add ajax field + $('').attr('type', 'hidden') + .attr('name', "ajax").attr('value', "true") + .appendTo(this); + + + if( grecaptcha && typeof grecaptcha.execute == "function" ) { + grecaptcha.execute(); + } }); - }; -}); + window.onSubmit = function(token) { + + submitFormButton.removeClass("btn-primary").attr("disabled", true); + signForm.removeClass("btn-primary").attr("disabled", true); + + $('').attr('type', 'hidden') + .attr('name', "g-recaptcha-response").attr('value', token) + .appendTo(form); + + + $.ajax({ + url: ngoUrl, + type: "POST", + dataType: "json", + data: form.serialize(), + success: function(data) { + if( data.url ) { + window.location = data.url; + } else { + message = errors["server_error"]; + submitFormButton.addClass("btn-primary").removeClass("btn-success").attr("disabled", false); + signForm.addClass("btn-primary").removeClass("btn-success").attr("disabled", false); + + invalidFormAlert.removeClass("hidden").find("span").text(message); + grecaptcha.reset(); + } + }, + error: function(data) { + + if( grecaptcha && typeof grecaptcha.reset == "function" ) { + grecaptcha.reset() + } + + var response = data.responseJSON; + var message = ""; + if(data.status == 500 || response.server) { + message = errors["server_error"]; + } else if( response.fields && response.fields.length) { + message = errors["fields_error"]; + + for( var field in response.fields ) { + message += response.fields + ", "; + } + message = message.slice(0, -2); + } else { + message = errors["server_error"]; + } + + submitFormButton.addClass("btn-primary").removeClass("btn-success").attr("disabled", false); + invalidFormAlert.removeClass("hidden").find("span").text(message); + } + }); + }; + +}); \ No newline at end of file diff --git a/backend/templates/v1/twopercent.html b/backend/templates/v1/twopercent.html index 2131c441..495eb3e4 100644 --- a/backend/templates/v1/twopercent.html +++ b/backend/templates/v1/twopercent.html @@ -15,8 +15,8 @@ {% endblock %} {# error messages, also found in the js file twopercent.js #} -{% set server_error = "Se pare că am întâmpinat o eroare pe server. Vă rugam încercați din nou." %} -{% set fields_error = "Se pare că următoarele date sunt invalide: " %} +{% set server_error = "Se pare că am întampinat o eroare pe server. Vă rugam incercați din nou." %} +{% set fields_error = "Se pare că urmatoarele date sunt invalide: " %} {% block content %} @@ -45,7 +45,7 @@ {% endif %} - {# if we are in the correct timeframe: 1 Jan to DONATIONS_LIMIT, allow the donation, else display a message #} + {# if we are in the correct timerame: 1 Jan to 30 June, allow the donation, else display a message #} {% if can_donate %} {#
@@ -60,38 +60,38 @@

Redirecționează în 3 pași simpli

Pasul 1. Completează și descarcă formularul

- {% if ngo.bank_account and ngo.registration_number %} -
+ {% if ngo.account and ngo.cif %} + {{ csrf_input }}
Date personale
- +
- +
- +
- +
- +
- +
@@ -100,38 +100,34 @@

Pasul 1. Completează și descarcă formularu Adresa de domiciliu
- +
- +
- +
- +
- +
- +
- {% with identifier="county" %} - {% with county=county %} - {% include "components/county.html" %} - {% endwith %} - {% endwith %} + {% include "components/county.html" %}
- +
@@ -178,15 +174,15 @@

Pasul 1. Completează și descarcă formularu

-
{# if the ngo wants to receive forms through email #} - {% if ngo.is_accepting_forms %} + {% if ngo.accepts_forms %}
Din anul 2022 formularele 230 pot fi depuse online. Dacă vrei să printezi formularul și să îl semnezi, atunci apasă mai jos butonul Descarcă formular și urmează instrucțiunile. Dacă vrei să semnezi și să depui formularul online atunci apasă mai jos Semnează formular și urmează instrucțiunile.
@@ -230,14 +226,14 @@

Se pare că asociația încă nu și-a activat această formă de donație.<

- {% if not errors and ngo.bank_account and ngo.registration_number %} + {% if not errors and ngo.account and ngo.cif %}
{# info about saved data #}
- Notă! Toate datele de pe această pagină sunt transmise folosind o conexiune sigură. Următoarele date sunt stocate temporar, până la completarea formularului: numele, prenumele, orașul, județul, email/telefon. După completarea formularului, aceste date sunt șterse, excepție făcând cazul în care ați optat să permiteți ONG-ului să vă contacteze. În acest caz, datele sunt stocate pe platforma Redirecționează cu scopul de a oferi acces ONG-ului la ele.
- Poți citi mai multe despre Drepturile tale cu privire la protecția datelor.

+ Notă! Toate datele de pe această pagină sunt transmise folosind o conexiune sigură. Următoarele date sunt stocate temporar, până la completarea formularului: numele, prenumele, orasul, judetul, email/telefon. După completarea formularului, aceste date sunt șterse, excepție făcând cazul în care ați optat să permiteți ONG-ului să vă contacteze. În acest caz, datele sunt stocate pe platforma Redirecționează cu scopul de a oferi acces ONG-ului la ele.
+ Poți citi mai multe despre Drepturile tale cu privire la protectia datelor.

Prin completarea acestui formular, redirecționezi 3.5% din impozitul pe venit către organizația pe care ai ales-o.
@@ -274,7 +270,7 @@

Ce reprezintă formularul de 3.5%?

  • Ce se întâmplă cu datele de pe această pagină?

    - Datele de pe această pagină sunt folosite doar pentru a crea fișierul PDF. Doar numele, prenumele, orașul, județul și email-ul/telefonul sunt salvate în baza noastră de date pentru a-i oferi ocazia ONG-ului să intre în legătură cu tine, doar dacă tu decizi acest lucru. + Datele de pe această pagină sunt folosite doar pentru a crea fișierul PDF. Doar numele, prenumele, orașul, județul și email-ul/telefonul sunt salvate în baza noastră de date pentru a-i oferi ocazia ONG-ului să intre în legatură cu tine, doar dacă tu decizi acest lucru.