diff --git a/apps/accounting_exports/models.py b/apps/accounting_exports/models.py index 651b670..19c1e99 100644 --- a/apps/accounting_exports/models.py +++ b/apps/accounting_exports/models.py @@ -124,7 +124,7 @@ def create_accounting_export(expense_objects: List[Expense], fund_source: str, w # Determine the date field based on fund_source date_field = getattr(export_setting, f"{fund_source_map.get(fund_source)}_expense_date", None).lower() if date_field and date_field != 'last_spent_at': - if date_field != 'current_date' and accounting_export[date_field]: + if date_field != 'current_date' and date_field in accounting_export and accounting_export[date_field]: accounting_export[date_field] = accounting_export[date_field].strftime('%Y-%m-%d') else: accounting_export[date_field] = datetime.now().strftime('%Y-%m-%d') diff --git a/apps/business_central/actions.py b/apps/business_central/actions.py index 90a6796..57a4713 100644 --- a/apps/business_central/actions.py +++ b/apps/business_central/actions.py @@ -11,6 +11,7 @@ def update_accounting_export_summary(workspace_id): successful_exports = AccountingExport.objects.filter( ~Q(type__in=['FETCHING_REIMBURSABLE_EXPENSES', 'FETCHING_CREDIT_CARD_EXPENSES']), workspace_id=workspace_id, status='COMPLETE', + updated_at__gte=accounting_export_summary.last_exported_at ).count() accounting_export_summary.failed_accounting_export_count = failed_exports diff --git a/apps/business_central/exports/base_model.py b/apps/business_central/exports/base_model.py index dd552a9..0b9bebd 100644 --- a/apps/business_central/exports/base_model.py +++ b/apps/business_central/exports/base_model.py @@ -29,7 +29,7 @@ def get_expense_comment(workspace_id, lineitem: Expense, category: str, advance_ workspace.cluster_domain = cluster_domain workspace.save() - expense_link = '{0}/app/main/#/enterprise/view_expense/{1}?org_id={2}'.format( + expense_link = '{0}/app/admin/#/enterprise/view_expense/{1}?org_id={2}'.format( cluster_domain, lineitem.expense_id, org_id ) @@ -169,7 +169,7 @@ def get_location_id(accounting_export: AccountingExport, lineitem: Expense): elif location_setting.source_field == 'COST_CENTER': source_value = lineitem.cost_center else: - attribute = ExpenseAttribute.objects.filter(attribute_type=location_setting.source_field).first() + attribute = ExpenseAttribute.objects.filter(attribute_type=location_setting.source_field, workspace_id=accounting_export.workspace_id).first() source_value = lineitem.custom_properties.get(attribute.display_name, None) mapping: Mapping = Mapping.objects.filter( diff --git a/apps/mappings/tasks.py b/apps/mappings/tasks.py index ffeb5d1..2a1425b 100644 --- a/apps/mappings/tasks.py +++ b/apps/mappings/tasks.py @@ -104,7 +104,7 @@ def async_auto_map_employees(workspace_id: int): destination_attribute_type=destination_type, ) except (BusinessCentralCredentials.DoesNotExist, InvalidTokenError): - logger.info('Invalid Token or Sage Intacct Credentials does not exist - %s', workspace_id) + logger.info('Invalid Token or Business Central Credentials does not exist - %s', workspace_id) except FyleInvalidTokenError: logger.info('Invalid Token for fyle') diff --git a/apps/workspaces/tasks.py b/apps/workspaces/tasks.py index 934da22..cbea42a 100644 --- a/apps/workspaces/tasks.py +++ b/apps/workspaces/tasks.py @@ -9,7 +9,7 @@ from apps.business_central.exports.journal_entry.tasks import ExportJournalEntry from apps.business_central.exports.purchase_invoice.tasks import ExportPurchaseInvoice from apps.fyle.queue import queue_import_credit_card_expenses, queue_import_reimbursable_expenses -from apps.workspaces.models import AdvancedSetting, ExportSetting, FyleCredential +from apps.workspaces.models import AdvancedSetting, BusinessCentralCredentials, ExportSetting, FyleCredential from fyle_integrations_platform_connector import PlatformConnector @@ -31,6 +31,14 @@ def run_import_export(workspace_id: int, export_mode = None): :param workspace_id: Workspace id """ + business_central_creds = BusinessCentralCredentials.objects.filter( + workspace_id=workspace_id, is_expired=False, refresh_token__isnull=False + ).first() + + if not business_central_creds: + logger.info('Credentials have expired for workspace_id %s', workspace_id) + return + export_settings = ExportSetting.objects.get(workspace_id=workspace_id) advance_settings = AdvancedSetting.objects.get(workspace_id=workspace_id) accounting_summary, _ = AccountingExportSummary.objects.update_or_create( @@ -58,7 +66,7 @@ def run_import_export(workspace_id: int, export_mode = None): if accounting_export.status == 'COMPLETE': accounting_export_ids = AccountingExport.objects.filter( - fund_source='PERSONAL', exported_at__isnull=True).values_list('id', flat=True) + fund_source='PERSONAL', exported_at__isnull=True, workspace_id=workspace_id).values_list('id', flat=True) if len(accounting_export_ids): is_expenses_exported = True @@ -75,7 +83,7 @@ def run_import_export(workspace_id: int, export_mode = None): ) if accounting_export.status == 'COMPLETE': accounting_export_ids = AccountingExport.objects.filter( - fund_source='CCC', exported_at__isnull=True).values_list('id', flat=True) + fund_source='CCC', exported_at__isnull=True, workspace_id=workspace_id).values_list('id', flat=True) if len(accounting_export_ids): is_expenses_exported = True diff --git a/tests/test_workspaces/test_tasks.py b/tests/test_workspaces/test_tasks.py index da09a44..71815c2 100644 --- a/tests/test_workspaces/test_tasks.py +++ b/tests/test_workspaces/test_tasks.py @@ -6,7 +6,7 @@ async_create_admin_subcriptions ) from apps.accounting_exports.models import AccountingExport, AccountingExportSummary -from apps.workspaces.models import FyleCredential, AdvancedSetting, ExportSetting +from apps.workspaces.models import BusinessCentralCredentials, FyleCredential, AdvancedSetting, ExportSetting from django_q.models import Schedule from django.conf import settings from django.urls import reverse @@ -64,6 +64,10 @@ def test_run_import_export_with_reimbursable_expense( 'trigger_export' ) + BusinessCentralCredentials.objects.create( + workspace_id=workspace_id, is_expired=False, refresh_token='bsajkdbasjb' + ) + run_import_export(workspace_id=workspace_id) accounting_summary = AccountingExportSummary.objects.get(workspace_id=workspace_id) @@ -114,6 +118,10 @@ def test_run_import_export_with_credit_card_expenses( 'trigger_export' ) + BusinessCentralCredentials.objects.create( + workspace_id=workspace_id, is_expired=False, refresh_token='bsajkdbasjb' + ) + run_import_export(workspace_id=workspace_id, export_mode='AUTOMATIC') accounting_summary = AccountingExportSummary.objects.get(workspace_id=workspace_id)