Conversie codeigniter 4

This commit is contained in:
2026-01-09 11:41:28 +01:00
parent dbd8c8aed2
commit f0b9c6ad40
242 changed files with 20034 additions and 346 deletions
+35
View File
@@ -0,0 +1,35 @@
<div class="AUTHORISATION">
<div class="row">
<div class="col-xs-12">
<table class="table table-condensed">
<thead>
<tr>
<th>
pagina
</th>
<th v-for="(role, roleIndex) in roles" align="center">
<span>{{ role.rolename }}</span>
</th>
</tr>
</thead>
<tbody>
<tr v-for="(page, pageIndex) in pages">
<td>
<span v-bind:class="{'main-menu': page.typePage == 'MAIN', 'sub-page': page.typePage != 'MAIN'}" >
{{ page.pagename }}
</span>
</td>
<td v-for="(accessPage, roleIndex) in page.accessPages" align="center">
<i v-if="accessPage.access"
v-on:click="toggleAccess(pageIndex, roleIndex)"
class="icon fa-check pointer"></i>
<i v-if="! accessPage.access"
v-on:click="toggleAccess(pageIndex, roleIndex)"
class="icon fa-square-o pointer"></i>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
+7
View File
@@ -0,0 +1,7 @@
<div class="row">
<div class="col-xs-offset-3 col-xs-6">
<div class="jumbotron">
<h2 style="text-align: center">Backup DBOIS</h2>
</div>
</div>
</div>
@@ -0,0 +1,291 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tweefactorauthenticatie Instellingen - DBOIS</title>
<link rel="icon" href="/css/images/dbo-01-80x80.png" type="image/png">
<link rel="stylesheet" href="/css/vendor/bootstrap.min.css?v=<?=$version?>">
<link rel="stylesheet" href="/css/vendor/bootstrap-extend.css?v=<?=$version?>">
<link rel="stylesheet" href="/css/vendor/site.min.css?v=<?=$version?>">
<style>
.twofactor-container {
max-width: 800px;
margin: 50px auto;
padding: 20px;
}
.method-card {
border: 2px solid #ddd;
border-radius: 8px;
padding: 20px;
margin: 15px 0;
cursor: pointer;
transition: all 0.3s;
}
.method-card:hover {
border-color: #348eda;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.method-card.active {
border-color: #68b90f;
background-color: #f0f8ff;
}
.qr-code-container {
text-align: center;
margin: 20px 0;
}
.qr-code-container img {
max-width: 250px;
}
.verification-code-input {
text-align: center;
font-size: 24px;
letter-spacing: 5px;
font-weight: bold;
}
.secret-code {
background-color: #f5f5f5;
padding: 10px;
font-family: monospace;
word-break: break-all;
border-radius: 4px;
}
.alert {
margin: 15px 0;
}
</style>
</head>
<body>
<div class="twofactor-container">
<div class="panel">
<div class="panel-heading">
<h3 class="panel-title">Tweefactorauthenticatie Instellingen</h3>
</div>
<div class="panel-body">
<!-- Current Status -->
<div class="alert alert-info" data-bind="visible: !enabled()">
<strong>Tweefactorauthenticatie is momenteel uitgeschakeld.</strong>
<p>Schakel 2FA in om een extra beveiligingslaag aan uw account toe te voegen.</p>
</div>
<div class="alert alert-success" data-bind="visible: enabled">
<strong>Tweefactorauthenticatie is ingeschakeld</strong>
<p>Huidige methode: <span data-bind="text: currentMethod"></span></p>
</div>
<!-- Enable/Disable Section -->
<div data-bind="visible: !enabled()">
<h4>Kies een 2FA methode:</h4>
<div class="method-card" data-bind="click: function() { selectMethod('email'); }, css: { active: selectedMethod() === 'email' }">
<h5><i class="icon wb-envelope" aria-hidden="true"></i> E-mail</h5>
<p>Ontvang een eenmalige code via e-mail bij elke inlogpoging.</p>
</div>
<div class="method-card" data-bind="click: function() { selectMethod('authenticator'); }, css: { active: selectedMethod() === 'authenticator' }">
<h5><i class="icon wb-mobile" aria-hidden="true"></i> Google Authenticator</h5>
<p>Gebruik een authenticator app zoals Google Authenticator of Authy.</p>
</div>
<button class="btn btn-primary btn-lg" data-bind="click: enableTwoFactor, enable: selectedMethod">
2FA Inschakelen
</button>
</div>
<!-- Authenticator Setup -->
<div data-bind="visible: showAuthenticatorSetup">
<hr>
<h4>Google Authenticator Instellen</h4>
<div class="qr-code-container">
<p>Scan deze QR-code met uw authenticator app:</p>
<img data-bind="attr: { src: qrCodeUrl }" alt="QR Code">
<p class="mt-20">Of voer deze code handmatig in:</p>
<div class="secret-code" data-bind="text: secret"></div>
</div>
<div class="form-group">
<label>Voer de 6-cijferige code in om te verifiëren:</label>
<input type="text"
class="form-control verification-code-input"
maxlength="6"
data-bind="textInput: verificationCode, event: { keyup: handleVerificationKeyup }">
</div>
<button class="btn btn-success" data-bind="click: verifyAuthenticatorSetup, enable: verificationCode().length === 6">
Verifiëren
</button>
</div>
<!-- Change Method -->
<div data-bind="visible: enabled() && !showAuthenticatorSetup()">
<hr>
<h4>Methode Wijzigen</h4>
<div class="method-card" data-bind="click: function() { selectMethod('email'); }, css: { active: changeToMethod() === 'email' }">
<h5><i class="icon wb-envelope" aria-hidden="true"></i> E-mail</h5>
<p>Ontvang een eenmalige code via e-mail bij elke inlogpoging.</p>
</div>
<div class="method-card" data-bind="click: function() { selectMethod('authenticator'); }, css: { active: changeToMethod() === 'authenticator' }">
<h5><i class="icon wb-mobile" aria-hidden="true"></i> Google Authenticator</h5>
<p>Gebruik een authenticator app zoals Google Authenticator of Authy.</p>
</div>
<button class="btn btn-primary" data-bind="click: changeMethod, enable: changeToMethod() !== currentMethod()">
Methode Wijzigen
</button>
<hr>
<button class="btn btn-danger" data-bind="click: disableTwoFactor">
2FA Uitschakelen
</button>
</div>
</div>
</div>
<div class="text-center">
<a href="/" class="btn btn-default">Terug naar Dashboard</a>
</div>
</div>
<script src="/js/vendor/jquery/jquery.js?v=<?=$version?>"></script>
<script src="/js/vendor/bootstrap/bootstrap.js?v=<?=$version?>"></script>
<script src="/js/vendor/Knockout.min.js?v=<?=$version?>"></script>
<script>
function TwoFactorViewModel() {
var self = this;
self.enabled = ko.observable(<?= $user->two_factor_enabled === 'T' ? 'true' : 'false' ?>);
self.currentMethod = ko.observable('<?= $user->two_factor_method ?>');
self.selectedMethod = ko.observable(null);
self.changeToMethod = ko.observable(null);
self.showAuthenticatorSetup = ko.observable(false);
self.qrCodeUrl = ko.observable('');
self.secret = ko.observable('');
self.verificationCode = ko.observable('');
self.selectMethod = function(method) {
if (!self.enabled()) {
self.selectedMethod(method);
} else {
self.changeToMethod(method);
}
};
self.enableTwoFactor = function() {
if (!self.selectedMethod()) {
alert('Kies eerst een methode');
return;
}
$.ajax({
url: '/beheer/TwoFactorController/enable',
method: 'POST',
data: { method: self.selectedMethod() },
success: function(response) {
if (response.success) {
if (response.method === 'authenticator') {
self.qrCodeUrl(response.qrCodeUrl);
self.secret(response.secret);
self.showAuthenticatorSetup(true);
} else {
alert(response.message);
location.reload();
}
} else {
alert(response.message);
}
}
});
};
self.verifyAuthenticatorSetup = function() {
$.ajax({
url: '/beheer/TwoFactorController/verifySetup',
method: 'POST',
data: { code: self.verificationCode() },
success: function(response) {
if (response.success) {
alert('Google Authenticator succesvol ingesteld!');
location.reload();
} else {
alert(response.message);
}
}
});
};
self.disableTwoFactor = function() {
if (!confirm('Weet u zeker dat u 2FA wilt uitschakelen?')) {
return;
}
$.ajax({
url: '/beheer/TwoFactorController/disable',
method: 'POST',
success: function(response) {
if (response.success) {
alert(response.message);
location.reload();
} else {
alert(response.message);
}
}
});
};
self.changeMethod = function() {
if (!self.changeToMethod()) {
alert('Kies eerst een methode');
return;
}
$.ajax({
url: '/beheer/TwoFactorController/changeMethod',
method: 'POST',
data: { method: self.changeToMethod() },
success: function(response) {
if (response.success) {
if (response.method === 'authenticator') {
self.enabled(false);
self.selectedMethod('authenticator');
self.qrCodeUrl(response.qrCodeUrl);
self.secret(response.secret);
self.showAuthenticatorSetup(true);
} else {
alert(response.message);
location.reload();
}
} else {
alert(response.message);
}
}
});
};
self.handleVerificationKeyup = function(data, event) {
// Auto-verify when 6 digits entered
if (self.verificationCode().length === 6 && event.keyCode === 13) {
self.verifyAuthenticatorSetup();
}
return true;
};
}
$(document).ready(function() {
ko.applyBindings(new TwoFactorViewModel());
});
</script>
</body>
</html>
+3
View File
@@ -0,0 +1,3 @@
<div class="page" id="<?= $pageurl ?>">
<?= view('pages/' . strtolower($pageurl) . '_view') ?>
</div>
+62
View File
@@ -0,0 +1,62 @@
<table class="table table-sm">
<thead>
<tr>
<th class="table-tealish-header">naam</th>
<th class="table-tealish-header">adres</th>
<th class="table-tealish-header">plaats</th>
<th class="table-tealish-header">contactpersoon</th>
<th class="table-tealish-header">email</th>
<th class="table-tealish-header">&nbsp;</th>
</tr>
</thead>
<tbody data-bind="foreach:customers">
<tr>
<td><span data-bind="text:name"></span></td>
<td><span data-bind="text:address"></span></td>
<td><span data-bind="text:postcode + ' ' + place"></span></td>
<td><span data-bind="text:contactperson"</td>
<td><span data-bind="text:email"></span></td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editCustomer"></i>
<!-- ko if:archive == 'F' -->
<i class="icon fa-archive pointer" title="archiveer"
data-bind="click:$root.archiveCustomer"></i>
<!-- /ko -->
<!-- ko if:archive != 'F' -->
<i class="icon fa-minus-circle redish pointer" title="archiveer"
data-bind="click:$root.archiveCustomer"></i>
<!-- /ko -->
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removeCustomer"></i>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="4" class="">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:newCustomer">
nieuwe opdrachtgever
</button>
</td>
<td colspan="2" class="">
<div class="row form-horizontal">
<label class="col-md-4 form-control-label">archief</label>
<div class="col-md-8">
<div class="onoffswitch" data-bind="click:toggleArchive">
<input type="checkbox"
name="onoffswitch"
class="onoffswitch-checkbox"
data-bind="checked:archive"
id="myonoffswitch">
<label class="onoffswitch-label" for="myonoffswitch">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</div>
</div>
</td>
</tr>
</tfoot>
</table>
+211
View File
@@ -0,0 +1,211 @@
<div class="row">
<?php if(in_array(ROLE, [2] )): ?>
<div class="db-panel">
<div class="conceal-panel db-panel-success" data-bind="click:hideConceals">
<h3>Onderhanden werkpositie</h3>
<img src="css/images/progress.svg" alt="OWHP" />
</div>
<div class="db-panel-holder db-panel-success">
<div class="db-panel-heading" data-bind="click:showConceals">
<h3 class="db-panel-title">
Onderhanden werkpositie
</h3>
</div>
<div class="db-panel-body" data-bind="width:owp">
<br>
<h4>
<span class="db-panel-label">Onderhanden werkpositie huidig jaar:</span>
<span class="db-panel-data"><strong data-bind="text:owpThisYear"></strong></span>
</h4>
<h4>
<span class="db-panel-label">Onderhanden werkpositie volgend jaar:</span>
<span class="db-panel-data"><strong data-bind="text:owpNextYear"></strong></span>
</h4>
<h4>
<span class="db-panel-label">Totaal:</span>
<span class="db-panel-data"><strong data-bind="text:owpTotal"></strong></span>
</h4>
</div>
</div>
</div>
<div class="db-panel">
<div class="conceal-panel db-panel-warning" data-bind="click:hideConceals">
<h3>Omzet</h3>
<img src="css/images/revenue.svg" alt="OMZET>" />
</div>
<div class="db-panel-holder db-panel-warning">
<div class="db-panel-heading" data-bind="click:showConceals">
<h3 class="db-panel-title">
Omzet
</h3>
</div>
<div class="db-panel-body" data-bind="width:owp">
<br>
<h4>
<span class="db-panel-label">Omzet totaal gerealiseerd lopend jaar:</span>
<span class="db-panel-data"><strong data-bind="text:revenuesThisYear"></strong></span>
</h4>
<h4>
<span class="db-panel-label">
Minimum omzet lopend jaar:
</span>
<span class="dashboard-info"
data-bind="event: {
mouseover: enableDetails.bind($data, 'toolTip1'),
mouseout: disableDetails.bind($data, 'toolTip1') }">
<label>?</label>
<div data-bind="if:toolTip1" class="my-tooltip">
<p>Omzet totaal gerealiseerd lopend jaar + Onderhanden werkpositie lopend jaar.</p>
</div>
</span>
<span class="db-panel-data"><strong data-bind="text:minimumRevenues"></strong></span>
</h4>
<h4>
<span class="db-panel-label">
Verwachte omzet komende 12 maanden:
</span>
<span class="dashboard-info"
data-bind="event: {
mouseover: enableDetails.bind($data, 'toolTip3'),
mouseout: disableDetails.bind($data, 'toolTip3') }">
<label>?</label>
<div data-bind="if:toolTip3" class="my-tooltip">
<p> Onderhanden werkpositie totaal/40%.</p>
</div>
</span>
<span class="db-panel-data">
<strong data-bind="text:revenuesNextyear"></strong>
</span>
</h4>
</div>
</div>
</div>
</div>
<div class="row">
<div class="db-panel">
<div class="conceal-panel db-panel-info" data-bind="click:hideConceals">
<h3>Facturatie</h3>
<img src="css/images/bill.svg" alt="FACTURATIE" />
</div>
<div class="db-panel-holder db-panel-info">
<div class="db-panel-heading">
<h3 class="db-panel-title" data-bind="click:showConceals">
Facturatie
<span style="margin-left:10px;display:none"
class="glyphicon glyphicon-question-sign pointer"
data-bind="click:invoiceOverview"></span>
<div class="facturation-overview-holder">
<!-- ko if:showInvoiceOverview -->
<div class="facturation-overview" data-bind="click:invoiceOverview">
<table class="table">
<thead>
<tr>
<th>project</th>
<th>gefactureerd</th>
<th>betaald</th>
<th>te betalen</th>
</tr>
</thead>
<tbody data-bind="foreach:billingOverview">
<tr>
<td>
<span data-bind="text:project"></span>
</td>
<td>
<span data-bind="text:invoiced"></span>
</td>
<td>
<span data-bind="text:payedcosts"></span>
</td>
<td>
<span data-bind="text:openCosts"></span>
</td>
</tr>
</tbody>
</table>
</div>
<!-- /ko -->
</div>
</h3>
</div>
<div class="db-panel-body" data-bind="width:owp">
<br>
<h4>
<span class="db-panel-label">Verstuurde facturen lopende jaar (incl btw):</span>
<span class="db-panel-data">
<strong data-bind="text:invoiced">
</strong>
</span>
</h4>
<h4>
<span class="db-panel-label">Openstaande facturen (incl btw):</span>
<span class="db-panel-data">
<strong data-bind="text:openInvoices">
</strong>
</span>
</h4>
<h4>
<span class="db-panel-label">Nog te factureren totaal (incl btw):</span>
<span class="db-panel-data"><strong data-bind="text:toInvoice"></strong></span>
</h4>
<h4>
<span class="db-panel-label">Betaalde facturen lopende jaar (incl btw):</span>
<span class="db-panel-data"><strong data-bind="text:payments"></strong></span>
</h4>
</div>
</div>
</div>
<div class="db-panel">
<div class="conceal-panel db-panel-danger" data-bind="click:hideConceals">
<h3>Resultaat</h3>
<img src="css/images/seo-and-web.svg" alt="RESULTAAT" />
</div>
<div class="db-panel-holder db-panel-danger">
<div class="db-panel-heading" data-bind="click:showConceals">
<h3 class="db-panel-title">
Resultaat
</h3>
</div>
<div class="db-panel-body" data-bind="width:owp">
<br>
<h4>
<span class="db-panel-label">Kosten derden (incl btw):</span>
<span class="db-panel-data"><strong data-bind="text:openCosts"></strong></span>
</h4>
<h4>
<span class="db-panel-label">
Netto kasstroom (excl btw):
</span>
<span class="dashboard-info"
data-bind="event: {
mouseover: enableDetails.bind($data, 'toolTip2'),
mouseout: disableDetails.bind($data, 'toolTip2') }">
<label>?</label>
<div data-bind="if:toolTip2" class="my-tooltip">
<p>Openstaande facturen + nog te factureren totaal - kosten derden.</p>
</div>
</span>
<span class="db-panel-data"><strong data-bind="text:revenues"></strong></span>
</h4>
<h4>
<span class="db-panel-label">(eigen) omzet * kans (excl btw):</span>
<span class="db-panel-data"><strong data-bind="text:totalChance"></strong></span>
</h4>
<!-- <h4>-->
<!-- <span class="db-panel-label">Omzet lopend jaar (excl btw):</span>-->
<!-- <span class="db-panel-data"><strong data-bind="text:revenueCurrentYear"></strong></span>-->
<!-- </h4>-->
</div>
</div>
</div>
<?php else: ?>
<div class="row">
<div class="col-lg-offset-3 col-lg-6">
<div class="jumbotron" style="text-align:center">
<h3>De Beleidsonderszoekers</h3>
</div>
</div>
</div>
<?php endif; ?>
</div>
+107
View File
@@ -0,0 +1,107 @@
<div class="row">
<div class="col-md-2">
<select class="form-control form-control-sm"
data-bind="options:years,
optionsText:'year',
optionsValue:'year',
value:selectedYear,
event:{change:refreshEmployeehours}"></select>
</div>
<div class="col-md-2">
<select class="form-control form-control-sm"
data-bind="options:months,
optionsText:'month',
optionsValue:'monthID',
value:selectedMonth,
event:{change:refreshEmployeehours}"></select>
</div>
<div class="col-md-2">
<select class="form-control form-control-sm"
data-bind="options:employees,
optionsText:'fullname',
optionsValue:'id',
value:$root.selectedEmployeeID,
event:{change:refreshEmployeehours}"></select>
</div>
</div>
<br/>
<table class="table table-sm">
<thead>
<tr>
<th class="table-tealish-header" width="15%">datum</th>
<th class="table-tealish-header" width="35%">soort uren</th>
<th class="table-tealish-header" width="35%">project</th>
<th class="table-tealish-header" width="10%" style="min-width:100px;">uren</th>
<th class="table-tealish-header" width="5%">&nbsp;</th>
</tr>
</thead>
<tbody data-bind="foreach:employeehours">
<tr>
<td data-bind="css:{'red-line': dirty}">
<input class="form-control form-control-sm"
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
enable:archive() == 'F',
value:hourdate,
event:{change:$root.saveEmployeehours}"
</td>
<td data-bind="css:{'red-line': dirty}">
<select class="form-control form-control-sm"
data-bind="options:$root.hourtypes,
optionsText:'description',
optionsValue:'id',
value:hourtype_id,
enable:archive() == 'F',
optionsCaption:'selecteer...',
event:{change:$root.saveEmployeehours}"></select>
</td>
<td data-bind="css:{'red-line': dirty}">
<!-- ko if: archive() == 'T' -->
<div data-bind="text:projectname" class="fake-input"></div>
<!-- /ko -->
<!-- ko if: hourType() == 'PROJECTS' && archive() == 'F' -->
<select class="form-control form-control-sm"
data-bind="options:$root.projects,
optionsText:'projectFull',
optionsValue:'projectID',
value:projectID,
optionsCaption:'selecteer...',
event:{change:$root.saveEmployeehours}"></select>
<!-- /ko -->
<!-- ko if: hourType() == 'OFFERS' && archive() == 'F' -->
<select class="form-control form-control-sm"
data-bind="options:$root.offersWithoutProject,
optionsText:'fulloffer',
optionsValue:'id',
value:projectID,
optionsCaption:'selecteer...',
event:{change:$root.saveEmployeehours}"></select>
<!-- /ko -->
</td>
<td class="align-right" data-bind="css:{'red-line': dirty}">
<input type="number"
class="form-control form-control-sm align-right"
paceholder="uren"
data-bind="textInput:hours,
enable:canFillInHours && archive() == 'F',
event:{keyup:$root.saveDelayedEmployeehours,
change: $root.saveDelayedEmployeehours}"/>
</td>
<td data-bind="css:{'red-line': dirty}">
<!-- <i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editEmployeehour"></i>-->
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removeEmployeehour"></i>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="3">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:newEmployeehour">
nieuwe uren
</button>
</td>
</td>
</tr>
</tfoot>
</table>
@@ -0,0 +1,31 @@
<div id="EMPLOYEEHOURSREPORT">
<div class="row">
<div class="col-md-1">
<label>jaar</label>
</div>
<div class="col-md-2">
<input type="text" class="form-control" data-bind="textInput:selectedYear, event:{keyup:checkYear}">
<div class="invalid-feedback" data-bind="visible: ! validYear()">geen geldig jaar</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="nav-tabs-horizontal">
<ul class="nav nav-tabs nav-tabs-solid">
<!-- ko foreach:months -->
<li class="nav-item" data-bind="click:$root.setActivetab.bind($data, monthID)" style="z-index:10">
<a class="nav-link"
data-bind="text:monthName, css:{'active' : $root.selectedMonthID() == monthID}"></a>
</li>
<!-- /ko -->
</ul>
<div class="tab-content">
<div class="tab-pane active">
<?= view('reports/employeehours/employeemonthhours_view') ?>
</div>
</div>
</div>
</div>
</div>
</div>
+64
View File
@@ -0,0 +1,64 @@
<table class="table table-sm">
<thead>
<tr>
<th class="table-tealish-header">contact</th>
<th class="table-tealish-header">naam</th>
<th class="table-tealish-header">adres</th>
<th class="table-tealish-header">plaats</th>
<th class="table-tealish-header">email</th>
<th class="table-tealish-header">tarief</th>
<th class="table-tealish-header">&nbsp;</th>
</tr>
</thead>
<tbody data-bind="foreach:externals">
<tr>
<td><span data-bind="text:contactperson"></span></td>
<td><span data-bind="text:name"></span></td>
<td><span data-bind="text:address"></span></td>
<td><span data-bind="text:postcode + ' ' + place"></span></td>
<td><span data-bind="text:email"></span></td>
<td><span data-bind="text:rate"></span></td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editExternal"></i>
<!-- ko if:archive == 'F' -->
<i class="icon fa-archive pointer" title="archiveer"
data-bind="click:$root.archiveExternal"></i>
<!-- /ko -->
<!-- ko if:archive != 'F' -->
<i class="icon fa-minus-circle redish pointer" title="archiveer"
data-bind="click:$root.archiveExternal"></i>
<!-- /ko -->
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removeExternal"></i>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="4" class="">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:newExternal">
nieuwe onderaannemer
</button>
</td>
<td colspan="2" class="">
<div class="row form-horizontal">
<label class="col-md-4 form-control-label">archief</label>
<div class="col-md-8">
<div class="onoffswitch" data-bind="click:toggleArchive">
<input type="checkbox"
name="onoffswitch"
class="onoffswitch-checkbox"
data-bind="checked:archive"
id="myonoffswitch">
<label class="onoffswitch-label" for="myonoffswitch">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</div>
</div>
</td>
</tr>
</tfoot>
</table>
+30
View File
@@ -0,0 +1,30 @@
<div class="dbo-page">
<div class="row">
<?php foreach ( $pages as $page ): ?>
<div class="col-md-4">
<div class="panel panel-primary panel-line">
<div class="panel-heading">
<h3 class="panel-title">
<?= $page->pagename ?>
</h3>
</div>
<div class="panel-body">
<div class="row">
<?php foreach ( $page->subpages as $subpage ): ?>
<div class="col-md-6">
<div class="panel panel-success panel-line">
<div class="panel-heading">
<h5 class="panel-title">
<?= $subpage->pagename ?>
</h5>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
+85
View File
@@ -0,0 +1,85 @@
<div id="INVOICEREPORT">
<div class="row">
<div class="col-md-1">
<label>jaar</label>
</div>
<div class="col-md-2">
<input type="text" class="form-control" data-bind="textInput:selectedYear, event:{keyup:checkYear}">
<div class="invalid-feedback" data-bind="visible: ! validYear()">geen geldig jaar</div>
</div>
<div class="col-md-2">
<button class="btn btn-success" data-bind="click:createSpreadsheet">
maak spreadsheet
</button>
</div>
<div class="col-md-3">
<div class="row form-horizontal">
<label class="col-md-4 form-control-label">archief</label>
<div class="col-md-8">
<div class="onoffswitch" data-bind="click:toggleArchive">
<input type="checkbox"
name="onoffswitch"
class="onoffswitch-checkbox"
data-bind="checked:archive"
id="myonoffswitch">
<label class="onoffswitch-label" for="myonoffswitch">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="nav-tabs-horizontal">
<ul class="nav nav-tabs nav-tabs-solid">
<li class="nav-item"
data-bind="click:setActivetab.bind($data, 'invoice')" style="z-index:10">
<a class="nav-link"
data-bind="css:{'active':invoiceTab() == 'invoice'}">facturen</a>
</li>
<li class="nav-item" data-bind="click:setActivetab.bind($data, 'forecast')" style="z-index:10">
<a class="nav-link"
data-bind="css:{'active':invoiceTab() == 'forecast'}">prognoses</a>
</li>
<li class="nav-item" data-bind="click:setActivetab.bind($data, 'monthforecast')" style="z-index:10">
<a class="nav-link"
data-bind="css:{'active':invoiceTab() == 'monthforecast'}">maand prognoses</a>
</li>
<li class="nav-item" data-bind="click:setActivetab.bind($data, 'monthpayments')" style="z-index:10">
<a class="nav-link" data-bind="css:{'active':invoiceTab() == 'monthpayments'}">maand betalingen</a>
</li>
<li class="nav-item" data-bind="click:setActivetab.bind($data, 'invoices')" style="z-index:10">
<a class="nav-link" data-bind="css:{'active':invoiceTab() == 'invoices'}">verstuurde facturen</a>
</li>
<!-- <li class="nav-item" data-bind="click:setActivetab.bind($data, 'externals')" style="z-index:10">-->
<!-- <a class="nav-link" data-bind="css:{'active':invoiceTab() == 'externals'}">onderaannemers</a>-->
<!-- </li>-->
</ul>
<div class="tab-content">
<div data-bind="visible:invoiceTab() == 'invoice'">
<?= view('reports/invoices/invoiceoverview_report') ?>
</div>
<div id="cast" data-bind="visible:invoiceTab() == 'forecast'">
<?= view('reports/invoices/invoiceforecast_report') ?>
</div>
<div id="invoiceforecast" data-bind="visible:invoiceTab() == 'monthforecast'">
<?= view('reports/invoices/monthforecast_report') ?>
</div>
<div id="invoiceforecast" data-bind="visible:invoiceTab() == 'monthpayments'">
<?= view('reports/invoices/monthpayment_report') ?>
</div>
<div id="invoiceforecast" data-bind="visible:invoiceTab() == 'invoices'">
<?= view('reports/invoices/invoices_report') ?>
</div>
<!-- <div id="invoiceforecast" data-bind="visible:invoiceTab() == 'externals'">-->
<!-- --><?php //$this->load->view('reports/invoices/contractors_report') ?>
<!-- </div>-->
</div>
</div>
</div>
</div>
</div>
+1
View File
@@ -0,0 +1 @@
<h1>DASHBOARD</h1>
+252
View File
@@ -0,0 +1,252 @@
<!DOCTYPE html>
<html class="no-js css-menubar" lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui">
<meta name="description" content="bootstrap admin template">
<meta name="author" content="">
<title>-*-*-LOGIN DBOIS-*-*-</title>*
<link rel="icon" href="css/images/dbo-01-80x80.png" type="image/png">
<!-- Stylesheets -->
<link rel="stylesheet" href="css/vendor/bootstrap.min.css?v=<?= APP_VERSION ?>">
<link rel="stylesheet" href="css/vendor/bootstrap-extend.css?v=<?= APP_VERSION ?>">
<link rel="stylesheet" href="css/vendor/site.min.css?v=<?= APP_VERSION ?>">
<!-- Plugins -->
<!-- <link rel="stylesheet" href="css/vendor/plugins/animsition/animsition.css">-->
<link rel="stylesheet" href="css/vendor/plugins/asscrollable/asScrollable.css?v=<?= APP_VERSION ?>">
<link rel="stylesheet" href="css/vendor/plugins/switchery/switchery.css?v=<?= APP_VERSION ?>">
<link rel="stylesheet" href="css/vendor/plugins/slidepanel/slidePanel.css?v=<?= APP_VERSION ?>">
<link rel="stylesheet" href="css/vendor/plugins/flag-icon-css/flag-icon.css?v=<?= APP_VERSION ?>">
<link rel="stylesheet" href="css/login-v3.css?v=<?= APP_VERSION ?>">
<!-- Fonts -->
<link rel="stylesheet" href="fonts/web-icons/web-icons.min.css?v=<?= APP_VERSION ?>">
<link rel="stylesheet" href="fonts/brand-icons/brand-icons.min.css?v=<?= APP_VERSION ?>">
<link rel='stylesheet' href='http://fonts.googleapis.com/css?family=Roboto:300,400,500,300italic'>
</head>
<body class="animsition page-login-v3 layout-full">
<!-- Page -->
<?= view('specials/tellme_modal') ?>
<!-- Password Change Modal -->
<div class="modal fade" id="password-change-modal" tabindex="-1" role="dialog" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header bg-warning">
<h4 class="modal-title">
<i class="icon wb-warning" aria-hidden="true"></i>
Wachtwoord wijzigen verplicht
</h4>
</div>
<div class="modal-body">
<div class="alert alert-warning">
<strong>Let op:</strong> Uw huidige wachtwoord voldoet niet aan de beveiligingseisen.
U moet uw wachtwoord wijzigen om door te gaan.
</div>
<h5>Wachtwoordeisen:</h5>
<ul class="list-unstyled" data-bind="foreach: passwordRequirements">
<li style="padding: 5px 0;">
<i class="icon wb-check text-success" aria-hidden="true"></i>
<span data-bind="text: $data"></span>
</li>
</ul>
<!-- New Password Input -->
<div class="form-group form-material floating" data-plugin="formMaterial" style="margin-top: 30px;">
<input type="password"
class="form-control"
id="newPassword"
data-bind="textInput: newPassword"
autocomplete="new-password" />
<label class="floating-label">Nieuw wachtwoord</label>
</div>
<!-- Confirm Password Input -->
<div class="form-group form-material floating" data-plugin="formMaterial">
<input type="password"
class="form-control"
id="confirmPassword"
data-bind="textInput: confirmPassword, event: { keyup: handlePasswordChangeKeyup }"
autocomplete="new-password" />
<label class="floating-label">Bevestig wachtwoord</label>
</div>
<!-- Error Message -->
<div data-bind="visible: passwordChangeError()" class="alert alert-danger" style="margin-top: 20px;">
<span data-bind="text: passwordChangeError"></span>
</div>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-primary btn-lg btn-block"
data-bind="click: changePassword, enable: newPassword().length >= 8 && confirmPassword().length >= 8 && !isChangingPassword()">
<span data-bind="visible: !isChangingPassword()">Wachtwoord wijzigen</span>
<span data-bind="visible: isChangingPassword()">Wijzigen...</span>
</button>
</div>
</div>
</div>
</div>
<!-- 2FA Verification Modal -->
<div class="modal fade" id="twofactor-modal" tabindex="-1" role="dialog" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">
<i class="icon wb-lock" aria-hidden="true"></i>
Tweefactorauthenticatie
</h4>
</div>
<div class="modal-body text-center">
<!-- Email Method -->
<div data-bind="visible: twoFactorMethod() === 'email'">
<div style="font-size: 48px; color: #348eda; margin-bottom: 20px;">
<i class="icon wb-envelope" aria-hidden="true"></i>
</div>
<p>Voer de 6-cijferige code in die naar uw e-mail is verzonden.</p>
</div>
<!-- Authenticator Method -->
<div data-bind="visible: twoFactorMethod() === 'authenticator'">
<div style="font-size: 48px; color: #348eda; margin-bottom: 20px;">
<i class="icon wb-mobile" aria-hidden="true"></i>
</div>
<p>Voer de 6-cijferige code in van uw authenticator app.</p>
</div>
<!-- Code Input -->
<div class="form-group" style="margin-top: 30px;">
<input type="text"
class="form-control text-center"
id="twoFactorCode"
maxlength="6"
placeholder="000000"
style="font-size: 32px; letter-spacing: 8px; font-weight: bold;"
data-bind="textInput: twoFactorCode, event: { keyup: handleTwoFactorKeyup }"
autocomplete="off" />
</div>
<!-- Error Message -->
<div data-bind="visible: twoFactorError()" class="alert alert-danger" style="margin-top: 20px;">
<span data-bind="text: twoFactorError"></span>
</div>
<!-- Resend Button (Email only) -->
<div data-bind="visible: twoFactorMethod() === 'email'" style="margin-top: 20px;">
<a href="#" data-bind="click: resendOtp, enable: !isResending()">
<span data-bind="visible: !isResending()">Code opnieuw verzenden</span>
<span data-bind="visible: isResending()">Verzenden...</span>
</a>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-bind="click: cancelTwoFactor">Annuleren</button>
<button type="button" class="btn btn-primary btn-lg" data-bind="click: verifyTwoFactor, enable: twoFactorCode().length === 6 && !isVerifying()">
<span data-bind="visible: !isVerifying()">Verifiëren</span>
<span data-bind="visible: isVerifying()">Verifiëren...</span>
</button>
</div>
</div>
</div>
</div>
<div class="page vertical-align text-center" data-animsition-in="fade-in" data-animsition-out="fade-out">
<div class="page-content vertical-align-middle animation-slide-top animation-duration-1">
<div class="panel" id="login-form">
<div class="panel-body">
<div class="brand">
<img class="brand-img" src="css/images/logo_dbo.png" alt="...">
<h2 class="brand-text font-size-18">projectbeheer</h2>
</div>
<div data-bind="visible: !showPasswordRequest()">
<div>
<div class="form-group form-material floating" data-plugin="formMaterial">
<input type="text" class="form-control" name="gebruikersnaam"
data-bind="textInput:username" />
<label class="floating-label">gebruikersnaam</label>
</div>
<div class="form-group form-material floating" data-plugin="formMaterial">
<input type="password" class="form-control" name="password"
data-bind="textInput:password" />
<label class="floating-label">wachtwoord</label>
</div>
<button type="button"
class="btn btn-primary btn-block btn-lg mt-40"
data-bind="click:login">Log in</button>
</div>
<div>
<br />
<a href="#" data-bind="click:togglePasswordrequest">wachtwoord vergeten?</a>
</div>
</div>
<div data-bind="visible: showPasswordRequest()">
<p>
Vul hieronder uw emailadres en gebruikersnaam in, u krijgt dan een mail met een nieuw wachtwoord toegezonden!
</p>
<div class="form-group form-material floating" data-plugin="formMaterial">
<input type="text"
class="form-control"
name="gebruikersnaam"
data-bind="textInput:username" />
<label class="floating-label">gebruikersnaam</label>
</div>
<div class="form-group form-material floating" data-plugin="formMaterial">
<input type="text"
class="form-control"
name="password"
data-bind="textInput:email" />
<label class="floating-label">emailadres</label>
</div>
<button type="button"
class="btn btn-primary btn-block btn-lg mt-40"
data-bind="click:requestPassword">vraag aan</button>
<div>
<br />
<a href="#" data-bind="click:togglePasswordrequest">terug naar inlog?</a>
</div>
</div>
</div>
</div>
<footer class="page-copyright page-copyright-inverse">
<p>© 2018. De Beleidsonderzoekers</p>
<!-- <p style="font-size:.8em">powered by: Pensare Software</p>-->
</footer>
</div>
</div>
<!-- End Page -->
<!-- Core -->
<script src="js/vendor/jquery/jquery.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/vendor/popper-js/umd/popper.min.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/vendor/bootstrap/bootstrap.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/vendor/animsition/animsition.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<!-- Scripts -->
<script src="js/vendor/Config.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<!-- Page -->
<script src="js/vendor/Knockout.min.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/login/loginModule.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/specials/tellmeModule.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/helpers.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script>
// Apply bindings for password change modal
$(function() {
ko.applyBindings(dbo.loginModel, document.getElementById('password-change-modal'));
});
</script>
</body>
</html>
+219
View File
@@ -0,0 +1,219 @@
<!DOCTYPE html>
<html class="no-js css-menubar" lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui">
<title>Tweefactorauthenticatie - DBOIS</title>
<link rel="icon" href="css/images/dbo-01-80x80.png" type="image/png">
<!-- Stylesheets -->
<link rel="stylesheet" href="css/vendor/bootstrap.min.css?v=<?=$version?>">
<link rel="stylesheet" href="css/vendor/bootstrap-extend.css?v=<?=$version?>">
<link rel="stylesheet" href="css/vendor/site.min.css?v=<?=$version?>">
<!-- Plugins -->
<link rel="stylesheet" href="css/vendor/plugins/asscrollable/asScrollable.css?v=<?=$version?>">
<link rel="stylesheet" href="css/vendor/plugins/switchery/switchery.css?v=<?=$version?>">
<link rel="stylesheet" href="css/vendor/plugins/slidepanel/slidePanel.css?v=<?=$version?>">
<link rel="stylesheet" href="css/vendor/plugins/flag-icon-css/flag-icon.css?v=<?=$version?>">
<link rel="stylesheet" href="css/login-v3.css?v=<?=$version?>">
<!-- Fonts -->
<link rel="stylesheet" href="fonts/web-icons/web-icons.min.css?v=<?=$version?>">
<link rel="stylesheet" href="fonts/brand-icons/brand-icons.min.css?v=<?=$version?>">
<link rel='stylesheet' href='http://fonts.googleapis.com/css?family=Roboto:300,400,500,300italic'>
<style>
.verification-code-input {
text-align: center;
font-size: 32px;
letter-spacing: 8px;
font-weight: bold;
padding: 20px;
}
.resend-link {
margin-top: 20px;
display: inline-block;
}
.method-icon {
font-size: 48px;
color: #348eda;
margin-bottom: 20px;
}
</style>
</head>
<body class="animsition page-login-v3 layout-full">
<!-- Page -->
<?= view('specials/tellme_modal') ?>
<div class="page vertical-align text-center" data-animsition-in="fade-in" data-animsition-out="fade-out">
<div class="page-content vertical-align-middle animation-slide-top animation-duration-1">
<div class="panel" id="verify2fa-form">
<div class="panel-body">
<div class="brand">
<img class="brand-img" src="css/images/logo_dbo.png" alt="DBOIS">
<h2 class="brand-text font-size-18">projectbeheer</h2>
</div>
<div class="text-center">
<div class="method-icon" data-bind="visible: method() === 'email'">
<i class="icon wb-envelope" aria-hidden="true"></i>
</div>
<div class="method-icon" data-bind="visible: method() === 'authenticator'">
<i class="icon wb-mobile" aria-hidden="true"></i>
</div>
<h3>Tweefactorauthenticatie</h3>
<p data-bind="visible: method() === 'email'">
Voer de 6-cijferige code in die naar uw e-mail is verzonden.
</p>
<p data-bind="visible: method() === 'authenticator'">
Voer de 6-cijferige code in van uw authenticator app.
</p>
</div>
<div class="form-group form-material floating mt-40" data-plugin="formMaterial">
<input type="text"
class="form-control verification-code-input"
name="verification_code"
maxlength="6"
data-bind="textInput: verificationCode, event: { keyup: handleKeyup }"
autocomplete="off"
autofocus />
<label class="floating-label">Verificatiecode</label>
</div>
<div data-bind="visible: errorMessage()" class="alert alert-danger">
<span data-bind="text: errorMessage"></span>
</div>
<button type="button"
class="btn btn-primary btn-block btn-lg mt-40"
data-bind="click: verify, enable: verificationCode().length === 6 && !isVerifying()">
<span data-bind="visible: !isVerifying()">Verifiëren</span>
<span data-bind="visible: isVerifying()">Verifiëren...</span>
</button>
<div data-bind="visible: method() === 'email'">
<a href="#" class="resend-link" data-bind="click: resendOtp, enable: !isResending()">
<span data-bind="visible: !isResending()">Code opnieuw verzenden</span>
<span data-bind="visible: isResending()">Verzenden...</span>
</a>
</div>
<div class="mt-20">
<a href="/login/logout">Annuleren</a>
</div>
</div>
</div>
<footer class="page-copyright page-copyright-inverse">
<p>© 2018. De Beleidsonderzoekers</p>
</footer>
</div>
</div>
<!-- End Page -->
<!-- Core -->
<script src="js/vendor/jquery/jquery.js?v=<?=$version?>"></script>
<script src="js/vendor/popper-js/umd/popper.min.js?v=<?=$version?>"></script>
<script src="js/vendor/bootstrap/bootstrap.js?v=<?=$version?>"></script>
<script src="js/vendor/animsition/animsition.js?v=<?=$version?>"></script>
<!-- Scripts -->
<script src="js/vendor/Config.js?v=<?=$version?>"></script>
<script src="js/vendor/Knockout.min.js?v=<?=$version?>"></script>
<script src="js/lib/modules/specials/tellmeModule.js?v=<?=$version?>"></script>
<script src="js/lib/helpers.js?v=<?=$version?>"></script>
<script>
function Verify2FAViewModel() {
var self = this;
self.method = ko.observable('<?= $method ?>');
self.verificationCode = ko.observable('');
self.errorMessage = ko.observable('');
self.isVerifying = ko.observable(false);
self.isResending = ko.observable(false);
self.verify = function() {
if (self.verificationCode().length !== 6) {
return;
}
self.errorMessage('');
self.isVerifying(true);
$.ajax({
url: '/login/verify2fa',
method: 'POST',
data: { code: self.verificationCode() },
success: function(response) {
if (response.success) {
// Redirect to main application
window.location.href = '/';
} else {
self.errorMessage(response.message || 'Ongeldige verificatiecode');
self.verificationCode('');
}
self.isVerifying(false);
},
error: function() {
self.errorMessage('Er is een fout opgetreden. Probeer het opnieuw.');
self.isVerifying(false);
}
});
};
self.resendOtp = function() {
self.isResending(true);
self.errorMessage('');
$.ajax({
url: '/login/resendOtp',
method: 'POST',
success: function(response) {
if (response.success) {
alert(response.message || 'Nieuwe code verzonden');
} else {
self.errorMessage(response.message || 'Kan code niet opnieuw verzenden');
}
self.isResending(false);
},
error: function() {
self.errorMessage('Er is een fout opgetreden. Probeer het opnieuw.');
self.isResending(false);
}
});
return false;
};
self.handleKeyup = function(data, event) {
// Clear error message on input
self.errorMessage('');
// Auto-submit when 6 digits entered and Enter is pressed
if (self.verificationCode().length === 6 && event.keyCode === 13) {
self.verify();
}
// Only allow digits
var sanitized = self.verificationCode().replace(/[^0-9]/g, '');
if (sanitized !== self.verificationCode()) {
self.verificationCode(sanitized);
}
return true;
};
}
$(document).ready(function() {
ko.applyBindings(new Verify2FAViewModel());
});
</script>
</body>
</html>
@@ -0,0 +1,86 @@
<div class="MONTHLYEMPLOYEEHOURS">
<!-- <div class="row">-->
<!-- <div class="col-md-1">-->
<!-- <label>jaar</label>-->
<!-- </div>-->
<!-- <div class="col-md-2">-->
<!-- <input type="text" class="form-control" data-bind="textInput:selectedYear, event:{keyup:checkYear}" >-->
<!-- <div class="invalid-feedback" data-bind="visible: ! validYear()">geen geldig jaar</div>-->
<!-- </div>-->
<!-- </div>-->
<div class="row">
<div class="col-xs-3">
<div class="row form-horizontal">
<label class="col-md-4 form-control-label">archief</label>
<div class="col-md-8">
<div class="onoffswitch" data-bind="click:toggleArchive">
<input type="checkbox"
name="onoffswitch"
class="onoffswitch-checkbox"
data-bind="checked:archive"
id="myonoffswitch">
<label class="onoffswitch-label" for="myonoffswitch">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="nav-tabs-horizontal">
<ul class="nav nav-tabs nav-tabs-solid">
<li class="nav-item" data-bind="click:setActivetab.bind($data, 'euro')" style="z-index:10">
<a class="nav-link" data-bind="css:{'active':sluggy() == 'euro'}">totaal euro's</a>
</li>
<li class="nav-item" data-bind="click:setActivetab.bind($data, 'hours')" style="z-index:10">
<a class="nav-link" data-bind="css:{'active':sluggy() == 'hours'}">totaal uren</a>
</li>
<!-- ko foreach:uniqueEmployees -->
<li class="nav-item" data-bind="click:$root.setActivetab.bind($data, id)" style="z-index:10">
<a class="nav-link" data-bind="text:fullname, css:{'active':$root.sluggy() == id}"></a>
</li>
<!-- /ko -->
</ul>
<div class="tab-content">
<div class="tab-pane" data-bind="css:{'active':sluggy() == 'euro'}">
<?= view('reports/monthlyemployeehours/euro_view') ?>
</div>
<div class="tab-pane" data-bind="css:{'active':sluggy() == 'hours'}">
<?= view('reports/monthlyemployeehours/hours_view') ?>
</div>
<!-- ko foreach:uniqueEmployees -->
<div class="tab-pane" data-bind="css:{'active':$root.sluggy() == id}">
<div style="position:relative">
<div style="position:absolute;right:20px; z-index:10;">
<div class="onoffswitch" data-bind="click:$root.toggleHourView">
<input type="checkbox"
name="onoffswitch"
class="onoffswitch-checkbox"
data-bind="checked:hourView"
id="myonoffswitch">
<label class="onoffswitch-label" for="myonoffswitch">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</div>
</div>
<!-- ko if : hourView() -->
<?= view('reports/monthlyemployeehours/_employeehour_view') ?>
<!-- /ko -->
<!-- ko if : ! hourView() -->
<?= view('reports/monthlyemployeehours/_employeerevenue_view') ?>
<!-- /ko -->
</div>
<!-- /ko -->
</div>
</div>
</div>
</div>
</div>
+124
View File
@@ -0,0 +1,124 @@
<div class="row">
<div class="col-xs-6">
<div class="form-group">
<div class="input-group">
<input type="text"
data-bind="textInput:search,event:{keyup:searchOffers}"
class="form-control"
name=""
placeholder="Zoek...">
<span class="input-group-btn">
<button type="text"
class="btn btn-primary">
<i class="icon wb-search" aria-hidden="true"></i>
</button>
</span>
</div>
</div>
</div>
</div>
<table class="table table-sm">
<thead>
<tr>
<th width="10%" class="table-tealish-header pointer" data-bind="click:directionOrderOffers.bind($data, 'offernumber')">nummer</th>
<th width="20%" class="table-tealish-header pointer" data-bind="click:directionOrderOffers.bind($data, 'CUS.name')">klant</th>
<th width="25%" class="table-tealish-header pointer" data-bind="click:directionOrderOffers.bind($data, 'offername')">offertenaam</th>
<th width="5%" class="table-tealish-header pointer" data-bind="click:directionOrderOffers.bind($data, 'startdate')">datum</th>
<th width="5%" class="table-tealish-header pointer" data-bind="click:directionOrderOffers.bind($data, 'deadline')">deadline</th>
<th width="10%" class="table-tealish-header pointer align-right" data-bind="click:directionOrderOffers.bind($data, 'own_revenue')">(eigen) omzet</th>
<th width="10%" class="table-tealish-header pointer align-right" data-bind="click:directionOrderOffers.bind($data, 'acceptance_chance')">kans</th>
<th width="10%" class="table-tealish-header align-right">(eigen) omzet * kans</th>
<!-- <th class="table-tealish-header pointer" data-bind="click:directionOrderOffers.bind($data, 'accepteddate')">geaccepteerd</th>-->
<!-- <th class="table-tealish-header pointer" data-bind="click:directionOrderOffers.bind($data, 'rejectdate')">afgewezen</th>-->
<th width="5%" class="table-tealish-header pointer">&nbsp;</th>
</tr>
</thead>
<tbody data-bind="foreach:offers">
<tr data-bind="css:{'table-info':$root.selectedRowID() == id}">
<td data-bind="click:$root.selectOffer" class="pointer">
<span data-bind="text:offernumber"></span>
</td>
<td data-bind="click:$root.selectOffer" class="pointer">
<span data-bind="text:customerName"></span>
</td>
<td data-bind="click:$root.selectOffer" class="pointer">
<span data-bind="text:offername"></span>
</td>
<td data-bind="click:$root.selectOffer" class="pointer">
<span data-bind="text:startdate"></span>
</td>
<td data-bind="click:$root.selectOffer" class="pointer">
<span data-bind="text:deadline"></span>
</td>
<td data-bind="click:$root.selectOffer" class="pointer align-right">
€ <span data-bind="text:own_revenue"></span>
</td>
<td data-bind="click:$root.selectOffer" class="pointer align-right">
<span data-bind="text:acceptance_chance"></span> %
</td>
<td data-bind="click:$root.selectOffer" class="pointer align-right">
€ <span data-bind="text:chanceOwnRevenue"></span>
</td>
<!-- <td data-bind="click:$root.selectOffer" class="pointer">-->
<!-- <span data-bind="text:accepteddate"></span>-->
<!-- </td>-->
<!-- <td data-bind="click:$root.selectOffer" class="pointer">-->
<!-- <span data-bind="text:rejectdate"></span>-->
<!-- </td>-->
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editOffer"></i>
<!-- ko if:archive == 'F' -->
<i class="icon fa-archive pointer" title="archiveer"
data-bind="click:$root.archiveOffer"></i>
<!-- /ko -->
<!-- ko if:archive != 'F' -->
<i class="icon fa-minus-circle redish pointer" title="archiveer"
data-bind="click:$root.archiveOffer"></i>
<!-- /ko -->
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removeOffer, css:{'whiteish':$root.selectedRowID() == id}"></i>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="5" class="align-right table-tealish-header">
Totaal
</th>
<th class="align-right table-tealish-header">
€ <span data-bind="text:totalOwnRevenue"></span>
</th>
<th class=" table-tealish-header">&nbsp;</th>
<th class="align-right table-tealish-header">
€ <span data-bind="text:totalChanceOwnRevenue"></span>
</th>
<th class=" table-tealish-header">&nbsp;</th>
</tr>
<tr>
<td colspan="5" class="">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:newOffer">
nieuwe offerte
</button>
</td>
<td colspan="3" class="">
<div class="row form-horizontal">
<label class="col-md-4 form-control-label">archief</label>
<div class="col-md-8">
<div class="onoffswitch" data-bind="click:toggleArchive">
<input type="checkbox"
name="onoffswitch"
class="onoffswitch-checkbox"
data-bind="checked:archive"
id="myonoffswitch">
<label class="onoffswitch-label" for="myonoffswitch">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</div>
</div>
</td>
</tr>
</tfoot>
</table>
+126
View File
@@ -0,0 +1,126 @@
<div class="row">
<div class="col-xs-6">
<div class="form-group">
<div class="input-group">
<input type="text"
data-bind="textInput:search,event:{keyup:searchProjects}"
class="form-control"
name=""
placeholder="Zoek...">
<span class="input-group-btn">
<button type="text"
class="btn btn-primary">
<i class="icon wb-search" aria-hidden="true"></i>
</button>
</span>
</div>
</div>
</div>
</div>
<table class="table table-sm">
<thead>
<tr>
<th class="table-tealish-header pointer"
data-bind="click:directionOrderProjects.bind($data, 'projectnumber')">nummer</th>
<th class="table-tealish-header pointer"
data-bind="click:directionOrderProjects.bind($data, 'USR.firstname')">projectleider</th>
<th class="table-tealish-header pointer"
data-bind="click:directionOrderProjects.bind($data, 'projectname')">projectnaam</th>
<th class="table-tealish-header pointer"
data-bind="click:directionOrderProjects.bind($data, 'startdate')">start</th>
<th class="table-tealish-header align-right">eigen tarief omzet</th>
<th class="table-tealish-header align-right">overige kosten</th>
<th class="table-tealish-header align-right">Kosten derden</th>
<th class="table-tealish-header align-right">totaal</th>
<th class="table-tealish-header">&nbsp;</th>
</tr>
</thead>
<tbody data-bind="foreach:projects">
<tr data-bind="css:{'table-info':$root.selectedRowID() == id}">
<td data-bind="click:$root.selectProject" class="pointer">
<span data-bind="text:projectnumber"></span>
</td>
<td data-bind="click:$root.selectPoject" class="pointer">
<span data-bind="text:projectleader"></span>
</td>
<td data-bind="click:$root.selectPoject" class="pointer">
<span data-bind="text:projectname, attr:{title:customer}"></span>
</td>
<td data-bind="click:$root.selectPoject" class="pointer">
<span data-bind="text:startdate"></span>
</td>
<td data-bind="click:$root.selectPoject" class="pointer align-right">
<span data-bind="text:dbo.helpers.numberWithPoints(totalOwnrevenue.toFixed(0))"></span>
</td>
<td data-bind="click:$root.selectPoject" class="pointer align-right">
<span data-bind="text:dbo.helpers.numberWithPoints(totalOtherrevenue.toFixed(0))"></span>
</td>
<td data-bind="click:$root.selectPoject" class="pointer align-right">
<span data-bind="text:dbo.helpers.numberWithPoints(costs.toFixed(0))"></span>
</td>
<td data-bind="click:$root.selectPoject" class="pointer align-right">
<b data-bind="text:dbo.helpers.numberWithPoints(total.toFixed(0))"></b>
</td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editProject"></i>
<!-- ko if:archive == 'F' -->
<i class="icon fa-archive pointer" title="archiveer"
data-bind="click:$root.archiveProject"></i>
<!-- /ko -->
<!-- ko if:archive != 'F' -->
<i class="icon fa-minus-circle redish pointer" title="archiveer"
data-bind="click:$root.archiveProject"></i>
<!-- /ko -->
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removeProject, css:{'whiteish':$root.selectedRowID() == id}"></i>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="4" class="align-right table-tealish-header">
Totaal
</th>
<th class="align-right table-tealish-header">
€ <span data-bind="text:totalOwnRevenue"></span>
</th>
<th class="align-right table-tealish-header">
€ <span data-bind="text:totalOtherrevenue"></span>
</th>
<th class="align-right table-tealish-header">
€ <span data-bind="text:totalCosts"></span>
</th>
<th class="align-right table-tealish-header">
€ <span data-bind="text:total"></span>
</th>
<th class="align-right table-tealish-header"></th>
</tr>
<tr>
<td colspan="5" class="">
<!-- <button class="btn btn-primary btn-round btn-sm" data-bind="click:newProject">-->
<!-- nieuw project-->
<!-- </button>-->
</td>
<td colspan="3" class="">
<div class="row form-horizontal">
<label class="col-md-4 form-control-label">archief</label>
<div class="col-md-8">
<div class="onoffswitch" data-bind="click:toggleArchive">
<input type="checkbox"
name="onoffswitch"
class="onoffswitch-checkbox"
data-bind="checked:archive"
id="myonoffswitch">
<label class="onoffswitch-label" for="myonoffswitch">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</div>
</div>
</td>
</tr>
</tfoot>
</table>
+138
View File
@@ -0,0 +1,138 @@
<div id="RESERVATIONS">
<div class="row">
<div class="col-md-12">
<label class="col-xs-12">
alle bedragen inclusief btw
</label>
<table class="table table-condensed">
<thead>
<tr>
<th width="2%">&nbsp;</th>
<th width="34%">project</th>
<th width="8%" class="align-right">Kosten derden</th>
<th width="8%" class="align-right">factuur INK</th>
<th width="8%" class="align-right">gereserveerd op<br/>spaarrekening</th>
<th width="8%" class="align-right">betaald</th>
<th width="8%" class="align-right">nog te betalen<br />facturen</th>
<th width="8%" class="align-right">betaald via<br />reserveringen</th>
<th width="8%" class="align-right">saldo reservering</th>
<th width="8%" class="align-right">saldo facturen INK</th>
</tr>
</thead>
<!-- ko foreach:projects -->
<tbody>
<tr>
<th>
<i class="icon fa-chevron-right"
data-bind="click:$root.toggleExternals, visible: ! showExternals()">
</i>
<i class="icon fa-chevron-down"
data-bind="click:$root.toggleExternals, visible:showExternals()">
</i>
</th>
<th>
<span data-bind="text:projectnumber"></span>
</th>
<th class="align-right" data-bind="visible: ! showExternals()">
<span data-bind="text:otherRevenue"></span>
</th>
<th class="align-right" data-bind="visible: ! showExternals()">
<span data-bind="text:costs"></span>
</th>
<th class="align-right" data-bind="visible: ! showExternals()">
<span data-bind="text:reservation"></span>
</th>
<th class="align-right" data-bind="visible: ! showExternals()">
<span data-bind="text:payed"></span>
</th>
<th class="align-right" data-bind="visible: ! showExternals()">
<span data-bind="text:saldoToPay"></span>
</th>
<th class="align-right" data-bind="visible: ! showExternals()">
<span data-bind="text:fromreservation"></span>
</th>
<th class="align-right" data-bind="visible: ! showExternals()">
<span data-bind="text:saldo"></span>
</th>
<th class="align-right" data-bind="visible: ! showExternals()">
<span data-bind="text:saldoInvoices"></span>
</th>
</tr>
<!-- ko if:showExternals() -->
<!-- ko foreach: externals -->
<tr>
<td width="5px">&nbsp;</td>
<td>
<span data-bind="text:externalName"></span>
</td>
<td>&nbsp</td>
<td class="align-right lighgrey-background">
<span data-bind="text:costs"></span>
</td>
<td class="align-right">
<span data-bind="text:reservation"></span>
</td>
<td class="align-right lighgrey-background">
<span data-bind="text:payed"></span>
</td>
<td class="align-right">
<span data-bind="text:saldoToPay"></span>
</td>
<td class="align-right lighgrey-background">
<span data-bind="text:fromreservation"></span>
</td>
<td class="align-right">
<span data-bind="text:saldo"></span>
</td>
<td>&nbsp;</td>
</tr>
<!-- /ko -->
<!-- /ko -->
<!-- ko if:showExternals() -->
<tr class="subtotal">
<th colspan="2">Totaal</th>
<th class="align-right">
<span data-bind="text:otherRevenue"></span>
</th>
<th class="align-right">
<span data-bind="text:costs"></span>
</th>
<th class="align-right">
<span data-bind="text:reservation"></span>
</th>
<th class="align-right">
<span data-bind="text:payed"></span>
</th>
<th class="align-right">
<span data-bind="text:saldoToPay"></span>
</th>
<th class="align-right">
<span data-bind="text:fromreservation"></span>
</th>
<th class="align-right">
<span data-bind="text:saldo"></span>
</th>
<th class="align-right">
<span data-bind="text:saldoInvoices"></span>
</th>
</tr>
<!-- /ko -->
</tbody>
<!-- /ko -->
<tfoot>
<tr class="grandtotal">
<th colspan="2">Grand totaal</th>
<th class="align-right"><span data-bind="text:otherRevenue"></span></th>
<th class="align-right"><span data-bind="text:costs"></span></th>
<th class="align-right"><span data-bind="text:reservation"></span></th>
<th class="align-right"><span data-bind="text:payed"></span></th>
<th class="align-right"><span data-bind="text:saldoToPay"></span></th>
<th class="align-right"><span data-bind="text:fromreservation"></span></th>
<th class="align-right"><span data-bind="text:saldo"></span></th>
<th class="align-right"><span data-bind="text:saldoInvoices"></span></th>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
+65
View File
@@ -0,0 +1,65 @@
<table class="table table-sm">
<thead>
<tr>
<th class="table-tealish-header">voornaam</th>
<th class="table-tealish-header">achternaam</th>
<th class="table-tealish-header">tussenvoegsel</th>
<th class="table-tealish-header">gebruikersnaam</th>
<th class="table-tealish-header">email</th>
<th class="table-tealish-header">rol</th>
<th class="table-tealish-header">&nbsp;</th>
</tr>
</thead>
<tbody data-bind="foreach:users">
<tr>
<td><span data-bind="text:lastname"></span></td>
<td><span data-bind="text:firstname"></span></td>
<td><span data-bind="text:middlename"></span></td>
<td><span data-bind="text:username"</td>
<td><span data-bind="text:email"></span></td>
<td><span data-bind=""></span></td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editUser"></i>
<i class="icon fa-user pointer" title="uren" data-bind="click:$root.editTarget"></i>
<!-- ko if:archive == 'F' -->
<i class="icon fa-archive pointer" title="archiveer"
data-bind="click:$root.archiveUser"></i>
<!-- /ko -->
<!-- ko if:archive != 'F' -->
<i class="icon fa-minus-circle redish pointer" title="archiveer"
data-bind="click:$root.archiveUser"></i>
<!-- /ko -->
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removeUser"></i>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="5" class="">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:newUser">
nieuwe gebruiker
</button>
</td>
<td colspan="2" class="">
<div class="row form-horizontal">
<label class="col-md-4 form-control-label">archief</label>
<div class="col-md-8">
<div class="onoffswitch" data-bind="click:toggleArchive">
<input type="checkbox"
name="onoffswitch"
class="onoffswitch-checkbox"
data-bind="checked:archive"
id="myonoffswitch">
<label class="onoffswitch-label" for="myonoffswitch">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</div>
</div>
</td>
</tr>
</tfoot>
</table>
+42
View File
@@ -0,0 +1,42 @@
<div class="VAT">
<div class="row">
<div class="col-md-2">
<table class="table table-condensed">
<thead>
<tr>
<th>percentage</th>
<th></th>
</tr>
</thead>
<tbody data-bind="foreach:vats">
<tr>
<td>
<div class="percentage-sign-holder">
<!-- ko if:inEdit() -->
<input type="text"
class="form-control percentage-input"
data-bind="textInput:vatrate,
event:{keyup:$root.validateNumber.bind($data, 'vatrate')}">
<!-- /ko -->
<!-- ko if: !inEdit() -->
<span data-bind="text:vatrate"></span>&#x25;
<!-- /ko -->
</div>
</td>
<td width="60px">
<i class="icon fa-edit pointer" data-bind="click:$root.toggleEdit"></i>
<i class="icon fa-trash redish pointer" data-bind="click:$root.removeVat"></i>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="2">
<button class="btn btn-primary" data-bind="click:addVat">voeg btw toe</button>
</th>
</tr>
</tfoot>
</table>
</div>
</div>
</div>