Incepand din acest moment avem un verificator de conturi care poate fi folosit pentru a avertiza si/sau restrictiona accesul (si/sau auto-creea conturi) in cazul in care anumite conturi lipsesc pentru o anumita sectiune/modul.
Se utilizeaza simplu, specificand o lista de conturi necesare si un mod de actiune – pentru cazul in care aceste conturi nu exista pe compania curenta.
Exemplu de utilizare aplicat – modulul de Salarizare/Payroll.
Pentru acest modul avem nevoie ca firma curenta sa aiba in schema urmatoarele conturi : 641, 421, 6458, 423, 4313.2, 427, 425, 4312, 4314, 444, 4372, 6451, 4311, 6453, 4313.1, 4315, 6456, 4373, 6452, 4371, 622, 462, 446.
Pentru asta, in controller, in actionIndex (sau in orice action aveti nevoie), inainte de orice, facem asa:
$requiredAccounts = PayrollSummary::getRequiredAccounts();
$accountArbitrer = new AccountDependencyManager($this, $requiredAccounts, AccountDependencyManager::$ACTION_AUTOCREATE + AccountDependencyManager::$ACTION_ALERT );
$accountArbitrer->customErrorMessage = Yii::t("app","Please note that you will not be able to fiscalize the payroll entries until you add/create these missing accounts to your company.");
$accountArbitrer->check();
Linia 1: apelez o functie oarecare care imi intoarce array cu conturile obligatorii – in cazul acesta pentru Payroll. Array-ul intors este de forma {cod}=>{denumire}:
[641] => ''
[421] => ''
[6458] => ''
[423] => ''
[431] => ''
[4313] => ''
[4313.1] => 'Company\'s contribution to CASS'
[4313.2] => 'Company\'s contribution to FUSS'
[427] => ''
[425] => ''
[4312] => ''
[4314] => ''
[444] => ''
[4372] => ''
[6451] => ''
[4311] => ''
[6453] => ''
[4315] => ''
[6456] => ''
[4373] => ''
[6452] => ''
[4371] => ''
[622] => ''
[462] => ''
[446] => ''
Observa ca pentru conturile sintetice am omis denumirea – se va lua automat din nomenclatorul de coduri sintetice (!numai pentru sintetice). Pentru analitice am specificat insa denumirea, ca valoare a acestui array. Denumirea poate fi specificata si in mod multi-language.
Regula: lista de conturi necesare trebuie sa contina CODURILE ca chei ale array-ului. Valorile sunt optionale, vezi mai jos: avem deci trei moduri de a specifica lista de conturi necesare:
Mod 1: fara denumire:
[423] => ''
Mod 2: cu denumire simpla:
[4313.1] => 'Company's contribution to CASS'
Mod 3: cu denumire multi-language:
[4313.1] => ['en' => 'Company\'s contribution to CASS' , 'ro'=>'Contributia companiei la CASS']
Este indicat specificarea denumirii pentru cazul in care alegeti ca AccountDependencyManager sa creeze automat conturile. In caz contrar poti sa folosesti modul #1, adica sa nu specifici denumirea.
Regula: conturile trebuie specificate impreuna cu toti parintii, in ordinea parinte-copil. In cazul nostru, avem 4313.1 si 4313.2 . Inainte de acestea doua, in array, trebuie sa apara si 431 si 4313 avand deci ordinea : 431 , 4313, 4313.1, 4313.2. In caz contrar, daca nu specificam parintii si acestia nu exista deja pe companie, nici copii nu vor fi creati pentru ca parintii lor nu vor fi gasiti. Daca aceasta regula nu se respecta (in TOATE CAZURILE efective ale tale) atunci vei avea erori de creare si NICI UN CONT nu va fi creeat automat.
De unde vine lista de conturi necesare: de unde vrei tu, insa sursa originala este requirement-ul de business-logic. Ai grija cum si unde le hardcodezi (da, trebuiesc hardcodate…undeva intr-un /i18n fie in core fie in modulul tau).
Linia 2: creez AccountDependencyManager si ii trimit controller-ul curent, conturile obligatorii si modurile de actiune. Noteaza ca modurile de actiune pot fi combinate in orice fel, prin insumare. Ai insa grija ca felul in care le combini sa aiba sens. De exemplu nu are nici un sens sa combini ACTION_ALERT cu ACTION_BLOCK pentru ca ACTION_BLOCK oricum afisaza un mesaj de eroare; vezi mai jos.
Moduri de actiune:
AccountDependencyManager::$ACTION_ALERT
In acest mod, AccountDependencyManager va afisa un Flash() acolo unde este apelat.
AccountDependencyManager::$ACTION_AUTOCREATE
In acest mod AccountDependencyManager va creea automat conturile care lipsesc, din lista conturilor obligatorii.
AccountDependencyManager::$ACTION_BLOCK
In acest mod AccountDependencyManager va afisa un mesaj intr-o pagina noua si va bloca accesul acolo un este apelat.
Linia 3: Setez un mesaj de eroare optional. Acesta va fi adaugat la mesajele standard, deci nu este nevoie sa repeti din nou “Modulul nu are niste conturi obligatorii, bla bla bla”. Daca setezi un mesaj custom, atunci ai grija ca acesta sa nu fie redundent si sa fie specific modulului tau. Vezi exemplul de mai sus.
Linia 4: apelez check() al AccountDependencyManager . Aceasta functie face toate operatinile in sine, nu trebuie sa verifici ce returneaza si sa faci tu vre-o alta actiune. Doar apeleaz-o.
There!