Cum să… calculezi noua taxă auto în Javascript

Problema: să se calculeze noua taxă auto într-o pagină web.

Având în vedere cu ce am lucrat până acum, precum și soluția folosită pentru site-ul acesta, pentru rezolvarea problemei aveam două posibile căi de urmat:

1. PHP

+ limbajul rulează pe server, indiferent ce client accesează pagina, rezultatul va fi același;

– este mai dificil să se adauge o pagină php în WordPress;

2. Javascript

+ este ușor să se insereze în orice pagină web, inclusiv într-un articol WordPress;

– rularea scriptului se realizează pe partea de client; dacă acesta nu suportă JavaScript, de exemplu, nu va obține nimic.

De regulă, pentru facilități importante ale unui site, aleg limbajul PHP, mai ales deoarece nu vreau să mă bazez pe client. De această dată, însă, am ales JavaScript pentru ușurința în implementare.

Acestea fiind zise, să trecem la treabă. Mai întâi, trebuie să aflăm cum se calculează noua taxă auto. Așa că, apelând la prietenul nostru de toate zilele, Google, ajungem la Proiectul de lege pentru taxa auto (a se vedea că acesta este numai proiectul de lege, de fapt ar trebui să găsim varianta finală). După parcurgerea textului de lege ajungem la partea interesantă pentru noi: formulele și tabelele pentru calculul taxei. Toate aceste date sunt adunate într-un fișier .xls pentru a putea fi prelucrate mai ușor în continuare. Fișierul astfel rezultat poate fi consultat aici.

În continuare, având în vedere datele solicitate de formula de calcul și datele din tabelele anexate, realizăm un formular în care utilizatorul va alege sau introduce datele necesare. Toate câmpurile din cadrul formularului vor primi o valoare diferită în cadrul atributului id, acesta urmând să fie folosit ulterior în cadrul scriptului JavaScript. La final, în cadrul formularului se adaugă un buton, Calculează, care va apela funcția de calcul din script.

Iar acum am ajuns chiar la miezul problemei: scriptul propriu-zis. Din acesta, ne interesează în primul rând funcția calcul, cea care preia și prelucrează datele din formular.

Așadar, să o luăm pe pași:

1. Preluarea datelor:

var Aval=document.getElementById("id").value;

În această expresie, id este acea valoare din cadrul atributului id al fiecărui câmp din formular în parte.

2. Încărcarea valorilor din tabele în variabile array:

Mai întâi declarăm variabila array, cu o dimensiune sau două:

//Nivelul taxei specifice sau tipul autovehiculului din categoria M1 
// - euro / 1 cmc - variabila D din formula
var limite_cilindree=new Array(6); //limitele pentru incadrarea cilindreei
// in categorii - array cu o dimensiune
limite_cilindree[0]=0;
... 
D = new Array (6); // - array cu doua dimensiuni
for (i = 0; i < D.length; ++ i)
D[i] = new Array (limite_cilindree.length);
D[5][0]=0.065;
...

Poate v-ați întrebat mai înainte care este rolul fișierului .xls. În exemplul de mai sus este definit numai unul dintre cele 35 de elemente ale tabloului (array cu două dimensiuni) D. Definirea celorlalte 34 de elemente manual este consumatoare de timp și poate genera erori. De aceea, odată ce avem deja datele în fișierul .xls, folosim o formulă pentru a genera declararea fiecărui element:

="D["&(RIGHT(OFFSET(A4;F4*(-1);0);1)&"]["&F4&"]="&E4&";")

Multiplicăm formula pentru toate cele 34 de valori rămase, apoi rezultatul îl copiem în fișierul .html. Similar procedăm pentru a trece celelalte valori tabelare în variabile JavaScript.

După ce am preluat toate datele din tabelele pentru calculul taxei trecem la implementarea formulelor de calcul. Mai întâi este necesar să determinăm categoria în care se încadrează autovehiculul din punctul de vedere al cilindreei:

//determin incadrarea in limitele de cilindree
i = 0;
do 
{
 k_D = i;
 i++;
}
while ( i < limite_cilindree.length && limite_cilindree[i]

Astfel am identificat variabila D din formula de calcul a taxei (taxa specifică pe cilindree, prevăzută în coloana 3 din anexa nr. 2). La fel se procedează și pentru a determina valoarea variabilei B (taxa specifică, exprimată în euro/1 gram CO2, prevăzută în coloana 3 din anexa nr. 1). Cu variabilele A, C și E preluate direct din formular, putem calcula rezultatul formulei:

Suma de plată = [(A x B x 30%) + (C x D x 70%)] x (100 - E)%

În funcție de norma de poluare a mașinii, formula de calcul se poate simplifica. Alegerea formulei finale în fiecare caz se face prin folosirea repetată a construcției if.

Înainte de final, dorim să aducem niște mici îmbunătățiri scriptului. Mai întâi, în unele cazuri (norma de poluare a mașinii sub Euro3) formula de calcul nu include nivelul emisiilor CO2. De aceea, dorim ca atunci când se selectează o anumită valoare în câmpul calcul_euro, să dezactivăm câmpul calcul_co2. Mai întâi, la câmpul calcul_euro se folosesc evenimentele OnChange și OnKeyDown, care apelează funcția refresh_a(). La rândul său, această funcție modifică atributul disabled al câmpului în care se introduce nivelul emisiilor CO2.

Totodată, am dori ca valoarea finală a taxei, calculată în lei și euro, să fie formatată în conformitate cu modul de afișare obișnuit din limba română: cu . pe post de separator al miilor și , separator al zecimalelor. Pentru aceasta am apelat din nou la prietenul Google și am găsit o funcție care îndeplinește exact acest deziderat. Rezultatul final îl afișăm într-un câmp span deja definit la finalul formularului:

document.getElementById("calcul_val_euro").innerHTML = valoarea_formatata;

Intenționat sau nu, nu am intrat chiar în toate detaliile scriptului. De asemenea, nu am făcut o tratare riguroasă a datelor introduse – acesta este un punct care ar putea cu siguranță să fie îmbunătățit, pe viitor. Dar, până atunci, puteți descărca fișierul .html care conține formularul și scriptul de aici.

Update 27.12.2011

La cerere, adaug aici o arhivă care conține toate detaliile privind implementarea acestui script, și anume:

  • Articolul de față reprodus într-un document Word
  • Fișierul Excel amintit mai sus
  • Fișierul HTML cu formularul și scriptul


Iar rezultatul final îl prezentăm în continuare – vă invităm să îl și testați:

Tipul autovehiculului:

Norma euro:

Capacitatea cilindrică (cmc):

Valoarea emisiilor de CO2
(grame/km):

Vechimea autovehiculului:

 

Valoarea finală a taxei este =
_______ EURO,
_______ LEI.
Tagged , , , . Bookmark the permalink.

2 Responses to Cum să… calculezi noua taxă auto în Javascript

  1. musicvideo says:

    Bre™, poate pui si o arhiva cu cele scrise mai sus! Multam fain!

  2. Mihai Papuc says:

    Rezolvat – am adăugat arhiva și actualizat articolul.

Lasă un răspuns la musicvideo Anulează răspunsul

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*