Add README, customization snapshot, and snapshot/restore tooling
Provisioning now restores all GUI customizations on reset+reprovision: - create_pod_espocrm.sh: deploy the version-controlled espocrm-custom/ tree (CTag entity, layouts, i18n, clientDefs, custom views, custom CSS) into the pod, then chown www-data and rebuild. Replaces the earlier inline CSS-only step. Adds a live-phase cache rebuild so customizations and the client cacheTimestamp are refreshed on every run. - espocrm-custom/: snapshot of custom/ and client/custom/ (source of truth). - snapshot_espocrm_custom.sh: refresh the snapshot from a running pod. - readme.md: usage, first-time host setup, image-update and reset workflows. - Include the task/instruction notes and plan.md for reference. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"links": {
|
||||
"cAgentur": {
|
||||
"type": "hasMany",
|
||||
"foreign": "cAccount1",
|
||||
"entity": "Opportunity",
|
||||
"audited": false,
|
||||
"isCustom": true
|
||||
},
|
||||
"cTags": {
|
||||
"type": "hasMany",
|
||||
"relationName": "cAccountTag",
|
||||
"foreign": "firmen",
|
||||
"entity": "CTag",
|
||||
"audited": false,
|
||||
"isCustom": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": {
|
||||
"type": "varchar",
|
||||
"required": true,
|
||||
"pattern": "$noBadCharacters"
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
},
|
||||
"createdAt": {
|
||||
"type": "datetime",
|
||||
"readOnly": true
|
||||
},
|
||||
"modifiedAt": {
|
||||
"type": "datetime",
|
||||
"readOnly": true
|
||||
},
|
||||
"createdBy": {
|
||||
"type": "link",
|
||||
"readOnly": true,
|
||||
"view": "views/fields/user"
|
||||
},
|
||||
"modifiedBy": {
|
||||
"type": "link",
|
||||
"readOnly": true,
|
||||
"view": "views/fields/user"
|
||||
},
|
||||
"assignedUser": {
|
||||
"type": "link",
|
||||
"required": false,
|
||||
"view": "views/fields/assigned-user"
|
||||
},
|
||||
"teams": {
|
||||
"type": "linkMultiple",
|
||||
"view": "views/fields/teams"
|
||||
}
|
||||
},
|
||||
"links": {
|
||||
"createdBy": {
|
||||
"type": "belongsTo",
|
||||
"entity": "User"
|
||||
},
|
||||
"modifiedBy": {
|
||||
"type": "belongsTo",
|
||||
"entity": "User"
|
||||
},
|
||||
"assignedUser": {
|
||||
"type": "belongsTo",
|
||||
"entity": "User"
|
||||
},
|
||||
"teams": {
|
||||
"type": "hasMany",
|
||||
"entity": "Team",
|
||||
"relationName": "entityTeam",
|
||||
"layoutRelationshipsDisabled": true
|
||||
},
|
||||
"verkaufschancen": {
|
||||
"type": "hasMany",
|
||||
"relationName": "cOpportunityTag",
|
||||
"foreign": "cTags",
|
||||
"entity": "Opportunity",
|
||||
"audited": false,
|
||||
"isCustom": true
|
||||
},
|
||||
"kontakte": {
|
||||
"type": "hasMany",
|
||||
"relationName": "cContactTag",
|
||||
"foreign": "cTags",
|
||||
"entity": "Contact",
|
||||
"audited": false,
|
||||
"isCustom": true
|
||||
},
|
||||
"firmen": {
|
||||
"type": "hasMany",
|
||||
"relationName": "cAccountTag",
|
||||
"foreign": "cTags",
|
||||
"entity": "Account",
|
||||
"audited": false,
|
||||
"isCustom": true
|
||||
}
|
||||
},
|
||||
"collection": {
|
||||
"orderBy": "createdAt",
|
||||
"order": "desc"
|
||||
},
|
||||
"indexes": {
|
||||
"name": {
|
||||
"columns": [
|
||||
"name",
|
||||
"deleted"
|
||||
]
|
||||
},
|
||||
"assignedUser": {
|
||||
"columns": [
|
||||
"assignedUserId",
|
||||
"deleted"
|
||||
]
|
||||
},
|
||||
"createdAt": {
|
||||
"columns": [
|
||||
"createdAt"
|
||||
]
|
||||
},
|
||||
"createdAtId": {
|
||||
"unique": true,
|
||||
"columns": [
|
||||
"createdAt",
|
||||
"id"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"links": {
|
||||
"cTags": {
|
||||
"type": "hasMany",
|
||||
"relationName": "cContactTag",
|
||||
"foreign": "kontakte",
|
||||
"entity": "CTag",
|
||||
"audited": false,
|
||||
"isCustom": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,167 @@
|
||||
{
|
||||
"fields": {
|
||||
"stage": {
|
||||
"options": [
|
||||
"Interessant",
|
||||
"Abgelehnt",
|
||||
"Angefragt",
|
||||
"Agentur prüft",
|
||||
"Kunde prüft",
|
||||
"Identifiziert",
|
||||
"Brief versendet",
|
||||
"Anruf-Wiedervorlage",
|
||||
"Angerufen",
|
||||
"Ersttermin vereinbart",
|
||||
"Ersttermin durchgeführt",
|
||||
"Angebot",
|
||||
"Verhandlung",
|
||||
"Unterschriftsreif",
|
||||
"Gewonnen",
|
||||
"In Durchführung",
|
||||
"Abgeschl. / Bestandsk.",
|
||||
"Verloren",
|
||||
"Ghosted"
|
||||
],
|
||||
"default": "Interessant",
|
||||
"probabilityMap": {
|
||||
"Interessant": 5,
|
||||
"Abgelehnt": 0,
|
||||
"Angefragt": 15,
|
||||
"Agentur prüft": 20,
|
||||
"Kunde prüft": 30,
|
||||
"Identifiziert": 5,
|
||||
"Brief versendet": 8,
|
||||
"Anruf-Wiedervorlage": 10,
|
||||
"Angerufen": 12,
|
||||
"Ersttermin vereinbart": 20,
|
||||
"Ersttermin durchgeführt": 30,
|
||||
"Angebot": 40,
|
||||
"Verhandlung": 60,
|
||||
"Unterschriftsreif": 80,
|
||||
"Gewonnen": 100,
|
||||
"In Durchführung": 100,
|
||||
"Abgeschl. / Bestandsk.": 100,
|
||||
"Verloren": 0,
|
||||
"Ghosted": 0
|
||||
},
|
||||
"style": {
|
||||
"Interessant": null,
|
||||
"Abgelehnt": "info",
|
||||
"Angefragt": null,
|
||||
"Agentur prüft": null,
|
||||
"Kunde prüft": null,
|
||||
"Identifiziert": null,
|
||||
"Brief versendet": "warning",
|
||||
"Anruf-Wiedervorlage": "warning",
|
||||
"Angerufen": "warning",
|
||||
"Ersttermin vereinbart": "warning",
|
||||
"Ersttermin durchgeführt": "warning",
|
||||
"Angebot": null,
|
||||
"Verhandlung": null,
|
||||
"Unterschriftsreif": null,
|
||||
"Gewonnen": "success",
|
||||
"In Durchführung": "primary",
|
||||
"Abgeschl. / Bestandsk.": "info",
|
||||
"Verloren": "danger",
|
||||
"Ghosted": "info"
|
||||
}
|
||||
},
|
||||
"cLeadQuelle": {
|
||||
"type": "enum",
|
||||
"required": true,
|
||||
"options": [
|
||||
"Inbound Agentur",
|
||||
"Inbound Plattform-Lead",
|
||||
"Aktive Plattform-Suche",
|
||||
"Aktive Akquise",
|
||||
"Empfehlung / Netzwerk",
|
||||
"Sonstiges"
|
||||
],
|
||||
"style": {
|
||||
"Inbound Agentur": null,
|
||||
"Inbound Plattform-Lead": null,
|
||||
"Aktive Plattform-Suche": null,
|
||||
"Aktive Akquise": null,
|
||||
"Empfehlung / Netzwerk": null,
|
||||
"Sonstiges": null
|
||||
},
|
||||
"default": "Inbound Agentur",
|
||||
"maxLength": 100,
|
||||
"isCustom": true,
|
||||
"displayAsLabel": true
|
||||
},
|
||||
"cVerlustgrund": {
|
||||
"type": "enum",
|
||||
"options": [
|
||||
"Agentur Absage",
|
||||
"Kunde Absage",
|
||||
"Keine Einigung",
|
||||
"Eigene Absage",
|
||||
"Sonstiges",
|
||||
"Agentur Ghosted",
|
||||
"Kunde Ghosted"
|
||||
],
|
||||
"style": {
|
||||
"Agentur Absage": null,
|
||||
"Kunde Absage": null,
|
||||
"Keine Einigung": null,
|
||||
"Eigene Absage": null,
|
||||
"Sonstiges": null,
|
||||
"Agentur Ghosted": null,
|
||||
"Kunde Ghosted": null
|
||||
},
|
||||
"default": "Kunde Absage",
|
||||
"maxLength": 100,
|
||||
"isCustom": true
|
||||
},
|
||||
"cProjektlink": {
|
||||
"type": "url",
|
||||
"isCustom": true
|
||||
},
|
||||
"cVerguetungsmodell": {
|
||||
"type": "enum",
|
||||
"options": [
|
||||
"Agentur Honorar",
|
||||
"Direkt Festpreis",
|
||||
"Direkt Honorar",
|
||||
"Direkt Nutzenbasiert"
|
||||
],
|
||||
"style": {
|
||||
"Agentur Honorar": null,
|
||||
"Direkt Festpreis": null,
|
||||
"Direkt Honorar": null,
|
||||
"Direkt Nutzenbasiert": null
|
||||
},
|
||||
"default": "Agentur Honorar",
|
||||
"displayAsLabel": true,
|
||||
"maxLength": 100,
|
||||
"isCustom": true
|
||||
},
|
||||
"cAccount1": {
|
||||
"type": "link"
|
||||
},
|
||||
"amount": {
|
||||
"required": false
|
||||
},
|
||||
"closeDate": {
|
||||
"required": false
|
||||
}
|
||||
},
|
||||
"links": {
|
||||
"cAccount1": {
|
||||
"type": "belongsTo",
|
||||
"foreign": "cAgentur",
|
||||
"entity": "Account",
|
||||
"audited": false,
|
||||
"isCustom": true
|
||||
},
|
||||
"cTags": {
|
||||
"type": "hasMany",
|
||||
"relationName": "cOpportunityTag",
|
||||
"foreign": "verkaufschancen",
|
||||
"entity": "CTag",
|
||||
"audited": false,
|
||||
"isCustom": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"fields": {
|
||||
"signature": {
|
||||
"view": "custom:views/preferences/fields/signature"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user