Skip to content

Commit

Permalink
Merge pull request #236 from micromata/8.0-Release
Browse files Browse the repository at this point in the history
8.0 release
  • Loading branch information
kreinhard authored Dec 23, 2024
2 parents 6b190c3 + abad7b3 commit 4effff1
Show file tree
Hide file tree
Showing 11 changed files with 47 additions and 50 deletions.
20 changes: 0 additions & 20 deletions Migration-ToDo.adoc
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
Aktuell:
- Besucherbuch: englische Übersetzung
- AG-Grid: setColumnStates wird nicht in den UserPrefs gespeichert.
- Wicket: Auftragsbuch: org.apache.wicket.core.request.mapper.StalePageException: A request to page '[Page class = org.projectforge.web.fibu.AuftragEditPage, id = 9, render count = 3]' has been made with stale 'renderCount'. The page will be re-rendered.
- -XX:ReservedCodeCacheSize=100m
- Rechnungen: skonto-Datum wird automatisch auf nonsens gesetzt.
- History: Rechnungsposition -> Auftragsposition taucht nicht in History auf.
- QueryFilter.sortAndLimitMaxRowsWhileSelect: not yet supported
- Gradle-Version-Checker: Read lib.versions.toml und Vergleichen mit fatjar.
- Fehlerhinweis, wenn halber Tag für Urlaubsanfang/ende gewählt wird, es aber kein Arbeitstag ist.
- Scripts
- Download/Upload vcf
- Kalendereinträge und Subscriptions.
- LoginProtection: Increases penalty time for DAV only after 5 tries.
- Stacktraces, wie für Exceptions in TeamEventSubscription kürzen, vermüllen logfiles ohne wirkliche Informationen.

- Pagination of selects: Aktuell wird nicht DB-seitig paginiert, sondern immer die ganze Liste gefetched.
- remove all BaseDO.xxxId (lazy fetch) and replace callee by baseDO?.id
Expand All @@ -35,21 +31,12 @@ History
- ProjektEdit: History enthält keine neuen Kost2DOs/Arten (Einträge sind aber da).
- CronReindexingHourlyJob ohne Effekt.
- Protokoll einsehen: http://localhost:8080/react/logViewer/dynamic/1
- Reindizierung der letzten n einträge nicht migriert (sinnvoll?).
- history-entries bei EmployeeValidityAttrDO nichtssagend.
- HistoryEntry: EmployeeValidityAttrDO.insert muss sinnvoll für Anzeige formatiert werden.
- Cascade aller Entitäten prüfen (z. B. war GroupTaskAccessDO.task auf Merged!!!!) Abgleich mit autoUpdateCollectionEntries (evtl. kann auf autoUpdateCollectionEntries verzichtet werden, zumindest aber Sanity-Check in CandH.)
- PFHistoryMasterDO: Indexe setzen, wenn Einträge wieder gehen.
- XML-Import für Testsystem
- TypeBinding: ProjektDO, Kost1DO, Kost2DO, ...: Add path to list of searchable items
- @WithHistory: AuftragDO, TeamEventDO
- UserRights zu Benutzer hinzufügen testen (Reihenfolge update/save wichtig)
- ICalGeneratorParserTest
- UserRightId: ClassBridge müsste eigentlich in die Felder der benutzenden DOs
- Script-Parameter: intValue ist nun long!?
- StringHelper: splitToLongs/LongObjects OK?
- SetupPage testen
- reindexing settings implementieren. Aktuell wird nur komplett gemass-indexed.
- History of AddressCampaignValueDO's (AddressCampaignValueDao.convertToDisplayHistoryEntries removed)
Expand All @@ -63,10 +50,3 @@ Später

Ganz später
- Kalenderlist ruft x-fach DB: FIND GroupDO resultClass=GroupDO auf.


- Produktion:
# In postgresql.conf (Neustart der Datenbank erforderlich)
lock_timeout = '300s' # 5 minutes timeout for locks.
statement_timeout = '300s' # 5 minutes timeout for SQL-commands.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ plugins {

allprojects {
group = "org.projectforge"
version = "8.0.0-SNAPSHOT"
version = "8.0" // Update version string here (nowhere else)

repositories {
mavenCentral()
Expand Down
35 changes: 16 additions & 19 deletions doc/deployment.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,23 @@ link:index{outfilesuffix}[Top]

== How to deploy a new release?

1. Modify `site/_changelogs` with updated release informations
2. Define new release variable: +
`export PF_NEW_VERSION=7.1.3`
3. Change version number of all `pom.xml` files: +
`find . -name pom.xml | xargs perl -pi -e 's|<version>.*</version><!-- projectforge.version -\->|<version>$ENV{PF_NEW_VERSION}</version><!-- projectforge.version -\->|g'`
4. Check git-modifications: all `pom.xml` files should have the new ProjectForge-Version.
5. `mvn clean install`
6. If all tests are finished successfully and the test of the ProjectForge-Application works for new and existing databases), proceeed:
7. Copy executable jar file from projectforge-application/target to SourceForge and tag this file as default for all platforms
8. Building and pushing docker
a. `cp projectforge-application/target/projectforge-application*.jar .`
1. Modify `site/_changelogs` with updated release information
2. Run `DevelopmentMainForRelease.kt` main to sort all i18n resources and fix source file headers, if any.
3. Define new release variable: +
`./build.gradle.kts: version = '8.0'`
4. `./gradlew clean build`
5. If all tests are finished successfully and the test of the ProjectForge-Application works for new and existing databases), proceeed:
6. Copy executable jar file from `projectforge-application/build/libs/projectforge-application-\*.jar` to SourceForge and tag this file as default for all platforms
7. Building and pushing docker
a. `cp projectforge-application/build/libs/projectforge-application*.jar .`
b. `docker build -t micromata/projectforge:latest .`
c. `docker tag bc0459ed7d01 micromata/projectforge:$PF_NEW_VERSION` (use image id for tagging)
d. `docker push micromata/projectforge:$PF_NEW_VERSION`
e. `docker push micromata/projectforge:latest`
9. Merge the release branch into the master and develop branch (Git Flow: Finish release)
10. Tag master branch with version number
11. Change to develop branch
12. Create new SNAPSHOT-Release by increasing version number of all `pom.xml` files: +
`export PF_NEW_VERSION=7.1.4-SNAPSHOT` +
`find . -name pom.xml | xargs perl -pi -e 's|<version>.*</version><!-- projectforge.version -\->|<version>$ENV{PF_NEW_VERSION}</version><!-- projectforge.version -\->|g'`
13. Commit everything to master and develop branch and push it to Github
14. Upload the saved jar files to Github (Create release from taged version) and SourceForge (e.g. as zip (see previous versions as example)).
8. Merge the release branch into the master and develop branch (Git Flow: Finish release)
9. Tag master branch with version number
10. Change to develop branch
11. Create new SNAPSHOT-Release by increasing version number: +
`./build.gradle.kts: version = '8.0.1-SNAPSHOT'`
12. Commit everything to master and develop branch and push it to Github
13. Upload the saved jar files to Github (Create release from taged version) and SourceForge (e.g. as zip (see previous versions as example)).
5 changes: 4 additions & 1 deletion projectforge-application/src/main/resources/i18nKeys.json
Original file line number Diff line number Diff line change
Expand Up @@ -1737,8 +1737,11 @@
{"i18nKey":"orga.visitorbook.contactPerson","bundleName":"I18nResources","translation":"Contact person","translationDE":"Kontaktperson","usedInClasses":["org.projectforge.business.orga.VisitorbookDO","org.projectforge.rest.orga.VisitorbookPagesRest"],"usedInFiles":[]},
{"i18nKey":"orga.visitorbook.depart","bundleName":"I18nResources","translation":"Depart","translationDE":"Abreise","usedInClasses":["org.projectforge.rest.orga.VisitorbookPagesRest"],"usedInFiles":[]},
{"i18nKey":"orga.visitorbook.firstname","bundleName":"I18nResources","translation":"Firstname","translationDE":"Vorname","usedInClasses":["org.projectforge.business.orga.VisitorbookDO"],"usedInFiles":[]},
{"i18nKey":"orga.visitorbook.lastVisit","bundleName":"I18nResources","translation":"Last visit","translationDE":"Letzer Besuch","usedInClasses":["org.projectforge.rest.orga.VisitorbookPagesRest"],"usedInFiles":[]},
{"i18nKey":"orga.visitorbook.lastVisit.arrived","bundleName":"I18nResources","translation":"Last arrival time","translationDE":"Letze Ankunftszeit","usedInClasses":["org.projectforge.rest.orga.VisitorbookPagesRest"],"usedInFiles":[]},
{"i18nKey":"orga.visitorbook.lastVisit.departed","bundleName":"I18nResources","translation":"Last departure time","translationDE":"Letze Abreisezeit","usedInClasses":["org.projectforge.rest.orga.VisitorbookPagesRest"],"usedInFiles":[]},
{"i18nKey":"orga.visitorbook.lastname","bundleName":"I18nResources","translation":"Lastname","translationDE":"Nachname","usedInClasses":["org.projectforge.business.orga.VisitorbookDO"],"usedInFiles":[]},
{"i18nKey":"orga.visitorbook.number","bundleName":"I18nResources","translation":"Number","translationDE":"Nummer","usedInClasses":[],"usedInFiles":[]},
{"i18nKey":"orga.visitorbook.numberOfVisits","bundleName":"I18nResources","translation":"Number of visits","translationDE":"Anzahl der Besuche","usedInClasses":["org.projectforge.rest.orga.VisitorbookPagesRest"],"usedInFiles":[]},
{"i18nKey":"orga.visitorbook.timeofvisit","bundleName":"I18nResources","translation":"Time of visit","translationDE":"Besuchszeit","usedInClasses":["org.projectforge.rest.orga.VisitorbookEntryPageRest"],"usedInFiles":[]},
{"i18nKey":"orga.visitorbook.timeofvisit.arrive","bundleName":"I18nResources","translation":"Arrivaltime (HH:MM)","translationDE":"Ankunftszeit (HH:MM)","usedInClasses":["org.projectforge.business.orga.VisitorbookEntryDO"],"usedInFiles":[]},
{"i18nKey":"orga.visitorbook.timeofvisit.depart","bundleName":"I18nResources","translation":"Departuretime (HH:MM)","translationDE":"Abreisezeit (HH:MM)","usedInClasses":["org.projectforge.business.orga.VisitorbookEntryDO"],"usedInFiles":[]},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1745,7 +1745,10 @@ orga.visitorbook.contactPerson=Contact person
orga.visitorbook.depart=Depart
orga.visitorbook.firstname=Firstname
orga.visitorbook.lastname=Lastname
orga.visitorbook.number=Number
orga.visitorbook.lastVisit=Last visit
orga.visitorbook.lastVisit.arrived=Last arrival time
orga.visitorbook.lastVisit.departed=Last departure time
orga.visitorbook.numberOfVisits=Number of visits
orga.visitorbook.timeofvisit=Time of visit
orga.visitorbook.timeofvisit.arrive=Arrivaltime (HH:MM)
orga.visitorbook.timeofvisit.depart=Departuretime (HH:MM)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1837,7 +1837,10 @@ orga.visitorbook.contactPerson=Kontaktperson
orga.visitorbook.depart=Abreise
orga.visitorbook.firstname=Vorname
orga.visitorbook.lastname=Nachname
orga.visitorbook.number=Nummer
orga.visitorbook.lastVisit=Letzer Besuch
orga.visitorbook.lastVisit.arrived=Letze Ankunftszeit
orga.visitorbook.lastVisit.departed=Letze Abreisezeit
orga.visitorbook.numberOfVisits=Anzahl der Besuche
orga.visitorbook.timeofvisit=Besuchszeit
orga.visitorbook.timeofvisit.arrive=Ankunftszeit (HH:MM)
orga.visitorbook.timeofvisit.depart=Abreisezeit (HH:MM)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@ class VisitorbookEntryPageRest : AbstractDynamicPageRest() {
@RequestParam("id") idString: String?,
@RequestParam("visitorbookId") visitorbookId: Long?,
): FormLayoutData {
val id = idString?.toLongOrNull()
val id = idString?.toLongOrNull() ?: -1
requiredFields(id, visitorbookId)
val data = if (id!! > 0) {
val data = if (id > 0) {
VisitorbookEntry(visitorbookService.findVisitorbookEntry(id))
} else {
VisitorbookEntry(visitorbookId = visitorbookId).also {
Expand All @@ -79,6 +79,7 @@ class VisitorbookEntryPageRest : AbstractDynamicPageRest() {
val lc = LayoutContext(VisitorbookEntryDO::class.java)
val layout = UILayout("orga.visitorbook.timeofvisit")
layout.add(lc, "dateOfVisit", "arrived", "departed", "comment")
layout.addAction(UIButton.createCancelButton(responseAction = ResponseAction(targetType = TargetType.CLOSE_MODAL)))
if (id < 0) {
// New entry
layout.addAction(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,13 @@ class VisitorbookPagesRest : AbstractDTOPagesRest<VisitorbookDO, Visitorbook, Vi
// Name Vorname Status Personalnummer Kost1 Position Team Eintrittsdatum Austrittsdatum Bemerkung
.add(
lc,
"lastname", "firstname", "company", "visitortype",
"lastDateOfVisit", "latestArrived", "latestDeparted", "numberOfVisits", "contactPersons",
"comment"
"lastname", "firstname", "company", "visitortype"
)
.add("lastDateOfVisit", headerName = "orga.visitorbook.lastVisit")
.add("latestArrived", headerName = "orga.visitorbook.lastVisit.arrived")
.add("latestDeparted", headerName = "orga.visitorbook.lastVisit.departed")
.add("numberOfVisits", headerName = "orga.visitorbook.numberOfVisits")
.add(lc, "contactPersons", "comment")
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ class OrphanedLinkFilter : Filter {
val uri = servletRequest.requestURI ?: ""
if (uri.contains("/wa/login")) { // Old Wicket login page, bookmarked by some users.
redirect(servletResponse, uri, "/")
} else if (uri.contains("/wa/calendar") || uri.contains("/wa/teamCalendar")) { // Old Wicket calendars, bookmarked by some users.
redirect(servletResponse, uri, "/react/calendar")
} else if (uri.contains("/wa/wicket/bookmarkable/org.projectforge.web.vacation.VacationEditPage")) {
// /wa/wicket/bookmarkable/org.projectforge.web.vacation.VacationEditPage?id=26422747
redirect(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ public void init()
addMountPages(DaoConst.USER_PREF, UserPrefListPage.class, UserPrefEditPage.class);

addMountPage("admin", AdminPage.class);
addMountPage("calendar", CalendarPage.class);
addMountPage("oldCalendar", CalendarPage.class); // Backup url for deprecated calendar, will be removed.
addMountPage("configuration", ConfigurationListPage.class);
addMountPage("datevImport", DatevImportPage.class);
addMountPage("error", ErrorPage.class);
Expand All @@ -301,6 +301,6 @@ public void init()
addMountPage("taskTree", TaskTreePage.class);

register("teamEvent", TeamEventListPage.class);
addMountPage("teamCalendar", TeamCalCalendarPage.class);
addMountPage("oldTeamCalendar", TeamCalCalendarPage.class); // Backup url for deprecated calendar, will be removed.
}
}
5 changes: 5 additions & 0 deletions site/_docs/adminguide.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,11 @@ with: `dropdb projectforge` and `dropuser projectforge`
. *Re-use of existing database (use a dump --> 5.5 or 5.6)* +
`psql -q -f projectforge_2008-04-02_02-00.sql -U postgres projectforge 2>&1 > log.txt`

Recommended settings in `postgresql.conf`:
```
statement_timeout = 300000 # 300s
lock_timeout = 300000 # 300s
```
== Configuration

=== Base directory (application's home)
Expand Down

0 comments on commit 4effff1

Please sign in to comment.