Диплом: Автоматизация процесса управления распределением продуктов питания в ООО «Все продукты»

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
108
Приложение 3.
Экранные формы и результаты испытаний
Рисунок П3.1. Экранная форма и результат испытаний
«Аутентификация»
Рисунок П3.2. Экранная форма и результат испытаний
«Авторизация»
109
Рисунок П3.3. Экранная форма и результат испытаний «Выход»
Рисунок П3.4. Экранная форма и результат испытаний «Создание
пользователя»
110
Рисунок П3.5. Экранная форма и результат испытаний «Изменение
пользователя»
Рисунок П3.6. Экранная форма и результат испытаний «Удаление
пользователя»
111
Рисунок П3.7. Экранная форма и результат испытаний
«Добавление группы»
Рисунок П3.8. Экранная форма и результат испытаний «Изменение
права»
112
Рисунок П3.9. Экранная форма и результат испытаний «Удаление
права»
Рисунок П3.10. Экранная форма и результат испытаний
«Добавление группы»
113
Приложение 4.
Листинг программных модулей
# coding: utf-8
import ogr
import json
import datetime
import numpy as np
from urllib.parse import unquote
from psycopg2 import DatabaseError
from django.contrib.auth.decorators import login_required
from django.http import (HttpResponse, HttpResponseBadRequest, HttpResponseServerError)
from django.shortcuts import get_object_or_404, render
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import (require_GET, require_http_methods,
require_POST)
from cartoservice.permissions import has_access_to_cartoservice
from config.models import SiteConfiguration
from data_manager.models import Dictionary, Source
from data_manager.permissions import has_access_to_datamanager
from geoanalitika.middleware import get_host
from geoanalitika.settings import (ANONYMOUS_CAN_EDIT_MV,
CARTOMETRIC_ANALYSIS_FEATURES_LIMIT)
from journal.constants import MV_EDIT_LAYER_DATA
from journal.manage import create_journal_log
from tab_viewer.utils import get_joins
from main.mixins import FilterMixin
from main.models import GlobalCache
from main.consts import CacheKeys
from security_data.utils import get_user_security_tag
from .consts import DICT_CACHE_KEY
from .decorators import has_access_to_project
from .exceptions import OmnicommException
from .mapnik_funcs import *
from .models import BaseMap, File, Layer, Project, ProjectPermalink,
ProjectLayerPermission, OmnicommLayer
from .serializers import basemap_serializer, serialize_layer
from .tasks import update_attributes, update_extent
def index(request):
context = {
'data_manager_access': has_access_to_datamanager(request.user),
'cartoservice_access': has_access_to_cartoservice(request.user)
}
project_id = request.GET.get('project_id', None)
if project_id:
project = Project.objects.get(pk=int(project_id))
permission = project.get_user_permission(request.user)
context['can_edit'] = permission['change']
return render(request, 'projects/index.html', context)
def project_forbidden(request):
context = {'project': request.session['forbidden_project'], 'user': request.user}
114
display_header = request.GET.get('header', True)
if isinstance(display_header, str):
try:
display_header = bool(json.loads(display_header.lower()))
except:
display_header = True
context['display_header'] = display_header
return render(request, 'projects/project_forbidden.html', context)
@has_access_to_project
def project_detail(request, project, permission):
context = {}
template = 'projects/mapviewer.html'
context['can_edit'] = permission['change']
context['project'] = project
display_header = request.GET.get('header', True)
if isinstance(display_header, str):
try:
display_header = bool(json.loads(display_header.lower()))
except:
display_header = True
context['display_header'] = display_header
if 'iframe' in request.GET.keys():
template = 'projects/mapviewer-iframe.html'
elif request.user_agent.is_mobile or request.user_agent.is_tablet:
template = 'projects/mapviewer-mobile.html'
return render(request, template, context)
@has_access_to_project
def get_base_maps(request, project, permission):
base_maps_qs =
BaseMap.objects.filter(parent_id__isnull=True).order_by('id').prefetch_related('basemap
_set', 'path')
base_maps = []
project_base_map = project.get_basemap()
project_base_map_id = project_base_map.id if project_base_map else None
for base_map in base_maps_qs:
map_dict = basemap_serializer(base_map, project_base_map_id == base_map.id)
if base_map.basemap_set.all().exists():
map_dict['sublayers'] = [basemap_serializer(sublayer) for sublayer in
base_map.basemap_set.all()]
base_maps.append(map_dict)
return HttpResponse(content=json.dumps(base_maps), content_type='application/json')
def get_all_basemaps(request):
base_maps_qs =
BaseMap.objects.filter(parent_id__isnull=True).order_by('id').prefetch_related('basemap
_set', 'path')
base_maps = []
for base_map in base_maps_qs:
map_dict = basemap_serializer(base_map)
if base_map.basemap_set.all().exists():
map_dict['sublayers'] = [basemap_serializer(sublayer) for sublayer in
base_map.basemap_set.all()]
115
base_maps.append(map_dict)
return HttpResponse(content=json.dumps(base_maps), content_type='application/json')
@has_access_to_project
@require_http_methods(['GET'])
def ProjectLayers(request, project, permission):
permalink = None
if 'p' in request.GET:
try:
permalink = ProjectPermalink.objects.get(pk=request.GET.get('p'),
project=project)
except ProjectPermalink.DoesNotExist:
pass
groups = []
for layer in Layer.objects.filter(parent__isnull=True,
project=project).order_by('order'):
try:
groups.append(serialize_layer(layer, permalink))
except FileNotFoundError:
pass
if 'test_connection' in dir(layer.content_object):
try:
if layer.content_object.test_connection() != 200:
groups.pop()
except Exception:
groups.pop()
groups = [layer for layer in groups if layer is not None]
return HttpResponse(content=json.dumps({'groups': groups}),
content_type='application/json')
@has_access_to_project
@require_http_methods(['GET'])
def get_attributes_view(request, project, permission):
security_tag = get_user_security_tag(request.user)
layers = Layer.objects.filter(project=project, is_group=False).order_by('order')
layer_ids = request.GET.get('layers', None)
if layer_ids is not None:
try:
layers = layers.filter(id__in=layer_ids.split(','))
except (TypeError, ValueError):
HttpResponseBadRequest('Wrong format for ids list')
attributes = []
for layer in layers:
if layer.get_user_permission(request.user)['view']:
attribute = layer.get_attributes()
if not request.user.is_superuser and security_tag:
security_tag_attrs = set([item.name for item in
security_tag.items.all()])
for i, attr in enumerate(attribute):
if attr['dictionary'] and attr['name'] in security_tag_attrs:
attribute[i]['dictionary'] = [dict_item for dict_item in
116
attribute[i]['dictionary'] if not security_tag.validate({attr['name']:
dict_item['key']})]
cache.set(DICT_CACHE_KEY % (request.user.id,
attr['dictionary_id']), attribute[i]['dictionary'], 10)
source = layer.content_object.get_sources()[0]
attributes.append({
'id': layer.id,
'attributes': attribute,
'joined': get_joins(source['source'], source['name']) if
source.get('name') else []
})
return HttpResponse(content=json.dumps({'status': 'ok', 'layers': attributes}),
content_type='application/json')
@has_access_to_project
@require_http_methods(['GET'])
def get_extent(request, project, permission):
layers = Layer.objects.filter(project=project).order_by('order')
layer_ids = request.GET.get('layers', None)
sql_filter = request.GET.get('sql_filter', None)
sql_filter = ('WHERE ' + sql_filter) if sql_filter else ''
if layer_ids is not None:
try:
layers = layers.filter(id__in=layer_ids.split(','))
except (TypeError, ValueError):
HttpResponse(content='Wrong format for ids list', status=400)
result = []
for layer in layers:
if not layer.get_user_permission(request.user)['view']:
continue
if not layer.is_group:
co = layer.content_object
if co is not None:
if co._meta.model_name == 'arcgisservice':
[folder, service] = layer.name.split('/')
extent = co.get_bounding_box(folder=folder, service=service,
srid=4326)
elif layer.source._meta.model_name in ['folder', 'database',
'saikuservice']:
extent = None
else:
try:
extent = co.get_bounding_box(srid=4326, layer_name=layer.name
if layer.name else None,
**{'sql_filter': sql_filter})
except Exception as e:
extent = None
else:
extent = None
if extent is not None:
result.append({
'id': layer.id,
'extent': str(extent[1]) + ',' + str(extent[0]) + ',' +
str(extent[3]) + ',' + str(extent[2])
})
return HttpResponse(content=json.dumps(result), content_type='application/json')
117
@has_access_to_project
@require_http_methods(['GET'])
def ProjectPlugins(request, project, permission):
site_config = SiteConfiguration.get_solo()
project_url = '{0}{1}'.format(get_host(),
request.META['PATH_INFO'].replace('plugins.json', ''))
context = {
'name': project.name,
'preview': project.preview.url if project.preview else '',
# возможно требуется для мобильного приложения
'project_url': project_url,
'project': {
'slug': project.slug
},
'host_url': get_host(),
'can_edit': True if permission['partial'] else permission['change'],
'search_margin': site_config.mapviewer_point_search_margin,
'fullFeatureInfo': True
}
context['project_search'] = json.loads(project.parameters).get('search', [
{
"active": True,
"name": "\u041f\u043e \u0430\u0434\u0440\u0435\u0441\u0443",
"type": "address",
"inExtent": False
},
{
"active": True,
"name": "\u041f\u043e \u0441\u043b\u043e\u044f\u043c",
"type": "layer"
},
{
"active": True,
"name": "\u041f\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c",
"type": "objects"
}
])
context['project_search'] = json.dumps(context['project_search'])
# управление аналитической панелью
layer_id_can_edit = []
def set_perms(can_edit=None):
def set_perm(sublayers):
for sublayer in sublayers:
if sublayer['sublayers']:
set_perm(sublayer['sublayers'])
elif not sublayer['is_group']:
if (can_edit is None and sublayer['layer_id'] in layers_id_edit) or
can_edit:
layer_id_can_edit.append(sublayer['layer_id'])
gc = GlobalCache.objects.get(key=CacheKeys.LAYER_TREE % project.slug)
layers = json.loads(gc.cache)
set_perm(layers['groups'])
dashboard_perm = project.dashboard_permission
if not dashboard_perm:
dashboard_perm = site_config.project_dashboard_default_permission
if permission['partial']:
if request.user.is_anonymous:

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Agile-методология в управлении проектами на примере ООО «Ресурсный центр «Академия КлассИнфо»
Aвтoмaтизaция пpoцecca вeдeния инфopмaциoннoй бaзы o дoлжнocтяx и вaкaнcияx c укaзaниeм тpeбoвaний к уpoвню знaний и нaвыкoв кaндидaтoв для гpуппы кaдpoв вoйcкoвoй чacти 3474»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
Cовершенствование управления рентабельности предприятия (на примере гуипп «бендерская типография «полиграфист»)
Event - менеджмент: реализация проекта (на примере ООО "АГРОПАК")