himport 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from __future__ import unicode_literals
  4. import getopt
  5. import locale
  6. import logging
  7. import sys
  8. import codecs
  9. import getpass
  10. from himports import settings
  11. from himports.dolibarrWriter import Writer
  12. from himports.dolibarrAlchemyHledger import HledgerDolibarrSQLAlchemy
  13. logging.basicConfig(level=logging.INFO)
  14. logger = logging.getLogger('hreport')
  15. sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)
  16. def process_args(argv):
  17. options = {}
  18. usage = u'''Usage: himport -v -y <YEAR> [ -y <YEAR> ] ...
  19. options:
  20. -v : verbose mode
  21. -y <YEAR> : import the corresponding accounting year
  22. '''
  23. try:
  24. opts, args = getopt.getopt(
  25. argv, "hvy:",
  26. ["mysql-password=", "mysql-port", "year="]
  27. )
  28. except getopt.GetoptError:
  29. print("himport: Invalid options")
  30. print(usage)
  31. sys.exit(2)
  32. options['years'] = list()
  33. options['verbose'] = 0
  34. for opt, arg in opts:
  35. if opt == '-h':
  36. print(usage)
  37. sys.exit()
  38. elif opt in ("-v", "--verbose"):
  39. options['verbose'] += 1
  40. elif opt in ("-y", "--year"):
  41. options['years'].append(str(arg))
  42. if len(options['years']) == 0:
  43. print("You need to specify the accounting years")
  44. print("")
  45. print(usage)
  46. sys.exit(1)
  47. return options
  48. def do_sqlalchemy(options):
  49. # On recupere les donnees via la base de donnees de dolibarr
  50. s = settings.get('MYSQL_SETTINGS')
  51. password = s['password']
  52. if password is None or password == "":
  53. password = getpass.getpass("password for mysql user '%s': " % (s['user']))
  54. dolibarr = HledgerDolibarrSQLAlchemy(s['host'], s['port'], s['database'], s['user'], password, options['verbose'] >= 2)
  55. dolibarr.connect()
  56. bank_journal = dolibarr.get_bank_journal()
  57. sell_journal = dolibarr.get_sell_journal()
  58. supplier_journal = dolibarr.get_supplier_journal()
  59. social_journal = dolibarr.get_social_journal()
  60. # On verifie s'il manque des postes comptables dans les ecritures
  61. pc_missing = set()
  62. pc_missing.update(bank_journal.check_pc())
  63. pc_missing.update(sell_journal.check_pc())
  64. pc_missing.update(supplier_journal.check_pc())
  65. pc_missing.update(social_journal.check_pc())
  66. if len(pc_missing) > 0:
  67. print("WARNING: poste comptable manquant")
  68. for pc in pc_missing:
  69. sys.stdout.write("%s\n" % (pc))
  70. # On ecrie les fichiers hledger
  71. Writer.write("bank", bank_journal, options['years'])
  72. Writer.write("sells", sell_journal, options['years'])
  73. Writer.write("suppliers", supplier_journal, options['years'])
  74. Writer.write("social", social_journal, options['years'])
  75. Writer.write_hreport_chart_of_accounts(options['years'])
  76. dolibarr.disconnect()
  77. def main(argv):
  78. locale.setlocale(locale.LC_ALL, b'fr_FR.utf-8')
  79. options = process_args(argv)
  80. do_sqlalchemy(options)
  81. if __name__ == "__main__":
  82. main(sys.argv[1:])