Example #1
0
class CImportDialog(QtGui.QDialog):
    InitState = 0
    ImportState = 1

    def __init__(self, db, parent = None):
        super(CImportDialog, self).__init__(parent = parent)
        self._db = db
        self._pi = CProgressInformer(processEventsFlag=QtCore.QEventLoop.AllEvents)
        self._engine = CImportR85ERZCentralEngine(db, progressInformer=self._pi)
        self._engine.setUserConfirmationFunction(self.userConfirmation)
        self._loggerHandler = CLogHandler(self._engine.logger(), self)
        self._loggerHandler.setLevel(logging.INFO)
        self._currentState = self.InitState

        self.setupUi()

        self.onStateChanged()


    def setParams(self, params):
        if isinstance(params, dict):
            reqFileName = forceStringEx(getPref(params, 'reqFile', u''))
            if os.path.isfile(reqFileName ):
                self.edtReqFileName.setText(reqFileName )
            respFileName = forceStringEx(getPref(params, 'respFile', u''))
            if os.path.isfile(respFileName):
                self.edtRespFileName.setText(respFileName)


    def engine(self):
        return self._engine


    def params(self):
        params = {}
        setPref(params, 'reqFile', forceStringEx(self.edtReqFileName.text()))
        setPref(params, 'respFile', forceStringEx(self.edtRespFileName.text()))
        return params


    @property
    def currentState(self):
        return self._currentState


    @currentState.setter
    def currentState(self, value):
        if value in [self.InitState, self.ImportState]:
            self._currentState = value
            self.onStateChanged()


    def onStateChanged(self):
        self.btnNextAction.setText(self._actionNames.get(self.currentState, u'<Error>'))
        self.btnClose.setEnabled(self.currentState != self.ImportState)
        self.gbInit.setEnabled(self.currentState == self.InitState)
        self.gbImport.setEnabled(self.currentState == self.ImportState)
        # self.btnSave.setEnabled(bool(self._engine.documents))
        QtCore.QCoreApplication.processEvents()


    # noinspection PyAttributeOutsideInit,PyUnresolvedReferences
    def setupUi(self):
        layout = QtGui.QVBoxLayout()
        # init block
        self.gbInit = QtGui.QGroupBox()
        gbLayout = QtGui.QVBoxLayout()
        lineLayout = QtGui.QHBoxLayout()
        self.edtReqFileName = QtGui.QLineEdit()
        self.edtReqFileName.setReadOnly(True)
        lineLayout.addWidget(self.edtReqFileName)
        self.btnBrowseReqFile = QtGui.QToolButton()
        self.btnBrowseReqFile.clicked.connect(self.onBrowseReqFileClicked)
        lineLayout.addWidget(self.btnBrowseReqFile)
        gbLayout.addLayout(lineLayout)
        lineLayout = QtGui.QHBoxLayout()
        self.edtRespFileName = QtGui.QLineEdit()
        self.edtRespFileName.setReadOnly(True)
        lineLayout.addWidget(self.edtRespFileName)
        self.btnBrowseRespFile = QtGui.QToolButton()
        self.btnBrowseRespFile.clicked.connect(self.onBrowseRespFileClicked)
        lineLayout.addWidget(self.btnBrowseRespFile)
        gbLayout.addLayout(lineLayout)
        self.gbInit.setLayout(gbLayout)
        layout.addWidget(self.gbInit)

        # import block
        self.gbImport = QtGui.QGroupBox()
        gbLayout = 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)
        gbLayout.addWidget(self.progressBar)
        self.gbImport.setLayout(gbLayout)
        layout.addWidget(self.gbImport)

        # log block
        self.logInfo = QtGui.QTextEdit()
        layout.addWidget(self.logInfo)
        self._loggerHandler.logged.connect(self.logInfo.append)

        # buttons block
        subLayout = QtGui.QHBoxLayout()
        self.btnNextAction = QtGui.QPushButton()
        # noinspection PyUnresolvedReferences
        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.retranslateUi()


    # noinspection PyAttributeOutsideInit
    def retranslateUi(self):
        context = unicode(getClassName(self))
        self.setWindowTitle(forceTr(u'Импорт. Крым. ЦС ЕРЗ.', context))
        self.gbInit.setTitle(forceTr(u'Параметры импорта', context))

        self.gbImport.setTitle(forceTr(u'Импорт', context))

        self._actionNames = {self.InitState: forceTr(u'Импорт',context),
                             self.ImportState: forceTr(u'Прервать', context)}
        self.btnClose.setText(forceTr(u'Закрыть', context))


    def userConfirmation(self, title, message):
        # noinspection PyTypeChecker,PyCallByClass
        return QtGui.QMessageBox.Yes == QtGui.QMessageBox.question(self,
                                                                   title,
                                                                   message,
                                                                   QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
                                                                   QtGui.QMessageBox.No)



    @QtCore.pyqtSlot()
    def onNextActionClicked(self):
        if self.currentState == self.InitState:
            self.currentState = self.ImportState
            try:
                self._engine.process(forceStringEx(self.edtReqFileName.text()),
                forceStringEx(self.edtRespFileName.text()))
            except Exception, e:
                self.currentState = self.InitState
                raise
            self.currentState = self.InitState

        elif self.currentState == self.ImportState:
            self._engine.abort()
            self.currentState = self.InitState
Example #2
0
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)
Example #3
0
class Ui_ExportToDbfDialog(object):
    def setupUi(self, ExportToDbfDialog):
        ExportToDbfDialog.setObjectName(_fromUtf8("ExportToDbfDialog"))
        ExportToDbfDialog.resize(495, 504)
        self.gridLayout = QtGui.QGridLayout(ExportToDbfDialog)
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        self.pbFiles = CProgressBar(ExportToDbfDialog)
        self.pbFiles.setProperty("value", 0)
        self.pbFiles.setAlignment(QtCore.Qt.AlignCenter)
        self.pbFiles.setTextVisible(True)
        self.pbFiles.setTextDirection(QtGui.QProgressBar.TopToBottom)
        self.pbFiles.setObjectName(_fromUtf8("pbFiles"))
        self.gridLayout.addWidget(self.pbFiles, 0, 1, 1, 1)
        self.tabWidget = QtGui.QTabWidget(ExportToDbfDialog)
        self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
        self.tabParameters = QtGui.QWidget()
        self.tabParameters.setObjectName(_fromUtf8("tabParameters"))
        self.gridLayout_4 = QtGui.QGridLayout(self.tabParameters)
        self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4"))
        self.grpOutFileName = QtGui.QGroupBox(self.tabParameters)
        self.grpOutFileName.setObjectName(_fromUtf8("grpOutFileName"))
        self.horizontalLayout = QtGui.QHBoxLayout(self.grpOutFileName)
        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
        self.edtOutPath = QtGui.QLineEdit(self.grpOutFileName)
        self.edtOutPath.setEnabled(True)
        self.edtOutPath.setReadOnly(True)
        self.edtOutPath.setObjectName(_fromUtf8("edtOutPath"))
        self.horizontalLayout.addWidget(self.edtOutPath)
        self.btnBrowse = QtGui.QPushButton(self.grpOutFileName)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
                                       QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.btnBrowse.sizePolicy().hasHeightForWidth())
        self.btnBrowse.setSizePolicy(sizePolicy)
        self.btnBrowse.setMaximumSize(QtCore.QSize(27, 27))
        self.btnBrowse.setBaseSize(QtCore.QSize(27, 27))
        self.btnBrowse.setObjectName(_fromUtf8("btnBrowse"))
        self.horizontalLayout.addWidget(self.btnBrowse)
        self.chkMakeArchive = QtGui.QCheckBox(self.grpOutFileName)
        self.chkMakeArchive.setObjectName(_fromUtf8("chkMakeArchive"))
        self.horizontalLayout.addWidget(self.chkMakeArchive)
        self.gridLayout_4.addWidget(self.grpOutFileName, 0, 0, 1, 1)
        self.gbExportTemplates = QtGui.QGroupBox(self.tabParameters)
        self.gbExportTemplates.setObjectName(_fromUtf8("gbExportTemplates"))
        self.gridLayout_2 = QtGui.QGridLayout(self.gbExportTemplates)
        self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
        self.rbTemplateIndividual = QtGui.QRadioButton(self.gbExportTemplates)
        self.rbTemplateIndividual.setChecked(True)
        self.rbTemplateIndividual.setObjectName(
            _fromUtf8("rbTemplateIndividual"))
        self.gridLayout_2.addWidget(self.rbTemplateIndividual, 0, 0, 1, 1)
        self.cmbCodec = QtGui.QComboBox(self.gbExportTemplates)
        self.cmbCodec.setObjectName(_fromUtf8("cmbCodec"))
        self.cmbCodec.addItem(_fromUtf8(""))
        self.cmbCodec.addItem(_fromUtf8(""))
        self.cmbCodec.addItem(_fromUtf8(""))
        self.gridLayout_2.addWidget(self.cmbCodec, 2, 1, 1, 1)
        self.lblCodec = QtGui.QLabel(self.gbExportTemplates)
        self.lblCodec.setObjectName(_fromUtf8("lblCodec"))
        self.gridLayout_2.addWidget(self.lblCodec, 2, 0, 1, 1)
        self.cmbExportTemplates = QtGui.QComboBox(self.gbExportTemplates)
        self.cmbExportTemplates.setObjectName(_fromUtf8("cmbExportTemplates"))
        self.cmbExportTemplates.addItem(_fromUtf8(""))
        self.gridLayout_2.addWidget(self.cmbExportTemplates, 1, 0, 1, 2)
        self.rbTemplateGroups = QtGui.QRadioButton(self.gbExportTemplates)
        self.rbTemplateGroups.setObjectName(_fromUtf8("rbTemplateGroups"))
        self.gridLayout_2.addWidget(self.rbTemplateGroups, 0, 1, 1, 1)
        self.gridLayout_4.addWidget(self.gbExportTemplates, 1, 0, 1, 1)
        self.groupBox = QtGui.QGroupBox(self.tabParameters)
        self.groupBox.setObjectName(_fromUtf8("groupBox"))
        self.verticalLayout_3 = QtGui.QVBoxLayout(self.groupBox)
        self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3"))
        self.saTemplateParams = QtGui.QScrollArea(self.groupBox)
        self.saTemplateParams.setWidgetResizable(True)
        self.saTemplateParams.setObjectName(_fromUtf8("saTemplateParams"))
        self.scrollAreaWidgetContents = QtGui.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 431, 181))
        self.scrollAreaWidgetContents.setObjectName(
            _fromUtf8("scrollAreaWidgetContents"))
        self.gridLayout_3 = QtGui.QGridLayout(self.scrollAreaWidgetContents)
        self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
        self.paramNamesLayout = QtGui.QVBoxLayout()
        self.paramNamesLayout.setContentsMargins(-1, -1, 6, -1)
        self.paramNamesLayout.setObjectName(_fromUtf8("paramNamesLayout"))
        self.gridLayout_3.addLayout(self.paramNamesLayout, 0, 0, 1, 1)
        self.paramValuesLayout = QtGui.QVBoxLayout()
        self.paramValuesLayout.setSizeConstraint(
            QtGui.QLayout.SetDefaultConstraint)
        self.paramValuesLayout.setObjectName(_fromUtf8("paramValuesLayout"))
        self.gridLayout_3.addLayout(self.paramValuesLayout, 0, 1, 1, 1)
        self.saTemplateParams.setWidget(self.scrollAreaWidgetContents)
        self.verticalLayout_3.addWidget(self.saTemplateParams)
        self.gridLayout_4.addWidget(self.groupBox, 2, 0, 1, 1)
        self.tabWidget.addTab(self.tabParameters, _fromUtf8(""))
        self.tabLog = QtGui.QWidget()
        self.tabLog.setObjectName(_fromUtf8("tabLog"))
        self.gridLayout_5 = QtGui.QGridLayout(self.tabLog)
        self.gridLayout_5.setObjectName(_fromUtf8("gridLayout_5"))
        self.textLogs = QtGui.QTextEdit(self.tabLog)
        self.textLogs.setObjectName(_fromUtf8("textLogs"))
        self.gridLayout_5.addWidget(self.textLogs, 0, 0, 1, 1)
        self.tabWidget.addTab(self.tabLog, _fromUtf8(""))
        self.gridLayout.addWidget(self.tabWidget, 2, 0, 1, 3)
        self.btnExport = QtGui.QPushButton(ExportToDbfDialog)
        self.btnExport.setObjectName(_fromUtf8("btnExport"))
        self.gridLayout.addWidget(self.btnExport, 0, 0, 1, 1)
        self.btnClose = QtGui.QPushButton(ExportToDbfDialog)
        self.btnClose.setObjectName(_fromUtf8("btnClose"))
        self.gridLayout.addWidget(self.btnClose, 0, 2, 1, 1)
        self.pbRecords = CProgressBar(ExportToDbfDialog)
        self.pbRecords.setProperty("value", 0)
        self.pbRecords.setAlignment(QtCore.Qt.AlignCenter)
        self.pbRecords.setTextVisible(True)
        self.pbRecords.setObjectName(_fromUtf8("pbRecords"))
        self.gridLayout.addWidget(self.pbRecords, 1, 0, 1, 3)

        self.retranslateUi(ExportToDbfDialog)
        self.tabWidget.setCurrentIndex(0)
        self.cmbExportTemplates.setCurrentIndex(0)
        QtCore.QObject.connect(self.btnClose,
                               QtCore.SIGNAL(_fromUtf8("clicked()")),
                               ExportToDbfDialog.reject)
        QtCore.QMetaObject.connectSlotsByName(ExportToDbfDialog)

    def retranslateUi(self, ExportToDbfDialog):
        ExportToDbfDialog.setWindowTitle(
            _translate("ExportToDbfDialog", "ExportToDbfDialog", None))
        self.pbFiles.setFormat(
            _translate("ExportToDbfDialog", "Обработано шаблонов %v/%m", None))
        self.grpOutFileName.setTitle(
            _translate("ExportToDbfDialog", "Путь выгрузки:", None))
        self.edtOutPath.setText(
            _translate("ExportToDbfDialog", "<Не указан>", None))
        self.btnBrowse.setText(_translate("ExportToDbfDialog", "...", None))
        self.chkMakeArchive.setText(
            _translate("ExportToDbfDialog", "создать архив", None))
        self.gbExportTemplates.setTitle(
            _translate("ExportToDbfDialog", "Шаблоны выгрузки", None))
        self.rbTemplateIndividual.setText(
            _translate("ExportToDbfDialog", "Индивидуальные отчеты", None))
        self.cmbCodec.setItemText(
            0, _translate("ExportToDbfDialog", "utf-8", None))
        self.cmbCodec.setItemText(
            1, _translate("ExportToDbfDialog", "cp1251", None))
        self.cmbCodec.setItemText(
            2, _translate("ExportToDbfDialog", "cp866", None))
        self.lblCodec.setText(
            _translate("ExportToDbfDialog", "Кодировка файлов с шаблонами:",
                       None))
        self.cmbExportTemplates.setItemText(
            0, _translate("ExportToDbfDialog", "<Не задано>", None))
        self.rbTemplateGroups.setText(
            _translate("ExportToDbfDialog", "Группы отчетов", None))
        self.groupBox.setTitle(
            _translate("ExportToDbfDialog", "Параметры шаблона", None))
        self.tabWidget.setTabText(
            self.tabWidget.indexOf(self.tabParameters),
            _translate("ExportToDbfDialog", "Параметры", None))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabLog),
                                  _translate("ExportToDbfDialog", "Лог", None))
        self.btnExport.setText(_translate("ExportToDbfDialog", "Экспорт",
                                          None))
        self.btnClose.setText(_translate("ExportToDbfDialog", "Закрыть", None))
        self.pbRecords.setFormat(
            _translate("ExportToDbfDialog", "Обработано записей %v/%m", None))
Example #4
0
class CImportPayRefuseR85Dialog(QtGui.QDialog):
    InitState = 0
    ImportState = 1

    MainEngine = CImportPayRefuseR85Engine
    # DDEngine = CImportR85DDTFEngine
    # TODO: Возможно, стоит отсюда выпилить эту разбивку, если принципиальных различий не появится
    engineByFormat = {'HS': MainEngine,
                      'HT': MainEngine,
                      'DP': MainEngine,
                      'DV': MainEngine,
                      'DO': MainEngine,
                      'DS': MainEngine,
                      'DU': MainEngine,
                      'DF': MainEngine,
                      'DD': MainEngine,
                      'DR': MainEngine,
                      'TS': MainEngine,
                      'TT': MainEngine,
                      }

    def __init__(self, db, orgId, parent = None, isFLC = False):
        super(CImportPayRefuseR85Dialog, self).__init__(parent)
        if isFLC:
            self.MainEngine = CImportPayRefuseR85EngineFLC
        self._db = db
        self._orgId = orgId
        self._pi = CProgressInformer(processEventsFlag=QtCore.QEventLoop.AllEvents)
        # self._engine = CImportR85TFEngine(db, orgId, progressInformer=self._pi) #TODO?
        # self._engine.setUserConfirmationFunction(self.userConfirmation)
        self._lastExceptionHandler = None
        # self._loggerHandler = CLogHandler(self._engine.logger(), self)
        # self._loggerHandler.setLevel(logging.INFO)
        self._currentState = self.InitState

        self.setupUi()

        self.onStateChanged()
        self._engines = {}
        self._isFLC = isFLC


    def setLastExceptionHandler(self, handler):
        self._lastExceptionHandler = handler

    def setParams(self, params):
        if isinstance(params, dict):
            fileName = forceStringEx(getPref(params, 'inputFile', u''))
            if os.path.isfile(fileName):
                self.edtFileName.setText(fileName)


    def engine(self, format):
        engine = self._engines.get(format, None) # self._engine
        if engine is None:
            engine = self.engineByFormat.get(format, self.MainEngine)(self._db, self._orgId, progressInformer=self._pi, format=format)
            engine.setLastExceptionHandler(self._lastExceptionHandler)
            engine.setUserConfirmationFunction(self.userConfirmation)
            loggerHandler = CLogHandler(engine.logger(), self)
            loggerHandler.setLevel(logging.INFO)
            loggerHandler.logged.connect(self.logInfo.append)
            self._engines[format] = engine
        return engine



    def params(self):
        params = {}
        setPref(params, 'inputFile', forceStringEx(self.edtFileName.text()))
        return params


    @property
    def currentState(self):
        return self._currentState


    @currentState.setter
    def currentState(self, value):
        if value in [self.InitState, self.ImportState]:
            self._currentState = value
            self.onStateChanged()


    def onStateChanged(self):
        self.btnNextAction.setText(self._actionNames.get(self.currentState, u'<Error>'))
        self.btnClose.setEnabled(self.currentState != self.ImportState)
        self.gbInit.setEnabled(self.currentState == self.InitState)
        self.gbImport.setEnabled(self.currentState == self.ImportState)
        # self.btnSave.setEnabled(bool(self._engine.documents))
        QtCore.QCoreApplication.processEvents()


    # noinspection PyAttributeOutsideInit
    def setupUi(self):
        layout = QtGui.QVBoxLayout()
        # init block
        self.gbInit = QtGui.QGroupBox()
        gbLayout = QtGui.QVBoxLayout()
        lineLayout = QtGui.QHBoxLayout()
        self.edtFileName = QtGui.QLineEdit()
        self.edtFileName.setReadOnly(True)
        self.edtFileName.textChanged.connect(self.onFileNameChanged)
        lineLayout.addWidget(self.edtFileName)
        self.btnBrowseFile = QtGui.QToolButton()
        # noinspection PyUnresolvedReferences
        self.btnBrowseFile.clicked.connect(self.onBrowseFileClicked)
        lineLayout.addWidget(self.btnBrowseFile)
        gbLayout.addLayout(lineLayout)
        self.gbInit.setLayout(gbLayout)
        layout.addWidget(self.gbInit)

        # import block
        self.gbImport = QtGui.QGroupBox()
        gbLayout = 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)
        gbLayout.addWidget(self.progressBar)
        self.gbImport.setLayout(gbLayout)
        layout.addWidget(self.gbImport)

        # log block
        self.logInfo = QtGui.QTextEdit()
        layout.addWidget(self.logInfo)
        # self._loggerHandler.logged.connect(self.logInfo.append)

        # buttons block
        subLayout = QtGui.QHBoxLayout()
        self.btnNextAction = QtGui.QPushButton()
        # noinspection PyUnresolvedReferences
        self.btnNextAction.clicked.connect(self.onNextActionClicked)
        subLayout.addStretch()
        subLayout.addWidget(self.btnNextAction)
        self.btnClose = QtGui.QPushButton()
        # noinspection PyUnresolvedReferences
        self.btnClose.clicked.connect(self.onCloseClicked)
        subLayout.addWidget(self.btnClose)
        layout.addLayout(subLayout)

        self.setLayout(layout)
        self.setMinimumWidth(512)
        self.retranslateUi()


    # noinspection PyAttributeOutsideInit
    def retranslateUi(self):
        context = unicode(getClassName(self))
        self.setWindowTitle(forceTr(u'Импорт отказов. Крым. ТФОМС.', context))
        self.gbInit.setTitle(forceTr(u'Параметры импорта', context))

        self.gbImport.setTitle(forceTr(u'Импорт', context))

        self._actionNames = {self.InitState: forceTr(u'Импорт',context),
                             self.ImportState: forceTr(u'Прервать', context)}
        self.btnClose.setText(forceTr(u'Закрыть', context))


    def userConfirmation(self, title, message):
        return QtGui.QMessageBox.Yes == QtGui.QMessageBox.question(self,
                                                                   title,
                                                                   message,
                                                                   QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
                                                                   QtGui.QMessageBox.No)



    @QtCore.pyqtSlot()
    def onNextActionClicked(self):
        if self.currentState == self.InitState:
            self.currentState = self.ImportState
            try:
                self.engine(self._currentFormat).process(forceStringEx(self.edtFileName.text()))
            except Exception, e:
                self.currentState = self.InitState
                raise
            self.currentState = self.InitState

        elif self.currentState == self.ImportState:
            self.engine(self._currentFormat).abort()
            self.currentState = self.InitState
Example #5
0
class CMultipleExportDialog(QtGui.QDialog):
    InitState = 0
    ExportState = 1
    SaveState = 2

    def __init__(self, db, accountIdList, parent=None):
        super(CMultipleExportDialog, self).__init__(parent=parent)
        self._db = db
        self._accountIdList = accountIdList
        self._engines = []
        self._pi = CProgressInformer(
            processEventsFlag=QtCore.QEventLoop.AllEvents)
        # self._engine = engine(db, accountRecord, progressInformer=self._pi)
        # self._loggerHandler = CLogHandler(self._engine.logger(), self)
        self._currentState = self.InitState

        self.setupUi()

        self.onStateChanged()

    def setParams(self, params):
        if isinstance(params, dict):
            outDir = forceStringEx(getPref(params, 'outDir', u''))
            if os.path.isdir(outDir):
                self.edtSaveDir.setText(outDir)

    def params(self):
        params = {}
        setPref(params, 'outDir', forceStringEx(self.edtSaveDir.text()))
        return params

    @property
    def currentState(self):
        return self._currentState

    @currentState.setter
    def currentState(self, value):
        if value in [self.InitState, self.ExportState, self.SaveState]:
            self._currentState = value
            self.onStateChanged()

    def onStateChanged(self):
        self.btnNextAction.setText(
            self._actionNames.get(self.currentState, u'<Error>'))
        self.btnClose.setEnabled(self.currentState != self.ExportState)
        # self.gbInit.setEnabled(self.currentState == self.InitState)
        self.gbExport.setEnabled(self.currentState == self.ExportState)
        self.gbSave.setEnabled(self.currentState == self.SaveState)
        self.btnSave.setEnabled(self.hasDocuments())
        QtCore.QCoreApplication.processEvents()

    def setupUi(self):
        layout = QtGui.QVBoxLayout()
        # init block
        # self.gbInit = QtGui.QGroupBox()
        # gbLayout = QtGui.QVBoxLayout()
        # self.gbInit.setLayout(gbLayout)
        # layout.addWidget(self.gbInit)

        # export block
        self.gbExport = QtGui.QGroupBox()
        gbLayout = 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)
        gbLayout.addWidget(self.progressBar)
        self.gbExport.setLayout(gbLayout)
        layout.addWidget(self.gbExport)

        # save block
        self.gbSave = QtGui.QGroupBox()
        gbLayout = 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)
        gbLayout.addLayout(lineLayout)
        lineLayout = QtGui.QHBoxLayout()
        self.btnSave = QtGui.QPushButton()
        self.btnSave.clicked.connect(self.onSaveClicked)
        lineLayout.addWidget(self.btnSave)
        gbLayout.addLayout(lineLayout)
        self.gbSave.setLayout(gbLayout)
        layout.addWidget(self.gbSave)

        # log block
        self.logInfo = QtGui.QTextEdit()
        layout.addWidget(self.logInfo)
        # self._loggerHandler.logged.connect(self.logInfo.append)

        # buttons block
        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.retranslateUi()

        self.setModal(True)

    def retranslateUi(self):
        context = unicode(getClassName(self))
        self.setWindowTitle(forceTr(u'Экспорт. Крым. ФЛК', context))
        # self.gbInit.setTitle(forceTr(u'Параметры экспорта', context))

        self.gbExport.setTitle(forceTr(u'Экспорт', context))

        self.gbSave.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:
            result = False
            self.currentState = self.ExportState
            for accountId in self._accountIdList:
                engine = None
                exportInfo = getAccountExportFormat(accountId).split()
                if exportInfo:
                    exportFormat = exportInfo[0]
                    if exportFormat in ('R85XML'):
                        engine = CExportR85TFEngine(self._db,
                                                    progressInformer=self._pi,
                                                    FLC=True)
                    # Крым, выгрузка диспансеризации и профосмотров (МО->Фонд)
                    elif exportFormat == 'R85DDXML':
                        engine = CExportR85DDTFEngine(
                            self._db, progressInformer=self._pi, FLC=True)
                    elif exportFormat == 'R85HTXML':
                        engine = CExportR85HTTFEngine(
                            self._db, progressInformer=self._pi, FLC=True)
                    if engine:
                        # FIXME: может провоцировать падения/ошибки?
                        CLogHandler(engine.logger(),
                                    self).logged.connect(self.logInfo.append)
                        self._engines.append(engine)
                        try:
                            result = engine.process(accountId)
                        except:
                            self.currentState = self.InitState
                            raise
            self.currentState = self.SaveState if result else self.InitState
        elif self.currentState == self.ExportState:
            for engine in self._engines:
                engine.terminate()
            self._engines = []
        elif self.currentState == self.SaveState:
            self.currentState = self.InitState
        self.onStateChanged()

    def canClose(self):
        ok = self.currentState == self.SaveState
        return ok 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 hasDocuments(self):
        result = False
        for engine in self._engines:
            if engine.hDocuments or engine.lDocuments:
                result = True
                break
        return result

    def closeEvent(self, event):
        if self.canClose():
            event.accept()
        else:
            event.ignore()

    def done(self, result):
        if self.canClose():
            super(CMultipleExportDialog, 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)
        for engine in self._engines:
            engine.save(self.edtSaveDir.text())
        self.onStateChanged()
Example #6
0
class CExport85MTR_Refused(QtGui.QDialog):
    InitState = 0
    ExportState = 1
    SaveState = 2

    def __init__(self, db, accountId, parent=None):
        super(CExport85MTR_Refused, self).__init__(parent)
        self._db = db
        self._pi = CProgressInformer(
            processEventsFlag=QtCore.QEventLoop.AllEvents)
        self._accountId = accountId
        self._engine = CExportR85MTREngine_Refused(db,
                                                   progressInformer=self._pi)
        self._loggerHandler = CLogHandler(self._engine.logger(), self)
        self._loggerHandler.setLevel(logging.INFO)
        self._currentState = self.InitState

        self.setupUi()
        self.onStateChanged()

    def engine(self):
        return self._engine

    def setParams(self, params):
        if isinstance(params, dict):
            outDir = forceStringEx(getPref(params, 'outDir', u''))
            if os.path.isdir(outDir):
                self.edtSaveDir.setText(outDir)
            accNumber = forceInt(getPref(params, 'accNumber', 0)) + 1
            self.spbAccountNumber.setValue(accNumber)

    def params(self):
        params = {}
        setPref(params, 'outDir', forceStringEx(self.edtSaveDir.text()))
        setPref(params, 'accNumber', self.spbAccountNumber.value())
        return params

    @property
    def currentState(self):
        return self._currentState

    @currentState.setter
    def currentState(self, value):
        if value in [self.InitState, self.ExportState, self.SaveState]:
            self._currentState = value
            self.onStateChanged()

    def onStateChanged(self):
        self.btnNextAction.setText(
            self._actionNames.get(self.currentState, u'<Error>'))
        self.btnClose.setEnabled(self.currentState != self.ExportState)
        self.gbInit.setEnabled(self.currentState == self.InitState)
        self.gbExport.setEnabled(self.currentState == self.ExportState)
        self.gbSave.setEnabled(self.currentState == self.SaveState)
        self.btnSave.setEnabled(bool(self._engine.documents))
        QtCore.QCoreApplication.processEvents()

    # noinspection PyAttributeOutsideInit
    def setupUi(self):
        layout = QtGui.QVBoxLayout()
        # init block
        self.gbInit = QtGui.QGroupBox()
        gbLayout = QtGui.QHBoxLayout()
        self.lblAccountNumber = QtGui.QLabel()
        gbLayout.addWidget(self.lblAccountNumber)
        self.spbAccountNumber = QtGui.QSpinBox()
        self.spbAccountNumber.setRange(1, 9999)
        gbLayout.addWidget(self.spbAccountNumber)
        self.gbInit.setLayout(gbLayout)
        layout.addWidget(self.gbInit)

        # export block
        self.gbExport = QtGui.QGroupBox()
        gbLayout = 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)
        gbLayout.addWidget(self.progressBar)
        self.gbExport.setLayout(gbLayout)
        layout.addWidget(self.gbExport)

        # save block
        self.gbSave = QtGui.QGroupBox()
        gbLayout = 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.onBrowseDirClicked)
        lineLayout.addWidget(self.btnBrowseDir)
        gbLayout.addLayout(lineLayout)
        lineLayout = QtGui.QHBoxLayout()
        # self.chkZipping = QtGui.QCheckBox()
        # lineLayout.addWidget(self.chkZipping)
        self.btnSave = QtGui.QPushButton()
        self.btnSave.clicked.connect(self.onSaveClicked)
        lineLayout.addWidget(self.btnSave)
        gbLayout.addLayout(lineLayout)
        self.gbSave.setLayout(gbLayout)
        layout.addWidget(self.gbSave)

        # log block
        self.logInfo = QtGui.QTextEdit()
        layout.addWidget(self.logInfo)
        self._loggerHandler.logged.connect(self.logInfo.append)

        # buttons block
        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.retranslateUi()

    # noinspection PyAttributeOutsideInit
    def retranslateUi(self):
        context = unicode(getClassName(self))
        self.setWindowTitle(
            forceTr(u'Экспорт. Крым. МежТер. Возврат.', context))
        self.gbInit.setTitle(forceTr(u'Параметры экспорта', context))
        self.lblAccountNumber.setText(
            forceTr(u'Номер выгрузки по счету', context))

        self.gbExport.setTitle(forceTr(u'Экспорт', context))

        self.gbSave.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(self._accountId)
            except Exception, e:
                self.currentState = self.InitState
                raise
            self.currentState = self.SaveState if result else self.InitState

        elif self.currentState == self.ExportState:
            self._engine.abort()