diff --git a/public/js/apps/vbform/presets.js b/public/js/apps/vbform/presets.js
index 2a1b87987..d134cf5b1 100644
--- a/public/js/apps/vbform/presets.js
+++ b/public/js/apps/vbform/presets.js
@@ -8,6 +8,9 @@ export default [
label: 'Leer',
description: 'keine vordefinierten Vertrags- und Gehaltsbestandteile. Alles kann/muss manuell angelegt werden.'
},
+ data: {
+ dienstverhaeltnisid: null
+ },
vbs: []
},
{
@@ -17,6 +20,11 @@ export default [
label: 'Neuanlage Standard DV',
description: 'Standard Dienstvertrag Vorlage'
},
+ data: {
+ dienstverhaeltnisid: null,
+ unternehmen: 'fhtw',
+ vertragsart_kurzbz: 'echterDV'
+ },
vbs: [
{
type: 'vertragsbestandteilstunden',
@@ -50,6 +58,17 @@ export default [
homeoffice: true
}
},
+ {
+ type: 'vertragsbestandteilkuendigungsfrist',
+ guioptions: {
+ id: uuid.get_uuid(),
+ removable: false
+ },
+ data: {
+ arbeitgeber_frist: 6,
+ arbeitnehmer_frist: 4
+ }
+ },
{
type: 'vertragsbestandteilfunktion',
guioptions: {
@@ -66,6 +85,9 @@ export default [
label: 'AllIn',
description: 'AllIn Vertrag'
},
+ data: {
+ dienstverhaeltnisid: null
+ },
vbs: [
{
type: 'vertragsbestandteilstunden',
@@ -133,6 +155,18 @@ export default [
"label": "Test Zwischenspeichern",
"description": "generiertes JSON aus ausgeflltem Formular als POC für das Zwischenspeichern"
},
+ "data": {
+ "dienstverhaeltnisid": 135,
+ "gueltigkeit": {
+ "guioptions": {
+ "sharedstatemode": "set"
+ },
+ "data": {
+ "gueltig_ab": "01.06.2023",
+ "gueltig_bis": "31.12.2023"
+ }
+ }
+ },
"vbs": [
{
"type": "vertragsbestandteilstunden",
@@ -143,8 +177,13 @@ export default [
"data": {
"stunden": "38,5",
"gueltigkeit": {
- "gueltig_ab": "01.03.2023",
- "gueltig_bis": ""
+ "guioptions": {
+ "sharedstatemode": "reflect"
+ },
+ "data": {
+ "gueltig_ab": "01.03.2023",
+ "gueltig_bis": ""
+ }
}
},
"gbs": [
@@ -158,8 +197,13 @@ export default [
"gehaltstyp": "grund",
"betrag": "3500",
"gueltigkeit": {
- "gueltig_ab": "01.03.2023",
- "gueltig_bis": ""
+ "guioptions": {
+ "sharedstatemode": "reflect"
+ },
+ "data": {
+ "gueltig_ab": "01.03.2023",
+ "gueltig_bis": ""
+ }
},
"valorisierung": true
}
@@ -177,8 +221,13 @@ export default [
"azgrelevant": false,
"homeoffice": true,
"gueltigkeit": {
- "gueltig_ab": "01.03.2023",
- "gueltig_bis": ""
+ "guioptions": {
+ "sharedstatemode": "reflect"
+ },
+ "data": {
+ "gueltig_ab": "01.03.2023",
+ "gueltig_bis": ""
+ }
}
}
},
@@ -194,8 +243,13 @@ export default [
"freitext": "Es wird AllIn vereinbart.",
"kuendigungsrelevant": "",
"gueltigkeit": {
- "gueltig_ab": "01.03.2023",
- "gueltig_bis": ""
+ "guioptions": {
+ "sharedstatemode": "reflect"
+ },
+ "data": {
+ "gueltig_ab": "01.03.2023",
+ "gueltig_bis": ""
+ }
}
},
"gbs": [
@@ -209,8 +263,13 @@ export default [
"gehaltstyp": "zulage",
"betrag": "500",
"gueltigkeit": {
- "gueltig_ab": "01.03.2023",
- "gueltig_bis": ""
+ "guioptions": {
+ "sharedstatemode": "reflect"
+ },
+ "data": {
+ "gueltig_ab": "01.03.2023",
+ "gueltig_bis": ""
+ }
},
"valorisierung": false
}
diff --git a/public/js/components/vbform/dvaenderung.js b/public/js/components/vbform/dvaenderung.js
new file mode 100644
index 000000000..cfc782077
--- /dev/null
+++ b/public/js/components/vbform/dvaenderung.js
@@ -0,0 +1,23 @@
+import gueltigkeit from './gueltigkeit.js';
+import configurable from '../../mixins/vbform/configurable.js';
+
+export default {
+ template: `
+
Aenderung
+
+
+ `,
+ components: {
+ 'gueltigkeit': gueltigkeit
+ },
+ mixins: [
+ configurable
+ ],
+ methods: {
+ getPayload: function() {
+ return {
+ gueltigkeit: this.$refs.gueltigkeit.getPayload()
+ }
+ }
+ }
+}
diff --git a/public/js/components/vbform/dvneuanlage.js b/public/js/components/vbform/dvneuanlage.js
new file mode 100644
index 000000000..0b3ca2e91
--- /dev/null
+++ b/public/js/components/vbform/dvneuanlage.js
@@ -0,0 +1,66 @@
+import gueltigkeit from './gueltigkeit.js';
+import configurable from '../../mixins/vbform/configurable.js';
+
+export default {
+ template: `
+
+
+
+
+
+
+
+
+
+ `,
+ data: function() {
+ return {
+ 'unternehmen': '',
+ 'vertragsart_kurzbz': ''
+ }
+ },
+ components: {
+ 'gueltigkeit': gueltigkeit
+ },
+ mixins: [
+ configurable
+ ],
+ watch: {
+ config: function() {
+ this.setDataFromConfig();
+ }
+ },
+ methods: {
+ setDataFromConfig: function() {
+ if( this.config?.unternehmen !== undefined ) {
+ this.unternehmen = this.config.unternehmen;
+ } else {
+ this.unternehmen = '';
+ }
+
+ if( this.config?.vertragsart_kurzbz !== undefined ) {
+ this.vertragsart_kurzbz = this.config.vertragsart_kurzbz;
+ } else {
+ this.vertragsart_kurzbz = '';
+ }
+ },
+ getPayload: function() {
+ return {
+ unternehmen: this.unternehmen,
+ vertragsart_kurzbz: this.vertragsart_kurzbz,
+ gueltigkeit: this.$refs.gueltigkeit.getPayload()
+ }
+ }
+ }
+}
diff --git a/public/js/components/vbform/gehaltsbestandteil.js b/public/js/components/vbform/gehaltsbestandteil.js
index 125ec6e40..0fe22b1f8 100644
--- a/public/js/components/vbform/gehaltsbestandteil.js
+++ b/public/js/components/vbform/gehaltsbestandteil.js
@@ -24,7 +24,7 @@ export default {
Valorisierung
-
+
diff --git a/public/js/components/vbform/gueltigkeit.js b/public/js/components/vbform/gueltigkeit.js
index ea40f920f..a4e6c6a51 100644
--- a/public/js/components/vbform/gueltigkeit.js
+++ b/public/js/components/vbform/gueltigkeit.js
@@ -1,25 +1,117 @@
+import configurable from '../../mixins/vbform/configurable.js';
+import sharedstate from './vbsharedstate.js';
+
export default {
+ template: `
+
+ `,
+ props: {
+ 'initialsharedstatemode': {
+ type: String,
+ default: 'reflect',
+ validator: function(value) {
+ return ['reflect', 'set', 'ignore'].includes(value);
+ }
+ }
+ },
data: function() {
return {
+ sharedstate: sharedstate,
+ sharedstatemode: '',
gueltig_ab: '',
gueltig_bis: ''
}
},
- template: `
-
-
-
-
-
-
- `,
components: {},
+ mixins: [
+ configurable
+ ],
+ created: function() {
+ this.sharedstatemode = this.initialsharedstatemode;
+ this.setDataFromSharedSate();
+ this.setGUIOptionsFromConfig();
+ this.setDataFromConfig();
+ },
+ watch: {
+ 'sharedstate.gueltigkeit.gueltig_ab': function() {
+ if( this.sharedstatemode === 'reflect' ) {
+ this.gueltig_ab = this.sharedstate.gueltigkeit.gueltig_ab;
+ }
+ },
+ 'sharedstate.gueltigkeit.gueltig_bis': function() {
+ if( this.sharedstatemode === 'reflect' ) {
+ this.gueltig_bis = this.sharedstate.gueltigkeit.gueltig_bis;
+ }
+ },
+ },
methods: {
+ setDataFromConfig: function() {
+ if( typeof this.config === 'undefined' ) {
+ return;
+ }
+
+ if( typeof this.config.data === 'undefined' ) {
+ return;
+ }
+
+ if( typeof this.config.data.gueltig_ab !== 'undefined' ) {
+ this.gueltig_ab = this.config.data.gueltig_ab;
+ }
+ if( typeof this.config.gueltig_bis !== 'undefined' ) {
+ this.gueltig_bis = this.config.data.gueltig_bis;
+ }
+ },
+ setDataFromSharedSate: function() {
+ if( this.sharedstatemode === 'reflect' ) {
+ this.gueltig_ab = this.sharedstate.gueltigkeit.gueltig_ab;
+ this.gueltig_bis = this.sharedstate.gueltigkeit.gueltig_bis;
+ }
+ },
+ setGUIOptionsFromConfig: function() {
+ if( typeof this.config?.guioptions?.sharedstatemode !== 'undefined' ) {
+ this.sharedstatemode = this.config.guioptions.sharedstatemode;
+ }
+ },
getPayload: function() {
return {
- gueltig_ab: this.gueltig_ab,
- gueltig_bis: this.gueltig_bis,
+ guioptions: {
+ sharedstatemode: this.sharedstatemode,
+ },
+ data: {
+ gueltig_ab: this.gueltig_ab,
+ gueltig_bis: this.gueltig_bis
+ }
};
+ },
+ gueltigkeitchanged: function() {
+ if( this.sharedstatemode === 'set' ) {
+ this.sharedstate.gueltigkeit.gueltig_ab = this.gueltig_ab;
+ this.sharedstate.gueltigkeit.gueltig_bis = this.gueltig_bis;
+ }
+ },
+ changesharedstatemode: function(mode) {
+ this.sharedstatemode = mode;
+ this.setDataFromSharedSate();
+ }
+ },
+ computed: {
+ isdisabled: function() {
+ return (this.sharedstatemode === 'reflect');
}
}
}
diff --git a/public/js/components/vbform/presets_chooser.js b/public/js/components/vbform/presets_chooser.js
index ef13ca014..d185dca1f 100644
--- a/public/js/components/vbform/presets_chooser.js
+++ b/public/js/components/vbform/presets_chooser.js
@@ -17,7 +17,7 @@ export default {
-
+
@@ -31,7 +31,8 @@ export default {
data: function() {
return {
selectedpresetidx: 0,
- selectedpreset: [],
+ selectedpresetvbs: [],
+ selectedpresetdata: {},
vbhjson: ''
}
},
@@ -43,7 +44,8 @@ export default {
selectpreset: function(idx) {
if( typeof this.presets[idx] !== 'undefined' ) {
this.seletedpresetidx = idx;
- this.selectedpreset = this.presets[idx].vbs;
+ this.selectedpresetvbs = this.presets[idx].vbs;
+ this.selectedpresetdata = this.presets[idx].data;
}
},
isactive: function(idx) {
diff --git a/public/js/components/vbform/vbsharedstate.js b/public/js/components/vbform/vbsharedstate.js
new file mode 100644
index 000000000..d55cab423
--- /dev/null
+++ b/public/js/components/vbform/vbsharedstate.js
@@ -0,0 +1,6 @@
+export default Vue.reactive({
+ gueltigkeit: {
+ gueltig_ab: '',
+ gueltig_bis: ''
+ }
+});
diff --git a/public/js/components/vbform/vertragsbestandteil_freitext.js b/public/js/components/vbform/vertragsbestandteil_freitext.js
index 031c4030b..b775b9989 100644
--- a/public/js/components/vbform/vertragsbestandteil_freitext.js
+++ b/public/js/components/vbform/vertragsbestandteil_freitext.js
@@ -15,7 +15,7 @@ export default {
-
+
diff --git a/public/js/components/vbform/vertragsbestandteil_funktion.js b/public/js/components/vbform/vertragsbestandteil_funktion.js
index 6f3194eea..7385b178d 100644
--- a/public/js/components/vbform/vertragsbestandteil_funktion.js
+++ b/public/js/components/vbform/vertragsbestandteil_funktion.js
@@ -12,7 +12,7 @@ export default {
-
+
@@ -33,9 +33,7 @@ export default {
data: function () {
return {
funktion: '',
- orget: '',
- gueltig_ab: '',
- gueltig_bis: ''
+ orget: ''
}
},
created: function() {
diff --git a/public/js/components/vbform/vertragsbestandteil_kuendigungsfrist.js b/public/js/components/vbform/vertragsbestandteil_kuendigungsfrist.js
new file mode 100644
index 000000000..8a898a393
--- /dev/null
+++ b/public/js/components/vbform/vertragsbestandteil_kuendigungsfrist.js
@@ -0,0 +1,76 @@
+import gehaltsbestandteilhelper from './gehaltsbestandteilhelper.js';
+import gueltigkeit from './gueltigkeit.js';
+import configurable from '../../mixins/vbform/configurable.js';
+
+export default {
+ template: `
+
+ `,
+ components: {
+ 'gueltigkeit': gueltigkeit
+ },
+ mixins: [
+ configurable
+ ],
+ emits: {
+ removeVB: null
+ },
+ data: function () {
+ return {
+ arbeitgeber_frist: '',
+ arbeitnehmer_frist: ''
+ }
+ },
+ created: function() {
+ this.setDataFromConfig();
+ },
+ methods: {
+ setDataFromConfig: function() {
+ if( typeof this.config?.data === 'undefined' ) {
+ return;
+ }
+
+ if( typeof this.config.data.arbeitgeber_frist !== 'undefined' ) {
+ this.arbeitgeber_frist = this.config.data.arbeitgeber_frist;
+ }
+
+ if( typeof this.config.data.arbeitnehmer_frist !== 'undefined' ) {
+ this.arbeitnehmer_frist = this.config.data.arbeitnehmer_frist;
+ }
+ },
+ removeVB: function() {
+ this.$emit('removeVB', {id: this.config.guioptions.id});
+ },
+ getPayload: function() {
+ return {
+ type: this.config.type,
+ guioptions: this.config.guioptions,
+ data: {
+ arbeitgeber_frist: this.arbeitgeber_frist,
+ arbeitnehmer_frist: this.arbeitnehmer_frist,
+ gueltigkeit: this.$refs.gueltigkeit.getPayload(),
+ }
+ };
+ }
+ }
+}
diff --git a/public/js/components/vbform/vertragsbestandteil_stunden.js b/public/js/components/vbform/vertragsbestandteil_stunden.js
index 410a586b5..5c81852ef 100644
--- a/public/js/components/vbform/vertragsbestandteil_stunden.js
+++ b/public/js/components/vbform/vertragsbestandteil_stunden.js
@@ -13,7 +13,7 @@ export default {
-
+
@@ -58,7 +58,7 @@ export default {
guioptions: this.config.guioptions,
data: {
stunden: this.stunden,
- gueltigkeit: this.$refs.gueltigkeit.getPayload()
+ gueltigkeit: this.$refs.gueltigkeit.getPayload(),
},
gbs: this.$refs.gbh.getPayload()
};
diff --git a/public/js/components/vbform/vertragsbestandteil_zeitaufzeichnung.js b/public/js/components/vbform/vertragsbestandteil_zeitaufzeichnung.js
index 9a26ca3f8..98ed58b64 100644
--- a/public/js/components/vbform/vertragsbestandteil_zeitaufzeichnung.js
+++ b/public/js/components/vbform/vertragsbestandteil_zeitaufzeichnung.js
@@ -24,7 +24,7 @@ export default {
-
+
@@ -44,9 +44,7 @@ export default {
return {
zeitaufzeichnung: '',
azgrelevant: '',
- homeoffice: '',
- gueltig_ab: '',
- gueltig_bis: ''
+ homeoffice: ''
}
},
created: function() {
diff --git a/public/js/components/vbform/vertragsbestandteilhelper.js b/public/js/components/vbform/vertragsbestandteilhelper.js
index 42c0e7e22..b4c583ddc 100644
--- a/public/js/components/vbform/vertragsbestandteilhelper.js
+++ b/public/js/components/vbform/vertragsbestandteilhelper.js
@@ -2,12 +2,20 @@ import vertragsbestandteilstunden from './vertragsbestandteil_stunden.js';
import vertragsbestandteilzeitaufzeichnung from './vertragsbestandteil_zeitaufzeichnung.js';
import vertragsbestandteilfunktion from './vertragsbestandteil_funktion.js';
import vertragsbestandteilfreitext from './vertragsbestandteil_freitext.js';
+import vertragsbestandteilkuendigungsfrist from './vertragsbestandteil_kuendigungsfrist.js';
import presetable from '../../mixins/vbform/presetable.js';
import uuid from '../../helpers/vbform/uuid.js';
+import dvneuanlage from './dvneuanlage.js';
+import dvaenderung from './dvaenderung.js';
+import sharedstate from './vbsharedstate.js';
export default {
template: `
+
+
+
+
@@ -29,8 +38,12 @@ export default {
v-bind:config="config" :key="config.guioptions.id" @removeVB="removeVB">
`,
+ props: [
+ 'data'
+ ],
data: function() {
return {
+ sharedstate: sharedstate,
vertragsbestandteiltyp: '',
payload: {
type: 'formdata',
@@ -43,6 +56,9 @@ export default {
'vertragsbestandteilzeitaufzeichnung': vertragsbestandteilzeitaufzeichnung,
'vertragsbestandteilfunktion': vertragsbestandteilfunktion,
'vertragsbestandteilfreitext': vertragsbestandteilfreitext,
+ 'vertragsbestandteilkuendigungsfrist': vertragsbestandteilkuendigungsfrist,
+ 'dvneuanlage': dvneuanlage,
+ 'dvaenderung': dvaenderung
},
mixins: [
presetable
@@ -82,6 +98,7 @@ export default {
this.payload = {
type: 'formdata',
+ data: this.$refs.formheader.getPayload(),
vbs: []
};
children.forEach(function(vb) {
@@ -89,6 +106,11 @@ export default {
});
this.$emit('vbhjsonready', JSON.stringify(this.payload, null, 2));
+ },
+ },
+ computed: {
+ isaenderung: function() {
+ return ((typeof this.data.dienstverhaeltnisid !== 'undefined') && parseInt(this.data.dienstverhaeltnisid) > 0);
}
}
}
diff --git a/public/js/mixins/vbform/configurable.js b/public/js/mixins/vbform/configurable.js
index d8885defb..5918c6521 100644
--- a/public/js/mixins/vbform/configurable.js
+++ b/public/js/mixins/vbform/configurable.js
@@ -4,11 +4,15 @@ export default {
],
computed: {
isremoveable: function() {
- return (typeof this.config.guioptions.removeable === 'undefined')
+ return (this.config?.guioptions?.removeable === undefined)
? false : this.config.guioptions.removeable;
},
getgehaltsbestandteile: function() {
- return (typeof this.config.gbs !== 'undefined') ? this.config.gbs : [];
+ return (this.config?.gbs !== undefined) ? this.config.gbs : [];
+ },
+ getgueltigkeit: function() {
+ return (this.config?.data?.gueltigkeit !== undefined)
+ ? this.config.data.gueltigkeit : {};
}
}
}