summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/models_common.py25
-rw-r--r--ishtar_common/models_imports.py7
-rw-r--r--ishtar_common/templates/ishtar/blocks/sheet_creation_section.html4
-rw-r--r--ishtar_common/templates/ishtar/import_table.html2
-rw-r--r--ishtar_common/templates/ishtar/sheet_import.html98
-rw-r--r--ishtar_common/templates/ishtar/sheet_import_gen.html98
-rw-r--r--ishtar_common/templates/ishtar/sheet_importgroup.html12
-rw-r--r--ishtar_common/templates/ishtar/sheet_importgroup_pdf.html14
-rw-r--r--ishtar_common/templates/ishtar/sheet_importgroup_window.html3
-rw-r--r--ishtar_common/urls.py5
-rw-r--r--ishtar_common/utils.py14
-rw-r--r--ishtar_common/views.py1
12 files changed, 167 insertions, 116 deletions
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index 79c9600dd..43677bca4 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -49,6 +49,7 @@ from ishtar_common.utils import (
get_image_path,
get_columns_from_class,
human_date,
+ SheetItem
)
from simple_history.models import HistoricalRecords as BaseHistoricalRecords
from simple_history.signals import (
@@ -1111,9 +1112,16 @@ class Imported(models.Model):
return []
q = getattr(self, key)
if user.is_superuser or user.ishtaruser.has_right("view_import"):
- return list(q.all())
- q = q.filter(Q(user=user.ishtaruser) | Q(importer_type__users__pk=user.ishtaruser.pk))
- return list(q.all())
+ lst = list(q.all())
+ else:
+ lst = q.filter(Q(user=user.ishtaruser) | Q(importer_type__users__pk=user.ishtaruser.pk))
+ new_lst = []
+ for imprt in lst:
+ if imprt.group:
+ new_lst.append(imprt.group)
+ else:
+ new_lst.append(imprt)
+ return new_lst
def get_imports(self, user):
return self._get_imports(user, "imports")
@@ -3102,7 +3110,7 @@ class ShortMenuItem:
return ""
-class MainItem(ShortMenuItem, SerializeItem):
+class MainItem(ShortMenuItem, SerializeItem, SheetItem):
"""
Item with quick actions available from tables
Extra actions are available from sheets
@@ -3182,15 +3190,6 @@ class MainItem(ShortMenuItem, SerializeItem):
except NoReverseMatch:
return
- def get_show_url(self):
- show_url = self.SHOW_URL
- if not show_url:
- show_url = "show-" + self.__class__.__name__.lower()
- try:
- return reverse(show_url, args=[self.pk, ""])
- except NoReverseMatch:
- return
-
@classmethod
def get_columns(cls, table_cols_attr="TABLE_COLS", dict_col_labels=True):
"""
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py
index 02b86849c..84ea42112 100644
--- a/ishtar_common/models_imports.py
+++ b/ishtar_common/models_imports.py
@@ -75,7 +75,8 @@ from ishtar_common.utils import (
put_session_var,
reverse_coordinates,
update_data,
- OwnPerms
+ OwnPerms,
+ SheetItem
)
from ishtar_common.data_importer import (
Importer,
@@ -1340,7 +1341,7 @@ IMPORT_GEOMETRY = {
}
-class BaseImport(models.Model, OwnPerms):
+class BaseImport(models.Model, OwnPerms, SheetItem):
user = models.ForeignKey(
"IshtarUser", blank=True, null=True, on_delete=models.SET_NULL
)
@@ -1484,6 +1485,7 @@ class ImportGroup(BaseImport):
)
ADMIN_SECTION = _("Imports")
SLUG = "importgroup"
+ SHOW_URL = "show-importgroup"
def __str__(self):
return f"{self.name} ({self.importer_type.name})"
@@ -1879,6 +1881,7 @@ class Import(BaseImport):
)
ADMIN_SECTION = _("Imports")
SLUG = "import"
+ SHOW_URL = "show-import"
def __str__(self):
return "{} | {}".format(self.name or "-", self.importer_type)
diff --git a/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html b/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html
index 4460809d4..fc969bb17 100644
--- a/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html
+++ b/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html
@@ -22,7 +22,7 @@
<dl class="col-12 col-md-6 col-lg-3 flex-wrap">
<dt>{% trans "Imports (creation)" %}</dt>
<dd>{% for imprt in get_import_list %}{% if loop.counter %} ; {% endif %}
- <a class="display_details" href="#" onclick="load_window('{% url 'show-import' imprt.pk %}')">
+ <a class="display_details" href="#" onclick="load_window('{{ imprt.get_show_url }}')">
<i class="fa fa-info-circle" aria-hidden="true"></i>
</a> {{imprt}}{% endfor %}</dd>
</dl>
@@ -31,7 +31,7 @@
<dl class="col-12 col-md-6 col-lg-3 flex-wrap">
<dt>{% trans "Imports (update)" %}</dt>
<dd>{% for imprt in get_import_updated %}{% if loop.counter %} ; {% endif %}
- <a class="display_details" href="#" onclick="load_window('{% url 'show-import' imprt.pk %}')">
+ <a class="display_details" href="#" onclick="load_window('{{ imprt.get_show_url }}')">
<i class="fa fa-info-circle" aria-hidden="true"></i>
</a> {{imprt}}{% endfor %}</dd>
</dl>
diff --git a/ishtar_common/templates/ishtar/import_table.html b/ishtar_common/templates/ishtar/import_table.html
index 0a894b778..be3af600b 100644
--- a/ishtar_common/templates/ishtar/import_table.html
+++ b/ishtar_common/templates/ishtar/import_table.html
@@ -65,7 +65,7 @@
class='import-row{% if import.has_error or not import.pre_import_form_is_valid %}-error{% endif %}{% if import.pk in refreshed_pks %} bg-info{% endif %}'>
<td><ul class="simple">
<li>
- <a class="display_details" href="#" onclick="load_window('{% url 'show-import' import.pk %}')"><i class="fa fa-info-circle" aria-hidden="true"></i></a>
+ <a class="display_details" href="#" onclick="load_window('{{ import.get_show_url }}')"><i class="fa fa-info-circle" aria-hidden="true"></i></a>
<strong>{{import.name|default:"-"}}</strong>
</li>
<li><small><i class="fa fa-fw fa-calendar" aria-hidden="true"></i>&nbsp; {{import.creation_date|date:"DATE_FORMAT"}} {{import.creation_date|time:"H:i"}} - {% if import.end_date %}{{import.end_date|date:"DATE_FORMAT"}} {{import.end_date|time:"H:i"}}{% endif %}</small></li>
diff --git a/ishtar_common/templates/ishtar/sheet_import.html b/ishtar_common/templates/ishtar/sheet_import.html
index 6ee4837a9..8685d9ae8 100644
--- a/ishtar_common/templates/ishtar/sheet_import.html
+++ b/ishtar_common/templates/ishtar/sheet_import.html
@@ -8,101 +8,5 @@
{% endblock %}
{% block content %}
-{% trans "Source" as source_label %}
-{% trans "Media" as media_label %}
-{% trans "Result" as result_label %}
-{% trans "Error" as error_label %}
-{% trans "Match" as match_label %}
-
-{% with current_import=item %}{% with object=item %}
-{% with imported_list=object.get_all_imported %}
-{% with updated_list=object.get_all_updated %}
-
-{% if output != "ODT" and output != "PDF" %}
-<ul class="nav nav-tabs" id="{{window_id}}-tabs" role="tablist">
- <li class="nav-item">
- <a class="nav-link active" id="{{window_id}}-general-tab"
- data-toggle="tab" href="#{{window_id}}-general" role="tab"
- aria-controls="{{window_id}}-general" aria-selected="false">
- {% trans "General" %}
- </a>
- </li>
- {% if imported_list %}<li class="nav-item">
- <a class="nav-link" id="{{window_id}}-created-tab"
- data-toggle="tab" href="#{{window_id}}-created" role="tab"
- aria-controls="{{window_id}}-general" aria-selected="false">
- {% trans "Created" %}
- </a>
- </li>{% endif %}
- {% if updated_list %}<li class="nav-item">
- <a class="nav-link" id="{{window_id}}-updated-tab"
- data-toggle="tab" href="#{{window_id}}-updated" role="tab"
- aria-controls="{{window_id}}-updated" aria-selected="false">
- {% trans "Updated" %}
- </a>
- </li>{% endif %}
-</ul>
-{% endif %}
-
-<div class="tab-content" id="{{window_id}}-tab-content">
- <div class="tab-pane fade show active" id="{{window_id}}-general"
- role="tabpanel" aria-labelledby="{{window_id}}-general-tab">
- <div class="row mb-3">
- {% field_flex "Name" item.name %}
- {% field_flex "Type" item.importer_type %}
-
- <div class="col-12 col-md-6 col-lg-3 flex-wrap">
- <i class="fa fa-hourglass-start" aria-hidden="true"></i>&nbsp; {{item.creation_date|date:"DATE_FORMAT"}} {{item.creation_date|time:"H:i"}}
- {% if item.end_date %}<br><i class="fa fa-hourglass-end" aria-hidden="true"></i>&nbsp; {{item.end_date|date:"DATE_FORMAT"}} {{item.end_date|time:"H:i"}}{% endif %}
- </div>
- <div class="col-12 col-md-6 col-lg-3 flex-wrap">
- <i class="fa fa-fw fa-user" aria-hidden="true"></i>&nbsp; {{item.user}}
- </div>
-
- {% if item.imported_file %}
- <div class="col-12 col-md-6 col-lg-3 flex-wrap">
- {% with file_label=source_label logo='fa fa-fw fa-file-text-o' file_type='source' file=item.imported_file %}
- {% include "ishtar/blocks/import_table_buttons_view.html" %}
- {% endwith %}
- </div>
-
- {% if item.get_imported_images %}
- <div class="col-12 col-md-6 col-lg-3 flex-wrap">
- {% with file_label=media_label logo='fa fa-fw fa-file-image-o' file_type='' file=item.get_imported_images %}
- {% include "ishtar/blocks/import_table_buttons_view.html" %}
- {% endwith %}
- </div>{% endif %}
- {% elif item.archive_file %}
- <div class="col-12 col-md-6 col-lg-3 flex-wrap">
- <i class="fa fa-fw fa-file-archive-o" aria-hidden="true"></i> <a href='{{item.archive_file.url}}'>{% trans "Archive" context "name" %}</a>
- </div>{% endif %}
- </div>
- </div>
- {% if imported_list %}
- <div class="tab-pane fade" id="{{window_id}}-created"
- role="tabpanel" aria-labelledby="{{window_id}}-created-tab">
- <div class="row">
- {% for accessor, imported in imported_list %}
- {% include "ishtar/import_associated_item.html" %}
- {% endfor %}
- {% comment %}<div><div>{% endcomment %}
- </div>
- </div>
- </div>
- </div>{% endif %}
- {% if updated_list %}
- <div class="tab-pane fade" id="{{window_id}}-updated"
- role="tabpanel" aria-labelledby="{{window_id}}-updated-tab">
- <div class="row">
- {% for accessor, imported in updated_list %}
- {% include "ishtar/import_associated_item.html" %}
- {% endfor %}
- {% comment %}<div><div>{% endcomment %}
- </div>
- </div>
- </div>
- </div>{% endif %}
-</div>
-
-{% endwith %}{% endwith %}{% endwith %}{% endwith %}
+{% include "ishtar/sheet_import_gen.html" %}
{% endblock %}
diff --git a/ishtar_common/templates/ishtar/sheet_import_gen.html b/ishtar_common/templates/ishtar/sheet_import_gen.html
new file mode 100644
index 000000000..86c2ac6fe
--- /dev/null
+++ b/ishtar_common/templates/ishtar/sheet_import_gen.html
@@ -0,0 +1,98 @@
+{% load i18n window_header window_field window_tables %}
+{% trans "Source" as source_label %}
+{% trans "Media" as media_label %}
+{% trans "Result" as result_label %}
+{% trans "Error" as error_label %}
+{% trans "Match" as match_label %}
+
+{% with current_import=item %}{% with object=item %}
+{% with imported_list=object.get_all_imported %}
+{% with updated_list=object.get_all_updated %}
+
+{% if output != "ODT" and output != "PDF" %}
+<ul class="nav nav-tabs" id="{{window_id}}-tabs" role="tablist">
+ <li class="nav-item">
+ <a class="nav-link active" id="{{window_id}}-general-tab"
+ data-toggle="tab" href="#{{window_id}}-general" role="tab"
+ aria-controls="{{window_id}}-general" aria-selected="false">
+ {% trans "General" %}
+ </a>
+ </li>
+ {% if imported_list %}<li class="nav-item">
+ <a class="nav-link" id="{{window_id}}-created-tab"
+ data-toggle="tab" href="#{{window_id}}-created" role="tab"
+ aria-controls="{{window_id}}-general" aria-selected="false">
+ {% trans "Created" %}
+ </a>
+ </li>{% endif %}
+ {% if updated_list %}<li class="nav-item">
+ <a class="nav-link" id="{{window_id}}-updated-tab"
+ data-toggle="tab" href="#{{window_id}}-updated" role="tab"
+ aria-controls="{{window_id}}-updated" aria-selected="false">
+ {% trans "Updated" %}
+ </a>
+ </li>{% endif %}
+</ul>
+{% endif %}
+
+<div class="tab-content" id="{{window_id}}-tab-content">
+ <div class="tab-pane fade show active" id="{{window_id}}-general"
+ role="tabpanel" aria-labelledby="{{window_id}}-general-tab">
+ <div class="row mb-3">
+ {% field_flex "Name" item.name %}
+ {% field_flex "Type" item.importer_type %}
+
+ <div class="col-12 col-md-6 col-lg-3 flex-wrap">
+ <i class="fa fa-hourglass-start" aria-hidden="true"></i>&nbsp; {{item.creation_date|date:"DATE_FORMAT"}} {{item.creation_date|time:"H:i"}}
+ {% if item.end_date %}<br><i class="fa fa-hourglass-end" aria-hidden="true"></i>&nbsp; {{item.end_date|date:"DATE_FORMAT"}} {{item.end_date|time:"H:i"}}{% endif %}
+ </div>
+ <div class="col-12 col-md-6 col-lg-3 flex-wrap">
+ <i class="fa fa-fw fa-user" aria-hidden="true"></i>&nbsp; {{item.user}}
+ </div>
+
+ {% if item.imported_file %}
+ <div class="col-12 col-md-6 col-lg-3 flex-wrap">
+ {% with file_label=source_label logo='fa fa-fw fa-file-text-o' file_type='source' file=item.imported_file %}
+ {% include "ishtar/blocks/import_table_buttons_view.html" %}
+ {% endwith %}
+ </div>
+
+ {% if item.get_imported_images %}
+ <div class="col-12 col-md-6 col-lg-3 flex-wrap">
+ {% with file_label=media_label logo='fa fa-fw fa-file-image-o' file_type='' file=item.get_imported_images %}
+ {% include "ishtar/blocks/import_table_buttons_view.html" %}
+ {% endwith %}
+ </div>{% endif %}
+ {% elif item.archive_file %}
+ <div class="col-12 col-md-6 col-lg-3 flex-wrap">
+ <i class="fa fa-fw fa-file-archive-o" aria-hidden="true"></i> <a href='{{item.archive_file.url}}'>{% trans "Archive" context "name" %}</a>
+ </div>{% endif %}
+ </div>
+ </div>
+ {% if imported_list %}
+ <div class="tab-pane fade" id="{{window_id}}-created"
+ role="tabpanel" aria-labelledby="{{window_id}}-created-tab">
+ <div class="row">
+ {% for accessor, imported in imported_list %}
+ {% include "ishtar/import_associated_item.html" %}
+ {% endfor %}
+ {% comment %}<div><div>{% endcomment %}
+ </div>
+ </div>
+ </div>
+ </div>{% endif %}
+ {% if updated_list %}
+ <div class="tab-pane fade" id="{{window_id}}-updated"
+ role="tabpanel" aria-labelledby="{{window_id}}-updated-tab">
+ <div class="row">
+ {% for accessor, imported in updated_list %}
+ {% include "ishtar/import_associated_item.html" %}
+ {% endfor %}
+ {% comment %}<div><div>{% endcomment %}
+ </div>
+ </div>
+ </div>
+ </div>{% endif %}
+</div>
+
+{% endwith %}{% endwith %}{% endwith %}{% endwith %}
diff --git a/ishtar_common/templates/ishtar/sheet_importgroup.html b/ishtar_common/templates/ishtar/sheet_importgroup.html
new file mode 100644
index 000000000..593642945
--- /dev/null
+++ b/ishtar_common/templates/ishtar/sheet_importgroup.html
@@ -0,0 +1,12 @@
+{% extends "ishtar/sheet.html" %}
+{% load i18n window_header window_field window_tables %}
+
+{% block head_title %}<strong>{% trans "Import" %}</strong> &ndash; {{item.name}}{% endblock %}
+
+{% block toolbar %}
+{% window_nav item window_id 'show-importgroup' %}
+{% endblock %}
+
+{% block content %}
+{% include "ishtar/sheet_import_gen.html" %}
+{% endblock %}
diff --git a/ishtar_common/templates/ishtar/sheet_importgroup_pdf.html b/ishtar_common/templates/ishtar/sheet_importgroup_pdf.html
new file mode 100644
index 000000000..486f85a86
--- /dev/null
+++ b/ishtar_common/templates/ishtar/sheet_importgroup_pdf.html
@@ -0,0 +1,14 @@
+{% extends "ishtar/sheet_importgroup.html" %}
+{% block header %}
+{% endblock %}
+{% block main_head %}
+{{ block.super }}
+<div id="pdfheader">
+Ishtar &ndash; {{APP_NAME}} &ndash; {{item}}
+</div>
+{% endblock %}
+{%block head_sheet%}{%endblock%}
+{%block main_foot%}
+</body>
+</html>
+{%endblock%}
diff --git a/ishtar_common/templates/ishtar/sheet_importgroup_window.html b/ishtar_common/templates/ishtar/sheet_importgroup_window.html
new file mode 100644
index 000000000..5093cbcec
--- /dev/null
+++ b/ishtar_common/templates/ishtar/sheet_importgroup_window.html
@@ -0,0 +1,3 @@
+{% extends "ishtar/sheet_importgroup.html" %}
+{% block main_head %}{%endblock%}
+{% block main_foot %}{%endblock%}
diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py
index 099839102..9a5ee4f1c 100644
--- a/ishtar_common/urls.py
+++ b/ishtar_common/urls.py
@@ -460,6 +460,11 @@ urlpatterns += [
name="show-import",
),
url(
+ r"show-importgroup(?:/(?P<pk>\d+))?/(?P<type>odt|pdf)?$",
+ views.show_import_group,
+ name="show-importgroup",
+ ),
+ url(
r"autocomplete-organization/([0-9_]+)?$",
views.autocomplete_organization,
name="autocomplete-organization",
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index c9bf53fc7..e0a670d56 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -62,10 +62,10 @@ from django.core.exceptions import SuspiciousOperation, ObjectDoesNotExist, \
from django.core.files import File
from django.core.files.storage import FileSystemStorage
from django.core.validators import EMPTY_VALUES
-from django.urls import reverse
from django.db import models
from django.db.models import Q
from django.http import HttpResponseRedirect
+from django.urls import reverse, NoReverseMatch
from django.utils.crypto import get_random_string
from django.utils.datastructures import MultiValueDict as BaseMultiValueDict
from django.utils.safestring import mark_safe
@@ -275,6 +275,18 @@ def check_model_access_control(request, model, available_perms=None):
return allowed, own
+class SheetItem:
+ SHOW_URL = ""
+ def get_show_url(self):
+ show_url = self.SHOW_URL
+ if not show_url:
+ show_url = "show-" + self.__class__.__name__.lower()
+ try:
+ return reverse(show_url, args=[self.pk, ""])
+ except NoReverseMatch:
+ return
+
+
class OwnPerms:
"""
Manage special permissions for object's owner
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index fe0e94e87..15e0158da 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -1095,6 +1095,7 @@ get_ishtaruser = get_item(models.IshtarUser, "get_ishtaruser", "ishtaruser")
show_town = show_item(models.Town, "town")
show_area = show_item(models.Area, "area")
show_import = show_item(models.Import, "import")
+show_import_group = show_item(models.ImportGroup, "importgroup")
def action(request, action_slug, obj_id=None, *args, **kwargs):
"""