Giter VIP home page Giter VIP logo

vms's Introduction

Volunteer Management System(VMS)

Build Status Coverage Status PRs Welcome project chat Python Version codecov

AnitaB.org has many volunteers that offer their skills, time, and commitment to our vision and projects. The Volunteer Management System (VMS) will be useful for volunteer coordinators, volunteer sign-up, tracking hours, and reporting.

This project is under active development.

VMS is live here.

If you are an Outreachy Applicant, start with reading this.

Features

The VMS is developed in phases. The initial implementation tracks volunteers' contact information, enables administrators to track volunteer hours, and allows reporting of useful information.

Installation

The VMS project uses the Django web framework and Python.

To get started, read the Installation Guide.

Run VMS in a Docker Container

If you wish to view a sneak peek of the AnitaB.org VMS, you may use Docker to preview the VMS. Note: The following Docker configuration is not intended to be run in production at the moment. It may be configured to do so in the future.

  1. Install Docker. Follow the installation steps for your specific operating system:
    • Docker runs natively on a Linux-based system.
    • For Windows and Mac OS X, you should follow instructions for installing boot2docker which also installs VirtualBox.
  2. Install docker-compose. Note: fig has been deprecated. Docker-compose replaces fig.
  3. Create a new directory on your local system.
  4. Enter git clone [email protected]:anitab-org/vms.git to clone the AnitaB.org VMS repository. After the clone is done, change directory (cd) to the vms directory.
  5. Run docker-compose build. This pulls the Docker images required to run the project and installs the necessary dependencies.
  6. Run docker run -e SECRET_KEY=foobarbaz vms_web
  7. Run docker-compose run web python vms/manage.py migrate.
  8. Run docker-compose run web python vms/manage.py cities_light for downloading and importing data for django-cities-light.
  9. Optional: Run docker-compose run web python vms/manage.py createsuperuser if you wish to create a superuser to access the admin panel.
  10. Run docker-compose up to start the webserver for the Django AnitaB.org VMS project.
  11. AnitaB.org VMS should be running on port 8000.
    • If you are on Linux, enter http://0.0.0.0:8000 in your browser.
    • If you are using boot2docker on Windows or Mac OS X, enter http://192.168.59.103:8000/ in your browser. If this IP address doesn't work, run boot2docker ip from the command line and replace the previous IP address in the HTTP request with the IP returned by boot2docker.

Contribute

Branches

The repository has the following permanent branches:

  • master This contains the code which has been released.

  • develop This contains the latest code. All the contributing PRs must be sent to this branch. When we want to release the next version of the app, this branch is merged into the master branch.

  • aws This is the branch through which the project is deployed.

Documentation

User and developer documentation for AnitaB.org Portal VMS project is generated using Markdown and available online for convenient reading at VMS Website.

Google Summer of Code (GSoC) Development

We are pleased to participate in the Google Summer of Code and are grateful for the contributions from our GSoC developers.

Communicate

The best way to connect with the maintainers is through Github comments. Communicate with our community on AnitaB.org Open Source Zulip. For queries regarding VMS Project join, #vms and newcomers can join, #newcomers.

License

The project is licensed under the GNU GENERAL PUBLIC LICENSE.

A heartfelt thank you to all wonderful contributors of software, guidance, and encouragement.

vms's People

Contributors

aaskashah avatar abarya avatar ahmedsabie avatar amruthasangeeth avatar anjali-dhanuka avatar chauhan99 avatar decon-harsh avatar janiceilene avatar kamsuri avatar kishan-dhakan avatar kokareiitp avatar malabikasen avatar mohitkyadav avatar monal5031 avatar naman1901 avatar necessary129 avatar nerdylicious avatar nida avatar rashmitpankhania avatar rebeccag7 avatar riapant avatar rohan033 avatar rosariorobinson avatar sammy1997 avatar satya7289 avatar smarshy avatar swekshajha12 avatar tapaswenipathak avatar vubo avatar willingc avatar

Stargazers

 avatar

Watchers

 avatar  avatar

vms's Issues

Search features in volunteer’s part

Search features have a volunteer link but it currently does not give flexibility to enter hours, i.e., it creates a SAT entry with 1 hr as default.

A problem after updating Django

After updating Django I can run

python manage.py runserver [::]:8000

but not

python manage.py test

I get an error:

django.db.utils.ProgrammingError: relation "auth_user" does not exist

@tapasweni-pathak @jayesh92 do you have this problem with Django 1.8? Can you run tests?

Add timepicker everywhere

@vubo I don't see a time picker in create shift? There are start and end time fields there.

Can we add the timepicker wherever we are using the time related fields?

job inside an event not unique

While testing I found admin user can create a job with same details twice inside one event. Also, the same applies for shift inside job. Shouldn't it be unique ?

Upcoming Shifts - Shift Hours

@Nerdylicious when you have time, could you explain please the difference between "Upcoming Shifts" and "Shift Hours".

  • Why after a volunteer makes "log hours" for a shift, she/he does not see this shift in the "Upcoming Shifts" list?
  • If a volunteer does not make "log hours" for a shift, what does that mean?

@jayesh92 perhaps you could also help with this issue?

Thank you!

upcomingshifts

shifthours

Job corresponding to Event

In creation of shift, currently we provide to add Event & Job through forms, and if the corresponding event of job selected is not equal to event selected, an error is raised. However, it should be like the user should be given to select event and then on the basis of event selected job fields should be displayed using AJAX

Test for view `/shift/view_volunteer_shifts/` failing

I'm writing test to check if admin can access a volunteer view or not, but the build fails. The test can be viewed at jayesh92/vms@45a3993#diff-0df96ededa86aa47a9dbdb5655a6908aR177 . I've created an admin account and tried to browse url /shift/view_volunteer_shifts/1 which is meant to be a volunteer view. I get a 500 error instead of 403. The code for view being tested is https://github.com/systers/vms/blob/develop/vms/shift/views.py#L285 . The problem here is at line 290, since it's an admin account it's volunteer field will be None and we can't access its 'id'. It would be better if we first check if its not a volunteer and then raise a 403 or better we create a decorator to check admin and use this for all volunteer views.

@Nerdylicious @willingc @vubo

username unique field, not email

  • while writing tests, I've found that unique parameter used is username and not email
  • I'm able to register more than one volunteers with same email but different usernames.

Should it be like this ?
@willingc @vubo

Refactor event unit tests

Similar to issue #41, let's refactor the event unit tests:

  • Import statements
  • Docstring
  • File - spaces vs. tabs
  • DRY - don't repeat yourself - a reasonable goal which may or may not apply to these tests but important to recognize when developing

end time should be less than start time

While testing the shift hours view, I can enter end time less than start time. This should not be allowed and a corresponding check should be added. Also, I think same is the case with all time fields.

Location specification for the event/job/shift

Task 15 from the task list:

Need to add location (such as country, city and state) that the event/job/shift is being held at. Country, city and state fields should only need to belong to the Event, Job or Shift models. I would ask Rose, as an administrator of VMS, where she would like to specify the location. Does she want to specify location when creating Events? Or when creating Jobs? Or is it possible that shifts can take place at multiple locations, so she should specify the location at the Shift level?

@rosariorobinson would you answer these questions please? Should I program the location specification at the Event, Job, or Shift? Thank you!

createevent

Configure access for administrators and volunteers

Configure access for administrators and volunteers (return HTTP_Forbidden code for for each administrator functionality that a volunteer tries to access and for each volunteer functionality that the administrator tries to access).

For administrators only

  • Manage Volunteer Shifts: /shift/volunteer_search/
  • Manage Volunteer Shifts: /shift/manage_volunteer_shifts/
  • Manage Volunteer Shifts: /shift/add_hours_manager/
  • Manage Volunteer Shifts: /shift/edit_hours_manager/
  • Manage Volunteer Shifts: /shift/clear_hours_manager/
  • Manage Volunteer Shifts: /shift/cancel/
  • Manage Volunteer Shifts: /administrator/report/

Create, edit and delete events, jobs, shifts:

  • Settings: /event/create/
  • Settings: /event/edit/
  • Settings: /event/delete/
  • Settings: /job/create/
  • Settings: /job/edit/
  • Settings: /job/delete/
  • Settings: /shift/create/
  • Settings: /shift/delete/
  • Settings: /organization/create/
  • Settings: /organization/edit/
  • Settings: /organization/delete/

Since administrators can be volunteers, they should have access to all pages of volunteers.

Reporting

I have created reporting based on several parameters, however we need to integrate all reporting functionality into one tab i.e., display a form with date, event etc and then generate report based on the intersection of all fields selected.

Update the project README.md file

The README.md file of a project's repository is the world's outside view to the project. Examples of well done and not so well done examples can be found be looking at other projects.

Since the vms project will be actively worked on this summer and there are docs now at read the docs and a number of other places, let's make it easier for new contributors, current contributors, mentors, and future users to find the documentation that they are looking for. One of my favorite resources on documentation is Write the Docs. Here's a link to their tips on what makes a good README.md file: http://docs.writethedocs.org/writing/beginners-guide-to-docs/#readme

Use the template at the end of the Write the Docs section and the Systers/Portal README files for guidance. Some helpful things to include:

  • Brief Project description (2 or 3 sentences)
  • Features (link to the existing requirements documents) Also make a note that the project is under active development
  • Installation instructions (for now just link to the Read the Docs for VMS)
  • Contributing (links to source code, issue tracker)
  • GSOC 2015 (links to key docs - timeline, blog)
  • GSOC 2014 (links to key docs)
  • License (refer to the license file)

Validate City and Country

@vubo I just saw yesterday's recording. I have one question, are we validating city and countries, when the user is entering the data in create event e.t.c?

If not, I feel its good to do that. There are packages that can achieve that for us.

Unique ids for event

@vubo Do we have unique ids associated with every new event. If not, I feel its good to add it.

If there are two events having same details, name and same start and end time, are we able to distinguish between the two in our code?

Refactor Job unit tests

Let's refactor the following:

  • Import statements - I would like to be conservative on importing the libraries needed for testing. Avoid * imports. Do not import libraries that are not used (I don't think the auth import is needed currently; let's not add until needed). General style: python standard library imports - blank line - django imports - blank line - application specific imports.
  • Docstring - One line describing individual unit tests
  • File - spaces vs. tabs - double check that all tabs are converted to spaces before check in (there is usually an editor setting for this
  • DRY - don't repeat yourself - a reasonable goal which may or may not apply to these tests but important to recognize when developing

Clarify installation instructions for psycopg2

It's possible that it could confuse newcomers whether the commands should be entered in the VM window or the local machine's terminal. Provide an example to help clarify for the user.

Test for view `/registration/signup_volunteer/` failing

  • This view is to register a new volunteer into the system
  • When I was testing this view, It gives 500 Server Error. After struggling a lot to find if the reason is due to wait for page load or any other selenium issue, I found that the problem is in the view itself
  • Problem is at https://github.com/systers/vms/blob/develop/vms/registration/views.py#L67 . organization_list is output of list of organization from services.py .
  • If it's empty (like in my case), view redirects to organization/add_organizations.html . There is no such template corresponding to this. There is a create template.
  • There is no need to check for organization_list. Since, we already have a field for other-organization if it's not in the dropdown. We can use the logic for inserting this organization first and then get the id of this newly inserted org and use it for the foreign_key relationship of newly created volunteer object.

@Nerdylicious @willingc @vubo

Add a datepicker to the templates where they are missing

Issue 11 from the task list:

When clicking on date in the administrator and volunteer reports, a datepicker (https://jqueryui.com/datepicker/) pops out. Add a datepicker to the templates where they are missing. For example, add the datepicker when specifying dates when creating events and jobs.

The jQuery UI datepicker code has already been imported, so it should be as easy as adding "id="datepicker" to the code, like this:

<div class="form-group">
    <label class="col-md-2 control-label">Date</label>
    <div class="col-md-8">
        <input class="form-control" type="text" name="date" id="datepicker" value="{% if form.date.value %}{{ form.date.value }}{% endif %}">
    </div>
</div>

For administrator:

  • Create event
  • Create job
  • Create shift

Adding a map

@willingc How about showing a small map to the user, in features like create event, where we have something as 'location'?

@vubo What do you think about it? There are packages that we can easily use to implement this feature.

Add missing unit tests

  • Add missing unit tests in organization/tests.py
  • Add missing unit tests in event/tests.py
  • Add missing unit tests in job/tests.py
  • Add missing unit tests in shift/tests.py
  • Add missing unit tests in volunteer/tests.py

Date range for the event search

Add a calender / date range opportunity for the event search.

Volunteer must be able to find all the events for specific dates.

shift

VMS Installation Guide fixes

Here are the improvements I would add to the VMS installation guide. I can put these in when I get back from training at the end of July if need be.

Vms/Installation Guide.md:

Clone Project:
*git clone https://github.com/systers/vms.git
*Make sure you are in the top level directory of where you want the cloned files to end up.
*Check the contents of the destination directory to ensure that clone took place.
Download Systers Ubuntu Virtual Machine
*Replace content of Vagrantfile with file from @willingc in issue #49.
Using Vagrant
*Type everything in the command prompt rather than the virtual machine. Leave the virtual machine window open though.
*Use Linux commands in command prompt.
Install python-psycopg2 module
*Stay in the VM while doing this.

  • Setup PostgreSQL
    *x.x is version number. I used version 9.3.
    *Before entering python manage.py syncdb command go into the file /vms/vms/vms/settings.py and under DATABASES change ‘myuser’ to ‘vmsadmin’ and ‘mypassword’ to ‘0xdeadbeef’

`# Database

DATABASES = {
'default': {
'ENGINE' : 'django.db.backends.postgresql_psycopg2', #your database engine
'NAME' : 'vms', #the name of your database
'USER' : 'vmsadmin', #your DBMS username
'PASSWORD' : '0xdeadbeef', #your DBMS password
'HOST' : 'localhost',
}
}`

@willingc Here are my changes for the Installation Guide. Thank you again for all your help these last three weeks!

Refactor vms app for code style and maintainability

Progressively, go through vms app folder and refactor files. Things to look at comments, import statements, spacing after a keyword (there are several instances for an extra space in the code.

Files:

  • settings.py
  • urls.py
  • wsgi.py

Autopep8 problem

Related to this comment #28 (comment) I tried to run the code through a pep8 locally. I have used autopep8 and got an error:

Traceback (most recent call last):
  File "V:\Python27\lib\runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "V:\Python27\lib\runpy.py", line 72, in _run_code
    exec code in run_globals
  File "V:\Python27\Scripts\autopep8.exe\__main__.py", line 5, in <module>
  File "V:\Python27\lib\site-packages\autopep8.py", line 119, in <module>
    DEFAULT_CONFIG = os.path.expanduser(r'~\.pep8')
  File "V:\Python27\lib\ntpath.py", line 310, in expanduser
    return userhome + path[i:]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 9: ordinal
not in range(128)

One Day Events

Task 14 from the task list:

When creating events, you need to specify a date range for that event. What if an event is only a day long?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.