-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feat: Adding new Journal Entry changes #175
Changes from all commits
dad251d
20e56d0
fd2af67
fbf5a67
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -41,22 +41,26 @@ def create_or_update_object(self, accounting_export: AccountingExport, _: Advanc | |||||||||||||||||||||||||||||||||||||||||||||||||
:param accounting_export: expense group | ||||||||||||||||||||||||||||||||||||||||||||||||||
:return: purchase invoices object | ||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||
expenses = accounting_export.expenses.all() | ||||||||||||||||||||||||||||||||||||||||||||||||||
expense = accounting_export.expenses.first() | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
accounts_payable_account_id = export_settings.default_bank_account_id | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
document_number = accounting_export.description['claim_number'] if accounting_export.description and accounting_export.description.get('claim_number') else accounting_export.description['expense_number'] | ||||||||||||||||||||||||||||||||||||||||||||||||||
advance_setting = AdvancedSetting.objects.get(workspace_id=accounting_export.workspace_id) | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Parameter naming inconsistency with implementation The method parameter is named -def create_or_update_object(self, accounting_export: AccountingExport, _: AdvancedSetting, export_settings: ExportSetting):
+def create_or_update_object(self, accounting_export: AccountingExport, advance_setting: AdvancedSetting, export_settings: ExportSetting):
- advance_setting = AdvancedSetting.objects.get(workspace_id=accounting_export.workspace_id) Also applies to: 50-52 |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
comment = "Consolidated Credit Entry For Report/Expense {}".format(document_number) | ||||||||||||||||||||||||||||||||||||||||||||||||||
print(accounting_export.__dict__) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
document_number = expense.expense_number | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
comment = self.get_expense_comment(accounting_export.workspace_id, expense, expense.category, advance_setting) | ||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+44
to
+54
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Clean up implementation and add error handling Several issues need to be addressed:
Apply these changes: def create_or_update_object(self, accounting_export: AccountingExport, advance_setting: AdvancedSetting, export_settings: ExportSetting):
expense = accounting_export.expenses.first()
+ if not expense:
+ raise ValueError(f"No expenses found for accounting_export: {accounting_export.id}")
accounts_payable_account_id = export_settings.default_bank_account_id
- advance_setting = AdvancedSetting.objects.get(workspace_id=accounting_export.workspace_id)
- print(accounting_export.__dict__)
- document_number = expense.expense_number
+ document_number = getattr(expense, 'expense_number', None)
+ if not document_number:
+ raise ValueError(f"No expense number found for expense: {expense.id}") 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
invoice_date = self.get_invoice_date(accounting_export=accounting_export) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
account_type, account_id = self.get_account_id_type(accounting_export=accounting_export, export_settings=export_settings) | ||||||||||||||||||||||||||||||||||||||||||||||||||
account_type, account_id = self.get_account_id_type(accounting_export=accounting_export, export_settings=export_settings, merchant=expense.vendor) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
journal_entry_object, _ = JournalEntry.objects.update_or_create( | ||||||||||||||||||||||||||||||||||||||||||||||||||
accounting_export= accounting_export, | ||||||||||||||||||||||||||||||||||||||||||||||||||
defaults={ | ||||||||||||||||||||||||||||||||||||||||||||||||||
'amount': sum([expense.amount for expense in expenses]), | ||||||||||||||||||||||||||||||||||||||||||||||||||
'amount': expense.amount, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'document_number': document_number, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'accounts_payable_account_id': accounts_payable_account_id, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'account_id': account_id, | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -99,45 +103,44 @@ def create_or_update_object(self, accounting_export: AccountingExport, advance_s | |||||||||||||||||||||||||||||||||||||||||||||||||
:param accounting_export: expense group | ||||||||||||||||||||||||||||||||||||||||||||||||||
:return: purchase invoices object | ||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||
expenses = accounting_export.expenses.all() | ||||||||||||||||||||||||||||||||||||||||||||||||||
lineitem = accounting_export.expenses.first() | ||||||||||||||||||||||||||||||||||||||||||||||||||
journal_entry = JournalEntry.objects.get(accounting_export=accounting_export) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
journal_entry_lineitems = [] | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
for lineitem in expenses: | ||||||||||||||||||||||||||||||||||||||||||||||||||
category = lineitem.category if (lineitem.category == lineitem.sub_category or lineitem.sub_category == None) else '{0} / {1}'.format(lineitem.category, lineitem.sub_category) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
account = CategoryMapping.objects.filter( | ||||||||||||||||||||||||||||||||||||||||||||||||||
source_category__value=category, | ||||||||||||||||||||||||||||||||||||||||||||||||||
workspace_id=accounting_export.workspace_id | ||||||||||||||||||||||||||||||||||||||||||||||||||
).first() | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
comment = self.get_expense_comment(accounting_export.workspace_id, lineitem, lineitem.category, advance_setting) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
invoice_date = self.get_invoice_date(accounting_export=accounting_export) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
account_type, account_id = self.get_account_id_type(accounting_export=accounting_export, export_settings=export_settings, merchant=lineitem.vendor) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
document_number = accounting_export.description['claim_number'] if accounting_export.description and accounting_export.description.get('claim_number') else accounting_export.description['expense_number'] | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
dimensions = self.get_dimension_object(accounting_export, lineitem) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
journal_entry_lineitems_object, _ = JournalEntryLineItems.objects.update_or_create( | ||||||||||||||||||||||||||||||||||||||||||||||||||
journal_entry_id = journal_entry.id, | ||||||||||||||||||||||||||||||||||||||||||||||||||
expense_id=lineitem.id, | ||||||||||||||||||||||||||||||||||||||||||||||||||
defaults={ | ||||||||||||||||||||||||||||||||||||||||||||||||||
'amount': lineitem.amount * -1, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'account_id': account_id, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'account_type': account_type, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'document_number': document_number, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'accounts_payable_account_id': account.destination_account.destination_id, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'comment': comment, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'workspace_id': accounting_export.workspace_id, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'invoice_date': invoice_date, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'description': lineitem.purpose if lineitem.purpose else None, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'dimensions': dimensions | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||
journal_entry_lineitems.append(journal_entry_lineitems_object) | ||||||||||||||||||||||||||||||||||||||||||||||||||
category = lineitem.category if (lineitem.category == lineitem.sub_category or lineitem.sub_category == None) else '{0} / {1}'.format(lineitem.category, lineitem.sub_category) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+111
to
+112
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Fix None comparison and simplify category formatting The None comparison should use the - category = lineitem.category if (lineitem.category == lineitem.sub_category or lineitem.sub_category == None) else '{0} / {1}'.format(lineitem.category, lineitem.sub_category)
+ category = lineitem.category if (lineitem.category == lineitem.sub_category or lineitem.sub_category is None) else f'{lineitem.category} / {lineitem.sub_category}' 📝 Committable suggestion
Suggested change
🧰 Tools🪛 Ruff (0.7.0)111-111: Comparison to Replace with (E711) |
||||||||||||||||||||||||||||||||||||||||||||||||||
account = CategoryMapping.objects.filter( | ||||||||||||||||||||||||||||||||||||||||||||||||||
source_category__value=category, | ||||||||||||||||||||||||||||||||||||||||||||||||||
workspace_id=accounting_export.workspace_id | ||||||||||||||||||||||||||||||||||||||||||||||||||
).first() | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+113
to
+117
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add error handling for missing category mapping The code assumes the category mapping will exist but doesn't handle the case where account = CategoryMapping.objects.filter(
source_category__value=category,
workspace_id=accounting_export.workspace_id
).first()
+ if not account or not account.destination_account:
+ raise ValueError(f"No category mapping found for category: {category} in workspace: {accounting_export.workspace_id}") Also applies to: 133-133 |
||||||||||||||||||||||||||||||||||||||||||||||||||
comment = self.get_expense_comment(accounting_export.workspace_id, lineitem, lineitem.category, advance_setting) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
invoice_date = self.get_invoice_date(accounting_export=accounting_export) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
account_type, account_id = self.get_account_id_type(accounting_export=accounting_export, export_settings=export_settings, merchant=lineitem.vendor) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
document_number = lineitem.expense_number | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
dimensions = self.get_dimension_object(accounting_export, lineitem) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
journal_entry_lineitems_object, _ = JournalEntryLineItems.objects.update_or_create( | ||||||||||||||||||||||||||||||||||||||||||||||||||
journal_entry_id = journal_entry.id, | ||||||||||||||||||||||||||||||||||||||||||||||||||
expense_id=lineitem.id, | ||||||||||||||||||||||||||||||||||||||||||||||||||
defaults={ | ||||||||||||||||||||||||||||||||||||||||||||||||||
'amount': lineitem.amount * -1, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'account_id': account_id, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'account_type': account_type, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'document_number': document_number, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'accounts_payable_account_id': account.destination_account.destination_id, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'comment': comment, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'workspace_id': accounting_export.workspace_id, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'invoice_date': invoice_date, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'description': lineitem.purpose if lineitem.purpose else None, | ||||||||||||||||||||||||||||||||||||||||||||||||||
'dimensions': dimensions | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||
journal_entry_lineitems.append(journal_entry_lineitems_object) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
return journal_entry_lineitems |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add error handling and optimize database queries
Several issues need to be addressed:
advance_setting
as a parameter but retrieves it again from the database. This is inefficient and inconsistent with the method signature.Apply these changes:
Also applies to: 48-52