/jobsworth

Project Management, Collaboration and Time Tracking.

Primary LanguageRubyGNU Affero General Public License v3.0AGPL-3.0

Jobsworth Project Management

Welcome to the jobsworth project management, support ticketing and CRM system. This software is licensed under the AGPLv3.

Jobsworth can be used for helpdesk support ticketing, customer liasion, resource management (eg. systems and password tracking) and has a range of CRM type functionality. Plan your projects, see your schedule, know if you’re slipping behind and why. Time Tracking and extensive reports help you show your clients exactly what you’ve done and for how long.

Features

  • no restrictions or limits

  • interactive gantt chart & scheduling

  • flexible reporting

  • tracks and indexes all changes

  • notifications via email, rss & ical

  • ldap integration

  • accounting/billing system integration

  • custom attributes

  • inbound and outbound email integration

  • sophisticated access control

  • much much more

Further project details can be seen at [Ohloh]www.ohloh.net/p/jobsworth.

Support

The primary support is through the [mailing list]groups.google.com/group/jobsworth or if you have a bug report, [create an issue]github.com/ari/jobsworth/issues in the tracker. If you want to write up details of a new feature you’d like to see, please use the [wiki]github.com/ari/jobsworth/wiki.

Contributing

Code contributions are welcome to this project and the best way to go about it is to fork the git repository:

https://github.com/ari/jobsworth

Naturally, code contributions are much more valuable if they come with a good set of tests. Jobsworth already has very good test coverage and we intend to keep it that way. If you want your fork accepted by the main branch you will need to release your changes under both the AGPLv3 and the MIT licenses. The final jobsworth product is released only under the AGPLv3. This allows me to provide a commercial hosted solution to help fund the development efforts and keep the code open source.

If you aren’t a developer you can still contribute. Look at the [wiki]github.com/ari/jobsworth/wiki and help flesh out some new ideas, develop user interface concepts or sketch out functionality. User interface design is just as hard as coding, often harder and more important.

Installing jobsworth on your server

Step 1: Prerequsites

You need to be running some type of Unix: OSX, Linux, Solaris, BSD. Windows will probably not work. You will also need a database. MySQL is recommended. Postgresql may work.

Install some basic packages for your operating system.

FreeBSD

Do this as root:

portmaster graphics/ImageMagick

OSX

First install the Macports system from www.macports.org. Then:

sudo port install ImageMagick mysql-server

Ubuntu

Do this as root:

apt-get update
apt-get upgrade
apt-get install mysql-server apache2 git-core imagemagick gcc libc6-dev g++ zip build-essential bison openssl libreadline6 libreadline6-dev curl zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev autoconf libcurl4-openssl-dev apache2-prefork-dev libcurl4-openssl-dev libaprutil1-dev libapr1-dev libxslt-dev libxml2-dev

Step 2: Install Ruby

Stil as root, do this:

bash < <( curl -L http://bit.ly/rvm-install-system-wide )
echo "source '/usr/local/lib/rvm'" >> /etc/profile
source '/usr/local/lib/rvm'
rvm package install readline
rvm package install iconv
rvm install 1.9.2 –with-iconv-dir=$HOME/.rvm/us
rvm --default use 1.9.2
rvm gem install bundler

Step 3: Phusion Passenger

Install Phusion Passenger. You can instead use Mongrel, but it tends to be a little easier to set up with Phusion.

rvm gem install passenger
rvm exec passenger-install-apache2-module

And follow the instructions you’ll be given about how to install the relevant config for Apache httpd.

Your Apache httpd virtual host DocumentRoot should point to the public directory in the installation directory.

<VirtualHost *:80>
  ServerName jobsworth.example.com.au
  RailsEnv production
  PassengerHighPerformance on

  DocumentRoot /usr/local/www/jobsworth/public
  CustomLog /var/log/www/myserver.example.com.au-access_log combined
  ErrorLog /var/log/www/myserver.example.com.au-access_log
</VirtualHost>

You’ll need to allow access to the folder you specify if isn’t already inside your global httpd DocumentRoot. And MultiViews is bad for a Rails application.

<Directory /usr/local/www/jobsworth/public>
  AllowOverride All
  Options -MultiViews
  Order allow,deny
  Allow from all
</Directory>

Naturally adjust the paths to suit your own environment.

Step 4: Getting the source.

The easiest way to get the source and easily update it from time to time is with git. You’ll need to install that on your machine and then run:

git clone git://github.com/ari/jobsworth.git /usr/local/www/jobsworth

It is very important that you run this command as the same user your Apache httpd server runs as. This is often the “www” user. You will want to put the source somewhere sensible depending on your operating system. On OSX that might be ~/Sites/jobsworth and on FreeBSD /usr/local/www/jobsworth. We’ll use the FreeBSD path in these instructions.

By default you are following the ‘master’ branch. Instead you might want to follow “dev” if you are working on the development of jobsworth. This branch will be frequently unstable and you should know quite a bit about Rails and jobsworth before you follow this one.

git checkout -b origin/dev

Or you may wish to just stick with a particular release which will remain static, such as

git checkout -b origin/v1.2

To go back to the ‘master’ branch which is the best for most people

git checkout master

Step 5: Ruby gems

Then in order to install all the gems we need. Again as the user your Apache httpd server runs as:

cd /usr/local/www/jobsworth
rvm exec bundle install

If you have trouble on OSX with the mysql gem (this seems to be an issue on 10.5), then try this

sudo env ARCHFLAGS="-arch i386" gem install mysql2 -- --with-mysql-include=/opt/local/include/mysql5 --with-mysql-lib=/opt/local/lib/mysql5 --with-mysql-config=/opt/local/lib/mysql5/bin/mysql_config

Step 6: Setup configuration and database

ruby setup.rb

Step 7: Sending email

Jobsworth will send emails as tasks are updated. In order for this to work correctly, you need to edit the file config/environment.local.rb. Any SMTP server will do: it could be installed on the local host, on another server or at your ISP. Just make sure it is set to allow relaying from jobsworth to any external address and there isn’t a spam filter which drops some emails.

Step 8: Set up email receiving

When jobsworth sends outgoing emails for task updates, they will have a reply address which looks like this:

task-1234@acme.domain.com.au

If a user hits reply to that email, you want it to go back and be appended to the task comments. It isn’t hard, but you’ll need a mail server you have some control over in order to get the magic to work. Firstly, let’s look at that email address. To the left of the @ we have a designator showing which task this email is relevant to. On the right ‘acme’ represents the name of the company you set up when you ran the setup.rb script and first installed jobsworth. And the final ‘domain.com.au’ part is defined in the environment.local.rb file in your config folder.

You need to set up your email software to pass all incoming emails for *@acme.domain.com.au to a special script. That ‘*’ means a wildcard: that is, any username at that hostname will be forwarded.

Sendmail

For example to configure sendmail, add an entry to /etc/mail/local-host-names for your hostname:

acme.domain.com.au

Add an entry to /etc/mail/aliases to create an alias that will hand off emails to the mailman script

jobsworth: "|/usr/local/www/jobsworth/script/rails runner -e production 'Mailman.receive(STDIN.read)'"

Add an entry to /etc/mail/virtusertable to redirect all emails to your domain to the above alias

@domain.com        jobsworth

run “make; make restart” in /etc/mail

Communigate Pro

Communigate Pro puts it own headers on the top of each email which need to be stripped. A little script like this is dropped into /var/Communigate/Scripts and then added to the ‘helpers’ configuration with in the GUI. You’ll need a rule inside Communigate to pass all email to the appropriate hostname to this script.

#!/bin/sh

RUBY=/usr/local/bin/ruby
MAILSCRIPT="/usr/local/www/jobsworth/script/rails runner"

# Strip the first 6 lines which are specific to Communigate
/usr/bin/tail -n +7 $2 | ${RUBY} -W0 ${MAILSCRIPT} -e production 'Mailman.receive(STDIN.read)' > /dev/null

exit 0;

Step 9: Finishing up

This gets the mail sending daemon working and ensures everything is clean up and up to date.

sh update.rb

Upgrading to a newer revision

sh update.rb