Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Development to main #73

Merged
merged 9 commits into from
Dec 2, 2024
1 change: 1 addition & 0 deletions appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
'klanten' => ['url' => 'api/klanten'],
'berichten' => ['url' => 'api/berichten'],
'contactmomenten' => ['url' => 'api/contactmomenten'],
'medewerkers' => ['url' => 'api/medewerkers'],

],
'routes' => [
Expand Down
134 changes: 134 additions & 0 deletions lib/Controller/MedewerkersController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
<?php

namespace OCA\ZaakAfhandelApp\Controller;

use OCA\ZaakAfhandelApp\Service\ObjectService;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IRequest;

/**
* Controller for handling employees (medewerkers) operations
*/
class MedewerkersController extends Controller
{
public function __construct(
$appName,
IRequest $request,
private readonly ObjectService $objectService,
)
{
parent::__construct($appName, $request);
}

/**
* Return (and search) all employees
*
* @NoAdminRequired
* @NoCSRFRequired
*
* @return JSONResponse
*/
public function index(): JSONResponse
{
// Retrieve all request parameters
$requestParams = $this->request->getParams();

// Fetch employees based on filters and order
$data = $this->objectService->getResultArrayForRequest('medewerkers', $requestParams);

// Return JSON response
return new JSONResponse($data);
}

/**
* Read a single employee
*
* @NoAdminRequired
* @NoCSRFRequired
*
* @return JSONResponse
*/
public function show(string $id): JSONResponse
{
// Fetch the employee by its ID
$object = $this->objectService->getObject('medewerkers', $id);

// Return the employee as a JSON response
return new JSONResponse($object);
}

/**
* Create an employee
*
* @NoAdminRequired
* @NoCSRFRequired
*
* @return JSONResponse
*/
public function create(): JSONResponse
{
// Get all parameters from the request
$data = $this->request->getParams();

// Remove the 'id' field if it exists, as we're creating a new employee
unset($data['id']);

// Save the new employee
$object = $this->objectService->saveObject('medewerkers', $data);

// Return the created employee as a JSON response
return new JSONResponse($object);
}

/**
* Update an employee
*
* @NoAdminRequired
* @NoCSRFRequired
*
* @return JSONResponse
*/
public function update(string $id): JSONResponse
{
// Get all parameters from the request
$data = $this->request->getParams();

// Save the updated employee
$object = $this->objectService->saveObject('medewerkers', $data);

// Return the updated employee as a JSON response
return new JSONResponse($object);
}

/**
* Delete an employee
*
* @NoAdminRequired
* @NoCSRFRequired
*
* @return JSONResponse
*/
public function destroy(string $id): JSONResponse
{
// Delete the employee
$result = $this->objectService->deleteObject('medewerkers', $id);

// Return the result as a JSON response
return new JSONResponse(['success' => $result], $result === true ? '200' : '404');
}

/**
* Get audit trail for a specific employee
*
* @NoAdminRequired
* @NoCSRFRequired
*
* @return JSONResponse
*/
public function getAuditTrail(string $id): JSONResponse
{
$auditTrail = $this->objectService->getAuditTrail('medewerkers', $id);
return new JSONResponse($auditTrail);
}
}
7 changes: 5 additions & 2 deletions lib/Controller/SettingsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public function index(): JSONResponse
{
// Initialize the data array
$data = [];
$data['objectTypes'] = ['berichten', 'besluiten', 'documenten', 'klanten', 'resultaten', 'taken', 'informatieobjecten', 'organisaties', 'personen', 'zaken', 'rollen', 'statusen', 'zaakeigenschappen', 'zaaktypen','contactmomenten'];
$data['objectTypes'] = ['berichten', 'besluiten', 'documenten', 'klanten', 'resultaten', 'taken', 'informatieobjecten', 'organisaties', 'personen', 'zaken', 'rollen', 'statusen', 'zaakeigenschappen', 'zaaktypen','contactmomenten', 'medewerkers'];
$data['openRegisters'] = false;
$data['availableRegisters'] = [];

Expand Down Expand Up @@ -102,7 +102,10 @@ public function index(): JSONResponse
'zaaktypen_register' => '',
'contactmomenten_source' => 'internal',
'contactmomenten_schema' => '',
'contactmomenten_register' => ''
'contactmomenten_register' => '',
'medewerkers_source' => 'internal',
'medewerkers_schema' => '',
'medewerkers_register' => ''
];

// Get the current values for the object types from the configuration
Expand Down
1 change: 1 addition & 0 deletions src/entities/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ export * from './klanten/index.js'
export * from './taak/index.js'
export * from './bericht/index.js'
export * from './rol/index.js'
export * from './medewerkers/index.js'
export * from './contactmoment/index.js'
2 changes: 1 addition & 1 deletion src/entities/klanten/klanten.mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export const mockKlantData = (): TKlant[] => [
achternaam: 'Doe',
bsn: '1234567890',
geboortedatum: '1990-01-01',
isMale: true,
geslacht: 'man',
land: 'Nederland',
telefoonnummer: '0612345678',
emailadres: '[email protected]',
Expand Down
6 changes: 3 additions & 3 deletions src/entities/klanten/klanten.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export class Klant implements TKlant {
public achternaam: string
public bsn: string
public geboortedatum: string
public isMale: boolean
public geslacht: "man" | "vrouw" | "overige"
public land: string

public telefoonnummer: string
Expand Down Expand Up @@ -42,7 +42,7 @@ export class Klant implements TKlant {
this.achternaam = source.achternaam || ''
this.bsn = source.bsn || ''
this.geboortedatum = source.geboortedatum || ''
this.isMale = source.isMale || false
this.geslacht = source.geslacht || null
this.land = source.land || ''
this.telefoonnummer = source.telefoonnummer || ''
this.emailadres = source.emailadres || ''
Expand Down Expand Up @@ -71,7 +71,7 @@ export class Klant implements TKlant {
achternaam: z.string(),
bsn: z.string(),
geboortedatum: z.string(),
isMale: z.boolean(),
geslacht: z.enum(["man", "vrouw", "overige"]).or(z.null()),
land: z.string(),
telefoonnummer: z.string(),
emailadres: z.string().email(),
Expand Down
2 changes: 1 addition & 1 deletion src/entities/klanten/klanten.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export type TKlant = {
achternaam: string;
bsn: string;
geboortedatum: string;
isMale: boolean;
geslacht: 'man' | 'vrouw' | 'overige';
land: string;
telefoonnummer: string;
emailadres: string;
Expand Down
3 changes: 3 additions & 0 deletions src/entities/medewerkers/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export * from './medewerkers.ts'
export * from './medewerkers.types.ts'
export * from './medewerkers.mock.ts'
14 changes: 14 additions & 0 deletions src/entities/medewerkers/medewerkers.mock.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Medewerker } from './medewerkers'
import { TMedewerker } from './medewerkers.types'

export const mockMedewerkerData = (): TMedewerker[] => [
{
id: '15551d6f-44e3-43f3-a9d2-59e583c91eb0',
voornaam: 'John',
tussenvoegsel: 'de',
achternaam: 'Doe',
email: '[email protected]',
},
]

export const mockMedewerker = (data: TMedewerker[] = mockMedewerkerData()): TMedewerker[] => data.map(item => new Medewerker(item))
12 changes: 12 additions & 0 deletions src/entities/medewerkers/medewerkers.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Medewerker } from './medewerkers'
import { mockMedewerkerData } from './medewerkers.mock'

describe('Medewerker Entity', () => {
it('should create a Medewerker entity with full data', () => {
const medewerker = new Medewerker(mockMedewerkerData()[0])

expect(medewerker).toBeInstanceOf(Medewerker)
expect(medewerker).toEqual(mockMedewerkerData()[0])
expect(medewerker.validate().success).toBe(true)
})
})
33 changes: 33 additions & 0 deletions src/entities/medewerkers/medewerkers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { SafeParseReturnType, z } from 'zod'
import { TMedewerker } from './medewerkers.types'

export class Medewerker implements TMedewerker {

public id: string
public voornaam: string
public tussenvoegsel: string
public achternaam: string
public email: string

constructor(source: TMedewerker) {
this.id = source.id || ''
this.voornaam = source.voornaam || ''
this.tussenvoegsel = source.tussenvoegsel || ''
this.achternaam = source.achternaam || ''
this.email = source.email || ''

}

public validate(): SafeParseReturnType<TMedewerker, unknown> {
const schema = z.object({
id: z.string().optional(),
voornaam: z.string().min(1),
tussenvoegsel: z.string(),
achternaam: z.string(),
email: z.string().email(),
})

return schema.safeParse(this)
}

}
7 changes: 7 additions & 0 deletions src/entities/medewerkers/medewerkers.types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export type TMedewerker = {
id: string;
voornaam: string;
tussenvoegsel: string;
achternaam: string;
email: string;
}
5 changes: 4 additions & 1 deletion src/modals/Modals.vue
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,14 @@ import { navigationStore } from '../store/store.js'
<ViewKlantAuditTrail v-if="navigationStore.modal === 'viewKlantAuditTrail'" />
<EditBericht />
<ViewBerichtAuditTrail v-if="navigationStore.modal === 'viewBerichtAuditTrail'" />
<EditTaak />
<EditTaak v-if="navigationStore.modal === 'editTaak'" />
<WidgetTaakForm v-if="navigationStore.modal === 'widgetTaakForm'" />
<ViewTaakAuditTrail v-if="navigationStore.modal === 'viewTaakAuditTrail'" />
<EditRol />
<ViewZaakAuditTrail v-if="navigationStore.modal === 'viewZaakAuditTrail'" />
<ViewKlantRegister v-if="navigationStore.modal === 'viewKlantRegister'" />
<DeleteContactMoment v-if="navigationStore.modal === 'deleteContactMoment'" />
<EditMedewerker v-if="navigationStore.modal === 'editMedewerker'" />
</div>
</template>

Expand All @@ -37,6 +38,7 @@ import EditRol from './rollen/EditRol.vue'
import ViewZaakAuditTrail from './zaken/ViewZaakAuditTrail.vue'
import ViewKlantRegister from './klantRegister/ViewKlantRegister.vue'
import DeleteContactMoment from './contactMomenten/DeleteContactMoment.vue'
import EditMedewerker from './medewerkers/EditMedewerker.vue'
export default {
name: 'Modals',
components: {
Expand All @@ -54,6 +56,7 @@ export default {
ViewZaakAuditTrail,
ViewKlantRegister,
DeleteContactMoment,
EditMedewerker,
},
}
</script>
Loading
Loading