- 1. Introduction
- 2. Common concepts
- 3. Calendar
- 4. Address book
- 5. Structure elements in ProjectForge (former tasks)
- 6. Order book
- 7. Scripting in ProjectForge®
- 8. Financial administration with ProjectForge®
- 8.1. Invoices
- 8.2. Liquidity planning / forecast
- 8.3. Datev-Import (German)
- 8.4. Other imports
- 8.5. Time sheets
- 8.6. Cost unit accounting
- 8.7. Reporting via Report objectives (in progress)
- 9. Data protection
- 10. Glossary
1. Introduction
This document includes some hints tips and best practices for the usage of ProjectForge®. It will never contain the whole functionality of ProjectForge® because a well-designed web application is easy to use and self-explained by tool tips etc.
2. Common concepts
2.1. Full-indexed search
All list views support a search field. Refer the tool tip to see which fields of the data objects are part of the index. (see figure 1).
Figure 1: |
Enter a free text in the search field to start a full text query. Part of words are as well supported as logical expressions. |
A detailed description of the possibilities may be find on Lucene page lucene.apache.org/core/2_9_4/queryparsersyntax.html.
The following table shows some common used queries.
Expression | Function |
---|---|
abc |
The search result contains all objects with fields contain words beginning with 'abc'. The search isn’t case-sensitive. |
*abc* |
The search result contains all objects with fields contain words containing 'abc'. The search isn’t case-sensitive. |
meier~ |
Phonetic search: Fields containing e. g. 'mayer' will also be found as 'meier'! |
abc def |
Searches for fields which contain words beginning with 'abc' and/or 'def'. |
+abc -def |
Search for fields containing words beginning with 'abc' but not with 'def'. |
name:abc def |
Search for all objects where the field 'name' contains words beginning with 'abc' and searches for 'def' in all object fields. |
2.1.1. Automatical wildcards
Hint
If the search field contains only sub-string with alphanumerical characters (including @._* and spaces) ProjectForge® appends automatically the wildcard character '*'. For all other expressions the entered term will be leaved untouched. Logical expressions of Lucene (the keywords AND, OR and NOT) will also be leaved untouched).
Expression | Modification by ProjectForge |
---|---|
hello |
hello* |
hello ProjectForge |
hello* ProjectForge* |
k.reinhard@projectforge |
k.reinhard@projectforge* |
hello AND 2008-11-21 NOT hurz OR test |
hello* AND 2008-11-21 NOT hurz*
OR test* |
hello AND name:hurzel |
hello AND name:hurzel hello AND name:hurzel |
+hello and hurzel |
hello and hurzel + (no substituion because of ''.) |
If in doubt, ProjectForge® displays any substitution of the user’s input below the search field.d).
2.1.2. Search for structure elements
ProjectForge® searches also for names of ancestor structure elements. If you search for time-sheets for 'Yellow logistics' all time-sheets assigned to the structure element 'Yellow logistics' or descendant structure elements will be found.
2.2. Quick-select
If you choose any list view for selection (e. g. structure element) and only one entry is found by the search this entry will be selected automatically and ProjectForge® returns to the caller page.
2.3. Filter for search in history of changes
Almost all list pages supports an extended filter for searching for
objects regarding the history of changes, e. g. the user wants to find
any object which was changed during the last 10 minutes etc. Click on
the plus sign at the right bottom of the search field’s label to see the
opportunities.
All other filter criterias will also be used. (see figure 2)
Figure 2: |
Through the extended search filter you may search for objects which were changed during a given time period. |
_ _
2.4. Auto completion
For more and more fields an auto-completion is supported. After entering
2 characters a list of entries suggested by the server will be displayed
for a convenient selection. You may enter the cursor up- and down-keys
to select entries without using your mouse.
A double-mouse-click, if supported by the input field, will show recent
used entries or a list of all available objects.
2.5. Favorites / bookmarks
For sending pages of ProjectForge® as link via e-mail or for
bookmarking them in your browser, you should use the menu entry 'Show as
bookmark'. ProjectForge® offers a link including all settings of the
page (e. g. the filter settings of the list view).
Please do not use the displayed url in your browser because this URL
isn’t valid outside your current session.
2.5.1. Favorites / bookmarks in list views
As figure 3 shows ProjectForge® offers two links in list views:
-
Direct link for list view without preset of the filter parameter (the default view is used with the recent parameters).
-
Direct link for list view with preset of the filter parameters.
Figure 3: |
This figure demonstrates the bookmarking functionality of the list views. The first link contains only a bookmark for the list view without the preset of any parameters (the default view is used). The second link contains a bookmark with the preset of all filter parameters. |
2.5.2. Favorites / bookmarks of time-sheets
As figure 4 shows, ProjectForge® offers also two links in time-sheet edit pages:
-
Direct link for displaying an object by id.
-
Direct link including parameters for calling the edit page with pre-filled parameters. This is usefull for adding new time-sheets with pre-filled parameters.
The second link may be used for creation of new time-sheets with templates (e. g. in JIRA or e-mails).
Figure 4: |
Bookmarks |
2.6. Stay logged-in
On the login-screen the user may choose the 'stay-logged-in' option.
-
ProjectForge® creates a browser cookie with a validity of 30 days.
-
At the next login from the same browser ProjectForge® detects this cookie, renews it and proceed the automatical login.
-
If the user chooses the menu entry 'log-out' the cookie will be deleted (if exists) and the user/passwort authentication is required again in this browser.
-
The cookie will be invalid if the user haven’t used it for 30 or more day or the user’s password and/or username has been changed.
-
The cooky stores the user id, the username and a code. All three parameters are checked by ProjectForge®.
-
Under 'My account' the user may renew the previous mentioned code. All stay-logged-in-sessions in all browsers are invalid directly after renewing this code. Please note: Any valid session isn’t effected by this action.
-
The stay-logged-in option may be re-activated at any time after entering username and password on the login-screen.
3. Calendar
The calendar is one of the most important functionalities of ProjectForge®. You may organize your time-sheets and personal events as well as team events in a convenient way. ProjectForge® is designed to improve the efficiency of projects and project teams from single-person-projects up to large-sized projects.
3.1. Quick-time-period-selection
You may browse very fast through month and/or weeks with the following element of ProjectForge®. (see figure 5)
Figure 5: |
Quick-time-period selection with browse mode for months and weeks |
3.2. Holidays
ProjectForge® support holidays and you may configure own holidays
in config.xml.
3.3. Support of different time zones
ProjectForge® supports different time-zones at once. The user may change his time-zone if he travels through different time-zones.
3.4. View modes
3.4.1. Calendar views: month, week, day
Figure 6: |
Month display mode of team calendar. |
Figure 7: |
Week display mode of team calendar. The red line is the current time-line. |
3.4.2. Customizable views with fast switch
You’re able to customize different filters of your calendars to show and use. Switch the view with only two clicks. You may give your different calendars different colors.
Figure 8: |
Customize your view filters with own colors etc. You may switch the view with only two clicks. |
3.5. Drag & drop and range-select functionality
You may create, move, resize and copy events by drag&drop and range-select functionality. The the videos or demo system for experience this convenient feature.
-
Download and subscription of calendars
You can download or subscribe all calendars as ics files. Subscribe ProjectForge’s calendars in Google calendar, MS Outlook oder Apples iCal.
Figure 9: |
An example of subscribed calendars of ProjectForge in Apple’s ical. |
Figure 10: |
An example of subscribed calendars of ProjectForge in Apple’s ical. |
-
Share your calendars
Use ProjectForge for team calendars. How to add a new calendar. -
Recurrence
ProjectForge supports recurrence of events. You may remove or modify single events or future events of recurrence events.
Figure 11: |
You may remove or modify single events or future events of recurrence events |
3 access modes
-
Full access
The assigned groups and users are able to read, insert, update and delete any event of the calendar.- -
Read-only access
The assigned groups and users are only able to read all events including the subscription and download. -
Minimal access
The assigned groups and users are only able to read all event start and stop times including the subscription and download. All other properties of events such as title, notes etc. are removed and aren’t visible.
Figure 12: |
You may configure the access to any calendar for groups and/or users. |
-
Import new events per Drag’n drop
You may import new events by simply dropping the ics files into the drop area at the top of the calendar page.
3.6. Roadmap
Further planned developments are described here.
-
Attendees
-
ProjectForge user’s as attendees
Badge with new invitations. -
External user’s as attendees
-
Invitation per e-mail
Send e-mail with an ics attachment, a summary and a link to accept/deny and comment an invitation. -
User’s e-mail as return-to-address
The return-to-address will be the user’s e-mail address, so any response of invitation is sent to the user and has to be handled by the user. -
ProjectForge’s e-mail as return-to-address
The return-to-address will be ProjectForge’s e-mail address, so any response of invitations is parsed by ProjectForge and the event is updated.
-
-
Update events and multi event import
Currently ics files can be dropped as files into ProjectForge only if the contain only a single event which isn’t already present. Later an update dialog with differences to accept/deny will be shown and a multi-import should be supported.
-
-
More complex recurrence pattern
-
Subsciption of external calendars in ProjectForge
Starting with icloud. An user is able to share his icloud calendars via ProjectForge.
4. Address book
4.1. Reverse search of phone numbers
ProjectForge® adds every phone number without any special characters and white spaces to the search index. You may enter any sub string of the phone number to find the address connected to this phone number (if exist).
Hint
Sometimes you may omit the country prefix of the phone number to find the address.
4.2. Personal favorites
You may import addresses of the list view in your personal address book
(e. g. Apple contacts) and synchronize the addresses with your mobile
device. The export format is VCard (vcf) for addresses and a csv format
for phone numbers (e. g. for your telephony system).
Your favorite addresses will be highlighted in the list view.
4.2.1. Export of vcards
You may choose the check-box 'Favorite' beside the form of address in the edit view of an address for marking the whole address as favorite (see figure 13). Click the button 'Export vCards' for downloading all marked addresses. You may choose single phone number for exporting them in csv format by clicking the check-box '*' right after the desired phone number.
Hint
Please use UTF-8 as encoding in your address book software!
Figure 13: |
This figure demonstrates the possibility to mark addresses or phone numbers as favorites. |
Hint for Apple contacts
Multiple exports of addresses may result in multiple note entries. Please use the following Apple script for removing such multiple note entries:
1
2
3
4
5
6
7
8
9
tell application "Address Book"
repeat with thisPerson in every person
if (exists (note of thisPerson)) and ((note of thisPerson) contains "CLASS: WORK") then
log "Name: " & (name of thisPerson)
delete note of thisPerson
end if
end repeat
save
end tell
-
You may excecute this script directly in your Apple-Script editor. (The result 'missing value' is expected.)
-
Afterwards you should import the ProjectForge® download (vCard).
4.2.2. Export of personal list of telephone numbers
You may export telephone numbers of addresses (marked in the address
edit page by clicking the check-box '*', refer
fig. 13).
You may import phone numbers to your mobile device or system telephone
(e. g. SNOM telephone) if vCard isn’t supported.
Via the button 'Export phone list' all' all marked phone numbers will be
exported with ISO-8859 encoding as csv file. ProjectForge® extends
the names of the contacs automaticall with "mobile" or "private", if the
number is not the business phone number.
4.2.3. Personal list of phone numbers for your Snom telephone
The exported list may be uploaded directly via the web site of the desired Snom telephone. The following figures 14 and 15 demonstrate the procedure of such an import.
Hint
Any previous imported phone number will be overwritten (no multiple entries are expected).
4.3. Export of the list of addresses
You may export the current displayed list of addresses for usage with
LibreOffice or MS Excel. For reasons of data-protection only the user’s
favorite addresses will be exported. Members of the
groups PF_Finance
or PF_Marketing
are able to download all address
for using them for marketing events etc.
Hint
The first address of each row is the mailing address. It’s the postal address if exist, otherwise the business address.
4.4. Animation of phone number / zoom
Figure 16 shows the Mouse-over-functionality, if the mouse cursor is positioned over a phone number. You may dial the number with your phone now.
Figure 16: |
Animated zoom of phone numbers |
4.5. Direct call via telephony system
The user may configure one or more telephone numbers under 'My account'.
Afterwards he is able to initiate phone calls directly from
ProjectForge® if configured by the administrators and supported by
the telephony system. Figure
17 demonstrates the possibility to initiate a phone call directly from
ProjectForge®.
Figure 17: |
shows the auto-completion functionality to initiate phone calls very easy. |
Hint
Please use the 'return' key for initiating the phone call. Like on most pages the 'return' key result in the default action.
Figure 18: |
4.5.1. Configuration
Please add your personal phone number (or a list of phone number) under 'My account'.
5. Structure elements in ProjectForge (former tasks)
The term 'structure element' is used in a generic way and represents customers, projects, releases, structure elements etc. They’re organized hierarchical. Access rights may depend on structure elements (and are derived from ancestor structure elements if configured). Figure 19 shows a typical tree view of structure elements in ProjectForge®.
Figure 19: |
Hierarchy of structure elements in ProjectForge® |
The following table describes the fields of structure elements:
Field | Description |
---|---|
Parent structure element |
The structure element is a descendant structure element of the parent structure element. The structure elements at the top of the hierarchy is the root node which is the onliest structure element without a parent structure element. |
Name |
|
Referenz |
Multi purpose field, optional. This field is derived for all descendant structure elements if not overwritten in such structure elements. This is useful for exports etc. |
Status |
|
Priority |
|
Short description |
|
Description |
|
Progress |
optional without further functionality. |
Maximum hours |
If given, the consumption will be displayed in the structure tree as well as during booking a time sheet, see 5.1 . |
Responsible |
ProjectForge®-User for information |
Cost2 |
All cost2 values are project specific if a project was assigned to this structure element or any ancestor structure element. The black list defines cost 2 entries which should be excluded of the assigned project. If no project is assigned, cost 2 value are configurable by using a white list. |
Protect time sheets until |
If set, only time sheets with start dates after the given date may-be inserted and updated. Members of the financial staff are able to insert, update and delete older time-sheets of other users (not own time sheets). |
Protection of privacy |
If checked the time sheets of this structure element and any descendent structure elements are invisible for other users (except the members of the financial staff). |
5.1. Consumption
Consumptions are displayed as part of the structure tree as well as during every booking process of time sheets. The consumption of already used hours of a structure element including all structure sub elements is displayed as a tool tip.
5.1.1. Consumption bars for open structure elements
Color | Meaning | Tool tip |
---|---|---|
No budget given |
Total consumption in man-days. |
|
Consumption 0-80% |
Total consumption in man-days and percent, green bar. |
|
Consumption 80%-90% |
Total consumption in man-days and percent. |
|
Consumption 90%-100% |
Total consumption in man-days and percent. |
|
Consumption over 100% |
Total consumption in man-days and percent. |
5.1.2. Consumption bars for finished structure elements
Color |
Meaning |
Tool tip |
No budget given |
Total consumption in man-days. |
|
Consumption 0-100% |
Total consumption in man-days and percent. |
|
Consumption 100%-110% |
Total consumption in man-days and percent. |
|
Consumption über 110% |
Total consumption in man-days and percent. |
5.1.3. Suppressing the status of consumption bars
Enter 0 as maximum hours of a structure element for suppressing the status (color and percentage) of a consumption bar. This is use-ful for not demotivating a team or if not all orders with budgets are assigned to a structure element.
5.2. Booking of time sheets
Time sheets must be assigned to a structure element. For improving the
quality of time sheets different rules may be definied in
ProjectForge®.
Following rules are implemented, if the user doesn’t hit the rules he
won’t be able to book his working time on such structure elements.
-
The user needs the access to this structure element or any ancestor structure element including the right of booking time sheets.
-
The structure element or any ancestor structure element may not have a time-protection setting. The users will not be able to modify or add time sheets for a day before time-protection (date field).
-
The structure element or any ancestor structure element is closed or deleted.
-
The booking status of a structure element or any ancestor structure element is 'completely closed'.
-
If the structure element is not a structure leaf element (has descendents) and the booking status is configured as 'only leaf nodes'.
-
If any descendent structure element has an assigned order. This rule is important because otherwise ProjectForge® won’t be able to calculate the consumption of budgets defined by orders.
If a structure element is closed for booking of time sheets the user may modify fields not affecting financial parameters (such as description but not times, duration, cost settings etc.) The user may therefore correct typos etc. in time sheets.
6. Order book
Offers and orders may be managed by ProjectForge®. The may-be assigned to project managers having access to their orders and offers. Administrative staff members may have access to all orders if they have the right to do (see user administration of ProjectForge®).
6.1. E-mail notification
All modifications of orders, if not done by the project manager itself will be sent by e-mail including a quick link to the order, see figure 20, a notication is suppressed if the check-box is disabled..
Figure 20: |
Order book with e-mail notification |
7. Scripting in ProjectForge®
You may edit, store and execute scripts in ProjectForge for generating
Excel files out of the database of ProjectForge® as well as charts
etc. It’s also possible to upload Excel master file to scripts for
modifiing existing Excel files.
A script editor is built-in in ProjectForge®.
7.1. Examples
You may use some predefined scripts for getting an idea how powerful the scripting in ProjectForge® is.
7.1.1. Example: Easy Excel-file generation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Simple otlin script
val users = userDao.getList()
val workbook = ExcelUtils.prepareWorkbook("Userlist.xlsx")
val sheet = workbook.createOrGetSheet("Users")
sheet.registerColumns(
"Username|20", // Title Username is also property name, length = 20
"Full name|fullname|30", // Title differs from property name
"Email|30",
"Id|10|:integer",
"Description|50",
)
sheet.createRow().fillHeadRow()
users.forEach { user ->
val row = sheet.createRow()
ExcelUtils.autoFill(row, user)
}
sheet.setAutoFilter() // optional Excel auto filter
workbook
7.1.2. Example: Usage of ProjectForge® filters
1
2
3
4
5
6
val filter = TimesheetFilter()
filter.startTime = PFDateTime.withDate(2022, Month.JANUARY, 1).utilDate
filter.stopTime = PFDateTime.withDate(2022, Month.JUNE, 30).utilDate
val list = timesheetDao.getList(filter)
"Number of found time sheets: ${list?.size}"
PFDateTime and PFDay uses automatically the time zone of the current logged-in user as default.
7.2. Access rights (DAOs)
You may access all database entries by using the DAOs (DataAccessObjects) of ProjectForge®. The DAOs ensures that only such entities are returned for those the user has access to. All entities without the user’s access are removed by the DAOs of the result lists.
7.3. Creation of diagrams and charts
You may create charts using (www.jfree.org).
Figure 21: |
Example of a script producing a chart |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import org.jfree.chart.*
import org.jfree.chart.plot.*
import org.jfree.data.general.*
import org.jfree.util.*
import org.projectforge.excel.*
DefaultPieDataset dataset = new DefaultPieDataset()
dataset.setValue("Linux", 15)
dataset.setValue("Mac", 8)
dataset.setValue("Windows", 70)
dataset.setValue("Others", 7)
JFreeChart chart = ChartFactory.createPieChart3D("Users on www.heise.de", dataset, true, true, false)
PiePlot3D plot = (PiePlot3D) chart.getPlot()
ExportJFreeChart export = new ExportJFreeChart(chart, 800, 600)
return export
7.4. Creation of zip archives containing multiple files
You may create zip files containing multiple files (Excel sheets and diagrams).
1
2
3
4
5
6
7
import ...
ExportZipArchive zip = new ExportZipArchive("my-first-archive") // File name will be: my-first-archive.zip
ExportWorkbook workbook = new ExportWorkbook(...)
zip.add("sheet.xls", workbook)
ExportJFreeChart chart = new ExportJFreeChart(...)
zip.add("chart.jpg", chart)
return zip
7.5. Nested and indexed properties
You may use bean properties using the common used notation:
1
2
sheet.propertyNames = ["user.username", "description", "startTime", "stopTime", +
"kost2.kost2Art.fakturiert"]
as well as indexed properties (such as the property username of the
user).
Nested and indexed properties are supported as
well: users[3].name
or result.userList[0].
7.6. Import of Excel files
Figure 22 shows an example file.
Figure 22: |
Example file for an Excel import |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.text.*;
import org.projectforge.excel.*
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.UK);
xls = reportScriptingStorage.getFile("import-example.xls") // Was uploaded with this name.
ExportWorkbook workbook = new ExportWorkbook(xls);// Use script.file instead of xls in script list.
ExportSheet sheet = workbook.getSheet("Sheet-1"); // Gets sheet with the given title.
rows = sheet.rows; // Get all rows.
result = "";
total = 0.0;
for (int i = 1; i < sheet.rows.size; i++) {
row = sheet.getRow(i);
no = row.getCell(0).getNumericCellValue();
name = row.getCell(1).getStringCellValue();
amount = row.getCell(2).getNumericCellValue();
total += amount;
result += (int)no + ". The amount of " + name + " is: " + nf.format(amount) + "\n";
}
result += "The total amount is: " + nf.format(total);
return result;
The output is:
1
2
3
4
5
The amount of Susan is: £50.23
The amount of Hugo is: £17.00
The amount of Lisa is: £15.00
The amount of Mona is: £10.00
The total amount is: £92.23
8. Financial administration with ProjectForge®
8.1. Invoices
ProjectForge® supportes the management of invoices (inbound and outbound, creditors and debitors):
-
Inovices may contain an unlimited number of positions.
-
If the cost-module is configured you may assign the amount to one or an unlimited number of cost units (as amount or as percent).
8.1.1. Assignment of cost units
It’s recommended to try this feature for a better understanding.
You may assign positions of invoices to cost1 and cost2 units. An
autocomplete functionality helps you to distribute the amounts to cost
units very fast. You may enter numbers of cost units as well as text (e.
g. text fields of a cost unit such as description. customer, type
etc.).
An unlimitited number of assignments are supported. After adding new
assignments ProjectForge® prefills the amount of the invoice which
wasn’t assigned yet. The amount may be given as amount or as percent
value.
For better tracebility you may not delete positions (after stored in the
database). If an entry should be removed, enter '0' as amount.
8.1.2. Clone functionality for invoices (inbound and outbound)
You may clone existing invoices for a faster process of inserting new invoices:
-
The date will be replaced by 'today'.
-
The positions as well as any existing assignment to cost units will be copied.
8.2. Liquidity planning / forecast
Based on invoices and additional liquidity entries (others than invoices) ProjectForge® gives you the opportunity to manage your cash flow very easy including a forecast of your cash flow.
8.2.1. Calculation of expected dates of payments
ProjectForge® uses due dates for forecasting the cash flow and account balance. For invoices ProjectForge® calculates the expected dates of payment based on already paid invoices in the last 12 month of the same:
-
Project: Do paid invoices already exist for the same project?
-
Customer number: Do paid invoices already exist for the customer (given by the cost number)?
-
Customer text: Do paid invoices already exist for the customer (full text)?
-
Customer short text: Do paid invoices already exist for the customer (the beginning of the customer text will be used)?
If any paid invoice was found (starting with project) a mean time of payment of the paid invoices is used for calculating the expected date of payment.
Figure 23: |
Liquidity with forecast of the cash flow |
Please refer the AdministrationGuide for enabling the liquidity plugin of ProjectForge®.
8.3. Datev-Import (German)
Über diese Funktion werden die Konten (Kontenplan) und die Buchungssätze eingelesen. Diese Daten werden vom Steuerbüro in Form eines Excel-Exports geliefert.
8.3.1. Grundsätzliches zum ProjectForge®-Excel-Import
-
ProjectForge® liest Tabellenblätter mit bestimmten Namen bzw. Namensmustern ein. Tabellenblätter, deren Namen ProjectForge® im Import nicht unterstützt, werden ignoriert.
-
ProjectForge® erkennt die Werte in den Spalten anhand des Namens der Kopfspalte
-
Die Reihenfolge der Spalten ist variabel.
-
Es können zusätzliche Spalten enthalten sein. Diese Spalten werden ignoriert.
-
Die Importdaten werden im Import-Storage innerhalb der Benutzersitzung gespeichert. Der Anwender kann beliebige Schritte innerhalb seiner Benutzersitzung durchführen, ohne dass die Importdaten verloren gehen. Auch die Reihenfolge beim Import von mehreren Tabellenblättern (Verproben, Prüfen, Selektieren, Speichern etc.) ist beliebig. ProjectForge® stellt sicher, dass nur fehlerfreie und verprobte Datensätze importiert werden können.
-
Die Übernahme von Daten kann auch schrittweise erfolgen (s. Beispiel unten: Schritt 3 bis 5 können beliebig oft wiederholt werden, solange noch nicht alle Daten auch in ProjectForge® nicht übernommen wurden.)
Im folgenden wird anhand des Kontenplans der Import und die notwendigen Prüfschritte erläutert.
Schritt 1: Auswahl der zu importierenden Excel-Datei
-
Figure 24 zeigt den ersten Schritt: Es wird die zu importierende Excel-Datei über den Browserknopf "Datei auswählen" im lokalen Dateisystem selektiert. Anschließend wird die gewünschte Importfunktion (z. B. "Import Kontenplan") gewählt.
Figure 24: |
Datev-Import, Schritt 1: Auswahl der Importdatei |
Schritt 2: Daten werden eingelesen
-
Figure 25 zeigt den zweiten Schritt: Die Daten wurden erfolgreich eingelesen und die importierten Tabellenblätter (Sheets) untereinander angezeigt (standardmäßig sind alle Blätter zugeklappt). Im Fehlerfalle wird der Fehler mit Tabellenblatt, Zeilennummer und Spaltennummer angezeigt (z. B. wenn ein nicht passendes Zahlenformat in einer Zelle erkannt wurde.) Fehlerhafte Datensätze können bereits eingesehen werden (durch Aufklappen des Importbereichs).
Figure 25: |
Datev-Import, Schritt 2: Einlesen der Datei |
Schritt 3: Verproben
-
Figure 26 zeigt den zweiten Schritt: Die Daten wurden erfolgreich eingelesen und die importierten Tabellenblätter (Sheets) untereinander angezeigt (standardmäßig sind alle Blätter zugeklappt). Nun sollte die Funktion "Verproben" für das gewünschte Tabellenblatt / die gewünschten Tabellenblätter gewählt werden.
Beim Verproben gleicht ProjectForge® die importierten Datensätze mit evtl. bereits vorhandenen Datensätzen ab. Nach dem Verproben werden auch neue und modifizierte Datensätze angezeigt.
Figure 26: |
Datev-Import, Schritt 3: Verproben |
Schritt 3: VerprobenPrüfen, selektieren und Übernahme
-
Figure 27 zeigt den vierten Schritt: Nach der Verprobung können nun die zu speichernden Datensätze einer Sichtprüfung unterzogen werden. Bei modifizierten Einträgen wird über einen Tool tip der ursprüngliche Wert angezeigt.
Nach der Prüfung können die Datensätze selektiert werden, die in ProjectForge® übernommen werden sollen. Mit der Funktion "Select all" können auch alle angezeigten Datensätze markiert werden. Anschließend kann über "Commit" eine Übernahme bestätigt und angestoßen werden.
Figure 27:__ |
Datev-Import, Schritt 4: Prüfen, Selektion und Übernahme |
Schritt 5: Import abgeschlossen
-
Figure 28 zeigt den fünften Schritt: Nach dem Import wird angezeigt, wieviel Datensätze übernommen wurden. Ein abschließendes "Verproben" sollte aufgerufen werden. Wenn alle Änderungen erfolgreich übernommen wurden und alle Datensätze selektiert worden waren, so müsste abschließend für das Tabellenblatt "nichts zu tun" angezeigt werden. Wurde nur ein Teilsatz der Daten selektiert, so werden die übrigen noch zur Auswahl angeboten.
Figure 28: |
Datev-Import, Schritt 5: Abschluss |
8.3.2. Import der Buchungskonten (Kontenplan)
Für den Import der Buchungskonten wird im zu importierenden Exceldokument ein Tabellenreiter mit dem Namen "Kontenplan" erwartet. Dieses Tabellenblatt wird für den Import verwendet. Alle anderen Tabellenblätter werden ignoriert.
Format
Folgendes Format wird erwartet (see figure 29).
Figure 29: |
Excelformat für Datev-Import des Kontenplans |
In Zeile 2 wird die Kopfspalte mit den Namen "Konto" und "Bezeichnung" erwartet. Vorhandene Konten werden nicht gelöscht, sondern bei Vorhandensein modifiziert.
8.3.3. Import der Buchungssätze (01-12)
Für den Import der Buchungssätze werden im zu importierenden Exceldokument die Tabellenblätter mit dem Namen "01", "02", …, "12" berücksichtigt. Diese Blätter stehen für die zu importierenden Buchungsmonate.
-
Beim Import werden die Buchungssätze unabhängig vom Datum dem Buchungsmonat zugeordnet.
-
Datumsangaben von Buchungssätzen dürfen nicht in der Zukunft bezüglich des Buchungsmonats liegen.
-
Das Kalenderjahr zum Buchungsmonat erkennt ProjectForge® automatisch anhand des Datums der Buchungssätze.
-
Die Spalte "Kostenstelle/-träger" wird als "Kost2" interpretiert. Alternativ kann diese Spalte auch in "Kost2" umbenannt werden.
-
Die Spalte "Alt.-Kst." wird "Kost1" interpretiert. Alternativ kann diese Spalte auch in "Kost1" umbenannt werden.
-
Die Spalten "SH" tauchen Datev-bedingt doppelt auf. Die Reihenfolge darf nicht vertauscht werden, da die erste Spalte "SH" für die Übernahme "Soll/Haben" verwendet wird.
-
Die Spalte Bemerkung ist optional. Hier können Zusatzinformationen, Hinweise oder Marker zu einzelnen Zeilen angegeben werden.
Format
Folgendes Format wird erwartet (see figure 30).
Figure 30: |
Excelformat für Datev-Import der Buchungssätze |
In Zeile 2 wird die Kopfspalte mit den Namen "Konto" und "Bezeichnung" erwartet. Vorhandene Konten werden nicht gelöscht, sondern bei Vorhandensein modifiziert.
8.4. Other imports
8.4.1. Salaries of employees
The following Excel format is assumed:
-
A monthly sheet has the title of format 'yyyy-mm', e. g. "2009-05".
-
The columns are:
-
Cost1 unit of the employee, e. g. '3.050.00.00'
-
Employee: Last name, surname
-
Gross salary including taxes and insurance, e. g. '1,846.77'
-
bonus, royalty, overtime premium etc. as decimal value
-
Special payment as decimal value
-
Car as decimal value
-
Total will be ignored
-
Comment as text field
-
The following script generates the database SQL-Statement for importing the salaries:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import org.projectforge.core.*
import org.projectforge.excel.*
import java.text.*
year = 2009; month = 4;
if (month < 10) monthString = "0" + month
else monthString = "" + month
NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMANY);
nf.setMaximumFractionDigits(2);
nf.setMinimumFractionDigits(2);
xls = reportScriptingStorage.getFile("2009-Gehaltslisten.xls") // Was uploaded with this name.
ExportWorkbook workbook = new ExportWorkbook(xls); // Uses the uploaded Excel file.
ExportSheet sheet = workbook.getSheet(year + "-" + monthString); // Gets the sheet.
rows = sheet.rows; // get all rows
String result = "";
for (int i = 4; i < sheet.rows.size; i++) {
row = sheet.getRow(i);
cost1String = row.getCell(0).getStringCellValue();
employeeName = row.getCell(1).getStringCellValue();
gross = row.getCell(2).getNumericCellValue();
bonus = row.getCell(3).getNumericCellValue();
special = row.getCell(4).getNumericCellValue();
car = row.getCell(5).getNumericCellValue();
comment = row.getCell(7).getStringCellValue();
total = new BigDecimal(gross + bonus + special + car).setScale(2, java.math.RoundingMode.HALF_UP);
if (employeeName != null)
employee = employeeDao.getByName(employeeName);
if (kost1String == null)
break;
kost1 = kost1Dao.getKost1(kost1String);
if (kost1 == null) {
result += "\n-- **********" + kost1String;
} else if (kost1.getDescription().equals(employeeName) == false) {
result += "\n-- **********" + kost1.getDescription() + " != " + employeeName;
} else if (employee == null) {
result += "\n-- ********** Employee '" + employeeName + "' not found.";
} else {
text = "Excel-Import Kai";
if (tantieme_zv > 0) text += "; bonus/royalty/overtime: " + nf.format(bonus);
if (special > 0) text += "; Special: " + nf.format(special);
if (car > 0) text += "; car: " + nf.format(car);
if (comment != null && comment.trim().size() > 0) text += "; " + comment;
result += "\ninsert into t_fibu_employee_salary (pk,created,last_update,deleted,gross,month,type,year,comment,employee_id) values (nextval('hibernate_sequence'),now(), now(),false," + total + ", " + (month - 1)+ ", 'SALARY', " + year + ",'" + text + "'," + employee.id + ");";
}
}
return result;
8.5. Time sheets
8.5.1. Protection
You may protect time sheets by date for structure elements (including
all descendent structure elements). This protection ensures that no
employee is able to modifiy time sheets with dates before the date where
the protection ends.
This is useful if the time sheets are invoiced or taken over by other
accounting systems. Figure 31 shows a structure element with a
protection of time sheets until 30/06/2013.
Time sheets with dates before the date of protection may only be changed
by members of the financial administration staff (regarding times and
cost assignements).
Figure 31: |
Time sheet protection for structure elements (incl. structure sub elements) |
8.5.2. Cost units
-
You may assign projects and/or cost2 units to a structure element.
-
If a project is assigned, all existing cost2 units of this projects are automatically assigned to this structure element.
-
If there is now project or cost unit assigned to a structure element, all settings of the parent structure element are used. If no such setting found for the parent element the grand parent element is used and so on.
-
Only such cost units are used which have no status value or the status value 'ACTIVE'.
If there is any cost2 unit associated with a structure element (directly
or derived), an user has to select a suitable cost unit while booking
time sheets.
Figure 32 shows a structure element with the assigned project '5.200.00
- ProjectForge®' and the cost unit '5.200.00.*'.
Figure 32: |
Assigning cost2 units to structure elements. |
Hint
If you are missing cost units you may add them via project edit page (with status 'ACTIVE').
If you want to disable cost units you may change the status of such units to 'INACTIVE' or 'ENDED' or you may remove them by using the black- or white list (see fig. ref label="fig:aufgabeKost2" type="full" />).
8.5.3. Booking of time sheets
For time sheets assigned to structure elements with assigned cost units a selection of a cost unit is required as shown in figure 33.
Figure 33: |
Booking of time sheets to structure elements with given cost units |
8.5.4. Monthly employee reports
A monthly employee report for users with all time sheets ordered by cost units, structure element, user and weeks are also available as PDF for download. These reports may me used for e. g. signing monthly reports of employees by their managers.
8.5.5. JIRA support
JIRA issues are supported if configured. If JIRA issues are contained in e. g. time sheets or description of structure elements then the will be displayed with links to the configured JIRA system.
8.6. Cost unit accounting
8.6.1. Fraction of working time
You may configure a fraction for single cost units or cost unit types (default is 1). Example: if the travelling time should be counted only as half regarding the employees working time, you may configure the fraction as 0,5.
8.7. Reporting via Report objectives (in progress)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<ReportObjective title="Customer ACME" id="ACME" suppressOther="true" suppressDuplicates="true">
<kost1-include>3.*</kost1-include>
<kost1-exclude>*.01</kost1-exclude>
<kost1-exclude>*.12</kost1-exclude>
<kost2-include>5.*</kost2-include>
<kost2-exclude>*.02</kost2-exclude>
<kost2-exclude>*.11</kost2-exclude>
<ReportObjective title="Project ACME-WEB-Portal" id="ACME-WEB-Portal">
<kost2-include>5.020.01.*</kost2-include>
</ReportObjective>
<ReportObjective title="Project ACME-Java-Migration" id="ACME-Java-Migration">
<kost2-include>5.020.02.*</kost2-include>
</ReportObjective>
</ReportObjective>
-
If an include list is empty, all records will match for this include list (wildcard).
-
If an include list isn’t empty, at least one entry must match.
-
For multiple include lists a record must match all include lists (logical 'and').
-
If a record matches at least one entry of any exclude list, this record will be excluded.
The method String.matches(regExp)
is used for evaluating the regular
expressions. You may refer the expression syntax of the Java
class java.util.regex.Pattern
for a better understanding. For your
convenience ProjectForge® modifies automatically the configured
expressions before usage: All points ('.') will be escaped and the
wildcard character '' is replaced by '.'. You may suppress the
automatical modification by prepending an apostrophe, e. g. "'^5\.510.*"
will not be modified (only the apostrophe itself is removed before
evaluation).
Examples:
-
"3.*" → "3\..*" (matches all strings beginning with "3.".
-
"*.02" → ".*.02" (matches all strings ending with ".02".
-
"'^5.02.*" → "^5.02.*" (matches all strings starting with "5?02".
(This strategy of replacement is for convenience purposes because '.' means normally any character and '' means a multiple occurence of the character before the asterisk: for example "3.1" will match "3x1111" but not "3.120.08.02".)
Hint
A child ReportObjective may only consist of entries of the parent ReportObjective (only a subset)!
You may access the ReportObjectives directly.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import org.fibu.*
import org.fibu.kost.*
import org.projectforge.excel.*
import org.projectforge.core.*
class JoinedObject {
BuchungssatzDO satz
EmployeeDO employee
}
// Loading the list with all accounting records:
def records = reportStorage.getCurrentReport().getBuchungssaetze()
records = records.findAll{ satz -> (5000..5999).contains(satz.konto.nummer) }
// Loading the list of employees:
def employees = employeeDao.getList().findAll{it.kost1 != null}
def result = new ArrayList()
records.each{bs ->
el = new JoinedObject()
el.satz = bs
el.employee = employees.find{employee -> employee.kost1Id == bs.kost1.id}
result.add(el)
}
// Generation of an Excel workbook:
ExportWorkbook workbook = new ExportWorkbook();
ExportSheet sheet = workbook.addSheet("Ergebnis")
sheet.contentProvider.colWidths = [10, 10, 8, 8, 10, 10, 20, 20]
sheet.addRow().setValues("Date", "Amount", "Account", "Contra account", "Cost 1", "Cost 2", "Name")
sheet.contentProvider.putFormat("satz.datum", "DD.MM.YYYY")
sheet.contentProvider.putFormat("satz.betrag", "#,##0.00$;[Red]-#,##0.00$") // English format
sheet.contentProvider.putFormat("satz.konto.nummer", "0")
sheet.contentProvider.putFormat("satz.gegenKonto.nummer", "0")
sheet.propertyNames = ["satz.datum", "satz.betrag", "satz.konto.nummer", "satz.gegenKonto.nummer",
"satz.kost1.formattedNumber", "satz.kost2.formattedNumber", "employee.user.fullname"]
sheet.addRows(result)
return workbook
9. Data protection
9.1. Passwords
Passwords will be stored SHA-encrypted in the database. Directly after usage of passwords (such as in the login screen) all password variables will be deleted. Passwords are not part of any log file entry.
9.2. History of changes
All modifications of entities (create, update, delete) are stored with time stamp, user who cause the modification and the modified fields with the old and new value. The history of changes is displayed at the edit page of an entity. There are single special fields which are not part of this history mechanism.
9.3. Logging
Access violations and actions of users (such as modification of entities) as well as any error message are stored in log files. The log file is important for analyzing error etc.
9.4. Phone call - numbers
Every phone call will be logged. A log file entry contains:
-
User causes the phone call
-
Source phone number
-
Destination phone number without the last 3 digits, eg 012345xxx.
10. Glossary
The developers of ProjectForge® were using the German language until several years ago for some financial terms. Nowadays English is the main language of the development (for Java classes, documentation etc.). Here you may find translation and description of common used terms.
German | English | Description |
---|---|---|
Aufgabe |
task |
Since mid of 2013 the term task was replaced by 'structure elements' because such elements may represent not only tasks, they represent customers, projects, releases, tasks etc. |
Auftrag |
order |
|
Beleg |
receipt |
|
Betrag |
ammount |
|
Brutto |
gross (amount) |
|
Buchungssatz |
accounting records |
Accounting records are entities which
are imported by external financial systems (e. g. DATEV in Germany). The
recommended workflow is to organize invoices, salaries of the employees
etc. with ProjectForge® and then to import the data in the external
financial system. The re-imported accounting records should match the
data in ProjectForge. |
BWA |
business assessment |
Term used inside the financial module of ProjectForge®. |
DATEV |
Software common used in Germany for financial administration. ProjectForge® offers import and export interfaces. |
|
Datum |
date |
|
Eingangsrechnung |
invoice |
Used for incoming invoices (creditors). |
fakturiert |
invoiced |
|
Fibu |
financial administration |
Fibu is the abbreviation of the German term 'Finanzbuchhaltung'. |
Gegenkonto |
contra account |
Term used inside the financial module of ProjectForge®. |
Kontenplan |
account structure |
Term used inside the financial module of ProjectForge®. |
Konto |
account |
Term used inside the financial module of ProjectForge®. |
Kost |
cost |
Term used inside the financial module of ProjectForge®. Kost1/Kost2 → cost1/cost2 is the short form of 'cost unit'. |
Kostenträger |
cost unit |
Term used inside the financial module of ProjectForge®. |
Kostenträgerart |
type of cost unit |
Term used inside the financial module of ProjectForge®. Examples for types of cost units are: 'Travelling', 'Acquisition', 'Meetings' etc. Types are customizable and used for specifiing different types of costs in projects and/or company wide. |
Kostenzuweisung |
cost assignment |
Term used inside the financial module of ProjectForge®. Costs, such as employee salaries, position of invoices (incoming and outgoing) etc. are assigned to cost units. |
Kunde |
customer |
|
Menge |
amount |
|
Netto |
net (amount) |
|
Projekt |
project |
|
Rechnung |
invoice |
Used for outgoing invoices (debitors). |