Inchiderile asa cum sunt ele salvate in company_closure, au un istoric de evenimente stocat in company_closure_event.
Aceste evenimente pot fi si blocante si care dicteaza daca/cand se pot face aceste inchideri.
Cum se inregistreaza un event (exemple)
A. La crearea unei inchideri:
$closure = CompanyClosure->find(...)->one();
if($closure){
$closure->registerEvent(CompanyClosureEvent::$TYPE_CREATED, NULL, NULL, FALSE);
}
B. La modificarea unei note contabile (sa spunem cu id-ul 123):
$closure = CompanyClosure->find(...)->one();
if($closure){
$closure->registerEvent(CompanyClosureEvent::$TYPE_MODIFIED, CompanyClosureEvent::$RELATED_DATATYPE_ACCOUNTINGNOTE, 123, TRUE);
}
C. La modificarea unei note contabile (id 123) unde am schimbat si data
$closure = CompanyClosure->find(...)->one();
if($closure){
$closure->registerEvent(CompanyClosureEvent::$TYPE_MODIFIED, CompanyClosureEvent::$RELATED_DATATYPE_ACCOUNTINGNOTE, 123, TRUE, FALSE, '2017-05-10');
}
Ce se intampla la inchideri
La inchideri, daca user-ul face click pe iconul “inchide” :
a. daca nu exista modificari*) in perioada fiscala respectiva atunci intrebam daca face efectiv inchiderile sau daca doar marcheaza ca inchisa
b. daca exista modificari*), atunci face obligatoriu inchiderile (redirect la wizard) si nu doar marcam ca inchisa
*) modificari exista daca
$closure->hasBlockingEvent($date)
unde $date este data pentru care se face verificarea (adica se verifica toate event-urile aparute ulterior acelei date).
ATENTIE! se verifica numai event-urile cu requiresRecomputation>0, iar tu trebuie sa adaugi acest registerEvent() cu requiresRecomputation=1, peste tot unde faci note contabile.