Esempio n. 1
0
    def test_loan_account_match_then_change_account(self):
        """
        Does match between loan_account_deposit and loan_account_withdraw then change account
        """
        test_account1 = Account.objects.create(name='Test Account1',
                                               currency=CURRENCY_CUC,
                                               balance=1000)
        test_account2 = Account.objects.create(name='Test Loan Account',
                                               currency=CURRENCY_CUC,
                                               balance=1000)
        test_loan_account = LoanAccount.objects.create(account=test_account2)

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        loan_account_deposit = LoanAccountDeposit(
            date=test_date,
            account=test_account1,
            amount=test_amount,
            loan_account=test_loan_account,
            status=test_status)

        loan_account_deposit = FinanceServices.save_loan_account_deposit(
            user=self.test_user, loan_account_deposit=loan_account_deposit)

        loan_account_withdraw = LoanAccountWithdraw(
            date=test_date,
            account=test_account1,
            amount=test_amount,
            loan_account=test_loan_account,
            status=test_status)

        loan_account_withdraw = FinanceServices.save_loan_account_withdraw(
            user=self.test_user, loan_account_withdraw=loan_account_withdraw)

        loan_account_match = LoanAccountMatch(
            loan_account_deposit=loan_account_deposit,
            loan_account_withdraw=loan_account_withdraw,
            matched_amount=test_amount)

        loan_account_match = FinanceServices.save_loan_account_match(
            loan_account_match)

        loan_account_deposit.refresh_from_db()
        loan_account_withdraw.refresh_from_db()

        self.assertEqual(loan_account_deposit.matched_amount, test_amount)
        self.assertEqual(loan_account_withdraw.matched_amount, test_amount)

        test_account2 = Account.objects.create(name='Test Account2',
                                               currency=CURRENCY_CUC,
                                               balance=500)

        loan_account_withdraw.account = test_account2

        with self.assertRaisesMessage(ValidationError, ERROR_MATCH_ACCOUNT):
            loan_account_withdraw = FinanceServices.save_loan_account_withdraw(
                user=self.test_user,
                loan_account_withdraw=loan_account_withdraw)
    def test_loan_entity_match_then_change_loan_entity(self):
        """
        Does match between loan_entity_deposit and loan_entity_withdraw then change loan_entity
        """
        test_account = Account.objects.create(
            name='Test Account',
            currency=CURRENCY_CUC,
            balance=1000)

        test_loan_entity1 = LoanEntity.objects.create(
            name='Test Loan Entity1')

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        loan_entity_deposit = LoanEntityDeposit(
            date=test_date,
            account=test_account,
            amount=test_amount,
            loan_entity=test_loan_entity1,
            status=test_status)

        loan_entity_deposit = FinanceServices.save_loan_entity_deposit(
            user=self.test_user,
            loan_entity_deposit=loan_entity_deposit)

        loan_entity_withdraw = LoanEntityWithdraw(
            date=test_date,
            account=test_account,
            amount=test_amount,
            loan_entity=test_loan_entity1,
            status=test_status)

        loan_entity_withdraw = FinanceServices.save_loan_entity_withdraw(
            user=self.test_user,
            loan_entity_withdraw=loan_entity_withdraw)

        loan_entity_match = LoanEntityMatch(
            loan_entity_deposit=loan_entity_deposit,
            loan_entity_withdraw=loan_entity_withdraw,
            matched_amount=test_amount)

        loan_entity_match = FinanceServices.save_loan_entity_match(loan_entity_match)

        loan_entity_deposit.refresh_from_db()
        loan_entity_withdraw.refresh_from_db()

        self.assertEqual(loan_entity_deposit.matched_amount, test_amount)
        self.assertEqual(loan_entity_withdraw.matched_amount, test_amount)

        test_loan_entity2 = LoanEntity.objects.create(
            name='Test Loan Entity2')

        loan_entity_withdraw.loan_entity = test_loan_entity2

        with self.assertRaisesMessage(ValidationError, ERROR_MATCH_LOAN_ENTITY):
            loan_entity_withdraw = FinanceServices.save_loan_entity_withdraw(
                user=self.test_user,
                loan_entity_withdraw=loan_entity_withdraw)
Esempio n. 3
0
    def test_save_provider_invoice_ready_then_draft_currency(self):
        """
        Does ready provider_invoice and then change to draft and currency
        """
        test_currency1 = CURRENCY_CUC
        test_date = timezone.now()
        test_amount = 100
        test_status1 = STATUS_READY

        provider_invoice = ProviderInvoice(provider=self.test_provider,
                                           date=test_date,
                                           currency=test_currency1,
                                           amount=test_amount,
                                           status=test_status1)

        provider_invoice = FinanceServices.save_provider_invoice(
            user=self.test_user, provider_invoice=provider_invoice)

        # document data auto filled
        self.assertDocument(provider_invoice, DOC_TYPE_PROVIDER_INVOICE,
                            test_currency1)

        # one finantial history created
        finantials = provider_invoice.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=provider_invoice,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status1)

        test_status2 = STATUS_DRAFT
        test_currency2 = CURRENCY_USD

        provider_invoice.status = test_status2
        provider_invoice.currency = test_currency2

        provider_invoice = FinanceServices.save_provider_invoice(
            user=self.test_user, provider_invoice=provider_invoice)

        # document data auto filled
        self.assertDocument(provider_invoice, DOC_TYPE_PROVIDER_INVOICE,
                            test_currency2)

        # now two finantial history created
        finantials = provider_invoice.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 2)

        # new finantial history info
        finantial = finantials.last()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=provider_invoice,
                                    test_user=self.test_user,
                                    test_old_status=test_status1,
                                    test_new_status=test_status2)
    def test_save_agency_discount_ready_then_draft_currency(self):
        """
        Does ready agency_discount and then change to draft and currency
        """
        test_currency1 = CURRENCY_CUC
        test_date = timezone.now()
        test_amount = 100
        test_status1 = STATUS_READY

        agency_discount = AgencyDiscount(agency=self.test_agency,
                                         date=test_date,
                                         currency=test_currency1,
                                         amount=test_amount,
                                         status=test_status1)

        agency_discount = FinanceServices.save_agency_discount(
            user=self.test_user, agency_discount=agency_discount)

        # document data auto filled
        self.assertDocument(agency_discount, DOC_TYPE_AGENCY_DISCOUNT,
                            test_currency1)

        # one finantial history created
        finantials = agency_discount.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=agency_discount,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status1)

        test_status2 = STATUS_DRAFT
        test_currency2 = CURRENCY_USD

        agency_discount.status = test_status2
        agency_discount.currency = test_currency2

        agency_discount = FinanceServices.save_agency_discount(
            user=self.test_user, agency_discount=agency_discount)

        # document data auto filled
        self.assertDocument(agency_discount, DOC_TYPE_AGENCY_DISCOUNT,
                            test_currency2)

        # now two finantial history created
        finantials = agency_discount.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 2)

        # new finantial history info
        finantial = finantials.last()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=agency_discount,
                                    test_user=self.test_user,
                                    test_old_status=test_status1,
                                    test_new_status=test_status2)
    def test_loan_entity_match_then_increase_amount(self):
        """
        Does match between loan_entity_deposit and loan_entity_withdraw then increase amount
        """
        test_account = Account.objects.create(
            name='Test Account',
            currency=CURRENCY_CUC,
            balance=1000)

        test_loan_entity = LoanEntity.objects.create(
            name='Test Loan Entity')

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        loan_entity_deposit = LoanEntityDeposit(
            date=test_date,
            account=test_account,
            amount=test_amount,
            loan_entity=test_loan_entity,
            status=test_status)

        loan_entity_deposit = FinanceServices.save_loan_entity_deposit(
            user=self.test_user,
            loan_entity_deposit=loan_entity_deposit)

        loan_entity_withdraw = LoanEntityWithdraw(
            date=test_date,
            account=test_account,
            amount=test_amount,
            loan_entity=test_loan_entity,
            status=test_status)

        loan_entity_withdraw = FinanceServices.save_loan_entity_withdraw(
            user=self.test_user,
            loan_entity_withdraw=loan_entity_withdraw)

        loan_entity_match = LoanEntityMatch(
            loan_entity_deposit=loan_entity_deposit,
            loan_entity_withdraw=loan_entity_withdraw,
            matched_amount=test_amount)

        loan_entity_match = FinanceServices.save_loan_entity_match(loan_entity_match)

        loan_entity_deposit.refresh_from_db()
        loan_entity_withdraw.refresh_from_db()

        self.assertEqual(loan_entity_deposit.matched_amount, test_amount)
        self.assertEqual(loan_entity_withdraw.matched_amount, test_amount)

        loan_entity_withdraw.amount = loan_entity_withdraw.amount + 20

        loan_entity_withdraw = FinanceServices.save_loan_entity_withdraw(
            user=self.test_user,
            loan_entity_withdraw=loan_entity_withdraw)

        self.assertEqual(loan_entity_withdraw.matched_amount, test_amount)
Esempio n. 6
0
    def test_provider_match_then_delete(self):
        """
        Does match between provider_payment and provider_invoice then delete
        """
        test_account = Account.objects.create(name='Test Account',
                                              currency=CURRENCY_CUC,
                                              balance=1000)

        test_provider = Provider.objects.create(name='Test Provider')

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        provider_payment = ProviderPayment(date=test_date,
                                           account=test_account,
                                           amount=test_amount,
                                           provider=test_provider,
                                           status=test_status)

        provider_payment = FinanceServices.save_provider_payment(
            user=self.test_user, provider_payment=provider_payment)

        provider_invoice = ProviderInvoice(date=test_date,
                                           amount=test_amount,
                                           provider=test_provider,
                                           status=test_status)

        provider_invoice = FinanceServices.save_provider_invoice(
            user=self.test_user, provider_invoice=provider_invoice)

        provider_match = ProviderDocumentMatch(
            credit_document=provider_payment,
            debit_document=provider_invoice,
            matched_amount=test_amount)

        provider_match = FinanceServices.save_provider_match(provider_match)

        # entity matched incremented
        self.assertProviderCurrencyMatchedAmount(provider=test_provider,
                                                 currency=CURRENCY_CUC,
                                                 amount=test_amount)

        provider_payment.refresh_from_db()
        provider_invoice.refresh_from_db()

        self.assertEqual(provider_payment.matched_amount, test_amount)
        self.assertEqual(provider_invoice.matched_amount, test_amount)

        # delete
        FinanceServices.delete_provider_match(provider_match.pk)

        provider_payment.refresh_from_db()
        provider_invoice.refresh_from_db()

        self.assertEqual(provider_payment.matched_amount, 0)
        self.assertEqual(provider_invoice.matched_amount, 0)
Esempio n. 7
0
    def test_agency_match_then_delete(self):
        """
        Does match between agency_payment and agency_invoice then delete
        """
        test_account = Account.objects.create(name='Test Account',
                                              currency=CURRENCY_CUC,
                                              balance=1000)

        test_agency = Agency.objects.create(name='Test Agency')

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        agency_payment = AgencyPayment(date=test_date,
                                       account=test_account,
                                       amount=test_amount,
                                       agency=test_agency,
                                       status=test_status)

        agency_payment = FinanceServices.save_agency_payment(
            user=self.test_user, agency_payment=agency_payment)

        agency_invoice = AgencyInvoice(date=test_date,
                                       amount=test_amount,
                                       agency=test_agency,
                                       status=test_status)

        agency_invoice = FinanceServices.save_agency_invoice(
            user=self.test_user, agency_invoice=agency_invoice)

        agency_match = AgencyDocumentMatch(credit_document=agency_payment,
                                           debit_document=agency_invoice,
                                           matched_amount=test_amount)

        agency_match = FinanceServices.save_agency_match(agency_match)

        # entity matched incremented
        self.assertAgencyCurrencyMatchedAmount(agency=test_agency,
                                               currency=CURRENCY_CUC,
                                               amount=test_amount)

        agency_payment.refresh_from_db()
        agency_invoice.refresh_from_db()

        self.assertEqual(agency_payment.matched_amount, test_amount)
        self.assertEqual(agency_invoice.matched_amount, test_amount)

        # delete
        FinanceServices.delete_agency_match(agency_match.pk)

        agency_payment.refresh_from_db()
        agency_invoice.refresh_from_db()

        self.assertEqual(agency_payment.matched_amount, 0)
        self.assertEqual(agency_invoice.matched_amount, 0)
Esempio n. 8
0
    def test_save_agency_invoice_draft_then_ready(self):
        """
        Does draft agency_invoice and then change to ready
        """
        test_currency = CURRENCY_CUC
        test_date = timezone.now()
        test_amount = 100
        test_status1 = STATUS_DRAFT

        agency_invoice = AgencyInvoice(agency=self.test_agency,
                                       date=test_date,
                                       currency=test_currency,
                                       amount=test_amount,
                                       status=test_status1)

        agency_invoice = FinanceServices.save_agency_invoice(
            user=self.test_user, agency_invoice=agency_invoice)

        # document data auto filled
        self.assertDocument(agency_invoice, DOC_TYPE_AGENCY_INVOICE,
                            test_currency)

        # one finantial history created
        finantials = agency_invoice.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=agency_invoice,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status1)

        test_status2 = STATUS_READY

        agency_invoice.status = test_status2

        agency_invoice = FinanceServices.save_agency_invoice(
            user=self.test_user, agency_invoice=agency_invoice)

        # document data auto filled
        self.assertDocument(agency_invoice, DOC_TYPE_AGENCY_INVOICE,
                            test_currency)

        # now two finantial history created
        finantials = agency_invoice.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 2)

        # new finantial history info
        finantial = finantials.last()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=agency_invoice,
                                    test_user=self.test_user,
                                    test_old_status=test_status1,
                                    test_new_status=test_status2)
Esempio n. 9
0
    def test_save_provider_invoice_ready_then_date(self):
        """
        Does ready provider_invoice and then change to draft
        """
        test_currency = CURRENCY_CUC
        test_date1 = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        provider_invoice = ProviderInvoice(provider=self.test_provider,
                                           date=test_date1,
                                           currency=test_currency,
                                           amount=test_amount,
                                           status=test_status)

        provider_invoice = FinanceServices.save_provider_invoice(
            user=self.test_user, provider_invoice=provider_invoice)

        test_name1 = provider_invoice.name

        # document data auto filled
        self.assertDocument(provider_invoice, DOC_TYPE_PROVIDER_INVOICE,
                            test_currency)

        # one finantial history created
        finantials = provider_invoice.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=provider_invoice,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status)

        test_date2 = test_date1 - timedelta(days=5)

        provider_invoice.date = test_date2

        provider_invoice = FinanceServices.save_provider_invoice(
            user=self.test_user, provider_invoice=provider_invoice)

        test_name2 = provider_invoice.name

        # name changed
        self.assertNotEqual(test_name1, test_name2)

        # document data auto filled
        self.assertDocument(provider_invoice, DOC_TYPE_PROVIDER_INVOICE,
                            test_currency)

        # same finantial history
        finantials = provider_invoice.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)
Esempio n. 10
0
    def test_save_agency_invoice_draft_then_date(self):
        """
        Does draft agency_invoice and then change date
        """
        test_currency = CURRENCY_CUC
        test_date1 = timezone.now()
        test_amount = 100
        test_status = STATUS_DRAFT

        agency_invoice = AgencyInvoice(agency=self.test_agency,
                                       date=test_date1,
                                       currency=test_currency,
                                       amount=test_amount,
                                       status=test_status)

        agency_invoice = FinanceServices.save_agency_invoice(
            user=self.test_user, agency_invoice=agency_invoice)

        test_name1 = agency_invoice.name

        # document data auto filled
        self.assertDocument(agency_invoice, DOC_TYPE_AGENCY_INVOICE,
                            test_currency)

        # one finantial history created
        finantials = agency_invoice.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=agency_invoice,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status)

        test_date2 = test_date1 - timedelta(days=5)

        agency_invoice.date = test_date2

        agency_invoice = FinanceServices.save_agency_invoice(
            user=self.test_user, agency_invoice=agency_invoice)

        test_name2 = agency_invoice.name

        # name changed
        self.assertNotEqual(test_name1, test_name2)

        # document data auto filled
        self.assertDocument(agency_invoice, DOC_TYPE_AGENCY_INVOICE,
                            test_currency)

        # no finantial history created
        finantials = agency_invoice.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)
    def test_save_agency_discount_ready_then_date(self):
        """
        Does ready agency_discount and then change to draft
        """
        test_currency = CURRENCY_CUC
        test_date1 = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        agency_discount = AgencyDiscount(agency=self.test_agency,
                                         date=test_date1,
                                         currency=test_currency,
                                         amount=test_amount,
                                         status=test_status)

        agency_discount = FinanceServices.save_agency_discount(
            user=self.test_user, agency_discount=agency_discount)

        test_name1 = agency_discount.name

        # document data auto filled
        self.assertDocument(agency_discount, DOC_TYPE_AGENCY_DISCOUNT,
                            test_currency)

        # one finantial history created
        finantials = agency_discount.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=agency_discount,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status)

        test_date2 = test_date1 - timedelta(days=5)

        agency_discount.date = test_date2

        agency_discount = FinanceServices.save_agency_discount(
            user=self.test_user, agency_discount=agency_discount)

        test_name2 = agency_discount.name

        # name changed
        self.assertNotEqual(test_name1, test_name2)

        # document data auto filled
        self.assertDocument(agency_discount, DOC_TYPE_AGENCY_DISCOUNT,
                            test_currency)

        # same finantial history
        finantials = agency_discount.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)
Esempio n. 12
0
    def test_loan_account_match(self):
        """
        Does match between loan_account_deposit and loan_account_withdraw
        """
        test_account = Account.objects.create(name='Test Account',
                                              currency=CURRENCY_CUC,
                                              balance=1000)
        test_account2 = Account.objects.create(name='Test Loan Account',
                                               currency=CURRENCY_CUC,
                                               balance=1000)
        test_loan_account = LoanAccount.objects.create(account=test_account2)

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        loan_account_deposit = LoanAccountDeposit(
            date=test_date,
            account=test_account,
            amount=test_amount,
            loan_account=test_loan_account,
            status=test_status)

        loan_account_deposit = FinanceServices.save_loan_account_deposit(
            user=self.test_user, loan_account_deposit=loan_account_deposit)

        loan_account_withdraw = LoanAccountWithdraw(
            date=test_date,
            account=test_account,
            amount=test_amount,
            loan_account=test_loan_account,
            status=test_status)

        loan_account_withdraw = FinanceServices.save_loan_account_withdraw(
            user=self.test_user, loan_account_withdraw=loan_account_withdraw)

        loan_account_match = LoanAccountMatch(
            loan_account_deposit=loan_account_deposit,
            loan_account_withdraw=loan_account_withdraw,
            matched_amount=test_amount)

        loan_account_match = FinanceServices.save_loan_account_match(
            loan_account_match)

        test_loan_account = LoanAccount.objects.get(pk=test_loan_account.pk)
        # entity matched incremented
        self.assertEqual(test_loan_account.matched_amount, test_amount)

        loan_account_deposit.refresh_from_db()
        loan_account_withdraw.refresh_from_db()

        self.assertEqual(loan_account_deposit.matched_amount, test_amount)
        self.assertEqual(loan_account_withdraw.matched_amount, test_amount)
Esempio n. 13
0
    def test_provider_match_then_change_provider(self):
        """
        Does match between provider_payment and provider_invoice then change provider
        """
        test_account = Account.objects.create(name='Test Account',
                                              currency=CURRENCY_CUC,
                                              balance=1000)

        test_provider1 = Provider.objects.create(name='Test Provider1')

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        provider_payment = ProviderPayment(date=test_date,
                                           account=test_account,
                                           amount=test_amount,
                                           provider=test_provider1,
                                           status=test_status)

        provider_payment = FinanceServices.save_provider_payment(
            user=self.test_user, provider_payment=provider_payment)

        provider_invoice = ProviderInvoice(date=test_date,
                                           amount=test_amount,
                                           provider=test_provider1,
                                           status=test_status)

        provider_invoice = FinanceServices.save_provider_invoice(
            user=self.test_user, provider_invoice=provider_invoice)

        provider_match = ProviderDocumentMatch(
            credit_document=provider_payment,
            debit_document=provider_invoice,
            matched_amount=test_amount)

        provider_match = FinanceServices.save_provider_match(provider_match)

        provider_payment.refresh_from_db()
        provider_invoice.refresh_from_db()

        self.assertEqual(provider_payment.matched_amount, test_amount)
        self.assertEqual(provider_invoice.matched_amount, test_amount)

        test_provider2 = Provider.objects.create(name='Test Provider2')

        provider_invoice.provider = test_provider2

        with self.assertRaisesMessage(ValidationError, ERROR_MATCH_PROVIDER):
            provider_invoice = FinanceServices.save_provider_invoice(
                user=self.test_user, provider_invoice=provider_invoice)
Esempio n. 14
0
    def test_agency_match_then_change_agency(self):
        """
        Does match between agency_payment and agency_invoice then change agency
        """
        test_account = Account.objects.create(name='Test Account',
                                              currency=CURRENCY_CUC,
                                              balance=1000)

        test_agency1 = Agency.objects.create(name='Test Agency1')

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        agency_payment = AgencyPayment(date=test_date,
                                       account=test_account,
                                       amount=test_amount,
                                       agency=test_agency1,
                                       status=test_status)

        agency_payment = FinanceServices.save_agency_payment(
            user=self.test_user, agency_payment=agency_payment)

        agency_invoice = AgencyInvoice(date=test_date,
                                       amount=test_amount,
                                       agency=test_agency1,
                                       status=test_status)

        agency_invoice = FinanceServices.save_agency_invoice(
            user=self.test_user, agency_invoice=agency_invoice)

        agency_match = AgencyDocumentMatch(credit_document=agency_payment,
                                           debit_document=agency_invoice,
                                           matched_amount=test_amount)

        agency_match = FinanceServices.save_agency_match(agency_match)

        agency_payment.refresh_from_db()
        agency_invoice.refresh_from_db()

        self.assertEqual(agency_payment.matched_amount, test_amount)
        self.assertEqual(agency_invoice.matched_amount, test_amount)

        test_agency2 = Agency.objects.create(name='Test Agency2')

        agency_invoice.agency = test_agency2

        with self.assertRaisesMessage(ValidationError, ERROR_MATCH_AGENCY):
            agency_invoice = FinanceServices.save_agency_invoice(
                user=self.test_user, agency_invoice=agency_invoice)
    def test_loan_entity_match_different_accounts(self):
        """
        Does match between loan_entity_deposit and loan_entity_withdraw with different accounts
        """
        test_account1 = Account.objects.create(
            name='Test Account1',
            currency=CURRENCY_CUC,
            balance=1000)

        test_loan_entity = LoanEntity.objects.create(
            name='Test Loan Entity')

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        loan_entity_deposit = LoanEntityDeposit(
            date=test_date,
            account=test_account1,
            amount=test_amount,
            loan_entity=test_loan_entity,
            status=test_status)

        loan_entity_deposit = FinanceServices.save_loan_entity_deposit(
            user=self.test_user,
            loan_entity_deposit=loan_entity_deposit)

        test_account2 = Account.objects.create(
            name='Test Account2',
            currency=CURRENCY_CUC,
            balance=500)

        loan_entity_withdraw = LoanEntityWithdraw(
            date=test_date,
            account=test_account2,
            amount=test_amount,
            loan_entity=test_loan_entity,
            status=test_status)

        loan_entity_withdraw = FinanceServices.save_loan_entity_withdraw(
            user=self.test_user,
            loan_entity_withdraw=loan_entity_withdraw)

        loan_entity_match = LoanEntityMatch(
            loan_entity_deposit=loan_entity_deposit,
            loan_entity_withdraw=loan_entity_withdraw,
            matched_amount=test_amount)

        with self.assertRaises(ValidationError):
            loan_entity_match = FinanceServices.save_loan_entity_match(loan_entity_match)
Esempio n. 16
0
    def test_save_agency_invoice_ready_then_amount_currency(self):
        """
        Does ready agency_invoice and then change amount and currency
        """
        test_currency1 = CURRENCY_CUC
        test_date = timezone.now()
        test_amount1 = 100
        test_status = STATUS_READY

        agency_invoice = AgencyInvoice(agency=self.test_agency,
                                       date=test_date,
                                       currency=test_currency1,
                                       amount=test_amount1,
                                       status=test_status)

        agency_invoice = FinanceServices.save_agency_invoice(
            user=self.test_user, agency_invoice=agency_invoice)

        # document data auto filled
        self.assertDocument(agency_invoice, DOC_TYPE_AGENCY_INVOICE,
                            test_currency1)

        # one finantial history created
        finantials = agency_invoice.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=agency_invoice,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status)

        test_currency2 = CURRENCY_USD
        test_amount2 = 50

        agency_invoice.currency = test_currency2
        agency_invoice.amount = test_amount2

        agency_invoice = FinanceServices.save_agency_invoice(
            user=self.test_user, agency_invoice=agency_invoice)

        # document data auto filled
        self.assertDocument(agency_invoice, DOC_TYPE_AGENCY_INVOICE,
                            test_currency2)

        # no aditional finantial history
        finantials = agency_invoice.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)
Esempio n. 17
0
    def test_save_provider_invoice_ready_then_amount(self):
        """
        Does ready provider_invoice and then change amount
        """
        test_currency = CURRENCY_CUC
        test_date = timezone.now()
        test_amount1 = 100
        test_status = STATUS_READY

        provider_invoice = ProviderInvoice(provider=self.test_provider,
                                           date=test_date,
                                           currency=test_currency,
                                           amount=test_amount1,
                                           status=test_status)

        provider_invoice = FinanceServices.save_provider_invoice(
            user=self.test_user, provider_invoice=provider_invoice)

        # document data auto filled
        self.assertDocument(provider_invoice, DOC_TYPE_PROVIDER_INVOICE,
                            test_currency)

        # one finantial history created
        finantials = provider_invoice.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=provider_invoice,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status)

        test_amount2 = 50

        provider_invoice.amount = test_amount2

        provider_invoice = FinanceServices.save_provider_invoice(
            user=self.test_user, provider_invoice=provider_invoice)

        # document data auto filled
        self.assertDocument(provider_invoice, DOC_TYPE_PROVIDER_INVOICE,
                            test_currency)

        # no aditional finantial history
        finantials = provider_invoice.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)
    def test_save_agency_discount_ready_then_amount(self):
        """
        Does ready agency_discount and then change amount
        """
        test_currency = CURRENCY_CUC
        test_date = timezone.now()
        test_amount1 = 100
        test_status = STATUS_READY

        agency_discount = AgencyDiscount(agency=self.test_agency,
                                         date=test_date,
                                         currency=test_currency,
                                         amount=test_amount1,
                                         status=test_status)

        agency_discount = FinanceServices.save_agency_discount(
            user=self.test_user, agency_discount=agency_discount)

        # document data auto filled
        self.assertDocument(agency_discount, DOC_TYPE_AGENCY_DISCOUNT,
                            test_currency)

        # one finantial history created
        finantials = agency_discount.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=agency_discount,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status)

        test_amount2 = 50

        agency_discount.amount = test_amount2

        agency_discount = FinanceServices.save_agency_discount(
            user=self.test_user, agency_discount=agency_discount)

        # document data auto filled
        self.assertDocument(agency_discount, DOC_TYPE_AGENCY_DISCOUNT,
                            test_currency)

        # no aditional finantial history
        finantials = agency_discount.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)
    def test_save_agency_discount_status_draft(self):
        """
        Does draft agency_discount
        """
        test_currency = CURRENCY_CUC
        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_DRAFT

        agency_discount = AgencyDiscount(agency=self.test_agency,
                                         date=test_date,
                                         currency=test_currency,
                                         amount=test_amount,
                                         status=test_status)

        agency_discount = FinanceServices.save_agency_discount(
            user=self.test_user, agency_discount=agency_discount)

        # document data auto filled
        self.assertDocument(agency_discount, DOC_TYPE_AGENCY_DISCOUNT,
                            test_currency)

        # one finantial history created
        finantials = agency_discount.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=agency_discount,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status)
Esempio n. 20
0
    def test_save_transfer_different_currency(self):
        """
        Does transfer with different accounts currency
        """
        test_account1 = Account.objects.create(
            name='Test Account1',
            currency=CURRENCY_CUC)
        test_balance1 = test_account1.balance
        test_account2 = Account.objects.create(
            name='Test Account2',
            currency=CURRENCY_USD,
            balance=1000)
        test_balance2 = test_account2.balance

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        transfer = Transfer(
            date=test_date,
            account=test_account1,
            transfer_account=test_account2,
            amount=test_amount,
            status=test_status)

        with self.assertRaisesMessage(
            ValidationError, ERROR_DIFFERENT_CURRENCY % (test_account1, test_account2)) as ex:
            transfer = FinanceServices.save_transfer(
                user=self.test_user,
                transfer=transfer)
Esempio n. 21
0
    def test_save_provider_invoice_status_draft(self):
        """
        Does draft provider_invoice
        """
        test_currency = CURRENCY_CUC
        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_DRAFT

        provider_invoice = ProviderInvoice(provider=self.test_provider,
                                           date=test_date,
                                           currency=test_currency,
                                           amount=test_amount,
                                           status=test_status)

        provider_invoice = FinanceServices.save_provider_invoice(
            user=self.test_user, provider_invoice=provider_invoice)

        # document data auto filled
        self.assertDocument(provider_invoice, DOC_TYPE_PROVIDER_INVOICE,
                            test_currency)

        # one finantial history created
        finantials = provider_invoice.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=provider_invoice,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status)
    def test_save_agency_devolution_status_ready(self):
        """
        Does ready agency_devolution
        """
        test_account = Account.objects.create(name='Test Account',
                                              currency=CURRENCY_CUC,
                                              balance=1000)
        test_balance = test_account.balance

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        agency_devolution = AgencyDevolution(agency=self.test_agency,
                                             date=test_date,
                                             account=test_account,
                                             amount=test_amount,
                                             status=test_status)

        agency_devolution = FinanceServices.save_agency_devolution(
            user=self.test_user, agency_devolution=agency_devolution)

        # account balance incremented
        self.assertAccount(test_account=test_account,
                           test_balance=test_balance - test_amount)

        # document data auto filled
        self.assertDocument(agency_devolution, DOC_TYPE_AGENCY_DEVOLUTION,
                            test_account.currency)

        # one finantial history created
        finantials = agency_devolution.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=agency_devolution,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status)

        # one accounting history created
        accountings = agency_devolution.accountingdocumenthistory_set
        self.assertEqual(accountings.count(), 1)

        # accounting history info
        accounting = accountings.first()
        operation = Operation.objects.get(pk=accounting.operation_id)
        # one movement created
        movements = operation.operationmovement_set
        self.assertEqual(movements.count(), 1)
        # movement info
        movement = movements.first()
        self.assertMovement(test_movement=movement,
                            test_account=test_account,
                            test_movement_type=MOVEMENT_TYPE_OUTPUT,
                            test_amount=test_amount)
Esempio n. 23
0
    def test_save_deposit_status_ready(self):
        """
        Does ready deposit
        """
        test_account = Account.objects.create(name='Test Account',
                                              currency=CURRENCY_CUC)
        test_balance = test_account.balance

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        deposit = Deposit(date=test_date,
                          account=test_account,
                          amount=test_amount,
                          status=test_status)

        deposit = FinanceServices.save_deposit(user=self.test_user,
                                               deposit=deposit)

        # account balance incremented
        self.assertAccount(test_account=test_account,
                           test_balance=test_balance + test_amount)

        # document data auto filled
        self.assertDocument(deposit, DOC_TYPE_DEPOSIT, test_account.currency)

        # one finantial history created
        finantials = deposit.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=deposit,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status)

        # one accounting history created
        accountings = deposit.accountingdocumenthistory_set
        self.assertEqual(accountings.count(), 1)

        # accounting history info
        accounting = accountings.first()
        operation = Operation.objects.get(pk=accounting.operation_id)

        # one movement created
        movements = operation.operationmovement_set
        self.assertEqual(movements.count(), 1)

        # movement info
        movement = movements.first()
        self.assertMovement(test_movement=movement,
                            test_account=test_account,
                            test_movement_type=MOVEMENT_TYPE_INPUT,
                            test_amount=test_amount)
Esempio n. 24
0
    def test_loan_account_match_excesive_amount(self):
        """
        Does match between loan_account_deposit and loan_account_withdraw with excesive amount
        """
        test_account = Account.objects.create(name='Test Account',
                                              currency=CURRENCY_CUC,
                                              balance=1000)
        test_account2 = Account.objects.create(name='Test Loan Account',
                                               currency=CURRENCY_CUC,
                                               balance=1000)
        test_loan_account = LoanAccount.objects.create(account=test_account2)

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        loan_account_deposit = LoanAccountDeposit(
            date=test_date,
            account=test_account,
            amount=test_amount,
            loan_account=test_loan_account,
            status=test_status)

        loan_account_deposit = FinanceServices.save_loan_account_deposit(
            user=self.test_user, loan_account_deposit=loan_account_deposit)

        loan_account_withdraw = LoanAccountWithdraw(
            date=test_date,
            account=test_account,
            amount=test_amount,
            loan_account=test_loan_account,
            status=test_status)

        loan_account_withdraw = FinanceServices.save_loan_account_withdraw(
            user=self.test_user, loan_account_withdraw=loan_account_withdraw)

        loan_account_match = LoanAccountMatch(
            loan_account_deposit=loan_account_deposit,
            loan_account_withdraw=loan_account_withdraw,
            matched_amount=test_amount + 0.01)

        with self.assertRaises(ValidationError):
            loan_account_match = FinanceServices.save_loan_account_match(
                loan_account_match)
Esempio n. 25
0
    def test_provider_match_different_provider(self):
        """
        Does match between provider_payment and provider_invoice with different loan_entities
        """
        test_account = Account.objects.create(name='Test Account',
                                              currency=CURRENCY_CUC,
                                              balance=1000)

        test_provider1 = Provider.objects.create(name='Test Provider1')

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        provider_payment = ProviderPayment(date=test_date,
                                           account=test_account,
                                           amount=test_amount,
                                           provider=test_provider1,
                                           status=test_status)

        provider_payment = FinanceServices.save_provider_payment(
            user=self.test_user, provider_payment=provider_payment)

        test_provider2 = Provider.objects.create(name='Test Provider2')

        provider_invoice = ProviderInvoice(date=test_date,
                                           amount=test_amount,
                                           provider=test_provider2,
                                           status=test_status)

        provider_invoice = FinanceServices.save_provider_invoice(
            user=self.test_user, provider_invoice=provider_invoice)

        provider_match = ProviderDocumentMatch(
            credit_document=provider_payment,
            debit_document=provider_invoice,
            matched_amount=test_amount)

        with self.assertRaises(ValidationError):
            provider_match = FinanceServices.save_provider_match(
                provider_match)
Esempio n. 26
0
    def test_agency_match_different_agency(self):
        """
        Does match between agency_payment and agency_invoice with different loan_entities
        """
        test_account = Account.objects.create(name='Test Account',
                                              currency=CURRENCY_CUC,
                                              balance=1000)

        test_agency1 = Agency.objects.create(name='Test Agency1')

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

        agency_payment = AgencyPayment(date=test_date,
                                       account=test_account,
                                       amount=test_amount,
                                       agency=test_agency1,
                                       status=test_status)

        agency_payment = FinanceServices.save_agency_payment(
            user=self.test_user, agency_payment=agency_payment)

        test_agency2 = Agency.objects.create(name='Test Agency2')

        agency_invoice = AgencyInvoice(date=test_date,
                                       amount=test_amount,
                                       agency=test_agency2,
                                       status=test_status)

        agency_invoice = FinanceServices.save_agency_invoice(
            user=self.test_user, agency_invoice=agency_invoice)

        agency_match = AgencyDocumentMatch(credit_document=agency_payment,
                                           debit_document=agency_invoice,
                                           matched_amount=test_amount)

        with self.assertRaises(ValidationError):
            agency_match = FinanceServices.save_agency_match(agency_match)
Esempio n. 27
0
    def test_save_transfer_status_draft(self):
        """
        Does draft transfer
        """
        test_account1 = Account.objects.create(
            name='Test Account1',
            currency=CURRENCY_CUC)
        test_balance1 = test_account1.balance
        test_account2 = Account.objects.create(
            name='Test Account2',
            currency=CURRENCY_CUC,
            balance=1000)
        test_balance2 = test_account2.balance

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_DRAFT

        transfer = Transfer(
            date=test_date,
            account=test_account1,
            transfer_account=test_account2,
            amount=test_amount,
            status=test_status)

        transfer = FinanceServices.save_transfer(
            user=self.test_user,
            transfer=transfer)

        # account balance unchanged
        self.assertAccount(test_account=test_account1, test_balance=test_balance1)
        self.assertAccount(test_account=test_account2, test_balance=test_balance2)

        # document data auto filled
        self.assertDocument(transfer, DOC_TYPE_TRANSFER, test_account1.currency)

        # one finantial history created
        finantials = transfer.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(
            test_finantial_history=finantial, test_document=transfer, test_user=self.test_user,
            test_old_status=None, test_new_status=test_status)

        # no accounting history created
        accountings = transfer.accountingdocumenthistory_set
        self.assertEqual(accountings.count(), 0)
    def test_save_loan_entity_deposit_status_draft(self):
        """
        Does draft loan_entity_deposit
        """
        test_account = Account.objects.create(name='Test Account',
                                              currency=CURRENCY_CUC)
        test_balance = test_account.balance

        test_loan_entity = LoanEntity.objects.create(name='Test Loan Entity')

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_DRAFT

        loan_entity_deposit = LoanEntityDeposit(date=test_date,
                                                account=test_account,
                                                amount=test_amount,
                                                loan_entity=test_loan_entity,
                                                status=test_status)

        loan_entity_deposit = FinanceServices.save_loan_entity_deposit(
            user=self.test_user, loan_entity_deposit=loan_entity_deposit)

        # account balance unchanged
        self.assertAccount(test_account=test_account,
                           test_balance=test_balance)

        # document data auto filled
        self.assertDocument(loan_entity_deposit, DOC_TYPE_LOAN_ENTITY_DEPOSIT,
                            test_account.currency)

        # one finantial history created
        finantials = loan_entity_deposit.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=loan_entity_deposit,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status)

        # no accounting history created
        accountings = loan_entity_deposit.accountingdocumenthistory_set
        self.assertEqual(accountings.count(), 0)
    def test_save_agency_devolution_status_draft(self):
        """
        Does draft agency_devolution
        """
        test_account = Account.objects.create(name='Test Account',
                                              currency=CURRENCY_CUC,
                                              balance=1000)
        test_balance = test_account.balance

        test_date = timezone.now()
        test_amount = 100
        test_status = STATUS_DRAFT

        agency_devolution = AgencyDevolution(agency=self.test_agency,
                                             date=test_date,
                                             account=test_account,
                                             amount=test_amount,
                                             status=test_status)

        agency_devolution = FinanceServices.save_agency_devolution(
            user=self.test_user, agency_devolution=agency_devolution)

        # account balance unchanged
        self.assertAccount(test_account=test_account,
                           test_balance=test_balance)

        # document data auto filled
        self.assertDocument(agency_devolution, DOC_TYPE_AGENCY_DEVOLUTION,
                            test_account.currency)

        # one finantial history created
        finantials = agency_devolution.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=agency_devolution,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status)

        # no accounting history created
        accountings = agency_devolution.accountingdocumenthistory_set
        self.assertEqual(accountings.count(), 0)
Esempio n. 30
0
    def test_save_agency_payment_draft_then_date(self):
        """
        Does draft agency_payment and then change date
        """
        test_account = Account.objects.create(name='Test Account',
                                              currency=CURRENCY_CUC)
        test_balance = test_account.balance

        test_date1 = timezone.now()
        test_amount = 100
        test_status = STATUS_DRAFT

        agency_payment = AgencyPayment(agency=self.test_agency,
                                       date=test_date1,
                                       account=test_account,
                                       amount=test_amount,
                                       status=test_status)

        agency_payment = FinanceServices.save_agency_payment(
            user=self.test_user, agency_payment=agency_payment)

        test_name1 = agency_payment.name

        # account balance unchanged
        self.assertAccount(test_account=test_account,
                           test_balance=test_balance)

        # document data auto filled
        self.assertDocument(agency_payment, DOC_TYPE_AGENCY_PAYMENT,
                            test_account.currency)

        # one finantial history created
        finantials = agency_payment.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # finantial history info
        finantial = finantials.first()
        self.assertFinantialHistory(test_finantial_history=finantial,
                                    test_document=agency_payment,
                                    test_user=self.test_user,
                                    test_old_status=None,
                                    test_new_status=test_status)

        # no accounting history created
        accountings = agency_payment.accountingdocumenthistory_set
        self.assertEqual(accountings.count(), 0)

        test_date2 = test_date1 - timedelta(days=5)

        agency_payment.date = test_date2

        agency_payment = FinanceServices.save_agency_payment(
            user=self.test_user, agency_payment=agency_payment)

        test_name2 = agency_payment.name

        # name changed
        self.assertNotEqual(test_name1, test_name2)

        # account balance unchanged
        self.assertAccount(test_account=test_account,
                           test_balance=test_balance)

        # document data auto filled
        self.assertDocument(agency_payment, DOC_TYPE_AGENCY_PAYMENT,
                            test_account.currency)

        # no finantial history created
        finantials = agency_payment.finantialdocumenthistory_set
        self.assertEqual(finantials.count(), 1)

        # no accounting history created
        accountings = agency_payment.accountingdocumenthistory_set
        self.assertEqual(accountings.count(), 0)