from PySide6.QtWidgets import QWidget, QVBoxLayout, QPushButton, QTextEdit, QLabel from pypos.core.base_view import BaseView # upgraded: inherit base class class SinkronPenjualanView(BaseView, QWidget): def __init__(self, controller=None): super().__init__() self.setWindowTitle("Sinkronisasi Data (API)") self.layout = QVBoxLayout() self.info_label = QLabel("Klik untuk mulai sinkronisasi data master via API.") self.output_text = QTextEdit() self.output_text.setReadOnly(True) self.sync_button = QPushButton("Mulai Sinkronisasi") self.sync_button.setStyleSheet(""" QPushButton { background-color: #28a745; /* hijau terang */ color: white; font-weight: bold; padding: 8px 20px; border-radius: 10px; } QPushButton:hover { background-color: #218838; /* hijau gelap saat hover */ } """) self.layout.addWidget(self.info_label) self.layout.addWidget(self.sync_button) self.layout.addWidget(self.output_text) self.setLayout(self.layout) self.controller = None self.set_controller(controller) self.sync_button.clicked.connect(self.mulai_sinkronisasi) def set_controller(self, controller): if self.controller is not None: try: self.controller.progress.disconnect(self.update_log) except Exception: pass try: self.controller.selesai.disconnect(self.sinkron_selesai) except Exception: pass self.controller = controller if self.controller is None: self.sync_button.setEnabled(False) return self.sync_button.setEnabled(True) self.controller.progress.connect(self.update_log) self.controller.selesai.connect(self.sinkron_selesai) def mulai_sinkronisasi(self): if self.controller is None: self.update_log("Controller sinkronisasi belum tersedia.") return self.output_text.clear() self.sync_button.setEnabled(False) self.controller.mulai_sinkron() def update_log(self, text): self.output_text.append(text) def sinkron_selesai(self, text): self.output_text.append("\n" + text) self.sync_button.setEnabled(True)