# print('  ', account.description, split.value, '€') # , split.quantity
    try:
        journal.log_entry(row.post_date.date(), row.description, imputations)
    except (UnbalancedEntryError, DuplicatedEntryError) as e:
        # Compte Soldes initiaux
        # UnbalancedEntryError 1998-03-31 Elanciel France
        # DuplicatedEntryError 1999-07-16 (Soldes initiaux -> Soldes initiaux)
        # UnbalancedEntryError 1999-07-16
        # Fixme: transactions réparties / erreurs ?
        print(type(e), row.post_date, row.description,
              [account_chart[imputation.account].description for imputation in imputations])

# For Ctrl+C
del gnucash_database

####################################################################################################

if True:
    from FinancialSimulator.WebApplication.Application import create_application
    
    # Fixme: if DEBUG = True then reload ...
    config_path = os.path.join(os.path.dirname(__file__), 'config.py')
    application = create_application(config_path, account_chart, analytic_account_chart, journals)
    application.run()

####################################################################################################
#
# End
#
####################################################################################################
    ('JA', 'Journal des achats'),  # Achat
    ('JOD', 'Journal des opérations diverses'),  # Général
    ('JV', 'Journal des ventes'),  # Vente
    ('JAV', 'Journal des avoirs de ventes'),  # Avoir de vente
):
    journals[code] = Journal(label, account_chart)

####################################################################################################

journals['JV'].log_transaction(date=datetime.date(2016, 1, 1),
                               debit={
                                   '706': 80,
                                   '44571': 20
                               },
                               credit={'512': 100},
                               description='vente')

####################################################################################################

# Fixme: if DEBUG = True then reload ...

config_path = os.path.join(os.path.dirname(__file__), 'config.py')
application = create_application(config_path, account_chart, journals)
application.run()

####################################################################################################
#
# End
#
####################################################################################################
    # yaml_file = 'systeme-base-bilan-tableau.yml'
    yaml_file = "systeme-base-resultat-tableau.yml"
    yaml_loader = Results.YamlLoader(yaml_file)
    table = yaml_loader.table

    computation_visitor = table.compute(account_chart, set_evaluator=True)
    evaluator = computation_visitor.evaluator
    used = evaluator["Tactif"] | evaluator["Tpassif"]
    pcg_set = set(account for account in account_chart if account.system == "base")
    delta = pcg_set - used
    for account in list(delta):
        if account in delta:
            account_set = set(account.depth_first_search()) - set(account)
            if account_set <= delta:
                delta -= account_set
    print("Delta:", sorted(delta))

if True:
    from FinancialSimulator.WebApplication.Application import create_application

    # Fixme: if DEBUG = True then reload ...
    config_path = os.path.join(os.path.dirname(__file__), "config.py")
    application = create_application(config_path, account_chart, None, journals)
    application.run()

####################################################################################################
#
# End
#
####################################################################################################