def test_save_loan_entity_deposit_draft_then_date(self):
        """
        Does draft loan_entity_deposit and then change date
        """
        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_date1 = timezone.now()
        test_amount = 100
        test_status = STATUS_DRAFT

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

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

        test_name1 = loan_entity_deposit.name

        # 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)

        test_date2 = test_date1 - timedelta(days=5)

        loan_entity_deposit.date = test_date2

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

        test_name2 = loan_entity_deposit.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(loan_entity_deposit, DOC_TYPE_LOAN_ENTITY_DEPOSIT,
                            test_account.currency)

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

        # no accounting history created
        accountings = loan_entity_deposit.accountingdocumenthistory_set
        self.assertEqual(accountings.count(), 0)
    def test_save_loan_entity_deposit_ready_then_date(self):
        """
        Does ready loan_entity_deposit and then change to draft
        """
        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_date1 = timezone.now()
        test_amount = 100
        test_status = STATUS_READY

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

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

        test_name1 = loan_entity_deposit.name

        # entity credit incremented
        self.assertLoanEntityCurrencyCreditAmount(loan_entity=test_loan_entity,
                                                  currency=CURRENCY_CUC,
                                                  amount=test_amount)

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

        # 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)
        # one accounting history created
        accountings = loan_entity_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)

        test_date2 = test_date1 - timedelta(days=5)

        loan_entity_deposit.date = test_date2

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

        test_name2 = loan_entity_deposit.name

        # name changed
        self.assertNotEqual(test_name1, test_name2)

        # entity credit unchanged
        self.assertLoanEntityCurrencyCreditAmount(loan_entity=test_loan_entity,
                                                  currency=CURRENCY_CUC,
                                                  amount=test_amount)

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

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

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

        # same accounting history
        accountings = loan_entity_deposit.accountingdocumenthistory_set
        self.assertEqual(accountings.count(), 1)