feat(CPuls): Enhance CPuls entity with new fields, tooltips, and options; add localization for German and English
- Added new fields to CPuls entity including status, syncStatus, kiAnalyse, and others. - Implemented localization for CPuls in German (de_DE) and English (en_US). - Introduced new API actions for team activation and completion of CPuls. - Created hooks to update team statistics and manage document counts. - Added new entity definitions and metadata for CPulsTeamZuordnung and Team. - Implemented validation logic in formulas to prevent completion of unclean Puls. - Updated layouts for detail and list views of CPuls. - Enhanced user entity with absence tracking fields. - Added scopes for CPuls and CPulsTeamZuordnung.
This commit is contained in:
14
custom/Espo/Custom/Resources/metadata/app/api.json
Normal file
14
custom/Espo/Custom/Resources/metadata/app/api.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"routes": [
|
||||
{
|
||||
"route": "/CPuls/:id/aktiviere-teams",
|
||||
"method": "put",
|
||||
"actionClassName": "Espo\\Custom\\Api\\CPuls\\AktiviereTeams"
|
||||
},
|
||||
{
|
||||
"route": "/CPuls/:id/abschliessen-fuer-team",
|
||||
"method": "post",
|
||||
"actionClassName": "Espo\\Custom\\Api\\CPuls\\AbschliessenFuerTeam"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,37 +1,18 @@
|
||||
{
|
||||
"controller": "controllers/record",
|
||||
"boolFilterList": [
|
||||
"onlyMy"
|
||||
],
|
||||
"sidePanels": {
|
||||
"detail": [
|
||||
{
|
||||
"name": "activities",
|
||||
"reference": "activities"
|
||||
},
|
||||
{
|
||||
"name": "history",
|
||||
"reference": "history"
|
||||
},
|
||||
{
|
||||
"name": "tasks",
|
||||
"reference": "tasks"
|
||||
}
|
||||
]
|
||||
"controller": "controllers/record",
|
||||
"iconClass": "fas fa-heartbeat",
|
||||
"color": "#e74c3c",
|
||||
"filterList": [
|
||||
"meineOffenen",
|
||||
{
|
||||
"name": "bereit"
|
||||
},
|
||||
"bottomPanels": {
|
||||
"detail": [
|
||||
{
|
||||
"name": "activities",
|
||||
"reference": "activities",
|
||||
"disabled": true
|
||||
},
|
||||
{
|
||||
"name": "history",
|
||||
"reference": "history",
|
||||
"disabled": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"iconClass": "fas fa-heart-pulse"
|
||||
}
|
||||
{
|
||||
"name": "inReview"
|
||||
}
|
||||
],
|
||||
"boolFilterList": [
|
||||
"onlyMy"
|
||||
],
|
||||
"defaultFilterPreset": "meineOffenen"
|
||||
}
|
||||
|
||||
@@ -105,6 +105,11 @@
|
||||
"default": "pending_sync",
|
||||
"tooltip": true,
|
||||
"isCustom": true
|
||||
},
|
||||
"puls": {
|
||||
"type": "link",
|
||||
"entity": "CPuls",
|
||||
"isCustom": true
|
||||
}
|
||||
},
|
||||
"links": {
|
||||
@@ -138,6 +143,12 @@
|
||||
"skipOrmDefs": true,
|
||||
"utility": true
|
||||
},
|
||||
"puls": {
|
||||
"type": "belongsTo",
|
||||
"entity": "CPuls",
|
||||
"foreign": "dokumente",
|
||||
"isCustom": true
|
||||
},
|
||||
"contactsvmhdokumente": {
|
||||
"type": "hasMany",
|
||||
"relationName": "cDokumenteContact",
|
||||
|
||||
@@ -3,10 +3,97 @@
|
||||
"name": {
|
||||
"type": "varchar",
|
||||
"required": true,
|
||||
"pattern": "$noBadCharacters"
|
||||
"maxLength": 255,
|
||||
"trim": true,
|
||||
"isCustom": true
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
"status": {
|
||||
"type": "enum",
|
||||
"options": [
|
||||
"Neu",
|
||||
"In Verarbeitung",
|
||||
"Bereit",
|
||||
"In Review",
|
||||
"Teilweise abgeschlossen",
|
||||
"Abgeschlossen"
|
||||
],
|
||||
"default": "Neu",
|
||||
"required": true,
|
||||
"isCustom": true,
|
||||
"style": {
|
||||
"Neu": "default",
|
||||
"In Verarbeitung": "primary",
|
||||
"Bereit": "success",
|
||||
"In Review": "warning",
|
||||
"Teilweise abgeschlossen": "info",
|
||||
"Abgeschlossen": "success"
|
||||
}
|
||||
},
|
||||
"syncStatus": {
|
||||
"type": "enum",
|
||||
"options": ["clean", "unclean"],
|
||||
"default": "unclean",
|
||||
"required": true,
|
||||
"isCustom": true,
|
||||
"tooltip": true
|
||||
},
|
||||
"kiAnalyse": {
|
||||
"type": "text",
|
||||
"isCustom": true,
|
||||
"tooltip": true
|
||||
},
|
||||
"zusammenfassung": {
|
||||
"type": "varchar",
|
||||
"maxLength": 500,
|
||||
"isCustom": true,
|
||||
"tooltip": true
|
||||
},
|
||||
"anzahlDokumente": {
|
||||
"type": "int",
|
||||
"readOnly": true,
|
||||
"notStorable": false,
|
||||
"isCustom": true
|
||||
},
|
||||
"anzahlTeamsAktiv": {
|
||||
"type": "int",
|
||||
"readOnly": true,
|
||||
"notStorable": false,
|
||||
"isCustom": true
|
||||
},
|
||||
"anzahlTeamsAbgeschlossen": {
|
||||
"type": "int",
|
||||
"readOnly": true,
|
||||
"notStorable": false,
|
||||
"isCustom": true
|
||||
},
|
||||
"finalisiert": {
|
||||
"type": "bool",
|
||||
"default": false,
|
||||
"readOnly": true,
|
||||
"isCustom": true,
|
||||
"tooltip": true
|
||||
},
|
||||
"finalisierungsGrund": {
|
||||
"type": "enum",
|
||||
"options": [
|
||||
"Erstes Team",
|
||||
"Manuell",
|
||||
"Automatisch"
|
||||
],
|
||||
"readOnly": true,
|
||||
"isCustom": true,
|
||||
"tooltip": true
|
||||
},
|
||||
"finalisiertAm": {
|
||||
"type": "datetime",
|
||||
"readOnly": true,
|
||||
"isCustom": true
|
||||
},
|
||||
"finalisiertVon": {
|
||||
"type": "link",
|
||||
"entity": "User",
|
||||
"readOnly": true,
|
||||
"isCustom": true
|
||||
},
|
||||
"createdAt": {
|
||||
"type": "datetime",
|
||||
@@ -18,25 +105,43 @@
|
||||
},
|
||||
"createdBy": {
|
||||
"type": "link",
|
||||
"readOnly": true,
|
||||
"view": "views/fields/user"
|
||||
"entity": "User",
|
||||
"readOnly": true
|
||||
},
|
||||
"modifiedBy": {
|
||||
"type": "link",
|
||||
"readOnly": true,
|
||||
"view": "views/fields/user"
|
||||
"entity": "User",
|
||||
"readOnly": true
|
||||
},
|
||||
"assignedUser": {
|
||||
"type": "link",
|
||||
"required": false,
|
||||
"view": "views/fields/assigned-user"
|
||||
"entity": "User",
|
||||
"isCustom": true
|
||||
},
|
||||
"teams": {
|
||||
"type": "linkMultiple",
|
||||
"view": "views/fields/teams"
|
||||
"isCustom": true
|
||||
}
|
||||
},
|
||||
"links": {
|
||||
"parent": {
|
||||
"type": "belongsToParent",
|
||||
"entityList": [
|
||||
"CVmhRumungsklage",
|
||||
"CMietinkasso",
|
||||
"CKuendigung"
|
||||
]
|
||||
},
|
||||
"dokumente": {
|
||||
"type": "hasMany",
|
||||
"entity": "CDokumente",
|
||||
"foreign": "puls"
|
||||
},
|
||||
"teamZuordnungen": {
|
||||
"type": "hasMany",
|
||||
"entity": "CPulsTeamZuordnung",
|
||||
"foreign": "puls"
|
||||
},
|
||||
"createdBy": {
|
||||
"type": "belongsTo",
|
||||
"entity": "User"
|
||||
@@ -49,62 +154,37 @@
|
||||
"type": "belongsTo",
|
||||
"entity": "User"
|
||||
},
|
||||
"finalisiertVon": {
|
||||
"type": "belongsTo",
|
||||
"entity": "User"
|
||||
},
|
||||
"teams": {
|
||||
"type": "hasMany",
|
||||
"entity": "Team",
|
||||
"relationName": "entityTeam",
|
||||
"layoutRelationshipsDisabled": true
|
||||
},
|
||||
"meetings": {
|
||||
"type": "hasMany",
|
||||
"entity": "Meeting",
|
||||
"foreign": "parent"
|
||||
},
|
||||
"calls": {
|
||||
"type": "hasMany",
|
||||
"entity": "Call",
|
||||
"foreign": "parent"
|
||||
},
|
||||
"tasks": {
|
||||
"type": "hasChildren",
|
||||
"entity": "Task",
|
||||
"foreign": "parent"
|
||||
},
|
||||
"emails": {
|
||||
"type": "hasChildren",
|
||||
"entity": "Email",
|
||||
"foreign": "parent",
|
||||
"relationName": "EntityTeam",
|
||||
"layoutRelationshipsDisabled": true
|
||||
}
|
||||
},
|
||||
"collection": {
|
||||
"orderBy": "createdAt",
|
||||
"order": "desc"
|
||||
"order": "desc",
|
||||
"textFilterFields": ["name", "zusammenfassung"]
|
||||
},
|
||||
"indexes": {
|
||||
"name": {
|
||||
"columns": [
|
||||
"name",
|
||||
"deleted"
|
||||
]
|
||||
"parent": {
|
||||
"columns": ["parentType", "parentId"]
|
||||
},
|
||||
"assignedUser": {
|
||||
"columns": [
|
||||
"assignedUserId",
|
||||
"deleted"
|
||||
]
|
||||
"status": {
|
||||
"columns": ["status"]
|
||||
},
|
||||
"syncStatus": {
|
||||
"columns": ["syncStatus"]
|
||||
},
|
||||
"finalisiert": {
|
||||
"columns": ["finalisiert"]
|
||||
},
|
||||
"createdAt": {
|
||||
"columns": [
|
||||
"createdAt"
|
||||
]
|
||||
},
|
||||
"createdAtId": {
|
||||
"unique": true,
|
||||
"columns": [
|
||||
"createdAt",
|
||||
"id"
|
||||
]
|
||||
"columns": ["createdAt"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": {
|
||||
"type": "varchar",
|
||||
"notStorable": true,
|
||||
"select": {
|
||||
"select": "CONCAT:(team.name, ' - ', puls.name)"
|
||||
},
|
||||
"orderBy": {
|
||||
"order": [
|
||||
["team.name", "{direction}"]
|
||||
]
|
||||
}
|
||||
},
|
||||
"puls": {
|
||||
"type": "link",
|
||||
"entity": "CPuls",
|
||||
"required": true,
|
||||
"isCustom": true
|
||||
},
|
||||
"team": {
|
||||
"type": "link",
|
||||
"entity": "Team",
|
||||
"required": true,
|
||||
"isCustom": true
|
||||
},
|
||||
"aktiv": {
|
||||
"type": "bool",
|
||||
"default": true,
|
||||
"isCustom": true,
|
||||
"tooltip": true
|
||||
},
|
||||
"abgeschlossen": {
|
||||
"type": "bool",
|
||||
"default": false,
|
||||
"isCustom": true
|
||||
},
|
||||
"abgeschlossenAm": {
|
||||
"type": "datetime",
|
||||
"readOnly": true,
|
||||
"isCustom": true
|
||||
},
|
||||
"abgeschlossenVon": {
|
||||
"type": "link",
|
||||
"entity": "User",
|
||||
"readOnly": true,
|
||||
"isCustom": true
|
||||
},
|
||||
"prioritaet": {
|
||||
"type": "enum",
|
||||
"options": ["Niedrig", "Normal", "Hoch"],
|
||||
"default": "Normal",
|
||||
"isCustom": true,
|
||||
"style": {
|
||||
"Niedrig": "default",
|
||||
"Normal": "primary",
|
||||
"Hoch": "danger"
|
||||
}
|
||||
},
|
||||
"createdAt": {
|
||||
"type": "datetime",
|
||||
"readOnly": true
|
||||
},
|
||||
"modifiedAt": {
|
||||
"type": "datetime",
|
||||
"readOnly": true
|
||||
}
|
||||
},
|
||||
"links": {
|
||||
"puls": {
|
||||
"type": "belongsTo",
|
||||
"entity": "CPuls",
|
||||
"foreign": "teamZuordnungen"
|
||||
},
|
||||
"team": {
|
||||
"type": "belongsTo",
|
||||
"entity": "Team"
|
||||
},
|
||||
"abgeschlossenVon": {
|
||||
"type": "belongsTo",
|
||||
"entity": "User"
|
||||
}
|
||||
},
|
||||
"collection": {
|
||||
"orderBy": "createdAt",
|
||||
"order": "desc"
|
||||
},
|
||||
"indexes": {
|
||||
"pulsTeam": {
|
||||
"columns": ["pulsId", "teamId"],
|
||||
"unique": true
|
||||
},
|
||||
"aktiv": {
|
||||
"columns": ["aktiv"]
|
||||
},
|
||||
"abgeschlossen": {
|
||||
"columns": ["abgeschlossen"]
|
||||
}
|
||||
}
|
||||
}
|
||||
16
custom/Espo/Custom/Resources/metadata/entityDefs/Team.json
Normal file
16
custom/Espo/Custom/Resources/metadata/entityDefs/Team.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"fields": {
|
||||
"teamKategorie": {
|
||||
"type": "enum",
|
||||
"options": [
|
||||
"Anwalt",
|
||||
"Mandatsbetreuung",
|
||||
"Zwangsvollstreckung",
|
||||
"Sonstiges"
|
||||
],
|
||||
"default": "Sonstiges",
|
||||
"isCustom": true,
|
||||
"tooltip": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,23 @@
|
||||
"fields": {
|
||||
"cCallQueues": {
|
||||
"type": "linkOne"
|
||||
},
|
||||
"abwesend": {
|
||||
"type": "bool",
|
||||
"default": false,
|
||||
"isCustom": true,
|
||||
"tooltip": true
|
||||
},
|
||||
"abwesendBis": {
|
||||
"type": "date",
|
||||
"isCustom": true,
|
||||
"tooltip": true
|
||||
},
|
||||
"vertretung": {
|
||||
"type": "link",
|
||||
"entity": "User",
|
||||
"isCustom": true,
|
||||
"tooltip": true
|
||||
}
|
||||
},
|
||||
"links": {
|
||||
@@ -10,6 +27,11 @@
|
||||
"foreign": "user",
|
||||
"entity": "CCallQueues",
|
||||
"isCustom": true
|
||||
},
|
||||
"vertretung": {
|
||||
"type": "belongsTo",
|
||||
"entity": "User",
|
||||
"isCustom": true
|
||||
}
|
||||
}
|
||||
}
|
||||
3
custom/Espo/Custom/Resources/metadata/formula/CPuls.json
Normal file
3
custom/Espo/Custom/Resources/metadata/formula/CPuls.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"beforeSaveApiScript": "// Verhindere Abschluss bei unclean Status\nif (\n (status == 'Abgeschlossen' || entity\\isAttributeChanged('status'))\n && syncStatus == 'unclean'\n) {\n recordService\\throwBadRequest('Puls kann nicht abgeschlossen werden: Neue Dokumente vorhanden (Status: unclean). Bitte warten Sie auf die KI-Analyse.');\n}\n\n// Verhindere Änderungen an finalisiertem Puls\nif (\n finalisiert == true\n && entity\\isAttributeChanged('finalisiert') == false\n && (entity\\isAttributeChanged('status') || entity\\isAttributeChanged('syncStatus'))\n) {\n recordService\\throwBadRequest('Puls ist finalisiert. Neue Dokumente erzeugen automatisch einen neuen Block.');\n}"
|
||||
}
|
||||
@@ -2,22 +2,16 @@
|
||||
"entity": true,
|
||||
"layouts": true,
|
||||
"tab": true,
|
||||
"acl": true,
|
||||
"aclPortal": true,
|
||||
"aclPortalLevelList": [
|
||||
"all",
|
||||
"account",
|
||||
"contact",
|
||||
"own",
|
||||
"no"
|
||||
],
|
||||
"acl": "recordAllTeamOwnNo",
|
||||
"aclPortal": false,
|
||||
"customizable": true,
|
||||
"importable": true,
|
||||
"importable": false,
|
||||
"notifications": true,
|
||||
"stream": true,
|
||||
"disabled": false,
|
||||
"type": "BasePlus",
|
||||
"type": "Base",
|
||||
"module": "Custom",
|
||||
"object": true,
|
||||
"isCustom": true
|
||||
}
|
||||
"isCustom": true,
|
||||
"calendar": false
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"entity": true,
|
||||
"tab": false,
|
||||
"acl": "recordAllTeamNo",
|
||||
"aclPortal": false,
|
||||
"customizable": true,
|
||||
"stream": false,
|
||||
"disabled": false,
|
||||
"type": "Base",
|
||||
"module": "Custom",
|
||||
"object": true,
|
||||
"isCustom": true
|
||||
}
|
||||
Reference in New Issue
Block a user