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: ` +
+
+
+
+ + Wochen +
+
+
+
+ + Wochen +
+
+
 
+ +
+ +
+
+
+ `, + 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 : {}; } } }