Add merge satellites functionality
Signed-off-by: Alfredos-Panagiotis Damkalis <fredy@fredy.gr>spacecruft
parent
06e2f032fe
commit
0d137863b3
|
@ -0,0 +1,17 @@
|
||||||
|
# Generated by Django 3.1.5 on 2021-07-15 02:20
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('base', '0047_norad_not_required'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='satellite',
|
||||||
|
options={'permissions': (('merge_satellites', 'Can merge satellites'),)},
|
||||||
|
),
|
||||||
|
]
|
|
@ -255,6 +255,9 @@ class Satellite(models.Model):
|
||||||
)
|
)
|
||||||
last_modified = models.DateTimeField(auto_now=True)
|
last_modified = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
permissions = (('merge_satellites', 'Can merge satellites'), )
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
if self.satellite_entry:
|
if self.satellite_entry:
|
||||||
name = self.satellite_entry.name
|
name = self.satellite_entry.name
|
||||||
|
|
|
@ -33,6 +33,7 @@ BASE_URLPATTERNS = (
|
||||||
path('users/edit/', views.users_edit, name='users_edit'),
|
path('users/edit/', views.users_edit, name='users_edit'),
|
||||||
path('robots.txt', views.robots, name='robots'),
|
path('robots.txt', views.robots, name='robots'),
|
||||||
path('search/', views.search, name='search_results'),
|
path('search/', views.search, name='search_results'),
|
||||||
|
path('merge_satellites/', views.merge_satellites, name='merge_satellites'),
|
||||||
path('create_satellite/', views.SatelliteCreateView.as_view(), name='create_satellite'),
|
path('create_satellite/', views.SatelliteCreateView.as_view(), name='create_satellite'),
|
||||||
path(
|
path(
|
||||||
'update_satellite/<int:pk>/',
|
'update_satellite/<int:pk>/',
|
||||||
|
|
|
@ -462,6 +462,26 @@ class TransmitterUpdateView(LoginRequiredMixin, BSModalUpdateView):
|
||||||
return self.request.META.get('HTTP_REFERER')
|
return self.request.META.get('HTTP_REFERER')
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@require_POST
|
||||||
|
def merge_satellites(request):
|
||||||
|
"""Merges satellites if user has merge permission.
|
||||||
|
"""
|
||||||
|
primary_satellite = get_object_or_404(Satellite, pk=request.POST['primary-satellite'])
|
||||||
|
associated_satellite = get_object_or_404(Satellite, pk=request.POST['associated-satellite'])
|
||||||
|
|
||||||
|
if request.user.has_perm('base.merge_satellites'):
|
||||||
|
if primary_satellite.pk == associated_satellite.pk:
|
||||||
|
messages.error(request, ('Primary and Associated satellites are the same!'))
|
||||||
|
else:
|
||||||
|
associated_satellite.associated_satellite = primary_satellite
|
||||||
|
associated_satellite.save(update_fields=['associated_satellite'])
|
||||||
|
messages.success(request, ('Merge is complete!'))
|
||||||
|
else:
|
||||||
|
messages.error(request, ('No permission to merge satellites!'))
|
||||||
|
return redirect(reverse('satellites'))
|
||||||
|
|
||||||
|
|
||||||
class SatelliteCreateView(LoginRequiredMixin, BSModalCreateView):
|
class SatelliteCreateView(LoginRequiredMixin, BSModalCreateView):
|
||||||
"""A django-bootstrap-modal-forms view for creating satellite suggestions"""
|
"""A django-bootstrap-modal-forms view for creating satellite suggestions"""
|
||||||
template_name = 'base/modals/satellite_create.html'
|
template_name = 'base/modals/satellite_create.html'
|
||||||
|
|
|
@ -28,6 +28,10 @@ $(document).ready(function() {
|
||||||
alerticon = 'far fa-thumbs-up';
|
alerticon = 'far fa-thumbs-up';
|
||||||
alerttitle = 'Success';
|
alerttitle = 'Success';
|
||||||
}
|
}
|
||||||
|
if ($(this).data('alertclass') == 'alert-error') {
|
||||||
|
alerticon = 'fas fa-ban';
|
||||||
|
alerttitle = 'Error';
|
||||||
|
}
|
||||||
if ($(this).data('alertclass') == 'alert-warning') {
|
if ($(this).data('alertclass') == 'alert-warning') {
|
||||||
alerticon = 'fas fa-exclamation';
|
alerticon = 'fas fa-exclamation';
|
||||||
alerttitle = 'Alert';
|
alerttitle = 'Alert';
|
||||||
|
|
|
@ -62,4 +62,10 @@ $(document).ready(function() {
|
||||||
table.on('draw', function(){
|
table.on('draw', function(){
|
||||||
updateSatelliteModalForm();
|
updateSatelliteModalForm();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('.satellite-to-merge').select2({
|
||||||
|
placeholder: 'Select a satellite',
|
||||||
|
dropdownAutoWidth: true,
|
||||||
|
dropdownParent: $('#merge-satellites-modal')
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -244,4 +244,4 @@
|
||||||
{% endcompress %}
|
{% endcompress %}
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
<link rel="stylesheet" href="{% static 'lib/admin-lte/plugins/datatables-bs4/css/dataTables.bootstrap4.min.css' %}">
|
<link rel="stylesheet" href="{% static 'lib/admin-lte/plugins/datatables-bs4/css/dataTables.bootstrap4.min.css' %}">
|
||||||
<link rel="stylesheet" href="{% static 'lib/admin-lte/plugins/datatables-buttons/css/buttons.bootstrap4.min.css' %}">
|
<link rel="stylesheet" href="{% static 'lib/admin-lte/plugins/datatables-buttons/css/buttons.bootstrap4.min.css' %}">
|
||||||
<link rel="stylesheet" href="{% static 'lib/admin-lte/plugins/flag-icon-css/css/flag-icon.min.css' %}">
|
<link rel="stylesheet" href="{% static 'lib/admin-lte/plugins/flag-icon-css/css/flag-icon.min.css' %}">
|
||||||
|
<link rel="stylesheet" href="{% static 'lib/admin-lte/plugins/select2/css/select2.min.css' %}">
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block top-menu-left %}
|
{% block top-menu-left %}
|
||||||
|
@ -28,6 +29,13 @@
|
||||||
<i class="nav-icon mr-2 fas fa-plus-square"></i>
|
<i class="nav-icon mr-2 fas fa-plus-square"></i>
|
||||||
<p class="mb-0">Submit New Satellite</p>
|
<p class="mb-0">Submit New Satellite</p>
|
||||||
</a>
|
</a>
|
||||||
|
{% if perms.base.merge_satellites %}
|
||||||
|
<a class="dropdown-item d-flex align-items-center" data-toggle="modal" data-target="#merge-satellites-modal"
|
||||||
|
href="#" id="merge-satellites-link" aria-label="Merge satellites">
|
||||||
|
<i class="nav-icon mr-2 fas fa-compress-arrows-alt"></i>
|
||||||
|
<p class="mb-0">Merge Satellites</p>
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -128,6 +136,53 @@
|
||||||
<div class="modal-content"></div>
|
<div class="modal-content"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if perms.base.merge_satellites %}
|
||||||
|
<div class="modal fade" id="merge-satellites-modal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-lg" role="document">
|
||||||
|
<div class="modal-content">
|
||||||
|
<form id="merge-satellites-form" method="POST" action="{% url 'merge_satellites' %}">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="modal-header">
|
||||||
|
<h3 class="modal-title">Merge Satellites</h3>
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
|
<span aria-hidden="true">×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="input-group my-3">
|
||||||
|
<label class="input-group-prepend input-group-text" for="primary-satellite">Primary Satellite</label>
|
||||||
|
<select class="satellite-to-merge form-control" id="primary-satellite" name="primary-satellite">
|
||||||
|
<option></option> <!-- Empty <option> for showing placeholder -->
|
||||||
|
{% for sat in satellites %}
|
||||||
|
<option value="{{sat.pk}}">{{sat}}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="input-group my-3">
|
||||||
|
<label class="input-group-prepend input-group-text" for="associated-satellite">Associated Satellite</label>
|
||||||
|
<select class="satellite-to-merge" id="associated-satellite" name="associated-satellite">
|
||||||
|
<option></option> <!-- Empty <option> for showing placeholder -->
|
||||||
|
{% for sat in satellites %}
|
||||||
|
<option value="{{sat.pk}}">{{sat}}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="callout callout-warning">
|
||||||
|
<h5>WARNING</h5>
|
||||||
|
<p>"Associated Satellite" data will not be visible after merging.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" id="merge-satellites" class="btn btn-primary">Merge Satellites</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -140,6 +195,7 @@
|
||||||
<script src="{% static 'lib/admin-lte/plugins/datatables-buttons/js/buttons.colVis.js' %}"></script>
|
<script src="{% static 'lib/admin-lte/plugins/datatables-buttons/js/buttons.colVis.js' %}"></script>
|
||||||
<script src="{% static 'lib/admin-lte/plugins/datatables-bs4/js/dataTables.bootstrap4.min.js' %}"></script>
|
<script src="{% static 'lib/admin-lte/plugins/datatables-bs4/js/dataTables.bootstrap4.min.js' %}"></script>
|
||||||
<script src="{% static 'lib/admin-lte/plugins/datatables-buttons/js/buttons.bootstrap4.min.js' %}"></script>
|
<script src="{% static 'lib/admin-lte/plugins/datatables-buttons/js/buttons.bootstrap4.min.js' %}"></script>
|
||||||
|
<script src="{% static 'lib/admin-lte/plugins/select2/js/select2.min.js' %}"></script>
|
||||||
<script src="{% static 'js/jquery.bootstrap.modal.forms.min.js' %}"></script>
|
<script src="{% static 'js/jquery.bootstrap.modal.forms.min.js' %}"></script>
|
||||||
<script src="{% static 'js/satellites.js' %}"></script>
|
<script src="{% static 'js/satellites.js' %}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
Loading…
Reference in New Issue