123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals
- import getopt
- import locale
- import logging
- import os
- import shutil
- import sys
- import csv
- import datetime
- import codecs
- import getpass
- from himports import settings
- from himports.hledger import *
- from himports.dolibarrAlchemyHledger import *
- logging.basicConfig(level=logging.INFO)
- logger = logging.getLogger('hreport')
- sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)
- def process_args(argv):
- options = {}
- usage = u'himport -a -p -d -v'
- try:
- opts, args = getopt.getopt(
- argv, "hp:P:adv",
- ["mysql-password=", "mysql-port"]
- )
- except getopt.GetoptError:
- print usage
- sys.exit(2)
- options['alchemy'] = False
- options['pdb'] = False
- options['verbose'] = 0
- for opt, arg in opts:
- if opt == '-h':
- print usage
- sys.exit()
- elif opt in ("-p", "--mysql-password"):
- options['mysql_password'] = arg
- elif opt in ("-P", "--mysql-port"):
- options['mysql_port'] = arg
- elif opt in ("-a", "--alchemy"):
- options['alchemy'] = True
- elif opt in ("-v", "--verbose"):
- options['verbose'] += 1
- elif opt in ("-d", "--pdb"):
- options['pdb'] = True
- return options
- def do_mysql(options):
- # On recupere les donnees via la base de donnees de dolibarr
- s = settings.get('MYSQL_SETTINGS')
- password = s['password']
- if 'mysql_password' in options:
- password = options['mysql_password']
- if password is None or password == "":
- password = getpass.getpass("password for mysql user '%s': " % (s['user']))
- port = s['port']
- if 'mysql_port' in options:
- port = options['mysql_port']
- if options['alchemy']:
- dolibarr = HledgerDolibarrSQLAlchemy(s['host'], port, s['database'], s['user'], password)
- dolibarr.connect()
- else:
- dolibarr = DolibarrSQL(s['host'], port, s['database'], s['user'], password)
- dolibarr.connect()
-
- bank_entries = dolibarr.get_bank_entries()
- sell_entries = dolibarr.get_sell_entries()
- supplier_entries = dolibarr.get_supplier_entries()
- social_entries = dolibarr.get_social_entries()
- dolibarr.disconnect()
-
- # On verifie s'il manque des postes comptables dans les ecritures
- pc_missing = set()
- pc_missing.update(bank_entries.check_pc())
- pc_missing.update(sell_entries.check_pc())
- pc_missing.update(supplier_entries.check_pc())
- pc_missing.update(social_entries.check_pc())
- if len(pc_missing) > 0:
- print "WARNING: poste comptable manquant"
- for pc in pc_missing:
- sys.stdout.write("%s\n" % (pc))
-
- # On ecrie les fichiers hledger
- Writer.write("bank",bank_entries)
- Writer.write("sells",sell_entries)
- Writer.write("suppliers",supplier_entries)
- Writer.write("social",social_entries)
- Writer.write_hreport_plan()
- def do_sqlalchemy(options):
- # On recupere les donnees via la base de donnees de dolibarr
- s = settings.get('MYSQL_SETTINGS')
- password = s['password']
- if 'mysql_password' in options:
- password = options['mysql_password']
- if password is None or password == "":
- password = getpass.getpass("password for mysql user '%s': " % (s['user']))
- port = s['port']
- if 'mysql_port' in options:
- port = options['mysql_port']
- dolibarr = HledgerDolibarrSQLAlchemy(s['host'], port, s['database'], s['user'], password, options['verbose'] >= 2)
- dolibarr.connect()
- if options['pdb']:
- s = dolibarr.session
- b = s.query(Bank).all()[10]
- set_trace()
- pass
- bank_journal = dolibarr.get_bank_journal()
- sell_journal = dolibarr.get_sell_journal()
- supplier_journal = dolibarr.get_supplier_journal()
- social_journal = dolibarr.get_social_journal()
-
- # On verifie s'il manque des postes comptables dans les ecritures
- pc_missing = set()
- pc_missing.update(bank_journal.check_pc())
- pc_missing.update(sell_journal.check_pc())
- pc_missing.update(supplier_journal.check_pc())
- pc_missing.update(social_journal.check_pc())
- if len(pc_missing) > 0:
- print "WARNING: poste comptable manquant"
- for pc in pc_missing:
- sys.stdout.write("%s\n" % (pc))
-
- # On ecrie les fichiers hledger
- Writer.write("bank", bank_journal)
- Writer.write("sells", sell_journal)
- Writer.write("suppliers", supplier_journal)
- Writer.write("social", social_journal)
- Writer.write_hreport_plan()
- dolibarr.disconnect()
- def main(argv):
- locale.setlocale(locale.LC_ALL, b'fr_FR.utf-8')
- options = process_args(argv)
-
- if options['alchemy']:
- do_sqlalchemy(options)
- else:
- do_mysql(options)
- if __name__ == "__main__":
- main(sys.argv[1:])
|