diff --git a/journals/templatetags/lookup.py b/journals/templatetags/lookup.py index e262a10bf1911590174b222822388bf899d160bd..bdfeb24b0ce148daab9e22cc133a37abf5e7cc2a 100644 --- a/journals/templatetags/lookup.py +++ b/journals/templatetags/lookup.py @@ -21,3 +21,11 @@ class PublicationLookup(LookupChannel): return u"%s (%s)<br><span class='text-muted'>by %s</span>" % (item.title, item.doi_string, item.author_list) + + def check_auth(self, request): + """ + Check if current user has required permissions. + Right now only used for draft registration invitations. May be extended in the + future for other purposes as well. + """ + return request.user.has_perm('can_draft_registration_invitations') diff --git a/scipost/forms.py b/scipost/forms.py index 01da3591d7c282e1593f1170260ffd1191a09c72..0b7bb73ef229655d7483e8dd890d0126d42c6c58 100644 --- a/scipost/forms.py +++ b/scipost/forms.py @@ -215,7 +215,7 @@ class VetRegistrationForm(forms.Form): label='Justification (optional)', required=False) def promote_to_registered_contributor(self): - return bool(self.cleaned_data.get('decision', False)) + return self.cleaned_data.get('decision') == 'True' class AuthenticationForm(forms.Form): diff --git a/scipost/migrations/0039_auto_20170306_0804.py b/scipost/migrations/0039_auto_20170306_0804.py index 49894a205825fdbe083d86f688b835138d7516ce..5be053234821f984b1ce69eb6092d7f2c324d784 100644 --- a/scipost/migrations/0039_auto_20170306_0804.py +++ b/scipost/migrations/0039_auto_20170306_0804.py @@ -12,87 +12,7 @@ class Migration(migrations.Migration): ('scipost', '0038_nomination_webpage'), ] - state_operations = [ - migrations.RemoveField( - model_name='feedback', - name='VGM', - ), - migrations.RemoveField( - model_name='feedback', - name='by', - ), - migrations.RemoveField( - model_name='motion', - name='VGM', - ), - migrations.RemoveField( - model_name='motion', - name='in_agreement', - ), - migrations.RemoveField( - model_name='motion', - name='in_disagreement', - ), - migrations.RemoveField( - model_name='motion', - name='in_notsure', - ), - migrations.RemoveField( - model_name='motion', - name='put_forward_by', - ), - migrations.DeleteModel( - name='NewsItem', - ), - migrations.RemoveField( - model_name='nomination', - name='VGM', - ), - migrations.RemoveField( - model_name='nomination', - name='by', - ), - migrations.RemoveField( - model_name='nomination', - name='in_agreement', - ), - migrations.RemoveField( - model_name='nomination', - name='in_disagreement', - ), - migrations.RemoveField( - model_name='nomination', - name='in_notsure', - ), - migrations.AlterField( - model_name='remark', - name='feedback', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.Feedback'), - ), - migrations.AlterField( - model_name='remark', - name='motion', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.Motion'), - ), - migrations.AlterField( - model_name='remark', - name='nomination', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.Nomination'), - ), - migrations.DeleteModel( - name='Feedback', - ), - migrations.DeleteModel( - name='Motion', - ), - migrations.DeleteModel( - name='Nomination', - ), - migrations.DeleteModel( - name='VGM', - ), - ] - operations = [ - migrations.SeparateDatabaseAndState(state_operations=state_operations) + # I'm in a vacuum state. + # Please don't remove me though... ] diff --git a/scipost/migrations/0051_auto_20170504_1359.py b/scipost/migrations/0051_auto_20170504_1359.py new file mode 100644 index 0000000000000000000000000000000000000000..93ec6c4eec19c94aa37fb011b5ae9955b2a4a640 --- /dev/null +++ b/scipost/migrations/0051_auto_20170504_1359.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-05-04 11:59 +from __future__ import unicode_literals + +from django.db import migrations +from django.db.migrations.exceptions import InvalidMigrationPlan + + +class Migration(migrations.Migration): + + dependencies = [ + ('scipost', '0050_auto_20170416_2152'), + ] + + operations = [ + migrations.AlterModelTable( + name='Feedback', + table='scipost_feedback', + ), + migrations.AlterModelTable( + name='Motion', + table='scipost_motion', + ), + migrations.AlterModelTable( + name='Nomination', + table='scipost_nomination', + ), + migrations.AlterModelTable( + name='VGM', + table='scipost_vgm', + ), + migrations.RemoveField( + model_name='remark', + name='feedback', + ), + migrations.RemoveField( + model_name='remark', + name='motion', + ), + migrations.RemoveField( + model_name='remark', + name='nomination', + ), + ] + + def apply(self, *args, **kwargs): + '''Forward apply the migration only if user explictly accepts the migration.''' + print('\n\nDue to earlier migration issues, this migration will remove the Remark foreignkey' + ' data to `Feedback`, `Motion` and `Nomination`. Please make a backup to' + ' be able to *manually* fix the relations afterwards.') + go_ahead = input(' Do you want to continue? [y/N] ') + if go_ahead == 'y': + return super().apply(*args, **kwargs) + else: + raise InvalidMigrationPlan diff --git a/scipost/migrations/0052_auto_20170504_1404.py b/scipost/migrations/0052_auto_20170504_1404.py new file mode 100644 index 0000000000000000000000000000000000000000..26c68461e6c393076e79a580f481ec0d7395c420 --- /dev/null +++ b/scipost/migrations/0052_auto_20170504_1404.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-05-04 12:04 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('scipost', '0051_auto_20170504_1359'), + ] + + database_operations = [ + migrations.AlterModelTable('Motion', 'virtualmeetings_motion'), + migrations.AlterModelTable('Feedback', 'virtualmeetings_feedback'), + migrations.AlterModelTable('Nomination', 'virtualmeetings_nomination'), + migrations.AlterModelTable('VGM', 'virtualmeetings_vgm'), + migrations.AlterField( + model_name='motion', + name='VGM', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.VGM'), + ), + migrations.AlterField( + model_name='feedback', + name='VGM', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.VGM'), + ), + migrations.AlterField( + model_name='nomination', + name='VGM', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.VGM'), + ), + ] + + state_operations = [ + migrations.RemoveField( + model_name='feedback', + name='VGM', + ), + migrations.RemoveField( + model_name='feedback', + name='by', + ), + migrations.RemoveField( + model_name='motion', + name='VGM', + ), + migrations.RemoveField( + model_name='motion', + name='in_agreement', + ), + migrations.RemoveField( + model_name='motion', + name='in_disagreement', + ), + migrations.RemoveField( + model_name='motion', + name='in_notsure', + ), + migrations.RemoveField( + model_name='motion', + name='put_forward_by', + ), + migrations.RemoveField( + model_name='nomination', + name='VGM', + ), + migrations.RemoveField( + model_name='nomination', + name='by', + ), + migrations.RemoveField( + model_name='nomination', + name='in_agreement', + ), + migrations.RemoveField( + model_name='nomination', + name='in_disagreement', + ), + migrations.RemoveField( + model_name='nomination', + name='in_notsure', + ), + migrations.DeleteModel('Motion'), + migrations.DeleteModel('Feedback'), + migrations.DeleteModel('Nomination'), + migrations.DeleteModel('VGM') + ] + + operations = [ + migrations.SeparateDatabaseAndState( + database_operations=database_operations, + state_operations=state_operations) + ] diff --git a/scipost/migrations/0053_auto_20170504_1538.py b/scipost/migrations/0053_auto_20170504_1538.py new file mode 100644 index 0000000000000000000000000000000000000000..91b9c57bbbc911cce5f2bb81ec9e8b7710e2cda9 --- /dev/null +++ b/scipost/migrations/0053_auto_20170504_1538.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-05-04 13:38 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('virtualmeetings', '0001_initial'), + ('scipost', '0052_auto_20170504_1404'), + ] + + operations = [ + migrations.AddField( + model_name='remark', + name='feedback', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.Feedback'), + ), + migrations.AddField( + model_name='remark', + name='motion', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.Motion'), + ), + migrations.AddField( + model_name='remark', + name='nomination', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.Nomination'), + ), + ] diff --git a/scipost/migrations/0054_delete_newsitem.py b/scipost/migrations/0054_delete_newsitem.py new file mode 100644 index 0000000000000000000000000000000000000000..83bd9bc583e54abc883795124ef5c8bb129a0a01 --- /dev/null +++ b/scipost/migrations/0054_delete_newsitem.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-05-04 19:04 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('scipost', '0053_auto_20170504_1538'), + ] + + state_operations = [ + migrations.DeleteModel( + name='NewsItem', + ), + ] + + operations = [ + migrations.SeparateDatabaseAndState( + state_operations=state_operations) + ] diff --git a/scipost/templates/scipost/index.html b/scipost/templates/scipost/index.html index 696aff8f4f84a389bb1032b836ccb30793721c4c..6ae0ba1ba7ba16059cff84e593d3c10f10501349 100644 --- a/scipost/templates/scipost/index.html +++ b/scipost/templates/scipost/index.html @@ -70,7 +70,6 @@ <div class="card card-grey"> <div class="card-block"> <h1 class="card-title mb-0"><a href="{% url 'journals:journals' %}">Latest Submissions</a></h1> - <h4 class="card-subtitle text-muted">A selection of the last submissions</h4> <ul class="list-group list-group-flush"> {% for submission in submissions %} <li class="list-group-item"> @@ -85,7 +84,6 @@ <div class="card card-grey"> <div class="card-block"> <h1 class="card-title mb-0"><a href="{% url 'journals:journals' %}">Latest Publications</a></h1> - <h4 class="card-subtitle text-muted">A selection of the last publications</h4> <ul class="list-group list-group-flush"> {% for publication in publications %} <li class="list-group-item"> diff --git a/scipost/templates/scipost/personal_page.html b/scipost/templates/scipost/personal_page.html index 97119aa60fb3085746cf7d6bdbacf21f591e1c31..0fdefd67db08f4abf334fe25cb86c9b37b9239c1 100644 --- a/scipost/templates/scipost/personal_page.html +++ b/scipost/templates/scipost/personal_page.html @@ -337,7 +337,7 @@ {% include 'submissions/_refereeing_invitation_card_content.html' with invitation=task %} </li> {% empty %} - <li class="list-group-item"><em>You do not have pending Refereering Tasks</em></li> + <li class="list-group-item"><em>You do not have any pending refereeing task</em></li> {% endfor %} </ul> </div> diff --git a/submissions/templates/submissions/refereeing_overview.html b/submissions/templates/submissions/refereeing_overview.html index a7e09c540820a90a020a229f3f8bad204736186a..fcf452bd6193f3df996a4b2a08ccc0f1db01281b 100644 --- a/submissions/templates/submissions/refereeing_overview.html +++ b/submissions/templates/submissions/refereeing_overview.html @@ -31,12 +31,13 @@ <div class="card-block"> <h3><a href="{{ submission.get_absolute_url }}">{{ submission.title }}</a></h3> <p>{{ submission.author_list }}</p> + <h4>Editor-in-charge: {{ submission.editor_in_charge }}</h4> <h4>Refereeing deadline: {{ submission.reporting_deadline }}</h4> <h4>Refereeing status summary:</h4> {% include 'submissions/_submission_refereeing_status.html' with submission=submission %} <h3 class="mb-2">Detail of refereeing invitations:</h3> {% include 'submissions/_submission_refereeing_invitations.html' with submission=submission invitations=submission.referee_invitations.all %} - <a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr comtype='StoE' %}">Send a communication to the Editor-in-charge</a> + <a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr comtype='StoE' %}" target="_blank">Send a communication to the Editor-in-charge</a> </div> </div> </div> diff --git a/submissions/templatetags/lookup.py b/submissions/templatetags/lookup.py index 0c73d76071d7ac88453dc094807492ff4f6347f6..803edd8acbd338d2202c2c1666955ac082787673 100644 --- a/submissions/templatetags/lookup.py +++ b/submissions/templatetags/lookup.py @@ -20,3 +20,11 @@ class SubmissionLookup(LookupChannel): def format_match(self, item): '''(HTML) Format item for displaying in the dropdown.''' return u"%s<br><span class='text-muted'>by %s</span>" % (item.title, item.author_list) + + def check_auth(self, request): + """ + Check if current user has required permissions. + Right now only used for draft registration invitations. May be extended in the + future for other purposes as well. + """ + return request.user.has_perm('can_draft_registration_invitations') diff --git a/submissions/utils.py b/submissions/utils.py index cc2b18dc5187cead257b2f2b1f582963b3dca43c..d713236f3f2b66dab3fd04300962da4ece33e9a6 100644 --- a/submissions/utils.py +++ b/submissions/utils.py @@ -995,6 +995,13 @@ class SubmissionUtils(BaseMailUtil): [cls._context['report'].submission.editor_in_charge.user.email], 'Report delivered') + @classmethod + def email_referee_report_delivered(cls): + """ Requires loading 'report' attribute. """ + cls._send_mail(cls, 'report_delivered_referee', + [cls._context['report'].author.user.email], + 'Report delivered') + @classmethod def acknowledge_report_email(cls): """ Requires loading 'report' attribute. """ diff --git a/submissions/views.py b/submissions/views.py index 387ac0debb92a8bfbbf80734ef0d87d1e22dd4e3..ce94d8f6cecd0b88133cd1c32a4914b707cbaeff 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -1126,6 +1126,7 @@ def submit_report(request, arxiv_identifier_w_vn_nr): author.save() SubmissionUtils.load({'report': newreport}, request) SubmissionUtils.email_EIC_report_delivered() + SubmissionUtils.email_referee_report_delivered() # Why is this session update? request.session['arxiv_identifier_w_vn_nr'] = arxiv_identifier_w_vn_nr diff --git a/templates/email/referee_in_response_to_decision.html b/templates/email/referee_in_response_to_decision.html index 4e3b8502223fa7402894ea9aa1f935c1923eeae8..bda9d8047d9b26663921017842aba421d7b75274 100644 --- a/templates/email/referee_in_response_to_decision.html +++ b/templates/email/referee_in_response_to_decision.html @@ -1,8 +1,9 @@ -Dear {{invitation.referee.get_title_display}} {{invitation.referee.user.last_name}},\n\n +Dear {{ invitation.referee.get_title_display }} {{ invitation.referee.user.last_name }},\n\n -We hereby confirm your choice to {% if invitation.accepted %}accept{% else %}decline (due to reason: {{invitation.get_refusal_reason_display}}){% endif %} to referee Submission\n\n +We hereby confirm your choice to {% if invitation.accepted %}accept{% else %}decline (due to reason: {{ invitation.get_refusal_reason_display }}){% endif %} to referee Submission\n\n -{{invitation.submission.title}} by {{invitation.submission.author_list}}\n\n +{{invitation.submission.title}}\n +by {{ invitation.submission.author_list }}\n\n {% if invitation.accepted %} We will look forward to receiving your Report by the reporting deadline {{ invitation.submission.reporting_deadline|date:'Y-m-d' }}.\n\n diff --git a/templates/email/referee_in_response_to_decision_html.html b/templates/email/referee_in_response_to_decision_html.html index a03d4016d1c678f15ff31952e4213fbf2ad4ff24..b8363b5b524d6dae43ea5b8ac9d27cbc4325bff1 100644 --- a/templates/email/referee_in_response_to_decision_html.html +++ b/templates/email/referee_in_response_to_decision_html.html @@ -1,20 +1,23 @@ -<p>Dear {{invitation.referee.get_title_display}} {{invitation.referee.user.last_name}},</p> +<p>Dear {{ invitation.referee.get_title_display }} {{ invitation.referee.user.last_name }},</p> <p> - We hereby confirm your choice to {% if invitation.accepted %}accept{% else %}decline (due to reason: {{invitation.get_refusal_reason_display}}){% endif %} to referee Submission + We hereby confirm your choice to {% if invitation.accepted %}accept{% else %}decline (due to reason: {{ invitation.get_refusal_reason_display }}){% endif %} to referee Submission </p> <p> - "{{invitation.submission.title}} by {{invitation.submission.author_list}}". + {{ invitation.submission.title }} + <br/> + by {{ invitation.submission.author_list }}. </p> <p> {% if invitation.accepted %} We will look forward to receiving your Report by the reporting deadline {{ invitation.submission.reporting_deadline|date:'Y-m-d' }}. + <br/> Many thanks for your collaboration, {% else %} Nonetheless, we thank you very much for considering this refereeing invitation, {% endif %} - <br>The SciPost Team. + <br/>The SciPost Team. </p> {% include 'email/_footer.html' %} diff --git a/templates/email/referee_response_to_EIC.html b/templates/email/referee_response_to_EIC.html index ec83b01a926e698efba0718fa1048bee497fc25c..fdc5c1dc553aaf855fbb959bc1d9d1b62b861ede 100644 --- a/templates/email/referee_response_to_EIC.html +++ b/templates/email/referee_response_to_EIC.html @@ -1,8 +1,8 @@ -Dear {{invitation.submission.editor_in_charge.get_title_display}} {{invitation.submission.editor_in_charge.user.last_name}},\n\n +Dear {{ invitation.submission.editor_in_charge.get_title_display }} {{ invitation.submission.editor_in_charge.user.last_name }},\n\n -Referee {% if invitation.referee %}{{invitation.referee.get_title_display}} {{invitation.referee.user.last_name}}{% else %}{{ invitation.title }} {{ invitation.first_name }} {{ invitation.last_name }}{% endif %} has {% if invitation.accepted %}accepted{% else %}declined (due to reason: {{invitation.get_refusal_reason_display}}){% endif %} to referee Submission\n\n +Referee {% if invitation.referee %}{{ invitation.referee.get_title_display }} {{ invitation.referee.user.last_name }}{% else %}{{ invitation.title }} {{ invitation.first_name }} {{ invitation.last_name }}{% endif %} has {% if invitation.accepted %}accepted{% else %}declined (due to reason: {{ invitation.get_refusal_reason_display }}){% endif %} to referee Submission\n\n -{{invitation.submission.title}} by {{invitation.submission.author_list}}\n\n +{{ invitation.submission.title }}\n by {{ invitation.submission.author_list }}\n\n {% if not invitation.accepted %} Please invite another referee from the Submission\'s editorial page at https://scipost.org{% url 'submissions:editorial_page' invitation.submission.arxiv_identifier_w_vn_nr %}.\n\n diff --git a/templates/email/referee_response_to_EIC_html.html b/templates/email/referee_response_to_EIC_html.html index 2b04551f5d7ca52e502fb3fc40a849a210f24702..f932f38e7a200cd79e0d2ee29674c205d365acd1 100644 --- a/templates/email/referee_response_to_EIC_html.html +++ b/templates/email/referee_response_to_EIC_html.html @@ -1,10 +1,12 @@ -<p>Dear {{invitation.submission.editor_in_charge.get_title_display}} {{invitation.submission.editor_in_charge.user.last_name}},</p> +<p>Dear {{ invitation.submission.editor_in_charge.get_title_display }} {{ invitation.submission.editor_in_charge.user.last_name }},</p> <p> - Referee {% if invitation.referee %}{{invitation.referee.get_title_display}} {{invitation.referee.user.last_name}}{% else %}{{ invitation.title }} {{ invitation.first_name }} {{ invitation.last_name }}{% endif %} has {% if invitation.accepted %}accepted{% else %}declined (due to reason: {{invitation.get_refusal_reason_display}}){% endif %} to referee Submission + Referee {% if invitation.referee %}{{ invitation.referee.get_title_display }} {{ invitation.referee.user.last_name }}{% else %}{{ invitation.title }} {{ invitation.first_name }} {{ invitation.last_name }}{% endif %} has {% if invitation.accepted %}accepted{% else %}declined (due to reason: {{ invitation.get_refusal_reason_display }}){% endif %} to referee Submission </p> <p> - "{{invitation.submission.title}} by {{invitation.submission.author_list}}". + {{ invitation.submission.title }} + <br/> + by {{ invitation.submission.author_list }}. </p> {% if not invitation.accepted %} @@ -14,7 +16,7 @@ {% endif %} <p> - Many thanks for your collaboration,<br> + Many thanks for your collaboration,<br/> The SciPost Team. </p> diff --git a/templates/email/report_delivered_eic.html b/templates/email/report_delivered_eic.html index 2bd15d68d595c048d689f63b9fbde35408e68121..fe01130b3d6c39bc41a02242ebecfe67d395da0a 100644 --- a/templates/email/report_delivered_eic.html +++ b/templates/email/report_delivered_eic.html @@ -1,11 +1,13 @@ -Dear {{report.submission.editor_in_charge.get_title_display}} {{report.submission.editor_in_charge.user.last_name}},\n\n +Dear {{ report.submission.editor_in_charge.get_title_display }} {{ report.submission.editor_in_charge.user.last_name }},\n\n -Referee {{report.author.get_title_display}} {{report.author.user.last_name}} has delivered a Report for Submission "{{report.submission.title}} by {{report.submission.author_list}}". +Referee {{ report.author.get_title_display }} {{ report.author.user.last_name }} has delivered a Report for Submission\n\n +{{ report.submission.title }}\n +by {{ report.submission.author_list }}. \n\n -Please vet this Report via your personal page under the Editorial Actions tab.\n -https://scipost.org{% url 'scipost:personal_page' %} -\n\n\n +Please vet this Report via your personal page at +https://scipost.org{% url 'scipost:personal_page' %}, under the Editorial Actions tab.\n +\n\n Many thanks in advance for your collaboration,\n The SciPost Team. diff --git a/templates/email/report_delivered_eic_html.html b/templates/email/report_delivered_eic_html.html index f13181d938b77bb6ecd12fcbbfa27cd6ff41f9f4..11d7d9f82e48e1ca640829b453dd495d531c386f 100644 --- a/templates/email/report_delivered_eic_html.html +++ b/templates/email/report_delivered_eic_html.html @@ -1,10 +1,12 @@ -<p>Dear {{report.submission.editor_in_charge.get_title_display}} {{report.submission.editor_in_charge.user.last_name}},</p> +<p>Dear {{ report.submission.editor_in_charge.get_title_display }} {{ report.submission.editor_in_charge.user.last_name }},</p> <p> - Referee {{report.author.get_title_display}} {{report.author.user.last_name}} has delivered a Report for Submission: + Referee {{ report.author.get_title_display }} {{ report.author.user.last_name }} has delivered a Report for Submission: </p> <p> - "{{report.submission.title}} by {{report.submission.author_list}}" + {{report.submission.title}} + <br/> + by {{ report.submission.author_list }}. </p> <p> Please vet this Report via your <a href="https://scipost.org{% url 'scipost:personal_page' %}">personal page</a> under the Editorial Actions tab. diff --git a/templates/email/report_delivered_referee.html b/templates/email/report_delivered_referee.html new file mode 100644 index 0000000000000000000000000000000000000000..ecff9be7a20b5597ccc9684b7d849915b8e7a610 --- /dev/null +++ b/templates/email/report_delivered_referee.html @@ -0,0 +1,11 @@ +Dear {{ report.author.get_title_display }} {{ report.author.user.last_name }},\n\n + +We hereby confirm reception of your Report on Submission\n\n + +{{ report.submission.title }}\n +by {{ report.submission.author_list }}.\n\n + +We are immensely grateful for your time and effort. Your Report will soon be vetted by the Submission's Editor-in-charge, at which point you will receive an email update from us.\n\n + +Many thanks again,\n +The SciPost Team. diff --git a/templates/email/report_delivered_referee_html.html b/templates/email/report_delivered_referee_html.html new file mode 100644 index 0000000000000000000000000000000000000000..9e50b5f4b9c9063c83433de22bd000034faa27fd --- /dev/null +++ b/templates/email/report_delivered_referee_html.html @@ -0,0 +1,21 @@ +<p> + Dear {{ report.author.get_title_display }} {{ report.author.user.last_name }}, +</p> + +<p>We hereby confirm reception of your Report on Submission</p> + +<p> + {{ report.submission.title }} + <br/> + by {{ report.submission.author_list }}. +</p> + +<p> + We are immensely grateful for your time and effort. Your Report will soon be vetted by the Submission's Editor-in-charge, at which point you will receive an email update from us. +</p> + +<p> + Many thanks again, + <br/> + The SciPost Team. +</p> diff --git a/virtualmeetings/migrations/0001_initial.py b/virtualmeetings/migrations/0001_initial.py index 492b8e80ef3a4adc0541c026e15e68618489c93c..cbfb62cfed8e40c068277a0a09361d18fc706735 100644 --- a/virtualmeetings/migrations/0001_initial.py +++ b/virtualmeetings/migrations/0001_initial.py @@ -24,10 +24,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('date', models.DateField()), ('feedback', models.TextField()), - ], - options={ - 'db_table': 'scipost_feedback', - }, + ] ), migrations.CreateModel( name='Motion', @@ -42,10 +39,7 @@ class Migration(migrations.Migration): ('nr_D', models.PositiveIntegerField(default=0)), ('voting_deadline', models.DateTimeField(default=django.utils.timezone.now, verbose_name='voting deadline')), ('accepted', models.NullBooleanField()), - ], - options={ - 'db_table': 'scipost_motion', - }, + ] ), migrations.CreateModel( name='Nomination', @@ -62,10 +56,7 @@ class Migration(migrations.Migration): ('nr_D', models.PositiveIntegerField(default=0)), ('voting_deadline', models.DateTimeField(default=django.utils.timezone.now, verbose_name='voting deadline')), ('accepted', models.NullBooleanField()), - ], - options={ - 'db_table': 'scipost_nomination', - }, + ] ), migrations.CreateModel( name='VGM', @@ -74,10 +65,7 @@ class Migration(migrations.Migration): ('start_date', models.DateField()), ('end_date', models.DateField()), ('information', models.TextField(default='')), - ], - options={ - 'db_table': 'scipost_vgm', - }, + ] ), migrations.AddField( model_name='nomination', diff --git a/virtualmeetings/models.py b/virtualmeetings/models.py index f78744fc9114cd35791da721d09d57adcbad9778..7e6d9ffcba0993aa1d2ea76f0a79119300b144ce 100644 --- a/virtualmeetings/models.py +++ b/virtualmeetings/models.py @@ -21,9 +21,6 @@ class VGM(models.Model): end_date = models.DateField() information = models.TextField(default='') - class Meta: - db_table = 'scipost_vgm' - def __str__(self): return 'From %s to %s' % (self.start_date.strftime('%Y-%m-%d'), self.end_date.strftime('%Y-%m-%d')) @@ -33,14 +30,11 @@ class Feedback(models.Model): """ Feedback, suggestion or criticism on any aspect of SciPost. """ - VGM = models.ForeignKey(VGM, blank=True, null=True) - by = models.ForeignKey(Contributor) + VGM = models.ForeignKey('virtualmeetings.VGM', blank=True, null=True) + by = models.ForeignKey('scipost.Contributor') date = models.DateField() feedback = models.TextField() - class Meta: - db_table = 'scipost_feedback' - def __str__(self): return '%s: %s' % (self.by, self.feedback[:50]) @@ -61,8 +55,8 @@ class Nomination(models.Model): """ Nomination to an Editorial Fellowship. """ - VGM = models.ForeignKey(VGM, blank=True, null=True) - by = models.ForeignKey(Contributor) + VGM = models.ForeignKey('virtualmeetings.VGM', blank=True, null=True) + by = models.ForeignKey('scipost.Contributor') date = models.DateField() first_name = models.CharField(max_length=30, default='') last_name = models.CharField(max_length=30, default='') @@ -85,9 +79,6 @@ class Nomination(models.Model): voting_deadline = models.DateTimeField('voting deadline', default=timezone.now) accepted = models.NullBooleanField() - class Meta: - db_table = 'scipost_nomination' - def __str__(self): return '%s %s (nominated by %s)' % (self.first_name, self.last_name, @@ -154,27 +145,24 @@ class Motion(models.Model): They are meant to be voted on at the annual VGM. """ category = models.CharField(max_length=10, choices=MOTION_CATEGORIES, default='General') - VGM = models.ForeignKey(VGM, blank=True, null=True) + VGM = models.ForeignKey('virtualmeetings.VGM', blank=True, null=True) background = models.TextField() motion = models.TextField() - put_forward_by = models.ForeignKey(Contributor) + put_forward_by = models.ForeignKey('scipost.Contributor') date = models.DateField() nr_A = models.PositiveIntegerField(default=0) - in_agreement = models.ManyToManyField(Contributor, + in_agreement = models.ManyToManyField('scipost.Contributor', related_name='in_agreement_with_motion', blank=True) nr_N = models.PositiveIntegerField(default=0) - in_notsure = models.ManyToManyField(Contributor, + in_notsure = models.ManyToManyField('scipost.Contributor', related_name='in_notsure_with_motion', blank=True) nr_D = models.PositiveIntegerField(default=0) - in_disagreement = models.ManyToManyField(Contributor, + in_disagreement = models.ManyToManyField('scipost.Contributor', related_name='in_disagreement_with_motion', blank=True) voting_deadline = models.DateTimeField('voting deadline', default=timezone.now) accepted = models.NullBooleanField() - class Meta: - db_table = 'scipost_motion' - def __str__(self): return self.motion[:32]