I need an application to keep track of employee and/or consultant’s time spent working. It should be accessible via a web interface and support both time clock type logging (where the employee clocks in and out) as well as general billing (where the employee enters hours worked on each task).
1) Complete and fully-functional working program(s) in executable form as well as complete source code of all work done.
2) Deliverables must be in ready-to-run condition, as follows (depending on the nature of the deliverables):
a) For web sites or other server-side deliverables intended to only ever exist in one place in the Buyer's environment--Deliverables must be installed by the Seller in ready-to-run condition in the Buyer's environment.
b) For all others including desktop software or software the buyer intends to distribute: A software installation package that will install the software in ready-to-run condition on the platform(s) specified in this bid request.
3) All deliverables will be considered "work made for hire" under U.S. Copyright law. Buyer will receive exclusive and complete copyrights to all work purchased. (No GPL, GNU, 3rd party components, etc. unless all copyright ramifications are explained AND AGREED TO by the buyer on the site per the coder's Seller Legal Agreement).
The following features are required:
1. User login / authentication and session handling.
2. Must support two modes of time entry: real time "clock in / clock out" (like a time clock) and raw entry of hours worked. Some employees will use the time clock method, while others will use raw entering of hours.
a. Time clock mode. This should support clocking in and out for breaks, lunch and end of shift. It should also support logging of work tasks completed. For example an employee might log in, answer phones for part of the day and then switch to filing. There should be a mechanism for logging this activity (the employee would have to enter the information as they clock in / out throughout the day). This is geared toward hourly employees.
b. Raw entry of time mode: Geared more toward salaried employees and consultants. Allows for entering of hours worked on specific tasks / projects.
3. Should support groups, projects and tasks. Employees/consultants can belong to one or more groups. Each group would be working on one or more possible projects and each project would have one or more tasks assigned to it. The application should allow employees to log their hours worked to the appropriate group & project for a particular task. An employee might work on several projects or several tasks during the course of a day. This should be supported.
4. Administrative functions should have a permission system. This system should involve groups, system tasks and roles. Please note that "system tasks" refers to tasks within the system itself such as editing time, creating users etc. and have no relation to the term "work tasks" as applied to describing work done by an employee.
a. Every action that can be performed by a user within the application will be referred to as a system task and have permissions associated with it.
b. There should be a super user account that automatically has permission to perform any system task.
c. All other users will be constrained by the permission system.
d. Users belong to groups.
e. Users are assigned one or more roles within a group.
f. Each role will have the ability to perform certain system tasks within the group.
g. Roles are definable. Of course, the ability to create new roles is in itself a system task.
h. There should be some preconfigured default roles for Administrator, Manager, Supervisor and Employee. Their exact abilities is not extremely important so long as they reflect the general hierarchy of administrator > manager > supervisor > employee. This is something I can tweak to suit my needs.
5. Every action should be logged. Logs should not be editable by anyone, including the super user, from within the application. However, logs may be viewed by users who posses appropriate permission.
6. Users with appropriate permissions should be able to modify time submitted.
7. Time periods should be definable for individual employees. For example one group of employees might have time periods that span two weeks and run from Tuesday to Monday while others might have monthly cycles, and still others might be on a weekly time period that runs from Saturday to Friday. These cycles should be definable and then assigned to each employee. Employees should be part of only one time cycle.
a. Employees who use the "raw time mode" would finalize and submit their timesheets for approval at the end of their period.
b. Employees who use the "time clock mode" would have their time automatically submitted at the end of the time period. If an employee is logged in to the system when the time period ends, they should be automatically (and transparently) logged out and then logged back in.
8. After submission, timesheets need to be approved by the appropriate manager. There should be a tool for managers to view timesheets pending approval.
9. Timesheets should be exportable in a CSV format, as well as viewable from within the application.
10. There should be a search tool that allows viewing (with appropriate permission of course) current (open) timesheets, submitted timesheets, approved timesheets etc.
11. Code must be well commented, in English.
12. General documentation of the code and database schema must be provided.
13. As much as possible, individual system tasks should be in their own functions, preferably as part of one or more libraries that are loaded into the main program.
14. All data should be stored in a database.
15. General application configuration, such as database login information etc. should be in a separate library that is loaded into the main program.
16. All SQL statements must be contained within functions. There should be no SQL in the main program.
17. The application should support using, at a minimum, MySQL and Postgres as its database. The particular database it uses would be configured in the global configuration library / file.
18. All output should be generated using some sort of template system. Output templates should be separate from the main program and easily editable by anyone with reasonable experience in HTML.
19. Must be secure. At a minimum, it must not be susceptible to SQL injection attacks, any sort of attack that could cause arbitrary code execution, session hijacking, cross site scripting or any sort of attack that would result in the ability for an attacker to read any part of the source code and/or any file on the system.
20. I am open to suggestions as to the exact programming language / technology to be used. It must be able to run on Windows as well as Linux & UNIX under Apache and/or IIS. If you have any questions or need clarification on the requirements, please ask me before submitting a bid. I tried to be as thorough as possible but I understand that it can sometimes be difficult to adequately explain an application concept. I am more than willing to make any clarifications necessary and I am capable of understanding many technical aspects of software design, so tech speak is OK.
In addition, when submitting a bid please state what technologies (language etc) you would be using and why. If you don’t have a strong preference, let’s discuss the options before hand.I have not placed any restrictions on people who may bid.
I will be selecting the winning bid based on a number of factors and while expert certification and previous work will of course be advantageous, it is by no means mandatory. The right person will win this bid if they demonstrate the proper expertise & understanding in their communication as well as a willingness to work.
This is a good opportunity for someone new to get some good ratings as well as reasonable pay. In addition, I will be submitting many more projects in the future -- so this could be an opportunity to form a long term working relationship. I look forward to your bids!
The application should use a web based interface and should be able to run on Windows or Linux servers under Apache or IIS. It should use a database to store information and must support, at a minimum, MySQL and Postgres. I am open to suggestions with regard to the exact language / technology to be used.