Userprofile mit Parent hinzugefügt
This commit is contained in:
parent
1b6704991e
commit
1ffeadc768
|
|
@ -0,0 +1,27 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 20:58
|
||||
|
||||
import colorful.fields
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Areas',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=200)),
|
||||
('color', colorful.fields.RGBColorField(blank=True, colors=['#FFB900', '#E74856', '#0078D7', '#0099BC', '#7A7574'], default='#0099BC')),
|
||||
('desc', models.TextField(blank=True, max_length=3000)),
|
||||
('created_area_date', models.DateField(blank=True, default=datetime.date.today)),
|
||||
('visible', models.BooleanField(default=True)),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 20:58
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('users', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('areas', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='areas',
|
||||
name='agency',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='users.Agency'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='areas',
|
||||
name='created_area_by',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='areas',
|
||||
name='usersfield',
|
||||
field=models.ManyToManyField(blank=True, related_name='users_in_area', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
|
@ -0,0 +1,28 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 20:58
|
||||
|
||||
import ckeditor_uploader.fields
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='News',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(default='', max_length=200)),
|
||||
('content', ckeditor_uploader.fields.RichTextUploadingField(blank=True, verbose_name='Inhalt')),
|
||||
('created_date', models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 21, 58, 18, 144449))),
|
||||
('go_online_on', models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 21, 58, 18, 144449))),
|
||||
('go_offline_on', models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 21, 58, 18, 144449))),
|
||||
('last_modified_on', models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 21, 58, 18, 144449))),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 20:58
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('users', '0001_initial'),
|
||||
('news', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='news',
|
||||
name='agency',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Agency'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='news',
|
||||
name='created_by',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='news',
|
||||
name='last_modified_by',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, related_name='news_mod_by', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 20:59
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('news', '0002_auto_20191211_2158'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='news',
|
||||
name='created_date',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 21, 59, 30, 816176)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='news',
|
||||
name='go_offline_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 21, 59, 30, 816176)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='news',
|
||||
name='go_online_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 21, 59, 30, 816176)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='news',
|
||||
name='last_modified_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 21, 59, 30, 816176)),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 21:00
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('news', '0003_auto_20191211_2159'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='news',
|
||||
name='created_date',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 22, 0, 29, 106830)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='news',
|
||||
name='go_offline_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 22, 0, 29, 106830)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='news',
|
||||
name='go_online_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 22, 0, 29, 106830)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='news',
|
||||
name='last_modified_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 22, 0, 29, 106830)),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 21:22
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('news', '0004_auto_20191211_2200'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='news',
|
||||
name='created_date',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 22, 22, 22, 194586)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='news',
|
||||
name='go_offline_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 22, 22, 22, 194586)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='news',
|
||||
name='go_online_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 22, 22, 22, 194586)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='news',
|
||||
name='last_modified_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 22, 22, 22, 194586)),
|
||||
),
|
||||
]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,89 +1,89 @@
|
|||
{% extends "users/base.html" %}
|
||||
{% block content %}
|
||||
<script src="https://cdn.syncfusion.com/ej2/dist/ej2.min.js" type="text/javascript"></script>
|
||||
<link href="https://cdn.syncfusion.com/ej2/material.css" rel="stylesheet">
|
||||
<div class="content-section">
|
||||
<h3>{{request.user.profile.agency.name}}</h3>
|
||||
<hr>
|
||||
<h4>Organigramm</h4>
|
||||
<table class="table borderless">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td colspan="3" class="text-center">
|
||||
{% if leader != None %}
|
||||
<a href="{% url 'orga-single' leader.pk %}">
|
||||
{% endif %}
|
||||
|
||||
<div>
|
||||
<img class="img-profile mb-2 " width="12%" src="{{ leader.profile.image.url }}">
|
||||
</div>
|
||||
<h5>{{ leader.first_name }} {{ leader.last_name }}</h5>
|
||||
{{ leader.profile.get_func_display }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
|
||||
{%if external|length > 0%}
|
||||
<td class="text-center"><h4>Außendienst</h4></td>
|
||||
{%endif%}
|
||||
{%if indoor|length > 0%}
|
||||
<td class="text-center"><h4>Innendienst</h4></td>
|
||||
{%endif%}
|
||||
{%if trainee|length > 0%}
|
||||
<td class="text-center"><h4>Auszubildende</h4></td>
|
||||
{%endif%}
|
||||
</tr>
|
||||
<tr>
|
||||
{% if external|length > 0 %}
|
||||
<td class="text-center">
|
||||
{% for us in external %}
|
||||
<a href="{% url 'orga-single' us.pk %}">
|
||||
<div class="mb-4">
|
||||
<div>
|
||||
<img class="img-profile mb-2 " width="25%" src="{{ us.profile.image.url }}">
|
||||
</div>
|
||||
<h5>{{ us.first_name }} {{ us.last_name }}</h5>
|
||||
<span>{{ us.profile.get_func_display }}</span>
|
||||
</div>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</td>
|
||||
{%endif%}
|
||||
|
||||
{%if indoor|length > 0%}
|
||||
<td class="text-center">
|
||||
{% for us in indoor %}
|
||||
<a href="{% url 'orga-single' us.pk %}">
|
||||
<div class="mb-4">
|
||||
<div>
|
||||
<img class="img-profile mb-2 " width="25%" src="{{ us.profile.image.url }}">
|
||||
</div>
|
||||
<h5>{{ us.first_name }} {{ us.last_name }}</h5>
|
||||
<span>{{ us.profile.get_func_display }}</span>
|
||||
</div>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</td>
|
||||
{% endif %}
|
||||
{%if trainee|length > 0%}
|
||||
<td class="text-center">
|
||||
{% for us in trainee %}
|
||||
<a href="{% url 'orga-single' us.pk %}">
|
||||
<div class="mb-4">
|
||||
<div>
|
||||
<img class="img-profile mb-2 " width="25%" src="{{ us.profile.image.url }}">
|
||||
</div>
|
||||
<h5>{{ us.first_name }} {{ us.last_name }}</h5>
|
||||
<span>{{ us.profile.get_func_display }}</span>
|
||||
</div>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<div id="diagram"></div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
|
||||
var data = [
|
||||
{ 'id': 'parent', 'role': 'Board', 'color': '#71AF17' },
|
||||
{ 'id': 'parent', 'role': 'General Manager', 'manager': 'parent', 'color': '#71AF17' },
|
||||
{ 'id': '2', 'role': 'Human Resource Manager', 'manager': '1', 'color': '#1859B7' },
|
||||
{ 'id': '3', 'role': 'Trainers', 'manager': '2', 'color': '#2E95D8' },
|
||||
{ 'id': '4', 'role': 'Recruiting Team', 'manager': '2', 'color': '#2E95D8' },
|
||||
{ 'id': '6', 'role': 'Design Manager', 'manager': '1', 'color': '#1859B7' },
|
||||
{ 'id': '7', 'role': 'Design Supervisor', 'manager': '6', 'color': '#2E95D8' },
|
||||
{ 'id': '8', 'role': 'Development Supervisor', 'manager': '6', 'color': '#2E95D8' },
|
||||
{ 'id': '10', 'role': 'Operations Manager', 'manager': '1', 'color': '#1859B7' },
|
||||
{ 'id': '11', 'role': 'Statistics Department', 'manager': '10', 'color': '#2E95D8' },
|
||||
{ 'id': '12', 'role': 'Logistics Department', 'manager': '10', 'color': '#2E95D8' },
|
||||
{ 'id': '16', 'role': 'Marketing Manager', 'manager': '1', 'color': '#1859B7' },
|
||||
{ 'id': '17', 'role': 'Overseas Sales Manager', 'manager': '16', 'color': '#2E95D8' },
|
||||
{ 'id': '20', 'role': 'Service Department Manager', 'manager': '16', 'color': '#2E95D8' }
|
||||
];
|
||||
|
||||
|
||||
var items = new ej.data.DataManager(data);
|
||||
|
||||
var diagram = new ej.diagrams.Diagram({
|
||||
width: "1000px",
|
||||
height: "600px",
|
||||
dataSourceSettings: {
|
||||
// set the unique field from data source
|
||||
id: 'id',
|
||||
// set the field which is used to identify the reporting person
|
||||
parentId: 'manager',
|
||||
// define the employee data
|
||||
dataManager: items,
|
||||
doBinding: function (node, data) {
|
||||
// You will get the employee information in data argument and bind that value directly to node's built-in properties.
|
||||
node.annotations = [{ content: data.role }];
|
||||
node.style = { fill: data.color };
|
||||
}
|
||||
},
|
||||
layout: {
|
||||
// set the layout type
|
||||
type: 'OrganizationalChart'
|
||||
},
|
||||
// set the common settings for node and connector
|
||||
getNodeDefaults: nodeDefaults,
|
||||
getConnectorDefaults: connectorDefaults,
|
||||
// hide the gridlines in the diagram
|
||||
snapSettings: { constraints: ej.diagrams.SnapConstraints.None }
|
||||
});
|
||||
diagram.appendTo('#diagram');
|
||||
|
||||
function nodeDefaults(node) {
|
||||
node.annotations[0].style.color = "white";
|
||||
node.width = 120;
|
||||
return node;
|
||||
}
|
||||
|
||||
function connectorDefaults(connector) {
|
||||
connector.type = 'Orthogonal';
|
||||
connector.targetDecorator = { shape: 'None' };
|
||||
return connector;
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{% endblock content %}
|
||||
|
|
@ -0,0 +1,167 @@
|
|||
{% extends "users/base.html" %}
|
||||
{% block content %}
|
||||
<script src="https://cdn.syncfusion.com/ej2/dist/ej2.min.js" type="text/javascript"></script>
|
||||
<link href="https://cdn.syncfusion.com/ej2/material.css" rel="stylesheet">
|
||||
<div class="content-section">
|
||||
<h3>{{request.user.profile.agency.name}}</h3>
|
||||
<hr>
|
||||
<h4>Organigramm</h4>
|
||||
<table class="table borderless">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td colspan="3" class="text-center">
|
||||
{% if leader != None %}
|
||||
<a href="{% url 'orga-single' leader.pk %}">
|
||||
{% endif %}
|
||||
|
||||
<div>
|
||||
<img class="img-profile mb-2 " width="12%" src="{{ leader.profile.image.url }}">
|
||||
</div>
|
||||
<h5>{{ leader.first_name }} {{ leader.last_name }}</h5>
|
||||
{{ leader.profile.get_func_display }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
|
||||
{%if external|length > 0%}
|
||||
<td class="text-center"><h4>Außendienst</h4></td>
|
||||
{%endif%}
|
||||
{%if indoor|length > 0%}
|
||||
<td class="text-center"><h4>Innendienst</h4></td>
|
||||
{%endif%}
|
||||
{%if trainee|length > 0%}
|
||||
<td class="text-center"><h4>Auszubildende</h4></td>
|
||||
{%endif%}
|
||||
</tr>
|
||||
<tr>
|
||||
{% if external|length > 0 %}
|
||||
<td class="text-center">
|
||||
{% for us in external %}
|
||||
<a href="{% url 'orga-single' us.pk %}">
|
||||
<div class="mb-4">
|
||||
<div>
|
||||
<img class="img-profile mb-2 " width="25%" src="{{ us.profile.image.url }}">
|
||||
</div>
|
||||
<h5>{{ us.first_name }} {{ us.last_name }}</h5>
|
||||
<span>{{ us.profile.get_func_display }}</span>
|
||||
</div>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</td>
|
||||
{%endif%}
|
||||
|
||||
{%if indoor|length > 0%}
|
||||
<td class="text-center">
|
||||
{% for us in indoor %}
|
||||
<a href="{% url 'orga-single' us.pk %}">
|
||||
<div class="mb-4">
|
||||
<div>
|
||||
<img class="img-profile mb-2 " width="25%" src="{{ us.profile.image.url }}">
|
||||
</div>
|
||||
<h5>{{ us.first_name }} {{ us.last_name }}</h5>
|
||||
<span>{{ us.profile.get_func_display }}</span>
|
||||
</div>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</td>
|
||||
{% endif %}
|
||||
{%if trainee|length > 0%}
|
||||
<td class="text-center">
|
||||
{% for us in trainee %}
|
||||
<a href="{% url 'orga-single' us.pk %}">
|
||||
<div class="mb-4">
|
||||
<div>
|
||||
<img class="img-profile mb-2 " width="25%" src="{{ us.profile.image.url }}">
|
||||
</div>
|
||||
<h5>{{ us.first_name }} {{ us.last_name }}</h5>
|
||||
<span>{{ us.profile.get_func_display }}</span>
|
||||
</div>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="diagram"></div>
|
||||
<script type="text/javascript">
|
||||
|
||||
|
||||
var data = [
|
||||
{ 'id': 'parent', 'role': 'Board', 'color': '#71AF17' },
|
||||
{ 'id': '1', 'role': 'General Manager','color': '#71AF17' },
|
||||
{ 'id': '2', 'role': 'Human Resource Manager', 'manager': '1', 'color': '#1859B7' },
|
||||
{ 'id': '3', 'role': 'Trainers', 'manager': '2', 'color': '#2E95D8' },
|
||||
{ 'id': '4', 'role': 'Recruiting Team', 'manager': '2', 'color': '#2E95D8' },
|
||||
{ 'id': '6', 'role': 'Design Manager', 'manager': '1', 'color': '#1859B7' },
|
||||
{ 'id': '7', 'role': 'Design Supervisor', 'manager': '6', 'color': '#2E95D8' },
|
||||
{ 'id': '8', 'role': 'Development Supervisor', 'manager': '6', 'color': '#2E95D8' },
|
||||
{ 'id': '10', 'role': 'Operations Manager', 'manager': '1', 'color': '#1859B7' },
|
||||
{ 'id': '11', 'role': 'Statistics Department', 'manager': '10', 'color': '#2E95D8' },
|
||||
{ 'id': '12', 'role': 'Logistics Department', 'manager': '10', 'color': '#2E95D8' },
|
||||
{ 'id': '16', 'role': 'Marketing Manager', 'manager': '1', 'color': '#1859B7' },
|
||||
{ 'id': '17', 'role': 'Overseas Sales Manager', 'manager': '16', 'color': '#2E95D8' },
|
||||
{ 'id': '20', 'role': 'Service Department Manager', 'manager': '16', 'color': '#2E95D8' }
|
||||
];
|
||||
|
||||
|
||||
var items = new ej.data.DataManager(data);
|
||||
|
||||
var diagram = new ej.diagrams.Diagram({
|
||||
width: "1000px",
|
||||
height: "600px",
|
||||
dataSourceSettings: {
|
||||
// set the unique field from data source
|
||||
id: 'id',
|
||||
// set the field which is used to identify the reporting person
|
||||
parentId: 'manager',
|
||||
// define the employee data
|
||||
dataManager: items,
|
||||
doBinding: function (node, data) {
|
||||
// You will get the employee information in data argument and bind that value directly to node's built-in properties.
|
||||
node.annotations = [{ content: data.role }];
|
||||
node.style = { fill: data.color };
|
||||
}
|
||||
},
|
||||
layout: {
|
||||
// set the layout type
|
||||
type: 'OrganizationalChart'
|
||||
},
|
||||
// set the common settings for node and connector
|
||||
getNodeDefaults: nodeDefaults,
|
||||
getConnectorDefaults: connectorDefaults,
|
||||
// hide the gridlines in the diagram
|
||||
snapSettings: { constraints: ej.diagrams.SnapConstraints.None }
|
||||
});
|
||||
diagram.appendTo('#diagram');
|
||||
|
||||
function nodeDefaults(node) {
|
||||
node.annotations[0].style.color = "white";
|
||||
node.width = 120;
|
||||
return node;
|
||||
}
|
||||
|
||||
function connectorDefaults(connector) {
|
||||
connector.type = 'Orthogonal';
|
||||
connector.targetDecorator = { shape: 'None' };
|
||||
return connector;
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{% endblock content %}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 20:58
|
||||
|
||||
import ckeditor_uploader.fields
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Standards',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(default='', max_length=200)),
|
||||
('content', ckeditor_uploader.fields.RichTextUploadingField(blank=True, verbose_name='Inhalt')),
|
||||
('created_standard_date', models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 21, 58, 18, 142447))),
|
||||
('published_on', models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 21, 58, 18, 142447))),
|
||||
('last_modified_on', models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 21, 58, 18, 142447))),
|
||||
('public', models.BooleanField(default=False)),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 20:58
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('areas', '0002_auto_20191211_2158'),
|
||||
('users', '0001_initial'),
|
||||
('tasks', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('standards', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='standards',
|
||||
name='agency',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Agency'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='standards',
|
||||
name='area',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='areas.Areas'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='standards',
|
||||
name='created_standard_by',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='standards',
|
||||
name='last_modified_by',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, related_name='user_modified_standard', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='standards',
|
||||
name='published_by',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, related_name='user_published_standard', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='standards',
|
||||
name='task',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tasks.Tasks'),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 20:59
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('standards', '0002_auto_20191211_2158'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='standards',
|
||||
name='created_standard_date',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 21, 59, 30, 814174)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='standards',
|
||||
name='last_modified_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 21, 59, 30, 814174)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='standards',
|
||||
name='published_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 21, 59, 30, 814174)),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 21:00
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('standards', '0003_auto_20191211_2159'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='standards',
|
||||
name='created_standard_date',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 22, 0, 29, 104828)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='standards',
|
||||
name='last_modified_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 22, 0, 29, 104828)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='standards',
|
||||
name='published_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 22, 0, 29, 104828)),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 21:22
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('standards', '0004_auto_20191211_2200'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='standards',
|
||||
name='created_standard_date',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 22, 22, 22, 193586)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='standards',
|
||||
name='last_modified_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 22, 22, 22, 193586)),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='standards',
|
||||
name='published_on',
|
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2019, 12, 11, 22, 22, 22, 193586)),
|
||||
),
|
||||
]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,25 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 20:58
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Tasks',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(default='', max_length=200)),
|
||||
('desc', models.TextField(blank=True, max_length=3000)),
|
||||
('created_area_date', models.DateField(blank=True, default=datetime.date.today)),
|
||||
('visible', models.BooleanField(default=True)),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 20:58
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('areas', '0002_auto_20191211_2158'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('users', '0001_initial'),
|
||||
('tasks', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='tasks',
|
||||
name='agency',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Agency'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='tasks',
|
||||
name='area',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='areas.Areas'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='tasks',
|
||||
name='created_area_by',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='tasks',
|
||||
name='usersfield',
|
||||
field=models.ManyToManyField(blank=True, related_name='users_in_task', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,56 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 20:58
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('tasks', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Agency',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(default='', max_length=200)),
|
||||
('inhaber', models.CharField(blank=True, default='', max_length=200)),
|
||||
('street', models.CharField(blank=True, default='', max_length=200)),
|
||||
('city', models.CharField(blank=True, default='', max_length=200)),
|
||||
('email', models.EmailField(blank=True, default='', max_length=254)),
|
||||
('phone', models.CharField(blank=True, default='', max_length=20)),
|
||||
('agencypic', models.ImageField(blank=True, default='default.jpg', upload_to='agencymain')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Profile',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('phoneland', models.CharField(blank=True, max_length=60)),
|
||||
('phonemobile', models.CharField(blank=True, max_length=60)),
|
||||
('func', models.CharField(choices=[('lead', 'Agenturleitung'), ('external', 'Außendienst'), ('indoor', 'Innendienst'), ('trainee', 'Azubi')], default='', max_length=50)),
|
||||
('image', models.ImageField(blank=True, default='default.jpg', upload_to='userprofilepics')),
|
||||
('compfunc', models.CharField(blank=True, max_length=60)),
|
||||
('agency', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='users.Agency')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'permissions': [('agency_change', 'Agenturinformationen verändern'), ('users_usermanagement', 'Benutzer bearbeiten'), ('areas_management', 'Bereiche bearbeiten'), ('tasks_management', 'Aufgabenbereiche bearbeiten'), ('standard_management', 'Standards bearbeiten und freischalten'), ('news_management', 'News bearbeiten und veröffentlichen')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Prio',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('prio', models.IntegerField(default=0)),
|
||||
('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tasks.Tasks')),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 20:59
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('users', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='profile',
|
||||
name='parent',
|
||||
field=models.ForeignKey(blank=True, default=None, on_delete=django.db.models.deletion.CASCADE, related_name='parent_user', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 21:00
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0002_profile_parent'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='profile',
|
||||
name='parent',
|
||||
field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='parent_user', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-11 21:22
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0003_auto_20191211_2200'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='profile',
|
||||
name='parent',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='parent_user', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -71,13 +71,16 @@ class Profile(models.Model):
|
|||
|
||||
# Wenn der User gelöscht wird, wird auch das Profil gelöscht
|
||||
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
||||
parent = models.ForeignKey(User, on_delete=models.CASCADE, related_name='parent_user')
|
||||
phoneland = models.CharField(max_length=60, blank=True)
|
||||
phonemobile = models.CharField(max_length=60, blank=True)
|
||||
func = models.CharField(choices=agency_task, default="lead", max_length=50)
|
||||
func = models.CharField(choices=agency_task, default="", max_length=50)
|
||||
# Wenn dieses Profil gelöscht wird, wird NICHT die Agency geslöscht
|
||||
agency = models.ForeignKey(Agency, on_delete=models.PROTECT)
|
||||
image = models.ImageField(default='default.jpg', upload_to='userprofilepics', blank=True)
|
||||
compfunc = models.CharField(max_length=60, blank=True)
|
||||
|
||||
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.user.last_name}'
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ from django.contrib.auth.models import Permission
|
|||
@receiver(post_save, sender=User)
|
||||
def create_profile(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
Profile.objects.create(user=instance, agency=instance.agency)
|
||||
Profile.objects.create(user=instance, agency=instance.agency, parent=instance.parent)
|
||||
|
||||
'''
|
||||
Wenn ein neuer Nutzer angelegt wird und dies der erste der Agentur ist,
|
||||
|
|
@ -20,10 +20,11 @@ def create_profile(sender, instance, created, **kwargs):
|
|||
temprof = Profile
|
||||
for ele in temprof._meta.permissions:
|
||||
tempperm = Permission.objects.get(codename=ele[0])
|
||||
tempuser.user_permissions.add(tempperm)
|
||||
tempuser.user_permissions.add(tempperm)
|
||||
tempuser.profile.func = 'lead'
|
||||
tempuser.save()
|
||||
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
def save_profile(sender, instance, **kwargs):
|
||||
instance.profile.save()
|
||||
def save_profile(sender, instance, **kwargs):
|
||||
print("PROF SAVED")
|
||||
instance.profile.save()
|
||||
|
|
@ -28,6 +28,8 @@
|
|||
<!--<link href="{%static 'users/css/bootstrap.min.css' %}" rel="stylesheet">-->
|
||||
<link href='https://fonts.googleapis.com/css?family=Roboto&display=swap' rel='stylesheet' type='text/css'>
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
|
@ -316,7 +318,6 @@
|
|||
<!-- Page level custom scripts -->
|
||||
<!--<script src="js/demo/chart-area-demo.js"></script>-->
|
||||
<!--<script src="js/demo/chart-pie-demo.js"></script>-->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
@ -333,14 +334,15 @@
|
|||
searchstring: searchstring
|
||||
},
|
||||
success: function( data )
|
||||
{
|
||||
{
|
||||
$("#searchres").empty();
|
||||
for (var i = 0; i < data['res'].length; i++)
|
||||
for (var i = 0; i < data['standards'].length; i++)
|
||||
{
|
||||
id = data['res'][i]['id'];
|
||||
name = data['res'][i]['name'] + " | " + data['res'][i]['content'];
|
||||
$("#searchres").append('<option id="'+id+'" value="'+name+'"></option>');
|
||||
}
|
||||
id = data['standards'][i]['id'];
|
||||
name = data['standards'][i]['name'] + " | " + data['standards'][i]['content'];
|
||||
console.log(name);
|
||||
$("#searchres").append('<option id="'+id+'" value="'+name+'"></option>');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,12 +48,13 @@
|
|||
Profil bearbeiten
|
||||
</legend>
|
||||
<!-- FORMS LADEN -->
|
||||
{{ u_form|crispy }}
|
||||
{{ u_form|crispy }}
|
||||
</fieldset>
|
||||
|
||||
<small>Agenturrelevante Daten werden in der Benutzerverwaltung verändert.</small>
|
||||
<div class="form-group mt-3">
|
||||
<button type="submit" class="btn btn-success">Speichern</button>
|
||||
<a href="{% url 'users-dashboard' %}" class="btn">Abbrechen</a>
|
||||
<a href="{% url 'users-management' %}" class="btn">Abbrechen</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -3,37 +3,37 @@
|
|||
{% block content %}
|
||||
<div class="content-section">
|
||||
<div class="media">
|
||||
<img class="img-profile " width="17%" src="{{ object.image.url }}">
|
||||
<img class="img-profile " width="17%" src="{{ prof_user.profile.image.url }}">
|
||||
<div class="media-body col-5">
|
||||
<h2 class="account-heading">Profil von {{ object.user.first_name }} {{ object.user.last_name }}</h2>
|
||||
<h2 class="account-heading">Profil von {{ prof_user.first_name }} {{ prof_user.last_name }}</h2>
|
||||
<hr>
|
||||
<div class="row mt-2">
|
||||
<div class="col-md-6">
|
||||
<h6><b>Name</b></h6>
|
||||
<p>
|
||||
{{ object.user.first_name}} {{ object.user.last_name }}
|
||||
{{ prof_user.first_name}} {{ prof_user.last_name }}
|
||||
</p>
|
||||
<h6><b>E-Mail</b></h6>
|
||||
<p>
|
||||
{{ object.user.email }}
|
||||
{{ prof_user.email }}
|
||||
</p>
|
||||
<h6><b>Agenturfunktion</b></h6>
|
||||
<p>
|
||||
{{ object.get_func_display }}
|
||||
{{ prof_user.profile.get_func_display }}
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h6><b>Tätigkeit</b></h6>
|
||||
<p>
|
||||
{{ object.compfunc }}
|
||||
{{ prof_user.profile.compfunc }}
|
||||
</p>
|
||||
<h6><b>Fesetznetz</b></h6>
|
||||
<p>
|
||||
{{ object.phoneland }}
|
||||
{{ prof_user.profile.phoneland }}
|
||||
</p>
|
||||
<h6><b>Mobil</b></h6>
|
||||
<p>
|
||||
{{ object.phonemobile }}
|
||||
{{ prof_user.profile.phonemobile }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -48,8 +48,22 @@
|
|||
Profil bearbeiten
|
||||
</legend>
|
||||
<!-- FORMS LADEN -->
|
||||
{{ form|crispy }}
|
||||
{{ profileform_form|crispy }}
|
||||
</fieldset>
|
||||
Übergeordneter Mitarbeiter: <span id="ps_act">{{prof_user.profile.parent.first_name}} {{prof_user.profile.parent.last_name}}</span>
|
||||
<div class="input-group mb-3">
|
||||
<input class="form-control" name="puser" id="puser" list="parentuser" type="text" onkeyup="javascript:checkValueAddParent()">
|
||||
<div class="input-group-append">
|
||||
<button type="button" id="addusertouserp" onclick="javascript:addUserParentUser()" class="btn btn-success" disabled>Festlegen</button>
|
||||
<button type="button" onclick="javascript:clearSearchfield()" class="btn btn-secondary" ><i class="fas fa-times"></i></button>
|
||||
</div>
|
||||
<datalist id="parentuser" nmae="parentuser">
|
||||
{% for us in possible_users %}
|
||||
<option id="{{us.pk}}" value="{{us.first_name}} {{us.last_name}}"></option>
|
||||
{% endfor %}
|
||||
</datalist>
|
||||
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-success">Speichern</button>
|
||||
|
|
@ -58,4 +72,51 @@
|
|||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
tempid = null;
|
||||
function clearSearchfield(){
|
||||
$("#puser").val("");
|
||||
$("#addusertouserp").prop('disabled', true);
|
||||
}
|
||||
|
||||
function addUserParentUser(){
|
||||
$.ajax(
|
||||
{
|
||||
type: "GET",
|
||||
url: "/dashboard/setuserparent",
|
||||
data:{
|
||||
userid: tempid,
|
||||
action : 'adduserp',
|
||||
objectid : {{prof_user.pk}}
|
||||
},
|
||||
success: function( data )
|
||||
{
|
||||
clearSearchfield();
|
||||
//Add User-Button
|
||||
$("#ps_act").html(data['username_clean']);
|
||||
$("#parentuser").empty();
|
||||
for (var i in data['remaining_users']) {
|
||||
id = data['remaining_users'][i]['id'];
|
||||
name = data['remaining_users'][i]['first_name'] + " " + data['remaining_users'][i]['last_name'];
|
||||
$("#parentuser").append('<option id="'+id+'" value="'+name+'"></option>');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function checkValueAddParent()
|
||||
{
|
||||
|
||||
var g = $('#puser').val();
|
||||
var id = $('#parentuser').find('option[value="' + g + '"]').attr('id');
|
||||
if(id != undefined && id.length > 0){
|
||||
tempid = id;
|
||||
$("#addusertouserp").prop('disabled', false);
|
||||
}
|
||||
else{
|
||||
tempid = null;
|
||||
$("#addusertouserp").prop('disabled', true);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{% endblock content %}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
{% extends "users/base.html" %}
|
||||
{% load crispy_forms_tags %}
|
||||
{% block content %}
|
||||
<div class="content-section">
|
||||
<div class="media">
|
||||
<img class="img-profile " width="17%" src="{{ user.image.url }}">
|
||||
<div class="media-body col-5">
|
||||
<h2 class="account-heading">ddddProfil von {{ user.first_name }} {{ user.last_name }}</h2>
|
||||
<hr>
|
||||
<div class="row mt-2">
|
||||
<div class="col-md-6">
|
||||
<h6><b>Name</b></h6>
|
||||
<p>
|
||||
{{ user.first_name}} {{ user.last_name }}
|
||||
</p>
|
||||
<h6><b>E-Mail</b></h6>
|
||||
<p>
|
||||
{{ user.email }}
|
||||
</p>
|
||||
<h6><b>Agenturfunktion</b></h6>
|
||||
<p>
|
||||
{{ get_func_display }}
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h6><b>Tätigkeit</b></h6>
|
||||
<p>
|
||||
{{ compfunc }}
|
||||
</p>
|
||||
<h6><b>Fesetznetz</b></h6>
|
||||
<p>
|
||||
{{ phoneland }}
|
||||
</p>
|
||||
<h6><b>Mobil</b></h6>
|
||||
<p>
|
||||
{{ phonemobile }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Für das Speichern der Bilder enctype -->
|
||||
<div class="col-7 mt-5">
|
||||
<form method="POST" enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
<fieldset class="form-group">
|
||||
<legend class="border-bottom mb-4">
|
||||
Profil bearbeiten
|
||||
</legend>
|
||||
<!-- FORMS LADEN -->
|
||||
{{ profileform_form|crispy }}
|
||||
</fieldset>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-success">Speichern</button>
|
||||
<a href="{% url 'usersmanagement' %}" class="btn">Abbrechen</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
from django.urls import path
|
||||
from django.contrib.auth import views as auth_views
|
||||
from .views import UsersCreateUser, UsersManagement, UserManagementUpdateForm, ProfileUpdateView, ProfileDeleteView, AgencyUpdateView, UsersPermUpdateView
|
||||
#from .views import UsersCreateUser, UsersManagement, UserManagementUpdateForm, ProfileUpdateView, ProfileDeleteView, AgencyUpdateView, UsersPermUpdateView
|
||||
from .views import UsersCreateUser, UsersManagement, UserManagementUpdateForm, ProfileDeleteView, AgencyUpdateView, UsersPermUpdateView
|
||||
from . import views
|
||||
from django.contrib.auth.decorators import login_required, permission_required
|
||||
|
||||
|
|
@ -18,7 +19,8 @@ urlpatterns = [
|
|||
path('usersman/', permission_required('users.users_usermanagement')(UsersManagement.as_view(template_name="users/users_management.html")), name='users-management'),
|
||||
path('usersman/adduser/', permission_required('users.users_usermanagement')(UsersCreateUser.as_view(template_name="users/users_adduser.html")), name='users-adduser'),
|
||||
path('usersman/profile/', views.profile, name='users-profile'),
|
||||
path('usersman/<int:pk>/', permission_required('users.users_usermanagement')(ProfileUpdateView.as_view()), name='users-update'),
|
||||
path('usersman/<int:pk>/', views.ProfileUpdateView, name='users-update'),
|
||||
#path('usersman/<int:pk>/', permission_required('users.users_usermanagement')(ProfileUpdateView.as_view()), name='users-update'),
|
||||
path('usersman/<int:pk>/perms', permission_required('users.users_usermanagement')(UsersPermUpdateView.as_view()), name='users-perm-update'),
|
||||
path('usersman/<int:pk>/delete', permission_required('users.users_usermanagement')(ProfileDeleteView.as_view()), name='users-delete'),
|
||||
path('agencyinfo/', views.agency, name='agencyinfo'),
|
||||
|
|
@ -28,7 +30,9 @@ urlpatterns = [
|
|||
path('areataskupdate/<int:pk>/', views.UsersAreaTaskUpdate, name="users-areataskupdate"),
|
||||
path('globalsearch/', views.GlobalSearch, name="globalsearch"),
|
||||
path('standardrout/', views.searchStandardRouter, name="standardrouter"),
|
||||
path('support/', views.support, name="supportda")
|
||||
path('support/', views.support, name="supportda"),
|
||||
path('setuserparent/', views.setuserparent, name="users-setuserparent")
|
||||
|
||||
]
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,15 @@ class UsersAddProfileForm(forms.ModelForm):
|
|||
}
|
||||
fields = ['phoneland','phonemobile','func', 'compfunc', 'image']
|
||||
|
||||
#class UsersAddProfileFormParents(forms.ModelForm):
|
||||
|
||||
|
||||
# def __init__(self, user, *args, **kwargs):
|
||||
# super().__init__(*args, **kwargs)
|
||||
# possibleUsers = Profile
|
||||
|
||||
|
||||
|
||||
# Formular zum hinzufügen neuer Agentur-Mitglieder
|
||||
class AgencyUpdateForm(forms.ModelForm):
|
||||
|
||||
|
|
|
|||
|
|
@ -114,6 +114,7 @@ class UsersCreateUser(LoginRequiredMixin, CreateView):
|
|||
messages.success(self.request, f'Benutzer angelegt!')
|
||||
# SAVE OBJECTS TO SIGNALE!
|
||||
form.instance.agency = self.request.user.profile.agency
|
||||
form.instance.parent = self.request.user
|
||||
newuser_name = form.cleaned_data.get('first_name') + " " + form.cleaned_data.get('last_name')
|
||||
msg_html = render_to_string('users/newusers_email.html', {'username': newuser_name})
|
||||
# E-Mail für Passwort-Setzung!
|
||||
|
|
@ -205,6 +206,7 @@ class UsersPermUpdateView(LoginRequiredMixin, View):
|
|||
|
||||
|
||||
# Benutzerprofil wird aktualisiert
|
||||
'''
|
||||
class ProfileUpdateView(LoginRequiredMixin, UpdateView):
|
||||
model = Profile
|
||||
form_class = UsersAddProfileForm
|
||||
|
|
@ -216,6 +218,72 @@ class ProfileUpdateView(LoginRequiredMixin, UpdateView):
|
|||
context['active_link'] = 'usersmanagement'
|
||||
return context
|
||||
|
||||
'''
|
||||
@login_required
|
||||
def ProfileUpdateView(request, pk):
|
||||
prof_user = User.objects.get(profile__pk=pk)
|
||||
|
||||
if request.method == 'POST':
|
||||
profileform_form = UsersAddProfileForm(request.POST, instance=prof_user.profile)
|
||||
#profileform_parents = UsersAddProfileFormParents(request.POST, instance=request.user)
|
||||
|
||||
if profileform_form.is_valid():
|
||||
|
||||
print(profileform_form)
|
||||
|
||||
profileform_form.save()
|
||||
#prename = request.user.first_name
|
||||
#name = request.user.last_name
|
||||
#messages.success(request, f'Daten für {prename} {name} aktualisiert!')
|
||||
# Daten neu laden und nicht die "Mächten sie die Daten speichern...?"
|
||||
return redirect('users-management')
|
||||
|
||||
else:
|
||||
# Form in Klammern sind die aktuellen Daten :)
|
||||
profileform_form = UsersAddProfileForm(instance=prof_user.profile)
|
||||
possible_users = User.objects.filter(profile__agency__pk=prof_user.profile.agency.pk)
|
||||
|
||||
|
||||
context = {
|
||||
'prof_user' : prof_user,
|
||||
'profileform_form' : profileform_form,
|
||||
'active_link' : 'usersmanagement',
|
||||
'possible_users' : possible_users
|
||||
}
|
||||
|
||||
|
||||
return render(request, 'users/profile_update.html', context)
|
||||
|
||||
'''
|
||||
|
||||
Set users Parent by AJAX
|
||||
|
||||
'''
|
||||
@login_required
|
||||
def setuserparent(request):
|
||||
if request.method == 'GET':
|
||||
|
||||
if request.GET['action'] == 'adduserp':
|
||||
|
||||
userid = request.GET['objectid']
|
||||
toadd = request.GET['userid']
|
||||
toadd_user = User.objects.get(pk=toadd)
|
||||
workinguser = User.objects.get(pk=userid)
|
||||
username_clean = toadd_user.first_name + " " + toadd_user.last_name
|
||||
workinguser.profile.parent = toadd_user
|
||||
workinguser.save()
|
||||
# Getting Remaining-Users
|
||||
possible_users = User.objects.filter(profile__agency__pk=request.user.profile.agency.pk)
|
||||
possible_users_js = list(possible_users.values())
|
||||
# Cleaned out, that only data is neede will send to the side (first/last-name and id)
|
||||
final_possible_users = {}
|
||||
for ele in possible_users_js:
|
||||
final_possible_users.update({'first_name':ele['first_name'],'last_name':ele['last_name'],'id':ele['id']})
|
||||
# Counter for remaining users to show/hide "Keine Mitarbeiter"-Div
|
||||
return JsonResponse({'userid' : userid, 'username_clean' : username_clean, 'remaining_users':possible_users_js})
|
||||
else:
|
||||
return HttpResponse("Request method is not a GET")
|
||||
|
||||
'''
|
||||
|
||||
# DELETE A USER
|
||||
|
|
@ -342,10 +410,10 @@ def GlobalSearch(request):
|
|||
ag = request.user.profile.agency.pk
|
||||
results = Standards.objects.filter(agency__pk=ag, public=True).filter(name__icontains=searchfor) | Standards.objects.filter(agency__pk=ag, public=True).filter(content__contains=searchfor) | Standards.objects.filter(agency__pk=ag, public=True).filter(area__name__icontains=searchfor) | Standards.objects.filter(agency__pk=ag, public=True).filter(task__name__icontains=searchfor) | Standards.objects.filter(agency__pk=ag, public=True).filter(created_standard_by__last_name__icontains=searchfor)|Standards.objects.filter(agency__pk=ag, public=True).filter(created_standard_by__first_name__icontains=searchfor)
|
||||
|
||||
results = list(results)
|
||||
final_results = []
|
||||
results_st = list(results)
|
||||
final_results_st = []
|
||||
i = 0
|
||||
for ele in results:
|
||||
for ele in results_st:
|
||||
tempele = {}
|
||||
tempele['id'] = ele.pk
|
||||
tempele['name'] = ele.name
|
||||
|
|
@ -357,9 +425,14 @@ def GlobalSearch(request):
|
|||
tempele['last_name_mod'] = ele.last_modified_by.last_name
|
||||
tempele['created'] = formats.date_format(ele.created_standard_date, "d.m.Y")
|
||||
tempele['last_modified_on'] = formats.date_format(ele.last_modified_on, "d.m.Y")
|
||||
final_results.append(tempele)
|
||||
final_results_st.append(tempele)
|
||||
i += 1
|
||||
return JsonResponse({'res' : final_results})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return JsonResponse({'standards' : final_results_st})
|
||||
else:
|
||||
return HttpResponse("Request method is not a GET")
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue