profcturner / wam Goto Github PK
View Code? Open in Web Editor NEWWorkload Allocation Modeller and Assessment Approval System
License: GNU Affero General Public License v3.0
Workload Allocation Modeller and Assessment Approval System
License: GNU Affero General Public License v3.0
Currently a blank installation does not configure
The command line tool should have an option to populate some sensible defaults.
Need a form to Manipulate custom activities, and to allocate them.
On rare occasions, it is necessary to delete sign offs done in error. At the moment this is possible in the Django provided interface for certain admins. It may be better for those admins to have a simpler facility to do this within the main admin features.
I have seen an example of a module where the help for the next assessment states is incorrect in the module_details
view but correct in the add_assessment_sign_off
view.
The latter only uses
assessment_signoffs = AssessmentStateSignOff.objects.all().filter(module=module).order_by('-created')
for the assessment Information while the former relies on the more detailed
assessment_history = module.get_assessment_history()
In the module in case there was an assessment item uploaded and not signed off (and an incorrect sign off had been deleted). Needs more investigation.
Particularly with REMOTE_USER usage someone may be authenticated and even a user auto created for which there is no matching staff entry. This needs to be caught and handled.
Another example is an initially created superuser (but they won't use have a Staff user). This may mean that the most recent version is difficult to install out of the box.
This appears to be a regressions of #11 in that a confirmation step for deletion of assessment items was previous working but no longer is.
Most likely it stopped working with a Django upgrade.
I've been avoiding writing workflow for this until I had a better idea how it should work, but the current system just isn't good enough.
There probably needs to be some sort of "signal" workflow where stakeholders flag they have completed a task, and that the system notes this, and notifies the next relevant stakeholders.
For instance, a Model that included signal types, and which categories of users to notify might help. Then a team member could file a signal of type "initial upload" with comments, that would flag "moderator users". Moderators could choose between a bounce back signal or a pass on signal etc...
I want not to enshrine a particular workflow if I can avoid it. However, a given signal Model could also specify next permitted Signals?
There are a few places where it is helpful to change Work Package, but it all redirects back to loads, it should redirect back to the original page where possible.
Despite the large red warning about a WorkPackage being in the past users still sometimes add assessments to the previous year's modules. This needs more serious warnings, or potentially complete prohibition...
The new Add Task View introduced in Version 2.0.0 allows a deadline to be specified, but without explanation of the format (ISO) or a nice date picker.
The Admin interface provides this and so it might be used from that.
A separate model was created for ExternalExaminers but currently in terms of data it doesn't add anything not in Staff. A number of other issues would be resolved, or minimised by making ExternalExaminer users just other Staff users.
This change requires some thought, but I think this would be a way forward:
This is done, just adding for audit.
It appears that currently some modules have no programme - but the current clone logic causes a KeyError as it attempts to remap programmes to the cloned version. Maybe old_programme is not a Programme object.
old_module_programmes = old_module.programmes.all()
old_module_moderators = old_module.moderators.all()
for old_programme in old_module_programmes:
# Remove the old programme reference
module.programmes.remove(old_programme)
# And add the mapped (new) one
module.programmes.add(Programme.objects.get(pk=programme_mapping[old_programme.pk])) ...
# Copy moderators too
for moderator in old_module_moderators:
module.moderators.add(moderator)
# Save the many to manys
module.save()
Currently creating a Staff user or External Examiner user requires the underlying User object to be created (often with an unnecessary password - since in production I am using CAS), and then the linked Staff object to be created, or ExternalExaminer object.
It would be useful to have a single admin form for each of these use cases. In a perfect world, there would be self sign-up, but there might be security issues involved in that - well, if the WorkPackage was selectable by the user without intervention.
This variable is deprecated, and we should now consider removing it.
There was a request from a user for the modules index to show coordinator and moderator index.
This has been implemented by a new "show people" checkbox.
These currently require a mandatory Staff ForeignKey... it might be better to allow one of Staff or ExternalExaminer...
Some newer views user the PermissionRequiredMixin. Logged in users without the permission are automatically redirected to a missing login page.
They should be cleanly informed that they don't have the permission.
We need a custom view for manipulating Programmes in a Work Package.
Some models don't use hours at all. Allow these to be removed on a package by package basis.
The change_package view is written only for Staff.
Modules now need a good understanding to create them and manipulate them. It would be good to build a custom admin.
Currently, when a new user logs in, or is otherwise not in a work package, most tabs just give 404 errors as the underlying code tries to find out about the logged in user.
This needs to be better handled.
In some cases one workflow option is provided as a safety precaution. For instance, by default it is possible for a Module Coordinator to do final sign off without External Examiner sign-off. But this is intended only for this case.
Possible improvements:
See below. A check is needed here.
Traceback (most recent call last):
File "/usr/local/share/WAM/manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/lib/python3/dist-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
utility.execute()
File "/usr/lib/python3/dist-packages/django/core/management/__init__.py", line 359, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/lib/python3/dist-packages/django/core/management/base.py", line 294, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/lib/python3/dist-packages/django/core/management/base.py", line 345, in execute
output = self.handle(*args, **options)
File "/usr/local/share/WAM/loads/management/commands/email_assessmentupdates.py", line 65, in handle
if self.email_updates_for_signoff(signoff, options):
File "/usr/local/share/WAM/loads/management/commands/email_assessmentupdates.py", line 102, in email_updates_for_signoff
for external in signoff.module.lead_programme.examiners.all():
AttributeError: 'NoneType' object has no attribute 'examiners'
A request has been made for a spreadsheet export of the modules page - this could be done in CSV. It might be a good idea to think of a broader reporting strategy - for instance, to email this data.
This feature request is:
We’d like if the EEs weren’t prompted every time a sign-off happens, but rather when their EE assessment load was complete, they would receive an email to say that their assigned modules were ready for review.
This is not trivial to do. First of all it is difficult for the system to determine in a bullet proof way that all modules are ready for review unless every module coordinator is scrupulously compliant. Batching communications is also a bit tricky because the system generates emails on a sign off event, and keeping emails for some recipients but not others is a bit complex.
In the meantime, I would encourage EE's to use a rule to filter their email into a subfolder.
Currently /cadmin/ allows access to these features, but it doesn't appear anywhere in the menus (deliberately until this point).
These are other m2ms field that I forgot won't be copied by the underlying objects.
Where hours are automatically calculated, this should be shown on the module details view.
Two people have tried to install WAM and run into this issue. The code now will cause exceptions if a User has no matching Staff object, and yet the createsuperuser does not create the Staff.
Hmm, it’s actually probably a flaw in that your user object has no matching staff user, and something I will definitely need to resolve. We must file an issue on that.
In the mean time, try something like the following will work around this.
python3 manage.py shell
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
from loads.models import Staff
from django.contrib.auth.models import User
users = User.objects.all()
users[0]
<User: TEST1000>
root_user = users[0]
staff = Staff.objects.create(user=root_user, title="Mr", staff_number="whatever")
Currently there are numerous dire warnings when a user tries to sign off an assessment state for a work package in the past - because this is usually a mistake that they haven't moved to the current academic year.
The dire warnings are still periodically ignored in such mistaken circumstances, and the system is set up not to send notifications (by default); however, this leads to the problem being rolled through each cron job. It may be better to:
I'm not sure which option is best, yet.
We should seek to allow graphs to show
Currently the Modules Index can be restricted by semester. Dr Alan Brown would like users to be able to show only the Modules on a specific Programme, or further, the Modules on a specific Programme where that Programme is the lead Programme.
The reason is that so course level administrators and directors can see how their modules are coming along in assessment terms.
Allow a package to be hidden from sight unless the logged in user is a SuperUser perhaps?
While #2 looks at linkage issues in cloned work packages, these will also arise from the new functionality in Programmes.
Modules now link to Programmes, but Programmes are themselves versioned within Packages.
As a result the Clone functionality will also need to clone Programmes and preserve a mapping from one to the other.
Thereafter cloned Modules will need to be adjusted to point at the newly remapped Programmes. #
The script still references the ExternalExaminer model.
When a member of staff is inactive, we should not, as a matter of policy, send them emails, this management command needs a tweak in this regard.
The functionality should clone custom activities with no module links.
It should then carefully copy module related custom activities converting the module link to the new module.
Currently it will duplicate activities in the original work package.
Dialog box for cloning needs to include:
Activities not within modules or automatically generated (Custom, manual activities)
Modules (and sub choices for ModuleStaff and Module related Activities)
List all Activities generated by a Generator (not Project), allow each to be copied, with select all or deselect all options
(this last point needs some research to see how it can be done in Django).
The algorithm for the clone should:
Likely issues, this requires reordering of the Python Django model classes, and I'm worried it will create a circular dependency. Can we resolve this by devolving some cloning activities to other models? No, because we'd have to reference the other Model...
Sometimes we might want to allow an allocation of workload time upon completion of a task.
Moderators are a many to many field and so not copied automatically. The clone functionality needs repaired with this in mind.
One user with permission to add Staff and External Examiners didn't realise that the username should be the staff number for the University in almost all cases, and certainly for Ulster. The guidance here needs to be more clear.
WAM deliberately does not role over assessment staff when work packages are cloned. This is a security feature to ensure these staff are considered each work package (usually every year).
However, an enhanced interface to show the previous selected staff for potential manual roll over.
Sometimes colleagues upload resources but do not sign them off causing some confusion, and there are some tweaks that may help.
This last step would need some thought to prevent persistent emails for situations that will never be fixed.
We need a view to create and manipulate Tasks more integral to the system.
The new Add Task dialog tries to limit target users and groups to a more appropriate set, but it limits groups too much. For instance, admin staff cannot select the academic staff group within the same workpackage.
It should probably select all groups that are within the valid workpackages for that user.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.