From 521e15eeb12e8d940a3d768a8759bb1f16587b82 Mon Sep 17 00:00:00 2001 From: thanhtl Date: Mon, 28 Jul 2025 15:38:23 +0700 Subject: [PATCH] Upload files to "/" --- ipcas01.py | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++ ipcas02.py | 52 +++++++++++++++++++++++ ipcas03.py | 49 +++++++++++++++++++++ 3 files changed, 223 insertions(+) create mode 100644 ipcas01.py create mode 100644 ipcas02.py create mode 100644 ipcas03.py diff --git a/ipcas01.py b/ipcas01.py new file mode 100644 index 0000000..364f338 --- /dev/null +++ b/ipcas01.py @@ -0,0 +1,122 @@ +import subprocess +import psutil +import time +from datetime import datetime, timedelta +from pywinauto import Application + +# --- Prepare dates +yesterday = (datetime.now() - timedelta(days=1)).strftime("%d/%m/%Y") +yesterday2 = (datetime.now() - timedelta(days=1)).strftime("%Y_%m_%d") + +# --- Launch IPCAS2 +subprocess.Popen([r"C:\IPCAS2\Bin\ipcas2.exe"]) + +# --- Login window +app = Application(backend="uia").connect(title_re="Login IPCAS-2 System.*", timeout=10) +window = app.window(title_re="Login IPCAS-2 System.*") +window.wait('visible', timeout=10) +window.set_focus() + +window.child_window(auto_id="1004", control_type="Edit").set_text("HQTLTHANH") # Username +window.child_window(auto_id="1003", control_type="Edit").set_text("7qANZQ2qkp2C_oAQ") # Password +window.child_window(auto_id="1002", control_type="Button").wait('enabled').invoke() + +# --- Sign in +time.sleep(3) +list_control = app.window(title_re="") +list_control.wait('visible', timeout=10) +list_control.set_focus() + +list_control.child_window(title="Sign (F2)", auto_id="1005", control_type="Button").wait('enabled').invoke() +list_control.child_window(auto_id="1007", control_type="Edit").set_text("Abc123") +list_control.child_window(title="OK", auto_id="1", control_type="Button").wait('enabled').invoke() +#comment out if you are using the latest version +list_control.child_window(title="OK", auto_id="2", control_type="Button").wait('enabled').invoke() +list_control.child_window(title="OK", auto_id="1003", control_type="Button").wait('enabled').invoke() + +# --- Open main IPCAS window +app = Application(backend="uia").connect(title_re=".*IPCAS System.*", timeout=10) +main_win = app.window(title_re=".*IPCAS System.*") +main_win.wait('visible', timeout=10) +main_win.set_focus() + +main_win.child_window(class_name="Edit", found_index=0).type_keys("mshr19") + +main_win.child_window(title="Tru so chinh", control_type="ListItem").wait('visible', timeout=30) + +# --- Switch to Win32 backend for input handling +app = Application(backend="win32").connect(title_re=".*IPCAS System.*", timeout=10) +main_win = app.window(title_re=".*IPCAS System.*") +main_win.wait('visible', timeout=10) +main_win.set_focus() + +# --- Configure report parameters +main_win.child_window(title="1000", class_name="Edit").type_keys("^a{BACKSPACE}9999", with_spaces=True) +main_win.child_window(title="Include Sub Branch", class_name="Button").click_input() +main_win.child_window(title="Detail by branch", class_name="Button").click_input() +main_win.child_window(title=" Show BRCD", class_name="Button").click_input() +#main_win.child_window(title="0-TGNNNN-KHNV", class_name="Edit").type_keys("^a{BACKSPACE}TDHSX_BC15{ENTER}", with_spaces=True) +main_win.child_window(title="0-TGNNNN-KHNV", class_name="Edit").type_keys("^a{BACKSPACE}BTD_KD{ENTER}", with_spaces=True) +main_win.child_window(title="Y - Year", class_name="ComboBox").select("D - Day") +main_win.child_window(class_name="PBEDIT105", found_index=0).type_keys("^a{BACKSPACE}" + yesterday, with_spaces=True) +main_win.child_window(title="Base", class_name="Button").click_input() +main_win.child_window(title="&Make Report", class_name="Button").click_input() + +# --- Wait for report generation +app = Application(backend="win32").connect(class_name="FNWND3105") +win = app.window(class_name="FNWND3105") + +while True: + matches = win.descendants(title=" Completed Successfully 34 items loaded", class_name="Button") + if matches: + break + time.sleep(0.5) + +win.child_window(title="Display All Data", class_name="Button").click_input() + +# --- Wait for Info popup +app = Application(backend="win32").connect(class_name="FNWND3105") +main_win = app.window(class_name="FNWND3105") + +while True: + try: + info_win = app.window(title="Info", class_name="#32770") + if info_win.exists(timeout=1) and info_win.child_window(title="Finished", class_name="Static").exists(timeout=1): + break + except: + pass + time.sleep(0.5) + +info_win.set_focus() +info_win.child_window(title="OK", class_name="Button").click_input() + +# --- Export report to Excel +main_win.child_window(title="&Excel", class_name="Button").click_input() + +# --- Save file dialog +while True: + try: + save_dialog = app.window(title="Save as File", class_name="#32770") + if save_dialog.exists(timeout=1): + break + except: + pass + time.sleep(0.5) + +save_dialog.child_window(class_name="Edit").set_edit_text(yesterday2 + "_TDHSX_BC15") +save_dialog.child_window(title="&Save", class_name="Button").click_input() + +from pywinauto import Application +from pywinauto.findwindows import find_windows + +time.sleep(5) # wait for Excel to load fully + +try: + hwnds = find_windows(title_re=".*Excel", class_name="XLMAIN") + if hwnds: + app = Application(backend="win32").connect(handle=hwnds[0]) + app.window(handle=hwnds[0]).close() +except Exception: + pass + +subprocess.run(["python", "ipcas02.py"], check=True) diff --git a/ipcas02.py b/ipcas02.py new file mode 100644 index 0000000..2873cab --- /dev/null +++ b/ipcas02.py @@ -0,0 +1,52 @@ +import subprocess +import psutil +import time +from datetime import datetime, timedelta +from pywinauto import Application + +yesterday2 = (datetime.now() - timedelta(days=1)).strftime("%Y_%m_%d") + +# --- Reconnect to IPCAS window +app = Application(backend="win32").connect(title_re=".*IPCAS System.*", timeout=10) +main_win = app.window(title_re=".*IPCAS System.*") +main_win.wait('visible', timeout=10) +main_win.set_focus() + +# --- Update to branch 9300 and USD +main_win.child_window(title="9999", class_name="Edit").type_keys("^a{BACKSPACE}9300", with_spaces=True) +main_win.child_window(title="Actual", class_name="Button").wait('enabled').click_input() +main_win.child_window(title="VND", class_name="ComboBox").wait('enabled').select("USD") + +# --- Generate report +main_win.child_window(title="&Make Report", class_name="Button").click_input() + +# --- Export to Excel +main_win.child_window(title="&Excel", class_name="Button").click_input() + +# --- Save file dialog +while True: + try: + save_dialog = app.window(title="Save as File", class_name="#32770") + if save_dialog.exists(timeout=1): + break + except: + pass + time.sleep(0.5) + +save_dialog.child_window(class_name="Edit").set_edit_text(yesterday2 + "_9300_USD_TDHSX_BC15") +save_dialog.child_window(title="&Save", class_name="Button").click_input() + +from pywinauto import Application +from pywinauto.findwindows import find_windows + +time.sleep(5) # wait for Excel to load fully + +try: + hwnds = find_windows(title_re=".*Excel", class_name="XLMAIN") + if hwnds: + app = Application(backend="win32").connect(handle=hwnds[0]) + app.window(handle=hwnds[0]).close() +except Exception: + pass + +subprocess.run(["python", "ipcas03.py"], check=True) \ No newline at end of file diff --git a/ipcas03.py b/ipcas03.py new file mode 100644 index 0000000..b862e36 --- /dev/null +++ b/ipcas03.py @@ -0,0 +1,49 @@ +import time +import psutil +from datetime import datetime, timedelta +from pywinauto import Application + +yesterday2 = (datetime.now() - timedelta(days=1)).strftime("%Y_%m_%d") + +# --- Reconnect to IPCAS window +app = Application(backend="win32").connect(title_re=".*IPCAS System.*", timeout=10) +main_win = app.window(title_re=".*IPCAS System.*") +main_win.wait('visible', timeout=10) +main_win.set_focus() + +# --- Update to branch 9300 and USD +main_win.child_window(title="USD", class_name="ComboBox").select("KHR") + +# --- Generate report +main_win.child_window(title="&Make Report", class_name="Button").click_input() + +# --- Export to Excel +main_win.child_window(title="&Excel", class_name="Button").click_input() + +# --- Save file dialog +while True: + try: + save_dialog = app.window(title="Save as File", class_name="#32770") + if save_dialog.exists(timeout=1): + break + except: + pass + time.sleep(0.5) + +save_dialog.child_window(class_name="Edit").set_edit_text(yesterday2 + "_9300_KHR_TDHSX_BC15") +save_dialog.child_window(title="&Save", class_name="Button").click_input() + +from pywinauto import Application +from pywinauto.findwindows import find_windows + +time.sleep(5) # wait for Excel to load fully + +try: + hwnds = find_windows(title_re=".*Excel", class_name="XLMAIN") + if hwnds: + app = Application(backend="win32").connect(handle=hwnds[0]) + app.window(handle=hwnds[0]).close() +except Exception: + pass + +main_win.child_window(title="&Exit", class_name="Button").click_input() \ No newline at end of file