"""worksheet_tax_corrections_vat tests.""" from datetime import datetime import pytest from payment.constants import constants from payment.models import WorksheetTaxCorrectionVAT from payment.repository import worksheet_tax_correction_vat as repository from tests.utils.factories import ( PaymentGroupPaymentAccountDetailFactory, WorksheetAccountContractClosingBalanceFactory, WorksheetAccountContractPayableDetailsFactory, WorksheetPayableBalanceAfterTaxFactory, WorksheetTaxCorrectionVATFactory, ) @pytest.mark.parametrize( 'correction_status', ( (constants.CORRECTION_STATUSES.PENDING,), (constants.CORRECTION_STATUSES.ACTIVE,), ), ) def test_get_filtered_worksheet_tax_corrections_vat_statement_period( correction_status, mock_accounts, mock_contracts, mock_abacus_event, mock_ledger_account_contracts, ): """Test get_filtered_worksheet_tax_corrections method statement_period filter.""" statement_period_id_1 = 1 payable_detail_type_id = constants.CORRECTION_TYPE_TO_PAYABLE_DETAIL_TYPE_ID.get( constants.CORRECTION_TYPES.VAT ) deleted_at = ( datetime.now() if correction_status == constants.CORRECTION_STATUSES.PENDING else None ) worksheet_closing_balance = WorksheetAccountContractClosingBalanceFactory.create() worksheet_after_tax1 = WorksheetPayableBalanceAfterTaxFactory.create( # noqa worksheet_account_contract_closing_balance_id=worksheet_closing_balance.worksheet_account_contract_closing_balance_id, statement_period_id=statement_period_id_1, ) detail1 = PaymentGroupPaymentAccountDetailFactory.create( # noqa worksheet_account_contract_payable_after_tax_id=worksheet_after_tax1.worksheet_account_contract_payable_after_tax_id, deleted_at=deleted_at, ) correction1 = WorksheetTaxCorrectionVATFactory.create( contract_id=worksheet_closing_balance.contract_id, account_id=worksheet_closing_balance.account_id, payable_detail_type_id=payable_detail_type_id, correction_statement_period_id=statement_period_id_1, ) WorksheetAccountContractPayableDetailsFactory.create( # noqa worksheet_account_contract_payable_after_tax=worksheet_after_tax1, statement_period_id=statement_period_id_1, payable_detail_type_id=payable_detail_type_id, target_table=WorksheetTaxCorrectionVAT.__tablename__, target_id=correction1.worksheet_tax_correction_vat_id, ) statement_period_id_2 = 2 worksheet_after_tax2 = WorksheetPayableBalanceAfterTaxFactory.create( # noqa worksheet_account_contract_closing_balance_id=worksheet_closing_balance.worksheet_account_contract_closing_balance_id, statement_period_id=statement_period_id_2, ) PaymentGroupPaymentAccountDetailFactory.create( # noqa worksheet_account_contract_payable_after_tax_id=worksheet_after_tax2.worksheet_account_contract_payable_after_tax_id, deleted_at=deleted_at, ) correction2 = WorksheetTaxCorrectionVATFactory.create( contract_id=worksheet_closing_balance.contract_id, account_id=worksheet_closing_balance.account_id, payable_detail_type_id=payable_detail_type_id, correction_statement_period_id=statement_period_id_2, ) WorksheetAccountContractPayableDetailsFactory.create( # noqa worksheet_account_contract_payable_after_tax=worksheet_after_tax2, statement_period_id=statement_period_id_2, payable_detail_type_id=payable_detail_type_id, target_table=WorksheetTaxCorrectionVAT.__tablename__, target_id=correction2.worksheet_tax_correction_vat_id, ) corrections = repository.get_filtered_worksheet_tax_corrections_vat( correction_status, statement_period_id_1, [detail1.contract_id] ) assert corrections == ([correction1], 1) @pytest.mark.parametrize( 'correction_status', ( (constants.CORRECTION_STATUSES.PENDING,), (constants.CORRECTION_STATUSES.ACTIVE,), ), ) def test_get_filtered_worksheet_tax_corrections_contract_ids( correction_status, mock_accounts, mock_contracts, mock_abacus_event, mock_ledger_account_contracts, ): """Test get_filtered_worksheet_tax_corrections_vat method contract_ids filter.""" contract_id_1 = 1 statement_period_id_1 = 1 deleted_at = ( datetime.now() if correction_status == constants.CORRECTION_STATUSES.PENDING else None ) payable_detail_type_id = constants.CORRECTION_TYPE_TO_PAYABLE_DETAIL_TYPE_ID.get( constants.CORRECTION_TYPES.VAT ) worksheet_closing_balance1 = WorksheetAccountContractClosingBalanceFactory.create( contract_id=contract_id_1 ) worksheet_after_tax1 = WorksheetPayableBalanceAfterTaxFactory.create( # noqa worksheet_account_contract_closing_balance_id=worksheet_closing_balance1.worksheet_account_contract_closing_balance_id, statement_period_id=statement_period_id_1, contract_id=contract_id_1, ) PaymentGroupPaymentAccountDetailFactory.create( # noqa worksheet_account_contract_payable_after_tax_id=worksheet_after_tax1.worksheet_account_contract_payable_after_tax_id, deleted_at=deleted_at, contract_id=contract_id_1, ) correction1 = WorksheetTaxCorrectionVATFactory.create( contract_id=worksheet_closing_balance1.contract_id, account_id=worksheet_closing_balance1.account_id, payable_detail_type_id=payable_detail_type_id, correction_statement_period_id=statement_period_id_1, ) WorksheetAccountContractPayableDetailsFactory.create( # noqa worksheet_account_contract_payable_after_tax=worksheet_after_tax1, statement_period_id=statement_period_id_1, payable_detail_type_id=payable_detail_type_id, target_table=WorksheetTaxCorrectionVAT.__tablename__, target_id=correction1.worksheet_tax_correction_vat_id, ) contract_id_2 = 2 statement_period_id_2 = 2 worksheet_closing_balance2 = WorksheetAccountContractClosingBalanceFactory.create( contract_id=contract_id_2 ) worksheet_after_tax2 = WorksheetPayableBalanceAfterTaxFactory.create( # noqa worksheet_account_contract_closing_balance_id=worksheet_closing_balance2.worksheet_account_contract_closing_balance_id, statement_period_id=statement_period_id_2, contract_id=contract_id_2, ) PaymentGroupPaymentAccountDetailFactory.create( # noqa worksheet_account_contract_payable_after_tax_id=worksheet_after_tax2.worksheet_account_contract_payable_after_tax_id, deleted_at=deleted_at, contract_id=contract_id_2, ) correction2 = WorksheetTaxCorrectionVATFactory.create( contract_id=worksheet_closing_balance2.contract_id, account_id=worksheet_closing_balance2.account_id, payable_detail_type_id=payable_detail_type_id, correction_statement_period_id=statement_period_id_2, ) WorksheetAccountContractPayableDetailsFactory.create( # noqa worksheet_account_contract_payable_after_tax=worksheet_after_tax1, statement_period_id=statement_period_id_2, payable_detail_type_id=payable_detail_type_id, target_table=WorksheetTaxCorrectionVAT.__tablename__, target_id=correction2.worksheet_tax_correction_vat_id, ) corrections = repository.get_filtered_worksheet_tax_corrections_vat( correction_status, statement_period_id_2, [contract_id_2] ) assert corrections == ([correction2], 1) @pytest.mark.parametrize( 'correction_status', ( (constants.CORRECTION_STATUSES.PENDING), (constants.CORRECTION_STATUSES.ACTIVE), ), ) def test_get_filtered_worksheet_tax_corrections_by_ids( correction_status, mock_accounts, mock_contracts, mock_abacus_event, mock_ledger_account_contracts, ): """Test get_filtered_worksheet_tax_corrections_vat method correction_ids filter.""" mock_contract_id = 1 mock_account_id = 1 statement_period_id = 1 deleted_at = ( datetime.now() if correction_status == constants.CORRECTION_STATUSES.PENDING else None ) payable_detail_type_id = constants.CORRECTION_TYPE_TO_PAYABLE_DETAIL_TYPE_ID.get( constants.CORRECTION_TYPES.VAT ) worksheet_closing_balance1 = WorksheetAccountContractClosingBalanceFactory.create( contract_id=mock_contract_id, account_id=mock_account_id ) worksheet_after_tax1 = WorksheetPayableBalanceAfterTaxFactory.create( contract_id=mock_contract_id, account_id=mock_account_id, worksheet_account_contract_closing_balance_id=worksheet_closing_balance1.worksheet_account_contract_closing_balance_id, statement_period_id=statement_period_id, ) PaymentGroupPaymentAccountDetailFactory.create( contract_id=mock_contract_id, account_id=mock_account_id, worksheet_account_contract_payable_after_tax_id=worksheet_after_tax1.worksheet_account_contract_payable_after_tax_id, deleted_at=deleted_at, ) correction = WorksheetTaxCorrectionVATFactory.create( contract_id=worksheet_closing_balance1.contract_id, account_id=worksheet_closing_balance1.account_id, payable_detail_type_id=payable_detail_type_id, correction_statement_period_id=statement_period_id, ) correction_2 = WorksheetTaxCorrectionVATFactory.create( contract_id=worksheet_closing_balance1.contract_id, account_id=worksheet_closing_balance1.account_id, payable_detail_type_id=payable_detail_type_id, correction_statement_period_id=statement_period_id + 1, ) WorksheetAccountContractPayableDetailsFactory.create( contract_id=worksheet_closing_balance1.contract_id, account_id=worksheet_closing_balance1.account_id, worksheet_account_contract_payable_after_tax=worksheet_after_tax1, statement_period_id=statement_period_id, payable_detail_type_id=payable_detail_type_id, target_table=WorksheetTaxCorrectionVAT.__tablename__, target_id=correction.worksheet_tax_correction_vat_id, ) WorksheetAccountContractPayableDetailsFactory.create( contract_id=worksheet_closing_balance1.contract_id, account_id=worksheet_closing_balance1.account_id, worksheet_account_contract_payable_after_tax=worksheet_after_tax1, statement_period_id=statement_period_id, payable_detail_type_id=payable_detail_type_id, target_table=WorksheetTaxCorrectionVAT.__tablename__, target_id=correction_2.worksheet_tax_correction_vat_id, ) worksheet_tax_correct_vat_ids = [correction.worksheet_tax_correction_vat_id] corrections, count = repository.get_filtered_worksheet_tax_corrections_vat( correction_status, None, [], worksheet_tax_correct_vat_ids ) assert count == 1 assert corrections == [correction] @pytest.mark.parametrize( 'correction_status', ( (constants.CORRECTION_STATUSES.PENDING,), (constants.CORRECTION_STATUSES.ACTIVE,), ), ) def test_get_filtered_worksheet_tax_corrections_limit_offset( correction_status, mock_accounts, mock_contracts, mock_abacus_event, mock_ledger_account_contracts, ): """Test get_filtered_worksheet_tax_corrections method limit/offset.""" statement_period_id_1 = 1 payable_detail_type_id = constants.CORRECTION_TYPE_TO_PAYABLE_DETAIL_TYPE_ID.get( constants.CORRECTION_TYPES.VAT ) deleted_at = ( datetime.now() if correction_status == constants.CORRECTION_STATUSES.PENDING else None ) worksheet_closing_balance = WorksheetAccountContractClosingBalanceFactory.create() worksheet_after_tax1 = WorksheetPayableBalanceAfterTaxFactory.create( # noqa worksheet_account_contract_closing_balance_id=worksheet_closing_balance.worksheet_account_contract_closing_balance_id, statement_period_id=statement_period_id_1, ) PaymentGroupPaymentAccountDetailFactory.create( # noqa worksheet_account_contract_payable_after_tax_id=worksheet_after_tax1.worksheet_account_contract_payable_after_tax_id, deleted_at=deleted_at, ) correction1 = WorksheetTaxCorrectionVATFactory.create( contract_id=worksheet_closing_balance.contract_id, account_id=worksheet_closing_balance.account_id, payable_detail_type_id=payable_detail_type_id, correction_statement_period_id=statement_period_id_1, ) WorksheetAccountContractPayableDetailsFactory.create( # noqa worksheet_account_contract_payable_after_tax=worksheet_after_tax1, statement_period_id=statement_period_id_1, payable_detail_type_id=payable_detail_type_id, target_table=WorksheetTaxCorrectionVAT.__tablename__, target_id=correction1.worksheet_tax_correction_vat_id, ) statement_period_id_2 = 2 worksheet_after_tax2 = WorksheetPayableBalanceAfterTaxFactory.create( # noqa worksheet_account_contract_closing_balance_id=worksheet_closing_balance.worksheet_account_contract_closing_balance_id, statement_period_id=statement_period_id_2, ) PaymentGroupPaymentAccountDetailFactory.create( # noqa worksheet_account_contract_payable_after_tax_id=worksheet_after_tax2.worksheet_account_contract_payable_after_tax_id, deleted_at=deleted_at, ) correction2 = WorksheetTaxCorrectionVATFactory.create( contract_id=worksheet_closing_balance.contract_id, account_id=worksheet_closing_balance.account_id, payable_detail_type_id=payable_detail_type_id, correction_statement_period_id=statement_period_id_2, ) WorksheetAccountContractPayableDetailsFactory.create( # noqa worksheet_account_contract_payable_after_tax=worksheet_after_tax2, statement_period_id=statement_period_id_2, payable_detail_type_id=payable_detail_type_id, target_table=WorksheetTaxCorrectionVAT.__tablename__, target_id=correction2.worksheet_tax_correction_vat_id, ) corrections = repository.get_filtered_worksheet_tax_corrections_vat( correction_status, ) assert corrections == ([correction1, correction2], 2) corrections = repository.get_filtered_worksheet_tax_corrections_vat( correction_status, None, None, None, 1, 0 ) assert corrections == ([correction1], 2) corrections = repository.get_filtered_worksheet_tax_corrections_vat( correction_status, None, None, None, 1, 1 ) assert corrections == ([correction2], 2)