diff --git a/README_IMPORT.md b/README_IMPORT.md index 664028b..45ed071 100644 --- a/README_IMPORT.md +++ b/README_IMPORT.md @@ -38,9 +38,21 @@ Posts all **Draft** depreciation entries found in the system up to a specific da ### Usage ```bash -/home/suherdy/Pythoncode/odoo17/.venv/bin/python scripts/post_depreciation.py +/path/to/venv/bin/python scripts/post_depreciation.py \ + \ + \ + \ + [--date YYYY-MM-DD] +``` + +**Example:** +```bash +/home/suherdy/Pythoncode/odoo17/.venv/bin/python scripts/post_depreciation.py \ + /home/suherdy/Pythoncode/odoo17/odoo/odoo-bin \ + /home/suherdy/Pythoncode/odoo17/odoo.conf \ + kipasdbclone5 \ + --date 2026-01-21 ``` -*Note: You may need to edit the `POST_UP_TO_DATE` variable inside the script to target a specific date.* --- diff --git a/post_depreciation.py b/post_depreciation.py index b73fc76..122404c 100644 --- a/post_depreciation.py +++ b/post_depreciation.py @@ -1,28 +1,54 @@ import sys import os -from datetime import date +import argparse +from datetime import date, datetime -# ---------------- CONFIGURATION ---------------- -PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) -# Change CWD to Project Root so relative paths in odoo.conf work -os.chdir(PROJECT_ROOT) +def main(): + parser = argparse.ArgumentParser(description="Post Draft Depreciation Entries in Odoo") + parser.add_argument("odoo_bin_path", help="Path to odoo-bin executable") + parser.add_argument("conf_path", help="Path to odoo.conf") + parser.add_argument("db_name", help="Database name") + parser.add_argument("--date", help="Post entries up to this date (YYYY-MM-DD). Defaults to today.", default=None) -ODOO_PATH = os.path.join(PROJECT_ROOT, 'odoo') -CONF_FILE = os.path.join(PROJECT_ROOT, 'odoo.conf') -DB_NAME = 'kipasdbclone5' -POST_UP_TO_DATE = date(2026, 1, 21) # User specified "now" + args = parser.parse_args() -if ODOO_PATH not in sys.path: - sys.path.append(ODOO_PATH) + odoo_bin_path = os.path.abspath(args.odoo_bin_path) + conf_path = os.path.abspath(args.conf_path) + db_name = args.db_name + + if args.date: + try: + post_up_to_date = datetime.strptime(args.date, '%Y-%m-%d').date() + except ValueError: + print("Error: Date must be in YYYY-MM-DD format.") + sys.exit(1) + else: + post_up_to_date = date.today() -import odoo -from odoo import api, SUPERUSER_ID + # Add Odoo to sys.path + odoo_root = os.path.dirname(odoo_bin_path) + if odoo_root not in sys.path: + sys.path.append(odoo_root) + + # Change CWD to config directory to handle relative paths in config + os.chdir(os.path.dirname(conf_path)) -def post_depreciation(): - print(f"Initializing Odoo Environment for database: {DB_NAME}...") try: - odoo.tools.config.parse_config(['-c', CONF_FILE]) - registry = odoo.registry(DB_NAME) + import odoo + from odoo import api, SUPERUSER_ID + except ImportError: + print(f"Error: Could not import 'odoo' module from {odoo_root}. Make sure odoo-bin path is correct.") + sys.exit(1) + + post_depreciation(db_name, conf_path, post_up_to_date) + +def post_depreciation(db_name, conf_file, post_up_to_date): + print(f"Initializing Odoo Environment for database: {db_name}...") + try: + import odoo + from odoo import api, SUPERUSER_ID + odoo.tools.config.parse_config(['-c', conf_file]) + registry = odoo.registry(db_name) except Exception as e: print(f"Error initializing Odoo: {e}") return @@ -36,14 +62,14 @@ def post_depreciation(): moves_to_post = env['account.move'].search([ ('asset_id', '!=', False), ('state', '=', 'draft'), - ('date', '<=', POST_UP_TO_DATE) + ('date', '<=', post_up_to_date) ]) if not moves_to_post: - print(f"No draft depreciation entries found on or before {POST_UP_TO_DATE}.") + print(f"No draft depreciation entries found on or before {post_up_to_date}.") return - print(f"Found {len(moves_to_post)} moves to post up to {POST_UP_TO_DATE}.") + print(f"Found {len(moves_to_post)} moves to post up to {post_up_to_date}.") # Group by date for nicer logging moves_by_date = {} @@ -72,4 +98,4 @@ def post_depreciation(): traceback.print_exc() if __name__ == "__main__": - post_depreciation() + main()