? SPVGGaeeagronbmcsvdemoemmaexistsffffilejojmultiplenixonpoipruebasheetssitesmartlinkssqgfqtesttodo +
You clicked on the "?" for help.

This application is called "Multiple Time Sheets" (mts).

That gray thing is the "tab bar". It's supposed to look like a clickable tab bar.

Download and Installation

Visit the MTS web page.

To install it, unzip the file, and then edit the conf.inc.php file to work with your system. Then upload it.

Setup

All setup information is in the conf.inc.php file. Read the docs in there.

Backup

MTS has a simple email-based backup system. Configuration is in the conf.inc.php file.

Security and Users

The system presently has no login system. I use an htaccess/htdigest password on my site to keep people out.

There is no multi-user support. You can support more than one user by setting up more copies of the software.

Concepts

This system is designed for workers who have multiple clients/customers, and work by the hour on an ongoing basis. (It's not intended for mechanics, for example.) For each client you create a "tab".

Each tab has a single timesheet. The timesheet is like a spreadsheet, but without a grid. The timesheet is used to create an invoice. An invoice is like the email you send out to clients, demanding money. Invoices are created, saved, and sent out, and are the permanent record of work performed.

This is different from most timesheet software because it works like a Wiki -- you edit free-form text files, and the computer figures out what you want. It's not designed on top of a database.

Recording Your Hours

Click on the tab you want to record to. Click on "timesheet" in the subnavigation.

Click on "edit" at the bottom of the page. You can edit your hours in there.

Lines that "look like" time data will get added up onto your timesheet. The format of these lines is this:

			[date] - [start] - [end] - [description] - [total minutes]
			10/20 - 10:00 - 2:00 - long long lunch - 240 minutes
		
Each field is separated by a " - " dash. You must spaces around it to make it stand out to the software.

That's the complete format above. To make data entry easier, you can omit some of the fields. The last field, total minutes, can be left out because it's automatically calculated. The date can also be left out, and it'll guess the right date by using the one on the line above. The start time can be left out, and it'll assume 0:00. The description can also be left out.

The following are all valid lines that the software will recognize:

	1:00
	1:00 - 2:00
	2/10 - 1:00
	1:00 - fix tables
	2/10 - 1:00 - 2:00 - fix tables
	2:00 - 3:00 - fix footer
	
When you save the timesheet, these incomplete lines are made as complete as possible. Then they are added to the grand total. The lines end up looking like this:

	7/31 - 0:00 - 1:00 -  - 60 minutes
	7/31 - 1:00 - 2:00 -  - 60 minutes
	2/10 - 0:00 - 1:00 -  - 60 minutes
	2/10 - 0:00 - 1:00 - fix tables - 60 minutes
	2/10 - 1:00 - 2:00 - fix tables - 60 minutes
	2/10 - 2:00 - 3:00 - fix footer - 60 minutes
	

Starting A Work Session

It's good to "mark" the time you're starting work. The timesheet likes to try and convert all time measurements to timesheet data. This annoys the author, so he hides the time from the timesheet like this:

		#10:00 - starting on something
		

The # starting the line prevents the timesheet from "seeing" that it's a time. The computer is easy to fool.

When it's time to finish a session, just remove the "#" and complete the line.

Setting Your Hourly Rate

The rate is set in the first line of the timesheet. Here's an example:

	rate=30
	

It must be on the first line. If this line is missing, you'll get an error when you save the sheet. (You can delete it from the invoice, though.)

Hiding Hours From the Calculator

When I start a work session, I put a comment into the timesheet like this:

	#8:15 working on integrating graphics
	
Then I save it. Later, I enter the end time and reformat it into a complete line.

Daily Status Reports

Most managers and clients like to get some kind of status report. MTS supports creating a daily status report. The reports are based on the day's work, as listed in your timesheet.

Click on "statusreport", then "CreatInvoice". MTS will look at your timesheet, and find all the descriptions for work done today. It then splits up the descriptions on the comma (,), and puts each task on its own line, followed by a dash (-).

After the dash, type in a little more information about each task. After the "To:" line, type in any reciepients' email addresses. Note that yours is automatically added.

Click save, and you will see your report, reformatted. Note that text before the dash is reformatted into bold, and the text after is dropped down one line.

You may now email this status report to your client. Any email addresses in the status report will receive this message. If you want to "hide" the report from someone mentioned in the report, don't include their email address.

The status report tool will remember the last set of email recipeints, and automatically insert them into new status reports.

Invoicing Concepts

An invoice is a record of work performed, with a demand for money. It is composed of these parts: the timesheet, client's contact info, worker's contact info, a header, and a footer. Most of this is set up in the conf.inc.php file. The client contact info is set via the web.

Invoices can have three states: New, Sent, and Paid.

Read the sections below to get more info about these states.

Setting the Client's Contact Info

There are two places to store client info. The first is any public info that will show up on invoices. The second is private info that will not be displayed anywhere but on the clientinfo screen.

Click on the "clientinfo" link in the subnav. Then click on the "edit" button. Type in their contact info, including an email where they'll receive their invoice. This email address will be picked up by the software.

Type in any other private info into the lower field.

Preparing and Sending an Invoice

Click on the "invoices" link in the subnav. If there are no invoices, you will be given the option to type in a starting invoice number.

You'll see a form with an invoice in it. Here, you can edit the invoice. You can even edit the timesheet in the invoice, but it won't get recalculated. Add notes as you see fit. Delete any stray notes you left on the timesheet.

Don't remove or alter the line that reads "INVOICE", because that word will be replaced with a fancy header and the invoice nubmer.

Once the invoice looks good, save it. You'll then see the invoice as it's been saved. (At this point, the invoice's state is "New".)

From this view, you have some freedom. You can click "send" to send the invoice to all the email addresses mentioned in the invoice.

If something's wrong (like too many email addresses) you can delete the invoice, and start over.

Deleting an Invoice

You can delete "new" invoices by clicking them open, then clicking on the "delete" button.

Sent and paid invoices cannot be deleted. They're legal documents and can't be altered (at least not with this software).

Marking an Invoice Paid

When you receive a check for payment, dig up the old invoice by clicking on "invoices" in the subnav. The latest invoice should have a name like "2001.S" indicating that it's been "Sent". Click on that link, and you'll see the old invoice. Click on the "Paid" button, and the invoice will be renamed to something like "2001.P".

Cleaning up Your Timesheet

When you create an invoice, your timesheet is not cleaned out. That's left to you.

To-Do List Concepts

The todo list is very simple outline editor.

The depth of the outline is determined by the number of spaces in front of the line. If a line looks like it is the child of the line above, then it will be indented.

The color of a line can be set by adding exclamation marks (!!!) after the line. The more of them, the more glaring the text will be. If you end the line in question marks (???), the text will go green and italics.

Smartlink Concepts

Smartlinks are a way to easily link from your timesheets and to-do list to other web-based software, (for example, Bugzilla and Wikis). The idea is that you'd type something like "Bug 10" and it would turn into a link to that bug's page. With a Wiki, you might type "See ProductDesign" and it would turn into a link to the ProductDesign page. What makes the links "smart" is that you don't need to type the full URL in -- instead, the text is automatically linked, based on a pattern.

If you're wondering why you'd want to do this, you should learn about Wikis. Then, if you're still baffled, learn about Bugzilla or other task-tracking software. These are web tools that help you manage your workflow and share information with other workers.

This feature was created because the author was spending time "summarizing" the bug into one or two words, and then losing track of how long a bugfix took. Also, finding the bug in Bugzilla was impossible.

Smartlink Hacks

Smartlinks patterns are a minor extension to Perl-style regexs. For each line in the text, it matches all patterns in the smarlinks rules, and then makes links. The wildcard * matches words, and # matches numbers. These are simply expanded into simple grouped regexs. Then, in the link URL, a single substitution is allowed. This replacement is specified with either * or # (doesn't matter which).

This means you can use plain old regexs in your pattern, as long as it doesn't contain a # or * (which would get transformed away). The following pattern matches mailto urls, and links them.

mailto:([a-z0-9@.]+) - mailto:#

You can also match http:// links.
http:\/\/([a-z0-9.\/]+) - http://#

That's getting pretty complex! The backslashes escape the forwardslashes, so the regex works (in PHP's preg_match()). This pattern must be the first pattern, or it will match other URLs that smartlink inserts into the text. (As an experiment, move the pattern to the end of the list to see some weird HTML.)

Instead of confusing yourself with those things, it is better to just use more explicit patterns that don't match anything in a normal URL, and grab text a little more indiscriminately, like this:
WEB:([^<]+) - http://#

Okay, so it's not so simple. The [^<]+ matches anything but the first < that starts an html tag. (In case the URL is followed by a tag.) See why this section is called "hacks"? Use these hacks at your own peril. You may find yourself un-linking many of your precious links with one tiny error in the smartlinks. Use the "plain text" style smartlinks, and you will be a happier, saner person.