mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-16 22:42:16 +00:00
update childcomponent vertragstati
This commit is contained in:
@@ -13,12 +13,14 @@ class Vertraege extends FHCAPI_Controller
|
||||
'getAllContractsNotAssigned' => ['admin:r', 'assistenz:r'],
|
||||
'getAllContractsAssigned' => ['admin:r', 'assistenz:r'],
|
||||
'getAllContractTypes' => self::PERM_LOGGED,
|
||||
'getAllContractStati' => self::PERM_LOGGED,
|
||||
'getStatiOfContract' => self::PERM_LOGGED,
|
||||
'loadContract' => ['admin:r', 'assistenz:r'],
|
||||
'updateContract' => ['admin:r', 'assistenz:r'],
|
||||
'addNewContract' => ['admin:r', 'assistenz:r'],
|
||||
'deleteContract' => ['admin:r', 'assistenz:r'],
|
||||
|
||||
'insertContractStatus' => ['admin:r', 'assistenz:r'],
|
||||
'deleteContractStatus' => ['admin:r', 'assistenz:r'],
|
||||
]);
|
||||
|
||||
//Load Models
|
||||
@@ -82,6 +84,17 @@ class Vertraege extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess(getData($result) ?: []);
|
||||
}
|
||||
|
||||
public function getAllContractStati()
|
||||
{
|
||||
//TODO(MANUU)
|
||||
$result = $this->VertragsstatusModel->load();
|
||||
if (isError($result))
|
||||
{
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
$this->terminateWithSuccess(getData($result) ?: []);
|
||||
}
|
||||
|
||||
public function addNewContract($person_id)
|
||||
{
|
||||
//$this->validateNewOrUpdate();
|
||||
@@ -221,4 +234,51 @@ class Vertraege extends FHCAPI_Controller
|
||||
}
|
||||
return $this->outputJsonSuccess(current(getData($result)));
|
||||
}
|
||||
|
||||
public function insertContractStatus ($vertrag_id, $datum, $status){
|
||||
$result = $this->VertragvertragsstatusModel->loadWhere(
|
||||
array(
|
||||
'vertrag_id' => $vertrag_id,
|
||||
'vertragsstatus_kurzbz' => $status
|
||||
)
|
||||
);
|
||||
|
||||
if (hasData($result)) {
|
||||
$this->terminateWithError("status bereits vorhanden", self::ERROR_TYPE_GENERAL);
|
||||
// $this->terminateWithError($this->p->t('ui', 'error_status_existing', ['id' => 'Vertrag_id']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$status_result = $this->VertragvertragsstatusModel->insert([
|
||||
'vertrag_id' => $vertrag_id,
|
||||
'uid' => getAuthUID(),
|
||||
'vertragsstatus_kurzbz' => $status,
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => getAuthUID(),
|
||||
'datum' => $datum
|
||||
]);
|
||||
|
||||
if (!$status_result) {
|
||||
$this->terminateWithError('Fehler beim Hinzufügen des Vertragsstatus.');
|
||||
}
|
||||
|
||||
return $this->outputJsonSuccess(current(getData($status_result)));
|
||||
}
|
||||
|
||||
public function deleteContractStatus($vertrag_id, $status){
|
||||
//return $this->terminateWithError($vertrag_id . " - " . $status, self::ERROR_TYPE_GENERAL);
|
||||
$result = $this->VertragvertragsstatusModel->delete(
|
||||
array(
|
||||
'vertrag_id' => $vertrag_id,
|
||||
'vertragsstatus_kurzbz' => $status
|
||||
)
|
||||
);
|
||||
|
||||
if (isError($result)) {
|
||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
if (!hasData($result)) {
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'vertragsstatus_kurzb']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
return $this->outputJsonSuccess(current(getData($result)));
|
||||
}
|
||||
}
|
||||
@@ -477,7 +477,9 @@ SELECT
|
||||
{
|
||||
$query = "
|
||||
SELECT
|
||||
*
|
||||
*,
|
||||
TO_CHAR(tbl_vertrag_vertragsstatus.datum::timestamp, 'DD.MM.YYYY HH24:MI') AS format_datum,
|
||||
TO_CHAR(tbl_vertrag_vertragsstatus.insertamum::timestamp, 'DD.MM.YYYY HH24:MI') AS format_insertamum
|
||||
FROM
|
||||
lehre.tbl_vertrag_vertragsstatus
|
||||
JOIN lehre.tbl_vertragsstatus USING(vertragsstatus_kurzbz)
|
||||
|
||||
@@ -18,6 +18,9 @@ export default {
|
||||
getAllContractTypes(){
|
||||
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractTypes/');
|
||||
},
|
||||
getAllContractStati(){
|
||||
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractStati/');
|
||||
},
|
||||
addNewContract(person_id, formData) {
|
||||
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/addNewContract/' +
|
||||
person_id, formData
|
||||
@@ -33,4 +36,11 @@ export default {
|
||||
deleteContract(vertrag_id){
|
||||
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id);
|
||||
},
|
||||
insertContractStatus(params) {
|
||||
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/insertContractStatus/' + params.vertrag_id + '/' + params.datum + '/' + Object.values(params.status).join('/'));
|
||||
},
|
||||
deleteContractStatus(params) {
|
||||
console.log("API", params.vertrag_id, params.status);
|
||||
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContractStatus/' + Object.values(params.vertrag_id).join('/') + '/' + Object.values(params.status).join('/'));
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,10 @@ export default {
|
||||
type: [Number],
|
||||
required: true
|
||||
},
|
||||
listContractStati: {
|
||||
type: Array,
|
||||
required: true
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
@@ -29,17 +33,40 @@ export default {
|
||||
},
|
||||
ajaxResponse: (url, params, response) => response.data,
|
||||
columns: [
|
||||
{title: "Status", field: "status", width: 125},
|
||||
{title: "Datum", field: "datum", width: 150},
|
||||
{title: "Status", field: "vertragsstatus_kurzbz"},
|
||||
{title: "Datum", field: "format_datum"},
|
||||
{title: "vertrag_id", field: "vertrag_id", visible: false},
|
||||
{title: "User", field: "bezeichnung", width: 150},
|
||||
{title: "Vertragsstatus_kurzbz", field: "studiensemester_kurzbz"},
|
||||
// {title: "User", field: "bezeichnung", visible: false},
|
||||
// {title: "Vertragsstatus_kurzbz", field: "Vertragsstatus_kurzbz", visible: false},
|
||||
{title: "insertvon", field: "insertvon", visible: false},
|
||||
{title: "insertamum", field: "insertamum", visible: false},
|
||||
{title: "updatevon", field: "updatevon", visible: false},
|
||||
{title: "updateamum", field: "updateamum", visible: true},
|
||||
// {title: "insertamum", field: "insertamum", visible: false},
|
||||
{title: "insertamum", field: "format_insertamum", visible: false},
|
||||
{title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false},
|
||||
{title: "Vertragsstunden", field: "vertragsstunden", visible: false},
|
||||
{
|
||||
title: 'Aktionen', field: 'actions',
|
||||
minWidth: 150,
|
||||
formatter: (cell, formatterParams, onRendered) => {
|
||||
|
||||
const container = document.createElement('div');
|
||||
container.className = "d-flex gap-2";
|
||||
|
||||
let button = document.createElement('button');
|
||||
button.className = 'btn btn-outline-secondary btn-action';
|
||||
button.innerHTML = '<i class="fa fa-xmark"></i>';
|
||||
button.title = 'Status löschen';
|
||||
button.addEventListener(
|
||||
'click',
|
||||
() =>
|
||||
this.actionDeleteStatus(cell.getData().vertrag_id, cell.getData().vertragsstatus_kurzbz)
|
||||
);
|
||||
|
||||
container.append(button);
|
||||
|
||||
return container;
|
||||
},
|
||||
frozen: true
|
||||
},
|
||||
],
|
||||
layout: 'fitColumns',
|
||||
layoutColumnsOnNewData: false,
|
||||
@@ -47,7 +74,11 @@ export default {
|
||||
selectableRangeMode: 'click',
|
||||
selectable: true,
|
||||
},
|
||||
clickedRows: []
|
||||
clickedRows: [],
|
||||
formContractData: {
|
||||
vertragsstatus_kurzbz: null,
|
||||
datum: new Date()
|
||||
},
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@@ -55,21 +86,98 @@ export default {
|
||||
this.$refs.table.tabulator.setData('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + this.vertrag_id);
|
||||
}
|
||||
},
|
||||
methods: { },
|
||||
methods: {
|
||||
actionNewStatus() {
|
||||
console.log("actionNewStatus");
|
||||
this.$refs.contractStatus.show();
|
||||
},
|
||||
actionDeleteStatus(vertrag_id, status) {
|
||||
console.log("action: deleteStatus " + status + " from Vertrag" + vertrag_id);
|
||||
this.$emit('deleteContractStatus', {
|
||||
status: status,
|
||||
vertrag_id: vertrag_id
|
||||
});
|
||||
},
|
||||
handleSubmit(){
|
||||
this.$emit('setContractStatus', {
|
||||
status: this.formContractData.vertragsstatus_kurzbz,
|
||||
datum: this.formContractData.datum
|
||||
});
|
||||
},
|
||||
closeModal(){
|
||||
this.$refs.contractStatus.hide();
|
||||
this.$emit('close-modal');
|
||||
},
|
||||
reload() {
|
||||
this.$refs.table.reloadTable();
|
||||
this.$emit('reload');
|
||||
},
|
||||
},
|
||||
template: `
|
||||
<!--TODO(Manu) check filter (akzeptiert, neu, erteilt?), design -->
|
||||
<div class="core-vertraege h-50 d-flex flex-column w-100">
|
||||
<!-- person_id: {{person_id}}-->
|
||||
<br>
|
||||
vertrag_id: {{vertrag_id}} !
|
||||
<h4>Vertragstatus</h4>
|
||||
<h4>Vertragsstatus</h4>
|
||||
|
||||
<core-filter-cmpt
|
||||
ref="table"
|
||||
:tabulator-options="tabulatorOptions"
|
||||
table-only
|
||||
:side-menu="false"
|
||||
:side-menu="false"
|
||||
reload
|
||||
new-btn-show
|
||||
new-btn-label="Status"
|
||||
@click:new="actionNewStatus"
|
||||
>
|
||||
</core-filter-cmpt>
|
||||
</core-filter-cmpt>
|
||||
|
||||
<div >
|
||||
<bs-modal ref="contractStatus">
|
||||
<template #title>
|
||||
<p class="fw-bold mt-3">{{$p.t('ui', 'add_Status')}}</p>
|
||||
|
||||
</template>
|
||||
|
||||
<core-form>
|
||||
<div class="row mb-3">
|
||||
<form-input
|
||||
type="DatePicker"
|
||||
:label="$p.t('global/datum')"
|
||||
name="datum"
|
||||
v-model="formContractData.datum"
|
||||
auto-apply
|
||||
:enable-time-picker="false"
|
||||
format="dd.MM.yyyy"
|
||||
preview-format="dd.MM.yyyy"
|
||||
:teleport="true"
|
||||
>
|
||||
</form-input>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<form-input
|
||||
type="select"
|
||||
:label="$p.t('global/typ')"
|
||||
v-model="formContractData.vertragsstatus_kurzbz"
|
||||
name="vertragsstatus_kurzbz"
|
||||
>
|
||||
<option :value="null">{{$p.t('ui', 'bitteWaehlen')}}</option>
|
||||
<option
|
||||
v-for="entry in listContractStati"
|
||||
:key="entry.vertragsstatus_kurzbz"
|
||||
:value="entry.vertragsstatus_kurzbz"
|
||||
>
|
||||
{{entry.bezeichnung}}
|
||||
</option>
|
||||
</form-input>
|
||||
</div>
|
||||
</core-form>
|
||||
|
||||
<template #footer>
|
||||
<button type="button" class="btn btn-primary" @click="handleSubmit()">{{$p.t('ui', 'speichern')}}</button>
|
||||
</template>
|
||||
|
||||
</bs-modal>
|
||||
</div>
|
||||
|
||||
</div>`
|
||||
}
|
||||
@@ -3,7 +3,6 @@ import {CoreFilterCmpt} from "../../filter/Filter.js";
|
||||
import BsModal from "../../Bootstrap/Modal.js";
|
||||
import CoreForm from '../../Form/Form.js';
|
||||
import FormInput from '../../Form/Input.js';
|
||||
import {BismeldestichtagHelper} from "../../../apps/Bismeldestichtag/BismeldestichtagHelper";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
|
||||
@@ -130,22 +130,20 @@ export default {
|
||||
formData: {},
|
||||
listContractsUnassigned: [],
|
||||
listContractTypes: [],
|
||||
contractSelected: []
|
||||
contractSelected: [],
|
||||
listContractStati: [],
|
||||
// isContractModalVisible: true,
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
actionNewContract() {
|
||||
console.log("actionNewContract");
|
||||
this.resetModal();
|
||||
//this.loadContractsNotAssigned(this.person_id);
|
||||
this.$refs.contractModal.show();
|
||||
},
|
||||
actionEditContract(vertrag_id) {
|
||||
console.log("actionEditContract " + vertrag_id);
|
||||
this.statusNew = false;
|
||||
this
|
||||
.loadContract(vertrag_id)
|
||||
this.loadContract(vertrag_id)
|
||||
.then(this.$refs.contractModal.show);
|
||||
},
|
||||
actionDeleteContract(vertrag_id) {
|
||||
@@ -175,6 +173,43 @@ export default {
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
addNewContractStatus({status, datum}) {
|
||||
const date = new Date();
|
||||
|
||||
//TODO(Manu) refactor this
|
||||
const formattedDate = datum.toLocaleDateString('en-CA');
|
||||
let params = {
|
||||
vertrag_id : this.contractSelected.vertrag_id,
|
||||
status: {status},
|
||||
datum: formattedDate
|
||||
}
|
||||
|
||||
return this.endpoint
|
||||
.insertContractStatus(params)
|
||||
.then(response => {
|
||||
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
|
||||
|
||||
this.$refs.contractstati.closeModal();
|
||||
window.scrollTo(0, 0);
|
||||
this.$refs.contractstati.reload();
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
deleteContractStatus({status, vertrag_id}){
|
||||
let params = {
|
||||
vertrag_id : {vertrag_id},
|
||||
status: {status}
|
||||
}
|
||||
return this.endpoint
|
||||
.deleteContractStatus(params)
|
||||
.then(response => {
|
||||
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete'));
|
||||
|
||||
window.scrollTo(0, 0);
|
||||
this.$refs.contractstati.reload();
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
updateContract(vertrag_id) {
|
||||
return this.endpoint
|
||||
.updateContract(vertrag_id, this.formData)
|
||||
@@ -210,11 +245,13 @@ export default {
|
||||
created() {
|
||||
Promise.all([
|
||||
this.endpoint.getAllContractTypes(),
|
||||
this.endpoint.getAllContractsNotAssigned2(this.person_id)
|
||||
this.endpoint.getAllContractsNotAssigned2(this.person_id),
|
||||
this.endpoint.getAllContractStati(),
|
||||
])
|
||||
.then(([result1, result2]) => {
|
||||
.then(([result1, result2, result3]) => {
|
||||
this.listContractTypes = result1.data;
|
||||
this.listContractsUnassigned = result2.data;
|
||||
this.listContractStati = result3.data;
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
@@ -230,10 +267,6 @@ export default {
|
||||
|
||||
<div class="core-vertraege h-100 d-flex flex-column">
|
||||
|
||||
{{formData}}
|
||||
|
||||
{{contractSelected}}
|
||||
|
||||
<core-filter-cmpt
|
||||
ref="table"
|
||||
:tabulator-options="tabulatorOptions"
|
||||
@@ -253,35 +286,23 @@ export default {
|
||||
<div class="col-sm-6">
|
||||
<!-- ContractDetails -->
|
||||
<div class="md-4" v-if="contractSelected.vertrag_id !=null">
|
||||
<ContractDetails :person_id="person_id" :vertrag_id="contractSelected.vertrag_id"></ContractDetails>
|
||||
<contract-details :person_id="person_id" :vertrag_id="contractSelected.vertrag_id"></contract-details>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-6">
|
||||
<!-- ContractStati -->
|
||||
<div class="md-4" v-if="contractSelected.vertrag_id !=null">
|
||||
<ContractStati :vertrag_id="contractSelected.vertrag_id"></ContractStati>
|
||||
<contract-stati :vertrag_id="contractSelected.vertrag_id" :listContractStati="listContractStati"
|
||||
@setContractStatus="addNewContractStatus"
|
||||
@deleteContractStatus="deleteContractStatus"
|
||||
ref="contractstati"
|
||||
></contract-stati>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- <hr>
|
||||
<div>
|
||||
<!– ContractDetails –>
|
||||
<div class="row md-4" v-if="contractSelected.vertrag_id !=null">
|
||||
<ContractDetails :person_id="person_id" :vertrag_id="contractSelected.vertrag_id"></ContractDetails>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<!– ContractStati –>
|
||||
<div class="row md-4" v-if="contractSelected.vertrag_id !=null">
|
||||
<ContractStati :vertrag_id="contractSelected.vertrag_id"></ContractStati>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
|
||||
<!--Modal: contractModal-->
|
||||
<bs-modal ref="contractModal" dialog-class="modal-xl">
|
||||
<template #title>
|
||||
@@ -291,7 +312,7 @@ export default {
|
||||
|
||||
<core-form class="row g-3" ref="unassignedData">
|
||||
|
||||
<ListUnassigned :endpoint="$fhcApi.factory.vertraege.person" :person_id="person_id"></ListUnassigned>
|
||||
<list-unassigned :endpoint="$fhcApi.factory.vertraege.person" :person_id="person_id"></list-unassigned>
|
||||
|
||||
<div class="row mb-3">
|
||||
<form-input
|
||||
|
||||
Reference in New Issue
Block a user