"""Functional tests for ledger VAT summary endpoints.""" from moneyhub.constants.constants import VAT_ADJUSTMENT_TYPE_ID from tests.functional.conftest import insert_mock_data def test_get_ledger_vat_summary_by_account(fixture_client): """Test getting the VAT summary entries.""" account_id = 24601 statement_period_id = 123 contract_id = 10001 insert_mock_data({ 'account': {'account_id': account_id}, 'reference_payment_entity': {'reference_payment_entity_id': 1}, 'reference_sap_profit_center': { 'reference_sap_profit_center_id': 1, 'profit_center': 'UK1234', 'company_code': '1234', 'business_group': 'ORC' }, 'reference_signing_entity': { 'reference_signing_entity_id': 1, 'reference_payment_entity_id': 1, 'reference_sap_profit_center_id': 1, 'company_code': '1234', 'tax_entity_company_code': '1234', 'legal_name': 'Company', 'vat_number': '12341234', 'company_registration_number': '12341234', 'address': None, }, 'contract': [ { 'contract_id': contract_id, 'reference_signing_entity_id': 1, }, { 'contract_id': 10002, 'reference_signing_entity_id': 1, }, { 'contract_id': 10003, 'reference_signing_entity_id': 1, }, ], 'statement_period': {'statement_period_id': statement_period_id}, 'reference_adjustment_type': { 'reference_adjustment_type_id': VAT_ADJUSTMENT_TYPE_ID, 'type_name': 'VAT Tax' }, 'abacus_event': [ {'abacus_event_id': 111}, {'abacus_event_id': 222}, {'abacus_event_id': 333}, ], 'statement_period_adjustment_file': { 'statement_period_adjustment_file_id': 1, 'statement_period_id': 123, }, 'worksheet_adjustment': [ { 'abacus_event_id': 111, 'account_id': account_id, 'statement_period_adjustment_file_id': 1, 'activity_statement_period_id': statement_period_id, 'adjustment_amount': '0.20', 'adjustment_currency_code': 'GBP', 'apply_to_statement_period_id': statement_period_id, 'contract_id': contract_id, 'reference_adjustment_type_id': VAT_ADJUSTMENT_TYPE_ID, }, { 'abacus_event_id': 222, 'account_id': account_id, 'statement_period_adjustment_file_id': 1, 'activity_statement_period_id': statement_period_id, 'adjustment_amount': '836.46', 'adjustment_currency_code': 'GBP', 'apply_to_statement_period_id': statement_period_id, 'contract_id': 10002, 'reference_adjustment_type_id': VAT_ADJUSTMENT_TYPE_ID, }, ], 'ledger_vat_summary': { 'ledger_vat_summary_id': 1, 'statement_period_id': statement_period_id, 'activity_statement_period_id': statement_period_id, 'abacus_event_id': 333, 'account_id': account_id, 'contract_id': contract_id, 'description': None, 'vat_category': 'closing_balance', 'payee_currency_code': 'GBP', 'vat_currency_code': 'GBP', 'base_amount_payee_currency': '1.00', 'vat_rate': '20', 'vat_amount_payee_currency': '0.20', 'vat_amount_vat_currency': '0.20', 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, 'net_amount_payee_currency': '0.20', 'created_by': 'me', 'created_at': '2020-10-05T04:03:02', 'last_modified_by': 'me', 'last_modified': '2020-10-05T04:03:02', } }) result = fixture_client.get( f'/ledger-vat-summary/account/{account_id}/statement-period/{statement_period_id}') assert result.status_code == 200 assert result.json() == [ { 'abacus_event_id': 333, 'abacus_exempt_reason': None, 'account_id': account_id, 'activity_statement_period_id': statement_period_id, 'base_amount_payee_currency': 1.0, 'contract_id': contract_id, 'created_at': '2020-10-05T04:03:02', 'created_by': 'me', 'description': None, 'is_reporting_only': False, 'last_modified': '2020-10-05T04:03:02', 'last_modified_by': 'me', 'ledger_vat_summary_id': 1, 'net_amount_payee_currency': 0.2, 'payee_currency_code': 'GBP', 'statement_period_id': statement_period_id, 'vat_amount_payee_currency': 0.2, 'vat_amount_vat_currency': 0.2, 'vat_category': 'closing_balance', 'vat_currency_code': 'GBP', 'vat_rate': 20.0, 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, }, ] def test_get_ledger_vat_summary_for_activity_period(fixture_client): """Test getting the VAT summary entries for a activity statement period.""" account_id = 24601 statement_period_id = 123 activity_statement_period_id = 122 contract_id = 10001 insert_mock_data({ 'account': {'account_id': account_id}, 'reference_payment_entity': {'reference_payment_entity_id': 1}, 'reference_sap_profit_center': { 'reference_sap_profit_center_id': 1, 'profit_center': 'UK1234', 'company_code': '1234', 'business_group': 'ORC' }, 'reference_signing_entity': { 'reference_signing_entity_id': 1, 'reference_payment_entity_id': 1, 'reference_sap_profit_center_id': 1, 'company_code': '1234', 'tax_entity_company_code': '1234', 'legal_name': 'Company', 'vat_number': '12341234', 'company_registration_number': '12341234', 'address': None, }, 'contract': [ { 'contract_id': contract_id, 'reference_signing_entity_id': 1, }, { 'contract_id': 10002, 'reference_signing_entity_id': 1, }, { 'contract_id': 10003, 'reference_signing_entity_id': 1, }, ], 'statement_period': [ {'statement_period_id': activity_statement_period_id}, {'statement_period_id': statement_period_id}, ], 'reference_adjustment_type': { 'reference_adjustment_type_id': VAT_ADJUSTMENT_TYPE_ID, 'type_name': 'VAT Tax' }, 'abacus_event': [ {'abacus_event_id': 111}, {'abacus_event_id': 222}, {'abacus_event_id': 333}, ], 'statement_period_adjustment_file': { 'statement_period_adjustment_file_id': 1, 'statement_period_id': 123, }, 'worksheet_adjustment': [ { 'abacus_event_id': 111, 'account_id': account_id, 'statement_period_adjustment_file_id': 1, 'activity_statement_period_id': statement_period_id, 'adjustment_amount': '0.20', 'adjustment_currency_code': 'GBP', 'apply_to_statement_period_id': statement_period_id, 'contract_id': contract_id, 'reference_adjustment_type_id': VAT_ADJUSTMENT_TYPE_ID, }, { 'abacus_event_id': 222, 'account_id': account_id, 'statement_period_adjustment_file_id': 1, 'activity_statement_period_id': statement_period_id, 'adjustment_amount': '836.46', 'adjustment_currency_code': 'GBP', 'apply_to_statement_period_id': statement_period_id, 'contract_id': 10002, 'reference_adjustment_type_id': VAT_ADJUSTMENT_TYPE_ID, }, ], 'ledger_vat_summary': { 'ledger_vat_summary_id': 1, 'statement_period_id': statement_period_id, 'activity_statement_period_id': activity_statement_period_id, 'abacus_event_id': 333, 'account_id': account_id, 'contract_id': contract_id, 'description': None, 'vat_category': 'closing_balance', 'payee_currency_code': 'GBP', 'vat_currency_code': 'GBP', 'base_amount_payee_currency': '1.00', 'vat_rate': '20', 'vat_amount_payee_currency': '0.20', 'vat_amount_vat_currency': '0.20', 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, 'net_amount_payee_currency': '0.20', 'created_by': 'me', 'created_at': '2020-10-05T04:03:02', 'last_modified_by': 'me', 'last_modified': '2020-10-05T04:03:02', } }) result = fixture_client.get( f'/ledger-vat-summary/account/{account_id}/activity-statement-period/{activity_statement_period_id}') # noqa: E501 assert result.status_code == 200 assert result.json() == [ { 'abacus_event_id': 333, 'abacus_exempt_reason': None, 'account_id': account_id, 'activity_statement_period_id': statement_period_id - 1, 'base_amount_payee_currency': 1.0, 'contract_id': contract_id, 'created_at': '2020-10-05T04:03:02', 'created_by': 'me', 'description': None, 'is_reporting_only': False, 'last_modified': '2020-10-05T04:03:02', 'last_modified_by': 'me', 'ledger_vat_summary_id': 1, 'net_amount_payee_currency': 0.2, 'payee_currency_code': 'GBP', 'statement_period_id': statement_period_id, 'vat_amount_payee_currency': 0.2, 'vat_amount_vat_currency': 0.2, 'vat_category': 'closing_balance', 'vat_currency_code': 'GBP', 'vat_rate': 20.0, 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, }, ] def test_backfill_ledger_vat_summary(fixture_client): """Test backfilling ledger VAT summary entries.""" account_id = 24601 statement_period_id = 123 contract_id = 10001 insert_mock_data({ 'account': {'account_id': account_id}, 'reference_payment_entity': {'reference_payment_entity_id': 1}, 'reference_sap_profit_center': { 'reference_sap_profit_center_id': 1, 'profit_center': 'UK1234', 'company_code': '1234', 'business_group': 'ORC' }, 'reference_signing_entity': { 'reference_signing_entity_id': 1, 'reference_payment_entity_id': 1, 'reference_sap_profit_center_id': 1, 'company_code': '1234', 'tax_entity_company_code': '1234', 'legal_name': 'Company', 'vat_number': '12341234', 'company_registration_number': '12341234', 'address': None, }, 'contract': [ { 'contract_id': contract_id, 'reference_signing_entity_id': 1, }, { 'contract_id': 10002, 'reference_signing_entity_id': 1, }, { 'contract_id': 10003, 'reference_signing_entity_id': 1, }, ], 'statement_period': {'statement_period_id': statement_period_id}, 'reference_adjustment_type': { 'reference_adjustment_type_id': VAT_ADJUSTMENT_TYPE_ID, 'type_name': 'VAT Tax' }, 'abacus_event': [ {'abacus_event_id': 111}, {'abacus_event_id': 222}, {'abacus_event_id': 333}, ], 'statement_period_adjustment_file': { 'statement_period_adjustment_file_id': 1, 'statement_period_id': 123, }, 'worksheet_adjustment': [ { 'abacus_event_id': 111, 'account_id': account_id, 'statement_period_adjustment_file_id': 1, 'activity_statement_period_id': statement_period_id, 'adjustment_amount': '0.20', 'adjustment_currency_code': 'GBP', 'apply_to_statement_period_id': statement_period_id, 'contract_id': contract_id, 'reference_adjustment_type_id': VAT_ADJUSTMENT_TYPE_ID, }, { 'abacus_event_id': 222, 'account_id': account_id, 'statement_period_adjustment_file_id': 1, 'activity_statement_period_id': statement_period_id, 'adjustment_amount': '836.46', 'adjustment_currency_code': 'GBP', 'apply_to_statement_period_id': statement_period_id, 'contract_id': 10002, 'reference_adjustment_type_id': VAT_ADJUSTMENT_TYPE_ID, }, ], 'ledger_vat_summary': { 'statement_period_id': statement_period_id, 'activity_statement_period_id': statement_period_id, 'abacus_event_id': 333, 'account_id': account_id, 'contract_id': contract_id, 'description': None, 'vat_category': 'closing_balance', 'payee_currency_code': 'GBP', 'vat_currency_code': 'GBP', 'base_amount_payee_currency': '1.00', 'vat_rate': '20', 'vat_amount_payee_currency': '0.20', 'vat_amount_vat_currency': '0.20', 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, 'net_amount_payee_currency': '0.20', 'created_by': 'me', 'created_at': '2020-10-05T04:03:02', 'last_modified_by': 'me', 'last_modified': '2020-10-05T04:03:02', } }) result = fixture_client.post( f'/ledger-vat-summary/statement-period/{statement_period_id}/backfill', json=[ { 'account_id': account_id, 'contract_id': contract_id, 'vat_category': 'closing_balance', 'payee_currency_code': 'GBP', 'vat_currency_code': 'GBP', 'base_amount_payee_currency': '1.00', 'vat_rate': '20', 'vat_amount_payee_currency': '0.20', 'vat_amount_vat_currency': '0.20', 'net_amount_payee_currency': '0.20' }, { 'account_id': account_id, 'contract_id': 10002, 'vat_category': 'gross_revenue', 'payee_currency_code': 'GBP', 'vat_currency_code': 'GBP', 'base_amount_payee_currency': '4182.29', 'vat_rate': '20', 'vat_amount_payee_currency': '836.46', 'vat_amount_vat_currency': '836.46', 'net_amount_payee_currency': '5018.75' }, ] ) assert result.status_code == 201 result_body = result.json() for item in result_body: del item['created_at'] del item['last_modified'] del item['ledger_vat_summary_id'] # autoincrement ID del item['abacus_event_id'] # autoincrement ID assert result_body == [ { 'abacus_exempt_reason': None, 'is_reporting_only': True, 'statement_period_id': statement_period_id, 'activity_statement_period_id': statement_period_id, 'account_id': account_id, 'contract_id': 10002, 'description': None, 'vat_category': 'gross_revenue', 'payee_currency_code': 'GBP', 'vat_currency_code': 'GBP', 'base_amount_payee_currency': 4182.29, 'vat_rate': 20.0, 'vat_amount_payee_currency': 836.46, 'vat_amount_vat_currency': 836.46, 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, 'net_amount_payee_currency': 5018.75, 'created_by': 'default_user_id', 'last_modified_by': 'default_user_id', }, ] def test_backfill_ledger_vat_summary_missing_adjustment(fixture_client): """Test backfilling ledger VAT summary entries when the adjustment is missing.""" account_id = 24601 statement_period_id = 123 insert_mock_data({ 'account': {'account_id': account_id}, 'reference_payment_entity': {'reference_payment_entity_id': 1}, 'reference_sap_profit_center': { 'reference_sap_profit_center_id': 1, 'profit_center': 'UK1234', 'company_code': '1234', 'business_group': 'ORC' }, 'reference_signing_entity': { 'reference_signing_entity_id': 1, 'reference_payment_entity_id': 1, 'reference_sap_profit_center_id': 1, 'company_code': '1234', 'tax_entity_company_code': '1234', 'legal_name': 'Company', 'vat_number': '12341234', 'company_registration_number': '12341234', 'address': None, }, 'contract': [ { 'contract_id': 10001, 'reference_signing_entity_id': 1, }, { 'contract_id': 10002, 'reference_signing_entity_id': 1, }, ], 'statement_period': {'statement_period_id': statement_period_id}, 'reference_adjustment_type': { 'reference_adjustment_type_id': VAT_ADJUSTMENT_TYPE_ID, 'type_name': 'VAT Tax' }, 'abacus_event': {'abacus_event_id': 111}, 'statement_period_adjustment_file': { 'statement_period_adjustment_file_id': 1, 'statement_period_id': 123, }, 'worksheet_adjustment': { 'abacus_event_id': 111, 'account_id': account_id, 'statement_period_adjustment_file_id': 1, 'activity_statement_period_id': statement_period_id, 'adjustment_amount': '0.20', 'adjustment_currency_code': 'GBP', 'apply_to_statement_period_id': statement_period_id, 'contract_id': 10001, 'reference_adjustment_type_id': VAT_ADJUSTMENT_TYPE_ID, } }) result = fixture_client.post( f'/ledger-vat-summary/statement-period/{statement_period_id}/backfill', json=[ { 'account_id': account_id, 'contract_id': 10001, 'vat_category': 'closing_balance', 'payee_currency_code': 'GBP', 'vat_currency_code': 'GBP', 'base_amount_payee_currency': '1.00', 'vat_rate': '20', 'vat_amount_payee_currency': '0.20', 'vat_amount_vat_currency': '0.20', 'net_amount_payee_currency': '0.20' }, { 'account_id': account_id, 'contract_id': 10002, 'vat_category': 'gross_revenue', 'payee_currency_code': 'GBP', 'vat_currency_code': 'GBP', 'base_amount_payee_currency': '4182.29', 'vat_rate': '20', 'vat_amount_payee_currency': '836.46', 'vat_amount_vat_currency': '836.46', 'net_amount_payee_currency': '5018.75' }, ] ) assert result.status_code == 400 assert result.json() == {'detail': 'Missing adjustment for key: 24601-10002-GBP-836.46'} def test_get_ledger_vat_summary_by_vat_summary_file(fixture_client): """Test getting the VAT summary entries by a VAT summary file.""" vat_summary_file_id = 123 insert_mock_data({ 'account': {'account_id': 24601}, 'reference_payment_entity': {'reference_payment_entity_id': 1}, 'reference_sap_profit_center': { 'reference_sap_profit_center_id': 1, 'profit_center': 'UK1234', 'company_code': '1234', 'business_group': 'ORC' }, 'reference_signing_entity': { 'reference_signing_entity_id': 1, 'reference_payment_entity_id': 1, 'reference_sap_profit_center_id': 1, 'company_code': '1234', 'tax_entity_company_code': '1234', 'legal_name': 'Company', 'vat_number': '12341234', 'company_registration_number': '12341234', 'address': None, }, 'contract': [ { 'contract_id': 10001, 'reference_signing_entity_id': 1, }, ], 'statement_period': {'statement_period_id': 123}, 'reference_adjustment_type': { 'reference_adjustment_type_id': VAT_ADJUSTMENT_TYPE_ID, 'type_name': 'VAT Tax' }, 'abacus_event': { 'abacus_event_id': 111, 'target_type': 'vat_summary_file', 'target_id': vat_summary_file_id, }, 'statement_period_adjustment_file': { 'statement_period_adjustment_file_id': 1, 'statement_period_id': 123, }, 'worksheet_adjustment': [ { 'abacus_event_id': 111, 'account_id': 24601, 'statement_period_adjustment_file_id': 1, 'activity_statement_period_id': 123, 'adjustment_amount': '0.20', 'adjustment_currency_code': 'GBP', 'apply_to_statement_period_id': 123, 'contract_id': 10001, 'reference_adjustment_type_id': VAT_ADJUSTMENT_TYPE_ID, }, ], 'ledger_vat_summary': { 'statement_period_id': 123, 'activity_statement_period_id': 123, 'abacus_event_id': 111, 'account_id': 24601, 'contract_id': 10001, 'description': None, 'vat_category': 'closing_balance', 'payee_currency_code': 'GBP', 'vat_currency_code': 'GBP', 'base_amount_payee_currency': '1.00', 'vat_rate': '20', 'vat_amount_payee_currency': '0.20', 'vat_amount_vat_currency': '0.20', 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, 'net_amount_payee_currency': '0.20', 'created_by': 'me', 'created_at': '2020-10-05T04:03:02', 'last_modified_by': 'me', 'last_modified': '2020-10-05T04:03:02', } }) result = fixture_client.get( f'/ledger-vat-summary/vat-summary-file/{vat_summary_file_id}') result_json = result.json() del result_json['items'][0]['abacus_event_id'] # autoincrement ID del result_json['items'][0]['ledger_vat_summary_id'] # autoincrement ID assert result.status_code == 200 assert result_json == { 'items': [ { 'abacus_exempt_reason': None, 'is_reporting_only': False, 'description': None, 'account_id': 24601, 'base_amount_payee_currency': 1.0, 'contract_id': 10001, 'created_at': '2020-10-05T04:03:02', 'created_by': 'me', 'last_modified': '2020-10-05T04:03:02', 'last_modified_by': 'me', 'net_amount_payee_currency': 0.2, 'payee_currency_code': 'GBP', 'statement_period_id': 123, 'activity_statement_period_id': 123, 'vat_amount_payee_currency': 0.2, 'vat_amount_vat_currency': 0.2, 'vat_category': 'closing_balance', 'vat_currency_code': 'GBP', 'vat_rate': 20.0, 'wht_amount_payee_currency': None, 'wht_amount_vat_currency': None, 'wht_rate': None, }, ], 'pagination': { 'pagination_type': 'standard', 'total_records': 1, }, }