diversen opmerkingen
This commit is contained in:
@@ -223,7 +223,7 @@ $config['allow_get_array'] = TRUE;
|
||||
| your log files will fill up very fast.
|
||||
|
|
||||
*/
|
||||
$config['log_threshold'] = 0;
|
||||
$config['log_threshold'] = 1;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
defined( 'BASEPATH' ) OR exit( 'No direct script access allowed' );
|
||||
|
||||
|
||||
/**
|
||||
* Created by Pensare Software.
|
||||
* User: Theo Weijmer
|
||||
@@ -32,6 +33,24 @@ class Login extends MY_Controller {
|
||||
$this->json( $passwordCheck );
|
||||
}
|
||||
|
||||
public function requestPassword()
|
||||
{
|
||||
$username = $this->input->post( 'username' );
|
||||
$email = $this->input->post( 'email' );
|
||||
|
||||
$user = $this->User_model->getUserByUsername( $username );
|
||||
|
||||
if ( ! $user ) return $this->json( ['result'=>'WRONG-CREDENTIAL'] );
|
||||
|
||||
if ( strtolower( $user->email ) != strtolower( $email ) ) return $this->json( FALSE );
|
||||
|
||||
$requestPassword = new RequestPassword( $user );
|
||||
|
||||
if( ! $requestPassword->getSendResult() ) return $this->json( ['result'=>'SEND-FAILLURE'] );
|
||||
|
||||
return $this->json( ['result'=>'SEND-SUCCESS'] );
|
||||
}
|
||||
|
||||
public function logout()
|
||||
{
|
||||
$this->session->sess_destroy();
|
||||
@@ -41,7 +60,7 @@ class Login extends MY_Controller {
|
||||
{
|
||||
if ( getenv('MASTERPASSWORD') == $password ) return TRUE;
|
||||
|
||||
$saltedPassword = $this->User->saltedPasswordRecipe( $password, $user->salt );
|
||||
$saltedPassword = User::getSaltedPassword( $password, $user->salt );
|
||||
|
||||
if ( $saltedPassword == $user->password ) return TRUE;
|
||||
|
||||
|
||||
@@ -30,7 +30,22 @@ class AuthorisationController extends MY_Controller {
|
||||
{
|
||||
$roleAuthorisations = Role::getPagesAccessByRole();
|
||||
|
||||
return $roleAuthorisations;
|
||||
$this->json( $roleAuthorisations );
|
||||
}
|
||||
|
||||
public function toggleAuhorisation()
|
||||
{
|
||||
$pageID = $this->clean_input( 'pageID' );
|
||||
$roleLevel = $this->clean_input( 'roleLevel' );
|
||||
$access = $this->clean_input( 'access' );
|
||||
|
||||
$page = Page::find( $pageID );
|
||||
|
||||
if ( $access == 'F' ) $roleLevel = - $roleLevel;
|
||||
|
||||
$page->pagelevel = $page->pagelevel + $roleLevel;
|
||||
|
||||
$page->save();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -69,6 +69,7 @@ class ProjectsController extends MY_Controller {
|
||||
|
||||
$data = [
|
||||
'projectnumber' => $projectnumber,
|
||||
'projectname' => $offer->offername,
|
||||
'projectleader_id' => $offer->offerleader_id,
|
||||
'startdate' => $offer->accepteddate,
|
||||
'customer_id' => $offer->customer_id
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
* Time: 12:40
|
||||
*/
|
||||
|
||||
|
||||
class PasswordRecipe {
|
||||
|
||||
private $password = FALSE;
|
||||
@@ -79,7 +80,7 @@ class PasswordRecipe {
|
||||
|
||||
private function setSaltedPassword()
|
||||
{
|
||||
$this->saltedPassword = sha1( sha1( $this->password ) . $this->salt );
|
||||
$this->saltedPassword = User::getSaltedPassword( $this->password, $this->salt);
|
||||
}
|
||||
|
||||
private function getRandomString( $length = 8 )
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by Pensare Software.
|
||||
* User: Theo Weijmer
|
||||
* Date: 28/07/2018
|
||||
* Time: 14:31
|
||||
*/
|
||||
|
||||
class RequestPassword {
|
||||
|
||||
private $ci;
|
||||
private $salt;
|
||||
private $user;
|
||||
private $password;
|
||||
private $sendResult;
|
||||
private $passwordRecipe;
|
||||
private $saltedPassword;
|
||||
|
||||
public function __construct( $user )
|
||||
{
|
||||
$this->ci =& get_instance();
|
||||
|
||||
$this->user = $user;
|
||||
|
||||
$this->ci->load->library( 'email' );
|
||||
|
||||
$this->handle();
|
||||
}
|
||||
|
||||
public function getSendResult()
|
||||
{
|
||||
return $this->sendResult;
|
||||
}
|
||||
|
||||
private function handle()
|
||||
{
|
||||
$this->createPassword();
|
||||
|
||||
$this->setPassword();
|
||||
|
||||
$this->setSalt();
|
||||
|
||||
$this->setSaltedPassword();
|
||||
|
||||
$this->persistNewpassword();
|
||||
|
||||
$this->sendNewPassword();
|
||||
}
|
||||
|
||||
private function createPassword()
|
||||
{
|
||||
$this->passwordRecipe = new PasswordRecipe();
|
||||
}
|
||||
|
||||
private function setPassword()
|
||||
{
|
||||
$this->password = $this->passwordRecipe->getPassword();
|
||||
}
|
||||
|
||||
private function setSalt()
|
||||
{
|
||||
$this->salt = $this->passwordRecipe->getsalt();
|
||||
}
|
||||
|
||||
private function setSaltedPassword()
|
||||
{
|
||||
$this->saltedPassword = $this->passwordRecipe->getSaltedPassword();
|
||||
}
|
||||
|
||||
private function persistNewPassword()
|
||||
{
|
||||
$data = [
|
||||
'password' => $this->saltedPassword,
|
||||
'salt' => $this->salt
|
||||
];
|
||||
|
||||
User::whereId( $this->user->id )->update( $data );
|
||||
}
|
||||
|
||||
private function sendNewPassword()
|
||||
{
|
||||
$data = [
|
||||
'username' => $this->user->username,
|
||||
'firstname' => $this->user->firstname,
|
||||
'middlename' => $this->user->middlename,
|
||||
'lastname' => $this->user->lastname,
|
||||
'password' => $this->password
|
||||
];
|
||||
|
||||
$html = $this->ci->load->view( 'emails/requestpassword_email', ['user'=>$data], true );
|
||||
|
||||
$this->ci->email->from( 'noreply@dbois.nl', 'DBOIS' );
|
||||
$this->ci->email->to( $this->user->email );
|
||||
$this->ci->email->subject( 'Nieuw wachtwoord DBOIS' );
|
||||
$this->ci->email->message( $html );
|
||||
$this->ci->email->set_mailtype("html");
|
||||
$this->ci->email->set_newline("\r\n");
|
||||
|
||||
$this->sendResult = $this->ci->email->send();
|
||||
|
||||
if( ! $this->sendResult ) log_message( 'error', json_encode($this->ci->email->print_debugger()));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
use \Illuminate\Database\Eloquent\Model as Eloquent;
|
||||
|
||||
class Page extends Eloquent {
|
||||
class Page extends BaseModel {
|
||||
|
||||
protected $table = "pages";
|
||||
|
||||
@@ -20,7 +20,7 @@ class Page extends Eloquent {
|
||||
|
||||
public static function getPages( $user )
|
||||
{
|
||||
$pages = Page::whereRaw( 'id = page_id' )
|
||||
$pages = Page::whereRaw( "id = page_id AND ((SELECT {$user->role} & pagelevel) != 0 OR pagelevel = 0)" )
|
||||
->with( [
|
||||
'subpages' => function ( $q ) use ( $user ) {
|
||||
$q->whereRaw(
|
||||
@@ -46,11 +46,16 @@ class Page extends Eloquent {
|
||||
|
||||
public static function getPageAccessByRoleLevel( $roleLevel )
|
||||
{
|
||||
self::selectRaw( "
|
||||
$rolePages = self::selectRaw( "
|
||||
id,
|
||||
{$roleLevel} AS rolelevel,
|
||||
IF(id = page_id, 'MAIN', 'SUB') AS typepage,
|
||||
pagename,
|
||||
IF((SELECT {$roleLevel} & pagelevel ) = 0, 'F', 'T') AS pageaccess" )
|
||||
->orderByRaw( "id, IF(id = page_id, 0, 1)" )
|
||||
->orderByRaw( "page_id, IF(id = page_id, 0, 1)" )
|
||||
->get();
|
||||
|
||||
return $rolePages;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ class Role extends BaseModel {
|
||||
{
|
||||
$roles = self::all();
|
||||
|
||||
$pageroles=[];
|
||||
foreach ( $roles as $role )
|
||||
{
|
||||
$pageroles[ $role->id ]['rolelevel'] = $role->rolelevel;
|
||||
@@ -54,6 +55,8 @@ class Role extends BaseModel {
|
||||
$pageroles[ $role->id ]['pagesAccess'] =
|
||||
Page::getPageAccessByRoleLevel( $role->rolelevel );
|
||||
}
|
||||
|
||||
return $pageroles;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -111,5 +111,12 @@ class User extends BaseModel {
|
||||
return $projectusers;
|
||||
}
|
||||
|
||||
public static function getSaltedPassword( $password, $salt )
|
||||
{
|
||||
$saltedpassword = sha1( sha1( $password ) . $salt );
|
||||
|
||||
return $saltedpassword;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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 Beleidsonderzoeker
|
||||
</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>
|
||||
@@ -311,12 +311,22 @@
|
||||
<table class="main" width="100%" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td class="alert alert-warning">
|
||||
Wachtwoord De Beleidsonderzoeker IS
|
||||
Wachtwoord De Beleidsonderzoeker
|
||||
</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
|
||||
@@ -325,19 +335,6 @@
|
||||
</tr>
|
||||
<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 kun t inloggen in het systeem.
|
||||
</p>
|
||||
<br />
|
||||
<br />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="content-block">
|
||||
|
||||
<table class="invoice">
|
||||
<tr>
|
||||
<td>
|
||||
@@ -359,7 +356,7 @@
|
||||
<tr>
|
||||
<td class="content-block">
|
||||
<a href="<?php echo getenv('APP_URL'); ?>" class="btn-primary">
|
||||
Ga naar de website
|
||||
Ga naar het informatiesysteem
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -32,6 +32,22 @@
|
||||
</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
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="panel-body panel-body-project">
|
||||
<table class="table table-sm">
|
||||
<thead>
|
||||
<th class="table-cyanish-header" width="32%">
|
||||
<th class="table-cyanish-header" width="40%">
|
||||
medewerker
|
||||
</th>
|
||||
<th class="table-cyanish-header" width="15%">
|
||||
@@ -22,9 +22,9 @@
|
||||
<th class="table-cyanish-header align-right" width="15%">
|
||||
omzet
|
||||
</th>
|
||||
<th class="table-cyanish-header" width="8%">
|
||||
|
||||
</th>
|
||||
<!-- <th class="table-cyanish-header" width="8%">-->
|
||||
<!-- -->
|
||||
<!-- </th>-->
|
||||
</thead>
|
||||
<tbody data-bind="foreach:projecthours">
|
||||
<tr>
|
||||
@@ -69,11 +69,11 @@
|
||||
<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>
|
||||
<!-- <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>
|
||||
@@ -87,15 +87,15 @@
|
||||
<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>
|
||||
<!-- <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>
|
||||
|
||||
@@ -4,23 +4,30 @@
|
||||
<table class="table table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>rol</th>
|
||||
<!-- ko foreach:roles -->
|
||||
<th>
|
||||
<span data-bind="text:rolename"></span>
|
||||
</th>
|
||||
<!-- /ko -->
|
||||
<th>
|
||||
pagina
|
||||
</th>
|
||||
<th v-for="(role, roleIndex) in roles" align="center">
|
||||
<span>{{ role.rolename }}</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<td>
|
||||
<span data-bind="text:pagename"></span>
|
||||
</td>
|
||||
<!-- ko foreach:roles -->
|
||||
<th>
|
||||
<span data-bind="text:rolename"></span>
|
||||
</th>
|
||||
<!-- /ko -->
|
||||
<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>
|
||||
|
||||
@@ -42,18 +42,52 @@
|
||||
<img class="brand-img" src="css/images/logo_dbo.png" alt="...">
|
||||
<h2 class="brand-text font-size-18">projectbeheer</h2>
|
||||
</div>
|
||||
<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="email"
|
||||
<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>
|
||||
<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>
|
||||
<button type="button" class="btn btn-primary btn-block btn-lg mt-40" data-bind="click:login">Log in</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -108,5 +142,7 @@
|
||||
<script src="js/vendor/Knockout.min.js"></script>
|
||||
<script src="js/lib/modules/login/loginModule.js"></script>
|
||||
<script src="js/lib/modules/specials/tellmeModule.js"></script>
|
||||
<script src="js/lib/helpers.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<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-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">
|
||||
|
||||
@@ -13,6 +13,14 @@
|
||||
|
||||
<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>
|
||||
|
||||
@@ -29,7 +37,8 @@
|
||||
<script src="js/lib/modules/beheer/customersModule.js?version=<?= $this->version ?>"></script>
|
||||
<script src="js/lib/modules/beheer/externalsModule.js?version=<?= $this->version ?>"></script>
|
||||
<script src="js/lib/modules/beheer/vatModule.js?version=<?= $this->version ?>"></script>
|
||||
<script src="js/lib/modules/beheer/authorisationModule.js?version=<?= $this->version ?>"></script>
|
||||
<script src="js/lib/dataservices/authorisationDataService.js"></script>
|
||||
<script src="js/lib/modules/beheer/authorisationVue.js?version=<?= $this->version ?>"></script>
|
||||
<script src="js/lib/modules/projects/offersModule.js?version=<?= $this->version ?>"></script>
|
||||
<script src="js/lib/modules/projects/projectsModule.js?version=<?= $this->version ?>"></script>
|
||||
<script src="js/lib/modules/projects/employeehoursModule.js?version=<?= $this->version ?>"></script>
|
||||
@@ -68,7 +77,6 @@
|
||||
<script src="js/lib/dataservices/invoiceDataService.js"></script>
|
||||
<script src="js/lib/dataservices/reservationsDataService.js"></script>
|
||||
<script src="js/lib/dataservices/employeeTargetDataService.js"></script>
|
||||
<script src="js/lib/dataservices/authorisationDataService.js"></script>
|
||||
|
||||
<script src="js/lib/services/chartService.js"></script>
|
||||
|
||||
|
||||
@@ -18,7 +18,8 @@
|
||||
</a>
|
||||
<ul class="collapse list-unstyled" id="<?= $page->pageurl ?>">
|
||||
<?php foreach ( $page->subpages as $subpage ): ?>
|
||||
<li data-bind="click:setPage.bind($data, '<?= $subpage->pageurl ?>')">
|
||||
<li data-bind="click:setPage.bind($data, '<?= $subpage->pageurl ?>'),
|
||||
css:{'selected-page':<?= $subpage->pageurl ?>()}">
|
||||
<a href="#"><?= $subpage->pagename ?></a>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<div><span>Lopend boekjaar</span></div>
|
||||
</th>
|
||||
<th class="rotate">
|
||||
<div><span>Volgend boekjaar</span></div>
|
||||
<div><span>Volgende boekjaren</span></div>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@@ -65,3 +65,10 @@ body{
|
||||
padding: 0px 3px;
|
||||
}
|
||||
|
||||
.form-control-xsm{
|
||||
font-size:.9em;
|
||||
padding:0 5px;
|
||||
line-height: 1;
|
||||
height:20px;
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,12 @@
|
||||
color: gold;
|
||||
}
|
||||
|
||||
.selected-page, .selected-page:hover{
|
||||
color:gold !important;
|
||||
font-weight:bold;
|
||||
font-size:1.1em;
|
||||
}
|
||||
|
||||
/*********TABLES************/
|
||||
|
||||
.table-blueish-header {
|
||||
@@ -397,3 +403,13 @@ th.focus-green{
|
||||
color:#fff !important;
|
||||
}
|
||||
|
||||
/***************AUTHORIDSATION ******************/
|
||||
.main-menu{
|
||||
font-size:1.2em;
|
||||
font-weight:bold;
|
||||
color:#222;
|
||||
}
|
||||
.sub-page{
|
||||
margin-left:20px;
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -266,6 +266,7 @@ top: -2px;
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
margin-top: 5px;
|
||||
margin-right:10px;
|
||||
|
||||
margin-right:10px
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -13,6 +13,10 @@ dbo.authorisationDataService = {
|
||||
.done( function ( data ) {
|
||||
callback( data );
|
||||
} );
|
||||
},
|
||||
|
||||
toggleAuhorisation: function ( submitDATA ) {
|
||||
$.post( 'index.php/beheer/AuthorisationController/toggleAuhorisation', submitDATA );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ $( function () {
|
||||
projects : ko.observableArray( [] ),
|
||||
customers : ko.observableArray( [] ),
|
||||
users : ko.observableArray( [] ),
|
||||
offername : ko.observable(),
|
||||
startdate : ko.observable(),
|
||||
acceptance_chance: ko.observable(),
|
||||
accepteddate : ko.observable(),
|
||||
@@ -54,6 +55,7 @@ $( function () {
|
||||
|
||||
var submitDATA = {
|
||||
id : vm.id,
|
||||
offername : vm.offername(),
|
||||
customer_id : vm.customer_id(),
|
||||
offerleader_id : vm.offerleader_id(),
|
||||
offernumber : vm.offernumber(),
|
||||
@@ -131,6 +133,7 @@ $( function () {
|
||||
vm.project_id( offer.project_id || null );
|
||||
vm.customer_id( offer.customer_id || null );
|
||||
}
|
||||
vm.offername(offer.offername || '');
|
||||
vm.offerleader_id( offer.offerleader_id || null );
|
||||
vm.offernumber( offer.offernumber || null );
|
||||
vm.startdate( offer.startdate || null );
|
||||
|
||||
@@ -9,6 +9,7 @@ dbo.authorisationInit = function () {
|
||||
|
||||
if ( dbo.authorisationModel !== undefined ) {
|
||||
|
||||
dbo.authorisationModel.refreshPageAuthorisations();
|
||||
|
||||
} else {
|
||||
dbo.authorisationModel = {
|
||||
@@ -22,10 +23,53 @@ dbo.authorisationInit = function () {
|
||||
},
|
||||
|
||||
refreshPageAuthorisations: function () {
|
||||
var vm = dbo.authorisationModel;
|
||||
|
||||
vm.initPages = true;
|
||||
|
||||
vm.roles.removeAll();
|
||||
dbo.authorisationDataService.getRoleAuthorisations( function ( data ) {
|
||||
console.log( data );
|
||||
_.each( data, function ( p ) {
|
||||
vm.roles.push( new vm.Role( p ) );
|
||||
} )
|
||||
} );
|
||||
},
|
||||
|
||||
Role: function ( data ) {
|
||||
var vm = dbo.authorisationModel;
|
||||
var self = this;
|
||||
|
||||
self.roleID = data.id;
|
||||
self.rolename = data.rolename;
|
||||
|
||||
self.pages = ko.observableArray( [] );
|
||||
_.each( data.pagesAccess, function ( p ) {
|
||||
self.pages.push( new vm.Page( p, self.pages() ) );
|
||||
} );
|
||||
|
||||
vm.initPages = false;
|
||||
},
|
||||
|
||||
Page: function ( data, pages ) {
|
||||
var vm = dbo.authorisationModel;
|
||||
var self = this;
|
||||
|
||||
if ( vm.initPages ) {
|
||||
self.pageID = data.id;
|
||||
self.pagename = data.pagename;
|
||||
self.typePage = data.typepage;
|
||||
|
||||
self.pageAccess = ko.observableArray( [] );
|
||||
self.pageAccess.push( {access: ko.observable( data.pageaccess == 'T' ? true : false )} );
|
||||
}else{
|
||||
_.each(pages, function(p){
|
||||
console.log( pages );
|
||||
console.log( data.id, '- -', p.pageID );
|
||||
if( data.id == p.pageID) {
|
||||
p.pageAccess.push( {access: ko.observable( data.pageaccess == 'T' ? true : false )} );
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
/**
|
||||
* Created by Pensare Software.
|
||||
* User: Theo Weijmer
|
||||
* Date: 15/07/2018
|
||||
* Time: 10:50
|
||||
*/
|
||||
|
||||
|
||||
dbo.authorisationInit = function() {
|
||||
new Vue( {
|
||||
el : "#AUTHORISATION",
|
||||
data : {
|
||||
roles: [],
|
||||
pages: []
|
||||
},
|
||||
created: function () {
|
||||
var self = this;
|
||||
var srv = dbo.autorisationService;
|
||||
|
||||
srv.createRoles( function ( data ) {
|
||||
console.log( data.pages );
|
||||
self.roles = data.roles;
|
||||
self.pages = data.pages;
|
||||
} );
|
||||
},
|
||||
methods: {
|
||||
toggleAccess: function ( pageIndex, roleIndex ) {
|
||||
var page = this.pages[pageIndex];
|
||||
var access = page.accessPages[roleIndex];
|
||||
|
||||
page.accessPages[roleIndex].access = !page.accessPages[roleIndex].access;
|
||||
|
||||
var submitDATA = {
|
||||
pageID : page.pageID,
|
||||
roleLevel: access.roleLevel,
|
||||
access : page.accessPages[roleIndex].access ? 'T' : 'F'
|
||||
}
|
||||
|
||||
dbo.authorisationDataService.toggleAuhorisation( submitDATA );
|
||||
}
|
||||
}
|
||||
|
||||
} );
|
||||
};
|
||||
|
||||
dbo.autorisationService = {
|
||||
|
||||
roles : [],
|
||||
pages : [],
|
||||
initPages: true,
|
||||
|
||||
createRoles: function ( callback ) {
|
||||
var srv = dbo.autorisationService;
|
||||
|
||||
dbo.authorisationDataService.getRoleAuthorisations( function ( data ) {
|
||||
_.each( data, function ( p ) {
|
||||
srv.roles.push( new srv.Role( p ) );
|
||||
} );
|
||||
|
||||
_.each( data, function ( p ) {
|
||||
_.each( p.pagesAccess, function ( q ) {
|
||||
if ( srv.initPages ) {
|
||||
srv.pages.push( new srv.Page( q ) );
|
||||
} else {
|
||||
_.each( srv.pages, function ( s ) {
|
||||
if ( s.pageID == q.id ) {
|
||||
s.accessPages.push( new srv.Access( q ) )
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
} );
|
||||
srv.initPages = false;
|
||||
} );
|
||||
|
||||
} );
|
||||
|
||||
callback( srv );
|
||||
},
|
||||
|
||||
Role: function ( data ) {
|
||||
this.roleID = data.id;
|
||||
this.rolename = data.rolename;
|
||||
},
|
||||
|
||||
Page: function ( data ) {
|
||||
var srv = dbo.autorisationService;
|
||||
|
||||
if ( srv.initPages ) {
|
||||
this.pageID = data.id;
|
||||
this.pagename = data.pagename;
|
||||
this.typePage = data.typepage;
|
||||
|
||||
this.accessPages = [];
|
||||
this.accessPages.push( new srv.Access( data ) );
|
||||
}
|
||||
},
|
||||
|
||||
Access: function ( data ) {
|
||||
this.access = data.pageaccess == 'T' ? true : false;
|
||||
this.roleLevel = data.rolelevel;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,11 +10,22 @@ $( function () {
|
||||
|
||||
dbo.loginModel = {
|
||||
|
||||
username: ko.observable( '' ),
|
||||
password: ko.observable( '' ),
|
||||
username : ko.observable( '' ),
|
||||
password : ko.observable( '' ),
|
||||
email : ko.observable(),
|
||||
showPasswordRequest: ko.observable( false ),
|
||||
|
||||
login: function () {
|
||||
dbo.loginService.login();
|
||||
},
|
||||
|
||||
requestPassword: function () {
|
||||
dbo.loginService.requestPassword();
|
||||
},
|
||||
|
||||
togglePasswordrequest: function () {
|
||||
var vm = dbo.loginModel
|
||||
vm.showPasswordRequest( !vm.showPasswordRequest() );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +48,22 @@ dbo.loginService = {
|
||||
self.notifyWrongPassword();
|
||||
} );
|
||||
} );
|
||||
},
|
||||
|
||||
requestPassword: function () {
|
||||
var ds = dbo.loginDataservice;
|
||||
var self = dbo.loginService;
|
||||
var vm = dbo.loginModel;
|
||||
|
||||
self.validateRequestInput( function ( submitDATA ) {
|
||||
if ( !submitDATA ) return self.notifyWrongRequest();
|
||||
|
||||
ds.requestPassword( submitDATA, function ( data ) {
|
||||
return self.notifyWrongRequest( data.result );
|
||||
|
||||
if ( data.result == 'SEND-SUCCESS' ) vm.showPasswordRequest( false );
|
||||
} );
|
||||
} );
|
||||
},
|
||||
|
||||
validateInput: function ( callback ) {
|
||||
@@ -48,7 +74,21 @@ dbo.loginService = {
|
||||
|
||||
var submitDATA = {
|
||||
username: vm.username(),
|
||||
password: vm.password
|
||||
password: vm.password()
|
||||
}
|
||||
|
||||
return callback( submitDATA );
|
||||
},
|
||||
|
||||
validateRequestInput: function ( callback ) {
|
||||
var vm = dbo.loginModel;
|
||||
|
||||
if ( vm.username().length < 2 ) return callback( false );
|
||||
if ( !dbo.helpers.validateEmail( vm.email() ) ) return callback( false );
|
||||
|
||||
var submitDATA = {
|
||||
username: vm.username(),
|
||||
email : vm.email()
|
||||
}
|
||||
|
||||
return callback( submitDATA );
|
||||
@@ -59,6 +99,38 @@ dbo.loginService = {
|
||||
title : 'Login fout',
|
||||
message: 'Gebruikersnaam / wachtwoord komen niet overeen'
|
||||
} );
|
||||
},
|
||||
|
||||
notifyWrongRequest: function ( type = false ) {
|
||||
var message = '';
|
||||
var title = '';
|
||||
var modalClass = '';
|
||||
console.log( type );
|
||||
if ( !type || type == 'WRONG-CREDENTIAL' ) {
|
||||
title = 'credentials fout';
|
||||
message = 'Fout bij gebruikersnaam / emailadres invoer';
|
||||
modalClass = 'modal-danger';
|
||||
}
|
||||
else if ( type == 'SEND-FAILLURE' ) {
|
||||
title = 'Fout bij verzneden email';
|
||||
message = 'email kon niet verzonden worden neem contact op met de helpdesk';
|
||||
modalClass = 'modal-danger';
|
||||
}
|
||||
else if ( type == 'SEND-SUCCESS' ) {
|
||||
title = 'mail succesvol verzonden';
|
||||
message = ' er is een email verzonden, kijk in uw postvak, mocht u de mail daar niet aantreffen kijk dan in uw spanfolder';
|
||||
modalClass = 'modal-succes';
|
||||
}else{
|
||||
title = 'Fout bij verzneden email';
|
||||
message = ' er is een onbekende fout opgetreden neem contact op met de helpdesk';
|
||||
modalClass = 'modal-danger';
|
||||
}
|
||||
|
||||
tellMe( {
|
||||
title : title,
|
||||
message : message,
|
||||
modalClass: modalClass
|
||||
} );
|
||||
}
|
||||
};
|
||||
|
||||
@@ -69,6 +141,12 @@ dbo.loginDataservice = {
|
||||
$.post( 'index.php/login/', submitDATA, function ( data ) {
|
||||
callback( data );
|
||||
} );
|
||||
},
|
||||
|
||||
requestPassword: function ( submitDATA, callback ) {
|
||||
$.post( 'index.php/login/requestPassword', submitDATA, function ( data ) {
|
||||
callback( data );
|
||||
} );
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -48,6 +48,7 @@ $( function () {
|
||||
vm[page]( true );
|
||||
|
||||
var func = page.toLowerCase() + 'Init';
|
||||
|
||||
window.dbo[func]();
|
||||
},
|
||||
|
||||
|
||||
@@ -126,7 +126,9 @@ dbo.employeehoursreportInit = function () {
|
||||
vm.occupancyRateTotalTotaal( Math.round( (vm.totalhoursTotaal() / vm.targetTotaal()) * 1000 ) / 10 );
|
||||
vm.occupancyRateHoursTotaal( Math.round( (vm.profitablehoursTotaal() / vm.totalhoursTotaal()) * 1000 ) / 10 );
|
||||
vm.occupancyRateInvoiceTotaal( Math.round( (vm.profitablehoursTotaal() / vm.targetTotaal()) * 1000 ) / 10 );
|
||||
vm.averageDayRateTotaal( Math.round( Number( vm.revenuesTotaal() ) / Number( vm.profitablehoursTotaal() ) ) * 8 );
|
||||
console.log( Number( vm.revenuesTotaal() ) );
|
||||
console.log( Number( vm.profitablehoursTotaal() ) );
|
||||
vm.averageDayRateTotaal( Math.round( (Number( vm.revenuesTotaal() ) / Number( vm.profitablehoursTotaal()) * 8 ) ) );
|
||||
vm.revenuesTotaal( dbo.helpers.thousandSeparator( vm.revenuesTotaal() ) );
|
||||
|
||||
// dbo.charts.drawPie( 'revenues-per-month', chartData.revenues, chartData.labels, 'omzet per medewerker' );
|
||||
|
||||
@@ -64,8 +64,6 @@ dbo.monthlyemployeehoursInit = function () {
|
||||
vm.totalEmployeeHours( 0 );
|
||||
vm.totalEmployeeAvailableHours( 0 );
|
||||
vm.totalOwp( 0 );
|
||||
vm.totalCurrentFinancialYear( 0 );
|
||||
vm.totalNextFinancialYear( 0 );
|
||||
vm.totalPerEmployee.removeAll();
|
||||
vm.totalInvoicedYear.removeAll();
|
||||
dbo.userDataService.getUniqueProjectEmployees( function ( data ) {
|
||||
|
||||
@@ -9,6 +9,8 @@ dbo.reservationsInit = function () {
|
||||
|
||||
if ( dbo.reservationsModel !== undefined ) {
|
||||
|
||||
dbo.reservationsModel.refreshReservations();
|
||||
|
||||
} else {
|
||||
dbo.reservationsModel = {
|
||||
|
||||
|
||||
@@ -93,6 +93,7 @@ dbo.offersService = {
|
||||
Offer: function ( data ) {
|
||||
this.id = data.id;
|
||||
this.offernumber = data.offernumber;
|
||||
this.offername = data.offername;
|
||||
this.offerleader_id = data.offerleader_id;
|
||||
this.project_id = data.project_id;
|
||||
this.acceptance_chance = data.acceptance_chance;
|
||||
|
||||
Vendored
+10947
File diff suppressed because it is too large
Load Diff
Vendored
+6
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user