Skip to content

Commit

Permalink
Merge pull request #135 from RockefellerArchiveCenter/appraisal-note
Browse files Browse the repository at this point in the history
Allow RAC staff users to add appraisal notes to transfers
  • Loading branch information
dboutmybizness committed Dec 11, 2017
2 parents ce3dc21 + dc46370 commit 7e50b7c
Show file tree
Hide file tree
Showing 10 changed files with 229 additions and 57 deletions.
11 changes: 11 additions & 0 deletions project_electron/appraise/form.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from django import forms
from orgs.models import Archives

class AppraisalNoteUpdateForm(forms.ModelForm):
class Meta:
model = Archives
fields = ['appraisal_note']

def __init__(self, *args, **kwargs):
super(AppraisalNoteUpdateForm, self).__init__(*args, **kwargs)
self.fields['appraisal_note'].widget = forms.Textarea(attrs={'class': 'form-control'})
24 changes: 24 additions & 0 deletions project_electron/appraise/templates/appraise/edit_note.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<div class="modal-dialog">
<div class="modal-content">
<form id="appraisal-note-form" method='get' class="form" role="form" action='.' >
<input type="hidden" name="upload_id" class="upload_id" />
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span></button>
<h4 class="modal-title">
<span class="add-or-edit-label">Add</span> appraisal note for <span class="bag-name"></span>
</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label for="appraisal_note">Appraisal Note</label>
<textarea class="form-control appraisal_note" id="appraisal_note" rows="5"></textarea>
</div>
</div>
<div class="modal-footer">
<button type="cancel" class="btn btn-danger" data-dismiss="modal">Cancel</button>
<input type="submit" class="btn btn-primary" name="Submit"/>
</div>
</form>
</div>
</div>
133 changes: 90 additions & 43 deletions project_electron/appraise/templates/appraise/main.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,23 @@
<tbody>
{% for upload in uploads %}
<tr>
<td><a href="{% url 'transfer-detail' upload.pk %}">{{ upload.bag_or_failed_name }}</a></td>
<td><a href="{% url 'transfer-detail' upload.pk %}" class="bag-name">{{ upload.bag_or_failed_name }}</a></td>
<td>{{ upload.source_organization }}</td>
<td>{{ upload.record_creator }}</td>
<td>{{ upload.record_type }}</td>
<td>{{ upload.machine_file_upload_time }}</td>
<td>
<button type="button" class="btn btn-xs btn-danger" data-toggle="modal" data-target="#modal-reject">
<button type="button" class="btn btn-xs btn-danger">
Reject
</button>
<button type="button" class="btn btn-xs btn-primary" data-toggle="modal" data-target="#modal-accept">
<a type="button" class="btn btn-xs btn-primary">
Accept
</button>
</a>
<a type="button" class="appraisal-note btn btn-xs btn-{% if upload.appraisal_note %}info edit-note{% else %}default{% endif %} " data-toggle="modal" data-target="#modal-appraisal-note" rel="{{ upload.pk }}">
{% if upload.appraisal_note%}Edit{% else %}Add{% endif %} Note
</a>
</td>
</tr>

{% endfor %}
</tbody>
</table>
Expand All @@ -49,50 +51,17 @@
</div>
</div>

<div class="modal fade" id="modal-accept">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span></button>
<h4 class="modal-title">Appraisal note</h4>
</div>
<div class="modal-body">
<textarea class="form-control" rows="3"></textarea>
<p class="text-muted">{{request.user.username}} accepted this transfer on {% now "F jS Y" %} at {% now "H:i" %}</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary">Submit</button>
</div>
</div>
</div>
</div>

<div class="modal fade" id="modal-reject">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span></button>
<h4 class="modal-title">Appraisal note</h4>
</div>
<div class="modal-body">
<textarea class="form-control" rows="3"></textarea>
<p class="text-muted">{{request.user.username}} rejected this transfer on {% now "F jS Y" %} at {% now "H:i" %}</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary">Submit</button>
</div>
</div>
</div>
<div class="modal fade" id="modal-appraisal-note">
{% include 'appraise/edit_note.html' %}
</div>

{% endblock %}

{% block extra_js %}
<script type="text/javascript">
var amodal = $("#modal-appraisal-note");
var url = '{% url 'appraise-main' %}';

$(function () {
$('#appraise_table').DataTable({
'paging' : true,
Expand All @@ -103,6 +72,84 @@ <h4 class="modal-title">Appraisal note</h4>
'autoWidth' : true,
'pageLength' : 25
})


$(".appraisal-note").click(function(e) {
e.preventDefault();

var bag_name = $(this).parent().parent().find('.bag-name').text();
var upload_id = $(this).attr('rel');

if (!$(this).hasClass('edit-note')){
activateModal(upload_id, 'Add', bag_name);
return false;
}

var data = {
'req_type' : 'edit',
'req_form' : 'appraise',
'upload_id': upload_id
};

$.get(url,data, function(resp){
if (resp.success){
activateModal(upload_id,'Edit',bag_name,resp.appraisal_note);
} else {
alert('Something went wrong.. Please try again..');
}
});

return false;
});

$('#appraisal-note-form').submit(function(e){
e.preventDefault();
var frm = $(this)
var data = {
'upload_id': frm.find('.upload_id').val(),
'appraisal_note': frm.find('.appraisal_note').val(),
'req_form' : 'appraise',
'req_type' : 'submit'
}

//empty check, no need to submit
if (data.appraisal_note.length < 2){
alert('Note is too short!');
return false;
}

//AJAX submit
$.get(url,data,function(resp){
if (resp.success){
amodal.modal('hide');
resolveRowCallback(data.upload_id);
}
});

return false;
});
})

var activateModal = function(uid,label,bag_name,appraisal_note){
// setups up and opens modal
amodal.find('.upload_id').val(uid);
amodal.find('.add-or-edit-label').text(label);
amodal.find('.bag-name').text(bag_name);
amodal.find('.appraisal_note').val(appraisal_note);
amodal.modal('show');
}

var resolveRowCallback = function(uid){
$('.appraisal-note').each(function(){
if ($(this).attr('rel') == uid){

$(this).text('Edit Note');
$(this).removeClass('btn-default');
$(this).addClass('btn-info').addClass('edit-note');
}
});
}


</script>
{% endblock %}
5 changes: 3 additions & 2 deletions project_electron/appraise/urls.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from django.conf.urls import url
from appraise.views import AppraiseView
from appraise.views import AppraiseView, AppraisalNoteUpdateView

urlpatterns = [

url(r'^$', AppraiseView.as_view(), name='appraise-main'),
# url(r'^(?P<pk>\d+)/note/$', AppraisalNoteUpdateView.as_view(), name='appraise-note'),

]
]
66 changes: 57 additions & 9 deletions project_electron/appraise/views.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,65 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.views.generic import TemplateView
import json

from django.shortcuts import render
from django.http import HttpResponse
from django.views import View
from django.views.generic import TemplateView, UpdateView

from django.shortcuts import render, redirect
from orgs.models import Archives
from orgs.authmixins import RACUserMixin
from appraise.form import AppraisalNoteUpdateForm


class AppraiseView(RACUserMixin, TemplateView):
class AppraiseView(RACUserMixin, View):
template_name = "appraise/main.html"

def get_context_data(self, **kwargs):
context = super(TemplateView, self).get_context_data(**kwargs)
context['meta_page_title'] = 'Appraisal Queue'
context['uploads'] = Archives.objects.filter(process_status=40, organization = self.request.user.organization).order_by('created_time')
return context
# def get_context_data(self, **kwargs):
# context = super(TemplateView, self).get_context_data(**kwargs)
# context['meta_page_title'] = 'Appraisal Queue'
# context['uploads'] = Archives.objects.filter(process_status=40, organization = self.request.user.organization).order_by('created_time')
# return context

def get(self, request, *args, **kwargs):
if request.is_ajax():
rdata = {}
rdata['success'] = 0

#
if 'req_form' in request.GET:
if request.GET['req_form'] == 'appraise':
if 'req_type' in request.GET and 'upload_id' in request.GET:
try:
upload = Archives.objects.get(pk=request.GET['upload_id'])
except Archives.DoesNotExist as e:
rdata['emess'] = e
else:
if request.GET['req_type'] == 'edit':
rdata['appraisal_note'] = upload.appraisal_note
rdata['success'] = 1
elif request.GET['req_type'] == 'submit':
upload.appraisal_note = request.GET['appraisal_note']
upload.save()
rdata['success'] = 1

return self.render_to_json_response(rdata)

return render(request, self.template_name, {
'meta_page_title' : 'Appraisal Queue',
'uploads' : Archives.objects.filter(process_status=40).order_by('created_time')
})

def render_to_json_response(self, context, **response_kwargs):
data = json.dumps(context)
response_kwargs['content_type'] = 'application/json'
return HttpResponse(data, **response_kwargs)


class AppraisalNoteUpdateView(UpdateView):
model = Archives
form_class = AppraisalNoteUpdateForm
template_name = 'appraise/edit_note.html'

def form_valid(self, form):
form.save()
return redirect('appraise-main')
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
class Migration(migrations.Migration):

dependencies = [
('orgs', '0036_archives_process_status'),
('orgs', '0037_archives_additional_error_info'),
]

operations = [
Expand Down
20 changes: 20 additions & 0 deletions project_electron/orgs/migrations/0039_archives_appraisal_note.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.4 on 2017-11-20 18:48
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('orgs', '0038_auto_20171122_1025'),
]

operations = [
migrations.AddField(
model_name='archives',
name='appraisal_note',
field=models.TextField(blank=True),
),
]
20 changes: 20 additions & 0 deletions project_electron/orgs/migrations/0040_auto_20171201_1012.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.4 on 2017-12-01 15:12
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('orgs', '0039_archives_appraisal_note'),
]

operations = [
migrations.AlterField(
model_name='archives',
name='appraisal_note',
field=models.TextField(blank=True, null=True),
),
]
1 change: 1 addition & 0 deletions project_electron/orgs/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,7 @@ class Archives(models.Model):
machine_file_type = models.CharField(max_length=5,choices=machine_file_types)
bag_it_name = models.CharField(max_length=60)
bag_it_valid = models.BooleanField(default=False)
appraisal_note = models.TextField(blank=True, null=True)

additional_error_info = models.CharField(max_length=255,null=True,blank=True)
process_status = models.PositiveSmallIntegerField(choices=processing_statuses,default=20)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ <h3 class="box-title">Metadata</h3>
<div class="col-md-12">
<div class="box box-{% if object.accepted %}success{% elif object.rejected %}danger{% endif %}">
<div class="box-header with-border">
<h3 class="box-title">Appraisal information</h3>
<h3 class="box-title">Appraisal Information</h3>
</div>
<div class="box-body">
<textarea class="form-control" rows="3" placeholder="Appraisal note goes here..." {% if not user.is_appraiser %}disabled{% endif %}></textarea>
<p>{{ object.appraisal_note }}</p>
</div>
{% if user.is_appraiser %}
<div class="box-footer">
Expand Down

0 comments on commit 7e50b7c

Please sign in to comment.