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
+366
View File
@@ -0,0 +1,366 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>wachtwoord DBOIS</title>
<link href="styles.css" media="all" rel="stylesheet" type="text/css"/>
</head>
<style>
/* -------------------------------------
GLOBAL
------------------------------------- */
* {
margin: 0;
padding: 0;
font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
box-sizing: border-box;
font-size: 14px;
}
img {
max-width: 100%;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
height: 100%;
line-height: 1.6;
}
/* Let's make sure all tables have defaults */
table td {
vertical-align: top;
}
/* -------------------------------------
BODY & CONTAINER
------------------------------------- */
body {
background-color: #f6f6f6;
}
.body-wrap {
background-color: #f6f6f6;
width: 100%;
}
.container {
display: block !important;
max-width: 600px !important;
margin: 0 auto !important;
/* makes it centered */
clear: both !important;
}
.content {
max-width: 600px;
margin: 0 auto;
display: block;
padding: 20px;
}
/* -------------------------------------
HEADER, FOOTER, MAIN
------------------------------------- */
.main {
background: #fff;
border: 1px solid #e9e9e9;
border-radius: 3px;
}
.content-wrap {
padding: 20px;
}
.content-block {
padding: 0 0 20px;
}
.header {
width: 100%;
margin-bottom: 20px;
}
.footer {
width: 100%;
clear: both;
color: #999;
padding: 20px;
}
.footer a {
color: #999;
}
.footer p, .footer a, .footer unsubscribe, .footer td {
font-size: 12px;
}
/* -------------------------------------
GRID AND COLUMNS
------------------------------------- */
.column-left {
float: left;
width: 50%;
}
.column-right {
float: left;
width: 50%;
}
/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1, h2, h3 {
font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
color: #000;
margin: 40px 0 0;
line-height: 1.2;
font-weight: 400;
}
h1 {
font-size: 32px;
font-weight: 500;
}
h2 {
font-size: 24px;
}
h3 {
font-size: 18px;
}
h4 {
font-size: 14px;
font-weight: 600;
}
p, ul, ol {
margin-bottom: 10px;
font-weight: normal;
}
p li, ul li, ol li {
margin-left: 5px;
list-style-position: inside;
}
/* -------------------------------------
LINKS & BUTTONS
------------------------------------- */
a {
color: #348eda;
text-decoration: underline;
}
.btn-primary {
text-decoration: none;
color: #FFF;
background-color: #348eda;
border: solid #348eda;
border-width: 10px 20px;
line-height: 2;
font-weight: bold;
text-align: center;
cursor: pointer;
display: inline-block;
border-radius: 5px;
text-transform: capitalize;
}
/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.padding {
padding: 10px 0;
}
.aligncenter {
text-align: center;
}
.alignright {
text-align: right;
}
.alignleft {
text-align: left;
}
.clear {
clear: both;
}
/* -------------------------------------
Alerts
------------------------------------- */
.alert {
font-size: 16px;
color: #fff;
font-weight: 500;
padding: 20px;
text-align: center;
border-radius: 3px 3px 0 0;
}
.alert a {
color: #fff;
text-decoration: none;
font-weight: 500;
font-size: 16px;
}
.alert.alert-warning {
background: #ff9f00;
}
.alert.alert-bad {
background: #d0021b;
}
.alert.alert-good {
background: #68b90f;
}
/* -------------------------------------
INVOICE
------------------------------------- */
.invoice {
margin: 40px auto;
text-align: left;
width: 80%;
}
.invoice td {
padding: 5px 0;
}
.invoice .invoice-items {
width: 100%;
}
.invoice .invoice-items td {
border-top: #eee 1px solid;
}
.invoice .invoice-items .total td {
border-top: 2px solid #333;
border-bottom: 2px solid #333;
font-weight: 700;
}
/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 640px) {
h1, h2, h3, h4 {
font-weight: 600 !important;
margin: 20px 0 5px !important;
}
h1 {
font-size: 22px !important;
}
h2 {
font-size: 18px !important;
}
h3 {
font-size: 16px !important;
}
.container {
width: 100% !important;
}
.content, .content-wrapper {
padding: 10px !important;
}
.invoice {
width: 100% !important;
}
}
</style>
<body>
<table class="body-wrap">
<tr>
<td></td>
<td class="container" width="600">
<div class="content">
<table class="main" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="alert alert-warning">
Nieuw wachtwoord DBOIS De Beleidsonderzoekers
</td>
</tr>
<tr>
<td class="content-wrap">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="content-block">
<p>
Beste <?= $user['firstname']?> <?=$user['middlename']?> <?=$user['lastname']?>
</p>
<p>
U heeft een wachtwoord aangevraagd voor DBOIS, hieronder vindt u uw gebruikersnaam en uw nieuwe wachtwoord waarmee u kunt inloggen in het systeem.
</p>
</td>
</tr>
<tr>
<td class="content-block">
<table class="invoice">
<tr>
<td>
<table class="invoice-items" cellpadding="0" cellspacing="0">
<tr>
<td>gebruikersnaam</td>
<td class="alignright"><?= $user['username'] ?></td>
</tr>
<tr>
<td>wacthwoord</td>
<td class="alignright"><?= $user['password'] ?></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="content-block">
<a href="<?php echo getenv('APP_URL'); ?>" class="btn-primary">
Ga naar het informatiesysteem
</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
<td></td>
</tr>
</table>
</body>
</html>
+172
View File
@@ -0,0 +1,172 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Verificatiecode DBOIS</title>
<link href="styles.css" media="all" rel="stylesheet" type="text/css"/>
</head>
<style>
/* Same styles as requestpassword_email.php */
* {
margin: 0;
padding: 0;
font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
box-sizing: border-box;
font-size: 14px;
}
img {
max-width: 100%;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
height: 100%;
line-height: 1.6;
background-color: #f6f6f6;
}
table td {
vertical-align: top;
}
.body-wrap {
background-color: #f6f6f6;
width: 100%;
}
.container {
display: block !important;
max-width: 600px !important;
margin: 0 auto !important;
clear: both !important;
}
.content {
max-width: 600px;
margin: 0 auto;
display: block;
padding: 20px;
}
.main {
background: #fff;
border: 1px solid #e9e9e9;
border-radius: 3px;
}
.content-wrap {
padding: 20px;
}
.content-block {
padding: 0 0 20px;
}
.alert {
font-size: 16px;
color: #fff;
font-weight: 500;
padding: 20px;
text-align: center;
border-radius: 3px 3px 0 0;
}
.alert.alert-warning {
background: #ff9f00;
}
.alert.alert-good {
background: #68b90f;
}
.otp-code {
font-size: 32px;
font-weight: bold;
letter-spacing: 8px;
text-align: center;
padding: 20px;
background-color: #f0f0f0;
border: 2px dashed #348eda;
border-radius: 5px;
margin: 20px 0;
}
p {
margin-bottom: 10px;
font-weight: normal;
}
@media only screen and (max-width: 640px) {
.container {
width: 100% !important;
}
.content {
padding: 10px !important;
}
.otp-code {
font-size: 24px;
letter-spacing: 4px;
}
}
</style>
<body>
<table class="body-wrap">
<tr>
<td></td>
<td class="container" width="600">
<div class="content">
<table class="main" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="alert alert-good">
Tweefactorauthenticatie - DBOIS
</td>
</tr>
<tr>
<td class="content-wrap">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="content-block">
<p>
Beste <?= $user['firstname']?> <?=$user['middlename']?> <?=$user['lastname']?>
</p>
<p>
U probeert in te loggen in DBOIS. Gebruik de onderstaande verificatiecode om uw login te voltooien.
</p>
</td>
</tr>
<tr>
<td class="content-block">
<div class="otp-code">
<?= $user['otp_code'] ?>
</div>
</td>
</tr>
<tr>
<td class="content-block">
<p>
Deze code is 10 minuten geldig.
</p>
<p>
Als u niet heeft geprobeerd in te loggen, negeer dan deze e-mail.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
<td></td>
</tr>
</table>
</body>
</html>
+372
View File
@@ -0,0 +1,372 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>wachtwoord DBOIS</title>
<link href="styles.css" media="all" rel="stylesheet" type="text/css"/>
</head>
<style>
/* -------------------------------------
GLOBAL
------------------------------------- */
* {
margin: 0;
padding: 0;
font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
box-sizing: border-box;
font-size: 14px;
}
img {
max-width: 100%;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
height: 100%;
line-height: 1.6;
}
/* Let's make sure all tables have defaults */
table td {
vertical-align: top;
}
/* -------------------------------------
BODY & CONTAINER
------------------------------------- */
body {
background-color: #f6f6f6;
}
.body-wrap {
background-color: #f6f6f6;
width: 100%;
}
.container {
display: block !important;
max-width: 600px !important;
margin: 0 auto !important;
/* makes it centered */
clear: both !important;
}
.content {
max-width: 600px;
margin: 0 auto;
display: block;
padding: 20px;
}
/* -------------------------------------
HEADER, FOOTER, MAIN
------------------------------------- */
.main {
background: #fff;
border: 1px solid #e9e9e9;
border-radius: 3px;
}
.content-wrap {
padding: 20px;
}
.content-block {
padding: 0 0 20px;
}
.header {
width: 100%;
margin-bottom: 20px;
}
.footer {
width: 100%;
clear: both;
color: #999;
padding: 20px;
}
.footer a {
color: #999;
}
.footer p, .footer a, .footer unsubscribe, .footer td {
font-size: 12px;
}
/* -------------------------------------
GRID AND COLUMNS
------------------------------------- */
.column-left {
float: left;
width: 50%;
}
.column-right {
float: left;
width: 50%;
}
/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1, h2, h3 {
font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
color: #000;
margin: 40px 0 0;
line-height: 1.2;
font-weight: 400;
}
h1 {
font-size: 32px;
font-weight: 500;
}
h2 {
font-size: 24px;
}
h3 {
font-size: 18px;
}
h4 {
font-size: 14px;
font-weight: 600;
}
p, ul, ol {
margin-bottom: 10px;
font-weight: normal;
}
p li, ul li, ol li {
margin-left: 5px;
list-style-position: inside;
}
/* -------------------------------------
LINKS & BUTTONS
------------------------------------- */
a {
color: #348eda;
text-decoration: underline;
}
.btn-primary {
text-decoration: none;
color: #FFF;
background-color: #348eda;
border: solid #348eda;
border-width: 10px 20px;
line-height: 2;
font-weight: bold;
text-align: center;
cursor: pointer;
display: inline-block;
border-radius: 5px;
text-transform: capitalize;
}
/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.padding {
padding: 10px 0;
}
.aligncenter {
text-align: center;
}
.alignright {
text-align: right;
}
.alignleft {
text-align: left;
}
.clear {
clear: both;
}
/* -------------------------------------
Alerts
------------------------------------- */
.alert {
font-size: 16px;
color: #fff;
font-weight: 500;
padding: 20px;
text-align: center;
border-radius: 3px 3px 0 0;
}
.alert a {
color: #fff;
text-decoration: none;
font-weight: 500;
font-size: 16px;
}
.alert.alert-warning {
background: #ff9f00;
}
.alert.alert-bad {
background: #d0021b;
}
.alert.alert-good {
background: #68b90f;
}
/* -------------------------------------
INVOICE
------------------------------------- */
.invoice {
margin: 40px auto;
text-align: left;
width: 80%;
}
.invoice td {
padding: 5px 0;
}
.invoice .invoice-items {
width: 100%;
}
.invoice .invoice-items td {
border-top: #eee 1px solid;
}
.invoice .invoice-items .total td {
border-top: 2px solid #333;
border-bottom: 2px solid #333;
font-weight: 700;
}
/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 640px) {
h1, h2, h3, h4 {
font-weight: 600 !important;
margin: 20px 0 5px !important;
}
h1 {
font-size: 22px !important;
}
h2 {
font-size: 18px !important;
}
h3 {
font-size: 16px !important;
}
.container {
width: 100% !important;
}
.content, .content-wrapper {
padding: 10px !important;
}
.invoice {
width: 100% !important;
}
}
</style>
<body>
<table class="body-wrap">
<tr>
<td></td>
<td class="container" width="600">
<div class="content">
<table class="main" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="alert alert-warning">
Wachtwoord De Beleidsonderzoekers
</td>
</tr>
<tr>
<td class="content-wrap">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="content-block">
<p>
Beste <?= $user['firstname']?> <?=$user['middlename']?> <?=$user['lastname']?>
</p>
<p>
Er is voor u een account aangemaakt is het informatiesysteem van de Beleidsonderzoekers, hieronder vindt u uw gebruikersnaam en wachtwoord waarmee u kunt inloggen in het systeem.
</p>
</td>
</tr>
<tr>
<td class="content-block">
Hieronder vindt u uw gebruikersnaam wachtwoord om in te loggen op het
informatiesysteem van De Beleidsonderzoekers
</td>
</tr>
<tr>
<td class="content-block">
<table class="invoice">
<tr>
<td>
<table class="invoice-items" cellpadding="0" cellspacing="0">
<tr>
<td>gebruikersnaam</td>
<td class="alignright"><?= $user['username'] ?></td>
</tr>
<tr>
<td>wacthwoord</td>
<td class="alignright"><?= $password ?></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="content-block">
<a href="<?php echo getenv('APP_URL'); ?>" class="btn-primary">
Ga naar het informatiesysteem
</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
<td></td>
</tr>
</table>
</body>
</html>
+7
View File
@@ -0,0 +1,7 @@
<?php
use CodeIgniter\CLI\CLI;
CLI::error('ERROR: ' . $code);
CLI::write($message);
CLI::newLine();
+8
View File
@@ -0,0 +1,8 @@
<?php
echo "\nDatabase error: ",
$heading,
"\n\n",
$message,
"\n\n";
+65
View File
@@ -0,0 +1,65 @@
<?php
use CodeIgniter\CLI\CLI;
// The main Exception
CLI::write('[' . $exception::class . ']', 'light_gray', 'red');
CLI::write($message);
CLI::write('at ' . CLI::color(clean_path($exception->getFile()) . ':' . $exception->getLine(), 'green'));
CLI::newLine();
$last = $exception;
while ($prevException = $last->getPrevious()) {
$last = $prevException;
CLI::write(' Caused by:');
CLI::write(' [' . $prevException::class . ']', 'red');
CLI::write(' ' . $prevException->getMessage());
CLI::write(' at ' . CLI::color(clean_path($prevException->getFile()) . ':' . $prevException->getLine(), 'green'));
CLI::newLine();
}
// The backtrace
if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE) {
$backtraces = $last->getTrace();
if ($backtraces) {
CLI::write('Backtrace:', 'green');
}
foreach ($backtraces as $i => $error) {
$padFile = ' '; // 4 spaces
$padClass = ' '; // 7 spaces
$c = str_pad($i + 1, 3, ' ', STR_PAD_LEFT);
if (isset($error['file'])) {
$filepath = clean_path($error['file']) . ':' . $error['line'];
CLI::write($c . $padFile . CLI::color($filepath, 'yellow'));
} else {
CLI::write($c . $padFile . CLI::color('[internal function]', 'yellow'));
}
$function = '';
if (isset($error['class'])) {
$type = ($error['type'] === '->') ? '()' . $error['type'] : $error['type'];
$function .= $padClass . $error['class'] . $type . $error['function'];
} elseif (! isset($error['class']) && isset($error['function'])) {
$function .= $padClass . $error['function'];
}
$args = implode(', ', array_map(static fn ($value): string => match (true) {
is_object($value) => 'Object(' . $value::class . ')',
is_array($value) => $value !== [] ? '[...]' : '[]',
$value === null => 'null', // return the lowercased version
default => var_export($value, true),
}, array_values($error['args'] ?? [])));
$function .= '(' . $args . ')';
CLI::write($function);
CLI::newLine();
}
}
+8
View File
@@ -0,0 +1,8 @@
<?php
echo "\nERROR: ",
$heading,
"\n\n",
$message,
"\n\n";
+21
View File
@@ -0,0 +1,21 @@
<?php ?>
A PHP Error was encountered
Severity: <?php echo $severity, "\n"; ?>
Message: <?php echo $message, "\n"; ?>
Filename: <?php echo $filepath, "\n"; ?>
Line Number: <?php echo $line; ?>
<?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?>
Backtrace:
<?php foreach (debug_backtrace() as $error): ?>
<?php if (isset($error['file']) && strpos($error['file'], realpath(BASEPATH)) !== 0): ?>
File: <?php echo $error['file'], "\n"; ?>
Line: <?php echo $error['line'], "\n"; ?>
Function: <?php echo $error['function'], "\n\n"; ?>
<?php endif ?>
<?php endforeach ?>
<?php endif ?>
+11
View File
@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
+5
View File
@@ -0,0 +1,5 @@
<?php
// On the CLI, we still want errors in productions
// so just use the exception template.
include __DIR__ . '/error_exception.php';
+194
View File
@@ -0,0 +1,194 @@
:root {
--main-bg-color: #fff;
--main-text-color: #555;
--dark-text-color: #222;
--light-text-color: #c7c7c7;
--brand-primary-color: #DC4814;
--light-bg-color: #ededee;
--dark-bg-color: #404040;
}
body {
height: 100%;
background: var(--main-bg-color);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
color: var(--main-text-color);
font-weight: 300;
margin: 0;
padding: 0;
}
h1 {
font-weight: lighter;
font-size: 3rem;
color: var(--dark-text-color);
margin: 0;
}
h1.headline {
margin-top: 20%;
font-size: 5rem;
}
.text-center {
text-align: center;
}
p.lead {
font-size: 1.6rem;
}
.container {
max-width: 75rem;
margin: 0 auto;
padding: 1rem;
}
.header {
background: var(--light-bg-color);
color: var(--dark-text-color);
margin-top: 2.17rem;
}
.header .container {
padding: 1rem;
}
.header h1 {
font-size: 2.5rem;
font-weight: 500;
}
.header p {
font-size: 1.2rem;
margin: 0;
line-height: 2.5;
}
.header a {
color: var(--brand-primary-color);
margin-left: 2rem;
display: none;
text-decoration: none;
}
.header:hover a {
display: inline;
}
.environment {
background: var(--brand-primary-color);
color: var(--main-bg-color);
text-align: center;
padding: calc(4px + 0.2083vw);
width: 100%;
top: 0;
position: fixed;
}
.source {
background: #343434;
color: var(--light-text-color);
padding: 0.5em 1em;
border-radius: 5px;
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
font-size: 0.85rem;
margin: 0;
overflow-x: scroll;
}
.source span.line {
line-height: 1.4;
}
.source span.line .number {
color: #666;
}
.source .line .highlight {
display: block;
background: var(--dark-text-color);
color: var(--light-text-color);
}
.source span.highlight .number {
color: #fff;
}
.tabs {
list-style: none;
list-style-position: inside;
margin: 0;
padding: 0;
margin-bottom: -1px;
}
.tabs li {
display: inline;
}
.tabs a:link,
.tabs a:visited {
padding: 0 1rem;
line-height: 2.7;
text-decoration: none;
color: var(--dark-text-color);
background: var(--light-bg-color);
border: 1px solid rgba(0,0,0,0.15);
border-bottom: 0;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
display: inline-block;
}
.tabs a:hover {
background: var(--light-bg-color);
border-color: rgba(0,0,0,0.15);
}
.tabs a.active {
background: var(--main-bg-color);
color: var(--main-text-color);
}
.tab-content {
background: var(--main-bg-color);
border: 1px solid rgba(0,0,0,0.15);
}
.content {
padding: 1rem;
}
.hide {
display: none;
}
.alert {
margin-top: 2rem;
display: block;
text-align: center;
line-height: 3.0;
background: #d9edf7;
border: 1px solid #bcdff1;
border-radius: 5px;
color: #31708f;
}
table {
width: 100%;
overflow: hidden;
}
th {
text-align: left;
border-bottom: 1px solid #e7e7e7;
padding-bottom: 0.5rem;
}
td {
padding: 0.2rem 0.5rem 0.2rem 0;
}
tr:hover td {
background: #f1f1f1;
}
td pre {
white-space: pre-wrap;
}
.trace a {
color: inherit;
}
.trace table {
width: auto;
}
.trace tr td:first-child {
min-width: 5em;
font-weight: bold;
}
.trace td {
background: var(--light-bg-color);
padding: 0 1rem;
}
.trace td pre {
margin: 0;
}
.args {
display: none;
}
+116
View File
@@ -0,0 +1,116 @@
var tabLinks = new Array();
var contentDivs = new Array();
function init()
{
// Grab the tab links and content divs from the page
var tabListItems = document.getElementById('tabs').childNodes;
console.log(tabListItems);
for (var i = 0; i < tabListItems.length; i ++)
{
if (tabListItems[i].nodeName == "LI")
{
var tabLink = getFirstChildWithTagName(tabListItems[i], 'A');
var id = getHash(tabLink.getAttribute('href'));
tabLinks[id] = tabLink;
contentDivs[id] = document.getElementById(id);
}
}
// Assign onclick events to the tab links, and
// highlight the first tab
var i = 0;
for (var id in tabLinks)
{
tabLinks[id].onclick = showTab;
tabLinks[id].onfocus = function () {
this.blur()
};
if (i == 0)
{
tabLinks[id].className = 'active';
}
i ++;
}
// Hide all content divs except the first
var i = 0;
for (var id in contentDivs)
{
if (i != 0)
{
console.log(contentDivs[id]);
contentDivs[id].className = 'content hide';
}
i ++;
}
}
function showTab()
{
var selectedId = getHash(this.getAttribute('href'));
// Highlight the selected tab, and dim all others.
// Also show the selected content div, and hide all others.
for (var id in contentDivs)
{
if (id == selectedId)
{
tabLinks[id].className = 'active';
contentDivs[id].className = 'content';
}
else
{
tabLinks[id].className = '';
contentDivs[id].className = 'content hide';
}
}
// Stop the browser following the link
return false;
}
function getFirstChildWithTagName(element, tagName)
{
for (var i = 0; i < element.childNodes.length; i ++)
{
if (element.childNodes[i].nodeName == tagName)
{
return element.childNodes[i];
}
}
}
function getHash(url)
{
var hashPos = url.lastIndexOf('#');
return url.substring(hashPos + 1);
}
function toggle(elem)
{
elem = document.getElementById(elem);
if (elem.style && elem.style['display'])
{
// Only works with the "style" attr
var disp = elem.style['display'];
}
else if (elem.currentStyle)
{
// For MSIE, naturally
var disp = elem.currentStyle['display'];
}
else if (window.getComputedStyle)
{
// For most other browsers
var disp = document.defaultView.getComputedStyle(elem, null).getPropertyValue('display');
}
// Toggle the state of the "display" style
elem.style.display = disp == 'block' ? 'none' : 'block';
return false;
}
+84
View File
@@ -0,0 +1,84 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title><?= lang('Errors.badRequest') ?></title>
<style>
div.logo {
height: 200px;
width: 155px;
display: inline-block;
opacity: 0.08;
position: absolute;
top: 2rem;
left: 50%;
margin-left: -73px;
}
body {
height: 100%;
background: #fafafa;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #777;
font-weight: 300;
}
h1 {
font-weight: lighter;
letter-spacing: normal;
font-size: 3rem;
margin-top: 0;
margin-bottom: 0;
color: #222;
}
.wrap {
max-width: 1024px;
margin: 5rem auto;
padding: 2rem;
background: #fff;
text-align: center;
border: 1px solid #efefef;
border-radius: 0.5rem;
position: relative;
}
pre {
white-space: normal;
margin-top: 1.5rem;
}
code {
background: #fafafa;
border: 1px solid #efefef;
padding: 0.5rem 1rem;
border-radius: 5px;
display: block;
}
p {
margin-top: 1.5rem;
}
.footer {
margin-top: 2rem;
border-top: 1px solid #efefef;
padding: 1em 2em 0 2em;
font-size: 85%;
color: #999;
}
a:active,
a:link,
a:visited {
color: #dd4814;
}
</style>
</head>
<body>
<div class="wrap">
<h1>400</h1>
<p>
<?php if (ENVIRONMENT !== 'production') : ?>
<?= nl2br(esc($message)) ?>
<?php else : ?>
<?= lang('Errors.sorryBadRequest') ?>
<?php endif; ?>
</p>
</div>
</body>
</html>
+84
View File
@@ -0,0 +1,84 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title><?= lang('Errors.pageNotFound') ?></title>
<style>
div.logo {
height: 200px;
width: 155px;
display: inline-block;
opacity: 0.08;
position: absolute;
top: 2rem;
left: 50%;
margin-left: -73px;
}
body {
height: 100%;
background: #fafafa;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #777;
font-weight: 300;
}
h1 {
font-weight: lighter;
letter-spacing: normal;
font-size: 3rem;
margin-top: 0;
margin-bottom: 0;
color: #222;
}
.wrap {
max-width: 1024px;
margin: 5rem auto;
padding: 2rem;
background: #fff;
text-align: center;
border: 1px solid #efefef;
border-radius: 0.5rem;
position: relative;
}
pre {
white-space: normal;
margin-top: 1.5rem;
}
code {
background: #fafafa;
border: 1px solid #efefef;
padding: 0.5rem 1rem;
border-radius: 5px;
display: block;
}
p {
margin-top: 1.5rem;
}
.footer {
margin-top: 2rem;
border-top: 1px solid #efefef;
padding: 1em 2em 0 2em;
font-size: 85%;
color: #999;
}
a:active,
a:link,
a:visited {
color: #dd4814;
}
</style>
</head>
<body>
<div class="wrap">
<h1>404</h1>
<p>
<?php if (ENVIRONMENT !== 'production') : ?>
<?= nl2br(esc($message)) ?>
<?php else : ?>
<?= lang('Errors.sorryCannotFind') ?>
<?php endif; ?>
</p>
</div>
</body>
</html>
+64
View File
@@ -0,0 +1,64 @@
<?php
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Database Error</title>
<style type="text/css">
::selection { background-color: #E13300; color: white; }
::-moz-selection { background-color: #E13300; color: white; }
body {
background-color: #fff;
margin: 40px;
font: 13px/20px normal Helvetica, Arial, sans-serif;
color: #4F5155;
}
a {
color: #003399;
background-color: transparent;
font-weight: normal;
}
h1 {
color: #444;
background-color: transparent;
border-bottom: 1px solid #D0D0D0;
font-size: 19px;
font-weight: normal;
margin: 0 0 14px 0;
padding: 14px 15px 10px 15px;
}
code {
font-family: Consolas, Monaco, Courier New, Courier, monospace;
font-size: 12px;
background-color: #f9f9f9;
border: 1px solid #D0D0D0;
color: #002166;
display: block;
margin: 14px 0 14px 0;
padding: 12px 10px 12px 10px;
}
#container {
margin: 10px;
border: 1px solid #D0D0D0;
box-shadow: 0 0 8px #D0D0D0;
}
p {
margin: 12px 15px 12px 15px;
}
</style>
</head>
<body>
<div id="container">
<h1><?php echo $heading; ?></h1>
<?php echo $message; ?>
</div>
</body>
</html>
+429
View File
@@ -0,0 +1,429 @@
<?php
use CodeIgniter\HTTP\Header;
use CodeIgniter\CodeIgniter;
$errorId = uniqid('error', true);
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex">
<title><?= esc($title) ?></title>
<style>
<?= preg_replace('#[\r\n\t ]+#', ' ', file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.css')) ?>
</style>
<script>
<?= file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.js') ?>
</script>
</head>
<body onload="init()">
<!-- Header -->
<div class="header">
<div class="environment">
Displayed at <?= esc(date('H:i:s')) ?> &mdash;
PHP: <?= esc(PHP_VERSION) ?> &mdash;
CodeIgniter: <?= esc(CodeIgniter::CI_VERSION) ?> --
Environment: <?= ENVIRONMENT ?>
</div>
<div class="container">
<h1><?= esc($title), esc($exception->getCode() ? ' #' . $exception->getCode() : '') ?></h1>
<p>
<?= nl2br(esc($exception->getMessage())) ?>
<a href="https://www.duckduckgo.com/?q=<?= urlencode($title . ' ' . preg_replace('#\'.*\'|".*"#Us', '', $exception->getMessage())) ?>"
rel="noreferrer" target="_blank">search &rarr;</a>
</p>
</div>
</div>
<!-- Source -->
<div class="container">
<p><b><?= esc(clean_path($file)) ?></b> at line <b><?= esc($line) ?></b></p>
<?php if (is_file($file)) : ?>
<div class="source">
<?= static::highlightFile($file, $line, 15); ?>
</div>
<?php endif; ?>
</div>
<div class="container">
<?php
$last = $exception;
while ($prevException = $last->getPrevious()) {
$last = $prevException;
?>
<pre>
Caused by:
<?= esc($prevException::class), esc($prevException->getCode() ? ' #' . $prevException->getCode() : '') ?>
<?= nl2br(esc($prevException->getMessage())) ?>
<a href="https://www.duckduckgo.com/?q=<?= urlencode($prevException::class . ' ' . preg_replace('#\'.*\'|".*"#Us', '', $prevException->getMessage())) ?>"
rel="noreferrer" target="_blank">search &rarr;</a>
<?= esc(clean_path($prevException->getFile()) . ':' . $prevException->getLine()) ?>
</pre>
<?php
}
?>
</div>
<?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE) : ?>
<div class="container">
<ul class="tabs" id="tabs">
<li><a href="#backtrace">Backtrace</a></li>
<li><a href="#server">Server</a></li>
<li><a href="#request">Request</a></li>
<li><a href="#response">Response</a></li>
<li><a href="#files">Files</a></li>
<li><a href="#memory">Memory</a></li>
</ul>
<div class="tab-content">
<!-- Backtrace -->
<div class="content" id="backtrace">
<ol class="trace">
<?php foreach ($trace as $index => $row) : ?>
<li>
<p>
<!-- Trace info -->
<?php if (isset($row['file']) && is_file($row['file'])) : ?>
<?php
if (isset($row['function']) && in_array($row['function'], ['include', 'include_once', 'require', 'require_once'], true)) {
echo esc($row['function'] . ' ' . clean_path($row['file']));
} else {
echo esc(clean_path($row['file']) . ' : ' . $row['line']);
}
?>
<?php else: ?>
{PHP internal code}
<?php endif; ?>
<!-- Class/Method -->
<?php if (isset($row['class'])) : ?>
&nbsp;&nbsp;&mdash;&nbsp;&nbsp;<?= esc($row['class'] . $row['type'] . $row['function']) ?>
<?php if (! empty($row['args'])) : ?>
<?php $argsId = $errorId . 'args' . $index ?>
( <a href="#" onclick="return toggle('<?= esc($argsId, 'attr') ?>');">arguments</a> )
<div class="args" id="<?= esc($argsId, 'attr') ?>">
<table cellspacing="0">
<?php
$params = null;
// Reflection by name is not available for closure function
if (! str_ends_with($row['function'], '}')) {
$mirror = isset($row['class']) ? new ReflectionMethod($row['class'], $row['function']) : new ReflectionFunction($row['function']);
$params = $mirror->getParameters();
}
foreach ($row['args'] as $key => $value) : ?>
<tr>
<td><code><?= esc(isset($params[$key]) ? '$' . $params[$key]->name : "#{$key}") ?></code></td>
<td><pre><?= esc(print_r($value, true)) ?></pre></td>
</tr>
<?php endforeach ?>
</table>
</div>
<?php else : ?>
()
<?php endif; ?>
<?php endif; ?>
<?php if (! isset($row['class']) && isset($row['function'])) : ?>
&nbsp;&nbsp;&mdash;&nbsp;&nbsp; <?= esc($row['function']) ?>()
<?php endif; ?>
</p>
<!-- Source? -->
<?php if (isset($row['file']) && is_file($row['file']) && isset($row['class'])) : ?>
<div class="source">
<?= static::highlightFile($row['file'], $row['line']) ?>
</div>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ol>
</div>
<!-- Server -->
<div class="content" id="server">
<?php foreach (['_SERVER', '_SESSION'] as $var) : ?>
<?php
if (empty($GLOBALS[$var]) || ! is_array($GLOBALS[$var])) {
continue;
} ?>
<h3>$<?= esc($var) ?></h3>
<table>
<thead>
<tr>
<th>Key</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<?php foreach ($GLOBALS[$var] as $key => $value) : ?>
<tr>
<td><?= esc($key) ?></td>
<td>
<?php if (is_string($value)) : ?>
<?= esc($value) ?>
<?php else: ?>
<pre><?= esc(print_r($value, true)) ?></pre>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endforeach ?>
<!-- Constants -->
<?php $constants = get_defined_constants(true); ?>
<?php if (! empty($constants['user'])) : ?>
<h3>Constants</h3>
<table>
<thead>
<tr>
<th>Key</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<?php foreach ($constants['user'] as $key => $value) : ?>
<tr>
<td><?= esc($key) ?></td>
<td>
<?php if (is_string($value)) : ?>
<?= esc($value) ?>
<?php else: ?>
<pre><?= esc(print_r($value, true)) ?></pre>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
<!-- Request -->
<div class="content" id="request">
<?php $request = service('request'); ?>
<table>
<tbody>
<tr>
<td style="width: 10em">Path</td>
<td><?= esc($request->getUri()) ?></td>
</tr>
<tr>
<td>HTTP Method</td>
<td><?= esc($request->getMethod()) ?></td>
</tr>
<tr>
<td>IP Address</td>
<td><?= esc($request->getIPAddress()) ?></td>
</tr>
<tr>
<td style="width: 10em">Is AJAX Request?</td>
<td><?= $request->isAJAX() ? 'yes' : 'no' ?></td>
</tr>
<tr>
<td>Is CLI Request?</td>
<td><?= $request->isCLI() ? 'yes' : 'no' ?></td>
</tr>
<tr>
<td>Is Secure Request?</td>
<td><?= $request->isSecure() ? 'yes' : 'no' ?></td>
</tr>
<tr>
<td>User Agent</td>
<td><?= esc($request->getUserAgent()->getAgentString()) ?></td>
</tr>
</tbody>
</table>
<?php $empty = true; ?>
<?php foreach (['_GET', '_POST', '_COOKIE'] as $var) : ?>
<?php
if (empty($GLOBALS[$var]) || ! is_array($GLOBALS[$var])) {
continue;
} ?>
<?php $empty = false; ?>
<h3>$<?= esc($var) ?></h3>
<table style="width: 100%">
<thead>
<tr>
<th>Key</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<?php foreach ($GLOBALS[$var] as $key => $value) : ?>
<tr>
<td><?= esc($key) ?></td>
<td>
<?php if (is_string($value)) : ?>
<?= esc($value) ?>
<?php else: ?>
<pre><?= esc(print_r($value, true)) ?></pre>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endforeach ?>
<?php if ($empty) : ?>
<div class="alert">
No $_GET, $_POST, or $_COOKIE Information to show.
</div>
<?php endif; ?>
<?php $headers = $request->headers(); ?>
<?php if (! empty($headers)) : ?>
<h3>Headers</h3>
<table>
<thead>
<tr>
<th>Header</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<?php foreach ($headers as $name => $value) : ?>
<tr>
<td><?= esc($name, 'html') ?></td>
<td>
<?php
if ($value instanceof Header) {
echo esc($value->getValueLine(), 'html');
} else {
foreach ($value as $i => $header) {
echo ' ('. $i+1 . ') ' . esc($header->getValueLine(), 'html');
}
}
?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
<!-- Response -->
<?php
$response = service('response');
$response->setStatusCode(http_response_code());
?>
<div class="content" id="response">
<table>
<tr>
<td style="width: 15em">Response Status</td>
<td><?= esc($response->getStatusCode() . ' - ' . $response->getReasonPhrase()) ?></td>
</tr>
</table>
<?php $headers = $response->headers(); ?>
<?php if (! empty($headers)) : ?>
<h3>Headers</h3>
<table>
<thead>
<tr>
<th>Header</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<?php foreach ($headers as $name => $value) : ?>
<tr>
<td><?= esc($name, 'html') ?></td>
<td>
<?php
if ($value instanceof Header) {
echo esc($response->getHeaderLine($name), 'html');
} else {
foreach ($value as $i => $header) {
echo ' ('. $i+1 . ') ' . esc($header->getValueLine(), 'html');
}
}
?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
<!-- Files -->
<div class="content" id="files">
<?php $files = get_included_files(); ?>
<ol>
<?php foreach ($files as $file) :?>
<li><?= esc(clean_path($file)) ?></li>
<?php endforeach ?>
</ol>
</div>
<!-- Memory -->
<div class="content" id="memory">
<table>
<tbody>
<tr>
<td>Memory Usage</td>
<td><?= esc(static::describeMemory(memory_get_usage(true))) ?></td>
</tr>
<tr>
<td style="width: 12em">Peak Memory Usage:</td>
<td><?= esc(static::describeMemory(memory_get_peak_usage(true))) ?></td>
</tr>
<tr>
<td>Memory Limit:</td>
<td><?= esc(ini_get('memory_limit')) ?></td>
</tr>
</tbody>
</table>
</div>
</div> <!-- /tab-content -->
</div> <!-- /container -->
<?php endif; ?>
</body>
</html>
+64
View File
@@ -0,0 +1,64 @@
<?php
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
<style type="text/css">
::selection { background-color: #E13300; color: white; }
::-moz-selection { background-color: #E13300; color: white; }
body {
background-color: #fff;
margin: 40px;
font: 13px/20px normal Helvetica, Arial, sans-serif;
color: #4F5155;
}
a {
color: #003399;
background-color: transparent;
font-weight: normal;
}
h1 {
color: #444;
background-color: transparent;
border-bottom: 1px solid #D0D0D0;
font-size: 19px;
font-weight: normal;
margin: 0 0 14px 0;
padding: 14px 15px 10px 15px;
}
code {
font-family: Consolas, Monaco, Courier New, Courier, monospace;
font-size: 12px;
background-color: #f9f9f9;
border: 1px solid #D0D0D0;
color: #002166;
display: block;
margin: 14px 0 14px 0;
padding: 12px 10px 12px 10px;
}
#container {
margin: 10px;
border: 1px solid #D0D0D0;
box-shadow: 0 0 8px #D0D0D0;
}
p {
margin: 12px 15px 12px 15px;
}
</style>
</head>
<body>
<div id="container">
<h1><?php echo $heading; ?></h1>
<?php echo $message; ?>
</div>
</body>
</html>
+33
View File
@@ -0,0 +1,33 @@
<?php
?>
<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">
<h4>A PHP Error was encountered</h4>
<p>Severity: <?php echo $severity; ?></p>
<p>Message: <?php echo $message; ?></p>
<p>Filename: <?php echo $filepath; ?></p>
<p>Line Number: <?php echo $line; ?></p>
<?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?>
<p>Backtrace:</p>
<?php foreach (debug_backtrace() as $error): ?>
<?php if (isset($error['file']) && strpos($error['file'], realpath(BASEPATH)) !== 0): ?>
<p style="margin-left:10px">
File: <?php echo $error['file'] ?><br />
Line: <?php echo $error['line'] ?><br />
Function: <?php echo $error['function'] ?>
</p>
<?php endif ?>
<?php endforeach ?>
<?php endif ?>
</div>
+11
View File
@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
+25
View File
@@ -0,0 +1,25 @@
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex">
<title><?= lang('Errors.whoops') ?></title>
<style>
<?= preg_replace('#[\r\n\t ]+#', ' ', file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.css')) ?>
</style>
</head>
<body>
<div class="container text-center">
<h1 class="headline"><?= lang('Errors.whoops') ?></h1>
<p class="lead"><?= lang('Errors.weHitASnag') ?></p>
</div>
</body>
</html>
+11
View File
@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
+11
View File
@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
+55
View File
@@ -0,0 +1,55 @@
<!doctype html>
<html class="no-js css-menubar" lang="en">
<head>
</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="">
<link rel="icon" href="css/images/dbo-01-80x80.png" type="image/png">
<title>** De Beleidsonderzoeker **</title>
<?php $this->load->view( 'partials/_css' ); ?>
<?php $this->load->view( 'partials/_fonts' ); ?>
</head>
<body id="dbois-app">
<!-- ko stopBinding: true -->
<?php $this->load->view( 'partials/_modals' ); ?>
<!-- /ko -->
<div class="dbois-container">
<div class="my-side-bar">
<?php $this->load->view( 'partials/_navbar-left' ); ?>
</div>
<div class="my-main-content">
<div id="main-content" data-bind="fadeVisible:initialized" style="display:none">
<?php foreach ( $pages as $page ): ?>
<?php if ( count( $page->subpages ) == 0 ): ?>
<?php if ( $page->app_page == 'F' ) continue; ?>
<div data-bind="visible: <?= $page->pageurl ?>">
<!-- ko stopBinding: true -->
<?php $this->load->view( 'pages/content', ['pageurl' => $page->pageurl] ); ?>
<!-- /ko -->
</div>
<?php else: ?>
<?php foreach ( $page->subpages as $subpage ): ?>
<div data-bind="visible: <?= $subpage->pageurl ?>">
<!-- ko stopBinding: true -->
<?php $this->load->view( 'pages/content', ['pageurl' => $subpage->pageurl] ); ?>
<!-- /ko -->
</div>
<?php endforeach; ?>
<?php endif; ?>
<?php endforeach; ?>
<?php $this->load->view( 'partials/_js' ); ?>
</div>
</div>
</div>
</body>
</html>
+100
View File
@@ -0,0 +1,100 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="https://fonts.googleapis.com/css?family=Libre+Franklin&display=swap" rel="stylesheet">
<link rel="icon" href="css/images/dbo-01-80x80.png" type="image/png">
<title>** De Beleidsonderzoekers **</title>
<?= view('partials/_css') ?>
<?= view('partials/_fonts') ?>
<link rel="stylesheet" href="css/menu.css">
<link rel="stylesheet" href="css/dashboard.css">
</head>
<body id="dbois-app">
<!-- ko stopBinding: true -->
<?= view('partials/_modals') ?>
<!-- /ko -->
<div class="dbois-header">
<div class="menu-button-holder">
<div class=menu-button>
<div class="navbar-header">
<button type="button" id="sidebarCollapse"
style="background-color:#E0E0E0"
class="btn btn-default navbar-btn">
<i class="glyphicon glyphicon-menu-hamburger"></i>
</button>
</div>
</div>
</div>
<div class="col-xs-9 col-xs-offset-3">
<a href="#" class="dbois-exit"
data-bind="click:logOut">uitloggen</a>
<div class="clock"></div>
<!-- ko if: hidePasswordinput() -->
<label class="change-password"
data-bind="click:togglePasswordinput">
wachtwoord wijzigen
</label>
<!-- /ko -->
<!-- ko if: ! hidePasswordinput() -->
<div class="change-password">
<div class="col-xs-5">
<input type="password"
data-bind="textinput:newPassword, event:{'keyup':checkPassword}"
class="form-control" placeholder="type hier uw wachtwoord" />
</div>
<div class="col-xs-2">
<button class="btn btn-success"
data-bind="disable:!validPassword(),click:savePassword">wachtwoord aanvragen</button>
</div>
</div>
<!-- /ko -->
</div>
</div>
<div class="wrapper">
<?= view('partials/_navbar-left') ?>
<!-- Page Content Holder -->
<div id="content">
<?php foreach ( $pages as $page ): ?>
<?php if ( count( $page->subpages ) == 0 ): ?>
<?php if ( $page->app_page == 'F' ) continue; ?>
<div data-bind="visible: <?= $page->pageurl ?>">
<!-- ko stopBinding: true -->
<?= view('pages/content', ['pageurl' => $page->pageurl]) ?>
<!-- /ko -->
</div>
<?php else: ?>
<?php foreach ( $page->subpages as $subpage ): ?>
<div data-bind="visible: <?= $subpage->pageurl ?>">
<!-- ko stopBinding: true -->
<?= view('pages/content', ['pageurl' => $subpage->pageurl]) ?>
<!-- /ko -->
</div>
<?php endforeach; ?>
<?php endif; ?>
<?php endforeach; ?>
</div>
</div>
<?= view('partials/_js') ?>
<!-- jQuery CDN -->
<!-- Bootstrap Js CDN -->
<script type="text/javascript">
$(document).ready(function () {
$('#sidebarCollapse').on('click', function () {
$('#sidebar').toggleClass('active');
});
});
</script>
<p class="footer-version-number">V:<?= APP_VERSION ?? '1.0.81' ?></p>
</body>
</html>
+26
View File
@@ -0,0 +1,26 @@
<div class="modal modal-fade-in-scale-up modal-primary" tabindex="-1" id="comment-modal">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">toevoegen / wijzigen commentaar</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-xl-12">
<textarea data-bind="froala:comment, froalaOptions:options"></textarea>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-success"
data-bind="click:saveComment">opslaan
</button>
<button type="button" class="btn btn-warning" data-dismiss="modal">annuleren</button>
</div>
</div>
</div>
</div>
+159
View File
@@ -0,0 +1,159 @@
<div class="modal modal-fade-in-scale-up modal-primary" tabindex="-1" id="customer-modal">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">toevoegen / wijzigen opdrachtgever
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</h5>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<div role="form" class="form-horizontal">
<div class="form-group row">
<label class="col-md-3 form-control-label">
naam
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-institution"></i>
</span>
<input type="text"
placeholder="naam"
class="form-control"
data-bind="textInput:name,
css:{'is-invalid':nameInvalid}">
</div>
<small class="invalid-feedback"
data-bind="style:{display: nameInvalid() ? 'block' : 'none'}">
voer een naam in
</small>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
adres
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-address-book-o"></i>
</span>
<input type="text"
placeholder="adres"
class="form-control"
data-bind="textInput:address">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
postcode
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-address-book-o"></i>
</span>
<input type="text"
placeholder="postcode"
class="form-control"
data-bind="textInput:postcode">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
plaats
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-address-book-o"></i>
</span>
<input type="text"
placeholder="plaats"
class="form-control"
data-bind="textInput:place">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
contactpersoon
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-user"></i>
</span>
<input type="email"
placeholder="contactpersoon"
class="form-control"
data-bind="textInput:contactperson">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
email
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-envelope"></i>
</span>
<input type="email"
placeholder="email"
class="form-control"
data-bind="textInput:email,
css:{'is-invalid':emailInvalid}">
</div>
<small class="invalid-feedback"
data-bind="style:{display: emailInvalid() ? 'block' : 'none'}">
email ongeldig<span data-bind="text:emailInvalid"></span>
</small>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
website
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-link"></i>
</span>
<input type="email"
placeholder="email"
class="form-control"
data-bind="textInput:website">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
opmerkingen
</label>
<div class="col-md-9">
<textarea class="form-control" data-bind="textInput:remarks"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-success"
data-bind="visible:formValid(), click:saveCustomer">opslaan
</button>
<button type="button" class="btn btn-warning" data-dismiss="modal">annuleren</button>
</div>
</div>
</div>
</div>
+115
View File
@@ -0,0 +1,115 @@
<div class="modal modal-fade-in-scale-up modal-primary" tabindex="-1" id="employee-target-modal">
<div class="modal-dialog" role="document" style="width:700px;">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">toevoegen / wijzigen medewerker uren
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</h5>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<table class="table table-condensed">
<thead>
<tr>
<th colspan="2">start</th>
<th colspan="2">eind</th>
<th colspan="2">&nbsp;</th>
</tr>
<tr>
<th width="25%">maand</th>
<th width="17%">jaar</th>
<th width="25%">maand</th>
<th width="17%">jaar</th>
<th width="16%" title="target per maand">target p/m</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<!-- ko foreach:employeeTargets -->
<tr>
<td data-bind="css:{'red-line': ! saved()}">
<select data-bind="options:$root.months,
optionsText:'month',
optionsValue:'monthID',
value:startmonth,
disable: ! changeable(),
event:{change:$root.setUnsaved}"
class="form-control">
</select>
</td>
<td data-bind="css:{'red-line': ! saved()}">
<select data-bind="options:$root.years,
optionsText:'year',
optionsValue:'year',
value:startyear,
disable: ! changeable(),
event:{change:$root.setUnsaved}"
class="form-control">
</select>
</td>
<td data-bind="css:{'red-line': ! saved()}">
<select data-bind="options:$root.months,
optionsText:'month',
optionsValue:'monthID',
value:endmonth,
disable: ! changeable(),
optionsCaption:'selecteer...',
event:{change:$root.setUnsaved}"
class="form-control">
</select>
</td>
<td data-bind="css:{'red-line': ! saved()}">
<select data-bind="options:$root.years,
optionsText:'year',
optionsValue:'year',
value:endyear,
disable: ! changeable(),
optionsCaption:'selecteer...',
event:{change:$root.setUnsaved}"
class="form-control">
</select>
</td>
<td data-bind="css:{'red-line': ! saved()}">
<input type="text"
class="form-control"
data-bind="textInput:target,
disable: ! changeable(),
event:{keyup:$root.checkNumeric},
event:{change:$root.setUnsaved}">
</td>
<td data-bind="css:{'red-line': ! saved()}">
<button class="btn btn-success"
data-bind="disable: ! validTarget(),
click:$root.saveEmployeeTarget,
visible: changeable()">
opslaan
</button>
</td>
</tr>
<!-- /ko -->
</tbody>
<tfoot>
<tr>
<th colspan="6">
<i class="icon fa-plus-square-o pull-right pointer"
data-bind="click:addEmployeeTarget, visible:newTarget()"></i>
</th>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-warning"
data-dismiss="modal">
sluiten
</button>
</div>
</div>
</div>
</div>
+207
View File
@@ -0,0 +1,207 @@
<div class="modal modal-fade-in-scale-up modal-primary" tabindex="-1" id="external-modal">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">toevoegen / wijzigen onderaannemer
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</h5>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<div role="form" class="form-horizontal">
<div class="form-group row">
<label class="col-md-3 form-control-label">
naam
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-user"></i>
</span>
<input type="text"
placeholder="contactperson"
class="form-control"
data-bind="textInput:contactperson,
css:{'is-invalid':contactpersonInvalid}">
</div>
<small class="invalid-feedback"
data-bind="style:{display: contactpersonInvalid() ? 'block' : 'none'}">
voer een naam in
</small>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
bedrijfsnaam
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-institution"></i>
</span>
<input type="text"
placeholder="bedrijfsnaam"
class="form-control"
data-bind="textInput:name">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
adres
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-address-book-o"></i>
</span>
<input type="text"
placeholder="adres"
class="form-control"
data-bind="textInput:address">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
postcode
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-address-book-o"></i>
</span>
<input type="text"
placeholder="postcode"
class="form-control"
data-bind="textInput:postcode">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
plaats
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-address-book-o"></i>
</span>
<input type="text"
placeholder="plaats"
class="form-control"
data-bind="textInput:place">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
email
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-envelope"></i>
</span>
<input type="email"
placeholder="email"
class="form-control"
data-bind="textInput:email,
css:{'is-invalid':emailInvalid}">
</div>
<small class="invalid-feedback"
data-bind="style:{display: emailInvalid() ? 'block' : 'none'}">
email ongeldig<span data-bind="text:emailInvalid"></span>
</small>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
website
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-link"></i>
</span>
<input type="email"
placeholder="email"
class="form-control"
data-bind="textInput:website">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
kvk - nummer
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-institution"></i>
</span>
<input type="text"
placeholder="kvk nummer"
class="form-control"
data-bind="textInput:kvk_number">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
IBAN
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-institution"></i>
</span>
<input type="text"
placeholder="IBAN"
class="form-control"
data-bind="textInput:iban">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
tarief (per uur)
</label>
<div class="col-md-4">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-euro"></i>
</span>
<input type="text"
placeholder="tarief"
class="form-control align-right"
data-bind="textInput:rate, event:{keyup:validateNumber}">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
opmerkingen
</label>
<div class="col-md-9">
<textarea class="form-control" data-bind="textInput:remarks"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-success"
data-bind="visible:formValid(), click:saveExternal">opslaan
</button>
<button type="button" class="btn btn-warning" data-dismiss="modal">annuleren</button>
</div>
</div>
</div>
</div>
+288
View File
@@ -0,0 +1,288 @@
<div class="modal modal-primary" tabindex="-1" id="offer-modal">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">toevoegen / wijzigen offerte
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</h5>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<div role="form" class="form-horizontal">
<div class="form-group row">
<label class="col-md-3 control-label">
offerte nummer
</label>
<div class="col-md-5">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-asterisk"></i>
</span>
<input type="text"
placeholder="offerte nummer"
class="form-control"
data-bind="textInput:offernumber">
</div>
<small class="invalid-feedback"
data-bind="style:{display: ! offernumber() ? 'block' : 'none'}">
voer een offerte nummer in
</small>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 control-label">
offerte naam
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-bookmark"></i>
</span>
<input type="text"
placeholder="offerte naam"
class="form-control"
data-bind="textInput:offername">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 control-label">
offerte leider
</label>
<div class="col-md-8">
<div class="input-group input-group-icon">
<select class="form-control"
data-bind="options:users,
optionsValue:'id',
optionsText:'fullname',
value:offerleader_id,
optionsCaption:'selecteer offerteleider'">
</select>
</div>
<small class="invalid-feedback"
data-bind="style:{display: ! offerleader_id() ? 'block' : 'none'}">
selecteer een offerteleider
</small>
</div>
<div class="col-md-1">
<i class="icon fa-plus-square greenish pointer" data-bind="click:addUser"></i>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 control-label">
klant
</label>
<div class="col-md-8">
<div class="input-group input-group-icon">
<select class="form-control"
data-bind="options:customers,
optionsValue:'id',
optionsText:'name',
value:customer_id,
optionsCaption:'selecteer klant',
event:{change:getCustomerProjects}"></select>
</div>
<small class="invalid-feedback"
data-bind="style:{display: ! customer_id() ? 'block' : 'none'}">
selecteer een klant
</small>
</div>
<div class="col-md-1">
<i class="icon fa-plus-square greenish pointer" data-bind="click:addCustomer"></i>
</div>
</div>
<!-- <div class="form-group row">-->
<!-- <label class="col-md-3 control-label">-->
<!-- project-->
<!-- </label>-->
<!-- <div class="col-md-8">-->
<!-- <select class="form-control"-->
<!-- data-bind="options:projects,-->
<!-- optionsValue: 'id',-->
<!-- optionsText:'projectnumber',-->
<!-- disable: ! customer_id(),-->
<!-- value:project_id"></select>-->
<!-- </div>-->
<!-- </div>-->
<div class="form-group row">
</div>
<div class="form-group row">
<label class="col-md-3 control-label">
datum offerte
</label>
<div class="col-md-5">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-calendar"></i>
</span>
<input type="text"
placeholder="datum offerte"
class="form-control"
readonly
data-bind="datepicker:{dateFormat: 'dd-mm-yy' }, value:startdate, css:{'is-invalid': ! offerDateValid()}">
</div>
<small class="invalid-feedback"
data-bind="style:{display: ! offerDateValid() ? 'block' : 'none'}">
voer een offerte datum in
</small>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 control-label">
kans
</label>
<div class="col-md-4">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-percent"></i>
</span>
<div>
<input type="text"
placeholder="kans"
class="form-control percentage-input"
data-bind="textInput:acceptance_chance,
event:{keyup:validateNumber}">
<span class="percentage-sign">&#x25;</span>
</div>
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 control-label">
omzet
</label>
<div class="col-md-4">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-euro"></i>
</span>
<input type="text"
placeholder="eigen omzet"
class="form-control align-right"
data-bind="textInput:own_revenue,
event:{keyup:validateNumber}">
</div>
<small>
Eigen tarief omzet (excl btw)
</small>
</div>
<div class="col-md-4">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-euro"></i>
</span>
<input type="text"
placeholder="overige omzet"
class="form-control align-right"
data-bind="textInput:other_revenue,
event:{keyup:validateNumber}">
</div>
<small>
Overige kosten (excl btw)
</small>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 control-label">
&nbsp
</label>
<div class="col-md-4">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-euro"></i>
</span>
<input type="text"
placeholder="eigen omzet"
class="form-control align-right"
data-bind="textInput:costs,
event:{keyup:validateNumber}">
</div>
<small>
kosten derden (excl btw)
</small>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 control-label">
deadline
</label>
<div class="col-md-5">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-calendar"></i>
</span>
<input type="email"
placeholder="deadline"
class="form-control"
readonly
data-bind="datepicker:{dateFormat: 'dd-mm-yy' }, value:deadline, disable:accepteddate()">
</div>
</div>
<div class="col-md-1">
<span class="icon fa-remove redish pointer"
data-bind="visible:rejectdate(), click:resetDate.bind($data, 'rejectdate')"></span>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 control-label">
acceptatie datum
</label>
<div class="col-md-5">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-calendar"></i>
</span>
<input type="text"
placeholder="acceptatie datum"
class="form-control"
readonly
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
value:accepteddate, disable:rejectdate()">
</div>
</div>
<div class="col-md-1">
<span class="icon fa-remove redish pointer"
data-bind="visible:accepteddate(), click:resetDate.bind($data, 'accepteddate')"></span>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 control-label">
afwijsdatum
</label>
<div class="col-md-5">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-calendar"></i>
</span>
<input type="email"
placeholder="afwijsdatum"
class="form-control"
readonly
data-bind="datepicker:{dateFormat: 'dd-mm-yy' }, value:rejectdate, disable:accepteddate()">
</div>
</div>
<div class="col-md-1">
<span class="icon fa-remove redish pointer"
data-bind="visible:rejectdate(), click:resetDate.bind($data, 'rejectdate')"></span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-success"
data-bind="visible:formValid(), click:saveOffer">opslaan
</button>
<button type="button" class="btn btn-warning" data-dismiss="modal">annuleren</button>
</div>
</div>
</div>
</div>
+5
View File
@@ -0,0 +1,5 @@
<div class="tab-content">
<div class="tab-pane animation-slide-top active" id="dashboard">
<?= view('modals/partials/_projectdashboard') ?>
</div>
</div>
+19
View File
@@ -0,0 +1,19 @@
<div class="row" data-bind="fadeVisible:customerID()">
<!-- <div class="col-md-5">-->
<!-- --><?php //$this->load->view( 'modals/partials/_projectoffers' ); ?>
<!-- </div>-->
<div class="col-md-8">
<?= view('modals/partials/_projectcosts') ?>
</div>
<div class="col-md-4">
<?= view('modals/partials/_reservations') ?>
</div>
</div>
<div class="row">
<div class="col-md-8">
<?= view('modals/partials/_invoices') ?>
</div>
<div class="col-md-4">
<?= view('modals/partials/_forecasts') ?>
</div>
</div>
+104
View File
@@ -0,0 +1,104 @@
<div class="panel panel-bordered panel-primary panel-line">
<div class="panel-heading panel-heading-project">
<h3 class="">
prognoses (incl.btw)
</h3>
</div>
<div class="panel-body panel-body-project">
<table class="table table-sm">
<thead>
<th class="table-cyanish-header" width="25%">
jaar
</th>
<th class="table-cyanish-header" width="25%">
maand
</th>
<th class="table-cyanish-header align-right" width="35%">
bedrag
</th>
<th class="table-cyanish-header" width="15%">&nbsp;</th>
</thead>
<tbody data-bind="foreach:forecasts">
<tr>
<td>
<span data-bind="text:dbo.helpers.findArrayElement('year', 'year', year(), $root.years()),
visible:! inEdit()"></span>
<select class="form-control form-control-sm"
data-bind="options:$root.years,
optionsText:'year',
optionsValue:'year',
value:year,
optionsCaption:'voer jaar in',
visible: inEdit(),
event:{change:$root.saveForecast}">
</select>
</td>
<td>
<span data-bind="text:dbo.helpers.findArrayElement('monthID', 'month', month_id(), $root.months()),
visible:! inEdit()"></span>
<select class="form-control form-control-sm"
data-bind="options:$root.months,
optionsText:'month',
optionsValue:'monthID',
value:month_id,
optionsCaption:'voer maand in',
visible: inEdit(),
event:{change:$root.saveForecast}">
</select>
</td>
<td class="align-right">
<span data-bind="visible:!inEdit()">
<i class="icon fa-euro"></i>
<span data-bind="text:dbo.helpers.numberWithPoints(forecastamount())"></span>
</span>
<input type="text"
class="form-control form-control-sm align-right"
paceholder="bedrag"
data-bind="textInput:forecastamount, visible:inEdit,
event:{change:$root.saveForecast,keyup:$root.validateNumber.bind($data, 'forecastamount')}"/>
</td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editForecast"></i>
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removeForecast"></i>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="4">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:addForecast">
nieuwe prognose
</button>
</th>
</tr>
<tr>
<th colspan="4">
<table class="table table-condensed">
<thead>
<tr>
<th>te factureren</th>
<th>geprognosticeerd</th>
<th>nog te prognosticeren</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span data-bind="text:outstanding"></span>
</td>
<td>
<span data-bind="text:totalForecast"></span>
</td>
<td>
<span data-bind="text:toForecast"></span>
</td>
</tr>
</tbody>
</table>
</th>
</tr>
</tfoot>
</table>
</div>
</div>
+57
View File
@@ -0,0 +1,57 @@
<div class="panel panel-bordered panel-primary panel-line">
<div class="panel-heading panel-heading-project">
<h3 class="">
projecturen
</h3>
</div>
<div class="panel-body panel-body-project">
<table class="table table-sm">
<thead>
<th class="table-cyanish-header" width="40%">
medewerker
</th>
<th class="table-cyanish-header align-right" width="20%">
niet declarabel
</th>
<th class="table-cyanish-header align-right" width="20%">
declarabel
</th>
<th class="table-cyanish-header align-right" width="20%">
omzet
</th>
</thead>
<tbody data-bind="foreach:hourTotals">
<tr>
<td>
<span data-bind="text:fullname"></span>
</td>
<td class="align-right">
<span data-bind="text:nondeclarable"></span> uur
</td>
<td class="align-right">
<span data-bind="text:declarable"></span> uur
</td>
<td class="align-right">
<span data-bind="text:revenues"></span>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<th class="table-cyanish-header">
totaal
</th>
<th class="align-right table-cyanish-header">
<span data-bind="text:totalNonDeclarable"></span> uur
</th>
<th class="align-right table-cyanish-header">
<span data-bind="text:totalDeclarable"></span> uur
</th>
<th class="align-right table-cyanish-header">
<span data-bind="text:totalRevenueHours"></span>
</th>
</tr>
</tfoot>
</table>
</div>
</div>
+102
View File
@@ -0,0 +1,102 @@
<div class="panel panel-bordered panel-primary panel-line">
<div class="panel-heading panel-heading-project">
<h3 class="">
projecturen
</h3>
</div>
<div class="panel-body panel-body-project">
<table class="table table-sm">
<thead>
<th class="table-cyanish-header" width="40%">
medewerker
</th>
<th class="table-cyanish-header" width="15%">
datum
</th>
<th class="table-cyanish-header" width="15%">
declarabel
</th>
<th class="table-cyanish-header align-right" width="15%">
uren
</th>
<th class="table-cyanish-header align-right" width="15%">
omzet
</th>
<!-- <th class="table-cyanish-header" width="8%">-->
<!-- &nbsp;-->
<!-- </th>-->
</thead>
<tbody data-bind="foreach:projecthours">
<tr>
<td>
<span data-bind="text:dbo.helpers.findArrayElement('id', 'fullname', projectemployee_id(), $root.projectEmployees()),
visible:! inEdit()"></span>
<select class="form-control form-control-sm"
data-bind="options:$root.projectEmployees,
optionsText:'fullname',
optionsValue:'id',
value:projectemployee_id,
optionsCaption:'medewerker',
visible: inEdit(),
event:{change:$root.saveProjecthour}">
</select>
</td>
<td>
<span data-bind="text:hourdate, visible:! inEdit()"></span>
<input type="text"
class="form-control form-control-sm"
placeholder="datum"
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
value:hourdate, visible:inEdit,
event:{change:$root.saveProjecthour}"/>
</td>
<td class="align-center">
<i class="icon fa-check" data-bind="visible:hourtype_id() == 1, click:$root.setHourtype.bind($data,2)"></i>
<i class="icon fa-square-o" data-bind="visible:hourtype_id() != 1, click:$root.setHourtype.bind($data, 1)"></i>
</td>
<td class="align-right">
<span data-bind=" visible: ! inEdit()">
<span data-bind="text:hours"></span>
uur
</span>
<input type="text"
class="form-control form-control-sm align-right"
paceholder="uren"
data-bind="textInput:hours, visible:inEdit,
event:{change:$root.saveProjecthour,keyup:$root.validateNumber.bind($data, 'hours')}"/>
</td>
<td class="align-right">
<i class="icon fa-euro"></i>
<span data-bind="text:dbo.helpers.numberWithPoints(revenue())"></span>
</td>
<!-- <td>-->
<!-- <i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editProjecthour"></i>-->
<!-- <i class="icon fa-trash redish pointer" title="verwijder"-->
<!-- data-bind="click:$root.removeProjecthour"></i>-->
<!-- </td>-->
</tr>
</tbody>
<tfoot>
<tr>
<th class="table-cyanish-header" colspan="2">Totaal</th>
<th class="table-cyanish-header">&nbsp;</th>
<th class="table-cyanish-header align-right">
<span data-bind="text:totalHours"></span> uur
</th>
<th class="table-cyanish-header align-right">
<i class="icon fa-euro"></i>
<span data-bind="text:dbo.helpers.numberWithPoints(totalRevenue())"></span>
</th>
<!-- <th class="table-cyanish-header">&nbsp;</th>-->
</tr>
<!-- <tr>-->
<!-- <td colspan="5">-->
<!-- <button class="btn btn-primary btn-round btn-sm" data-bind="click:newProjecthour">-->
<!-- nieuwe uren-->
<!-- </button>-->
<!-- </td>-->
<!-- </tr>-->
</tfoot>
</table>
</div>
</div>
+197
View File
@@ -0,0 +1,197 @@
<div class="panel panel-bordered panel-primary panel-line">
<div class="panel-heading panel-heading-project">
<h3 class="">
uitgaande facturen (incl btw)
</h3>
</div>
<div class="panel-body panel-body-project" style="overflow-y:scroll;">
<table class="table table-sm">
<thead>
<th class="table-cyanish-header">&nbsp;</th>
<th class="table-cyanish-header">
factuurnummer
</th>
<th class="table-cyanish-header">
factuurdatum
</th>
<th class="table-cyanish-header align-right">
bedrag (excl btw)
</th>
<th class="table-cyanish-header align-right">
bedrag (incl btw)
</th>
<th class="table-cyanish-header align-right">
openstaand( incl btw)
</th>
<th class="table-cyanish-header align-right">
btw tarief
</th>
<th class="table-cyanish-header" width="45px">
&nbsp;
</th>
</thead>
<tbody data-bind="foreach:invoices">
<tr>
<td>
<i class="icon fa-chevron-right" data-bind="visible: ! showPayments(), click:$root.togglePayments"></i>
<i class="icon fa-chevron-down" data-bind="visible:showPayments(), click:$root.togglePayments"></i>
</td>
<td>
<span data-bind="text:invoicenumber, visible:! inEdit()"></span>
<input type="text"
class="form-control form-control-sm"
placeholder="factuurnummer"
data-bind="textInput:invoicenumber, visible:inEdit,
event:{change:$root.saveInvoice}"/>
</td>
<td>
<span data-bind="text:invoicedate, visible:! inEdit()"></span>
<input type="text"
class="form-control form-control-sm"
placeholder="datum"
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
value:invoicedate, visible:inEdit,
event:{change:$root.saveInvoice}"/>
</td>
<td class="align-right">
<span data-bind=" visible: ! inEdit()">
<i class="icon fa-euro"></i>
<span data-bind="text:dbo.helpers.numberWithPoints(invoiceamount())"></span>
</span>
<input type="text"
class="form-control form-control-sm align-right"
paceholder="bedrag"
data-bind="textInput:invoiceamount, visible:inEdit,
event:{change:$root.saveInvoice,keyup:$root.validateNumber.bind($data, 'invoiceamount')}"/>
</td>
<td class="align-right">
<i class="icon fa-euro"></i>
<span data-bind="text:dbo.helpers.numberWithPoints(inclBtw())"></span>
</td>
<td class="align-right">
<i class="icon fa-euro"></i>
<span data-bind="text:dbo.helpers.numberWithPoints(outstanding())"></span>
</td>
<!-- <td class="align-right">-->
<!-- <span data-bind=" visible: ! inEdit()">-->
<!-- <i class="icon fa-euro"></i>-->
<!-- <span data-bind="text:dbo.helpers.numberWithPoints(forecastamount())"></span>-->
<!-- </span>-->
<!-- <input type="text"-->
<!-- class="form-control form-control-sm align-right"-->
<!-- paceholder="bedrag"-->
<!-- data-bind="textInput:forecastamount, visible:inEdit,-->
<!-- event:{change:$root.saveInvoice,keyup:$root.validateNumber.bind($data, 'forecastamount')}"/>-->
<!-- </td>-->
<!-- <td class="align-right">-->
<!-- <span data-bind="text:forecastdate, visible:! inEdit()"></span>-->
<!-- <input type="text"-->
<!-- class="form-control form-control-sm"-->
<!-- placeholder="datum"-->
<!-- data-bind="datepicker:{dateFormat: 'dd-mm-yy' },-->
<!-- value:forecastdate, visible:inEdit,-->
<!-- event:{change:$root.saveInvoice}"/>-->
<!-- </td>-->
<td class="align-right">
<span data-bind="visible:! inEdit()">
<span data-bind="text:dbo.helpers.findArrayElement('id', 'vatrate', vat_id(), $root.vats())"></span>
%
</span>
<select class="form-control form-control-sm"
data-bind="options:$root.vats,
optionsText:'vatrate',
optionsValue:'id',
value:vat_id,
optionsCaption:'btw',
visible:inEdit(),
event:{change:$root.saveInvoice}">
</select>
</td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editInvoice"></i>
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removeInvoice"></i>
</td>
</tr>
<tr data-bind="visible:showPayments()">
<td colspan="8">
<table class="table table-condensed">
<thead>
<th>&nbsp;</th>
<th class="table-cyanish-header-light">
datum
</th>
<th class="table-cyanish-header-light">
bedrag
</th>
<th class="table-cyanish-header-light">
</th>
</thead>
<tbody data-bind="foreach:payments">
<tr>
<td>&nbsp;</td>
<td>
<span data-bind="text:paymentdate, visible:! inEdit()"></span>
<input type="text"
class="form-control form-control-sm"
placeholder="datum"
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
value:paymentdate, visible:inEdit,
event:{change:$root.savePayment}"/>
</td>
<td>
<span data-bind=" visible: ! inEdit()">
<i class="icon fa-euro"></i>
<span data-bind="text:dbo.helpers.numberWithPoints(paymentamount())"></span>
</span>
<input type="text"
class="form-control form-control-sm align-right"
paceholder="bedrag"
data-bind="textInput:paymentamount, visible:inEdit,
event:{change:$root.savePayment,
keyup:$root.validateNumber.bind($data, 'paymentamount')}"/>
</td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editPayment.bind($data, $parents[0])"></i>
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removePayment"></i>
</td>
</tr>
</tbody>
<tfoot>
<td></td>
<td colspan="3">
<a href="#" data-bind="click:$root.newPayment">
nieuwe betaling
</a>
</td>
</tfoot>
</table>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="3" class="table-cyanish-header"></th>
<th class="align-right table-cyanish-header">
<span data-bind="text:dbo.helpers.numberWithPoints(totalInvoiceamount())"></span>
</th>
<th class="align-right table-cyanish-header">
<span data-bind="text:dbo.helpers.numberWithPoints(totalInclBtw())"></span>
</th>
<th class="align-right table-cyanish-header">
<span data-bind="text:dbo.helpers.numberWithPoints(totalOutstanding())"></span>
</th>
<th colspan="2" class="table-cyanish-header"></th>
</tr>
<tr>
<td colspan="5">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:newInvoice">
nieuwe factuur
</button>
</td>
</tr>
</tfoot>
</table>
</div>
</div>
@@ -0,0 +1,43 @@
<div class="panel panel-bordered panel-primary panel-line">
<div class="panel-heading panel-heading-project">
<h3 class="">
opmerkingen
</h3>
</div>
<div class="panel-body panel-body-project">
<table class="table table-sm">
<thead>
<tr>
<td colspan="2" class="table-cyanish-header">
offerte opmerkingen
</td>
</tr>
</thead>
<tbody data-bind="foreach:projectFiles">
<td>
</td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editPayment"></i>
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removePayment"></i>
</td>
</tr>
</tbody>
<thead>
<tr>
<th colspan="2" class="table-cyanish-header">
project opmerkingen
</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="2">
</td>
</tr>
</tfoot>
</table>
</div>
</div>
+137
View File
@@ -0,0 +1,137 @@
<div class="panel panel-bordered panel-primary panel-line">
<div class="panel-heading panel-heading-project">
<h3 class="">
inkomende facturen (bedragen incl btw)
</h3>
</div>
<div class="panel-body panel-body-project">
<table class="table table-sm">
<thead>
<th class="table-cyanish-header">
onderaannemer
</th>
<th class="table-cyanish-header">
omschrijving
</th>
<th class="table-cyanish-header">
datum
</th>
<th class="table-cyanish-header align-right">
bedrag
</th>
<th class="table-cyanish-header align-right">
betaald
</th>
<th class="table-cyanish-header align-right">
via<br />reservering
</th>
<th class="table-cyanish-header align-right">
te betalen
</th>
<th class="table-cyanish-header align-right">&nbsp;</th>
</thead>
<tbody data-bind="foreach:projectcosts">
<tr>
<td>
<span data-bind="text:dbo.helpers.findArrayElement('id', 'contactperson', external_id(), $root.externals()),
visible:! inEdit()"></span>
<select class="form-control form-control-sm"
data-bind="options:$root.externals,
optionsText:'contactperson',
optionsValue:'id',
value:external_id,
optionsCaption:'extern',
visible: inEdit(),
event:{change:$root.saveProjectcosts}">
</select>
</td>
<td>
<span data-bind=" visible: ! inEdit()">
<span data-bind="text:description"></span>
</span>
<input type="text"
class="form-control form-control-sm align-right"
paceholder="omschrijving"
data-bind="textInput:description, visible:inEdit,
event:{change:$root.saveProjectcosts}"/>
</td>
<td>
<span data-bind="text:date, visible:! inEdit()"></span>
<input type="text"
class="form-control form-control-sm"
placeholder="start"
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
value:date, visible:inEdit,
event:{change:$root.saveProjectcosts}"/>
</td>
<td class="align-right">
<span data-bind=" visible: ! inEdit()">
<i class="icon fa-euro"></i>
<span data-bind="text:dbo.helpers.numberWithPoints(costs())"></span>
</span>
<input type="text"
class="form-control form-control-sm align-right"
paceholder="bedrag"
data-bind="textInput:costs, visible:inEdit,
event:{change:$root.saveProjectcosts,keyup:$root.validateNumber.bind($data, 'costs')}"/>
</td>
<td class="align-right">
<span data-bind=" visible: ! inEdit()">
<i class="icon fa-euro"></i>
<span data-bind="text:dbo.helpers.numberWithPoints(payed())"></span>
</span>
<input type="text"
class="form-control form-control-sm align-right"
paceholder="bedrag"
data-bind="textInput:payed, visible:inEdit,
event:{change:$root.saveProjectcosts,keyup:$root.validateNumber.bind($data, 'payed')}"/>
</td>
<td class="align-center">
<!-- ko if:fromReservation() -->
&nbsp;<i class="icon fa-check pointer"
data-bind="click:$root.toggleFromReservation"></i>
<!-- /ko -->
<!-- ko if: ! fromReservation() -->
&nbsp;<i class="icon fa-square-o pointer"
data-bind="click:$root.toggleFromReservation"></i>
<!-- /ko -->
</td>
<td class="align-right">
<span>
<i class="icon fa-euro"></i>
<span data-bind="text:dbo.helpers.numberWithPoints(toPay())"></span>
</span>
</td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editProjectcosts"></i>
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removeProjectcosts"></i>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="3" class="table-cyanish-header"></th>
<th class="align-right table-cyanish-header">
<span data-bind="text:dbo.helpers.numberWithPoints(totalCosts())"></span>
</th>
<th class="align-right table-cyanish-header">
<span data-bind="text:dbo.helpers.numberWithPoints(totalPayed())"></span>
</th>
<th class="table-cyanish-header"></th>
<th class="align-right table-cyanish-header">
<span data-bind="text:dbo.helpers.numberWithPoints(totalToPay())"></span>
</th>
<th class="table-cyanish-header"></th>
</tr>
<tr>
<td colspan="8">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:newProjectcost">
nieuwe projectkosten
</button>
</td>
</tr>
</tfoot>
</table>
</div>
</div>
@@ -0,0 +1,159 @@
<div class="row">
<div class="col-md-6">
<div class="panel panel-bordered panel-primary panel-line">
<div class="panel-heading panel-heading-project">
<h3 class="">
Projectgegevens
</h3>
</div>
<div class="panel-body panel-body-project">
<div class="row">
<label class="col-md-4 col-form-label">omschrijving</label>
<div class="col-md-8">
<input type="text" class="form-control form-control-sm"
data-bind="textInput:projectname, event:{keyup:saveProjectname}"/>
</div>
<div class="divider"></div>
<label class="col-md-4 col-form-label">klant</label>
<div class="col-md-8">
<select class="form-control form-control-sm"
data-bind="options:customers,
optionsText:'name',
optionsValue: 'id',
value:customerID,
disable:offers().length > 0,
optionsCaption:'selecteer klant',
event:{change:saveProject},
css:{'is-invalid': ! customerID()}"></select>
<small class="invalid-feedback"
data-bind="style:{display: ! customerID() ? 'block' : 'none'}">
selecteer een klant
</small>
</div>
<div class="divider"></div>
<label class="col-md-4 col-form-label">projectleider</label>
<div class="col-md-8">
<select class="form-control form-control-sm"
data-bind="options:users,
optionsText:'fullname',
optionsValue:'id',
value:projectleaderID,
optionsCaption:'projectleider',
event:{change:saveProject}">
</select>
</div>
<div class="divider"></div>
<label class="col-md-4 col-form-label">begin project</label>
<div class="col-md-8">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-calendar"></i>
</span>
<input type="text"
placeholder="start project"
class="form-control form-control-sm"
readonly
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
value:startdate,
event:{change:saveProject}">
</div>
</div>
<div class="divider"></div>
<label class="col-md-4 col-form-label">eind project</label>
<div class="col-md-8">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-calendar"></i>
</span>
<input type="text"
placeholder="eind project"
class="form-control form-control-sm"
readonly
data-bind="datepicker:{dateFormat: 'dd-mm-yy' },
value:enddate,
event:{change:saveProject}">
</div>
</div>
<div class="divider"></div>
<label class="col-md-4 col-form-label">BTW percentage</label>
<div class="col-md-3">
<select class="form-control form-control-sm"
data-bind="options:vats,
optionsText:'vatrate',
optionsValue:'id',
value:vat_id,
event:{change:$root.saveProject},
optionsCaption:'selecteer btw ...'"></select>
</div>
<div class="divider"></div>
<label class="col-md-4 col-form-label">te besteden uren</label>
<div class="col-md-8">
<h4><span data-bind="text:(totalBudget() - totalHours())"></span></h4>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="panel panel-bordered panel-primary panel-line">
<div class="panel-heading panel-heading-project">
<h3 class="">
Financieel
</h3>
</div>
<div class="panel-body panel-body-project">
<label class="col-md-6 col-form-label">Eigen tarief omzet(excl.btw)</label>
<div class="col-md-6">
<h4 class="form-control-label">
<i class="icon fa-euro"> </i><span class="euro-amount" data-bind="text:ownRevenue"></span>
</h4>
</div>
<div class="divider"></div>
<label class="col-md-6 col-form-label">Overige kosten(excl.btw)</label>
<div class="col-md-6">
<h4 class="form-control-label">
<i class="icon fa-euro"> </i><span class="euro-amount" data-bind="text:otherRevenue"></span>
</h4>
</div>
<div class="divider"></div>
<label class="col-md-6 col-form-label">Kosten derden(excl.btw)</label>
<div class="col-md-6">
<h4 class="form-control-label">
<i class="icon fa-euro"> </i><span class="euro-amount" data-bind="text:costs"></span>
</h4>
</div>
<div class="divider"></div>
<label class="col-md-6 col-form-label">Totaal omzet(excl.btw)</label>
<div class="col-md-6">
<h4><i class="icon fa-euro"> </i><span class="euro-amount" data-bind="text:totalRevenues"></span></h4>
</div>
<div class="divider"></div>
<label class="col-md-6 col-form-label">Totaal omzet(incl.btw)</label>
<div class="col-md-6">
<h4><i class="icon fa-euro"> </i><span class="euro-amount" data-bind="text:totalRevenuesIncl"></span></h4>
</div>
<div class="divider"></div>
<label class="col-md-6 col-form-label">Totaal gefactureerd</label>
<div class="col-md-6">
<h4><i class="icon fa-euro"> </i><span class="euro-amount" data-bind="text:totalInvoiced"></span></h4>
</div>
<div class="divider"></div>
<label class="col-md-6 col-form-label">Nog te factureren</label>
<div class="col-md-6">
<h4><i class="icon fa-euro"> </i><span class="euro-amount" data-bind="text:outstanding"></span></h4>
</div>
<div class="divider"></div>
<label class="col-md-6 col-form-label">Totaal betaald</label>
<div class="col-md-6">
<h4><i class="icon fa-euro"> </i><span class="euro-amount" data-bind="text:payed"></span></h4>
</div>
<div class="divider"></div>
<label class="col-md-6 col-form-label">Gefactureerd niet betaald</label>
<div class="col-md-6">
<h4><i class="icon fa-euro"> </i><span class="euro-amount" data-bind="text:outstandingInvoices"></span></h4>
</div>
</div>
</div>
</div>
</div>
@@ -0,0 +1,82 @@
<div class="panel panel-bordered panel-primary panel-line">
<div class="panel-heading panel-heading-project">
<h3 class="">
project medewerkers
</h3>
</div>
<div class="panel-body panel-body-project">
<table class="table table-sm">
<thead>
<th class="table-cyanish-header" width="40%">
naam
</th>
<th class="table-cyanish-header align-right" width="20%">
tarief
</th>
<th class="table-cyanish-header align-right" width="25%">
budget
</th>
<th class="table-cyanish-header" width="15%">
&nbsp;&nbsp;
</th>
</thead>
<tbody data-bind="foreach:projectEmployees">
<tr>
<td>
<span data-bind="text:dbo.helpers.findArrayElement('id', 'fullname', employeeID(), $root.users()),
visible: ! inEdit()"></span>
<select class="form-control form-control-sm"
data-bind="
options:$root.users,
optionsText:'fullname',
optionsValue:'id',
value:employeeID,
optionsCaption:'naam',
event:{change:$root.changeProjectemployee},
visible:inEdit"></select>
</td>
<td class="align-right">
<span data-bind=" visible: ! inEdit()">
<i class="icon fa-euro"></i>
<span data-bind="text:tarif"></span>
</span class="align-right">
<input type="text"
class="form-control form-control-sm"
paceholder="tarief"
data-bind="textInput:tarif, visible:inEdit,
event:{change:$root.saveProjectemployee,keyup:$root.validateNumber.bind($data, 'tarif')}"/>
</td>
<td class="align-right">
<span data-bind="visible: ! inEdit()"><span data-bind="text:budget"></span> uur</span>
<input type="text"
class="form-control form-control-sm"
placeholder="budget"
data-bind="textInput:budget, visible:inEdit,
event:{change:$root.saveProjectemployee,keyup:$root.validateNumber.bind($data, 'budget')}"/>
</td>
<td>
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editProjectemployee"></i>
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removeProjectemployee"></i>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<th class="table-cyanish-header align-right" colspan="2">&nbsp;</th>
<th class="table-cyanish-header align-right">
<span data-bind="text:totalBudget"></span> uur
</th>
<th class="table-cyanish-header align-right"></th>
</tr>
<tr>
<td colspan="6">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:addProjectemployee">
nieuwe project medewerker
</button>
</td>
</tr>
</tfoot>
</table>
</div>
</div>
@@ -0,0 +1,37 @@
<div class="col-md-8">
<table class="table table-condensed">
<thead>
<tr>
<th>door</th>
<th>datum</th>
<th>bestandsnaam</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody data-bind="foreach:documents">
<tr>
<td>
<span data-bind="text:fullname"></span>
</td>
<td>
<span data-bind="text:uploaddate"></span>
</td>
<td>
<span data-bind="text:originalname"></span>
</td>
<td>
<i class="icon fa-download pointer" data-bind="click:$root.downloadDocument"></i>
<i class="icon fa-trash redish pointer" data-bind="click:$root.removeFile"></i>
</td>
</tr>
</tbody>
<tfoot>
<tr></tr>
</tfoot>
</table>
<div class="upload-btn-wrapper" data-bind="">
<button class="upload-btn">voeg bestand toe</button>
<input type="file" name="userfile" data-bind="event:{change:addDocument}" id="fileinput"/>
</div>
<hr/>
</div>
@@ -0,0 +1,49 @@
<div class="panel panel-bordered panel-primary panel-line">
<div class="panel-heading panel-heading-project">
<h3 class="">
offerte
</h3>
</div>
<div class="panel-body panel-body-project">
<table class="table table-sm">
<thead>
<th class="table-cyanish-header">
nummer
</th>
<th class="table-cyanish-header">
start
</th>
<th class="table-cyanish-header align-right">
eigen omzet (excl btw)
</th>
<th class="table-cyanish-header align-right">
overig omzet (excl btw)
</th>
<th class="table-cyanish-header">
&nbsp;
</th>
</thead>
<tbody data-bind="foreach:offers">
<tr>
<td>
<span data-bind="text:offernumber"></span>
</td>
<td>
<span data-bind="text:startdate"></span>
</td>
<td class="align-right">
<span data-bind="text:dbo.helpers.numberWithPoints(own_revenue.toFixed(0))"></span>
</td>
<td class="align-right">
<span data-bind="text:dbo.helpers.numberWithPoints(other_revenue.toFixed(0))"></span>
</td>
<!-- <td>-->
<!-- <i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editOffer"></i>-->
<!-- <i class="icon fa-trash redish pointer" title="verwijder"-->
<!-- data-bind="click:$root.removeOffer"></i>-->
<!-- </td>-->
</tr>
</tbody>
</table>
</div>
</div>
@@ -0,0 +1,68 @@
<div class="panel panel-bordered panel-primary panel-line">
<div class="panel-heading panel-heading-project">
<h3 class="">
gereserveerd op spaarrekening (incl. btw)
</h3>
</div>
<div class="panel-body panel-body-project">
<table class="table table-sm">
<thead>
<th class="table-cyanish-header align-right" width="40%">
bedrag
</th>
<th class="table-cyanish-header" width="40%">
klant
</th>
<th class="table-cyanish-header" width="20%">&nbsp;</th>
</thead>
<tbody data-bind="foreach:reservations">
<tr>
<td class="align-right" data-bind="css:{'red-line':invalidReservation()}">
<span data-bind="visible:!inEdit()">
<i class="icon fa-euro"></i>
<span data-bind="text:dbo.helpers.numberWithPoints(reservationamount())"></span>
</span>
<input type="text"
class="form-control form-control-sm align-right"
paceholder="bedrag"
data-bind="textInput:reservationamount, visible:inEdit,
event:{change:$root.saveReservation,keyup:$root.validateNumber.bind($data, 'reservationamount')}"/>
</td>
<td data-bind="css:{'red-line':invalidReservation()}">
<span data-bind="text:dbo.helpers.findArrayElement('id', 'contactperson', external_id(), $root.externals()),
visible:! inEdit()"></span>
<select class="form-control"
data-bind="
options:$root.externals,
optionsText:'contactperson',
optionsValue:'id',
value:external_id,
optionsCaption:'selecteer...',
visible: inEdit(),
event:{change:$root.saveReservation}"
</td>
<td data-bind="css:{'red-line':invalidReservation()}">
<i class="icon fa-edit pointer" title="wijzig" data-bind="click:$root.editReservation"></i>
<i class="icon fa-trash redish pointer" title="verwijder"
data-bind="click:$root.removeReservation"></i>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<th class="align-right table-cyanish-header">
<span data-bind="text:dbo.helpers.numberWithPoints(totalReservationamount())"></span>
</th>
<th class="table-cyanish-header" colspan="2"></th>
</tr>
<tr>
<th colspan="4">
<button class="btn btn-primary btn-round btn-sm" data-bind="click:addReservation">
nieuwe reservering
</button>
</th>
</tr>
</tfoot>
</table>
</div>
</div>
+84
View File
@@ -0,0 +1,84 @@
<div class="project-page" id="project-modal" data-bind="fadeVisible:showProject()">
<div class="container" style="margin-top:15px;padding-top:15px;">
<div class="nav-tabs-horizontal nav-tabs-animate nav-tab-reverse">
<ul class="nav nav-tabs nav-tabs-solid">
<li class="nav-item"
role="presentation"
data-bind="css:{'active':activeTab()=='DASHBOARD'},
click:setActiveTab.bind($data,'DASHBOARD')">
<a>
<i class="icon fa-hacker-news"></i>
algemeen</a>
</li>
<li class="nav-item"
role="presentation"
data-bind="css:{'active':activeTab()=='FINANCIAL'},
click:setActiveTab.bind($data,'FINANCIAL')">
<a>
<i class="icon fa-euro"></i>
financieel</a>
</li>
<li class="nav-item"
role="presentation"
data-bind="css:{'active':activeTab()=='EMPLOYEES'},
click:setActiveTab.bind($data,'EMPLOYEES')">
<a>
<i class="icon fa-user-circle"></i>
medewerkers</a>
</li>
<li class="nav-item"
role="presentation"
data-bind="css:{'active':activeTab()=='FILES'},
click:setActiveTab.bind($data,'FILES')">
<a>
<i class="icon fa-files"></i>
bestanden en opmerkingen</a>
</li>
</ul>
<div style="position:relative; float:right;">
<h3 style="position:absolute;top:-65px; right:30px; width:350px;">
Projectnummer: <span data-bind="text:projectnumber"></span>
<i class="icon fa-refresh pointer blueish" title="ververs" data-bind="click:refreshProject"></i>
</h3>
<button class="btn btn-danger" data-bind="click:closeProject"
style="position:absolute;right:0px;top:-50px">
sluit
</button>
</div>
<div id="project-scroller">
<div class="tab-pane animation-slide-top"
id="dashboard"
data-bind="visible:activeTab()=='DASHBOARD'">
<?= view('modals/partials/_dashboard') ?>
</div>
<div class="tab-pane animation-slide-top"
id="financial"
data-bind="visible:activeTab()=='FINANCIAL'">
<?= view('modals/partials/_financials') ?>
</div>
<div class="tab-pane animation-slide-top"
id="employees"
data-bind="visible:activeTab()=='EMPLOYEES'">
<div class="row" data-bind="fadeVisible:customerID()">
<div class="col-md-5" data-bind="fadeVisible:customerID()">
<?= view('modals/partials/_projectemployees') ?>
</div>
<div class="col-md-7">
<?= view('modals/partials/_hourTotals') ?>
</div>
</div>
</div>
<div class="tab-pane animation-slide-top"
id="files"
data-bind="visible:activeTab()=='FILES'">
<div class="row" data-bind="fadeVisible:customerID()">
<?= view('modals/partials/_projectfiles') ?>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
+159
View File
@@ -0,0 +1,159 @@
<div class="modal modal-fade-in-scale-up modal-primary" tabindex="-1" id="user-modal">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">toevoegen / wijzigen medewerker
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</h5>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<div role="form" class="form-horizontal">
<div class="form-group row">
<label class="col-md-3 form-control-label">
voornaam
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-user"></i>
</span>
<input type="text"
placeholder="voornaam"
class="form-control"
data-bind="textInput:firstname,
css:{'is-invalid':firstnameInvalid}">
</div>
<small class="invalid-feedback"
data-bind="style:{display: firstnameInvalid() ? 'block' : 'none'}">
voer een voornaam in<span data-bind="text:firstnameInvalid"></span>
</small>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
tussenvoegsel
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-user"></i>
</span>
<input type="text"
placeholder="tussenvoegsel"
class="form-control"
data-bind="textInput:middlename">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
achternaam
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-user"></i>
</span>
<input type="text"
placeholder="achternaam"
class="form-control"
data-bind="textInput:lastname,
css:{'is-invalid':lastnameInvalid}">
</div>
<small class="invalid-feedback"
data-bind="style:{display: lastnameInvalid() ? 'block' : 'none'}">
voer een achternaam in<span data-bind="text:lastnameInvalid"></span>
</small>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
gebruikersnaam
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-user"></i>
</span>
<input type="text"
placeholder="gebruikersnaam"
class="form-control"
data-bind="textInput:username,
css:{'is-invalid':usernameInvalid}">
</div>
<small class="invalid-feedback"
data-bind="style:{display: usernameInvalid() ? 'block' : 'none'}">
voer een gebruikernaam in<span data-bind="text:username"></span>
</small>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
email
</label>
<div class="col-md-9">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-envelope"></i>
</span>
<input type="email"
placeholder="email"
class="form-control"
data-bind="textInput:email,
css:{'is-invalid':emailInvalid}">
</div>
<small class="invalid-feedback"
data-bind="style:{display: emailInvalid() ? 'block' : 'none'}">
email ongeldig<span data-bind="text:emailInvalid"></span>
</small>
</div>
</div>
<div class="form-group row">
<label class="col-md-3 form-control-label">
uurtarief
</label>
<div class="col-md-4">
<div class="input-group input-group-icon">
<span class="input-group-addon">
<i class="icon fa-euro"></i>
</span>
<input type="text"
placeholder="uurtarief"
class="form-control align-right"
data-bind="textInput:hourlyRate,
event:{keyup:validateNumber.bind($data, 'hourlyRate')}">
</div>
</div>
</div>
<div class="form-group row">
<div class="col-md-3">&nbsp;</div>
<!-- ko foreach:roles -->
<div class="radio-inline">
<i class="icon fa-circle-o blueish"
style="cursor:pointer;"
data-bind="visible:$root.role() != rolelevel,
click:$root.setRole"></i>
<i class="icon fa-check-circle-o greenish"
data-bind="visible:$root.role() == rolelevel"></i>
<label data-bind="text:rolename">
</label>
</div>
<!-- /ko -->
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-success"
data-bind="visible:formValid(), click:saveUser">opslaan</button>
<button type="button" class="btn btn-warning" data-dismiss="modal">annuleren</button>
</div>
</div>
</div>
</div>
+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>
+29
View File
@@ -0,0 +1,29 @@
<link rel="apple-touch-icon" href="css/images/apple-touch-icon.png?version=<?=$version?>">
<link rel="shortcut icon" href="css/images/favicon.ico?version=<?=$version?>">
<!-- Stylesheets VENDOR -->
<!--<link rel="stylesheet" href="css/vendor/bootstrap.min.css?version=--><!--">-->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<!--<link rel="stylesheet" href="css/vendor/bootstrap-extend.css?version=--><!--">-->
<link rel="stylesheet" href="js/vendor/jquery-ui/jquery-ui.css?version=<?=$version?>">
<link rel="stylesheet" href="fonts/font-awesome/font-awesome.min.css?version=<?=$version?>">
<link href='js/vendor/froala/css/froala_editor.css?version=<?=$version?>' rel='stylesheet' type='text/css' />
<link href='js/vendor/froala/css/froala_style.css?version=<?=$version?>' type='text/css' />
<link rel="stylesheet" href="css/vendor/site.min.css?version=<?=$version?>">
<link rel="stylesheet" href="css/vendor/plugins/animsition/animsition.css?version=<?=$version?>">
<link rel="stylesheet" href="css/vendor/plugins/switchery/switchery.css?version=<?=$version?>">
<link rel="stylesheet" href="css/vendor/plugins/asscrollable/asScrollable.css?version=<?=$version?>">
<link rel="stylesheet" href="css/vendor/plugins/slidepanel/slidePanel.css?version=<?=$version?>">
<link rel="stylesheet" href="css/vendor/plugins/flag-icon-css/flag-icon.css?version=<?=$version?>">
<!-- End Stylesheets VENDOR -->
<!-- Stylesheets Pensare -->
<link rel="stylesheet" href="css/correction.css?version=<?=$version?>">
<link rel="stylesheet" href="css/menu.css?version=<?=$version?>">
<link rel="stylesheet" href="css/main.css?version=<?=$version?>">
<!-- End Stylesheets Pensare -->
+5
View File
@@ -0,0 +1,5 @@
<link rel="stylesheet" href="fonts/weather-icons/weather-icons.css">
<link rel="stylesheet" href="fonts/web-icons/web-icons.min.css">
<link rel="stylesheet" href="fonts/brand-icons/brand-icons.min.css">
<link rel='stylesheet' href='http://fonts.googleapis.com/css?family=Roboto:300,400,500,300italic'>
+87
View File
@@ -0,0 +1,87 @@
<!-- Core -->
<!--<script src="js/vendor/babel-external-helpers/babel-external-helpers.js"></script>-->
<!--<script src="js/vendor/jquery/jquery.js"></script>-->
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script src="js/vendor/Knockout.min.js"></script>
<script src="js/vendor/jquery-ui/jquery-ui.js"></script>
<script src="js/vendor/jquery-ui/knockout-jqueryui.min.js"></script>
<script src="js/vendor/popper-js/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<!--<script src="js/vendor/bootstrap/bootstrap.js"></script>-->
<script src="js/vendor/animsition/animsition.js"></script>
<script src="js/vendor/froala/js/froala_editor.min.js"></script>
<script src="js/vendor/froala/js/plugins/knockout-froala.js"></script>
<?php if($_ENV['ENVIRONMENT'] == 'development'): ?>
<script src="js/vendor/vue.js"></script>
<?php else: ?>
<script src="js/vendor/vue.min.js"></script>
<?php endif; ?>
<script src="js/vendor/Chart.js"></script>
<script src="js/vendor/lodash.js"></script>
<!-- DBOIS -->
<script src="js/lib/main.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/helpers.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/specials/tellmeModule.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<!-- ***********DATASERVICES************* -->
<script src="js/lib/dataservices/dashboardDataservice.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/pageDataservice.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/userDataservice.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/customerDataservice.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/externalDataservice.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/rolesDataservice.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/offerDataservice.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/commentsDataservice.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/documentsDataservice.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/projectsDataservice.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/vatDataService.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/employeehoursDataService.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/reportsDataService.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/invoiceDataService.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/reservationsDataService.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/employeeTargetDataService.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/dataservices/authorisationdataService.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<!-- ***********MODULES************* -->
<script src="js/lib/modules/dashboard/dashboardModule.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/menuModule.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/beheer/usersModule.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/beheer/customersModule.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/beheer/externalsModule.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/beheer/vatModule.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/beheer/authorisationVue.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/projects/offersModule.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/projects/projectsModule.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/projects/employeehoursModule.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/reports/monthlyEmployeeHoursModule.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/reports/employeeHours.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/reports/invoicereport.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/reports/reservations.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modules/beheer/backupdbModule.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<!-- ***********MODALS************* -->
<script src="js/lib/modals/userModal.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modals/customerModal.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modals/externalModal.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modals/offerModal.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modals/projectModal.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modals/commentModal.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/modals/employeeTargetModal.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<!-- ***********MODALS************* -->
<script src="js/lib/services/offersService.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
<script src="js/lib/services/chartService.js?v=<?= APP_VERSION ?? '1.0.81' ?>"></script>
+12
View File
@@ -0,0 +1,12 @@
<?php
echo view('modals/user_modal');
echo view('modals/customer_modal');
echo view('modals/external_modal');
echo view('modals/offer_modal');
echo view('modals/project_modal');
echo view('modals/comment_modal');
echo view('modals/employeetarget_modal');
echo view('specials/tellme_modal');
echo view('specials/upload_modal');
+31
View File
@@ -0,0 +1,31 @@
<nav id="sidebar">
<div class="sidebar-header">
<img src="css/images/logo_dbo.png" width="200"/>
</div>
<ul class="list-unstyled components">
<p>MENU</p>
<?php foreach ( $pages as $page ): ?>
<?php if ( count( $page->subpages ) == 0 ): ?>
<li class="active" data-bind="click:setPage.bind($data, '<?= $page->pageurl ?>')">
<a href="#"><?= $page->pagename ?></a>
</li>
<?php else: ?>
<li>
<a href="#<?= $page->pageurl ?>" data-toggle="collapse" aria-expanded="false">
<?= $page->pagename ?>
</a>
<ul class="collapse list-unstyled" id="<?= $page->pageurl ?>">
<?php foreach ( $page->subpages as $subpage ): ?>
<li data-bind="click:setPage.bind($data, '<?= $subpage->pageurl ?>'),
css:{'selected-page':<?= $subpage->pageurl ?>()}">
<a href="#"><?= $subpage->pagename ?></a>
</li>
<?php endforeach; ?>
</ul>
</li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
</nav>
+3
View File
@@ -0,0 +1,3 @@
<nav class="site-navbar navbar navbar-default navbar-fixed-top navbar-mega navbar-inverse">
<a class="navbar-brand" href="#">Navbar</a>
</nav>
@@ -0,0 +1,70 @@
<div class="row">
<div class="col-md-12">
<table class="table table-condensed" style="font-size:.8em;">
<thead>
<tr>
<th class="rotate"><div><span>medewerker</span></div></th>
<th class="rotate"><div><span>uren declarabel</span></div></th>
<th class="rotate"><div><span>uren niet declarabel</span></div></th>
<th class="rotate"><div><span>uren indirect</span></div></th>
<th class="rotate"><div><span>totaal bestede uren</span></div></th>
<th class="rotate"><div><span>uren jaartarget</span></div></th>
<th class="rotate"><div><span>aandeel uren besteed tov target</span></div></th>
<th class="rotate"><div><span>percentage declarable<br />tov totaal</span></div></th>
<th class="rotate"><div><span>bezettingsgraad t.o.v. target<br />factureerbare uren</span></div></th>
<th class="rotate"><div><span>omzet</span></div></th>
<th class="rotate"><div><span>gemiddeld tarief</span></div></th>
</tr>
</thead>
<tbody>
<!-- ko foreach:employees -->
<tr>
<td><span data-bind="text:fullname"></span></td>
<td class="align-right"><span data-bind="text:profitablehours"></span></td>
<td class="align-right"><span data-bind="text:nonprofitablehours"></span></td>
<td class="align-right"><span data-bind="text:nonprojecthours"></span></td>
<td class="align-right"><span data-bind="text:totalhours"></span></td>
<td class="align-right"><span data-bind="text:target"></span></td>
<td class="align-right"><span data-bind="text:occupancyRateTotal"></span>%</td>
<td class="align-right"><span data-bind="text:occupancyRateHours"></span>%</td>
<td class="align-right"><span data-bind="text:occupancyRateInvoice"></span>%</td>
<td class="align-right"><i class="icon fa-euro"></i> <span data-bind="text:revenues"></span></td>
<td class="align-right"><i class="icon fa-euro"></i> <span data-bind="text:averageDayRate"></span></td>
</tr>
<!-- /ko -->
</tbody>
<tfoot>
<th><span>totaal</span></th>
<th class="align-right"><span data-bind="text:profitablehoursTotaal"></span></th>
<th class="align-right"><span data-bind="text:nonprofitablehoursTotaal"></span></th>
<th class="align-right"><span data-bind="text:nonprojecthoursTotaal"></span></th>
<th class="align-right"><span data-bind="text:totalhoursTotaal"></span></th>
<th class="align-right"><span data-bind="text:targetTotaal"></span></th>
<th class="align-right"><span data-bind="text:occupancyRateTotalTotaal"></span>%</th>
<th class="align-right"><span data-bind="text:occupancyRateHoursTotaal"></span>%</th>
<th class="align-right"><span data-bind="text:occupancyRateInvoiceTotaal"></span>%</th>
<th class="align-right"><i class="icon fa-euro"></i> <span data-bind="text:revenuesTotaal"></span></th>
<th class="align-right"><i class="icon fa-euro"></i> <span data-bind="text:averageDayRateTotaal"></span></th>
</tfoot>
</table>
</div>
</div>
<!--<div class="row">-->
<!-- <div class="col-md-3">-->
<!-- <div class="graph-holder" style="min-height:350px">-->
<!-- <canvas id="hours-per-month" width="300"></canvas>-->
<!-- <div id="hours-per-month-legends"></div>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="col-md-3">-->
<!-- <div class="graph-holder" style="min-height:350px">-->
<!-- <canvas id="revenues-per-month" width="300"></canvas>-->
<!-- <div id="revenues-per-month-legends"></div>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="col-md-6">-->
<!-- <div class="graph-holder" style="min-height:350px">-->
<!-- <canvas id="average-rate" width="300"></canvas>-->
<!-- </div>-->
<!-- </div>-->
<!--</div>-->
@@ -0,0 +1,7 @@
<?php
/**
* Created by Pensare Software.
* User: Theo Weijmer
* Date: 29/07/2018
* Time: 13:21
*/
@@ -0,0 +1,63 @@
<table class="table table-condensed" style="font-size:0.8em;">
<thead>
<tr>
<th class="rotate">
<div class="pointer">
<span data-bind="click:sortList.bind($data, 'projectnumber')">
projectnummer
</span>
</div>
</th>
<th class="rotate">
<div><span>project</span></div>
</th>
<th class="rotate">
<div><span>klant</span></div>
</th>
<th class="rotate">
<div><span>Nog te factureren<br />incl. btw</span></div>
</th>
<th class="rotate">
<div><span>Nog te factureren<br />lopend boekjaar incl. btw</span></div>
</th>
<th class="rotate">
<div><span>Nog te factureren<br /> na lopend boekjaar incl. btw</span></div>
</th>
<th class="rotate">
<div><span>Nog te prognotiseren<br />incl. btw</span></div>
</th>
</tr>
</thead>
<tbody>
<!-- ko foreach: forecasts -->
<tr>
<td><span data-bind="text:projectnumber"></span></td>
<td><span data-bind="text:projectname"></span></td>
<td><span data-bind="text:customer"></span></td>
<td class="align-right"><span data-bind="text:needInvoice"></span></td>
<td class="align-right"><span data-bind="text:forecastThisYear"></span></td>
<td class="align-right"><span data-bind="text:forecastOtherYears"></span></td>
<td class="align-right focus-green"><span data-bind="text:forecastRemaining"></span></td>
</tr>
<!-- /ko -->
</tbody>
<tfoot>
<tr>
<th colspan="3" class="align-right">
totaal
</th>
<th class="align-right">
<span data-bind="text:needInvoice"></span>
</th>
<th class="align-right">
<span data-bind="text:forecastThisYear"></span>
</th>
<th class="align-right">
<span data-bind="text:forecastOtherYears"></span>
</th>
<th class="align-right focus-green">
<span data-bind="text:forecastRemaining"></span>
</th>
</tr>
</tfoot>
</table>
@@ -0,0 +1,91 @@
<table class="table table-condensed" style="font-size:0.8em;">
<thead>
<tr>
<th class="rotate">
<div class="pointer">
<span data-bind="click:sortList.bind($data, 'projectnumber')">
projectnummer
</span>
</div>
</th>
<th class="rotate">
<div><span>project</span></div>
</th>
<th class="rotate">
<div><span>klant</span></div>
</th>
<th class="rotate">
<div><span>Totaal te factureren<br />excl. btw</span></div>
</th>
<th class="rotate">
<div><span>Totaal te factureren<br />incl. btw</span></div>
</th>
<th class="rotate">
<div><span>Gefactureerd overige jaren<br />incl. btw</span></div>
</th>
<th class="rotate">
<div><span>Gefactureerd lopende boekjaar<br />incl. btw</span></div>
</th>
<th class="rotate">
<div><span>Gefactureerd totaal<br />incl. btw</span></div>
</th>
<th class="rotate">
<div><span>Betaald incl. btw</span></div>
</th>
<th class="rotate">
<div><span>gefactureerd niet betaald<br />incl. btw</span></div>
</th>
<th class="rotate">
<div><span>Nog te factureren<br />incl. btw</span></div>
</th>
</tr>
</thead>
<tbody>
<!-- ko foreach: invoiceOverview -->
<tr>
<td><span data-bind="text:projectnumber"></span></td>
<td><span data-bind="text:projectname"></span></td>
<td><span data-bind="text:customer"></span></td>
<td class="align-right"><span data-bind="text:totalToInvoicingExcl"></span></td>
<td class="align-right"><span data-bind="text:totalToInvoicingIncl"></span></td>
<td class="align-right"><span data-bind="text:totalInvoicedOtherYears"></span></td>
<td class="align-right"><span data-bind="text:totalInvoicedThisYear"></span></td>
<td class="align-right"><span data-bind="text:invoicesTotal"></span></td>
<td class="align-right"><span data-bind="text:projectPayment"></span></td>
<td class="align-right"><span data-bind="text:invoiceToPay"></span></td>
<td class="align-right focus-green"><span data-bind="text:needInvoice"></span></td>
</tr>
<!-- /ko -->
</tbody>
<tfoot>
<tr>
<th colspan="3" class="align-right">
totaal
</th>
<th class="align-right">
<span data-bind="text:totalToInvoicingExcl"></span>
</th>
<th class="align-right">
<span data-bind="text:totalToInvoicingIncl"></span>
</th>
<th class="align-right">
<span data-bind="text:totalInvoicedOtherYears"></span>
</th>
<th class="align-right">
<span data-bind="text:totalInvoicedThisYear"></span>
</th>
<th class="align-right">
<span data-bind="text:invoicesTotal"></span>
</th>
<th class="align-right">
<span data-bind="text:totalPayment"></span>
</th>
<th class="align-right">
<span data-bind="text:totalToPay"></span>
</th>
<th class="align-right focus-green">
<span data-bind="text:needInvoice"></span>
</th>
</tr>
</tfoot>
</table>
@@ -0,0 +1,80 @@
<div class="row">
<div class="col-xs-12">
<table class="table table-striped table-condensed">
<thead>
<tr>
<th>
<div class="pointer">
<span data-bind="click:sortList.bind($data, 'projectnumber')">
projectnummer
</span>
</div>
</th>
<th>
factuurnummer
</th>
<th>
project
</th>
<th>
klant
</th>
<th>
factuur datum
</th>
<th>
excl btw
</th>
<th>
btw
</th>
<th>
incl btw
</th>
</tr>
</thead>
<tbody data-bind="foreach:invoiced">
<tr>
<td>
<span data-bind="text:projectnumber"></span>
</td>
<td>
<span data-bind="text:invoicenumber"></span>
</td>
<td>
<span data-bind="text:project"></span>
</td>
<td>
<span data-bind="text:name"></span>
</td>
<td>
<span data-bind="text:invoicedate"></span>
</td>
<td class="align-right">
<span data-bind="text:invoiceamount"></span>
</td>
<td class="align-right">
<span data-bind="text:vat"></span>
</td>
<td class="align-right">
<span data-bind="text:inclVat"></span>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="5" class="align-right">Totaal</th>
<th class="align-right">
<span data-bind="text:totalInvoiced"></span>
</th>
<th class="align-right">
<span data-bind="text:totalVat"></span>
</th>
<th class="align-right">
<span data-bind="text:totalInclVat"></span>
</th>
</tr>
</tfoot>
</table>
</div>
</div>
@@ -0,0 +1,69 @@
<table class="table table-condensed" style="font-size:0.8em;">
<thead>
<tr>
<th class="rotate">
<div class="pointer">
<span data-bind="click:sortList.bind($data, 'projectnumber')">
projectnummer
</span>
</div>
</th>
<th class="rotate">
<div><span>project</span></div>
</th>
<th class="rotate">
<div><span>klant</span></div>
</th>
<th class="rotate">
<div><span>Nog te factureren<br />incl. btw</span></div>
</th>
<!-- ko foreach:months -->
<th class="rotate">
<div><span data-bind="text:month"></span></div>
</th>
<!-- /ko -->
<th class="rotate">
<div><span>Nog te factureren<br /> overige boekjaren incl. btw</span></div>
</th>
<th class="rotate">
<div><span>Nog te prognotiseren<br />incl. btw</span></div>
</th>
</tr>
</thead>
<tbody>
<!-- ko foreach: monthForecasts -->
<tr>
<td><span data-bind="text:projectnumber"></span></td>
<td><span data-bind="text:projectname"></span></td>
<td><span data-bind="text:customer"></span></td>
<td class="align-right focus-green"><span data-bind="text:needInvoice"></span></td>
<!-- ko foreach : forecastMonths -->
<td class="align-right"><span data-bind="text:forecastamount"></span></td>
<!-- /ko -->
<td class="align-right"><span data-bind="text:forecastOtherYears"></span></td>
<td class="align-right focus-green"><span data-bind="text:forecastRemaining"></span></td>
</tr>
<!-- /ko -->
</tbody>
<tfoot>
<tr>
<th colspan="3" class="align-right">
</th>
<th class="align-right focus-green">
<span data-bind="text:needInvoice"></span>
</th>
<!-- ko foreach:monthTotals -->
<th class="align-right">
<span data-bind="text:forecastamount()"></span>
</th>
<!-- /ko -->
<th class="align-right">
<span data-bind="text:forecastOtherYears"></span>
</th>
<th class="align-right focus-green">
<span data-bind="text:forecastRemaining"></span>
</th>
</tr>
</tfoot>
</table>
@@ -0,0 +1,55 @@
<table class="table table-condensed" style="font-size:0.8em;">
<thead>
<tr>
<th class="rotate">
<div class="pointer">
<span data-bind="click:sortList.bind($data, 'projectnumber')">
projectnummer
</span>
</div>
</th>
<th class="rotate">
<div><span>project</span></div>
</th>
<th class="rotate">
<div><span>klant</span></div>
</th>
<!-- ko foreach:months -->
<th class="rotate">
<div><span data-bind="text:month"></span></div>
</th>
<!-- /ko -->
<th class="rotate">
<div><span>Totaal betaald<br />lopend boekjaar incl. btw</span></div>
</th>
</tr>
</thead>
<tbody>
<!-- ko foreach: monthPayments -->
<tr>
<td><span data-bind="text:projectnumber"></span></td>
<td><span data-bind="text:projectname"></span></td>
<td><span data-bind="text:customer"></span></td>
<!-- ko foreach : paymentMonths -->
<td class="align-right"><span data-bind="text:paymentamount"></span></td>
<!-- /ko -->
<td class="align-right focus-green"><span data-bind="text:totalProjectPayments"></span></td>
</tr>
<!-- /ko -->
</tbody>
<tfoot>
<tr>
<th colspan="3" class="align-right">
totaal
</th>
<!-- ko foreach:monthPaymentTotals -->
<th class="align-right">
<span data-bind="text:paymentamount"></span>
</th>
<!-- /ko -->
<th class="align-right focus-green">
<span data-bind="text:totalProjectPayments"></span>
</th>
</tr>
</tfoot>
</table>
@@ -0,0 +1,148 @@
<div class="row">
<div class="col-md-12">
<h2 style="margin-top:0">uren per project</h2>
<table class="table table-condensed table-bordered">
<thead>
<tr class="table-info">
<th class="table-header-blue">project</th>
<th class="align-right table-header-blue">tarief</th>
<th class="align-right table-header-blue">jan</th>
<th class="align-right table-header-blue">feb</th>
<th class="align-right table-header-blue">mrt</th>
<th class="align-right table-header-blue">apr</th>
<th class="align-right table-header-blue">mei</th>
<th class="align-right table-header-blue">juni</th>
<th class="align-right table-header-blue">juli</th>
<th class="align-right table-header-blue">aug</th>
<th class="align-right table-header-blue">sep</th>
<th class="align-right table-header-blue">okt</th>
<th class="align-right table-header-blue">nov</th>
<th class="align-right table-header-blue">dec</th>
<th class="align-right table-header-blue">tot jaar</th>
<th class="align-right table-header-blue">tot overig</th>
<th class="align-right table-header-blue">grand total</th>
</tr>
</thead>
<tbody data-bind="foreach:myData">
<tr>
<td>
<span data-bind="text:projectname"></span>
</td>
<td class="align-right">
<span data-bind="text:tarif"></span>
</td>
<td class="align-right">
<span data-bind="text:januari"></span>
</td>
<td class="align-right">
<span data-bind="text:februari"></span>
</td>
<td class="align-right">
<span data-bind="text:maart"></span>
</td>
<td class="align-right">
<span data-bind="text:april"></span>
</td>
<td class="align-right">
<span data-bind="text:mei"></span>
</td>
<td class="align-right">
<span data-bind="text:juni"></span>
</td>
<td class="align-right">
<span data-bind="text:juli"></span>
</td>
<td class="align-right">
<span data-bind="text:augustus"></span>
</td>
<td class="align-right">
<span data-bind="text:september"></span>
</td>
<td class="align-right">
<span data-bind="text:oktober"></span>
</td>
<td class="align-right">
<span data-bind="text:november"></span>
</td>
<td class="align-right">
<span data-bind="text:december"></span>
</td>
<th class="align-right">
<span data-bind="text:totalyear"></span>
</th>
<th class="align-right">
<span data-bind="text:totalotheryears"></span>
</th>
<th class="align-right">
<span data-bind="text:totalhours"></span>
</th>
</tr>
</tbody>
<tfoot>
<tr class="table-info">
<th class="table-header-blue">totaal</th>
<th class="table-header-blue">&nbsp;</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalJanuari "></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalFebruari "></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalMaart "></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalApril "></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalMei "></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalJuni "></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalJuli "></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalAugustus"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalSeptember "></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalOktober "></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalNovember "></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalDecember "></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalTotal().toFixed(1)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalTotalOtheryears().toFixed(1)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:(totalTotalOtheryears() + totalTotal()).toFixed(1)"></span>
</th>
</tr>
</tfoot>
</table>
</div>
</div>
<!--<div class="row">-->
<!-- <div class="col-md-6">-->
<!-- <div class="graph-holder">-->
<!-- <canvas data-bind="attr:{id: 'hours-per-month-' + slug}" id="" height="300"></canvas>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="col-md-6">-->
<!-- <div class="graph-holder">-->
<!-- <canvas data-bind="attr:{id: 'hours-per-project-' + slug}" id="" height="300"></canvas>-->
<!-- </div>-->
<!-- </div>-->
<!--</div>-->
@@ -0,0 +1,146 @@
<div class="row">
<div class="col-md-12">
<h2 style="margin-top:0">omzet per project</h2>
<table class="table table-condensed table-bordered">
<thead>
<tr class="table-info">
<th class="table-header-blue">project</th>
<th class="align-right table-header-blue">tarief</th>
<th class="align-right table-header-blue">jan</th>
<th class="align-right table-header-blue">feb</th>
<th class="align-right table-header-blue">mrt</th>
<th class="align-right table-header-blue">apr</th>
<th class="align-right table-header-blue">mei</th>
<th class="align-right table-header-blue">juni</th>
<th class="align-right table-header-blue">juli</th>
<th class="align-right table-header-blue">aug</th>
<th class="align-right table-header-blue">sep</th>
<th class="align-right table-header-blue">okt</th>
<th class="align-right table-header-blue">nov</th>
<th class="align-right table-header-blue">dec</th>
<th class="align-right table-header-blue">tot jaar</th>
<th class="align-right table-header-blue">tot overig</th>
<th class="align-right table-header-blue">grand total</th>
</tr>
</thead>
<tbody data-bind="foreach:myData">
<tr>
<td>
<span data-bind="text:projectname"></span>
</td>
<td class="align-right">
<span data-bind="text:tarif"></span>
</td>
<td class="align-right">
<span data-bind="text:januariRevenue.toFixed(0)"></span>
</td>
<td class="align-right">
<span data-bind="text:februariRevenue.toFixed(0)"></span>
</td>
<td class="align-right">
<span data-bind="text:maartRevenue.toFixed(0)"></span>
</td>
<td class="align-right">
<span data-bind="text:aprilRevenue.toFixed(0)"></span>
</td>
<td class="align-right">
<span data-bind="text:meiRevenue.toFixed(0)"></span>
</td>
<td class="align-right">
<span data-bind="text:juniRevenue.toFixed(0)"></span>
</td>
<td class="align-right">
<span data-bind="text:juliRevenue.toFixed(0)"></span>
</td>
<td class="align-right">
<span data-bind="text:augustusRevenue.toFixed(0)"></span>
</td>
<td class="align-right">
<span data-bind="text:septemberRevenue.toFixed(0)"></span>
</td>
<td class="align-right">
<span data-bind="text:oktoberRevenue.toFixed(0)"></span>
</td>
<td class="align-right">
<span data-bind="text:novemberRevenue.toFixed(0)"></span>
</td>
<td class="align-right">
<span data-bind="text:decemberRevenue.toFixed(0)"></span>
</td>
<th class="align-right">
<span data-bind="text:totalyearRevenue.toFixed(0)"></span>
</th>
<th class="align-right">
<span data-bind="text:totalotheryearsRevenue.toFixed(0)"></span>
</th>
<th class="align-right">
<span data-bind="text:totalhoursRevenue.toFixed(0)"></span>
</th>
</tr>
</tbody>
<tfoot>
<tr class="table-info">
<th class="table-header-blue">totaal</th>
<th class="table-header-blue">&nbsp;</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalJanuariRevenue().toFixed(0)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalFebruariRevenue().toFixed(0)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalMaartRevenue().toFixed(0)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalAprilRevenue().toFixed(0)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalMeiRevenue().toFixed(0)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalJuniRevenue().toFixed(0)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalJuliRevenue().toFixed(0)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalAugustusRevenue().toFixed(0)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalSeptemberRevenue().toFixed(0)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalOktoberRevenue().toFixed(0)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalNovemberRevenue().toFixed(0)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalDecemberRevenue().toFixed(0)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalTotalRevenue().toFixed(0)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:totalTotalOtheryearsRevenue().toFixed(0)"></span>
</th>
<th class="align-right table-header-blue">
<span data-bind="text:(totalTotalOtheryearsRevenue() + totalTotalRevenue()).toFixed(0)"></span>
</th>
</tr>
</tfoot>
</table>
</div>
</div>
<!--<div class="row">-->
<!-- <div class="col-md-6">-->
<!-- <div class="graph-holder">-->
<!-- <canvas data-bind="attr:{id: 'revenue-per-month-' + slug}" height="300"></canvas>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="col-md-6">-->
<!-- <div class="graph-holder">-->
<!-- <canvas data-bind="attr:{id: 'revenue-per-project-' + slug}" height="300"></canvas>-->
<!-- </div>-->
<!-- </div>-->
<!--</div>-->
@@ -0,0 +1,116 @@
<table class="table" style="font-size:.8em;">
<thead>
<tr>
<th class="rotate sorting-field">
<div data-bind="click:setSorting.bind($data, 'projectnumber')">
<span>projectnummer</span>
</div>
</th>
<th class="rotate">
<div><span>instroom</span></div>
</th>
<th class="rotate sorting-field">
<div data-bind="click:setSorting.bind($data, 'projectname')">
<span>naam</span>
</div>
</th>
<th class="rotate sorting-field">
<div data-bind="click:setSorting.bind($data, 'CUS.name')">
<span>opdrachtgever</span>
</div>
</th>
<!-- ko foreach: uniqueEmployees -->
<th class="rotate">
<div><span data-bind="text:fullname"></span></div>
</th>
<!-- /ko -->
<th class="rotate">
<div><span>eigen tarief omzet (ex btw)</span></div>
</th>
<th class="rotate">
<div><span>totaal geschreven omzet</span></div>
</th>
<!-- <th class="rotate">-->
<!-- <div><span>derden (ex btw)</span></div>-->
<!-- </th>-->
<!-- <th class="rotate">-->
<!-- <div><span>beschikbaar</span></div>-->
<!-- </th>-->
<th class="rotate">
<div><span>saldo</span></div>
</th>
<th class="rotate">
<div><span>OWP</span></div>
</th>
<th class="rotate">
<div><span>Lopend boekjaar</span></div>
</th>
<th class="rotate">
<div><span>Volgende boekjaren</span></div>
</th>
</tr>
<tr>
<th class="align-right" colspan="4">totaal</th>
<!-- ko foreach: totalPerEmployee -->
<th class="align-right">
<span data-bind="text:totalRevenue"></span>
</th>
<!-- /ko -->
<th class="align-right">
<span data-bind="text:totalOwnRevenue"></span>
</th>
<th class="align-right">
<span data-bind="text:totalEmployeeRevenues"></span>
</th>
<th class="align-right">
<span data-bind="text:totalAvailableRevenues"></span>
</th>
<th class="align-right">
<span data-bind="text:totalOwp"></span>
</th>
<th class="align-right">
<span data-bind="text:totalCurrentFinancialYear"></span>
</th>
<th class="align-right">
<span data-bind="text:totalNextFinancialYear"></span>
</th>
</tr>
</thead>
<tbody data-bind="foreach:recap">
<tr>
<td><span data-bind="text:projectnumber"></span></td>
<td><span data-bind="text:instroom"></span></td>
<td><span data-bind="text:projectname"></span></td>
<td><span data-bind="text:name"></span></td>
<!-- ko foreach: employees -->
<td class="align-right">
<span data-bind="text:revenues"></span>
</td>
<!-- /ko -->
<td class="align-right">
<span data-bind="text:ownRevenue"></span>
</td>
<td class="align-right">
<span data-bind="text:totalEmployeeRevenues"></span>
</td>
<th class="align-right">
<span data-bind="text:availableRevenue"></span>
</th>
<th class="align-right">
<span data-bind="text:owp"></span>
</th>
<td width="100px">
<input class="form-control form-control-xsm align-right"
data-bind="textInput:currentFinancialYear,
event:{keyup:$root.saveCurrentFinancialYear},
css:{'red-border': ! pristine()}"/>
</td>
<td class="align-right">
<span data-bind="text:nextFinancialYears"></span>
</td>
</tr>
</tbody>
<tfoot>
</tfoot>
</table>
@@ -0,0 +1,89 @@
<table class="table" style="font-size:.8em;">
<thead>
<tr>
<th class="rotate">
<div data-bind="click:setSorting.bind($data, 'projectnumber')">
<span>projectnummer</span>
</div>
</th>
<th class="rotate">
<div><span>instroom</span></div>
</th>
<th class="rotate">
<div><span>uitstroom</span></div>
</th>
<th class="rotate">
<div data-bind="click:setSorting.bind($data, 'projectname')">
<span>naam</span>
</div>
</th>
<th class="rotate">
<div data-bind="click:setSorting.bind($data, 'CUS.name')">
<span>opdrachtgever</span>
</div>
</th>
<!-- ko foreach: uniqueEmployees -->
<th class="rotate">
<div><span data-bind="text:fullname + ' geschreven'"></span></div>
</th>
<!-- /ko -->
<th class="rotate">
<div><span>totaal fact. uren gerealisserd</span></div>
</th>
<!-- ko foreach: uniqueEmployees -->
<th class="rotate">
<div><span data-bind="text:fullname + ' beschikbaar'"></span></div>
</th>
<!-- /ko -->
<th class="rotate">
<div><span>totaal beschikbare uren</span></div>
</th>
</tr>
<tr>
<th class="align-right" colspan="5">totaal</th>
<!-- ko foreach: totalPerEmployee -->
<th class="align-right">
<span data-bind="text:totalHours"></span>
</th>
<!-- /ko -->
<th class="align-right">
<span data-bind="text:totalEmployeeHours"></span>
</th>
<!-- ko foreach: totalPerEmployee -->
<th class="align-right">
<span data-bind="text:totalAvailableHours"></span>
</th>
<!-- /ko -->
<th class="align-right">
<span data-bind="text:totalEmployeeAvailableHours"></span>
</th>
</tr>
</thead>
<tbody data-bind="foreach:recap">
<tr>
<td><span data-bind="text:projectnumber"></span></td>
<td><span data-bind="text:instroom"></span></td>
<td><span data-bind="text:uitstroom ? uitstroom : ''"></span></td>
<td><span data-bind="text:projectname"></span></td>
<td><span data-bind="text:name"></span></td>
<!-- ko foreach: employees -->
<td class="align-right">
<span data-bind="text:hours"></span>
</td>
<!-- /ko -->
<th class="align-right">
<span data-bind="text:totalEmployeeHours"></span>
</th>
<!-- ko foreach: employees -->
<td class="align-right">
<span data-bind="text:availableHours"></span>
</td>
<!-- /ko -->
<td class="align-right">
<span data-bind="text:hoursAvailable"></span>
</td>
</tr>
</tbody>
<tfoot>
</tfoot>
</table>
+28
View File
@@ -0,0 +1,28 @@
<div class="modal modal-3d-flip-vertical" tabindex="-1" role="dialog" id="tell-me" data-bind="css:modalClass">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" data-bind="text:title">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</h5>
</div>
<div class="modal-body">
<p data-bind="html:message"></p>
</div>
<div class="modal-footer">
<!-- ko if : notify() -->
<button type="button" class="btn btn-primary"
data-bind="text:yesText, click:closeYes"></button>
<button type="button" class="btn btn-secondary"
data-bind="text:noText, click:closeNo"></button>
<!-- /ko -->
<!-- ko if : ! notify() -->
<button type="button" class="btn btn-primary" data-dismiss="modal"
data-bind="click:closeOk">OK</button>
<!-- /ko -->
</div>
</div>
</div>
</div>
+20
View File
@@ -0,0 +1,20 @@
<div class="modal fade modal-primary" tabindex="-1" role="dialog" id="upload-bestand">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="upload file">Uploaden bestand</h4>
</div>
<div class="modal-body">
<div class="upload-btn-wrapper">
<button class="upload-btn">Kies bestand</button>
<input type="file" name="myfile" id="file-chooser" />
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">sluit</button>
<button type="button" class="btn btn-primary">uploaden</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
+79
View File
@@ -0,0 +1,79 @@
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
<style>
@import url(http://fonts.googleapis.com/css?family=Roboto);
*
{
font-family: 'Roboto' , sans-serif;
}
body
{
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAxMC8yOS8xMiKqq3kAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzVxteM2AAABHklEQVRIib2Vyw6EIAxFW5idr///Qx9sfG3pLEyJ3tAwi5EmBqRo7vHawiEEERHS6x7MTMxMVv6+z3tPMUYSkfTM/R0fEaG2bbMv+Gc4nZzn+dN4HAcREa3r+hi3bcuu68jLskhVIlW073tWaYlQ9+F9IpqmSfq+fwskhdO/AwmUTJXrOuaRQNeRkOd5lq7rXmS5InmERKoER/QMvUAPlZDHcZRhGN4CSeGY+aHMqgcks5RrHv/eeh455x5KrMq2yHQdibDO6ncG/KZWL7M8xDyS1/MIO0NJqdULLS81X6/X6aR0nqBSJcPeZnlZrzN477NKURn2Nus8sjzmEII0TfMiyxUuxphVWjpJkbx0btUnshRihVv70Bv8ItXq6Asoi/ZiCbU6YgAAAABJRU5ErkJggg==);
}
.error-template
{
padding: 40px 15px;
text-align: center;
}
.error-actions
{
margin-top: 15px;
margin-bottom: 15px;
}
.error-actions .btn
{
margin-right: 10px;
}
.message-box h1
{
color: #252932;
font-size: 98px;
font-weight: 700;
line-height: 98px;
text-shadow: rgba(61, 61, 61, 0.3) 1px 1px, rgba(61, 61, 61, 0.2) 2px 2px, rgba(61, 61, 61, 0.3) 3px 3px;
}
</style>
</head>
<body>
<!------ Include the above in your HEAD tag ---------->
<div class="container">
<div class="row">
<div class="col-md-6">
<div class="error-template">
<h1>
:) Oops!</h1>
<h2>
Momenteel wordt aan de site gewerkt</h2>
<h1>
We zijn snel weer terug</h1>
<div>
<p>
Excuses voor het ongemak maar we zijn momenteel bezig om de appliactie aan te passen, </p>
<p>
— Grippa Zorg Team</p>
</div>
</div>
</div>
<div class="col-md-6">
<svg class="svg-box" width="380px" height="500px" viewbox="0 0 837 1045" version="1.1"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
<path d="M353,9 L626.664028,170 L626.664028,487 L353,642 L79.3359724,487 L79.3359724,170 L353,9 Z" id="Polygon-1" stroke="#3bafda" stroke-width="6" sketch:type="MSShapeGroup"></path>
<path d="M78.5,529 L147,569.186414 L147,648.311216 L78.5,687 L10,648.311216 L10,569.186414 L78.5,529 Z" id="Polygon-2" stroke="#7266ba" stroke-width="6" sketch:type="MSShapeGroup"></path>
<path d="M773,186 L827,217.538705 L827,279.636651 L773,310 L719,279.636651 L719,217.538705 L773,186 Z" id="Polygon-3" stroke="#f76397" stroke-width="6" sketch:type="MSShapeGroup"></path>
<path d="M639,529 L773,607.846761 L773,763.091627 L639,839 L505,763.091627 L505,607.846761 L639,529 Z" id="Polygon-4" stroke="#00b19d" stroke-width="6" sketch:type="MSShapeGroup"></path>
<path d="M281,801 L383,861.025276 L383,979.21169 L281,1037 L179,979.21169 L179,861.025276 L281,801 Z" id="Polygon-5" stroke="#ffaa00" stroke-width="6" sketch:type="MSShapeGroup"></path>
</g>
</svg>
</div>
</div>
</div>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
</body>
</html>
+89
View File
@@ -0,0 +1,89 @@
<?php
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome to CodeIgniter</title>
<style type="text/css">
::selection { background-color: #E13300; color: white; }
::-moz-selection { background-color: #E13300; color: white; }
body {
background-color: #fff;
margin: 40px;
font: 13px/20px normal Helvetica, Arial, sans-serif;
color: #4F5155;
}
a {
color: #003399;
background-color: transparent;
font-weight: normal;
}
h1 {
color: #444;
background-color: transparent;
border-bottom: 1px solid #D0D0D0;
font-size: 19px;
font-weight: normal;
margin: 0 0 14px 0;
padding: 14px 15px 10px 15px;
}
code {
font-family: Consolas, Monaco, Courier New, Courier, monospace;
font-size: 12px;
background-color: #f9f9f9;
border: 1px solid #D0D0D0;
color: #002166;
display: block;
margin: 14px 0 14px 0;
padding: 12px 10px 12px 10px;
}
#body {
margin: 0 15px 0 15px;
}
p.footer {
text-align: right;
font-size: 11px;
border-top: 1px solid #D0D0D0;
line-height: 32px;
padding: 0 10px 0 10px;
margin: 20px 0 0 0;
}
#container {
margin: 10px;
border: 1px solid #D0D0D0;
box-shadow: 0 0 8px #D0D0D0;
}
</style>
</head>
<body>
<div id="container">
<h1>Welcome to CodeIgniter!</h1>
<div id="body">
<p>The page you are looking at is being generated dynamically by CodeIgniter.</p>
<p>If you would like to edit this page you'll find it located at:</p>
<code>application/views/welcome_message.php</code>
<p>The corresponding controller for this page is found at:</p>
<code>application/controllers/Welcome.php</code>
<p>If you are exploring CodeIgniter for the very first time, you should start by reading the <a href="user_guide/">User Guide</a>.</p>
</div>
<p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds. <?php echo (ENVIRONMENT === 'development') ? 'CodeIgniter Version <strong>' . CI_VERSION . '</strong>' : '' ?></p>
</div>
</body>
</html>