def init(): config_name = _Config(current_app.config['CONFIG_FILE']) config = _Config(current_app.config['CONFIG_FOLDER'] + '/config_' + config_name.cfg['PROFILE']['id'] + '.ini') log = _Log(config.cfg['GLOBAL']['logfile']) db_type = config.cfg['DATABASE']['databasetype'] db = _Database(log, db_type, conn=get_db().conn) xml = _Xml(config, db) file_name = config.cfg['GLOBAL']['tmppath'] + 'tmp' locale = _Locale(config) files = _Files( file_name, int(config.cfg['GLOBAL']['resolution']), int(config.cfg['GLOBAL']['compressionquality']), xml, log, config.cfg['GLOBAL']['convertpdftotiff'], locale, config ) ocr = _PyTesseract(locale.localeOCR, log, config) splitter = _Splitter(config, db, locale) ws = '' if config.cfg['GED']['enabled'] == 'True': ws = _WebServices( config.cfg['GED']['host'], config.cfg['GED']['user'], config.cfg['GED']['password'], log, config ) return db, config, locale, ws, xml, files, ocr, splitter
def edit_supplier(): _vars = pdf.init() _db = _vars[0] _cfg = _vars[1] log = _Log(_cfg.cfg['GLOBAL']['logfile']) spreadsheet = _Spreadsheet(log, _cfg) data = request.get_json() if 'getOnlyRawFooter' not in data: data['getOnlyRawFooter'] = False update_data = { 'name': data['name'], 'vat_number': data['VAT'], 'siret': data['SIRET'], 'siren': data['SIREN'], 'city': data['city'], 'adress1': data['adress'], 'adress2': data['adress2'], 'postal_code': data['zip'], 'get_only_raw_footer': str(data['getOnlyRawFooter']) } if 'companyTypo' in data: update_data['typology'] = data['companyTypo'] if data['companyType'] != '': update_data['company_type'] = data['companyType'] args = { 'table': ['suppliers'], 'set': update_data, 'where': ['id = ?'], 'data': [data['supplierId']], } res = _db.update(args) if res: spreadsheet.update_supplier_ods_sheet(_db) if 'pdfId' in data: args = { 'table': ['invoices'], 'set': { 'id_supplier': data['supplierId'], }, 'where': ['id = ?'], 'data': [data['pdfId']], } res = _db.update(args) flash(gettext('SUPPLIER_EDITED')) else: return json.dumps({'code': 500, 'ok': 'false'}) return json.dumps({'code': 200, 'ok': 'true'})
def init(): configName = _Config(current_app.config['CONFIG_FILE']) Config = _Config(current_app.config['CONFIG_FOLDER'] + '/config_' + configName.cfg['PROFILE']['id'] + '.ini') Log = _Log(Config.cfg['GLOBAL']['logfile']) db = _Database(Log, None, get_db()) Locale = _Locale(Config) configFile = current_app.config[ 'CONFIG_FOLDER'] + '/config_' + configName.cfg['PROFILE']['id'] + '.ini' return db, Config, Locale, configName, configFile
def launch(args): start = time.time() # Init all the necessary classes config_name = _Config(args['config']) cfg_name = config_name.cfg['PROFILE'][ 'cfgpath'] + '/config_' + config_name.cfg['PROFILE']['id'] + '.ini' if not os.path.exists(cfg_name): sys.exit('Config file couldn\'t be found') config = _Config(config_name.cfg['PROFILE']['cfgpath'] + '/config_' + config_name.cfg['PROFILE']['id'] + '.ini') tmp_folder = tempfile.mkdtemp( dir=config.cfg['SPLITTER']['tmpbatchpath']) + '/' file_name = tempfile.NamedTemporaryFile(dir=tmp_folder).name locale = _Locale(config) log = _Log(config.cfg['GLOBAL']['logfile']) ocr = _PyTesseract(locale.localeOCR, log, config) db_type = config.cfg['DATABASE']['databasetype'] db_user = config.cfg['DATABASE']['postgresuser'] db_pwd = config.cfg['DATABASE']['postgrespassword'] db_name = config.cfg['DATABASE']['postgresdatabase'] db_host = config.cfg['DATABASE']['postgreshost'] db_port = config.cfg['DATABASE']['postgresport'] database = _Database(log, db_type, db_name, db_user, db_pwd, db_host, db_port, config.cfg['DATABASE']['databasefile']) splitter = _Splitter(config, database, locale) xml = _Xml(config, database) files = _Files(file_name, int(config.cfg['GLOBAL']['resolution']), int(config.cfg['GLOBAL']['compressionquality']), xml, log, config.cfg['GLOBAL']['convertpdftotiff'], locale) # Connect to database database.connect() # Start process if args['file'] is not None: path = args['file'] if check_file(files, path, config, log) is not False: # Process the file and send it to Maarch OCForInvoices_splitter.process(path, log, splitter, files, ocr, tmp_folder, config) # Close database database.conn.close() end = time.time() log.info('Process end after ' + timer(start, end) + '')
def init(): # Init all the necessary classes config_name = _Config(current_app.config['CONFIG_FILE']) config = _Config(config_name.cfg['PROFILE']['cfgpath'] + '/config_' + config_name.cfg['PROFILE']['id'] + '.ini') db_type = config.cfg['DATABASE']['databasetype'] db_name = config.cfg['DATABASE']['postgresdatabase'] db_user = config.cfg['DATABASE']['postgresuser'] db_pwd = config.cfg['DATABASE']['postgrespassword'] db_host = config.cfg['DATABASE']['postgreshost'] db_port = config.cfg['DATABASE']['postgresport'] log = _Log(config.cfg['GLOBAL']['logfile']) db = _Database(log, db_type, db_name, db_user, db_pwd, db_host, db_port, config.cfg['DATABASE']['databasefile']) return {'db': db, 'type': db_type, 'log': log}
def init(): # Init all the necessary classes configName = _Config(current_app.config['CONFIG_FILE']) Config = _Config(configName.cfg['PROFILE']['cfgpath'] + '/config_' + configName.cfg['PROFILE']['id'] + '.ini') dbType = Config.cfg['DATABASE']['databasetype'] dbName = Config.cfg['DATABASE']['postgresdatabase'] dbUser = Config.cfg['DATABASE']['postgresuser'] dbPwd = Config.cfg['DATABASE']['postgrespassword'] dbHost = Config.cfg['DATABASE']['postgreshost'] dbPort = Config.cfg['DATABASE']['postgresport'] Log = _Log(Config.cfg['GLOBAL']['logfile']) db = _Database(Log, dbType, dbName, dbUser, dbPwd, dbHost, dbPort, Config.cfg['DATABASE']['databasefile']) return {'db': db, 'type': dbType, 'log': Log}
def delete_supplier(supplier_id): _vars = pdf.init() _db = _vars[0] _cfg = _vars[1] log = _Log(_cfg.cfg['GLOBAL']['logfile']) spreadsheet = _Spreadsheet(log, _cfg) res = _db.update({ 'table': ['suppliers'], 'set': { 'status': 'DEL' }, 'where': ['id = ?'], 'data': [supplier_id] }) if res: spreadsheet.update_supplier_ods_sheet(_db) flash(gettext('SUPPLIER_DELETED')) return json.dumps({'text': 'OK', 'code': 200, 'ok': 'true'}) return res
def init(): configName = _Config(current_app.config['CONFIG_FILE']) Cfg = _Config(current_app.config['CONFIG_FOLDER'] + '/config_' + configName.cfg['PROFILE']['id'] + '.ini') Log = _Log(Cfg.cfg['GLOBAL']['logfile']) dbType = Cfg.cfg['DATABASE']['databasetype'] db = _Database(Log, dbType, conn=get_db().conn) Xml = _Xml(Cfg, db) fileName = Cfg.cfg['GLOBAL']['tmppath'] + 'tmp' Files = _Files(fileName, int(Cfg.cfg['GLOBAL']['resolution']), int(Cfg.cfg['GLOBAL']['compressionquality']), Xml, Log, Cfg.cfg['GLOBAL']['convertpdftotiff']) Locale = _Locale(Cfg) Ocr = _PyTesseract(Locale.localeOCR, Log, Cfg) splitter = _Splitter(Cfg, db, Locale) ws = '' if Cfg.cfg['GED']['enabled'] == 'True': ws = _WebServices(Cfg.cfg['GED']['host'], Cfg.cfg['GED']['user'], Cfg.cfg['GED']['password'], Log, Cfg) return db, Cfg, Locale, ws, Xml, Files, Ocr, splitter
if __name__ == '__main__': ap = argparse.ArgumentParser() ap.add_argument("-c", "--config", required=True, help="path to config file") args = vars(ap.parse_args()) if not os.path.exists(args['config']): sys.exit('Config file couldn\'t be found') configName = _Config(args['config']) Config = _Config(configName.cfg['PROFILE']['cfgpath'] + '/config_' + configName.cfg['PROFILE']['id'] + '.ini') Log = _Log(Config.cfg['GLOBAL']['logfile']) Spreadsheet = _Spreadsheet(Log, Config) dbType = Config.cfg['DATABASE']['databasetype'] dbUser = Config.cfg['DATABASE']['postgresuser'] dbPwd = Config.cfg['DATABASE']['postgrespassword'] dbname = Config.cfg['DATABASE']['postgresdatabase'] dbhost = Config.cfg['DATABASE']['postgreshost'] dbport = Config.cfg['DATABASE']['postgresport'] Database = _Database(Log, dbType, dbname, dbUser, dbPwd, dbhost, dbport, Config.cfg['DATABASE']['databasefile']) # Load the referencials into array before inject it into database # Read MIME type from file #TODO # Add the MIME type into a config file
def add_supplier(): _vars = pdf.init() _db = _vars[0] _cfg = _vars[1] log = _Log(_cfg.cfg['GLOBAL']['logfile']) spreadsheet = _Spreadsheet(log, _cfg) data = request.get_json() if 'getOnlyRawFooter' not in data: data['getOnlyRawFooter'] = False add_data = { 'name': data['name'], 'vat_number': data['VAT'], 'siret': data['SIRET'], 'siren': data['SIREN'], 'city': data['city'], 'adress1': data['adress'], 'adress2': data['adress2'], 'postal_code': data['zip'], 'get_only_raw_footer': str(data['getOnlyRawFooter']) } if data['companyType']: add_data['company_type'] = data['companyType'] if 'companyTypo' in data: add_data['typology'] = data['companyTypo'] args = { 'table': 'suppliers', 'columns': add_data, } res = _db.insert(args) if res: spreadsheet.update_supplier_ods_sheet(_db) if 'pdfId' in data: id_supplier = _db.select({ 'select': ['*'], 'table': ['suppliers'], 'where': ['status= ?'], 'data': ['ACTIVE'], 'order_by': ['id DESC'], 'limit': '1' })[0]['id'] args = { 'table': ['invoices'], 'set': { 'id_supplier': id_supplier, }, 'where': ['id = ?'], 'data': [data['pdfId']], } res = _db.update(args) flash(gettext('SUPPLIER_ADDED')) else: return json.dumps({'code': 500, 'ok': 'false'}) return json.dumps({'code': 200, 'ok': 'true'})
def launch(args): start = time.time() # Init all the necessary classes configName = _Config(args['config']) cfgName = configName.cfg['PROFILE'][ 'cfgpath'] + '/config_' + configName.cfg['PROFILE']['id'] + '.ini' if not os.path.exists(cfgName): sys.exit('Config file couldn\'t be found') Config = _Config(configName.cfg['PROFILE']['cfgpath'] + '/config_' + configName.cfg['PROFILE']['id'] + '.ini') tmpFolder = tempfile.mkdtemp( dir=Config.cfg['SPLITTER']['tmpbatchpath']) + '/' fileName = tempfile.NamedTemporaryFile(dir=tmpFolder).name Locale = _Locale(Config) Log = _Log(Config.cfg['GLOBAL']['logfile']) Ocr = _PyTesseract(Locale.localeOCR, Log, Config) dbType = Config.cfg['DATABASE']['databasetype'] dbUser = Config.cfg['DATABASE']['postgresuser'] dbPwd = Config.cfg['DATABASE']['postgrespassword'] dbName = Config.cfg['DATABASE']['postgresdatabase'] dbHost = Config.cfg['DATABASE']['postgreshost'] dbPort = Config.cfg['DATABASE']['postgresport'] Database = _Database(Log, dbType, dbName, dbUser, dbPwd, dbHost, dbPort, Config.cfg['DATABASE']['databasefile']) Splitter = _Splitter(Config, Database, Locale) Xml = _Xml(Config, Database) Files = _Files(fileName, int(Config.cfg['GLOBAL']['resolution']), int(Config.cfg['GLOBAL']['compressionquality']), Xml, Log, Config.cfg['GLOBAL']['convertpdftotiff']) # Connect to database Database.connect() # Start process if args['file'] is not None: path = args['file'] if check_file(Files, path, Config, Log) is not False: # Process the file and send it to Maarch OCForInvoices_splitter.process(path, Log, Splitter, Files, Ocr, tmpFolder) elif args['path'] is not None: path = args['path'] for file in os.listdir(path): if check_file(Files, path + file, Config, Log) is not False: # Create the Queue to store files q = queue.Queue() # Find file in the wanted folder (default or exported pdf after qrcode separation) q = OCForInvoices_splitter.process(path + file, Log, Splitter, Files, Ocr, tmpFolder) if not q: continue # Empty the tmp dir to avoid residual file # recursive_delete(tmpFolder, Log) # Close database Database.conn.close() end = time.time() Log.info('Process end after ' + timer(start, end) + '')
def launch(args): start = time.time() # Init all the necessary classes config_name = _Config(args['config']) config = config_name.cfg['PROFILE'][ 'cfgpath'] + '/config_' + config_name.cfg['PROFILE']['id'] + '.ini' if not os.path.exists(config): sys.exit('config file couldn\'t be found') config = _Config(config) locale = _Locale(config) if args.get('isMail') is not None and args['isMail'] is True: log = _Log((args['log'])) log.info('Process attachment n°' + args['cpt'] + '/' + args['nb_of_attachments']) else: log = _Log(config.cfg['GLOBAL']['logfile']) ocr = _PyTesseract(locale.localeOCR, log, config) db_type = config.cfg['DATABASE']['databasetype'] db_user = config.cfg['DATABASE']['postgresuser'] db_pwd = config.cfg['DATABASE']['postgrespassword'] db_name = config.cfg['DATABASE']['postgresdatabase'] db_host = config.cfg['DATABASE']['postgreshost'] db_port = config.cfg['DATABASE']['postgresport'] database = _Database(log, db_type, db_name, db_user, db_pwd, db_host, db_port, config.cfg['DATABASE']['databasefile']) xml = _Xml(config, database) tmp_folder = tempfile.mkdtemp(dir=config.cfg['GLOBAL']['tmppath']) filename = tempfile.NamedTemporaryFile(dir=tmp_folder).name separator_qr = SeparatorQR(log, config, tmp_folder) if args.get('isMail') is None or args.get('isMail') is False: separator_qr.enabled = str2bool(config.cfg['SEPARATORQR']['enabled']) files = _Files(filename, int(config.cfg['GLOBAL']['resolution']), int(config.cfg['GLOBAL']['compressionquality']), xml, log, config.cfg['GLOBAL']['convertpdftotiff'], locale, config) if config.cfg['GED']['enabled'] != 'False': webservices = _WebServices(config.cfg['GED']['host'], config.cfg['GED']['user'], config.cfg['GED']['password'], log, config) else: webservices = False # Connect to database database.connect() # Start process if 'path' in args and args['path'] is not None: path = args['path'] if separator_qr.enabled: for fileToSep in os.listdir(path): if check_file(files, path + fileToSep, config, log): separator_qr.run(path + fileToSep) path = separator_qr.output_dir_pdfa if str2bool( separator_qr.convert_to_pdfa ) is True else separator_qr.output_dir for file in os.listdir(path): if check_file( files, path + file, config, log) is not False and not os.path.isfile(path + file + '.lock'): os.mknod(path + file + '.lock') log.info('Lock file created : ' + path + file + '.lock') # Find file in the wanted folder (default or exported pdf after qrcode separation) typo = '' # if config.cfg['AI-CLASSIFICATION']['enabled'] == 'True': # typo = get_typo(config, path + file, log) OCForInvoices_process.process(path + file, log, config, files, ocr, locale, database, webservices, typo) try: os.remove(path + file + '.lock') log.info('Lock file removed : ' + path + file + '.lock') except FileNotFoundError: pass elif 'file' in args and args['file'] is not None: path = args['file'] typo = '' if separator_qr.enabled: if check_file(files, path, config, log) is not False: separator_qr.run(path) path = separator_qr.output_dir_pdfa if str2bool( separator_qr.convert_to_pdfa ) is True else separator_qr.output_dir for file in os.listdir(path): # if config.cfg['AI-CLASSIFICATION']['enabled'] == 'True': # typo = get_typo(config, path + file, log) if check_file(files, path + file, config, log) is not False: # Process the file and send it to Maarch OCForInvoices_process.process(path + file, log, config, files, ocr, locale, database, webservices, typo) elif config.cfg['SEPARATE-BY-DOCUMENT']['enabled'] == 'True': list_of_files = separator_qr.split_document_every_two_pages(path) for file in list_of_files: # if config.cfg['AI-CLASSIFICATION']['enabled'] == 'True': # typo = get_typo(config, file, log) if check_file(files, file, config, log) is not False: # Process the file and send it to Maarch OCForInvoices_process.process(file, log, config, files, ocr, locale, database, webservices, typo) os.remove(path) else: # if config.cfg['AI-CLASSIFICATION']['enabled'] == 'True': # typo = get_typo(config, path, log) if check_file(files, path, config, log) is not False: # Process the file and send it to Maarch OCForInvoices_process.process(path, log, config, files, ocr, locale, database, webservices, typo) # Empty the tmp dir to avoid residual file recursive_delete( [tmp_folder, separator_qr.output_dir, separator_qr.output_dir_pdfa], log) # Close database database.conn.close() end = time.time() log.info('Process end after ' + timer(start, end) + '')