Conversie codeigniter 4
This commit is contained in:
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
use CodeIgniter\CLI\CLI;
|
||||
|
||||
CLI::error('ERROR: ' . $code);
|
||||
CLI::write($message);
|
||||
CLI::newLine();
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
|
||||
echo "\nDatabase error: ",
|
||||
$heading,
|
||||
"\n\n",
|
||||
$message,
|
||||
"\n\n";
|
||||
Executable
+65
@@ -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();
|
||||
}
|
||||
}
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
|
||||
echo "\nERROR: ",
|
||||
$heading,
|
||||
"\n\n",
|
||||
$message,
|
||||
"\n\n";
|
||||
Executable
+21
@@ -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 ?>
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>403 Forbidden</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<p>Directory access is forbidden.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -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';
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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>
|
||||
Executable
+84
@@ -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>
|
||||
Executable
+64
@@ -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>
|
||||
Executable
+429
@@ -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')) ?> —
|
||||
PHP: <?= esc(PHP_VERSION) ?> —
|
||||
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 →</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 →</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'])) : ?>
|
||||
— <?= 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'])) : ?>
|
||||
— <?= 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>
|
||||
Executable
+64
@@ -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>
|
||||
Executable
+33
@@ -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>
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>403 Forbidden</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<p>Directory access is forbidden.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -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>
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>403 Forbidden</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<p>Directory access is forbidden.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>403 Forbidden</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<p>Directory access is forbidden.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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">×</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>
|
||||
@@ -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">×</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>
|
||||
@@ -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">×</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"> </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> </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>
|
||||
@@ -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">×</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>
|
||||
@@ -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">×</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">%</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">
|
||||
 
|
||||
</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>
|
||||
@@ -0,0 +1,5 @@
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane animation-slide-top active" id="dashboard">
|
||||
<?= view('modals/partials/_projectdashboard') ?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -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>
|
||||
@@ -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%"> </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>
|
||||
@@ -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>
|
||||
@@ -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%">-->
|
||||
<!-- -->
|
||||
<!-- </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"> </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"> </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>
|
||||
@@ -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"> </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">
|
||||
|
||||
</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> </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> </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>
|
||||
@@ -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"> </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() -->
|
||||
<i class="icon fa-check pointer"
|
||||
data-bind="click:$root.toggleFromReservation"></i>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: ! fromReservation() -->
|
||||
<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%">
|
||||
|
||||
</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"> </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> </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">
|
||||
|
||||
</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%"> </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>
|
||||
@@ -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>
|
||||
@@ -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">×</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"> </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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -0,0 +1,3 @@
|
||||
<div class="page" id="<?= $pageurl ?>">
|
||||
<?= view('pages/' . strtolower($pageurl) . '_view') ?>
|
||||
</div>
|
||||
@@ -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"> </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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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%"> </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>
|
||||
@@ -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"> </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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -0,0 +1 @@
|
||||
<h1>DASHBOARD</h1>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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"> </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"> </th>
|
||||
<th class="align-right table-tealish-header">
|
||||
€ <span data-bind="text:totalChanceOwnRevenue"></span>
|
||||
</th>
|
||||
<th class=" table-tealish-header"> </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>
|
||||
@@ -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"> </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>
|
||||
@@ -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%"> </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"> </td>
|
||||
<td>
|
||||
<span data-bind="text:externalName"></span>
|
||||
</td>
|
||||
<td> </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> </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>
|
||||
@@ -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"> </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>
|
||||
@@ -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>%
|
||||
<!-- /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>
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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'>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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');
|
||||
@@ -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>
|
||||
@@ -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"> </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"> </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>
|
||||
@@ -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">×</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>
|
||||
@@ -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">×</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 -->
|
||||
@@ -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>
|
||||
Executable
+89
@@ -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>
|
||||
Reference in New Issue
Block a user