def __init__(self, parent, scope):
        super(TemporalInfoWidget, self).__init__(parent)

        self.setupUi(self)
        self.creationdate = NullQDateEditWrapper(self.creationdate)
        self.revisiondate = NullQDateEditWrapper(self.revisiondate)
        self.superParent = self.parent()
        self.scope = scope
        self.combo_items_ci_datetypecode = customCombo.dic_to_CustomComboBox_dic(
            self.superParent.codelist["CI_DateTypeCode"])
        tla.setupListView(self.publicationdate,
                          QDateEdit,
                          self,
                          date_format=cons.DATE_FORMAT)

        # timeextension stuff (headers and types and such
        self.creationdate.clear()
        self.revisiondate.clear()
        self.date_publicationdate.clear()

        self.begindate = NullQDateTimeEditWrapper(self.begindate)
        self.enddate = NullQDateTimeEditWrapper(self.enddate)
        self.begindate.clear()
        self.enddate.clear()

        self.date_publicationdate.setDate(QDate.currentDate())
        self.publicationdate.model().rowsInserted.connect(self.reftemocheck)
        self.publicationdate.model().rowsRemoved.connect(self.reftemocheck)
        self.creationdate.get_original().editingFinished.connect(
            self.reftemocheck)
        self.revisiondate.get_original().editingFinished.connect(
            self.reftemocheck)
        self.creationdate.get_original().dateTimeChanged.connect(
            self.reftemocheck)
        self.revisiondate.get_original().dateTimeChanged.connect(
            self.reftemocheck)

        self.begindate.get_original().editingFinished.connect(
            self.time_ext_check)
        self.enddate.get_original().editingFinished.connect(
            self.time_ext_check)
        self.begindate.get_original().dateTimeChanged.connect(
            self.time_ext_check)
        self.enddate.get_original().dateTimeChanged.connect(
            self.time_ext_check)
        self.reftemocheck()
        self.time_ext_check()

        for btn in self.findChildren(qwidgets.QPushButton,
                                     qcore.QRegExp('btn_*')):
            if '_add_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/plus_icon.svg'))
                btn.setText('')
            elif '_del_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/delete_icon.svg'))
                btn.setText('')
            elif '_clear_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/delete_field.svg'))
        for info in self.findChildren(qwidgets.QPushButton,
                                      qcore.QRegExp('info_*')):
            info.setIcon(qgui.QIcon(':/resourcesFolder/icons/help_icon.svg'))
            info.setText('')
            info.pressed.connect(self.printHelp)
        self.eater = tla.EatWheel()
        for x in self.findChildren(qwidgets.QComboBox):
            x.installEventFilter(self.eater)
            x.setFocusPolicy(Qt.StrongFocus)
        for x in self.findChildren(QDateTimeEdit):
            x.installEventFilter(self.eater)
            x.setFocusPolicy(Qt.StrongFocus)
        for x in self.findChildren(QDateEdit):
            x.installEventFilter(self.eater)
            x.setFocusPolicy(Qt.StrongFocus)

        self.btn_clear_creationdate.pressed.connect(
            lambda: self.creationdate.clear())
        self.btn_clear_revisiondate.pressed.connect(
            lambda: self.revisiondate.clear())
        self.btn_clear_begindate.pressed.connect(
            lambda: self.begindate.clear())
        self.btn_clear_enddate.pressed.connect(lambda: self.enddate.clear())
    def __init__(self, parent):
        super(MetadataWidget, self).__init__(parent)
        self.setupUi(self)
        self.datestamp = NullQDateEditWrapper(self.datestamp)
        self.superParent = self.parent()

        tla.setupMandatoryField(self, self.fileidentifier,
                                self.label_fileidentifier,
                                u"Elemento obrigatório em falta")
        tla.setupMandatoryField(self, self.datestamp, self.label_datestamp,
                                u"Elemento obrigatório em falta")
        tla.setupMandatoryField(self, self.language, self.label_language,
                                u"Elemento obrigatório em falta")
        tla.setupMandatoryField(self, self.stdname, self.label_stdname,
                                u"Elemento obrigatório em falta")
        tla.setupMandatoryField(self, self.stdversion, self.label_stdversion,
                                u"Elemento obrigatório em falta")

        self.pal = qgui.QPalette()
        self.pal.setColor(self.pal.Background, qgui.QColor(cons.ERROR_COLOR))
        self.contacts_list = []

        for btn in self.findChildren(qwidgets.QPushButton,
                                     qcore.QRegExp('btn_*')):
            if '_add_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/plus_icon.svg'))
                btn.setText('')
            elif '_del_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/delete_icon.svg'))
                btn.setText('')
            elif '_clear_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/delete_field.svg'))

            split_name = btn.objectName().split('_')
            if len(split_name) == 4 and split_name[2] == 'uuid':
                btn.clicked.connect(self.generate_uuid)

        for info in self.findChildren(qwidgets.QPushButton,
                                      qcore.QRegExp('info_*')):
            info.setIcon(qgui.QIcon(':/resourcesFolder/icons/help_icon.svg'))
            info.setText('')
            info.pressed.connect(self.printHelp)

        self.btn_adi_contact.setIcon(
            qgui.QIcon(':/resourcesFolder/icons/plus_icon.svg'))
        self.combo_items_languagecode = customCombo.dic_to_CustomComboBox_dic(
            self.superParent.codelist["LanguageCode"])
        self.combo_items_md_charactersetCode = customCombo.dic_to_CustomComboBox_dic(
            self.superParent.codelist["MD_CharacterSetCode"])

        self.language.setModel(
            customCombo.CustomComboBoxModel(
                self,
                sorted(list(self.combo_items_languagecode.values()),
                       key=lambda x: x.term_pt)))
        self.language.setCurrentIndex(
            self.language.findText(cons.PREDEF_LANG_METADATA))
        self.language.setDisabled(True)
        self.datestamp.clear()
        self.characterset.setModel(
            customCombo.CustomComboBoxModel(
                self,
                sorted(list(self.combo_items_md_charactersetCode.values()),
                       key=lambda x: x.term_pt)))
        self.characterset.setCurrentIndex(
            self.characterset.findText(cons.PREDEF_CHARSET))

        self.stdname.setText(cons.SNIMAR_PROFILE_NAME)
        self.stdname.setDisabled(True)
        self.stdversion.setDisabled(True)
        self.stdversion.setText(cons.SNIMAR_PROFILE_VERSION)
        self.btn_adi_contact.clicked.connect(self.addContact)
        self.check_mandatory_contacts()

        self.eater = tla.EatWheel()
        for x in self.findChildren(qwidgets.QComboBox):
            x.installEventFilter(self.eater)
            x.setFocusPolicy(Qt.StrongFocus)
        for x in self.findChildren(QDateEdit):
            x.installEventFilter(self.eater)
            x.setFocusPolicy(Qt.StrongFocus)

        self.btn_clear_datestamp.pressed.connect(
            lambda: self.datestamp.clear())

        self.datestamp.get_original().editingFinished.connect(
            self.reftemocheck)
        self.datestamp.get_original().dateTimeChanged.connect(
            self.reftemocheck)
        self.reftemocheck()
class TemporalInfoWidget(QWidget, temporalInformationPanel.Ui_temporal):
    def __init__(self, parent, scope):
        super(TemporalInfoWidget, self).__init__(parent)

        self.setupUi(self)
        self.creationdate = NullQDateEditWrapper(self.creationdate)
        self.revisiondate = NullQDateEditWrapper(self.revisiondate)
        self.superParent = self.parent()
        self.scope = scope
        self.combo_items_ci_datetypecode = customCombo.dic_to_CustomComboBox_dic(
            self.superParent.codelist["CI_DateTypeCode"])
        tla.setupListView(self.publicationdate,
                          QDateEdit,
                          self,
                          date_format=cons.DATE_FORMAT)

        # timeextension stuff (headers and types and such
        self.creationdate.clear()
        self.revisiondate.clear()
        self.date_publicationdate.clear()

        self.begindate = NullQDateTimeEditWrapper(self.begindate)
        self.enddate = NullQDateTimeEditWrapper(self.enddate)
        self.begindate.clear()
        self.enddate.clear()

        self.date_publicationdate.setDate(QDate.currentDate())
        self.publicationdate.model().rowsInserted.connect(self.reftemocheck)
        self.publicationdate.model().rowsRemoved.connect(self.reftemocheck)
        self.creationdate.get_original().editingFinished.connect(
            self.reftemocheck)
        self.revisiondate.get_original().editingFinished.connect(
            self.reftemocheck)
        self.creationdate.get_original().dateTimeChanged.connect(
            self.reftemocheck)
        self.revisiondate.get_original().dateTimeChanged.connect(
            self.reftemocheck)

        self.begindate.get_original().editingFinished.connect(
            self.time_ext_check)
        self.enddate.get_original().editingFinished.connect(
            self.time_ext_check)
        self.begindate.get_original().dateTimeChanged.connect(
            self.time_ext_check)
        self.enddate.get_original().dateTimeChanged.connect(
            self.time_ext_check)
        self.reftemocheck()
        self.time_ext_check()

        for btn in self.findChildren(qwidgets.QPushButton,
                                     qcore.QRegExp('btn_*')):
            if '_add_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/plus_icon.svg'))
                btn.setText('')
            elif '_del_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/delete_icon.svg'))
                btn.setText('')
            elif '_clear_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/delete_field.svg'))
        for info in self.findChildren(qwidgets.QPushButton,
                                      qcore.QRegExp('info_*')):
            info.setIcon(qgui.QIcon(':/resourcesFolder/icons/help_icon.svg'))
            info.setText('')
            info.pressed.connect(self.printHelp)
        self.eater = tla.EatWheel()
        for x in self.findChildren(qwidgets.QComboBox):
            x.installEventFilter(self.eater)
            x.setFocusPolicy(Qt.StrongFocus)
        for x in self.findChildren(QDateTimeEdit):
            x.installEventFilter(self.eater)
            x.setFocusPolicy(Qt.StrongFocus)
        for x in self.findChildren(QDateEdit):
            x.installEventFilter(self.eater)
            x.setFocusPolicy(Qt.StrongFocus)

        self.btn_clear_creationdate.pressed.connect(
            lambda: self.creationdate.clear())
        self.btn_clear_revisiondate.pressed.connect(
            lambda: self.revisiondate.clear())
        self.btn_clear_begindate.pressed.connect(
            lambda: self.begindate.clear())
        self.btn_clear_enddate.pressed.connect(lambda: self.enddate.clear())

    @qcore.pyqtSlot()
    def printHelp(self):
        QToolTip.showText(
            QCursor.pos(),
            tla.formatTooltip(
                self.superParent.helps['temporalInformationPanel'][
                    self.sender().objectName()]), None)

    def set_data(self, md=None):
        if md is None:
            return None
        if self.scope != SCOPES.SERVICES:
            common = md.identification
        else:
            common = md.serviceidentification
        if common is None:
            return
        for date in common.date:
            if date.type == 'creation':
                self.creationdate.setDateTime(
                    qcore.QDateTime.fromString(date.date, cons.DATE_FORMAT))
            elif date.type == 'revision':
                self.revisiondate.setDateTime(
                    qcore.QDateTime.fromString(date.date, cons.DATE_FORMAT))
            elif date.type == 'publication':
                self.publicationdate.model().addNewRow(
                    QDate.fromString(date.date, cons.DATE_FORMAT))

        for extent in common.extent:
            if hasattr(extent,
                       'beginposition') and extent.beginposition is not None:
                self.begindate.set_dateTime(
                    qcore.QDateTime.fromString(
                        extent.beginposition.replace("T", " "),
                        cons.DATE_TIME_FORMAT))
                self.enddate.set_dateTime(
                    qcore.QDateTime.fromString(
                        extent.endposition.replace("T", " "),
                        cons.DATE_TIME_FORMAT))

    def get_data(self, md=None):
        if self.scope != SCOPES.SERVICES:
            common = md.identification
        else:
            common = md.serviceidentification
        if self.creationdate.get_date() is not None:
            creation_date = snimarProfileModel.iso.CI_Date()
            creation_date.date = self.creationdate.get_date().toString(
                cons.DATE_FORMAT)
            creation_date.type = self.combo_items_ci_datetypecode['creation']
            common.date.append(creation_date)
        if self.revisiondate.get_date() is not None:
            revision_date = snimarProfileModel.iso.CI_Date()
            revision_date.date = self.revisiondate.get_date().toString(
                cons.DATE_FORMAT)
            revision_date.type = self.combo_items_ci_datetypecode['revision']
            common.date.append(revision_date)

        for pub in self.publicationdate.model().listElements:
            pub_date = snimarProfileModel.iso.CI_Date()
            pub_date.date = pub.toString(cons.DATE_FORMAT)
            pub_date.type = self.combo_items_ci_datetypecode['publication']
            common.date.append(pub_date)

        bdate = self.begindate.get_dateTime()
        edate = self.enddate.get_dateTime()

        if bdate is None or edate is None:
            return

        bdate = self.begindate.get_dateTime().toString(
            cons.DATE_TIME_FORMAT).replace(" ", "T")
        edate = self.enddate.get_dateTime().toString(
            cons.DATE_TIME_FORMAT).replace(" ", "T")
        ids = "B" + bdate.replace(":", "").replace(
            "-", "") + "E" + edate.replace(":", "").replace("-", "")
        common.extent.append(
            EX_TemporalExtent(id=ids, beginposition=bdate, endposition=edate))

    def reftemocheck(self):
        if self.creationdate.get_date() is None and self.revisiondate.get_date() is None and \
                        self.publicationdate.model().rowCount() == 0 and self.label_temporalREf.toolTip() == "":

            label_text = tla.setLabelRed(self.label_temporalREf.text() + u' ' +
                                         u'\u26a0')
            self.label_temporalREf.setText(label_text)
            self.label_temporalREf.setToolTip(
                u"Pelo menos um dos elementos tem que ser preenchido.")
            self.superParent.register_mandatory_missingfield(
                self.objectName(),
                unsetLabelRed(self.label_temporalREf.text()))
        elif not (self.creationdate.get_date() is None
                  and self.revisiondate.get_date() is None
                  and self.publicationdate.model().rowCount()
                  == 0) and self.label_temporalREf.toolTip() != "":
            label_text = tla.unsetLabelRed(
                self.label_temporalREf.text().replace(u'\u26a0', '')).strip()
            self.label_temporalREf.setText(label_text)
            self.label_temporalREf.setToolTip(u'')
            self.superParent.unregister_mandatory_missingfield(
                self.objectName(),
                unsetLabelRed(self.label_temporalREf.text()))

    def time_ext_check(self):
        self.set_diference()
        # clean state
        label_text = tla.unsetLabelRed(self.label_timeextension.text().replace(
            u'\u26a0', '')).strip()
        self.label_timeextension.setText(label_text)
        self.label_timeextension.setToolTip(u'')
        self.superParent.unregister_incomplete_entries(
            self.objectName(), unsetLabelRed(self.label_timeextension.text()))

        if self.enddate.is_null_date() and self.begindate.is_null_date():
            pass
        elif self.begindate.is_null_date():
            label_text = tla.setLabelRed(self.label_timeextension.text() +
                                         u' ' + u'\u26a0')
            self.label_timeextension.setText(label_text)
            self.label_timeextension.setToolTip(
                u"A data de início da extensão temporal não se encontra preenchida."
            )
            self.superParent.register_incomplete_entries(
                self.objectName(),
                unsetLabelRed(self.label_timeextension.text()))
        elif self.enddate.is_null_date():
            label_text = tla.setLabelRed(self.label_timeextension.text() +
                                         u' ' + u'\u26a0')
            self.label_timeextension.setText(label_text)
            self.label_timeextension.setToolTip(
                u"A data de fim da extensão temporal não se encontra preenchida."
            )
            self.superParent.register_incomplete_entries(
                self.objectName(),
                unsetLabelRed(self.label_timeextension.text()))
        elif self.begindate.get_dateTime() > self.enddate.get_dateTime():
            label_text = tla.setLabelRed(self.label_timeextension.text() +
                                         u' ' + u'\u26a0')
            self.label_timeextension.setText(label_text)
            self.label_timeextension.setToolTip(
                u"A duração da Extensão Temporal não se encontra correcta.")
            self.superParent.register_incomplete_entries(
                self.objectName(),
                unsetLabelRed(self.label_timeextension.text()))

    def set_diference(self):
        if self.enddate.is_null_date() or self.begindate.is_null_date():
            self.label_duration.setText("-")
            return True
        else:
            delta = self.enddate.get_dateTime().toPyDateTime(
            ) - self.begindate.get_dateTime().toPyDateTime()
            hours = delta.seconds / 3600
            minutes = (delta.seconds % 3600) / 60
            segundos = ((delta.seconds % 3600) % 60)
            text = str(delta.days) + " Dias," + str(hours) + " Horas," + str(
                minutes) + " Minutos," + str(segundos) + " Segundos"
            if delta.days < 0 or delta.seconds < 0:
                self.label_duration.setText(tla.setLabelRed(text))
                return False
            else:
                self.label_duration.setText(text)
                return True
class MetadataWidget(QWidget, metadataPanel.Ui_metadata):
    def __init__(self, parent):
        super(MetadataWidget, self).__init__(parent)
        self.setupUi(self)
        self.datestamp = NullQDateEditWrapper(self.datestamp)
        self.superParent = self.parent()

        tla.setupMandatoryField(self, self.fileidentifier,
                                self.label_fileidentifier,
                                u"Elemento obrigatório em falta")
        tla.setupMandatoryField(self, self.datestamp, self.label_datestamp,
                                u"Elemento obrigatório em falta")
        tla.setupMandatoryField(self, self.language, self.label_language,
                                u"Elemento obrigatório em falta")
        tla.setupMandatoryField(self, self.stdname, self.label_stdname,
                                u"Elemento obrigatório em falta")
        tla.setupMandatoryField(self, self.stdversion, self.label_stdversion,
                                u"Elemento obrigatório em falta")

        self.pal = qgui.QPalette()
        self.pal.setColor(self.pal.Background, qgui.QColor(cons.ERROR_COLOR))
        self.contacts_list = []

        for btn in self.findChildren(qwidgets.QPushButton,
                                     qcore.QRegExp('btn_*')):
            if '_add_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/plus_icon.svg'))
                btn.setText('')
            elif '_del_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/delete_icon.svg'))
                btn.setText('')
            elif '_clear_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/delete_field.svg'))

            split_name = btn.objectName().split('_')
            if len(split_name) == 4 and split_name[2] == 'uuid':
                btn.clicked.connect(self.generate_uuid)

        for info in self.findChildren(qwidgets.QPushButton,
                                      qcore.QRegExp('info_*')):
            info.setIcon(qgui.QIcon(':/resourcesFolder/icons/help_icon.svg'))
            info.setText('')
            info.pressed.connect(self.printHelp)

        self.btn_adi_contact.setIcon(
            qgui.QIcon(':/resourcesFolder/icons/plus_icon.svg'))
        self.combo_items_languagecode = customCombo.dic_to_CustomComboBox_dic(
            self.superParent.codelist["LanguageCode"])
        self.combo_items_md_charactersetCode = customCombo.dic_to_CustomComboBox_dic(
            self.superParent.codelist["MD_CharacterSetCode"])

        self.language.setModel(
            customCombo.CustomComboBoxModel(
                self,
                sorted(list(self.combo_items_languagecode.values()),
                       key=lambda x: x.term_pt)))
        self.language.setCurrentIndex(
            self.language.findText(cons.PREDEF_LANG_METADATA))
        self.language.setDisabled(True)
        self.datestamp.clear()
        self.characterset.setModel(
            customCombo.CustomComboBoxModel(
                self,
                sorted(list(self.combo_items_md_charactersetCode.values()),
                       key=lambda x: x.term_pt)))
        self.characterset.setCurrentIndex(
            self.characterset.findText(cons.PREDEF_CHARSET))

        self.stdname.setText(cons.SNIMAR_PROFILE_NAME)
        self.stdname.setDisabled(True)
        self.stdversion.setDisabled(True)
        self.stdversion.setText(cons.SNIMAR_PROFILE_VERSION)
        self.btn_adi_contact.clicked.connect(self.addContact)
        self.check_mandatory_contacts()

        self.eater = tla.EatWheel()
        for x in self.findChildren(qwidgets.QComboBox):
            x.installEventFilter(self.eater)
            x.setFocusPolicy(Qt.StrongFocus)
        for x in self.findChildren(QDateEdit):
            x.installEventFilter(self.eater)
            x.setFocusPolicy(Qt.StrongFocus)

        self.btn_clear_datestamp.pressed.connect(
            lambda: self.datestamp.clear())

        self.datestamp.get_original().editingFinished.connect(
            self.reftemocheck)
        self.datestamp.get_original().dateTimeChanged.connect(
            self.reftemocheck)
        self.reftemocheck()

    def reftemocheck(self):
        if self.datestamp.get_date() is None and self.label_datestamp.toolTip(
        ) == "":

            label_text = tla.setLabelRed(
                self.label_datestamp.text().replace(u'\u26a0', '') + u' ' +
                u'\u26a0')
            self.label_datestamp.setText(label_text)
            self.label_datestamp.setToolTip(u"Elemento Obrigatorio.")
            self.superParent.register_mandatory_missingfield(
                self.objectName(), unsetLabelRed(self.label_datestamp.text()))
        elif self.datestamp.get_date(
        ) is not None and self.label_datestamp.toolTip() != "":
            label_text = tla.unsetLabelRed(self.label_datestamp.text().replace(
                u'\u26a0', '')).strip()
            self.label_datestamp.setText(label_text)
            self.label_datestamp.setToolTip(u'')
            self.superParent.unregister_mandatory_missingfield(
                self.objectName(), unsetLabelRed(self.label_datestamp.text()))

    def printHelp(self):
        QToolTip.showText(
            QCursor.pos(),
            tla.formatTooltip(self.superParent.helps['metadataPanel'][
                self.sender().objectName()]), None)

    def addContact(self):
        contact = contactWidget.InlineContactWidget(self,
                                                    self.superParent.orgs)
        self.Contacts.insertWidget(-1, contact)
        self.Contacts.setAlignment(Qt.AlignTop)
        self.contacts_list.append(contact)
        self.check_mandatory_contacts()
        self.check_contacts_completness()

    def deleteContact(self, contact):
        self.Contacts.removeWidget(contact)
        self.contacts_list.remove(contact)
        contact.close()
        self.check_mandatory_contacts()
        self.check_contacts_completness()

    @qcore.pyqtSlot()
    def generate_uuid(self):
        target_name = self.sender().objectName().split('_')[3]
        target = self.findChild(qwidgets.QLineEdit, target_name)
        uuid_str = str(uuid.uuid4())
        target.setText(uuid_str)

    def get_data(self, md):
        if self.datestamp.get_date() is not None:
            md.datestamp = self.datestamp.get_date().toString(cons.DATE_FORMAT)
        md.identifier = self.fileidentifier.text()
        md.charset = self.characterset.currentText()

        md.language = self.language.itemData(self.language.currentIndex())

        md.stdname = self.stdname.text()
        md.stdver = self.stdversion.text()

        for contact in self.contacts_list:
            temp = contact.get_data()
            if temp.role == "pointOfContact":
                md.contact.insert(0, temp)
            else:
                md.contact.append(temp)

        return md

    def set_data(self, md=None):
        if md is not None:
            self.fileidentifier.setText(md.identifier)

            self.datestamp.setDate(
                qcore.QDate.fromString(md.datestamp, cons.DATE_FORMAT))

            if self.combo_items_md_charactersetCode.get(md.charset) is None:
                self.characterset.setCurrentIndex(
                    self.characterset.findText(cons.PREDEF_CHARSET))
            else:
                self.characterset.setCurrentIndex(
                    self.characterset.findText(
                        self.combo_items_md_charactersetCode.get(
                            md.charset).term_pt))

            # Set contacts
            contact_index = 0
            for contact in md.contact:
                self.addContact()
                contact_object = self.contacts_list[contact_index]
                contact_object.set_data(contact)
                contact_index += 1
        self.reftemocheck()

    def check_mandatory_contacts(self):
        if self.Contacts.count() == 0:
            label_text = tla.setLabelRed(
                self.label_contacts.text().replace(u'\u26a0', '') + u' ' +
                u'\u26a0')
            self.label_contacts.setText(label_text)
            self.label_contacts.setToolTip(
                u"É necessario pelo menos um contacto.")
            self.superParent.register_mandatory_missingfield(
                self.objectName(), unsetLabelRed(self.label_contacts.text()))
        else:
            label_text = tla.unsetLabelRed(self.label_contacts.text().replace(
                u'\u26a0', '')).strip()
            self.label_contacts.setText(label_text)
            self.label_contacts.setToolTip(u"")
            self.superParent.unregister_mandatory_missingfield(
                self.objectName(), unsetLabelRed(self.label_contacts.text()))

    def check_contacts_completness(self):
        self.check_role()
        for x in self.contacts_list:
            if not x.isComplete():
                self.superParent.register_incomplete_entries(
                    self.objectName(), "Contactos")
                return
        self.superParent.unregister_incomplete_entries(self.objectName(),
                                                       "Contactos")

    def check_role(self):
        have_poc = False
        for cont in self.contacts_list:
            if cont.get_role() == 'pointOfContact':
                have_poc = True
                break
        if not have_poc:
            label_text = tla.setLabelRed(
                self.label_contacts.text().replace(u'\u26a0', '') + u' ' +
                u'\u26a0')
            self.label_contacts.setText(label_text)
            self.label_contacts.setToolTip(
                u"É necessario pelo menos um contacto com a função 'Contacto'."
            )
            self.superParent.register_mandatory_missingfield(
                self.objectName(), unsetLabelRed(self.label_contacts.text()))
        else:
            label_text = tla.unsetLabelRed(self.label_contacts.text().replace(
                u'\u26a0', '')).strip()
            self.label_contacts.setText(label_text)
            self.label_contacts.setToolTip(u"")
            self.superParent.unregister_mandatory_missingfield(
                self.objectName(), unsetLabelRed(self.label_contacts.text()))
Ejemplo n.º 5
0
    def __init__(self, parent, scope):
        super(QualityWidget, self).__init__(parent)
        self.setupUi(self)
        self.conformancedate = NullQDateEditWrapper(self.conformancedate)
        self.superParent = self.parent()
        self.scope = scope
        self.combo_items_ci_datetypecode = customCombo.dic_to_CustomComboBox_dic(
            self.superParent.codelist["CI_DateTypeCode"])
        self.conformancedatetype.setModel(
            customCombo.CustomComboBoxModel(
                self, [None] +
                sorted(list(self.combo_items_ci_datetypecode.values()),
                       key=lambda x: x.term_pt)))
        if scope == CONS.Scopes.CDG or scope == CONS.Scopes.SERIES:

            tla.setupTableView(
                self,
                self.processsteps, [u"Descrição", u"Data", u"Justificação"],
                [QgsFilterLineEdit, QDateTimeEdit, QgsFilterLineEdit], [
                    self.line_description, self.date_processdate,
                    self.line_rationale
                ],
                mandatorysources=[0],
                validationfunction=tval.Quality().processsteps,
                date_format=cons.DATE_TIME_FORMAT)
            self.processsteps.horizontalHeader().setCascadingSectionResizes(
                False)
            self.processsteps.horizontalHeader().setStretchLastSection(False)
            self.processsteps.horizontalHeader().resizeSection(1, 260)
            self.processsteps.horizontalHeader().setDefaultSectionSize(260)
            self.processsteps.horizontalHeader().setMinimumSectionSize(260)
            self.processsteps.horizontalHeader().setSectionResizeMode(
                1, qwidgets.QHeaderView.Fixed)
            self.processsteps.horizontalHeader().setSectionResizeMode(
                2, qwidgets.QHeaderView.Stretch)
            self.processsteps.horizontalHeader().setSectionResizeMode(
                0, qwidgets.QHeaderView.Stretch)
            self.date_processdate.setDate(QDate.currentDate())

            tla.setupListView(self.source, QgsFilterLineEdit, self)
            tla.setupMandatoryField(self, self.statement, self.label_statement,
                                    u"Elemento obrigatório.")
        else:
            self.panel_hist.hide()

        for btn in self.findChildren(qwidgets.QPushButton,
                                     qcore.QRegExp('btn_*')):
            if '_add_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/plus_icon.svg'))
                btn.setText('')
            elif '_del_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/delete_icon.svg'))
                btn.setText('')
            elif '_clear_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/delete_field.svg'))
        for info in self.findChildren(qwidgets.QPushButton,
                                      qcore.QRegExp('info_*')):
            info.setIcon(qgui.QIcon(':/resourcesFolder/icons/help_icon.svg'))
            info.setText('')
            info.pressed.connect(self.printHelp)

        tla.setupMandatoryField(self, self.conformancetitle,
                                self.label_conformancetitle,
                                u"Elemento obrigatório.")
        tla.setupMandatoryField(self, self.conformancedate,
                                self.label_conformancedate,
                                u"Elemento obrigatório.")
        tla.setupMandatoryField(self, self.conformancedatetype,
                                self.label_conformancedatetype,
                                u"Elemento obrigatório.")
        tla.setupMandatoryField(self, self.conformanceexplanation,
                                self.label_conformanceexplanation,
                                u"Elemento obrigatório.")

        self.eater = tla.EatWheel()
        for x in self.findChildren(qwidgets.QComboBox):
            x.installEventFilter(self.eater)
            x.setFocusPolicy(Qt.StrongFocus)
        for x in self.findChildren(QDateEdit):
            x.installEventFilter(self.eater)
            x.setFocusPolicy(Qt.StrongFocus)
        self.btn_clear_conformancedate.pressed.connect(
            lambda: self.conformancedate.clear())

        self.btn_INSPIRE.pressed.connect(self.set_default_dataquality_report)
        self.statement.textChanged.connect(self.checkHistText)
        self.hist_data.stateChanged.connect(self.setHist)
Ejemplo n.º 6
0
class QualityWidget(QWidget, qualityPanel.Ui_quality):
    def __init__(self, parent, scope):
        super(QualityWidget, self).__init__(parent)
        self.setupUi(self)
        self.conformancedate = NullQDateEditWrapper(self.conformancedate)
        self.superParent = self.parent()
        self.scope = scope
        self.combo_items_ci_datetypecode = customCombo.dic_to_CustomComboBox_dic(
            self.superParent.codelist["CI_DateTypeCode"])
        self.conformancedatetype.setModel(
            customCombo.CustomComboBoxModel(
                self, [None] +
                sorted(list(self.combo_items_ci_datetypecode.values()),
                       key=lambda x: x.term_pt)))
        if scope == CONS.Scopes.CDG or scope == CONS.Scopes.SERIES:

            tla.setupTableView(
                self,
                self.processsteps, [u"Descrição", u"Data", u"Justificação"],
                [QgsFilterLineEdit, QDateTimeEdit, QgsFilterLineEdit], [
                    self.line_description, self.date_processdate,
                    self.line_rationale
                ],
                mandatorysources=[0],
                validationfunction=tval.Quality().processsteps,
                date_format=cons.DATE_TIME_FORMAT)
            self.processsteps.horizontalHeader().setCascadingSectionResizes(
                False)
            self.processsteps.horizontalHeader().setStretchLastSection(False)
            self.processsteps.horizontalHeader().resizeSection(1, 260)
            self.processsteps.horizontalHeader().setDefaultSectionSize(260)
            self.processsteps.horizontalHeader().setMinimumSectionSize(260)
            self.processsteps.horizontalHeader().setSectionResizeMode(
                1, qwidgets.QHeaderView.Fixed)
            self.processsteps.horizontalHeader().setSectionResizeMode(
                2, qwidgets.QHeaderView.Stretch)
            self.processsteps.horizontalHeader().setSectionResizeMode(
                0, qwidgets.QHeaderView.Stretch)
            self.date_processdate.setDate(QDate.currentDate())

            tla.setupListView(self.source, QgsFilterLineEdit, self)
            tla.setupMandatoryField(self, self.statement, self.label_statement,
                                    u"Elemento obrigatório.")
        else:
            self.panel_hist.hide()

        for btn in self.findChildren(qwidgets.QPushButton,
                                     qcore.QRegExp('btn_*')):
            if '_add_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/plus_icon.svg'))
                btn.setText('')
            elif '_del_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/delete_icon.svg'))
                btn.setText('')
            elif '_clear_' in btn.objectName():
                btn.setIcon(
                    qgui.QIcon(':/resourcesFolder/icons/delete_field.svg'))
        for info in self.findChildren(qwidgets.QPushButton,
                                      qcore.QRegExp('info_*')):
            info.setIcon(qgui.QIcon(':/resourcesFolder/icons/help_icon.svg'))
            info.setText('')
            info.pressed.connect(self.printHelp)

        tla.setupMandatoryField(self, self.conformancetitle,
                                self.label_conformancetitle,
                                u"Elemento obrigatório.")
        tla.setupMandatoryField(self, self.conformancedate,
                                self.label_conformancedate,
                                u"Elemento obrigatório.")
        tla.setupMandatoryField(self, self.conformancedatetype,
                                self.label_conformancedatetype,
                                u"Elemento obrigatório.")
        tla.setupMandatoryField(self, self.conformanceexplanation,
                                self.label_conformanceexplanation,
                                u"Elemento obrigatório.")

        self.eater = tla.EatWheel()
        for x in self.findChildren(qwidgets.QComboBox):
            x.installEventFilter(self.eater)
            x.setFocusPolicy(Qt.StrongFocus)
        for x in self.findChildren(QDateEdit):
            x.installEventFilter(self.eater)
            x.setFocusPolicy(Qt.StrongFocus)
        self.btn_clear_conformancedate.pressed.connect(
            lambda: self.conformancedate.clear())

        self.btn_INSPIRE.pressed.connect(self.set_default_dataquality_report)
        self.statement.textChanged.connect(self.checkHistText)
        self.hist_data.stateChanged.connect(self.setHist)

    @qcore.pyqtSlot()
    def printHelp(self):
        QToolTip.showText(
            QCursor.pos(),
            tla.formatTooltip(self.superParent.helps['qualityPanel'][
                self.sender().objectName()]), None)

    def get_data(self, md):

        dq = snimarProfileModel.DQ_DataQuality()
        if self.conformancedate.get_date() is not None:
            dq.conformancedate.append(
                self.conformancedate.get_date().toString('yyyy-MM-dd'))

        dq.conformancedatetype.append(
            self.conformancedatetype.itemData(
                self.conformancedatetype.currentIndex()))
        dq.conformancetitle.append(self.conformancetitle.text())
        dq.conformanceexplanation = self.conformanceexplanation.text()
        dq.conformancedegree.append(self.conformancedegree.isChecked())

        if self.scope == CONS.Scopes.CDG or self.scope == CONS.Scopes.SERIES:
            dq.lineage = self.statement.toPlainText()
            dq.lineageEN = self.statementEN.toPlainText()
            dq.sources = self.source.model().listElements
            temp = []
            for row in self.processsteps.model().matrix:
                temp.append([row[0], row[1].replace(" ", "T"), row[2]])
            dq.process_steps = temp

        md.dataquality = dq
        return md

    def set_data(self, md=None):
        if md is not None and md.dataquality is not None:
            report = snimarProfileModel.get_domainconsistency_report(md)
            self.conformancetitle.setText(report['specification'])
            if report['date'] is not None:
                self.conformancedate.setDate(
                    qcore.QDate.fromString(report['date'], cons.DATE_FORMAT))
            if report['datetype'] is not None and report['datetype'].strip(
            ) != "":
                self.conformancedatetype.setCurrentIndex(
                    self.conformancedatetype.findText(
                        self.combo_items_ci_datetypecode[
                            report['datetype']].term_pt))
            self.conformanceexplanation.setText(report['explanation'])
            self.conformancedegree.setChecked(True if report['pass'] ==
                                              'true' else False)

            if self.scope == CONS.Scopes.CDG or self.scope == CONS.Scopes.SERIES:
                self.statement.setPlainText(md.dataquality.lineage)
                self.statementEN.setPlainText(md.dataquality.lineageEN)

                for source in md.dataquality.sources:
                    self.source.model().addNewRow(source)

                # Process Steps (aka etapas do processo)
                for row in md.dataquality.process_steps:
                    if type(row[1]) == str:
                        if re.match('^\d\d\d\d-\d\d-\d\d$', row[1]):
                            dt = row[1].strip() + "T00:00:00"
                        else:
                            dt = row[1]
                        dt = QDateTime.fromString(dt.replace(
                            "T", " "), cons.DATE_TIME_FORMAT).toString(
                                cons.DATE_TIME_FORMAT)
                    else:
                        dt = ""
                    self.processsteps.model().addNewRow([row[0], dt, row[2]])
                self.date_processdate.setDate(QDate.currentDate())

    def set_default_dataquality_report(self):
        """
        Sets the report title, date and datetype to the required values specified
        by the INSPIRE Metadata profile.
        """
        if self.scope == CONS.Scopes.SERVICES:
            self.conformancetitle.setText(CONS.INSPIRE_TEXT_SERVICE)
            self.conformancedate.set_date(
                qcore.QDate.fromString(CONS.INSPIRE_DATE_SERVICE,
                                       cons.DATE_FORMAT))
        else:
            self.conformancetitle.setText(CONS.INSPIRE_TEXT_DATASET)
            self.conformancedate.set_date(
                qcore.QDate.fromString(CONS.INSPIRE_DATE_DATASET,
                                       cons.DATE_FORMAT))
        self.conformancedatetype.setCurrentIndex(
            self.conformancedatetype.findText(u'Publicação'))
        self.conformanceexplanation.setText(u'Ver a especificação citada.')
        self.setWindowModified(True)

    def checkHistText(self):
        if regex_pt.search(self.statement.toPlainText()) is not None:
            self.hist_data.setChecked(True)
        else:
            self.hist_data.setChecked(False)

    def setHist(self):
        stat_pt = regex_pt.sub('', self.statement.toPlainText())
        stat_en = regex_en.sub('', self.statementEN.toPlainText())
        if self.hist_data.checkState():
            self.statement.setPlainText(expr_pt + stat_pt)
            self.statementEN.setPlainText(expr_en + stat_en)
        else:
            self.statement.setPlainText(stat_pt)
            self.statementEN.setPlainText(stat_en)
        self.statement.moveCursor(QTextCursor.End)
    def __init__(self, parent, combos, coord=None):

        if not coord:
            coord = ["", None, "", None, None]
        super(FreeKeyWordsDialog, self).__init__(parent)
        if platform.system() != "Linux":
            font = QFont()
            font.setFamily(u"Segoe UI Symbol")
            self.setFont(font)
        self.setupUi(self)
        self.date_date_2 = NullQDateEditWrapper(self.date_date_2)
        self.setModal(True)
        self.combo_dataType.setModel(
            CustomComboBoxModel(
                self, [None] +
                sorted(list(combos[1].values()), key=lambda x: x.term_pt)))
        self.combo_dataType.setCurrentIndex(0)
        self.date_date_2.clear()
        self.combo_type.setModel(
            CustomComboBoxModel(
                self, [None] +
                sorted(list(combos[0].values()), key=lambda x: x.term_pt)))
        self.btn_cancelar.clicked.connect(lambda: self.done(QDialog.Rejected))
        self.line_keyword.textChanged.connect(lambda: self.check_fields())
        self.line_thesaurus.textChanged.connect(lambda: self.check_fields())
        self.combo_type.currentIndexChanged.connect(
            lambda: self.check_fields())
        self.combo_dataType.currentIndexChanged.connect(
            lambda: self.check_fields())
        self.date_date_2.get_original().dateTimeChanged.connect(
            lambda: self.check_fields())
        self.btn_adicionar.clicked.connect(lambda: self.done(QDialog.Accepted))
        self.btn_adicionar.setDisabled(True)
        self.combo_type.setDisabled(True)
        self.line_thesaurus.setDisabled(True)
        self.date_date_2.setDisabled(True)
        self.btn_clear_date_date_2.setDisabled(True)
        self.combo_dataType.setDisabled(True)

        self.line_keyword.setText(coord[0])
        if coord[1] is not None:
            buf = combos[0].get(coord[1].term_pt, None)
            if buf is not None:
                self.combo_type.setCurrentIndex(
                    self.combo_type.findText(buf.term_pt))
        self.line_thesaurus.setText(coord[2])
        if coord[3] is None:
            self.date_date_2.clear()
        else:
            self.date_date_2.setDate(coord[3])
        if coord[4] is not None:
            buf = combos[1].get(coord[4].term, None)
            if buf is not None:
                self.combo_dataType.setCurrentIndex(
                    self.combo_dataType.findText(buf.term_pt))
        self.superParent = None
        temp = self.parent()
        while self.superParent is None:
            if issubclass(type(temp), keywordsPanel.Ui_keywords):
                self.superParent = temp
            else:
                temp = temp.parent()

        for info in self.findChildren(qwidgets.QPushButton, QRegExp('info_*')):
            info.setIcon(qgui.QIcon(':/resourcesFolder/icons/help_icon.svg'))
            info.setText('')
            info.pressed.connect(self.printHelp)

        self.btn_clear_date_date_2.setIcon(
            qgui.QIcon(':/resourcesFolder/icons/delete_field.svg'))
        self.btn_clear_date_date_2.pressed.connect(
            lambda: self.date_date_2.clear())
class FreeKeyWordsDialog(QDialog, chooseFreeKeywordDialog.Ui_dialogDate):
    def __init__(self, parent, combos, coord=None):

        if not coord:
            coord = ["", None, "", None, None]
        super(FreeKeyWordsDialog, self).__init__(parent)
        if platform.system() != "Linux":
            font = QFont()
            font.setFamily(u"Segoe UI Symbol")
            self.setFont(font)
        self.setupUi(self)
        self.date_date_2 = NullQDateEditWrapper(self.date_date_2)
        self.setModal(True)
        self.combo_dataType.setModel(
            CustomComboBoxModel(
                self, [None] +
                sorted(list(combos[1].values()), key=lambda x: x.term_pt)))
        self.combo_dataType.setCurrentIndex(0)
        self.date_date_2.clear()
        self.combo_type.setModel(
            CustomComboBoxModel(
                self, [None] +
                sorted(list(combos[0].values()), key=lambda x: x.term_pt)))
        self.btn_cancelar.clicked.connect(lambda: self.done(QDialog.Rejected))
        self.line_keyword.textChanged.connect(lambda: self.check_fields())
        self.line_thesaurus.textChanged.connect(lambda: self.check_fields())
        self.combo_type.currentIndexChanged.connect(
            lambda: self.check_fields())
        self.combo_dataType.currentIndexChanged.connect(
            lambda: self.check_fields())
        self.date_date_2.get_original().dateTimeChanged.connect(
            lambda: self.check_fields())
        self.btn_adicionar.clicked.connect(lambda: self.done(QDialog.Accepted))
        self.btn_adicionar.setDisabled(True)
        self.combo_type.setDisabled(True)
        self.line_thesaurus.setDisabled(True)
        self.date_date_2.setDisabled(True)
        self.btn_clear_date_date_2.setDisabled(True)
        self.combo_dataType.setDisabled(True)

        self.line_keyword.setText(coord[0])
        if coord[1] is not None:
            buf = combos[0].get(coord[1].term_pt, None)
            if buf is not None:
                self.combo_type.setCurrentIndex(
                    self.combo_type.findText(buf.term_pt))
        self.line_thesaurus.setText(coord[2])
        if coord[3] is None:
            self.date_date_2.clear()
        else:
            self.date_date_2.setDate(coord[3])
        if coord[4] is not None:
            buf = combos[1].get(coord[4].term, None)
            if buf is not None:
                self.combo_dataType.setCurrentIndex(
                    self.combo_dataType.findText(buf.term_pt))
        self.superParent = None
        temp = self.parent()
        while self.superParent is None:
            if issubclass(type(temp), keywordsPanel.Ui_keywords):
                self.superParent = temp
            else:
                temp = temp.parent()

        for info in self.findChildren(qwidgets.QPushButton, QRegExp('info_*')):
            info.setIcon(qgui.QIcon(':/resourcesFolder/icons/help_icon.svg'))
            info.setText('')
            info.pressed.connect(self.printHelp)

        self.btn_clear_date_date_2.setIcon(
            qgui.QIcon(':/resourcesFolder/icons/delete_field.svg'))
        self.btn_clear_date_date_2.pressed.connect(
            lambda: self.date_date_2.clear())

    def get_data_list(self):

        data = self.date_date_2.get_date()
        if self.line_thesaurus.text().strip() == "":
            data = None
            self.combo_dataType.setCurrentIndex(0)

        return [
            self.line_keyword.text().strip(),
            self.combo_type.itemData(self.combo_type.currentIndex()),
            self.line_thesaurus.text().strip(), data,
            self.combo_dataType.itemData(self.combo_dataType.currentIndex())
        ]

    def check_fields(self):
        if len(self.line_keyword.text().strip()) == 0:
            self.setMandatory(self.label_line_keyword,
                              u"Elemento Obrigatório.")
            self.unsetMandatory(self.label_date_date_2)
            self.unsetMandatory(self.label_combo_dataType)
            self.btn_adicionar.setDisabled(True)
            self.combo_type.setDisabled(True)
            self.line_thesaurus.setDisabled(True)
            self.date_date_2.setDisabled(True)
            self.btn_clear_date_date_2.setDisabled(True)
            self.combo_dataType.setDisabled(True)
        elif len(self.line_thesaurus.text().strip()) == 0:
            self.unsetMandatory(self.label_line_keyword)
            self.unsetMandatory(self.label_date_date_2)
            self.unsetMandatory(self.label_combo_dataType)
            self.combo_type.setDisabled(False)
            self.line_thesaurus.setDisabled(False)
            self.btn_adicionar.setDisabled(False)
            self.date_date_2.setDisabled(True)
            self.btn_clear_date_date_2.setDisabled(True)
            self.combo_dataType.setDisabled(True)
        elif not self.date_date_2.get_date() is None and len(
                self.combo_dataType.currentText()) != 0:
            self.combo_type.setDisabled(False)
            self.line_thesaurus.setDisabled(False)
            self.btn_adicionar.setDisabled(False)
            self.date_date_2.setDisabled(False)
            self.btn_clear_date_date_2.setDisabled(False)
            self.combo_dataType.setDisabled(False)
            self.unsetMandatory(self.label_line_keyword)
            self.unsetMandatory(self.label_date_date_2)
            self.unsetMandatory(self.label_combo_dataType)
        else:
            self.unsetMandatory(self.label_line_keyword)
            self.unsetMandatory(self.label_date_date_2)
            self.unsetMandatory(self.label_combo_dataType)
            self.combo_type.setDisabled(False)
            self.line_thesaurus.setDisabled(False)
            self.btn_adicionar.setDisabled(True)
            self.date_date_2.setDisabled(False)
            self.btn_clear_date_date_2.setDisabled(False)
            self.combo_dataType.setDisabled(False)
            if self.date_date_2.get_date() is None:
                self.setMandatory(self.label_date_date_2,
                                  u"Elemento Obrigatório.")
            if len(self.combo_dataType.currentText()) == 0:
                self.setMandatory(self.label_combo_dataType,
                                  u"Elemento Obrigatório.")

    def setMandatory(self, label, toolTipmsg):
        label_text = tla.setLabelRed(label.text() + u' ' + u'\u26a0')
        label.setText(label_text)
        label.setToolTip(tla.formatTooltip(toolTipmsg))

    def unsetMandatory(self, label):
        label_text = tla.unsetLabelRed(label.text().replace(u'\u26a0',
                                                            '')).strip()
        label.setText(label_text)
        label.setToolTip(u"")

    def printHelp(self):
        QToolTip.showText(
            QCursor.pos(),
            tla.formatTooltip(
                self.superParent.superParent.helps['chooseFreeKeywordDialog'][
                    self.sender().objectName()]), None)