Introduction
Reports will include the estimates for project tasks. In this version of ops admin there will be 4 types of reports
See also
RemovedUnusedFunctionalityFromReportPage and
OpsAdminUseCases.
Functional description
The existing transformation (xsl) files for basic and projects-total reports have to be updated for estimates, see
NewReportStyles for required changes.
A new report style
project will be added that will integrate the estimates for tasks in the report, like this:
| quote |
quote-estimate |
task |
total estimate |
spent |
todo |
loss/gain |
... |
week x |
week x+1 |
... |
week x+n |
| deliverable1 |
x |
task1 |
e |
s |
t |
e- (s +t) |
... |
... |
... |
... |
... |
| total |
sum quotes |
sum(e) |
sum(s) |
sum(t) |
sum(e- (s +t)) |
... |
... |
... |
... |
... |
example:
Project: Func. OPS Admin
timeframe: 01-10-2007 / 01-10-2008
Technical description
Todo:
- retrieve project estimates and create report, see ReportSchema
- rewrite xsl file for estimates: basic.xsl. (see NewReportStyles)
- rewrite xsl file for estimates: projects-total.xsl. (see NewReportStyles)
- write new xsl file to show full project report with estimates, see table above
- refactor: find out why the transformation files (xsl) are duplicated (in ops_admin and in the timesheet-http-proxy) and fix it!
Implementation
Now the report is generated from the calendar files by webservices. The private static method =getCalendar(String projectGuid, Date fromTime, Date toTime, String
person, String company, Boolean declarable)= in
org.openprojectservices.webservice.opstimesheet.OpsTimesheet retrieves all the relevant .ics files. With some additional info these files are then mashed up into one SAXSource Object. The xsls for rewriting the raw timesheet reports into pretty tables are applied by ops_admin.
At some point the estimates for projects tasks need to be added to the timesheet.
Considerations
Which project estimates should be retrieved and where (ops-project or ops-admin)? Issues to consider:
- Estimates are only relevant for projects that appear in the timesheet (.ics) files.
- A priori retrieving task estimates for all some 500+ projects is silly.
- changing the webservices of ops_project should be avoided because other parts of ops depend on them. (Extending them is not a problem)
Which Estimates to retrieve
Option 1: use search constraint
Instead of retrieving estimates for all projects, a subset could be retrieved based on the search constraints because the timesheets are also filtered by project, timeframe and person. So if no project was specified a search filter can be used based on project members and/or project begin- and enddate, but:
- The startdate and enddate in the current opsschema are of type IA5String (OID=1.3.6.1.4.1.1466.115.121.1.26). This type of search filter: (&(endDate>=07-10-2008)(objectclass=project)) is not possible. The schema should either be changed (to GeneralizedTime (OID=1.3.6.1.4.1.1466.115.121.1.24)) or the time constraint cannot be used.
- When ics files for a timeframe are retrieved, the projects begin and enddate er not taken in account. All timesheet events for a project should fall between the begin and enddate of the project but since there is no sanity check there are no guarantees.
- Filtering projects before the timesheets are retrieved may not be efficient. Without a search constraint all projects are retrieved. The .ics files for a given timeframe may not contain all the projects active during the given timeframe and .ics files for person X may not contain all the projects person X is a member of.
Option 2: parse timesheets to get relevant projects
Option 3: ldap is fast, get estimates for all projects
- still, the 500+ map has to be searched to map estimates to timesheet events.
Where to implement estimate retrieveal
Option 1: ops_project
- Pro: timesheets are retrieved in ops_project, this is the logical place to add estimates
- TODO: add method, change wsdl
Option 2: ops_admin
- PRO: already implemented
- CONTRA: estimates are only available in admin, not in other parts of ops
- but: a massive refactoring resulting in either one DAO or all LDAP operations going through ops_project is pretty high on the wish list anyway. See OpsAdminIssues.
Conclusions
This is a ops_admin project and the functionality to get project estimates already exists in ops_admin, so use it. A sensible retrieval of estimates can be used like this, pseudo code:
if (project_selected) {getEstimtesforProject}
else if (person selected) {getFiltered project; for each: getEstimtesforProject}
else {just get all estimates}
Optimize if neccesary.
Estimates
Discussion
- sum implementation task estimates for comparison with quote estimate? Yes, but not comparisom between implementationTask todo and total
--
IvanaCace - 06 Aug 2008