diff --git a/entries/static/entries/js/components/LexicalUnitEdit.js b/entries/static/entries/js/components/LexicalUnitEdit.js index 3ff5ad35b4744843c485f8c540d9fa417660707b..5a95284d795aba1279fc05f1dbdbcde09142bb3b 100644 --- a/entries/static/entries/js/components/LexicalUnitEdit.js +++ b/entries/static/entries/js/components/LexicalUnitEdit.js @@ -272,6 +272,61 @@ export default { }; $.prompt(change_role_popup); } + }, + addArgument() { + var data = { 'unified_frame_id' : this.unified_frame.id}; + $.ajax({ + type : 'post', + url : '/' + lang + '/unifier/add_argument/', + dataType : 'json', + data : data, + timeout : 60000, + success : function(response) { + show_info('Nowy argument zosał dodany'); + this.loadFrame(); + }.bind(this), + error: function(request, errorType, errorMessage) { + show_error(errorType + ' (' + errorMessage + ')'); + $.prompt.close(); + } + }); + }, + removeArgument() { + if (!this.active_unified_frame_argument) { + alert(gettext("Zaznacz argument, który chcesz usunąć.")); + } else { + let hasSlowalFrameArgumentMapping = false; + for (var i in this.unified_frame.slowal_frame_mapping) { + var slowal_frame_mapping = this.unified_frame.slowal_frame_mapping[i]; + for (var j in slowal_frame_mapping.slowal_frame_argument_mapping) { + var slowal_frame_argument_mapping = slowal_frame_mapping.slowal_frame_argument_mapping[j]; + if (slowal_frame_argument_mapping.unified_frame_agrument_id == this.active_unified_frame_argument.id) { + hasSlowalFrameArgumentMapping = true; + break; + } + } + } + if (hasSlowalFrameArgumentMapping) { + alert(gettext("Zaznaczony argument nie może zostać usunięty - podpięte ramy posiadają do niego dowiązania.")); + } else { + var data = {'unified_frame_id': this.unified_frame.id, 'complement_id': this.active_unified_frame_argument.id}; + $.ajax({ + type: 'post', + url: '/' + lang + '/unifier/remove_argument/', + dataType: 'json', + data: data, + timeout: 60000, + success: function (response) { + show_info('Wybrany argument zosał usunięty'); + this.loadFrame(); + }.bind(this), + error: function (request, errorType, errorMessage) { + show_error(errorType + ' (' + errorMessage + ')'); + $.prompt.close(); + } + }); + } + } } }, mounted () { @@ -292,14 +347,14 @@ export default { <table class="table-button-menu" cellspacing="1"> <tr style="background-color: white;"> <td id="change-title" @click="changeTitle" style="padding: 10px 15px 10px 15px; color: #000000;">Zmień nazwę</td> - <td id="add-arg" style="padding: 10px 15px 10px 15px; color: #000000;">Dodaj argum.</td> + <td id="add-arg" @click="addArgument" style="padding: 10px 15px 10px 15px; color: #000000;">Dodaj argum.</td> <td style="padding: 10px 15px 10px 15px; color: #000000;" @click="addSelectivePreference">Dodaj prefer.</td> <td id="merge" style="padding: 10px 15px 10px 15px; color: #000000;">Scal</td> <td style="padding: 10px 15px 10px 15px; color: #000000;" @click="$emit('goToDisplay')">Gotowe</td> </tr> <tr style="background-color: white;"> <td id="change-role" @click="changeRole" style="padding: 10px 15px 10px 15px; color: #000000;">Zmień rolę</td> - <td id="remove-arg" style="padding: 10px 15px 10px 15px; color: #000000;">Usuń argum.</td> + <td id="remove-arg" @click="removeArgument" style="padding: 10px 15px 10px 15px; color: #000000;">Usuń argum.</td> <td id="change-windows" style="padding: 10px 15px 10px 15px; color: #000000;">Zamień okna</td> <td id="duplicates" style="padding: 10px 15px 10px 15px; color: #000000;">Duplikuj</td> <td id="save-changes" style="padding: 10px 15px 10px 15px; color: #000000;">Zapisz</td> diff --git a/syntax/management/commands/import_unification.py b/syntax/management/commands/import_unification.py index a842327246618988ee214d3f540a214166b1d15f..02831413164e67cb0c72ea222030cec71a4249e3 100644 --- a/syntax/management/commands/import_unification.py +++ b/syntax/management/commands/import_unification.py @@ -5,9 +5,16 @@ from django.core.management.base import BaseCommand import os, logging from xml.sax import handler, make_parser + +from django.db.models import Max + from importer.unification.UnificationPreprocessXML import UnificationPreprocessHandler from shellvalier.settings import BASE_DIR from common.models import ImportInProgress +from django.db import connection + +from unifier.models import UnifiedFrameArgument + class Command(BaseCommand): args = 'none' @@ -30,4 +37,10 @@ def import_unification(): parser.setContentHandler(UnificationPreprocessHandler()) parser.parse(xml_path) + max_id = UnifiedFrameArgument.objects.aggregate(Max('id'))['id__max']+1 + + trigger_sql = "ALTER SEQUENCE unifier_unifiedframeargument_id_seq RESTART "+str(max_id)+";" + cursor = connection.cursor() + cursor.execute(trigger_sql) + ImportInProgress.objects.all().delete() diff --git a/unifier/models.py b/unifier/models.py index 4962b3e4910c3e6791160cda3860f792d6beeee3..e804f174406433c6994b0346755e63e106176b3b 100644 --- a/unifier/models.py +++ b/unifier/models.py @@ -79,7 +79,7 @@ class UnifiedFrame(models.Model): class UnifiedFrameArgument(models.Model): - role_type = models.ForeignKey(RoleType, on_delete=models.PROTECT) + role_type = models.ForeignKey(RoleType, on_delete=models.PROTECT, default=None, blank=True, null=True) #rola - wybrana przez użytkownika role = models.ForeignKey(ArgumentRole, on_delete=models.PROTECT, default=None, blank=True, null=True) #role zaproponowane przez system unifikacyjny diff --git a/unifier/urls.py b/unifier/urls.py index 166cca024b697e0c22a1de18ffb3e80618d0a355..ee3a35c1165dcc690afd7f77159bb513a54eaa2c 100644 --- a/unifier/urls.py +++ b/unifier/urls.py @@ -16,5 +16,7 @@ urlpatterns = [ path('save_unified_frame_title/', views.save_unified_frame_title, name='save_unified_frame_title'), path('save_selected_role/', views.save_selected_role, name='save_selected_role'), path('save_new_role/', views.save_new_role, name='save_new_role'), + path('add_argument/', views.add_argument, name='add_argument'), + path('remove_argument/', views.remove_argument, name='remove_argument'), ] diff --git a/unifier/views.py b/unifier/views.py index 105092a9313077fc736dc662e562f5bf920477d4..204c2d197aded3780e20802c6f9455604b9a2737 100644 --- a/unifier/views.py +++ b/unifier/views.py @@ -104,7 +104,7 @@ def unifiedFrame2dict(frame): 'str': '{}{}'.format(a.role.role.role.lower(), ' ' + a.role.attribute.attribute.lower() if a.role.attribute else '') if a.role is not None else None, 'id': str(a.role.id) } if a.role is not None else None, - 'role_type' : a.role_type.type.lower(), + 'role_type' : a.role_type.type.lower() if a.role_type is not None else '', 'preferences' : get_prefs_list(a), 'proposed_roles': [{ 'str': '{}{}'.format(r.role.role.lower(), ' ' + r.attribute.attribute.lower() if r.attribute else ''), @@ -318,3 +318,25 @@ def save_new_role(request): unifiedFrameArgument.role = argumentRole unifiedFrameArgument.save() return JsonResponse({}) + +@ajax_required +@transaction.atomic +def add_argument(request): + if request.method == 'POST': + unified_frame_id = request.POST['unified_frame_id'] + + unifiedFrame = UnifiedFrame.objects.get(pk=unified_frame_id) + newUnifiedFrameArgument = UnifiedFrameArgument.objects.create(unified_frame=unifiedFrame) + newUnifiedFrameArgument.save() + return JsonResponse({}) + +@ajax_required +@transaction.atomic +def remove_argument(request): + if request.method == 'POST': + unified_frame_id = request.POST['unified_frame_id'] + complement_id = request.POST['complement_id'] + + newUnifiedFrameArgument = UnifiedFrameArgument.objects.get(id=complement_id) + newUnifiedFrameArgument.delete() + return JsonResponse({})