class CExportDialog(QtGui.QDialog): InitState = 0 ExportState = 1 SaveState = 2 def __init__(self, db, parent=None): QtGui.QDialog.__init__(self, parent) self.db = db self.pi = CProgressInformer( processEventsFlag=QtCore.QEventLoop.AllEvents) self.currentState = self.InitState self.setupUi() self.engine = CExportR23AttachClientMIACEngine( self.db, self.cmbOrgStructure.value(), self.edtDate.date(), progressInformer=self.pi) self.loggerHandler = CLogHandler(self.engine.getLogger(), self) self.btnMiac.setChecked(True) self.onStateChange() def onStateChange(self): self.btnNextAction.setText( self.actionNames.get(self.currentState, u'<Error>')) self.btnClose.setEnabled(self.currentState != self.ExportState) self.grInit.setEnabled(self.currentState == self.InitState) self.grExport.setEnabled(self.currentState == self.ExportState) self.grSave.setEnabled(self.currentState == self.SaveState) self.btnSave.setEnabled(bool(self.engine.documents)) QtCore.QCoreApplication.processEvents() def setupUi(self): layout = QtGui.QVBoxLayout() self.grInit = QtGui.QGroupBox() grLayout = QtGui.QVBoxLayout() orgStructureLayout = QtGui.QHBoxLayout() self.lblOrgStructure = QtGui.QLabel() orgStructureLayout.addWidget(self.lblOrgStructure) self.cmbOrgStructure = COrgStructureComboBox(None) orgStructureLayout.addWidget(self.cmbOrgStructure) grLayout.addLayout(orgStructureLayout) dateLayout = QtGui.QHBoxLayout() self.lblDate = QtGui.QLabel() dateLayout.addWidget(self.lblDate) self.edtDate = CDateEdit() dateLayout.addWidget(self.edtDate) grLayout.addLayout(dateLayout) modeExportLayout = QtGui.QHBoxLayout() self.btnMiac = QtGui.QRadioButton() modeExportLayout.addWidget(self.btnMiac) self.btnSMO = QtGui.QRadioButton() modeExportLayout.addWidget(self.btnSMO) grLayout.addLayout(modeExportLayout) self.grInit.setLayout(grLayout) layout.addWidget(self.grInit) self.grExport = QtGui.QGroupBox() grLayout = QtGui.QVBoxLayout() self.progressBar = CProgressBar() self.progressBar.setAlignment(QtCore.Qt.AlignCenter) self.progressBar.setRange(0, 0) self.progressBar.setProgressFormat(u'(%v/%m)') self.pi.progressChanged.connect(self.progressBar.setProgress) grLayout.addWidget(self.progressBar) self.grExport.setLayout(grLayout) layout.addWidget(self.grExport) self.grSave = QtGui.QGroupBox() grLayout = QtGui.QVBoxLayout() lineLayout = QtGui.QHBoxLayout() self.edtSaveDir = QtGui.QLineEdit(QtCore.QDir.homePath()) self.edtSaveDir.setReadOnly(True) lineLayout.addWidget(self.edtSaveDir) self.btnBrowseDir = QtGui.QToolButton() self.btnBrowseDir.clicked.connect(self.onBrowseDir) lineLayout.addWidget(self.btnBrowseDir) grLayout.addLayout(lineLayout) lineLayout = QtGui.QHBoxLayout() self.btnSave = QtGui.QPushButton() self.btnSave.clicked.connect(self.onSaveClicked) lineLayout.addWidget(self.btnSave) grLayout.addLayout(lineLayout) self.grSave.setLayout(grLayout) layout.addWidget(self.grSave) self.logInfo = QtGui.QTextEdit() layout.addWidget(self.logInfo) # self.loggerHandler.logged.connect(self.logInfo.append) subLayout = QtGui.QHBoxLayout() self.btnNextAction = QtGui.QPushButton() self.btnNextAction.clicked.connect(self.onNextActionClicked) subLayout.addStretch() subLayout.addWidget(self.btnNextAction) self.btnClose = QtGui.QPushButton() self.btnClose.clicked.connect(self.onCloseClicked) subLayout.addWidget(self.btnClose) layout.addLayout(subLayout) self.setLayout(layout) self.setMinimumWidth(512) self.retranselateUi() def retranselateUi(self): context = unicode(getClassName(self)) self.setWindowTitle( forceTr(u'Экспорт прикрипленного населения. Краснодарский край', context)) self.grInit.setTitle(forceTr(u'Параметры экспорта', context)) self.lblOrgStructure.setText(forceTr(u'Подразделение', context)) self.btnMiac.setText(forceTr(u'Экспорт МИАЦ', context)) self.btnSMO.setText(forceTr(u'Экспорт СМО', context)) self.lblDate.setText(forceTr(u'Отчетная дата', context)) self.grExport.setTitle(forceTr(u'Экспотр', context)) self.grSave.setTitle(forceTr(u'Сохранение результата', context)) self.btnSave.setText(forceTr(u'Сохранить', context)) self.actionNames = { self.InitState: forceTr(u'Экспорт', context), self.ExportState: forceTr(u'Прервать', context), self.SaveState: forceTr(u'Повторить', context) } self.btnClose.setText(forceTr(u'Закрыть', context)) @QtCore.pyqtSlot() def onNextActionClicked(self): if self.currentState == self.InitState: self.currentState = self.ExportState try: result = self.engine.process() except: self.currentState = self.InitState raise self.currentState = self.SaveState if result else self.InitState elif self.currentState == self.ExportState: self.engine.terminate() elif self.currentState == self.SaveState: self.currentState = self.InitState self.onStateChange() def canClose(self): return not ((self.engine.documents) or QtGui.QMessageBox.warning( self, u'Внимание!', u'Остались несохраненные файлы выгрузок\n' u'которые будут утеряны.\n' u'Вы уверены, что хотите покинуть менеджер экспорта?\n', QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) == QtGui.QMessageBox.Yes) def closeEvent(self, event): if self.canClose(): event.accept() else: event.ignore() def done(self, result): if self.canClose(): super(CExportDialog, self).done(result) @QtCore.pyqtSlot() def onCloseClicked(self): self.accept() @QtCore.pyqtSlot() def onBrowseDir(self): saveDir = forceStringEx( QtGui.QFileDialog.getExistingDirectory( self, u'Укажите директорию для сохранения файлов выгрузки', self.edtSaveDir.text())) if os.path.isdir(saveDir): self.edtSaveDir.setText(saveDir) @QtCore.pyqtSlot() def onSaveClicked(self): self.btnClose.setEnabled(False) self.engine.save(self.edtSaveDir.text()) self.onStateChange() @QtCore.pyqtSlot(bool) def on_btnMiac_toggled(self, checked): if not checked: self.engine = CExportR23AttachClientSMOEngine( self.db, self.cmbOrgStructure.value(), self.edtDate.date(), progressInformer=self.pi) self.loggerHandler = CLogHandler(self.engine.logger(), self) else: self.engine = CExportR23AttachClientMIACEngine( self.db, self.cmbOrgStructure.value(), self.edtDate.date(), progressInformer=self.pi) self.loggerHandler = CLogHandler(self.engine.logger(), self)
class CReportAttachingMotionSetup(QtGui.QDialog): def __init__(self, parent, report): QtGui.QDialog.__init__(self, parent) self.gridLayout = QtGui.QGridLayout(self) self.lblBegDate = QtGui.QLabel(u'От', self) self.edtBegDate = CDateEdit(self) self.gridLayout.addWidget(self.lblBegDate, 0, 0) self.gridLayout.addWidget(self.edtBegDate, 0, 1) self.lblEndDate = QtGui.QLabel(u'по', self) self.edtEndDate = CDateEdit(self) self.gridLayout.addWidget(self.lblEndDate, 1, 0) self.gridLayout.addWidget(self.edtEndDate, 1, 1) self.lblAttacheTypeTemporary = QtGui.QLabel(u'Тип прикрепления', self) self.cmbAttacheTypeTemporary = QtGui.QComboBox(self) self.cmbAttacheTypeTemporary.addItem(u'Не учитывать') self.cmbAttacheTypeTemporary.addItem(u'Постоянное') self.cmbAttacheTypeTemporary.addItem(u'Временное') self.gridLayout.addWidget(self.lblAttacheTypeTemporary, 2, 0) self.gridLayout.addWidget(self.cmbAttacheTypeTemporary, 2, 1) self.lblPolicyType = QtGui.QLabel(u'Тип полиса', self) self.cmbPolicyType = QtGui.QComboBox(self) self.cmbPolicyType.addItem(u'Не учитывать') self.cmbPolicyType.addItem(u'ОМС') self.cmbPolicyType.addItem(u'ДМС') self.gridLayout.addWidget(self.lblPolicyType, 3, 0) self.gridLayout.addWidget(self.cmbPolicyType, 3, 1) self.lblOrgStructure = QtGui.QLabel(u'Подразделение') self.cmbOrgStructure = COrgStructureComboBox(self) self.gridLayout.addWidget(self.lblOrgStructure, 4, 0) self.gridLayout.addWidget(self.cmbOrgStructure, 4, 1) self.buttonBox = QtGui.QDialogButtonBox(self) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Ok) self.gridLayout.addWidget(self.buttonBox, 5, 1) self.connect(self.buttonBox, QtCore.SIGNAL('accepted()'), self.accept) self.connect(self.buttonBox, QtCore.SIGNAL('rejected()'), self.reject) def setTitle(self, title): self.setWindowTitle(title) def setParams(self, params): self.edtBegDate.setDate( params.get('begDate', QtCore.QDate.currentDate())) self.edtEndDate.setDate( params.get('endDate', QtCore.QDate.currentDate())) self.cmbAttacheTypeTemporary.setCurrentIndex( params.get('attacheTypeTemporary', 0)) self.cmbPolicyType.setCurrentIndex(params.get('policyType', 0)) self.cmbOrgStructure.setOrgId(QtGui.qApp.currentOrgId()) self.cmbOrgStructure.setValue(QtGui.qApp.currentOrgStructureId()) def params(self): params = {} params['begDate'] = self.edtBegDate.date() params['endDate'] = self.edtEndDate.date() params[ 'attacheTypeTemporary'] = self.cmbAttacheTypeTemporary.currentIndex( ) params[ 'attacheTypeTemporaryText'] = self.cmbAttacheTypeTemporary.currentText( ) params['policyType'] = self.cmbPolicyType.currentIndex() params['policyTypeText'] = self.cmbPolicyType.currentText() params['orgStructureId'] = self.cmbOrgStructure.value() return params