Add kilometer-based Fahrtkosten billing, self-service distance entry, role deletion
Docker-Images bauen und veröffentlichen / build (, omsorgCore/Dockerfile, omsorgcore) (push) Successful in 16s
Docker-Images bauen und veröffentlichen / build (, omsorgWeb/Dockerfile, omsorgweb) (push) Successful in 5s
Docker-Images bauen und veröffentlichen / build (, omsorgapp/Dockerfile, omsorgapp) (push) Successful in 19s
Docker-Images bauen und veröffentlichen / build (, omsorgCore/Dockerfile, omsorgcore) (push) Successful in 16s
Docker-Images bauen und veröffentlichen / build (, omsorgWeb/Dockerfile, omsorgweb) (push) Successful in 5s
Docker-Images bauen und veröffentlichen / build (, omsorgapp/Dockerfile, omsorgapp) (push) Successful in 19s
- Facility: TravelCostMode (Pauschale/ProKilometer) + TravelCostPerKm, alongside the existing flat rate; fixes FacilityService.UpdateAsync silently dropping all Konditionen fields on update. - New EmployeeFacilityDistance (Mitarbeiter x Einrichtung -> km) with full office-side CRUD in omsorgapp, plus a self-service endpoint/UI so field staff can maintain their own commute distance via OMSORG Connect (new ModuleType.EmployeeFacilityDistances, Own-scope, no Facilities access needed). - Roles can now be deleted (blocked with a 409 while still assigned to a user). - Fix employeesApi.js missing the Date-object conversion for dateOfBirth/entryDate/ exitDate that crashed employee creation whenever a date was filled in; add a clear/remove control for those date fields. - Requirements: flesh out FR-REC-3 with a staged Akquise cadence, add FR-REC-5/6 for CRM feature scope and success metrics. - Regenerate api-client-ts and api-client-php for all of the above. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
09dce2ab98
commit
ffa2c4a9e7
@@ -45,6 +45,11 @@ function layout_start(string $title, string $currentPage = 'dashboard'): void {
|
||||
<span class="nav-icon">⏱</span><span class="nav-label"> Zeiterfassung</span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?php if (has_permission('EmployeeFacilityDistances', 'View')): ?>
|
||||
<a href="fahrtstrecken.php" class="<?= $currentPage === 'fahrtstrecken' ? 'active' : '' ?>">
|
||||
<span class="nav-icon">🚗</span><span class="nav-label"> Fahrtstrecken</span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<a href="settings.php" class="<?= $currentPage === 'settings' ? 'active' : '' ?>">
|
||||
<span class="nav-icon">⚙</span><span class="nav-label"> Einstellungen</span>
|
||||
</a>
|
||||
|
||||
@@ -258,3 +258,52 @@ function omsorgcore_time_entries_submit(array $config, string $accessToken, stri
|
||||
->apiTimeEntriesIdSubmitPostWithHttpInfo($id);
|
||||
});
|
||||
}
|
||||
|
||||
// --- EmployeeFacilityDistances (eigene Fahrtstrecke km je Einrichtung, FR-EIN-4) ---
|
||||
// Own-Scope: die EmployeeId wird serverseitig aus dem JWT aufgelöst (siehe
|
||||
// MyFacilityDistancesController in omsorgCore), Connect schickt hier bewusst nie eine employeeId mit.
|
||||
// Kein Facilities-Recht nötig - die Einrichtungsauswahl kommt über einen eigenen, minimalen
|
||||
// Endpoint (nur Id/Name, keine Konditionen/CRM-Daten).
|
||||
|
||||
function omsorgcore_my_facility_distances_list(array $config, string $accessToken): array
|
||||
{
|
||||
return omsorgcore_call($config, function ($cfg) use ($accessToken) {
|
||||
$cfg->setAccessToken($accessToken);
|
||||
return (new \OmsorgCoreClient\Api\MyFacilityDistancesApi(new \GuzzleHttp\Client(), $cfg))
|
||||
->apiMeFacilityDistancesGetWithHttpInfo();
|
||||
});
|
||||
}
|
||||
|
||||
function omsorgcore_my_facility_distances_facility_options(array $config, string $accessToken): array
|
||||
{
|
||||
return omsorgcore_call($config, function ($cfg) use ($accessToken) {
|
||||
$cfg->setAccessToken($accessToken);
|
||||
return (new \OmsorgCoreClient\Api\MyFacilityDistancesApi(new \GuzzleHttp\Client(), $cfg))
|
||||
->apiMeFacilityDistancesFacilitiesGetWithHttpInfo();
|
||||
});
|
||||
}
|
||||
|
||||
function omsorgcore_my_facility_distances_create(array $config, string $accessToken, array $payload): array
|
||||
{
|
||||
$request = new \OmsorgCoreClient\Model\CreateMyFacilityDistanceRequest([
|
||||
'facility_id' => $payload['facilityId'],
|
||||
'distance_km' => $payload['distanceKm'],
|
||||
]);
|
||||
return omsorgcore_call($config, function ($cfg) use ($accessToken, $request) {
|
||||
$cfg->setAccessToken($accessToken);
|
||||
return (new \OmsorgCoreClient\Api\MyFacilityDistancesApi(new \GuzzleHttp\Client(), $cfg))
|
||||
->apiMeFacilityDistancesPostWithHttpInfo($request);
|
||||
});
|
||||
}
|
||||
|
||||
function omsorgcore_my_facility_distances_update(array $config, string $accessToken, string $id, array $payload): array
|
||||
{
|
||||
$request = new \OmsorgCoreClient\Model\UpdateMyFacilityDistanceRequest([
|
||||
'distance_km' => $payload['distanceKm'],
|
||||
]);
|
||||
return omsorgcore_call($config, function ($cfg) use ($accessToken, $id, $request) {
|
||||
$cfg->setAccessToken($accessToken);
|
||||
return (new \OmsorgCoreClient\Api\MyFacilityDistancesApi(new \GuzzleHttp\Client(), $cfg))
|
||||
->apiMeFacilityDistancesIdPutWithHttpInfo($id, $request);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user