Beispiel #1
0
def get_filter_string(self, list_mode):
    if self.chosen_program == "cria":
        if list_mode == "sage":
            # string_0 = self.comboBox_klassen.currentText()
            string_1 = self.comboBox_kapitel.currentText()
            string_2 = self.comboBox_unterkapitel.currentText()
        elif list_mode == "feedback":
            # string_0 = self.comboBox_klassen_fb_cria.currentText()
            string_1 = self.comboBox_kapitel_fb_cria.currentText()
            string_2 = self.comboBox_unterkapitel_fb_cria.currentText()

        filter_string = ""
        # if not is_empty(string_0):
        #     filter_string = "k" + string_0[0] + "."

        if not is_empty(string_1):
            filter_string = extract_topic_abbr(string_1)
            if not is_empty(string_2):
                filter_string = (filter_string + "." +
                                 extract_topic_abbr(string_2))

        return filter_string

    if self.chosen_program == "lama":
        if list_mode == "sage":
            # if self.comboBox_gk.currentText() == 'Zusatzthemen':
            #     string_0 = ""
            # else:
            string_0 = self.comboBox_gk.currentText()
            topic = extract_topic_abbr(self.comboBox_gk_num.currentText())

            if topic != None:
                string_1 = topic
            else:
                string_1 = self.comboBox_gk_num.currentText()
        elif list_mode == "feedback":
            string_0 = self.comboBox_fb.currentText()
            topic = extract_topic_abbr(self.comboBox_fb_num.currentText())
            if topic != None:
                string_1 = topic
            else:
                string_1 = self.comboBox_fb_num.currentText()

        if not is_empty(string_0):
            if string_0 == 'Zusatzthemen':
                filter_string = "zusatz_" + string_1.upper()
            else:
                filter_string = string_0
                if not is_empty(string_1):
                    filter_string = filter_string + " " + string_1
            return filter_string
        else:
            return ""
def create_info_box(_file):
    titel = _file['titel']
    gk = ', '.join(_file['themen'])
    if _file['af']!=None:
        try:
            af = dict_aufgabenformate[_file['af']]
        except KeyError:
            print('Fehler in der Datenbank - Aufgabe {0} (AF = {1})'.format(_file['name'],_file['af']))
            af = "Fehler"
        af = "Aufgabenformat: {}\\\\".format(af)
    else:
        af = ""
    if _file['klasse'] == None:
        klasse = "-"
    else:
        klasse = _file['klasse'][-1]
    quelle = _file['quelle']
    if not is_empty(_file['bilder']):
        bilder = "\\\\\nBilder: {}".format(_file['bilder'])
    else:
        bilder = ""

    info_box = """
\info{{\\fbox{{\\begin{{minipage}}{{0.98\\textwidth}}
Titel: {0}\\\\
Grundkompetenz(en): {1}\\\\
{2}
Klasse: {3}\\\\
Quelle: {4}{5}
\end{{minipage}}}}}}
""".format(titel, gk, af, klasse, quelle, bilder)

    return info_box
def refresh_ddb(self, auto_update=False):
    QtWidgets.QApplication.setOverrideCursor(
        QtGui.QCursor(QtCore.Qt.WaitCursor))

    if self.developer_mode_active == True:
        text = 'Änderungen überprüfen ...'
    elif auto_update == 'mac':
        text = "Datenbank wird vor dem Update aktualisiert ..."
    else:
        text = "Datenbank wird aktualisiert. Bitte warten ..."

    if check_internet_connection() == False:
        QtWidgets.QApplication.restoreOverrideCursor()
        critical_window("""
Stellen Sie sicher, dass eine Verbindung zum Internet besteht und versuchen Sie es erneut.
        """,
                        titel="Keine Internetverbindung")
        return

    if self.developer_mode_active == True:
        working_window(Worker_CheckChanges(), text, self)
        if not is_empty(self.worker_response):
            QtWidgets.QApplication.restoreOverrideCursor()
            response = question_window(
                """
        Es befinden sich lokale Änderungen in Ihrer Datenbank. Durch das Aktualisieren der Datenbank werden alle lokalen Änderungen UNWIDERRUFLICH gelöscht!

        Lokale Änderungen können durch "Datei - Datenbank hochladen" online gespeichert werden. 

        Sind Sie sicher, dass Sie die lokalen Änderungen unwiderruflich löschen möchten? 
                    """,
                titel="Lokale Änderungen löschen?",
                detailed_text="""
        Geänderte/Gelöschte Dateien: {0} \n\n
        Neu erstellte Dateien: {1}            
                    """.format(self.worker_response[0],
                               self.worker_response[1]),
                buttontext_yes="Lokale Änderungen löschen",
                buttontext_no="Abbrechen",
                default="no")
            if response == False:
                return
            QtWidgets.QApplication.setOverrideCursor(
                QtGui.QCursor(QtCore.Qt.WaitCursor))
        text = "Datenbank wird aktualisiert. Bitte warten ..."

    working_window(Worker_RefreshDDB(), text, self)

    QtWidgets.QApplication.restoreOverrideCursor()

    if auto_update != True:
        if self.reset_successfull == False:
            warning_window(
                "Der neueste Stand der Datenbank konnte nicht heruntergeladen werden. Stellen Sie sicher, dass eine Verbindung zum Internet besteht und versuchen Sie es erneut."
            )
        else:
            information_window(
                "Die Datenbank ist jetzt auf dem neuesten Stand!")
def build_pdf_file(ui, folder_name, file_name, latex_output_file):
    if sys.platform.startswith("linux") or sys.platform.startswith("darwin"):
        if "Teildokument" in file_name:
            terminal_command = 'cd "{0}" ; latex -interaction=nonstopmode --synctex=-1 "{1}.tex" ; dvips "{1}.dvi" ; ps2pdf -dNOSAFER -dALLOWPSTRANSPARENCY "{1}.ps"'.format(
                folder_name, file_name
            )        
        else:
            terminal_command = 'cd "{0}" ; latex -interaction=nonstopmode --synctex=-1 "{1}.tex" ; dvips "{1}.dvi" ; ps2pdf -dNOSAFER -dALLOWPSTRANSPARENCY "{1}.ps"'.format(
                folder_name, file_name
            )
         
        process = subprocess.Popen(
            'cd "{0}" ; latex -interaction=nonstopmode --synctex=-1 "{1}.tex" ; dvips "{1}.dvi" ; ps2pdf -dNOSAFER -dALLOWPSTRANSPARENCY "{1}.ps"'.format(
                folder_name, file_name
            ),
            stdout=subprocess.PIPE,
            shell=True,
        )

    else:
        drive_programm = os.path.splitdrive(path_programm)[0]
        drive_save = os.path.splitdrive(folder_name)[0]

        if drive_programm.upper() != drive_save.upper():
            drive = drive_save.upper()
        else:
            drive = ""

        if is_empty(drive):
            terminal_command = 'cd "{0}" & latex -interaction=nonstopmode --synctex=-1 "{1}.tex" & latex -interaction=nonstopmode --synctex=-1 "{1}.tex" & dvips "{1}.dvi" & ps2pdf -dNOSAFER -dALLOWPSTRANSPARENCY "{1}.ps"'.format(
                folder_name, file_name
            )
        else:
            terminal_command = '{0} & cd "{1}" & latex -interaction=nonstopmode --synctex=-1 "{2}.tex" & latex -interaction=nonstopmode --synctex=-1 "{2}.tex" & dvips "{2}.dvi" & ps2pdf -dNOSAFER -dALLOWPSTRANSPARENCY "{2}.ps"'.format(
                drive, folder_name, file_name
            )


        process = subprocess.Popen(
            terminal_command,
            cwd=os.path.splitdrive(path_programm)[0],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            shell=True
        )


    return process
Beispiel #5
0
 def string_included_lama(value):
     if "zusatz_" in filter_string:
         string = filter_string.replace("zusatz_", "")
         if is_empty(string):
             for all in zusatzthemen_beschreibung.keys():
                 if value.startswith(all.upper()) and (filter_number(
                         value, line_entry) == True):
                     return True
             return False
     else:
         string = filter_string
     if (value.replace("-L", "").startswith(string)) and (filter_number(
             value, line_entry) == True):
         return True
     else:
         return False
def get_titlepage_vorschau(self, dict_titlepage, ausgabetyp, maximum, gruppe):
    datum_kurz, datum = get_datum(self)
    dict_titlepage = check_if_hide_all_exists(dict_titlepage)

    pkt_typ1 = self.get_punkteverteilung()[1]
    pkt_typ2 = self.get_punkteverteilung()[2]


    if (
        self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"]
        == "Grundkompetenzcheck"
    ):

        if ausgabetyp == "schularbeit" and maximum > 2:
            gruppe_name = " -- " + self.dict_gruppen[gruppe]
        else:
            gruppe_name = ""

        if is_empty(self.dict_all_infos_for_file["data_gesamt"]["Klasse"]):
            klasse = ""
        else:
            klasse = self.dict_all_infos_for_file["data_gesamt"]["Klasse"]

        if self.dict_all_infos_for_file["data_gesamt"]["#"]==0:
            titlepage = (
                "\\textsc{{Grundkompetenzcheck{0}}}  \\hfill {1} \\hfill \\textsc{{Name:}} \\rule{{5cm}}{{0.4pt}} \\hfill {2}"
                "\\normalsize \\\ \\vspace{{\\baselineskip}} \n\n".format(gruppe_name, klasse, datum_kurz)
            )
        else:
            titlepage = (
                "\\textsc{{{0}. Grundkompetenzcheck{1}}} \\hfill {2} \\hfill \\textsc{{Name:}} \\rule{{5cm}}{{0.4pt}} \\hfill {3}"
                "\\normalsize \\\ \\vspace{{\\baselineskip}} \n\n".format(self.dict_all_infos_for_file["data_gesamt"]["#"], gruppe_name, klasse,datum_kurz)
            )

        return titlepage

    elif self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] == "Übungsblatt":
        titlepage = "Übungsblatt"
        if self.lineEdit_klasse.text().strip() != "":
            titlepage = titlepage + " -- {}".format(self.lineEdit_klasse.text())

        titlepage = "\\subsection{{{0}}}".format(titlepage)

        return titlepage

    # elif self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"] == "Quiz":
    #     titlepage = (
    #         "\\title{{Typ1 - Quiz}} \n"
    #         "\subtitle{{Anzahl der Aufgaben: {0}}} \n"
    #         "\maketitle \n"
    #         "\subtitle{{}} \n"
    #     ).format(len(self.list_alle_aufgaben_sage))

    #     return titlepage

    elif dict_titlepage["hide_all"] == True:

        if (
            self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"]
            == "Wiederholungsprüfung"
        ):
            subsection = self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"]
        else:
            if self.groupBox_nummer.isEnabled() == False:
                subsection = self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"]
            else:
                if self.dict_all_infos_for_file["data_gesamt"]["#"]==0:
                    subsection = self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"]
                else:                    
                    subsection = (
                        str(self.dict_all_infos_for_file["data_gesamt"]["#"])
                        + ". "
                        + self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"]
                    )

        titlepage = "\\subsection{{{0} \\hfill {1}}}".format(subsection, datum_kurz)

        # if self.dict_all_infos_for_file["data_gesamt"]["Beurteilung"] == "br":

        #     beurteilungsraster = (
        #         "\\beurteilung{{0.875}}{{0.75}}{{0.625}}{{1/2}}{{ % Prozentschluessel\n"
        #         "T1={{{0}}}, % Punkte im Teil 1\n"
        #         "T2={{{1}}}, % Punkte im Teil 2\n"
        #         "}}\n\n".format(pkt_typ1, pkt_typ2)
        #     )

        #     titlepage = titlepage + beurteilungsraster
        return titlepage

    else:
        if dict_titlepage["logo"] == True:
            logo_name = os.path.basename(dict_titlepage["logo_path"])
            logo_titlepage_path = os.path.join(path_localappdata_lama, "Teildokument", logo_name)

            if os.path.isfile(logo_titlepage_path):
                logo_input = (
                    "\\begin{{minipage}}[t]{{0.4\\textwidth}} \\vspace{{0pt}}\n"
                    "\\includegraphics[width=1\\textwidth]{{{0}}}\n"
                    "\\end{{minipage}} \\\ [1cm] \n".format(logo_name)
                )
            else:
                warning_window(
                    "Das Logo konnte nicht gefunden werden.",
                    "Bitte suchen Sie ein Logo unter: \n\nTitelblatt anpassen - Durchsuchen",
                    "Kein Logo gefunden",
                )
                logo_input = "\\null\\vspace{3cm}\n\n"
        else:
            logo_input = "\\null\\vspace{3cm}\n\n"
            # logo_input = "~\\vfil \n"

        if dict_titlepage["titel"] == True:
            if (
                self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"]
                == "Wiederholungsprüfung"
            ):
                title_header = "\\textsc{{\\Huge Wiederholungsprüfung}} \\\ [0.5cm]"
            elif (
                self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"]
                == "Schularbeit"
                or self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"]
                == "Wiederholungsschularbeit"
                or self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"]
                == "Nachschularbeit"
            ):
                if self.dict_all_infos_for_file["data_gesamt"]["#"]==0:
                    title_header = "\\textsc{{\\Huge Mathematikschularbeit}}"    
                else:    
                    title_header = "\\textsc{{\\Huge {0}. Mathematikschularbeit}}".format(
                        self.dict_all_infos_for_file["data_gesamt"]["#"]
                    )

                if (
                    self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"]
                    == "Wiederholungsschularbeit"
                ):
                    add_on = "Wiederholung"
                elif (
                    self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"]
                    == "Nachschularbeit"
                ):
                    add_on = "Nachschularbeit"
                else:
                    add_on = None

                if add_on != None:
                    title_header = (
                        title_header
                        + "\\\ [0.5cm] \\textsc{{\Large {0}}}".format(add_on)
                    )

                title_header = title_header + "\\\ [0.5cm] \n\n"

            else:
                title_header = "\\textsc{{\\Huge {0}}} \\\ [2cm]".format(
                    self.dict_all_infos_for_file["data_gesamt"]["Pruefungstyp"]
                )
        else:
            title_header = ""

        if dict_titlepage["datum"] == True:
            datum_text = "\\textsc{{\Large am {0}}}\\\ [1cm] \n\n".format(datum)
        else:
            datum_text = ""

        if dict_titlepage["klasse"] == True:
            klasse = "\\textsc{{\Large Klasse {0}}} \\\ [1cm] \n\n".format(
                self.dict_all_infos_for_file["data_gesamt"]["Klasse"]
            )
        else:
            klasse = ""

        if ausgabetyp == "schularbeit" and maximum > 2:
            gruppe_name = self.dict_gruppen[gruppe]
            gruppe_name = "\\textsc{{\\Large Gruppe {0}}} \\\ [1cm]\n\n".format(gruppe_name)
        else:
            gruppe_name = ""

        if dict_titlepage["name"] == True:
            name = "\\Large Name: \\rule{8cm}{0.4pt} \\\ [1cm]\n\n"
        else:
            name = ""

        if dict_titlepage["note"] == True:
            note = "\\Large Note: \\rule{8cm}{0.4pt} \\\ [1cm]\n\n"
        else:
            note = "\\vspace{1cm}\n\n"

        if dict_titlepage["unterschrift"] == True:
            unterschrift = "\\Large Unterschrift: \\rule{8cm}{0.4pt} \\\ [1cm]\n\n"
        else:
            unterschrift = "\\vspace{1cm}\n\n"

        if self.dict_all_infos_for_file["data_gesamt"]["Beurteilung"] == "br":
            beurteilungsraster = (
                "\large\\beurteilung{{0.875}}{{0.75}}{{0.625}}{{1/2}}{{ % Prozentschluessel\n"
                "T1={{{0}}}, % Punkte im Teil 1\n"
                "T2={{{1}}}, % Punkte im Teil 2\n"
                "}}\n\n".format(pkt_typ1, pkt_typ2)
            )

        else:
            beurteilungsraster = ""

        titlepage = (
            "\\begin{{titlepage}}\n\n"
            "\\flushright\n"
            "{0}"
            "{1}"
            "{2}"
            "{3}"
            "{4}"
            "{5}"
            "{6}"
            "{7}"
            "\\vspace{{1cm}}\n\n{8}"
            "\\end{{titlepage}}\n\n".format(
                logo_input,
                title_header,
                datum_text,
                klasse,
                gruppe_name,
                name,
                note,
                unterschrift,
                beurteilungsraster,
            )
        )

        return titlepage
def open_pdf_file(folder_name, file_name):
    drive_database = os.path.splitdrive(path_localappdata_lama)[0]

    drive_location = os.path.splitdrive(sys.argv[-1])[0]

    if drive_location.upper() != drive_database.upper():
        drive = drive_database.upper()
    else:
        drive = ""


    try:
        with open(lama_settings_file, "r", encoding="utf8") as f:
            lama_settings = json.load(f)
        path_pdf_reader = '{}'.format(lama_settings['pdf_reader'])
    except (FileNotFoundError, KeyError):
        path_pdf_reader = ""

    file_path = os.path.join(folder_name, file_name)

    

    if sys.platform.startswith("linux"):
        file_path = file_path + ".pdf"
        webbrowser.open(file_path, new=2, autoraise=True)
        # os.system("xdg-open {0}.pdf".format(file_path))
        # subprocess.run(
        #     [
        #         # "sudo",
        #         "xdg-open",
        #         "{0}.pdf".format(file_path),
        #     ]
        # )
    elif sys.platform.startswith("darwin"):
        if os.path.exists(path_pdf_reader) == False:
            if is_empty(path_pdf_reader)== False:
                warning_window("Der ausgewählte Pfad des Pdf-Readers zum Öffnen der Dateien ist fehlerhaft. Bitte korrigieren oder löschen Sie diesen.")
            
            subprocess.run(
                ["open", "{0}.pdf".format(file_path)]
            )
        else:
            subprocess.run(
                ["open","-a","{}".format(path_pdf_reader), "{0}.pdf".format(file_path)]
            )
         
    else:
        if os.path.isfile(path_pdf_reader) == False:
            if is_empty(path_pdf_reader)== False:
                warning_window("Der ausgewählte Pfad des Pdf-Readers zum Öffnen der Dateien ist fehlerhaft. Bitte korrigieren oder löschen Sie diesen.")
            path_pdf_reader = ""
        else:
            path_pdf_reader = '"{}"'.format(path_pdf_reader) 

        if is_empty(drive):
            subprocess.Popen(
                'cd "{0}" & {1} {2}.pdf'.format(folder_name,path_pdf_reader, file_name),
                shell = True).poll()
        else:
            drive = "{} &".format(drive)
            subprocess.Popen(
                '{0} cd "{1}" & {2} {3}.pdf'.format(drive, folder_name,path_pdf_reader, file_name),
                shell = True).poll()            
def check_if_suchbegriffe_is_empty(suchbegriffe):
    _list = ['themen', 'af', 'klasse', 'erweiterte_suche' ,'info']
    for all in _list:
        if not is_empty(suchbegriffe[all]) and suchbegriffe[all] != [None]:
            return False
    return True
def search_in_database(self,current_program, database,suchbegriffe):
    table = 'table_' + current_program
    table_lama = database.table(table)
    _file_ = Query()    

    string_in_list_af = lambda s: True if (s in suchbegriffe['af'] or is_empty(suchbegriffe['af'])) else False
    string_in_list_klasse = lambda s: True if (s in suchbegriffe['klasse'] or is_empty(suchbegriffe['klasse'])) else False
    string_in_list_info = lambda s: True if (s in suchbegriffe['info'] or is_empty(suchbegriffe['info'])) else False
    lineedit_in_erweitert = lambda s: True if (r"{}".format(suchbegriffe['erweiterte_suche'].lower()) in s.lower() or is_empty(suchbegriffe['erweiterte_suche'])) else False
 
    search_True = lambda s: True


    def include_drafts(value):
        if value == False:
            return True
        else:
            if self.cb_drafts.isChecked():
                return True
            else:
                return False
    
    def lineedit_in_bilder(value):
        for bilder in value:
            if suchbegriffe['erweiterte_suche'].lower() in bilder:
                return True
        return False
   
    if suchbegriffe['erweiterte_suche'] == "":
        erweiterte_suche = eval("_file_.titel.test(search_True)")
    elif self.comboBox_suchbegriffe.currentText() == "Titel":
        erweiterte_suche = eval("_file_.titel.test(lineedit_in_erweitert)")
    elif self.comboBox_suchbegriffe.currentText() == "Inhalt":
        erweiterte_suche = eval("_file_.content.test(lineedit_in_erweitert)")
    elif self.comboBox_suchbegriffe.currentText() == "Quelle":
        erweiterte_suche = eval("_file_.quelle.test(lineedit_in_erweitert)")
    elif self.comboBox_suchbegriffe.currentText() == "Bilder":
        erweiterte_suche = _file_.bilder.test(lineedit_in_bilder)

    gesammeltedateien = []
    if current_program == 'lama_1' or (current_program == 'cria' and self.combobox_searchtype.currentIndex()==0):
        if suchbegriffe['themen'] != []:
            gesammeltedateien = table_lama.search(
                (_file_.themen.any(suchbegriffe['themen'])) &
                (_file_.af.test(string_in_list_af)) &
                (_file_.klasse.test(string_in_list_klasse)) &
                (_file_.info.test(string_in_list_info)) &
                (erweiterte_suche) &
                (_file_.draft.test(include_drafts))
            )
        else:
            gesammeltedateien = table_lama.search(
                (_file_.af.test(string_in_list_af)) &
                # (_file_.klasse.test(string_in_list_klasse)) &
                (_file_.info.test(string_in_list_info)) &
                (erweiterte_suche) &
                (_file_.draft.test(include_drafts))
            )

    elif current_program == 'cria' and self.combobox_searchtype.currentIndex()==1:
        def themen_included(value):
            for all in suchbegriffe['themen']:
                if all not in value:
                    return False
            return True
        # 
        if suchbegriffe['themen'] != []:
            gesammeltedateien = table_lama.search(
                (_file_.themen.test(themen_included)) &
                (_file_.af.test(string_in_list_af)) &
                (_file_.klasse.test(string_in_list_klasse)) &
                (_file_.info.test(string_in_list_info)) &
                (erweiterte_suche) &
                (_file_.draft.test(include_drafts))
            )
        else:
            gesammeltedateien = table_lama.search(
                (_file_.af.test(string_in_list_af)) &
                # (_file_.klasse.test(string_in_list_klasse)) &
                (_file_.info.test(string_in_list_info)) &
                (erweiterte_suche) &
                (_file_.draft.test(include_drafts))
            )        
  
    elif current_program == 'lama_2':
        def gk_in_list(value):
            for all in value:
                if all not in suchbegriffe['themen']:
                    return False
            return True

        if suchbegriffe['themen'] == []:
            gesammeltedateien = table_lama.search(
                (_file_.klasse.test(string_in_list_klasse)) &
                (_file_.info.test(string_in_list_info)) &
                (erweiterte_suche) &
                (_file_.draft.test(include_drafts))
            )
        elif self.combobox_searchtype.currentIndex()==0:
            gesammeltedateien = table_lama.search(
                (_file_.themen.any(suchbegriffe['themen'])) &
                (_file_.klasse.test(string_in_list_klasse)) &
                (_file_.info.test(string_in_list_info)) &
                (erweiterte_suche) &
                (_file_.draft.test(include_drafts))
            )

        elif self.combobox_searchtype.currentIndex()==1:
            gesammeltedateien = table_lama.search(
                (_file_.themen.test(gk_in_list)) &
                (_file_.klasse.test(string_in_list_klasse)) &
                (_file_.info.test(string_in_list_info)) &
                (erweiterte_suche) &
                (_file_.draft.test(include_drafts))
            )      
        

    return gesammeltedateien
Beispiel #10
0
    def btn_move_pressed(self):
        filenames_fullpath = QtWidgets.QFileDialog.getOpenFileNames(
            None, "Dateien wählen", path_beispieleinreichung,
            "LaTeX Dateien (*.tex)")

        list_files_move = []
        for item in filenames_fullpath[0]:
            if os.path.isfile(os.path.join(path_beispieleinreichung, item)):
                list_files_move.append(item)

        if is_empty(list_files_move) == True:
            return

        for all in list_files_move:
            filename = os.path.basename(all)
            if "i." in filename:
                save_folder = "_database_inoffiziell"
            else:
                save_folder = "_database"

        for all in list_files_move:
            with open(all, "r", encoding="utf8") as file:
                content = file.read()

                content = content.replace("../Beispieleinreichung/Bilder",
                                          "../{0}/Bilder".format(save_folder))

            with open(all, "w", encoding="utf8") as file:
                file.write(content)

        number_images = 0
        for all in list_files_move:
            info = get_info_from_path(all)
            filename = os.path.basename(all)
            if info[0] == None:
                new_path = os.path.join(path_programm,
                                        "{0}".format(save_folder), info[1],
                                        "Einzelbeispiele", filename)
            elif info[0] == 2:
                new_path = os.path.join(
                    path_programm,
                    "{0}".format(save_folder),
                    "Typ2Aufgaben",
                    "Einzelbeispiele",
                    filename,
                )

            elif info[0] == 1:
                if info[2].lower() in zusatzthemen_beschreibung:
                    new_path = os.path.join(
                        path_programm,
                        "{0}".format(save_folder),
                        "Typ1Aufgaben",
                        "Zusatzthemen",
                        info[2],
                        filename,
                    )
                else:
                    gk, gk_num = info[2].split(" ")
                    if "-" in gk:
                        gk, _ = gk.split("-")
                    new_path = os.path.join(
                        path_programm,
                        "{0}".format(save_folder),
                        "Typ1Aufgaben",
                        "_Grundkompetenzen",
                        gk,
                        info[2],
                        "Einzelbeispiele",
                        filename,
                    )
            # elif info[0]==1 and info[1] != None:

            if os.path.isdir(os.path.dirname(new_path)) == False:
                os.makedirs(os.path.dirname(new_path))

            with open(all, "r", encoding="utf8") as file:
                content = file.read()

            shutil.move(all, new_path)

            if content.count("includegraphics") != 0:
                path_beispieleinreichung_images = os.path.join(
                    path_programm, "Beispieleinreichung", "Bilder")
                split_content = re.split(
                    "../{0}/Bilder/|.eps".format(save_folder), content)
                for i in range(1, len(split_content), 2):
                    image_name = split_content[i]
                    image_name = image_name + ".eps"
                    old_image_path = os.path.join(
                        path_beispieleinreichung_images, image_name)
                    new_image_path = os.path.join(path_programm,
                                                  "{0}".format(save_folder),
                                                  "Bilder", image_name)

                    shutil.move(
                        os.path.join(path_beispieleinreichung_images,
                                     image_name),
                        os.path.join(path_programm, "{0}".format(save_folder),
                                     "Bilder", image_name),
                    )
                number_images += content.count("includegraphics")

        information_window(
            "Es wurden {0} Aufgaben und {1} Bild(er) in die Datenbank verschoben!"
            .format(len(list_files_move), number_images),
            titel="Erfolgreich verschoben",
        )

        sys.exit(0)
Beispiel #11
0
def search_in_database(self, current_program, database, suchbegriffe):
    table = 'table_' + current_program
    table_lama = database.table(table)
    _file_ = Query()

    string_in_list_af = lambda s: True if (s in suchbegriffe['af'] or is_empty(
        suchbegriffe['af'])) else False
    string_in_list_klasse = lambda s: True if (s in suchbegriffe[
        'klasse'] or is_empty(suchbegriffe['klasse'])) else False
    string_in_list_info = lambda s: True if (s in suchbegriffe[
        'info'] or is_empty(suchbegriffe['info'])) else False
    lineedit_in_erweitert = lambda s: True if (r"{}".format(suchbegriffe[
        'erweiterte_suche'].lower()) in s.lower() or is_empty(suchbegriffe[
            'erweiterte_suche'])) else False

    search_True = lambda s: True

    def include_drafts(value):
        if value == False:
            return True
        else:
            if self.cb_drafts.isChecked():
                return True
            else:
                return False

    def lineedit_in_bilder(value):
        for bilder in value:
            if suchbegriffe['erweiterte_suche'].lower() in bilder:
                return True
        return False

    def lineedit_in_name(value):
        simplified_search = shorten_gk(
            suchbegriffe['erweiterte_suche'].lower())
        simplified_value = shorten_gk(value)
        # print(short_gk)#

        _list = simplified_search.split("-")
        gk_search = _list[0]
        num_search = _list[-1]

        _list = simplified_value.split("-")
        gk_value = _list[0]
        num_value = _list[-1]

        if "*" in gk_search:
            gk_search = gk_search.replace("*", ".*")
            x = re.fullmatch("{}".format(gk_search), gk_value)
            if x == None:
                return False
        elif gk_search != gk_value:
            return False

        if "*" in num_search:
            num_search = num_search.replace("*", ".*")
            x = re.fullmatch("{}".format(num_search), num_value)
            if x == None:
                return False
        elif num_search != num_value:
            return False

        return True

    if suchbegriffe['erweiterte_suche'] == "":
        erweiterte_suche = eval("_file_.titel.test(search_True)")
    elif self.comboBox_suchbegriffe.currentText() == "Titel":
        erweiterte_suche = eval("_file_.titel.test(lineedit_in_erweitert)")
    elif self.comboBox_suchbegriffe.currentText() == "Inhalt":
        erweiterte_suche = eval("_file_.content.test(lineedit_in_erweitert)")
    elif self.comboBox_suchbegriffe.currentText() == "Quelle":
        erweiterte_suche = eval("_file_.quelle.test(lineedit_in_erweitert)")
    elif self.comboBox_suchbegriffe.currentText() == "Bilder":
        erweiterte_suche = _file_.bilder.test(lineedit_in_bilder)
    elif self.comboBox_suchbegriffe.currentText() == "Aufgaben-ID":
        erweiterte_suche = _file_.name.test(lineedit_in_name)

    gesammeltedateien = []
    if current_program == 'lama_1' or (
            current_program == 'cria'
            and self.combobox_searchtype.currentIndex() == 0):
        if suchbegriffe['themen'] != []:
            gesammeltedateien = table_lama.search(
                (_file_.themen.any(suchbegriffe['themen']))
                & (_file_.af.test(string_in_list_af))
                & (_file_.klasse.test(string_in_list_klasse))
                & (_file_.info.test(string_in_list_info)) & (erweiterte_suche)
                & (_file_.draft.test(include_drafts)))
        else:
            gesammeltedateien = table_lama.search(
                (_file_.af.test(string_in_list_af)) &
                # (_file_.klasse.test(string_in_list_klasse)) &
                (_file_.info.test(string_in_list_info)) & (erweiterte_suche)
                & (_file_.draft.test(include_drafts)))

    elif current_program == 'cria' and self.combobox_searchtype.currentIndex(
    ) == 1:

        def themen_included(value):
            for all in suchbegriffe['themen']:
                if all not in value:
                    return False
            return True

        #
        if suchbegriffe['themen'] != []:
            gesammeltedateien = table_lama.search(
                (_file_.themen.test(themen_included))
                & (_file_.af.test(string_in_list_af))
                & (_file_.klasse.test(string_in_list_klasse))
                & (_file_.info.test(string_in_list_info)) & (erweiterte_suche)
                & (_file_.draft.test(include_drafts)))
        else:
            gesammeltedateien = table_lama.search(
                (_file_.af.test(string_in_list_af)) &
                # (_file_.klasse.test(string_in_list_klasse)) &
                (_file_.info.test(string_in_list_info)) & (erweiterte_suche)
                & (_file_.draft.test(include_drafts)))

    elif current_program == 'lama_2':

        def gk_in_list(value):
            for all in value:
                if all not in suchbegriffe['themen']:
                    return False
            return True

        if suchbegriffe['themen'] == []:
            gesammeltedateien = table_lama.search(
                (_file_.klasse.test(string_in_list_klasse))
                & (_file_.info.test(string_in_list_info)) & (erweiterte_suche)
                & (_file_.draft.test(include_drafts)))
        elif self.combobox_searchtype.currentIndex() == 0:
            gesammeltedateien = table_lama.search(
                (_file_.themen.any(suchbegriffe['themen']))
                & (_file_.klasse.test(string_in_list_klasse))
                & (_file_.info.test(string_in_list_info)) & (erweiterte_suche)
                & (_file_.draft.test(include_drafts)))

        elif self.combobox_searchtype.currentIndex() == 1:
            gesammeltedateien = table_lama.search(
                (_file_.themen.test(gk_in_list))
                & (_file_.klasse.test(string_in_list_klasse))
                & (_file_.info.test(string_in_list_info)) & (erweiterte_suche)
                & (_file_.draft.test(include_drafts)))

    return gesammeltedateien