{% extends "admin_base.jinja.html" %} {% block content %} {% for error in form.file.errors %} <div class="alert alert-danger" role="alert"> <strong>Error!</strong> {{ error }} </div> {% endfor %} <form method="POST" enctype="multipart/form-data"> {{ form.csrf_token }} {{ form.file.label }} {{ form.file }} {{ form.submit }} </form> <hr> <h3>Help</h3> <p> The import file has to be a text file (with <code>.txt</code> at the end) encoded in UTF-8. It has to <strong>strictly</strong> follow the required format. </p> <p> You can take a look at the file <a href="{{ url_for('static', filename='example_database_import.txt') }}" target="_blank" rel="noopener noreferrer"> example_database_import.txt </a> for an example. </p> <h4>Required manipulation using the web interface</h4> <p>The following tables can not be imported from a file and have to be manipulated using the web interface.</p> <ul> <li>Semester</li> <li>Program</li> <li>Part</li> <li>User</li> <li>Assistant</li> <li>Experiment</li> <li>Semester Experiment</li> </ul> <h4>Optional values</h4> <p> If an attribute is optional/nullable and has no value, then <code>NULL</code> (uppercase) has to be written. </p> <h4>How to understand the tables in the next section</h4> <h5>ID</h5> <p> None of the mentioned ids in the import file is meant as a database id. The ids here only refer to the imported instances. The id in the database is assigned automatically. </p> <p>Here is the format of a table in the "Tables" section:</p> <h5>Table</h5> <ul> <li> id → 0 / 1 / 2 / ... (starts with 0 and has step 1) </li> <li>attribute → example1 / example2 / ... (explanation)</li> <li>...</li> </ul> <p> The type of attributes can be seen in the drawio file <a href="{{ url_for('static', filename='DB.drawio') }}">DB.drawio</a> which can be opened using <a href="https://www.diagrams.net/" target="_blank" rel="noopener noreferrer">diagrams.net</a>. Some attributes have constraints marked also in the drawio file. </p> <h4>Tables</h4> <h5>Semester (only one!)</h5> <ul> <li>label → WS / SS</li> <li> year → 22 / 23 / ... </li> </ul> <h5> Part </h5> <ul> <li> id </li> <li> number → 1 / 2 / ... </li> <li> program_label → BS / MS / BE / ... (for bachelor of science, master of science, bachelor of education, etc.) </li> </ul> <h5> Student </h5> <ul> <li> <code>student_number</code> </li> <li> <code>first_name</code> </li> <li> <code>last_name</code> </li> <li> <code>uni_email</code> </li> <li> <code><em>contact_email</em></code> (optional) </li> <li> <code><em>bachelor_thesis</em></code> (optional) </li> <li> <code><em>bachelor_thesis_work_group</em></code> (optional) </li> <li> <code><em>note</em></code> (optional) </li> </ul> <div style="font-size: 90%;"> Notes: <ul> <li> If <code>student_number</code> is found in the database but <code>first_name</code>, <code>last_name</code> or <code>uni_email</code> do not match, a warning is given during the import. Pay attention to warnings! </li> <li> <code>bachelor_thesis</code> and <code>bachelor_thesis_work_group</code> are only updated in the database if they are not <code>NULL</code>. This prevents overriding values written using the web interface. </li> <li> If <code>note</code> is not <code>NULL</code> then it is appended to the note in the database if the student already exists in the database. It will not overwrite existing notes. </li> </ul> </div> <h5> Group </h5> <ul> <li> <code>id</code> </li> <li> <code>number</code> → 1 / 2 / ... </li> <li> <code>program_label</code> </li> </ul> <h5> PartStudent </h5> <ul> <li> <code>student_number</code> </li> <li> <code>part_id</code> </li> <li> <code>group_id</code> </li> </ul> <h5> Experiment </h5> <ul> <li> <code>id</code> </li> <li> <code>number</code> → 1 / 2 / ... </li> <li> <code>program_label</code> </li> </ul> <h5> GroupExperiment </h5> <ul> <li> <code>id</code> </li> <li> <code>experiment_id</code> </li> <li> <code>group_id</code> </li> </ul> <h5> Appointment </h5> <ul> <li> <code>date</code> → 12.09.2022 </li> <li> <code>special</code> → 1 / 0 </li> <li> <code>group_experiment_id</code> </li> <li> <code>assistant_email</code> </li> </ul> {% endblock %}