Skip to content

Commit 4e10965

Browse files
committed
Refactor closing entry behavior and enhance ledger locking.
Updated ledger locking/unlocking logic to ensure data consistency during posting, unposting, and deletion of closing entries. Adjusted form input attributes and enhanced `mark_as_posted` and `mark_as_unposted` methods for better handling of entity metadata.
1 parent e4a7159 commit 4e10965

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

django_ledger/forms/closing_entry.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ class Meta:
2626
'closing_date': DateInput(attrs={
2727
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES + ' is-large',
2828
'placeholder': _('Closing Date (YYYY-MM-DD)...'),
29-
'id': 'djl-datepicker'
29+
'id': 'djl-datepicker',
30+
'type': 'date'
3031
})
3132
}
3233
labels = {

django_ledger/models/closing_entry.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,9 @@ def migrate(self):
123123
ce_txs_gb = groupby(ce_txs, key=lambda k: k.tx_type)
124124

125125
# adding DEBITS and CREDITS...
126-
ce_txs_sum = {k: sum(v.balance for v in l) for k, l in ce_txs_gb}
126+
ce_txs_sum = {
127+
k: sum(v.balance for v in l) for k, l in ce_txs_gb
128+
}
127129

128130
if len(ce_txs_sum) and ce_txs_sum[TransactionModel.DEBIT] != ce_txs_sum[TransactionModel.CREDIT]:
129131
raise ClosingEntryValidationError(
@@ -170,6 +172,8 @@ def migrate(self):
170172
for k, je_model in ce_txs_journal_entries.items():
171173
je_model.save(verify=True)
172174

175+
self.ledger_model.lock(commit=True, raise_exception=True)
176+
173177
return ce_txs_journal_entries, ce_je_txs
174178

175179
def create_entry_ledger(self, commit: bool = False):
@@ -178,7 +182,7 @@ def create_entry_ledger(self, commit: bool = False):
178182
name=f'Closing Entry {self.closing_date} Ledger',
179183
entity_id=self.entity_model_id,
180184
hidden=True,
181-
locked=True,
185+
locked=False,
182186
posted=True
183187
)
184188
ledger_model.clean()
@@ -195,7 +199,7 @@ def create_entry_ledger(self, commit: bool = False):
195199
def can_post(self) -> bool:
196200
return not self.is_posted()
197201

198-
def mark_as_posted(self, commit: bool = False, update_entity_meta: bool = False, **kwargs):
202+
def mark_as_posted(self, commit: bool = False, update_entity_meta: bool = True, **kwargs):
199203
if not self.can_post():
200204
raise ClosingEntryValidationError(
201205
message=_(f'Closing Entry {self.closing_date} is already posted.')
@@ -232,11 +236,14 @@ def get_mark_as_posted_url(self, entity_slug: Optional[str] = None) -> str:
232236
def can_unpost(self) -> bool:
233237
return self.is_posted()
234238

235-
def mark_as_unposted(self, commit: bool = False, update_entity_meta: bool = False, **kwargs):
239+
def mark_as_unposted(self, commit: bool = False, update_entity_meta: bool = True, **kwargs):
236240
if not self.can_unpost():
237241
raise ClosingEntryValidationError(
238242
message=_(f'Closing Entry {self.closing_date} is not posted.')
239243
)
244+
245+
self.ledger_model.unlock(commit=False, raise_exception=True)
246+
self.ledger_model.save(update_fields=['posted', 'locked', 'updated'])
240247
self.posted = False
241248

242249
TransactionModel.objects.for_entity(
@@ -311,6 +318,8 @@ def delete(self, **kwargs):
311318
message=_('Cannot delete a posted Closing Entry')
312319
)
313320

321+
self.ledger_model.unpost(commit=True, raise_exception=True)
322+
314323
TransactionModel.objects.for_entity(
315324
entity_slug=self.entity_model_id
316325
).for_ledger(ledger_model=self.ledger_model).delete()

0 commit comments

Comments
 (0)