510 lines
22 KiB
Python
510 lines
22 KiB
Python
from PyQt5.QtWidgets import (QMainWindow, QAction, QVBoxLayout, QHBoxLayout, QWidget, QPushButton, QLabel, QProgressBar, QComboBox, QCheckBox, QTextBrowser, QPlainTextEdit, QDialog, QFrame, QLineEdit,QGridLayout)
|
|
from PyQt5.QtCore import Qt
|
|
from ui.percenty_settings import PercentySettingsDialog
|
|
from ui.business_settings import BusinessSettingsDialog
|
|
from ui.help_dialog import HelpDialog
|
|
from utils.playwright_helpers import PlaywrightHelper
|
|
from utils.config import ConfigManager
|
|
import asyncio
|
|
|
|
class MainWindow(QMainWindow):
|
|
def __init__(self, config, logger):
|
|
super().__init__()
|
|
self.config = config
|
|
self.logger = logger
|
|
self.playwright_helper = PlaywrightHelper()
|
|
|
|
self.setWindowTitle('Change-Percenty2')
|
|
self.setGeometry(100, 100, 450, 800)
|
|
|
|
self.init_ui()
|
|
|
|
def init_ui(self):
|
|
main_layout = QVBoxLayout()
|
|
|
|
# 상단의 도움말, 퍼센티 설정, 사업자 설정 메뉴
|
|
self.create_menu()
|
|
|
|
# 메인 레이아웃 설정
|
|
main_layout.addLayout(self.create_main_layout())
|
|
|
|
# 상태 라벨 추가
|
|
self.status_label = QLabel('현재 상태: 준비 완료')
|
|
main_layout.addWidget(self.status_label)
|
|
|
|
container = QWidget()
|
|
container.setLayout(main_layout)
|
|
self.setCentralWidget(container)
|
|
|
|
def create_menu(self):
|
|
menubar = self.menuBar()
|
|
|
|
# 도움말 메뉴
|
|
help_menu = menubar.addMenu('도움말')
|
|
help_action = QAction('도움말 보기', self)
|
|
help_action.triggered.connect(self.show_help)
|
|
help_menu.addAction(help_action)
|
|
|
|
# 퍼센티 설정 메뉴
|
|
percenty_menu = menubar.addMenu('퍼센티 설정')
|
|
percenty_action = QAction('퍼센티 설정', self)
|
|
percenty_action.triggered.connect(self.show_percenty_settings)
|
|
percenty_menu.addAction(percenty_action)
|
|
|
|
# 사업자 설정 메뉴
|
|
business_menu = menubar.addMenu('사업자 설정')
|
|
business_action = QAction('사업자 설정', self)
|
|
business_action.triggered.connect(self.show_business_settings)
|
|
business_menu.addAction(business_action)
|
|
|
|
def create_main_layout(self):
|
|
layout = QVBoxLayout()
|
|
|
|
# self.top_frame = QFrame(self)
|
|
# self.top_frame.setFrameShape(QFrame.StyledPanel)
|
|
# self.top_frame.setFrameShadow(QFrame.Raised)
|
|
# self.top_layout = QHBoxLayout(self.top_frame)
|
|
|
|
# self.middle_frame = QFrame(self)
|
|
# self.middle_frame.setFrameShape(QFrame.StyledPanel)
|
|
# self.middle_frame.setFrameShadow(QFrame.Raised)
|
|
# self.middle_layout = QHBoxLayout(self.middle_frame)
|
|
|
|
# self.bottom_frame = QFrame(self)
|
|
# self.bottom_frame.setFrameShape(QFrame.StyledPanel)
|
|
# self.bottom_frame.setFrameShadow(QFrame.Raised)
|
|
# self.bottom_layout = QVBoxLayout(self.bottom_frame)
|
|
|
|
|
|
top_layout = QHBoxLayout()
|
|
middle_layout = QVBoxLayout()
|
|
bottom_layout = QVBoxLayout()
|
|
|
|
# 상단 레이아웃
|
|
self.create_top_layout(top_layout)
|
|
|
|
# 중단 레이아웃
|
|
self.create_middle_layout(middle_layout)
|
|
|
|
# 하단 레이아웃
|
|
self.create_bottom_layout(bottom_layout)
|
|
|
|
# QFrame으로 감싸고 테두리 설정
|
|
top_frame = QFrame()
|
|
top_frame.setLayout(top_layout)
|
|
top_frame.setFrameShape(QFrame.Box)
|
|
top_frame.setFrameShadow(QFrame.Raised)
|
|
|
|
middle_frame = QFrame()
|
|
middle_frame.setLayout(middle_layout)
|
|
middle_frame.setFrameShape(QFrame.Box)
|
|
middle_frame.setFrameShadow(QFrame.Raised)
|
|
|
|
bottom_frame = QFrame()
|
|
bottom_frame.setLayout(bottom_layout)
|
|
bottom_frame.setFrameShape(QFrame.Box)
|
|
bottom_frame.setFrameShadow(QFrame.Raised)
|
|
|
|
layout.addWidget(top_frame, 10)
|
|
layout.addWidget(middle_frame, 60)
|
|
layout.addWidget(bottom_frame, 30)
|
|
|
|
return layout
|
|
|
|
|
|
def create_top_layout(self, layout):
|
|
self.fetch_button = QPushButton('현재설정 가져오기')
|
|
self.fetch_button.setMinimumSize(150,50)
|
|
self.fetch_button.clicked.connect(lambda: asyncio.ensure_future(self.fetch_settings()))
|
|
layout.addWidget(self.fetch_button)
|
|
|
|
self.save_button = QPushButton('현재설정 저장하기')
|
|
self.save_button.setMinimumSize(150,50)
|
|
self.save_button.clicked.connect(lambda: asyncio.ensure_future(self.save_settings()))
|
|
layout.addWidget(self.save_button)
|
|
|
|
def create_middle_layout(self, layout):
|
|
# currentStatusLayout 추가
|
|
current_status_layout = QVBoxLayout()
|
|
|
|
# 첫 번째 박스 (사업자 현황)
|
|
self.business_info_box = QGridLayout()
|
|
self.business_info_label = QLabel('현재 사업자 정보(별칭)')
|
|
self.business_info_label_context = QLineEdit('------')
|
|
self.business_register_number_label = QLabel('사업자등록번호')
|
|
self.business_register_number_label_context = QLineEdit('------')
|
|
self.business_name_label = QLabel('상호명')
|
|
self.business_name_label_context = QLineEdit('------')
|
|
self.business_date_label = QLabel('등록날짜')
|
|
self.business_date_label_context = QLineEdit('------')
|
|
self.business_call_label = QLabel('전화번호')
|
|
self.business_call_label_context = QLineEdit('------')
|
|
self.business_info_box.addWidget(self.business_info_label,1,1,1,2)
|
|
self.business_info_box.addWidget(self.business_info_label_context,1,3,1,2)
|
|
self.business_info_box.addWidget(self.business_register_number_label,2,1)
|
|
self.business_info_box.addWidget(self.business_register_number_label_context,3,1)
|
|
self.business_info_box.addWidget(self.business_name_label,2,2)
|
|
self.business_info_box.addWidget(self.business_name_label_context,3,2)
|
|
self.business_info_box.addWidget(self.business_date_label,2,3)
|
|
self.business_info_box.addWidget(self.business_date_label_context,3,3)
|
|
self.business_info_box.addWidget(self.business_call_label,2,4)
|
|
self.business_info_box.addWidget(self.business_call_label_context,3,4)
|
|
self.business_info_box.setContentsMargins(10,10,10,10)
|
|
self.business_info_box.setSpacing(10)
|
|
|
|
|
|
business_frame = QFrame()
|
|
business_frame.setLayout(self.business_info_box)
|
|
self.business_call_label.setStyleSheet
|
|
business_frame.setFrameShape(QFrame.Box)
|
|
# business_frame.setFrameShadow(QFrame.Plain)
|
|
# business_frame.setStyleSheet("border: 1px dashed black;")
|
|
|
|
current_status_layout.addWidget(business_frame, 30)
|
|
|
|
# 두 번째 박스 (마켓 현황)
|
|
self.market_info_box = QGridLayout()
|
|
|
|
self.market_info_label = QLabel('마켓 정보')
|
|
self.market_info_cc_btn = QPushButton('쿠팡')
|
|
self.market_info_cc_label = QLabel('------')
|
|
self.market_info_ss_btn = QPushButton('스스')
|
|
self.market_info_ss_label = QLabel('------')
|
|
self.market_info_dm11_btn = QPushButton('11국내')
|
|
self.market_info_dm11_label = QLabel('------')
|
|
self.market_info_gb11_btn = QPushButton('11해외')
|
|
self.market_info_gb11_label = QLabel('------')
|
|
self.market_info_esm_btn = QPushButton('ESM')
|
|
self.market_info_esm_label = QLabel('------')
|
|
self.market_info_lton_btn = QPushButton('롯데온')
|
|
self.market_info_lton_label = QLabel('------')
|
|
self.market_info_ip_btn = QPushButton('인터파크')
|
|
self.market_info_ip_label = QLabel('------')
|
|
self.market_info_wmp_btn = QPushButton('위메프')
|
|
self.market_info_wmp_label = QLabel('------')
|
|
self.market_info_at_btn = QPushButton('옥션1.0')
|
|
self.market_info_at_label = QLabel('------')
|
|
|
|
# self.market_info_cc_btn.clicked.connect(self.market_info_cc_btn_clicked)
|
|
# self.market_info_ss_btn.clicked.connect(self.market_info_cc_btn_clicked)
|
|
# self.market_info_dm11_btn.clicked.connect(self.market_info_cc_btn_clicked)
|
|
# self.market_info_gb11_btn.clicked.connect(self.market_info_cc_btn_clicked)
|
|
# self.market_info_esm_btn.clicked.connect(self.market_info_cc_btn_clicked)
|
|
# self.market_info_lton_btn.clicked.connect(self.market_info_cc_btn_clicked)
|
|
# self.market_info_ip_btn.clicked.connect(self.market_info_cc_btn_clicked)
|
|
# self.market_info_wmp_btn.clicked.connect(self.market_info_cc_btn_clicked)
|
|
# self.market_info_at_btn.clicked.connect(self.market_info_cc_btn_clicked)
|
|
|
|
# def market_info_cc_btn_clicked(self)
|
|
# pass
|
|
|
|
self.market_info_box.addWidget(self.market_info_label,1,1,1,2)
|
|
self.market_info_box.addWidget(self.market_info_cc_btn,2,1)
|
|
self.market_info_box.addWidget(self.market_info_cc_label,2,2)
|
|
self.market_info_box.addWidget(self.market_info_ss_btn,2,3)
|
|
self.market_info_box.addWidget(self.market_info_ss_label,2,4)
|
|
self.market_info_box.addWidget(self.market_info_dm11_btn,3,1)
|
|
self.market_info_box.addWidget(self.market_info_dm11_label,3,2)
|
|
self.market_info_box.addWidget(self.market_info_gb11_btn,3,3)
|
|
self.market_info_box.addWidget(self.market_info_gb11_label,3,4)
|
|
self.market_info_box.addWidget(self.market_info_esm_btn,4,1)
|
|
self.market_info_box.addWidget(self.market_info_esm_label,4,2)
|
|
self.market_info_box.addWidget(self.market_info_lton_btn,4,3)
|
|
self.market_info_box.addWidget(self.market_info_lton_label,4,4)
|
|
self.market_info_box.addWidget(self.market_info_ip_btn,5,1)
|
|
self.market_info_box.addWidget(self.market_info_ip_label,5,2)
|
|
self.market_info_box.addWidget(self.market_info_wmp_btn,5,3)
|
|
self.market_info_box.addWidget(self.market_info_wmp_label,5,4)
|
|
self.market_info_box.addWidget(self.market_info_at_btn,6,1)
|
|
self.market_info_box.addWidget(self.market_info_at_label,6,2)
|
|
|
|
market_frame = QFrame()
|
|
market_frame.setLayout(self.market_info_box)
|
|
market_frame.setFrameShape(QFrame.Box)
|
|
|
|
current_status_layout.addWidget(market_frame, 40)
|
|
|
|
# 세 번째 박스 (비어 있음)
|
|
self.empty_box = QVBoxLayout()
|
|
|
|
empty_frame = QFrame()
|
|
empty_frame.setLayout(self.empty_box)
|
|
empty_frame.setFrameShape(QFrame.Box)
|
|
empty_frame.setFrameShadow(QFrame.Plain)
|
|
empty_frame.setStyleSheet("border: 1px dashed black;")
|
|
|
|
current_status_layout.addWidget(empty_frame, 30)
|
|
|
|
layout.addLayout(current_status_layout)
|
|
|
|
def create_bottom_layout(self, layout):
|
|
self.business_dropdown = QComboBox()
|
|
layout.addWidget(self.business_dropdown)
|
|
|
|
self.market_checkbox_layout = QGridLayout()
|
|
layout.addLayout(self.market_checkbox_layout)
|
|
|
|
# 체크박스만 추가
|
|
self.all_checkbox = QCheckBox("전체 체크")
|
|
self.cp_checkbox = QCheckBox("쿠팡")
|
|
self.ss_checkbox = QCheckBox("스스")
|
|
self.st11_dm_checkbox = QCheckBox("11번가-국내")
|
|
self.st11_gb_checkbox = QCheckBox("11번가-해외")
|
|
self.esm_checkbox = QCheckBox("ESM")
|
|
self.lton_checkbox = QCheckBox("롯데온")
|
|
self.ip_checkbox = QCheckBox("인터파크")
|
|
self.wmp_checkbox = QCheckBox("위메프")
|
|
self.at_checkbox = QCheckBox("옥션1.0")
|
|
self.all_checkbox.stateChanged.connect(self.handle_all_checked)
|
|
self.market_checkbox_layout.addWidget(self.all_checkbox,1,1)
|
|
self.market_checkbox_layout.addWidget(self.cp_checkbox,2,1)
|
|
self.market_checkbox_layout.addWidget(self.ss_checkbox,2,2)
|
|
self.market_checkbox_layout.addWidget(self.st11_dm_checkbox,2,3)
|
|
self.market_checkbox_layout.addWidget(self.st11_gb_checkbox,3,1)
|
|
self.market_checkbox_layout.addWidget(self.esm_checkbox,3,2)
|
|
self.market_checkbox_layout.addWidget(self.lton_checkbox,3,3)
|
|
self.market_checkbox_layout.addWidget(self.ip_checkbox,4,1)
|
|
self.market_checkbox_layout.addWidget(self.wmp_checkbox,4,2)
|
|
self.market_checkbox_layout.addWidget(self.at_checkbox,4,3)
|
|
|
|
self.change_business_button = QPushButton('사업자 바꾸기')
|
|
self.change_business_button.clicked.connect(lambda: asyncio.ensure_future(self.change_business()))
|
|
layout.addWidget(self.change_business_button)
|
|
|
|
self.progress_bar = QProgressBar(self)
|
|
self.progress_bar.setAlignment(Qt.AlignCenter)
|
|
layout.addWidget(self.progress_bar)
|
|
|
|
|
|
def handle_all_checked(self, state):
|
|
if state == Qt.Checked:
|
|
self.cp_checkbox.setChecked(True)
|
|
self.ss_checkbox.setChecked(True)
|
|
self.st11_dm_checkbox.setChecked(True)
|
|
self.st11_gb_checkbox.setChecked(True)
|
|
self.esm_checkbox.setChecked(True)
|
|
self.lton_checkbox.setChecked(True)
|
|
self.ip_checkbox.setChecked(True)
|
|
self.wmp_checkbox.setChecked(True)
|
|
self.at_checkbox.setChecked(True)
|
|
|
|
elif state == Qt.Unchecked:
|
|
self.cp_checkbox.setChecked(False)
|
|
self.ss_checkbox.setChecked(False)
|
|
self.st11_dm_checkbox.setChecked(False)
|
|
self.st11_gb_checkbox.setChecked(False)
|
|
self.esm_checkbox.setChecked(False)
|
|
self.lton_checkbox.setChecked(False)
|
|
self.ip_checkbox.setChecked(False)
|
|
self.wmp_checkbox.setChecked(False)
|
|
self.at_checkbox.setChecked(False)
|
|
|
|
async def fetch_settings(self):
|
|
self.logger.debug("Fetching settings...")
|
|
self.status_label.setText('현재 상태: 설정 가져오는 중...')
|
|
self.progress_bar.setValue(0)
|
|
|
|
await self.playwright_helper.init_browser()
|
|
self.progress_bar.setValue(5)
|
|
user_id = self.config.get('USER', 'user_id')
|
|
password = self.config.decrypt(self.config.get('USER', 'password'))
|
|
|
|
api_keys = await self.playwright_helper.login_and_fetch_api_keys('https://percenty.co.kr', user_id, password, self.status_label, self.progress_bar)
|
|
print(f"가져온 apikeys\n{api_keys}")
|
|
|
|
business_info = self.search_apikeys(api_keys)
|
|
|
|
# 가져온 API 키를 UI에 업데이트하는 로직 추가
|
|
self.update_market_info(api_keys, business_info)
|
|
self.progress_bar.setValue(100)
|
|
self.status_label.setText('현재 상태: 설정 가져오기 완료')
|
|
await self.playwright_helper.close_browser()
|
|
|
|
def search_apikeys(self, api_keys):
|
|
self.status_label.setText('현재 상태: 키 검증하기')
|
|
|
|
business_info = {
|
|
'사업자별칭': '설정사업자없음',
|
|
'사업자등록번호': '000-00-00000',
|
|
'상호명': '설정사업자없음',
|
|
'등록날짜': '0000-00-00',
|
|
'응대전화번호': '000-000-0000'
|
|
}
|
|
|
|
# max_business = int(self.config.get('DEFAULT', 'max_businesses'))
|
|
|
|
all = self.config.get_all_businesses()
|
|
print(f"사업자 수 : {len(all)}")
|
|
print(f"all : {all}")
|
|
|
|
progress_step = 15 / len(all)
|
|
|
|
print(f"progress_step : {progress_step}")
|
|
|
|
try:
|
|
# 저장된 모든 사업자 정보 가져오기
|
|
|
|
for business_section in all:
|
|
print(f"키검증 business_section : {business_section}")
|
|
stored_api_keys = self.config.get_api_keys(business_section)
|
|
print(f"키검증 stored_api_keys : {stored_api_keys}")
|
|
if stored_api_keys and stored_api_keys == api_keys:
|
|
print("stored_api_keys 존재함")
|
|
business_info = self.config.get_business_info(business_section)
|
|
print(f"business_info : {business_info}")
|
|
break
|
|
else:
|
|
print("else")
|
|
|
|
print("progress_bar")
|
|
self.progress_bar.setValue(80 + int(progress_step))
|
|
self.status_label.setText(f'현재 상태: {business_section} 사업자 가져오기 완료')
|
|
except Exception as e:
|
|
print(f"{e}")
|
|
|
|
print(f"business_info{business_info}")
|
|
return business_info
|
|
|
|
|
|
def update_market_info(self, api_keys, business_info):
|
|
print(f"update_market_info : {api_keys}, {business_info}")
|
|
|
|
# 사업자 정보 업데이트
|
|
self.business_info_label_context.setText(business_info['사업자별칭'])
|
|
self.business_register_number_label_context.setText(business_info['사업자등록번호'])
|
|
self.business_name_label_context.setText(business_info['상호명'])
|
|
self.business_date_label_context.setText(business_info['등록날짜'])
|
|
self.business_call_label_context.setText(business_info['응대전화번호'])
|
|
|
|
# 마켓 정보 업데이트
|
|
market_buttons = [
|
|
(self.market_info_cc_btn, '쿠팡', self.market_info_cc_label),
|
|
(self.market_info_ss_btn, '스스', self.market_info_ss_label),
|
|
(self.market_info_dm11_btn, '11번가-국내', self.market_info_dm11_label),
|
|
(self.market_info_gb11_btn, '11번가-해외', self.market_info_gb11_label),
|
|
(self.market_info_esm_btn, 'ESM', self.market_info_esm_label),
|
|
(self.market_info_lton_btn, '롯데온', self.market_info_lton_label),
|
|
(self.market_info_ip_btn, '인터파크', self.market_info_ip_label),
|
|
(self.market_info_wmp_btn, '위메프', self.market_info_wmp_label),
|
|
(self.market_info_at_btn, '옥션1.0', self.market_info_at_label),
|
|
]
|
|
|
|
for button, market, label in market_buttons:
|
|
market_info = api_keys.get(market, None)
|
|
if market_info:
|
|
button.setStyleSheet("background-color: lightgreen;")
|
|
label.setText(business_info['사업자별칭'])
|
|
else:
|
|
button.setStyleSheet("background-color: darkgray;")
|
|
label.setText("NoMatch")
|
|
|
|
async def save_settings(self):
|
|
self.logger.debug("Saving settings...")
|
|
self.status_label.setText('현재 상태: 설정 저장하는 중...')
|
|
self.progress_bar.setValue(0)
|
|
|
|
# 현재 QLineEdit 값들을 가져와서 사업자 정보 업데이트
|
|
business_info = {
|
|
'사업자별칭': self.business_info_label_context.text(),
|
|
'사업자등록번호': self.business_register_number_label_context.text(),
|
|
'상호명': self.business_name_label_context.text(),
|
|
'등록날짜': self.business_date_label_context.text(),
|
|
'응대전화번호': self.business_call_label_context.text()
|
|
}
|
|
|
|
self.config.set_business_info(1, business_info)
|
|
|
|
# 예시 API 키 설정
|
|
api_keys = {
|
|
'쿠팡': {
|
|
'쿠팡ID': 'example_coupang_id',
|
|
'업체 코드': 'example_company_code',
|
|
'Access Key': 'example_access_key',
|
|
'Secret Key': 'example_secret_key'
|
|
},
|
|
'스마트스토어': {
|
|
'애플리케이션 ID': 'example_application_id',
|
|
'애플리케이션 시크릿': 'example_application_secret'
|
|
},
|
|
'옥션지마켓': {
|
|
'옥션ID': 'example_auction_id',
|
|
'G마켓 ID': 'example_gmarket_id'
|
|
},
|
|
'11번가-일반': {
|
|
'API KEY': 'example_11st_api_key'
|
|
},
|
|
'11번가-글로벌': {
|
|
'API KEY': 'example_11st_global_api_key'
|
|
},
|
|
'롯데온': {
|
|
'API KEY': 'example_lotteon_api_key'
|
|
},
|
|
}
|
|
|
|
self.config.set_api_keys(1, api_keys)
|
|
|
|
self.progress_bar.setValue(100)
|
|
self.status_label.setText('현재 상태: 설정 저장 완료')
|
|
await self.playwright_helper.close_browser()
|
|
|
|
async def change_business(self):
|
|
self.logger.debug("Changing business...")
|
|
self.status_label.setText('현재 상태: 사업자 변경 중...')
|
|
self.progress_bar.setValue(0)
|
|
|
|
# 사업자 드롭박스에서 선택된 사업자와 마켓 체크박스에서 선택된 마켓 가져오기
|
|
selected_business = self.business_dropdown.currentText()
|
|
selected_markets = [checkbox.text() for checkbox in self.market_checkbox_layout.children() if checkbox.isChecked()]
|
|
|
|
# 선택된 사업자와 마켓에 따라 API 키 변경 작업 수행
|
|
await self.playwright_helper.init_browser()
|
|
user_id = self.config.get('USER', 'user_id')
|
|
password = self.config.decrypt(self.config.get('USER', 'password'))
|
|
api_keys = {} # 여기에 새로운 API 키를 설정하는 로직 추가
|
|
|
|
await self.playwright_helper.update_api_keys('https://percenty.co.kr', user_id, password, api_keys, self.status_label, self.progress_bar)
|
|
|
|
self.progress_bar.setValue(100)
|
|
self.status_label.setText('현재 상태: 사업자 변경 완료')
|
|
await self.playwright_helper.close_browser()
|
|
|
|
# 작업 완료 창 띄우기
|
|
self.show_completion_dialog()
|
|
|
|
def show_completion_dialog(self):
|
|
dialog = QDialog(self)
|
|
dialog.setWindowTitle('작업 완료')
|
|
|
|
layout = QVBoxLayout()
|
|
completion_label = QLabel('사업자 변경 작업이 완료되었습니다.')
|
|
layout.addWidget(completion_label)
|
|
|
|
browser_button = QPushButton('브라우저 실행')
|
|
browser_button.clicked.connect(lambda: asyncio.ensure_future(self.run_browser()))
|
|
layout.addWidget(browser_button)
|
|
|
|
close_button = QPushButton('확인')
|
|
close_button.clicked.connect(dialog.accept)
|
|
layout.addWidget(close_button)
|
|
|
|
dialog.setLayout(layout)
|
|
dialog.exec_()
|
|
|
|
async def run_browser(self):
|
|
await self.playwright_helper.init_browser(headless=False)
|
|
user_id = self.config.get('USER', 'user_id')
|
|
password = self.config.decrypt(self.config.get('USER', 'password'))
|
|
await self.playwright_helper.login_and_fetch_api_keys('https://percenty.co.kr', user_id, password)
|
|
|
|
def show_help(self):
|
|
dialog = HelpDialog()
|
|
dialog.exec_()
|
|
|
|
def show_percenty_settings(self):
|
|
dialog = PercentySettingsDialog(self.config)
|
|
dialog.exec_()
|
|
|
|
def show_business_settings(self):
|
|
dialog = BusinessSettingsDialog(self.config)
|
|
dialog.exec_()
|