diff --git a/src/modules/plant/run2.py b/src/modules/plant/run2.py index 396aaa1..df1a8e4 100644 --- a/src/modules/plant/run2.py +++ b/src/modules/plant/run2.py @@ -5,11 +5,18 @@ import sys sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) from config import get_connection # harus mengembalikan koneksi psycopg2 from math import pow +import numpy as np import numpy_financial as npf import math import uuid +def normalize_db_value(value): + """Convert numpy scalars to native Python types for psycopg2.""" + if isinstance(value, np.generic): + return value.item() + return value + def validate_number(n): return n if n is not None else 0 @@ -65,7 +72,8 @@ def hitung_irr(cashflows: list): def main(): - conn = get_connection() + connections = get_connection() + conn = connections[0] if isinstance(connections, tuple) else connections if conn is None: print("Koneksi ke database gagal.") sys.exit(1) @@ -492,7 +500,7 @@ def main(): calc4_free_cash_flow_on_equity_array.append(calc4_free_cash_flow_on_equity) calc4_discounted_fcf_on_equity = hitung_pv(wacc_on_equity, seq, calc4_free_cash_flow_on_equity) - params.append(( + row_params = ( net_capacity_factor, eaf, production_bruto, @@ -560,7 +568,8 @@ def main(): chart_capex_acquisition_cost, chart_capex_annualized, seq # <-- penting: ini untuk WHERE - )) + ) + params.append(tuple(normalize_db_value(v) for v in row_params)) # 3. Bulk update dengan executemany if params: @@ -613,13 +622,15 @@ def main(): conn.close() except Exception as e: - conn.rollback() + if conn: + conn.rollback() print(f"Terjadi error, transaksi di-rollback. Error: {e}") try: cur.close() except Exception: pass - conn.close() + if conn: + conn.close() if __name__ == "__main__":