Resource planning with Vertec before 6.6.

Resource planning with Vertec in versions before 6.6

Product line

Standard

|

Expert

Operating mode

CLOUD ABO

|

ON-PREMISES

Modules

Services & CRM

Budget & Phases

Purchases

Resource Planning

Business Intelligence

Created: 16.07.2012
Machine translated
Updated: 09.07.2023 | OCL operators for resource planning before 6.6 removed from article “OCL” and inserted here.

This article only applies to Vertec versions prior to 6.6. For more information on the new resource planning, see the Resource Planning article.

The Resources & Project Planning module allows the project-oriented planning of your employee resources and, of course, the comparison with the effectively entered services.

Planning is carried out on a daily, weekly or monthly basis per employee and project or project phase. Thanks to the target time settings, the available working time of employees per planning interval is clearly visible and can be included in the planning.

Recording of resources

Resource planning data is entered in the resource planning list on an employee, a project or a project phase. The resource planning lists are the familiar Vertec list views with the options for column configuration and direct export to Excel.

The planning interval (month, week, or day) can be dynamically changed at any time in any view.

Resource planning has a master detail view. When a project line (or phase or worker line) is selected in the upper area, a table is shown below showing all the resources planned for this project (or for this phase or this employee). This view is controlled by the system setting Show resource plan for detail line.

Effective date for delimitation of the past

An effective date can be specified on each list. This allows a dynamic delimitation of the past. This date has the following effect:

  • The scheduled value (Total column Scheduled) shows all scheduled values from effective date
  • The completed value (Total column Actual) shows all hours worked up to the effective date

This now allows a comparison between the hours planned and the hours actually worked.

A manual change of the effective date is temporarily valid for the up-to-date list. The standard is calculated as follows:

  • If a blocking date is set in the system settings, this blocking date (+1 day) is taken as the effective date.
  • If no blocking date is set, the effective date is the first of the up-to-date month.

Example

Fifty hours were planned for April and May. Now, however, 70 hours have already been worked in April. This has not been seen so far, which means that 50 hours were still planned for May, with only 30 hours remaining.

To correct this, you can now set the due date, in our example to 1 May. So you can see that 70 hours have been worked and 50 hours are still planned.

If you compare this with the budget (in the example on the corresponding project), you can see that this is only 100 hours, so you can manually reduce the budget value for May to 30 hours.

Here you can also see how the degree of completion (PoC) is changing. Before the correction (or before the implementation of an effective date), it was thought that only 58 percent had been completed, but in fact it is already 70 percent.

Calculation of values per planning interval

The planning interval (month, week, or day) can be dynamically changed at any time in any view. At the detail level, values are saved only when entered by the user. The remaining values of the detail level are dynamically calculated from the next higher level, if any.

For a single displayed period (one day, one week, one month) there are the following options:

  1. The value has been entered on the displayed period: there is nothing to calculate, the value is displayed in green font.
  2. The value has been set at a higher level. It is then converted to the lower planning interval according to standard hours and shown in black.
  3. The value has been entered only for more detailed periods: the displayed value is calculated as a sum and is shown in black. When adding Day > Week or Day > Month, you can simply add up. When adding Week > Month, you first need to calculate the load per day, which can then be added up to the month (see section Calculations over the day below).
  4. The value was entered in the displayed period, but the calculated values were changed for one or more periods below it. In this case, the value entered in the displayed period is corrected by the values entered in the periods below it. The difference between the calculated value (from the above period) and the entered value per day is calculated and added or subtracted from the value of the above period. Calculated values are displayed in orange font.

If a value is set on a period and there are planned data on periods below it, these are deleted without further query.

At the end of the month, weeks and months may overlap. If a month is set and plan dates already exist for the overlapping week, the days of the week that relate to the other month are converted to plan dates of the day.

Calculations over the day

As soon as a value has to be distributed from a period above it to periods below it, it is always calculated over the individual days. The sum of the individual days in the period must again equal the value in the period above it (week or month). Each individual day in the period receives the percentage of the entered value that corresponds to its percentage of the available resource time (standard hour minus compensation).

Exception: if the resource time is 0 for the entire interval on which the value was entered (e.g. vacation), then scaling is done linearly to quantity of days (because otherwise the scheduled value would be lost).

Resource planning on project phases

Plan data can be entered either for projects or for phases. In the system settings > Resource planning, it can be defined whether planning is by default on projects or on phases. The corresponding system setting is Planning level for new projects. This value can still be overridden on the individual project.

The link types phase – resources and user – resource planning phase must be active in order to be able to use resource planning on phases.

The list of phases is determined based on the projects assigned to the user (bearbProjekte). Only phases of projects on which the user is allowed to enter are listed. Only the first level of phases (direct phases of the project, no sub-phases) is supported.

The phase list is displayed grouped according to projects, with a project line above each phase line.

New rows can be created using the right mouse button > Add row. The project selection dialog appears with all projects that have phases. Adding a new row assigns the project to the user (same as in the project resource list).

Setting resource plan values

Budgeted values can be entered not only manually in the list, but also via the Set Resource Budgeted Values dialog. Right-click on the corresponding row and select Set Budgeted Values...

Employee and project (or project phase) are automatically calculated from the corresponding resource list. The time period and the planning interval apply the values of the up-to-date list, but can still be adjusted.

Use available time

Here you can distribute the employee’s available time linearly over the time period. The available time is the remaining availability, i.e. all the employee’s not yet scheduled time. At 100%, the total available time is used, otherwise the corresponding percentage is used.

Percentage std target time

With this option, you can use the corresponding percentage of the group target time (100% target time) as resource time per scheduling interval.

Insert value

Here a value can be entered manually and entered. The value must be entered in relation to the planning interval, i.e. per day, week or month. The fixed value is entered, regardless of how much standard time is available. This can lead to overbooking, which can be desired for special assignments such as weekends. In addition, overbooking is an important benefit of resource planning – the overbooking indicates bottlenecks that need to be resolved in a management process.

Removing plan data

You can also use this dialog to remove plan data by setting a blank value in the Insert Value field (delete value from the field, do not enter 0).

This can only be done at the level where the values were set (i.e. where the values are shown in green text).

Availability of users on vacation

If vacations are entered as absences, this is taken into account in the resource planning when calculating the available time of the users.

If vacations are entered as a service (with correctly stored vacation activity, etc.), this is not taken into account in the resource planning for the available time of the users.

If you do not want to enter vacations as absences, but still see vacations in the resource planning, then you have to plan the vacation time in the resource planning like the other services. The reason is that absences are PLAN and ACTUAL, while services are always JUST ACTUAL.

Script method for setting resource planning values

Starting with Vertec 5.8, there is a script method called setresourceplanvalue to set resource planning values by script. This method sets a planned value for a cell in the resource plan.

Python (Disambiguation)

vtcapp.setresourceplanvalue(bearbeiter, projekt, phase, date, intervalType, value)

Visual Basic

IVtcSession.SetResourcePlanValue(bearbeiter, projekt, phase, date, intervalTyp, value)
date

The date should correspond to the start date of an interval of the selected type.

As a precaution, the method automatically corrects the date down to the nearest interval limit.

intervalType

Type of planning interval:

0: Day
1: Week
2: Month

value

Estimated value in minutes.

To remove a value, a value can be passed that is logically “False,” i.e. 0, an empty string ““, or None.

Authorization check when writing via script

The same permissions checks are performed as when writing to the resource table:

  • User is allowed to schedule resources for himself.
  • Project leader is allowed to plan resources for all employees on the project.

Can be globally overridden by the user right to Resourcescolte.planminuten.

Expression-based user rights that access the resource column mapping do not work because there is no resource column.

Depending on the setting on project, you can only plan on project or on phases.

List settings in resource planning

The master lists of resource planning (above) can be customized via the list settings.

The settings show the fixed columns at the beginning as well as the interval columns for the first interval (in the example, the scheduled and the Eff at the bottom of the list).

The fixed columns at the beginning represent the individual detail rows and are of type ResourceRow. They contain the following values:

ExpressionValueRenderer

planMinutes

Total planned value

dbmTIM.MinuteRenderer

isMinutes

Total value delivered

dbmTIM.MinuteRenderer

detailObj

Access to the corresponding object for which the row is shown (project, phase, user).

It is an ObjectReference, so it must be cast to a specific class, e.g.:

rndResourceList

 

if detailObj->oclIsTypeOf(project phase) then detailObj->oclAsType(project phase).
planminutenint else 0 endif

The interval columns are automatically duplicated for the quantity of intervals corresponding to the period. The interval columns with the planned values per planning interval are based on the expression column->at(1). This gives access to the individual columns of type ResourceColumn. These contain the following values:

ExpressionValueRenderer

planMinutes

Budgeted value in the displayed period

rndPlanMinutes

remainingMinutes

Available time, equal to rsrcMinutes – planMinutesTotal

rndMinutes

effMinutes

Achieved value in the displayed period

rndMinutes

effMinutesExt

Minutes workedExt

rndMinutes

effValueExt

Value paidExt

 

effValueCosts

Value-added costs

 

rsrcMinutes

Available resource time
for user and interval.

rndMinutes

planMinutesTotal

All scheduled minutes for row
detail and interval

rndPlanMinutes

planMinutesEditor

All scheduled minutes for the user and interval. Useful if the container’s Parentententry is a user. Otherwise, this value is planMinutesTotal.

rndPlanMinutes

Define columns in grey if resource time is 0

If you want to grey days with resource time = 0, i.e. weekends and vacations, in the reports for better clarity, this can be done with the following color expression on the Available interval column:

if spalten->at(1).rsrcMinuten=0 then 'clLightGray' else 'clLightPurple' endif

For resource lists on employees (which show project or phases as detail rows), the available resource time (rsrcMinutes) is the same in each row. To avoid recalculating this value for each row, the renderer can use rndMinutes in these columns.

The rndPlanMinutes renderer, which is used for planned values, does the same with the Color expression.

For the corresponding columns that exist by default, the color expression and the renderer are already set as such. For new list settings, you must manually set the color expression and the renderer if you want to gray the days with resource time = 0.

Ocl operators for resource planning

There are a number of OCL operators for querying resource planning data with Vertec versions prior to 6.6.

For Vertec versions from 6.6 onwards, see the article Ocl, python, custom renderer and list controller for resource planning instead.

.getResPlanMinutes(from, to)
Returns the scheduled time for the user for the specified period (from, to date) in minutes.
.getResRsrcMinutes(from, to)

Returns the resource time for the user for the specified period (from, to date) in minutes. This is not the time still available, but the total standard time relevant to the resource schedule. The difference to standard time is that only absences of type “free” affect the standard time, whereas all types of absences (free, vacation, compensation) are deducted from the resource time (see also the table on “working time exceptions” in the article “absences”).

From Vertec version 5.7 onwards, the services entered as vacation will also be deducted.

getResLinksB(from, to)
getResLinksP(from, to)
getResLinksPh(from, to)

The operators getResLinksB , getResLinksP , and getResLinksPh operate on user , project , and project phase , respectively. The operators can be applied to individual objects or to lists.

The operators support 2 arguments to specify the desired date interval. The date arguments are passed as strings, so an empty date for the start or end of the interval is also possible.

The result of the getResLinks operators is a list of Resource Link objects.

sumResPlanMinutes(from, to)
The sumResPlanMinutes operator operates on a list of resource links and returns the sum of the resource plan data for the list and the specified interval.

The query of resource planning data via OCL is performed in 2 steps:

1. Loading Resource Link List

The operators getResLinksB, getResLinksP, and getResLinksPh operate on the user, project, or project phase, respectively. The operators can be applied to individual objects or to lists.

The operators support 2 arguments to specify the desired date interval. The date arguments are passed as strings, so an empty date for the start or end of the interval is also possible.

The result of the getResLinks operators is a list of Resourcelink objects.

2. Summing a List of Resource Link Objects

The sumResPlanMinutes operator operates on a list of resource links and returns the sum of the resource planning data for the list and the specified interval.

The division of the resource planning query into 2 operators allows for very flexible queries, since the selection of the desired resource link objects is separate from the actual summation. The real difficulty in querying resource planning data is the summation of resource links, which must take into account the different interval types (day, week, month) correctly.

Examples

Query resource planning data for user and period:

bearb->getResLinksB('01.05.12','31.05.12')->sumResPlanMinuten('01.05.12','31.05.12')

Resource planning data for users and period only for a specific project:

bearb->getResLinksB('01.05.12','31.05.12')->select(projekt.code='ABC')->sumResPlanMinuten('01.05.12','31.05.12')

It is somewhat awkward that both operators (getResLinks, sumResPlanMinutes) need to specify the date interval. This is necessary, however, because selecting resource links with getResLinks might yield too many resource links, as for example, interval types of week or month must also include resource links whose date is before the From date. The final date selection takes place only during the summation with the sumResPlanMinutes operator.

User rights for setting resource values

By default, the rights are as follows: The user can change his own entries, the project leader can change those on his projects. All users can read all entries.

If the user rights are to be defined differently, this must be done as follows: Basically, the user rights are all to be set on the class ResourceColumn. These correspond to the columns as they are shown in the resource view. From there, you can access the rows of the resource planning via row. From there, you can access the object that is currently displayed in this row via detailObj, and via rescontainer to the container and from there via parentEntry to the root object in the tree (which represents the resource planning).

As an example, employees should not be able to enter their own values:

  • Group Default User, Deny Permissions: Resource Column, Write, Deny.
  • Group project leader, accept rights on own projects: ResourceColumn, write, accept with the following condition (expression):
    if zeile.rescontainer.parentEintrag.oclIsTypeOf(Projekt) then 
      zeile.rescontainer.parentEintrag.oclAsType(Projekt).projektleiter=varLogin 
    else 
      if zeile.rescontainer.parentEintrag.oclIsTypeOf(Projektphase) then 
        zeile.rescontainer.parentEintrag.oclAsType(Projektphase).projekt.projektleiter=varLogin 
      else 
        if zeile.detailobj.oclIsTypeOf(Projekt) then 
          zeile.detailobj.oclAsType(Projekt).projektleiter=varLogin 
        else 
          if zeile.detailobj.oclIsTypeOf(Projektphase) then 
            zeile.detailobj.oclAsType(Projektphase).projekt.projektleiter=varLogin 
          else 
            1=0 
          endif 
        endif 
      endif 
    endif

    From this example, you can see that the right user must (can) be set in each view, as they relate to the resource columns.

  • Group that can edit everything: ResourceColumn, write, accept.