diversen dashboard
This commit is contained in:
@@ -42,12 +42,15 @@ class DashboardController extends MY_Controller {
|
||||
$available += $project['budgetAvailable'];
|
||||
}
|
||||
|
||||
$outstandings = $this->Invoices_model-> getTotalsOutstandingPerProject();
|
||||
|
||||
$this->json( [
|
||||
'totalOwp' => $totalOwp,
|
||||
'currentFinancialYear' => $currentFinancialYear,
|
||||
'owpNextyear' => $totalOwp - $currentFinancialYear,
|
||||
'revenuesNextyear' => $totalOwp / 0.4,
|
||||
'totalRevenues' => $totalRevenues
|
||||
'totalOwp' => round( $totalOwp, 0 ),
|
||||
'currentFinancialYear' => round( $currentFinancialYear ),
|
||||
'owpNextyear' => round( $totalOwp - $currentFinancialYear ),
|
||||
'revenuesNextyear' => round( $totalOwp / 0.4 ),
|
||||
'totalRevenues' => round( $totalRevenues ),
|
||||
'outstandings' => $outstandings
|
||||
] );
|
||||
}
|
||||
|
||||
|
||||
@@ -8,113 +8,70 @@
|
||||
|
||||
class Projectemployee extends BaseModel {
|
||||
|
||||
public function project()
|
||||
{
|
||||
return $this->belongsTo( 'Project' );
|
||||
}
|
||||
public function project()
|
||||
{
|
||||
return $this->belongsTo( 'Project' );
|
||||
}
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo( 'User' );
|
||||
}
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo( 'User' );
|
||||
}
|
||||
|
||||
public function projecthours()
|
||||
{
|
||||
return $this->hasMany( 'Projecthour' );
|
||||
}
|
||||
public function projecthours()
|
||||
{
|
||||
return $this->hasMany( 'Projecthour' );
|
||||
}
|
||||
|
||||
public static function getAvailableEmployees( $projectID )
|
||||
{
|
||||
$currentEmployees = Self::whereProjectId( $projectID )
|
||||
->lists( 'user_id' );
|
||||
public static function getAvailableEmployees( $projectID )
|
||||
{
|
||||
$currentEmployees = Self::whereProjectId( $projectID )
|
||||
->lists( 'user_id' );
|
||||
|
||||
$availableEmployees = User::selectRaw( "id, CONCAT(firstname, ' ', middlename, ' ', lastname) AS fullname" )
|
||||
->whereNotIn( 'id', $currentEmployees )
|
||||
->whereArchive( 'F' )
|
||||
->get();
|
||||
$availableEmployees = User::selectRaw( "id, CONCAT(firstname, ' ', middlename, ' ', lastname) AS fullname" )
|
||||
->whereNotIn( 'id', $currentEmployees )
|
||||
->whereArchive( 'F' )
|
||||
->get();
|
||||
|
||||
return $availableEmployees;
|
||||
}
|
||||
return $availableEmployees;
|
||||
}
|
||||
|
||||
public static function getUniqueProjectEmployees()
|
||||
{
|
||||
$projectemployees = Projectemployee::selectRaw( "USR.id, CONCAT(firstname, ' ', middlename, ' ', lastname) AS fullname" )
|
||||
->distinct()
|
||||
->join( 'users AS USR', 'USR.id', '=', 'projectemployees.user_id' )
|
||||
->get();
|
||||
public static function getUniqueProjectEmployees()
|
||||
{
|
||||
$projectemployees = Projectemployee::selectRaw( "USR.id, CONCAT(firstname, ' ', middlename, ' ', lastname) AS fullname" )
|
||||
->distinct()
|
||||
->join( 'users AS USR', 'USR.id', '=', 'projectemployees.user_id' )
|
||||
->get();
|
||||
|
||||
return $projectemployees;
|
||||
}
|
||||
return $projectemployees;
|
||||
}
|
||||
|
||||
public static function getProjectemployeeDetailsPerProject( $projectID )
|
||||
{
|
||||
$details = Projectemployee::selectRaw( 'USR.id, budget, project_id, ROUND(SUM(hours), 0) AS hours, ROUND(SUM(hours * tarif), 0) AS revenues, projectemployees.id AS projectemployeeID' )
|
||||
->join( 'users AS USR', 'USR.id', '=', 'projectemployees.user_id' )
|
||||
->join( 'projecthours AS PRH', 'PRH.projectemployee_id', '=', 'projectemployees.id' )
|
||||
->where( 'projectemployees.project_id', '=', $projectID )
|
||||
->where( 'PRH.hourtype_id', '=', 1 )
|
||||
->groupBy( 'projectemployees.id' )
|
||||
->get();
|
||||
public static function getUniqueEmployeesWithActivity( $archive = 'F' )
|
||||
{
|
||||
$projectemployees = Projectemployee::selectRaw( "USR.id, CONCAT(firstname, ' ', middlename, ' ', lastname) AS fullname" )
|
||||
->distinct()
|
||||
->join( 'users AS USR', 'USR.id', '=', 'projectemployees.user_id' )
|
||||
->join( 'projectemployees AS PRE', 'PRE.user_id', '=', 'USR.id' )
|
||||
->join( 'projects AS PRJ', 'PRJ.id', '=', 'PRE.project_id' );
|
||||
|
||||
return $details;
|
||||
}
|
||||
if ( $archive == 'F' ) $projectemployees = $projectemployees->where( 'PRJ.archive', '=', 'F' );
|
||||
|
||||
public static function firstOrCreateProjectemployee( $userID, $projectID )
|
||||
{
|
||||
$projectemployee = self::whereUserId($userID)->whereProjectId($projectID);
|
||||
$projectemployees = $projectemployees->get();
|
||||
|
||||
if( $projectemployee->count() > 0 ) return $projectemployee->first();
|
||||
return $projectemployees;
|
||||
}
|
||||
|
||||
$user = User::find( $userID );
|
||||
|
||||
$tarif = $user ? $user->hourlyrate : 0;
|
||||
|
||||
$projectemployee = Projectemployee::create( [
|
||||
'project_id' => $projectID,
|
||||
'user_id' => $userID,
|
||||
'tarif' => $tarif
|
||||
] );
|
||||
|
||||
return $projectemployee;
|
||||
}
|
||||
|
||||
public static function createProjectEmployee( $projectID )
|
||||
{
|
||||
$projectemployee = Projectemployee::create( [
|
||||
'project_id' => $projectID
|
||||
] );
|
||||
|
||||
return $projectemployee->id;
|
||||
}
|
||||
|
||||
public static function saveProjectemployee( $projectemployeeID, $projectemployee )
|
||||
{
|
||||
Projectemployee::whereId( $projectemployeeID )
|
||||
->update( $projectemployee );
|
||||
}
|
||||
|
||||
public static function removeProjectemployee( $projectemployeeID )
|
||||
{
|
||||
Projectemployee::whereId( $projectemployeeID )->delete();
|
||||
}
|
||||
|
||||
}
|
||||
=======
|
||||
public static function getProjectemployeeDetailsPerProject( $projectID )
|
||||
{
|
||||
$details = Projectemployee::selectRaw( '
|
||||
USR.id, budget, project_id, ROUND(SUM(hours), 0) AS hours, ROUND(SUM(hours * tarif), 0) AS revenues, projectemployees.id AS projectemployeeID' )
|
||||
->join( 'users AS USR', 'USR.id', '=', 'projectemployees.user_id' )
|
||||
->join( 'projecthours AS PRH', 'PRH.projectemployee_id', '=', 'projectemployees.id' )
|
||||
->where( 'projectemployees.project_id', '=', $projectID )
|
||||
->where( 'PRH.hourtype_id', '=', 1 )
|
||||
// ->where( 'budget', '!=', 0 )
|
||||
->groupBy( 'projectemployees.id' )
|
||||
->havingRaw( 'ROUND(SUM(hours), 0) > 0' );
|
||||
|
||||
if( $projectID)
|
||||
$details = $details->where( 'projectemployees.project_id', '=', $projectID );
|
||||
|
||||
$details = $details->get();
|
||||
|
||||
return $details;
|
||||
@@ -160,4 +117,3 @@ class Projectemployee extends BaseModel {
|
||||
}
|
||||
|
||||
}
|
||||
>>>>>>> Stashed changes
|
||||
|
||||
@@ -54,4 +54,60 @@ class Invoices_model extends MY_Model {
|
||||
|
||||
return $invoiceDetails;
|
||||
}
|
||||
}
|
||||
|
||||
public function getTotalsOutstandingPerProject()
|
||||
{
|
||||
$this->sql = "
|
||||
SELECT
|
||||
PRJ.id,
|
||||
projectnumber,
|
||||
projectname,
|
||||
SUM(invoiced) AS invoiced,
|
||||
SUM(payment) AS payment,
|
||||
revenues,
|
||||
costs,
|
||||
COALESCE(payedcosts, 0) AS payedcosts
|
||||
FROM (
|
||||
SELECT
|
||||
project_id,
|
||||
ROUND(SUM(invoiceamount * (1 + (vatrate / 100))), 0) AS invoiced,
|
||||
payment
|
||||
FROM
|
||||
invoices INV
|
||||
JOIN vats VAT ON VAT.id = INV.vat_id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROUND(COALESCE(SUM(paymentamount), 0), 0) AS payment,
|
||||
invoice_id
|
||||
FROM
|
||||
payments
|
||||
GROUP BY
|
||||
invoice_id) AS Q1 ON INV.id = Q1.invoice_id
|
||||
GROUP BY
|
||||
INV.id) Q2
|
||||
JOIN projects PRJ ON PRJ.id = Q2.project_id
|
||||
JOIN (
|
||||
SELECT
|
||||
ROUND((own_revenue + other_revenue + costs) * (1 + (vatrate / 100)), 0) revenues,
|
||||
ROUND(costs * (1 + (vatrate / 100)), 0) costs,
|
||||
OFF.project_id
|
||||
FROM
|
||||
offers OFF
|
||||
JOIN projects PRJ ON PRJ.id = OFF.project_id
|
||||
JOIN vats VAT ON VAT.id = PRJ.vat_id) Q3 ON Q3.project_id = PRJ.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
SUM(costs) AS payedcosts,
|
||||
project_id
|
||||
FROM
|
||||
projectcosts
|
||||
GROUP BY
|
||||
project_id) Q4 ON Q4.project_id = PRJ.id
|
||||
GROUP BY
|
||||
PRJ.id ";
|
||||
|
||||
$outstandings = $this->get_query_result();
|
||||
|
||||
return $outstandings;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,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 Beleidsonderzoeker **</title>
|
||||
@@ -12,7 +14,8 @@
|
||||
<?php $this->load->view( 'partials/_css' ); ?>
|
||||
|
||||
<?php $this->load->view( 'partials/_fonts' ); ?>
|
||||
<link rel="stylesheet" href="css/menu.css">
|
||||
<link rel="stylesheet" href="css/menu.css">
|
||||
<link rel="stylesheet" href="css/dashboard.css">
|
||||
</head>
|
||||
<body id="dbois-app">
|
||||
<!-- ko stopBinding: true -->
|
||||
|
||||
@@ -1,44 +1,90 @@
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="panel panel-success">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
<div class="db-panel">
|
||||
<div class="db-panel-holder db-panel-success">
|
||||
<div class="db-panel-heading">
|
||||
<h3 class="db-panel-title">
|
||||
Onderhanden werkpositie
|
||||
</h3>
|
||||
</div>
|
||||
<div class="panel-body" data-bind="width:owp">
|
||||
<div class="db-panel-body" data-bind="width:owp">
|
||||
<br>
|
||||
<h4>
|
||||
<span style="width:80%; float:left;">Onderhanden werkpositie huidig jaar:</span>
|
||||
<span><strong data-bind="text:owpThisYear"></strong></span>
|
||||
<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 style="width:80%; float:left;">Onderhanden werkpositie volgend jaar:</span>
|
||||
<span><strong data-bind="text:owpNextYear"></strong></span>
|
||||
<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 style="width:80%; float:left;">Totaal:</span>
|
||||
<span><strong data-bind="text:owpTotal"></strong></span>
|
||||
<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="col-xs-6">
|
||||
<div class="panel panel-warning">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
<div class="db-panel">
|
||||
<div class="db-panel-holder db-panel-warning">
|
||||
<div class="db-panel-heading">
|
||||
<h3 class="db-panel-title">
|
||||
Omzet
|
||||
</h3>
|
||||
</div>
|
||||
<div class="panel-body" data-bind="width:owp">
|
||||
<div class="db-panel-body" data-bind="width:owp">
|
||||
<br>
|
||||
<h4>
|
||||
<span style="width:80%; float:left;">Omzet komende jaar:</span>
|
||||
<span><strong data-bind="text:owpThisYear"></strong></span>
|
||||
<span class="db-panel-label">Omzet komende jaar:</span>
|
||||
<span class="db-panel-data"><strong data-bind="text:revenuesNextyear"></strong></span>
|
||||
</h4>
|
||||
<h4>
|
||||
<span style="width:80%; float:left;">Omzet totaal gerealiseerd lopend jaar:</span>
|
||||
<span><strong data-bind="text:revenuesNextyear"></strong></span>
|
||||
<span class="db-panel-label">Omzet totaal gerealiseerd lopend jaar:</span>
|
||||
<span class="db-panel-data"><strong data-bind="text:owpThisYear"></strong></span>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="db-panel">
|
||||
<div class="db-panel-holder db-panel-info">
|
||||
<div class="db-panel-heading">
|
||||
<h3 class="db-panel-title">
|
||||
Facturatie
|
||||
</h3>
|
||||
</div>
|
||||
<div class="db-panel-body" data-bind="width:owp">
|
||||
<br>
|
||||
<h4>
|
||||
<span class="db-panel-label">Openstaande facturen (incl btw):</span>
|
||||
<span class="db-panel-data"><strong data-bind="text:outstanding"></strong></span>
|
||||
</h4>
|
||||
<h4>
|
||||
<span class="db-panel-label">Nog te factureren (incl btw):</span>
|
||||
<span class="db-panel-data"><strong data-bind="text:toInvoice"></strong></span>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="db-panel">
|
||||
<div class="db-panel-holder db-panel-danger">
|
||||
<div class="db-panel-heading">
|
||||
<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 (excl btw):</span>
|
||||
<span class="db-panel-data"><strong data-bind="text:openCosts"></strong></span>
|
||||
</h4>
|
||||
<h4>
|
||||
<span class="db-panel-label">Saldo inkomsten (excl btw):</span>
|
||||
<span class="db-panel-data"><strong data-bind="text:revenues"></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>
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
<!-- <link rel="stylesheet" href="css/vendor/plugins/animsition/animsition.css">-->
|
||||
<link rel="stylesheet" href="css/vendor/plugins/asscrollable/asScrollable.css?v=? =$this-version ?>">
|
||||
<link rel="stylesheet" href="css/vendor/plugins/switchery/switchery.css?v=? =$this-version ?>">
|
||||
<link rel="stylesheet" href="css/vendor/plugins/intro-js/introjs.css?v=? =$this-version ?>">
|
||||
<link rel="stylesheet" href="css/vendor/plugins/slidepanel/slidePanel.css?v=? =$this-version ?>">
|
||||
<link rel="stylesheet" href="css/vendor/plugins/flag-icon-css/flag-icon.css?v=? =$this-version ?>">
|
||||
<link rel="stylesheet" href="css/login-v3.css?v=? =$this-version ?>">
|
||||
@@ -102,42 +101,16 @@
|
||||
|
||||
|
||||
<!-- Core -->
|
||||
<script src="js/vendor/babel-external-helpers/babel-external-helpers.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/jquery/jquery.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/popper-js/umd/popper.min.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/bootstrap/bootstrap.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/animsition/animsition.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/mousewheel/jquery.mousewheel.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/asscrollbar/jquery-asScrollbar.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/asscrollable/jquery-asScrollable.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/ashoverscroll/jquery-asHoverScroll.js?v=<? $this->version ?>"></script>
|
||||
|
||||
<!-- Plugins -->
|
||||
<script src="js/vendor/switchery/switchery.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/intro-js/intro.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/screenfull/screenfull.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/slidepanel/jquery-slidePanel.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/jquery-placeholder/jquery.placeholder.js?v=<? $this->version ?>"></script>
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="js/vendor/Component.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/Plugin.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/Base.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/Config.js?v=<? $this->version ?>"></script>
|
||||
|
||||
<script src="js/vendor/Section/Menubar.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/Section/GridMenu.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/Section/Sidebar.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/Section/PageAside.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/Plugin/menu.js?v=<? $this->version ?>"></script>
|
||||
|
||||
<!-- Page -->
|
||||
<script src="/js/vendor/Site.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/Plugin/asscrollable.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/Plugin/slidepanel.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/Plugin/switchery.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/Plugin/jquery-placeholder.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/vendor/Plugin/material.js?v=<? $this->version ?>"></script>
|
||||
|
||||
<script src="js/vendor/Knockout.min.js?v=<? $this->version ?>"></script>
|
||||
<script src="js/lib/modules/login/loginModule.js?v=<? $this->version ?>"></script>
|
||||
|
||||
Reference in New Issue
Block a user