From edc2177f86a90e535c70b0907cac5a735b6380bf Mon Sep 17 00:00:00 2001
From: dcz <dcz@ipipan.waw.pl>
Date: Thu, 30 Jun 2022 22:42:14 +0200
Subject: [PATCH] LU assigment bugfix.

---
 .../js/components/LexicalUnitDisplay.js       | 17 +++++++++-------
 entries/static/entries/js/unification.js      |  1 +
 semantics/urls.py                             |  2 +-
 semantics/views.py                            | 20 ++++++++++++-------
 4 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/entries/static/entries/js/components/LexicalUnitDisplay.js b/entries/static/entries/js/components/LexicalUnitDisplay.js
index 50b503e..adec5a7 100644
--- a/entries/static/entries/js/components/LexicalUnitDisplay.js
+++ b/entries/static/entries/js/components/LexicalUnitDisplay.js
@@ -22,7 +22,7 @@ export default {
     take () {
       $.ajax({
         type     : 'post',
-        url      : `/${lang}/semantics/frame_assign/${this.frame.id}/`,
+        url      : `/${lang}/semantics/frame_assign/${this.unifiedFrame.pk}/`,
         dataType : 'json',
         timeout  : 60000,
       }).then(() => { this.$emit('goToEdit', this.unifiedFrame.pk); });
@@ -43,10 +43,13 @@ export default {
         timeout: 60000,
       }).then(() => { this.$emit('refresh'); });
     },
-    isReadyToProcess() {
-      return this.isLeksykograf() || (this.frame?.status === 'O' || this.frame?.status === 'G') && this.unifiedFrame?.status === 'O';
+    isReadyToProcess () {
+      return (!this.isLeksykograf() && this.unifiedFrame?.status === 'G') || (this.isLeksykograf() && this.frame?.status === 'O');
     },
-    isLeksykograf() {
+    isReadyToGet () {
+      return this.isLeksykograf() && this.frame?.status === 'N';
+    },
+    isLeksykograf () {
       return !has_permission("users.view_assignment");
     },
     setup_notes () {
@@ -84,11 +87,11 @@ export default {
       <div id="semantics-frames"></div>
       <div class="text-center mb-3">
         <div v-if="unifiedFrame">
-          <a class="btn btn-sm btn-outline-dark mr-2" v-if="frame?.status === 'N'" @click="markAsInvalid">{{ gettext('Błędna') }}</a>
-          <a class="btn btn-sm btn-outline-dark mr-2" v-if="frame?.status === 'N'" @click="take">{{ gettext('Pobierz') }}</a>
+          <a class="btn btn-sm btn-outline-dark mr-2" v-if="frame?.status === 'N'" @click="markAsInvalid">{{ !isLeksykograf() ? gettext('Zła') : gettext('Błędna') }}</a>
+          <a class="btn btn-sm btn-outline-dark mr-2" v-if="isReadyToGet()" @click="take">{{ gettext('Pobierz') }}</a>
           <a
             class="btn btn-sm btn-outline-dark mr-2"
-            v-if="isReadyToProcess() || isLeksykograf"
+            v-if="isReadyToProcess()"
             @click="$emit('goToEdit', this.unifiedFrame.pk)"
           >
             {{ isLeksykograf() ? gettext('Obrabiaj') : gettext('Sprawdź') }}
diff --git a/entries/static/entries/js/unification.js b/entries/static/entries/js/unification.js
index be5e65c..bc2d811 100644
--- a/entries/static/entries/js/unification.js
+++ b/entries/static/entries/js/unification.js
@@ -51,6 +51,7 @@ function slowal_frames2selecional_preferencies(unified_frame, slowal_frames) {
             var slowal_frame_argument_mapping = slowal_frame_mapping.slowal_frame_argument_mapping[j];
 
             let slowal_frame_argument = slowal_frame.arguments.find(o => o.argument_id === slowal_frame_argument_mapping.slowal_frame_agrument_id);
+            let unified_frame_argument = unified_frame.arguments.find(o => o.argument_id === slowal_frame_argument_mapping.unified_frame_agrument_id);
 
             let preferenceEntry = unified_argument_2_selecional_preferencies[slowal_frame_argument_mapping.unified_frame_agrument_id];
             if(preferenceEntry == null) {
diff --git a/semantics/urls.py b/semantics/urls.py
index 48d7e85..92a20ad 100644
--- a/semantics/urls.py
+++ b/semantics/urls.py
@@ -6,7 +6,7 @@ app_name = 'semantics'
 
 urlpatterns = [
     path('frame_mark_as_invalid/<int:frame_pk>/', views.frame_mark_as_invalid, name='frame_mark_as_invalid'),
-    path('frame_assign/<int:frame_pk>/', views.frame_assign, name='frame_assign'),
+    path('frame_assign/<int:unified_frame_pk>/', views.frame_assign, name='frame_assign'),
     path('frame_confirm_invalid/<int:frame_pk>/', views.frame_confirm_invalid, name='frame_confirm_invalid'),
     path('frame_reject_invalid/<int:frame_pk>/', views.frame_reject_invalid, name='frame_reject_invalid'),
 ]
diff --git a/semantics/views.py b/semantics/views.py
index 719f55e..d1c3537 100644
--- a/semantics/views.py
+++ b/semantics/views.py
@@ -4,6 +4,7 @@ from django.db import transaction
 from django.shortcuts import get_object_or_404
 
 from common.decorators import ajax
+from unifier.models import UnifiedFrame, UnifiedFrame2SlowalFrameMapping
 from users.models import Assignment
 
 from . import choices
@@ -21,14 +22,19 @@ def frame_mark_as_invalid(request, frame_pk):
 
 @ajax(login_required=True, method='post')
 @transaction.atomic
-def frame_assign(request, frame_pk):
-    frame = get_object_or_404(
-        Frame.objects.filter(status=choices.FrameStatus.NEW).select_for_update(),
-        pk=frame_pk,
+def frame_assign(request, unified_frame_pk):
+    unifiedFrame = get_object_or_404(
+        UnifiedFrame.objects,
+        pk=unified_frame_pk,
     )
-    frame.status = choices.FrameStatus.PROCESSING
-    Assignment.assign(user=request.user, subject=frame)
-    frame.save()
+
+    slowal_frames = [connection.slowal_frame for connection in unifiedFrame.unified_frame_2_slowal_frame.all()]
+
+    for slowal_frame in slowal_frames:
+        slowal_frame.status = choices.FrameStatus.PROCESSING
+        Assignment.assign(user=request.user, subject=slowal_frame)
+        slowal_frame.save()
+
     return {}
 
 
-- 
GitLab