@nuxt-customer-portal/timesheets 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/LICENSE +21 -0
- package/README.md +5 -0
- package/app/assets/timesheets.css +368 -0
- package/app/components/TimesheetsActivityForm.vue +61 -0
- package/app/components/TimesheetsAdminActivities.vue +323 -0
- package/app/components/TimesheetsAdminApprovals.vue +449 -0
- package/app/components/TimesheetsAdminEmptyState.vue +28 -0
- package/app/components/TimesheetsAdminListToolbar.vue +19 -0
- package/app/components/TimesheetsAdminPaginatedList.vue +95 -0
- package/app/components/TimesheetsAdminProjects.vue +234 -0
- package/app/components/TimesheetsAdminRates.vue +83 -0
- package/app/components/TimesheetsAdminReports.vue +123 -0
- package/app/components/TimesheetsAdminSectionPage.vue +135 -0
- package/app/components/TimesheetsAdminSettings.vue +15 -0
- package/app/components/TimesheetsAdministrationOrganizationPanel.vue +26 -0
- package/app/components/TimesheetsClientSettingsPanel.vue +52 -0
- package/app/components/TimesheetsClientTimesheetBrowser.vue +439 -0
- package/app/components/TimesheetsDashboardCard.vue +260 -0
- package/app/components/TimesheetsDashboardClientApprovals.vue +1 -0
- package/app/components/TimesheetsDashboardInternalApprovals.vue +1 -0
- package/app/components/TimesheetsDashboardMyTimesheets.vue +1 -0
- package/app/components/TimesheetsDashboardMyWeek.vue +1 -0
- package/app/components/TimesheetsDashboardSupplierTimesheets.vue +47 -0
- package/app/components/TimesheetsOrganizationFeaturesCard.vue +66 -0
- package/app/components/TimesheetsPageShell.vue +48 -0
- package/app/components/TimesheetsProjectDetail.vue +338 -0
- package/app/components/TimesheetsProjectForm.vue +215 -0
- package/app/components/TimesheetsSetupChecklist.vue +48 -0
- package/app/components/TimesheetsSubmissionMessages.vue +30 -0
- package/app/components/TimesheetsSubmissionTimeline.vue +89 -0
- package/app/components/TimesheetsWorkspaceSettingsForm.vue +80 -0
- package/app/composables/useTimesheetMenu.ts +69 -0
- package/app/composables/useTimesheetMutationError.ts +35 -0
- package/app/composables/useTimesheets.ts +248 -0
- package/app/composables/useTimesheetsAdminList.ts +165 -0
- package/app/composables/useTimesheetsDashboard.ts +8 -0
- package/app/pages/admin/timesheets/activities.vue +3 -0
- package/app/pages/admin/timesheets/approvals.vue +3 -0
- package/app/pages/admin/timesheets/index.vue +7 -0
- package/app/pages/admin/timesheets/internal-approvals.vue +131 -0
- package/app/pages/admin/timesheets/projects/[id].vue +57 -0
- package/app/pages/admin/timesheets/projects.vue +8 -0
- package/app/pages/admin/timesheets/rates.vue +3 -0
- package/app/pages/admin/timesheets/reports.vue +3 -0
- package/app/pages/admin/timesheets/settings.vue +3 -0
- package/app/pages/timesheets/approvals/reviewers.vue +96 -0
- package/app/pages/timesheets/approvals.vue +11 -0
- package/app/pages/timesheets/client-approvals.vue +108 -0
- package/app/pages/timesheets/client.vue +17 -0
- package/app/pages/timesheets/index.vue +1458 -0
- package/app/pages/timesheets/internal-approvals.vue +100 -0
- package/app/pages/timesheets/suppliers.vue +23 -0
- package/app/plugins/timesheets-feature.ts +122 -0
- package/i18n/locales/en.json +455 -0
- package/i18n/locales/nl.json +455 -0
- package/migrations/0000_baseline.sql +409 -0
- package/migrations/0001_remove_unused_legacy_invoice_schema.sql +31 -0
- package/migrations/0002_submission_batches.sql +47 -0
- package/migrations/0003_sync_provider_clients.sql +26 -0
- package/migrations/0004_client_reply.sql +1 -0
- package/migrations/0005_timer_rounding.sql +1 -0
- package/migrations/meta/0000_snapshot.json +3178 -0
- package/migrations/meta/_journal.json +13 -0
- package/nuxt.config.ts +20 -0
- package/package.json +61 -0
- package/portal.manifest.mjs +10 -0
- package/server/api/timesheets/admin/activities/[id]/deletion.get.ts +18 -0
- package/server/api/timesheets/admin/activities/[id].delete.ts +20 -0
- package/server/api/timesheets/admin/activities/[id].patch.ts +19 -0
- package/server/api/timesheets/admin/activities/index.get.ts +19 -0
- package/server/api/timesheets/admin/activities/index.post.ts +19 -0
- package/server/api/timesheets/admin/approvals/[id].post.ts +19 -0
- package/server/api/timesheets/admin/bootstrap.get.ts +73 -0
- package/server/api/timesheets/admin/client-settings/[clientId]/index.get.ts +25 -0
- package/server/api/timesheets/admin/client-settings/[clientId]/index.put.ts +28 -0
- package/server/api/timesheets/admin/clients/[id]/deletion.get.ts +18 -0
- package/server/api/timesheets/admin/clients/[id].delete.ts +20 -0
- package/server/api/timesheets/admin/clients/[id].patch.ts +14 -0
- package/server/api/timesheets/admin/clients/index.get.ts +18 -0
- package/server/api/timesheets/admin/clients/index.post.ts +25 -0
- package/server/api/timesheets/admin/internal-approvals/[userId].put.ts +11 -0
- package/server/api/timesheets/admin/internal-approvals/index.get.ts +8 -0
- package/server/api/timesheets/admin/internal-approvals/index.patch.ts +11 -0
- package/server/api/timesheets/admin/organization-capabilities/[organizationId].get.ts +19 -0
- package/server/api/timesheets/admin/organization-capabilities/[organizationId].patch.ts +23 -0
- package/server/api/timesheets/admin/projects/[id]/deletion.get.ts +18 -0
- package/server/api/timesheets/admin/projects/[id].delete.ts +20 -0
- package/server/api/timesheets/admin/projects/[id].get.ts +22 -0
- package/server/api/timesheets/admin/projects/[id].patch.ts +19 -0
- package/server/api/timesheets/admin/projects/index.get.ts +18 -0
- package/server/api/timesheets/admin/projects/index.post.ts +19 -0
- package/server/api/timesheets/admin/report.get.ts +26 -0
- package/server/api/timesheets/admin/settings.patch.ts +19 -0
- package/server/api/timesheets/admin/tariffs/index.put.ts +20 -0
- package/server/api/timesheets/admin/team/[userId].put.ts +24 -0
- package/server/api/timesheets/bootstrap.get.ts +24 -0
- package/server/api/timesheets/capabilities.get.ts +58 -0
- package/server/api/timesheets/client/[workspaceClientId]/index.get.ts +12 -0
- package/server/api/timesheets/client/[workspaceClientId]/reviewers.get.ts +10 -0
- package/server/api/timesheets/client/[workspaceClientId]/reviewers.put.ts +18 -0
- package/server/api/timesheets/client/[workspaceClientId]/reviews/[submissionId].post.ts +18 -0
- package/server/api/timesheets/client/approval-members.get.ts +11 -0
- package/server/api/timesheets/client/approval-suppliers.get.ts +8 -0
- package/server/api/timesheets/client/approvals.get.ts +14 -0
- package/server/api/timesheets/client/reviewer-suppliers.get.ts +10 -0
- package/server/api/timesheets/client/supplier-options.get.ts +14 -0
- package/server/api/timesheets/client/supplier-timesheets.get.ts +17 -0
- package/server/api/timesheets/client/workspaces.get.ts +11 -0
- package/server/api/timesheets/client-approvals.get.ts +18 -0
- package/server/api/timesheets/dashboard.get.ts +191 -0
- package/server/api/timesheets/entries/[id].delete.ts +18 -0
- package/server/api/timesheets/entries/[id].patch.ts +23 -0
- package/server/api/timesheets/entries/index.post.ts +22 -0
- package/server/api/timesheets/internal-approvals/[id].post.ts +9 -0
- package/server/api/timesheets/internal-approvals/index.get.ts +37 -0
- package/server/api/timesheets/internal-approvals/list.get.ts +12 -0
- package/server/api/timesheets/setup-status.get.ts +21 -0
- package/server/api/timesheets/submissions/[id]/client-reply.post.ts +20 -0
- package/server/api/timesheets/submissions/[id]/request-client-approval.post.ts +21 -0
- package/server/api/timesheets/submissions/[id]/resubmit.post.ts +10 -0
- package/server/api/timesheets/timer/index.delete.ts +18 -0
- package/server/api/timesheets/timer/index.post.ts +23 -0
- package/server/api/timesheets/weeks/[id]/submissions.post.ts +19 -0
- package/server/db/schema/timesheets.ts +383 -0
- package/server/plugins/client-sync.ts +30 -0
- package/server/plugins/openapi-contracts.ts +57 -0
- package/server/utils/timesheet-admin-listing.ts +281 -0
- package/server/utils/timesheet-email.ts +221 -0
- package/server/utils/timesheet-repository.ts +3096 -0
- package/server/utils/timesheet-validation.ts +231 -0
- package/shared/client-approval-dashboard.ts +17 -0
- package/shared/emails.ts +403 -0
- package/shared/feature.ts +184 -0
- package/shared/period-lock.ts +8 -0
- package/shared/submission-reply.ts +3 -0
- package/shared/timer-rounding.ts +2 -0
- package/shared/timesheet-dates.ts +23 -0
- package/shared/timesheet-errors.ts +13 -0
- package/shared/types/timesheet.ts +424 -0
- package/tokens.css +25 -0
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
{
|
|
2
|
+
"features": {
|
|
3
|
+
"timesheets": {
|
|
4
|
+
"title": "Urenstaten",
|
|
5
|
+
"roles": {
|
|
6
|
+
"owner": "Eigenaar",
|
|
7
|
+
"admin": "Beheerder",
|
|
8
|
+
"member": "Lid"
|
|
9
|
+
},
|
|
10
|
+
"subtitle": "Registreer je werk zolang de details nog vers zijn.",
|
|
11
|
+
"loading": "Urenstaat laden…",
|
|
12
|
+
"previousWeek": "Vorige week",
|
|
13
|
+
"nextWeek": "Volgende week",
|
|
14
|
+
"projectActivity": "Project / activiteit",
|
|
15
|
+
"total": "Totaal",
|
|
16
|
+
"weekNumber": "Week {number}",
|
|
17
|
+
"weekTotal": "Weektotaal",
|
|
18
|
+
"submissions": {
|
|
19
|
+
"events": {
|
|
20
|
+
"CLIENT_SUBMITTED": "Urenstaat ingediend ter goedkeuring",
|
|
21
|
+
"SUBMITTED": "Ingediend",
|
|
22
|
+
"REJECTED": "Teruggestuurd",
|
|
23
|
+
"APPROVED": "Goedgekeurd",
|
|
24
|
+
"REOPENED": "Heropend",
|
|
25
|
+
"DISPUTED": "Betwist",
|
|
26
|
+
"AUTO_APPROVED": "Automatisch goedgekeurd"
|
|
27
|
+
},
|
|
28
|
+
"remark": "Opmerking (optioneel)",
|
|
29
|
+
"title": "Uren indienen ter goedkeuring",
|
|
30
|
+
"description": "Kies de laatste datum die je wilt meenemen. Ingediende registraties worden vergrendeld; latere registraties blijven bewerkbaar.",
|
|
31
|
+
"cutoff": "Indienen tot en met",
|
|
32
|
+
"summary": "{range} · {entries} · {hours}",
|
|
33
|
+
"entryCount": "{count} registratie | {count} registraties",
|
|
34
|
+
"fullStatus": "Week: {period} · {status}",
|
|
35
|
+
"partialStatus": "Gedeeltelijke week: {period} · {status}",
|
|
36
|
+
"remainingWeekUnsubmitted": "Overige uren in deze week zijn nog niet ingediend",
|
|
37
|
+
"submitterMessage": "Bericht van indiener",
|
|
38
|
+
"reply": "Antwoord aan beoordelaar (optioneel)",
|
|
39
|
+
"reviewerMessage": "Bericht van beoordelaar",
|
|
40
|
+
"confirm": "Indienen ter goedkeuring",
|
|
41
|
+
"resubmit": "Gecorrigeerde uren opnieuw indienen",
|
|
42
|
+
"none": "Niet ingediend"
|
|
43
|
+
},
|
|
44
|
+
"addEntry": "Tijd toevoegen",
|
|
45
|
+
"mobile": {
|
|
46
|
+
"dayTotal": "Dagtotaal",
|
|
47
|
+
"entryCount": "{count} registratie | {count} registraties",
|
|
48
|
+
"empty": "Nog geen tijd geregistreerd",
|
|
49
|
+
"emptyDescription": "Voeg tijd toe voor deze dag om je week compleet te maken."
|
|
50
|
+
},
|
|
51
|
+
"editEntry": "Tijd bewerken",
|
|
52
|
+
"cellEntries": {
|
|
53
|
+
"title": "Tijdregistraties",
|
|
54
|
+
"noNote": "Geen notitie",
|
|
55
|
+
"addAnother": "Nog een registratie toevoegen"
|
|
56
|
+
},
|
|
57
|
+
"delete": "Verwijderen",
|
|
58
|
+
"cancel": "Annuleren",
|
|
59
|
+
"save": "Opslaan",
|
|
60
|
+
"clientAccess": {
|
|
61
|
+
"disabled": "Geen klanttoegang",
|
|
62
|
+
"view": "Klant kan bekijken",
|
|
63
|
+
"review": "Klant kan beoordelen"
|
|
64
|
+
},
|
|
65
|
+
"timesheetAccess": "Urenstaattoegang",
|
|
66
|
+
"internalApprovals": {
|
|
67
|
+
"memberFilter": "Teamlid",
|
|
68
|
+
"allMembers": "Alle teamleden",
|
|
69
|
+
"title": "Interne goedkeuringen",
|
|
70
|
+
"subtitle": "Beoordeel urenstaten van leden die aan jou zijn toegewezen.",
|
|
71
|
+
"manageTitle": "Instellingen interne goedkeuring",
|
|
72
|
+
"manageSubtitle": "Kies wie goedkeuring nodig heeft en wijs leden toe die hun urenstaten mogen beoordelen.",
|
|
73
|
+
"enabled": "Interne goedkeuringen",
|
|
74
|
+
"enabledHelp": "Wanneer dit is uitgeschakeld, wordt iedere ingediende week automatisch goedgekeurd.",
|
|
75
|
+
"required": "Goedkeuring vereist",
|
|
76
|
+
"approvers": "Goedkeurders",
|
|
77
|
+
"approversHelp": "Elke toegewezen goedkeurder kan de beoordeling afronden.",
|
|
78
|
+
"search": "Leden zoeken",
|
|
79
|
+
"emptySearch": "Geen leden gevonden voor deze zoekopdracht."
|
|
80
|
+
},
|
|
81
|
+
"organizationFeatures": {
|
|
82
|
+
"title": "Functies",
|
|
83
|
+
"workspace": "Urenstaten-werkruimte",
|
|
84
|
+
"workspaceDescription": "Laat deze organisatie uren registreren en beheren.",
|
|
85
|
+
"clientRelationships": "Klantrelaties",
|
|
86
|
+
"noClientRelationships": "Deze organisatie is geen Urenstaten-klant van een andere werkruimte.",
|
|
87
|
+
"saved": "Organisatiefuncties bijgewerkt"
|
|
88
|
+
},
|
|
89
|
+
"clientPortal": {
|
|
90
|
+
"title": "Urenstaten voor klanten",
|
|
91
|
+
"subtitle": "Bekijk goedgekeurde uren voor uw projecten.",
|
|
92
|
+
"supplier": "Leverancier",
|
|
93
|
+
"noAccess": "Geen leverancier heeft toegang tot urenstaten ingeschakeld.",
|
|
94
|
+
"reviewers": "Beoordelaars",
|
|
95
|
+
"reviewerHelp": "Selecteer wie goedkeuringsmails ontvangt en uren beoordeelt. Er moet minstens één beoordelaar toegewezen blijven.",
|
|
96
|
+
"weekPeriod": "Week {week} · {period}",
|
|
97
|
+
"history": "Geschiedenis",
|
|
98
|
+
"historyActions": {
|
|
99
|
+
"submitted": "{actor} heeft de urenstaat ingediend",
|
|
100
|
+
"approvedInternal": "{actor} heeft de urenstaat intern goedgekeurd",
|
|
101
|
+
"reopened": "{actor} heeft de urenstaat heropend",
|
|
102
|
+
"approvedClient": "{actor} heeft de uren voor de klant goedgekeurd",
|
|
103
|
+
"disputedClient": "{actor} heeft de uren voor de klant betwist"
|
|
104
|
+
},
|
|
105
|
+
"pending": "Wacht op klantbeoordeling",
|
|
106
|
+
"pendingDescription": "De leverancier heeft deze uren intern goedgekeurd. Ze wachten nu op beoordeling door een toegewezen klantbeoordelaar.",
|
|
107
|
+
"approved": "Goedgekeurd",
|
|
108
|
+
"disputed": "Betwist",
|
|
109
|
+
"approve": "Goedkeuren",
|
|
110
|
+
"dispute": "Betwisten",
|
|
111
|
+
"comment": "Reden van betwisting",
|
|
112
|
+
"saveReviewers": "Toegang voor beoordelaars wordt direct bijgewerkt",
|
|
113
|
+
"auto_approved": "Automatisch goedgekeurd"
|
|
114
|
+
},
|
|
115
|
+
"approvals": {
|
|
116
|
+
"pending": "Te beoordelen",
|
|
117
|
+
"title": "Te beoordelen urenstaten",
|
|
118
|
+
"subtitle": "Beoordeel uren van leveranciers die klaarstaan voor uw besluit.",
|
|
119
|
+
"reviewersTitle": "Beoordelaars voor goedkeuring",
|
|
120
|
+
"reviewersSubtitle": "Kies welke organisatieleden klanturenstaten mogen beoordelen.",
|
|
121
|
+
"allSuppliers": "Alle leveranciers",
|
|
122
|
+
"allStatuses": "Alle statussen",
|
|
123
|
+
"statusFilter": "Status",
|
|
124
|
+
"supplierFilter": "Leverancier",
|
|
125
|
+
"sortNewest": "Week",
|
|
126
|
+
"sortSupplier": "Leverancier",
|
|
127
|
+
"sortPerson": "Persoon",
|
|
128
|
+
"sortStatus": "Status",
|
|
129
|
+
"sortHours": "Totaal uren",
|
|
130
|
+
"reviewTimesheet": "Urenstaat beoordelen",
|
|
131
|
+
"viewDetails": "Details bekijken",
|
|
132
|
+
"back": "Terug naar goedkeuringen",
|
|
133
|
+
"totalHours": "{hours} uur",
|
|
134
|
+
"emptyFiltered": "Geen overeenkomende urenstaten",
|
|
135
|
+
"emptyFilteredDescription": "Pas de zoekopdracht of filters aan om andere goedkeuringen te bekijken.",
|
|
136
|
+
"noReviewers": "Geen beoordelaars toegewezen",
|
|
137
|
+
"noReviewersDescription": "Wijs minimaal één beoordelaar toe zodat toekomstige goedkeuringen van deze leverancier bij de juiste personen terechtkomen.",
|
|
138
|
+
"assignReviewers": "Beoordelaars toewijzen",
|
|
139
|
+
"disputeTitle": "Deze urenstaat betwisten",
|
|
140
|
+
"disputeDescription": "Leg uit wat de leverancier moet corrigeren voordat deze opnieuw wordt ingediend.",
|
|
141
|
+
"approvedMessage": "Urenstaat goedgekeurd",
|
|
142
|
+
"disputedMessage": "Urenstaat betwist",
|
|
143
|
+
"conflictTitle": "Deze beoordeling is gewijzigd",
|
|
144
|
+
"conflictDescription": "De nieuwste versie is geladen. Controleer deze voordat u het opnieuw probeert.",
|
|
145
|
+
"reviewerCount": "{count} beoordelaar | {count} beoordelaars",
|
|
146
|
+
"chooseReviewers": "Wie mag urenstaten beoordelen?",
|
|
147
|
+
"approvalUnavailable": "Goedkeuring van urenstaten is niet ingeschakeld voor je organisatie",
|
|
148
|
+
"noEligibleReviewers": "Voeg eerst leden toe aan je organisatie om beoordelaars toe te wijzen.",
|
|
149
|
+
"alwaysAccess": "Altijd toegang",
|
|
150
|
+
"additionalAccess": "Extra toegang",
|
|
151
|
+
"hasAccess": "Heeft toegang"
|
|
152
|
+
},
|
|
153
|
+
"suppliers": {
|
|
154
|
+
"title": "Urenstaten van leveranciers",
|
|
155
|
+
"subtitle": "Bekijk intern goedgekeurde uren die uw leveranciers hebben ingediend.",
|
|
156
|
+
"back": "Terug naar leveranciersurenstaten",
|
|
157
|
+
"emptyFiltered": "Geen leveranciersurenstaten gevonden",
|
|
158
|
+
"emptyFilteredDescription": "Pas uw zoekopdracht of filters aan."
|
|
159
|
+
},
|
|
160
|
+
"submit": "Week indienen",
|
|
161
|
+
"billable": "Facturabel",
|
|
162
|
+
"nonBillable": "Niet-facturabel",
|
|
163
|
+
"tariffMissingShort": "tarief vereist",
|
|
164
|
+
"errors": {
|
|
165
|
+
"generic": "Er is iets misgegaan. Probeer het opnieuw.",
|
|
166
|
+
"tariffRequiredTitle": "Een factureringstarief is vereist",
|
|
167
|
+
"tariffRequired": "Facturabele tijd kan pas worden geregistreerd wanneer je standaardtarief of een projectspecifiek tarief is ingesteld.",
|
|
168
|
+
"tariffRequiredAdmin": "Stel een standaardtarief voor dit teamlid in of voeg een projectspecifieke uitzondering toe voordat je facturabele tijd registreert.",
|
|
169
|
+
"tariffRequiredMember": "Vraag een beheerder van Urenstaten om je standaardtarief of een tarief voor dit project in te stellen.",
|
|
170
|
+
"memberTariffMissingTitle": "Je kunt momenteel alleen niet-facturabele tijd registreren",
|
|
171
|
+
"memberTariffMissingDescription": "Je standaardtarief is nog niet ingesteld. Facturabele activiteiten blijven niet beschikbaar, tenzij een beheerder voor dat project een tarief heeft ingesteld.",
|
|
172
|
+
"configureRates": "Teamtarieven instellen",
|
|
173
|
+
"entryDisabledTitle": "Tijdregistratie is uitgeschakeld",
|
|
174
|
+
"entryDisabled": "Je kunt voor deze organisatie geen tijd registreren of indienen. Neem contact op met een beheerder als je toegang nodig hebt.",
|
|
175
|
+
"runningTimer": "Stop de lopende timer van dit teamlid voordat je tijdregistratie uitschakelt.",
|
|
176
|
+
"timerStartTitle": "De timer kon niet worden gestart",
|
|
177
|
+
"internalApproverRequiredTitle": "Een goedkeurder is vereist",
|
|
178
|
+
"internalApproverRequired": "Er is geen goedkeurder aan je toegewezen. Wijs iemand toe of schakel goedkeuring voor jouw account uit bij Instellingen interne goedkeuring.",
|
|
179
|
+
"configureApprovers": "Goedkeuringen instellen"
|
|
180
|
+
},
|
|
181
|
+
"setup": {
|
|
182
|
+
"title": "Rond de inrichting van Urenstaten af",
|
|
183
|
+
"description": "Voltooi deze stappen voordat je team facturabele tijd gaat registreren.",
|
|
184
|
+
"waitingTitle": "Wachten tot een beheerder Urenstaten heeft ingericht",
|
|
185
|
+
"waitingDescription": "De inrichting van Urenstaten is nog niet voltooid. Een organisatiebeheerder moet de benodigde klanten, activiteiten, projecten en teamtarieven instellen.",
|
|
186
|
+
"client": "Voeg een klant toe",
|
|
187
|
+
"activity": "Maak een actieve activiteit",
|
|
188
|
+
"project": "Configureer een actief project",
|
|
189
|
+
"rates": "Voeg standaardtarieven toe ({count} ontbreken)"
|
|
190
|
+
},
|
|
191
|
+
"navigation": {
|
|
192
|
+
"myTimesheet": "Urenstaten",
|
|
193
|
+
"manage": "Urenstaten beheren"
|
|
194
|
+
},
|
|
195
|
+
"status": {
|
|
196
|
+
"draft": "Concept",
|
|
197
|
+
"submitted": "Ingediend",
|
|
198
|
+
"approved": "Goedgekeurd",
|
|
199
|
+
"rejected": "Aanpassing nodig"
|
|
200
|
+
},
|
|
201
|
+
"timer": {
|
|
202
|
+
"start": "Timer starten",
|
|
203
|
+
"stop": "Stoppen",
|
|
204
|
+
"running": "Timer loopt",
|
|
205
|
+
"todayLocked": "De timer kan niet worden gestart omdat de uren van vandaag zijn ingediend of goedgekeurd. Heropen de indiening om vandaag meer tijd te registreren."
|
|
206
|
+
},
|
|
207
|
+
"fields": {
|
|
208
|
+
"project": "Project",
|
|
209
|
+
"activity": "Activiteit",
|
|
210
|
+
"date": "Datum",
|
|
211
|
+
"hours": "Uren",
|
|
212
|
+
"minutes": "Minuten",
|
|
213
|
+
"note": "Notitie"
|
|
214
|
+
},
|
|
215
|
+
"validation": {
|
|
216
|
+
"required": "Dit veld is verplicht",
|
|
217
|
+
"validDate": "Vul een geldige datum in",
|
|
218
|
+
"periodLocked": "Deze datum valt in een ingediende of goedgekeurde periode.",
|
|
219
|
+
"activityNameLength": "Vul minimaal 2 tekens in",
|
|
220
|
+
"projectNameLength": "Vul minimaal 2 tekens in",
|
|
221
|
+
"clientNameLength": "Vul minimaal 2 tekens in",
|
|
222
|
+
"organizationSlugInvalid": "Gebruik alleen kleine letters, cijfers en enkele koppeltekens",
|
|
223
|
+
"selectActivity": "Selecteer minimaal één activiteit",
|
|
224
|
+
"currencyLength": "Gebruik een valutacode van 3 letters",
|
|
225
|
+
"rejectionReason": "Vul een reden in voor het afwijzen van deze urenstaat",
|
|
226
|
+
"hoursRange": "Uren moeten tussen 0 en 24 liggen",
|
|
227
|
+
"minutesRange": "Minuten moeten tussen 0 en 59 liggen",
|
|
228
|
+
"positiveDuration": "Vul een tijdsduur groter dan nul in",
|
|
229
|
+
"maximumDuration": "De tijdsduur mag niet langer zijn dan 24 uur"
|
|
230
|
+
},
|
|
231
|
+
"dashboard": {
|
|
232
|
+
"duration": {
|
|
233
|
+
"one": "{value} uur",
|
|
234
|
+
"other": "{value} uren"
|
|
235
|
+
},
|
|
236
|
+
"error": "Dit urenoverzicht kon niet worden geladen.",
|
|
237
|
+
"retry": "Opnieuw proberen",
|
|
238
|
+
"unavailable": "Dit overzicht is niet beschikbaar.",
|
|
239
|
+
"open": "Openen",
|
|
240
|
+
"review": "Beoordelen",
|
|
241
|
+
"viewAll": "Alles bekijken",
|
|
242
|
+
"myWeek": {
|
|
243
|
+
"previousSubmissions": "Eerdere indieningen",
|
|
244
|
+
"title": "Mijn week",
|
|
245
|
+
"period": "Week {week} · {start} t/m {end}",
|
|
246
|
+
"compactPeriod": "{start} t/m {end}",
|
|
247
|
+
"rejected": "Wijzigingen gevraagd",
|
|
248
|
+
"timerRunning": "Er loopt momenteel een timer."
|
|
249
|
+
},
|
|
250
|
+
"internalApprovals": {
|
|
251
|
+
"title": "Interne urenstaatgoedkeuringen",
|
|
252
|
+
"empty": "Geen recente urenstaten."
|
|
253
|
+
},
|
|
254
|
+
"clientApprovals": {
|
|
255
|
+
"title": "Te beoordelen urenstaten",
|
|
256
|
+
"empty": "Er wachten geen klanturenstaten op jouw beoordeling.",
|
|
257
|
+
"noReviewer": "Er is nog geen beoordelaar toegewezen."
|
|
258
|
+
},
|
|
259
|
+
"supplierTimesheets": {
|
|
260
|
+
"title": "Urenstaten van leveranciers",
|
|
261
|
+
"empty": "Er zijn geen urenstaten van leveranciers beschikbaar."
|
|
262
|
+
},
|
|
263
|
+
"myTimesheets": {
|
|
264
|
+
"title": "Mijn ingediende urenstaten",
|
|
265
|
+
"empty": "Geen eerdere indieningen."
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
"admin": {
|
|
269
|
+
"clientApprovals": "Klantgoedkeuringen",
|
|
270
|
+
"refresh": "Vernieuwen",
|
|
271
|
+
"clients": "Klanten",
|
|
272
|
+
"projects": "Projecten",
|
|
273
|
+
"activities": "Activiteiten",
|
|
274
|
+
"teamRates": "Teamtarieven",
|
|
275
|
+
"sectionSubtitles": {
|
|
276
|
+
"approvals": "Beoordeel ingediende urenstaten die op goedkeuring wachten.",
|
|
277
|
+
"projects": "Beheer klantprojecten, activiteiten, budgetten en tarieven.",
|
|
278
|
+
"activities": "Beheer de activiteiten die je team kan gebruiken bij het registreren van tijd.",
|
|
279
|
+
"rates": "Beheer uurtarieven en wie tijd kan registreren.",
|
|
280
|
+
"settings": "Configureer de urenregistratiewerkruimte en de standaardinstellingen.",
|
|
281
|
+
"reports": "Bekijk geregistreerde tijd en teamprestaties."
|
|
282
|
+
},
|
|
283
|
+
"canEnterTime": "Kan tijd registreren",
|
|
284
|
+
"canEnterTimeFor": "Sta toe dat {name} tijd registreert",
|
|
285
|
+
"reports": "Rapporten",
|
|
286
|
+
"noClientsTitle": "Nog geen klanten",
|
|
287
|
+
"noClientsDescription": "Koppel je eerste klantorganisatie zodat je projecten kunt maken en uren kunt registreren.",
|
|
288
|
+
"createFirstClient": "Maak je eerste klant",
|
|
289
|
+
"noProjectsTitle": "Nog geen projecten",
|
|
290
|
+
"noProjectsDescription": "Maak een project voor een klant om activiteiten, budgetten, tarieven en geregistreerde uren te organiseren.",
|
|
291
|
+
"createFirstProject": "Maak je eerste project",
|
|
292
|
+
"noActivitiesTitle": "Nog geen activiteiten",
|
|
293
|
+
"noActivitiesDescription": "Maak een activiteit om het factureerbare en niet-factureerbare werk te bepalen dat je team kan registreren.",
|
|
294
|
+
"createFirstActivity": "Maak je eerste activiteit",
|
|
295
|
+
"from": "Van",
|
|
296
|
+
"noApprovals": "Er wacht niets op je aandacht",
|
|
297
|
+
"approve": "Goedkeuren",
|
|
298
|
+
"reject": "Terugsturen",
|
|
299
|
+
"reopen": "Heropenen",
|
|
300
|
+
"rejectTimesheet": "Urenstaat terugsturen",
|
|
301
|
+
"rejectionReason": "Wat moet er worden aangepast?",
|
|
302
|
+
"reviewDetails": "Details beoordelen",
|
|
303
|
+
"entryCount": "{count} registratie | {count} registraties",
|
|
304
|
+
"noNote": "Geen notitie toegevoegd",
|
|
305
|
+
"newProject": "Nieuw project",
|
|
306
|
+
"backToProjects": "Terug naar projecten",
|
|
307
|
+
"openProject": "Open {name}",
|
|
308
|
+
"projectLoading": "Project laden",
|
|
309
|
+
"projectNotFound": "Dit project kon niet worden gevonden",
|
|
310
|
+
"projectDetails": "Projectgegevens",
|
|
311
|
+
"projectLifecycle": "Projectstatus en verwijderen",
|
|
312
|
+
"archiveProject": "Project archiveren",
|
|
313
|
+
"restoreProject": "Project herstellen",
|
|
314
|
+
"projectStatus": {
|
|
315
|
+
"active": "Actief",
|
|
316
|
+
"archived": "Gearchiveerd"
|
|
317
|
+
},
|
|
318
|
+
"editProject": "Project bewerken",
|
|
319
|
+
"deleteProject": "Project verwijderen",
|
|
320
|
+
"checkingProjectDeletion": "Controleren of dit project kan worden verwijderd…",
|
|
321
|
+
"projectHasNoTimeEntries": "Dit project heeft geen urenregistraties en kan worden verwijderd.",
|
|
322
|
+
"projectHasTimeEntries": "Dit project heeft bestaande urenregistraties en kan niet worden verwijderd.",
|
|
323
|
+
"typeProjectNameToDelete": "Typ “{name}” om te bevestigen dat je dit project permanent wilt verwijderen.",
|
|
324
|
+
"projectNameConfirmation": "Projectnaam",
|
|
325
|
+
"client": "Klant",
|
|
326
|
+
"internalOrganization": "{name} — Intern",
|
|
327
|
+
"internalProjectHelp": "Je kunt een intern project voor je eigen bedrijf maken, of klanten beheren om externe projecten toe te voegen.",
|
|
328
|
+
"newClient": "Nieuwe klant",
|
|
329
|
+
"linkClient": "Klant koppelen",
|
|
330
|
+
"linkExistingOrganization": "Bestaande organisatie koppelen",
|
|
331
|
+
"createOrganization": "Nieuwe organisatie maken",
|
|
332
|
+
"clientOrganizationOption": "Kies hoe je de klantorganisatie wilt toevoegen",
|
|
333
|
+
"organizationName": "Organisatienaam",
|
|
334
|
+
"organizationSlug": "Organisatie-URL-identificatie",
|
|
335
|
+
"createAndLinkClient": "Klant maken en koppelen",
|
|
336
|
+
"removeClient": "Klant verwijderen",
|
|
337
|
+
"organization": "Organisatie",
|
|
338
|
+
"manageClients": "Klanten beheren",
|
|
339
|
+
"noAvailableClientOrganizations": "Er zijn geen andere toegankelijke organisaties beschikbaar om te koppelen.",
|
|
340
|
+
"createClientFirst": "Voeg een klant toe voordat je het eerste project maakt.",
|
|
341
|
+
"close": "Sluiten",
|
|
342
|
+
"code": "Code",
|
|
343
|
+
"hoursBudget": "Urenbudget",
|
|
344
|
+
"moneyBudget": "Geldbudget",
|
|
345
|
+
"projectRates": "Projectspecifieke tarieven",
|
|
346
|
+
"saveOverrides": "Afwijkingen opslaan",
|
|
347
|
+
"workspaceSettings": "Werkruimte-instellingen",
|
|
348
|
+
"clientSettings": "Urenstaten-instellingen voor klant",
|
|
349
|
+
"currency": "Valuta",
|
|
350
|
+
"timezone": "Tijdzone",
|
|
351
|
+
"createProject": "Project maken",
|
|
352
|
+
"newActivity": "Nieuwe activiteit",
|
|
353
|
+
"createActivity": "Activiteit maken",
|
|
354
|
+
"editActivity": "Activiteit bewerken",
|
|
355
|
+
"deleteActivity": "Activiteit verwijderen",
|
|
356
|
+
"checkingActivityDeletion": "Controleren of deze activiteit kan worden verwijderd…",
|
|
357
|
+
"activityHasNoTimeEntries": "Deze activiteit heeft geen urenregistraties en kan worden verwijderd.",
|
|
358
|
+
"activityHasTimeEntries": "Deze activiteit heeft bestaande urenregistraties en kan niet worden verwijderd.",
|
|
359
|
+
"typeActivityNameToDelete": "Typ “{name}” om te bevestigen dat je deze activiteit permanent wilt verwijderen.",
|
|
360
|
+
"activityNameConfirmation": "Activiteitsnaam",
|
|
361
|
+
"active": "Actief",
|
|
362
|
+
"inactive": "Inactief",
|
|
363
|
+
"list": {
|
|
364
|
+
"search": "Zoeken…",
|
|
365
|
+
"filters": "Filters",
|
|
366
|
+
"sort": "Sorteren",
|
|
367
|
+
"direction": "Sorteerrichting wijzigen",
|
|
368
|
+
"totalRecords": "{count} registratie | {count} registraties",
|
|
369
|
+
"allClients": "Alle klanten",
|
|
370
|
+
"clientFilter": "Filter op klant",
|
|
371
|
+
"projectStatusFilter": "Filter op projectstatus",
|
|
372
|
+
"allProjectStatuses": "Alle projectstatussen",
|
|
373
|
+
"configurationFilter": "Urenstaattoegang",
|
|
374
|
+
"allConfigurations": "Alle configuraties",
|
|
375
|
+
"configured": "Ingesteld",
|
|
376
|
+
"incomplete": "Onvolledig",
|
|
377
|
+
"statusFilter": "Filter op status",
|
|
378
|
+
"allStatuses": "Alle statussen",
|
|
379
|
+
"billingFilter": "Filter op facturatie",
|
|
380
|
+
"allBilling": "Alle facturatietypen",
|
|
381
|
+
"billable": "Facturabel",
|
|
382
|
+
"nonBillable": "Niet-facturabel",
|
|
383
|
+
"overdueFilter": "Betaalstatus",
|
|
384
|
+
"allPaymentStates": "Alle betaalstatussen",
|
|
385
|
+
"overdue": "Te laat",
|
|
386
|
+
"notOverdue": "Niet te laat",
|
|
387
|
+
"sortName": "Naam",
|
|
388
|
+
"sortClient": "Klant",
|
|
389
|
+
"sortStartDate": "Startdatum",
|
|
390
|
+
"sortActive": "Actieve status",
|
|
391
|
+
"sortBilling": "Facturatietype"
|
|
392
|
+
},
|
|
393
|
+
"to": "Tot",
|
|
394
|
+
"all": "Alles",
|
|
395
|
+
"runReport": "Rapport maken",
|
|
396
|
+
"exportCsv": "CSV exporteren",
|
|
397
|
+
"totalHours": "Totaal uren",
|
|
398
|
+
"billableHours": "Facturabele uren",
|
|
399
|
+
"nonBillableHours": "Niet-facturabele uren",
|
|
400
|
+
"billableAmount": "Facturabel bedrag",
|
|
401
|
+
"person": "Persoon",
|
|
402
|
+
"hours": "Uren",
|
|
403
|
+
"amount": "Bedrag",
|
|
404
|
+
"clientApprovalsSubtitle": "Bekijk klantbeslissingen en reageer op betwiste urenstaten.",
|
|
405
|
+
"timerRounding": "Timer naar boven afronden op (minuten)",
|
|
406
|
+
"timerRoundingHelp": "Rond gestopte timers naar boven af op dit interval (1–60 minuten). Bijvoorbeeld: 16 minuten wordt 30 bij een interval van 15 minuten.",
|
|
407
|
+
"noBudget": "Geen budget",
|
|
408
|
+
"clearBudget": "Budget wissen"
|
|
409
|
+
},
|
|
410
|
+
"messages": {
|
|
411
|
+
"saved": "Tijd opgeslagen",
|
|
412
|
+
"saveError": "De wijziging kon niet worden opgeslagen",
|
|
413
|
+
"projectCreated": "Project gemaakt",
|
|
414
|
+
"projectUpdated": "Project bijgewerkt",
|
|
415
|
+
"projectArchived": "Project gearchiveerd",
|
|
416
|
+
"projectRestored": "Project hersteld",
|
|
417
|
+
"projectDeleted": "Project verwijderd",
|
|
418
|
+
"rateSaved": "Tarief opgeslagen",
|
|
419
|
+
"settingsSaved": "Instellingen opgeslagen"
|
|
420
|
+
},
|
|
421
|
+
"email": {
|
|
422
|
+
"messages": {
|
|
423
|
+
"internal-requested": "Interne goedkeuring gevraagd",
|
|
424
|
+
"internal-approved": "Urenstaat intern goedgekeurd",
|
|
425
|
+
"internal-rejected": "Urenstaat intern afgewezen",
|
|
426
|
+
"internal-reopened": "Urenstaat heropend",
|
|
427
|
+
"client-requested": "Klantgoedkeuring gevraagd",
|
|
428
|
+
"client-approved": "Urenstaat goedgekeurd door klant",
|
|
429
|
+
"client-disputed": "Urenstaat betwist door klant"
|
|
430
|
+
},
|
|
431
|
+
"placeholders": {
|
|
432
|
+
"person_name": "Indiener",
|
|
433
|
+
"organization_name": "Organisatie",
|
|
434
|
+
"period": "Periode",
|
|
435
|
+
"period_start": "Begin periode",
|
|
436
|
+
"period_end": "Einde periode",
|
|
437
|
+
"client_name": "Klant",
|
|
438
|
+
"comment": "Beoordelingsopmerking",
|
|
439
|
+
"action_url": "Portaallink",
|
|
440
|
+
"recipient_name": "Naam geadresseerde"
|
|
441
|
+
}
|
|
442
|
+
},
|
|
443
|
+
"clientSubmissionErrors": {
|
|
444
|
+
"title": "Urenstaat kon niet worden ingediend",
|
|
445
|
+
"accessRequired": "Schakel goedkeuring van urenstaten in bij de klantinstellingen en probeer het opnieuw.",
|
|
446
|
+
"invoiced": "Een deel van deze uren is al gekoppeld aan een factuur. Deze kunnen niet ter goedkeuring aan de klant worden voorgelegd.",
|
|
447
|
+
"notReady": "Deze urenstaat moet eerst intern worden goedgekeurd. Vernieuw de pagina voor de actuele status.",
|
|
448
|
+
"empty": "Deze indiening bevat geen uren voor deze klant.",
|
|
449
|
+
"exists": "Deze urenstaat is al naar de klant verstuurd. Vernieuw de pagina voor de actuele status.",
|
|
450
|
+
"unauthorized": "Alleen een eigenaar of beheerder van de werkruimte kan urenstaten ter goedkeuring aan de klant voorleggen.",
|
|
451
|
+
"generic": "De urenstaat kon niet worden ingediend. Probeer het opnieuw. Neem contact op met je beheerder als het probleem blijft bestaan."
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|