diff --git a/application/controllers/beheer/UsersController.php b/application/controllers/beheer/UsersController.php index 0528990..420f822 100644 --- a/application/controllers/beheer/UsersController.php +++ b/application/controllers/beheer/UsersController.php @@ -41,6 +41,18 @@ class usersController extends MY_Controller { $this->json( $user ); } + public function getCurrentUser() + { + $this->json( $this->user ); + } + + public function getUserWithprojects() + { + $usersWithProjects = User::getUserWithprojects(); + + $this->json( $usersWithProjects ); + } + public function getUniqueprojectEmployees() { $projectEmployees = User::getUniqueProjectUsers(); diff --git a/application/controllers/projects/EmployeeHoursController.php b/application/controllers/projects/EmployeeHoursController.php index 7a28297..6551da6 100644 --- a/application/controllers/projects/EmployeeHoursController.php +++ b/application/controllers/projects/EmployeeHoursController.php @@ -22,11 +22,15 @@ class EmployeeHoursController extends MY_Controller { $this->load->library( $libraries ); } - public function getEmployeehours( $month, $year ) + public function getEmployeehours( $month, $year, $employeeID ) { - $employeehours = Employeehour::getEmployeehours( $month, $year ); + $sql = EmployeehoursMonthly::fire( $month, $year, $employeeID ); - $this->json( $employeehours ); + $query = $this->db->query( $sql ); + + $result = $query->result(); + + $this->json( $result ); } public function getHourtypes() @@ -42,11 +46,29 @@ class EmployeeHoursController extends MY_Controller { $data = $this->input->post(); $employeehourID = $data['id']; + $hourType = $data['hourType']; + $projectID = $data['project_id']; unset( $data['id'] ); + unset( $data['hourType'] ); + unset( $data['project_id'] ); $data['hourdate'] = date2mysql( $data['hourdate'] ); - $employeehourID = Employeehour::saveEmployeehour( $employeehourID, $data ); + if ( $hourType == 'PROJECTS' ) + { + $projectemployeeID = Projectemployee::select( 'id' ) + ->whereUserId( $data['employee_id'] ) + ->whereprojectId( $projectID ) + ->first(); + $data['projectemployee_id'] = $projectemployeeID; + unset( $data['employee_id'] ); + + $employeehourID = Projecthour::saveProjecthour( $employeehourID, $data ); + } + else + { + $employeehourID = Employeehour::saveEmployeehour( $employeehourID, $data ); + } $this->json( ['employeehourID' => $employeehourID] ); } diff --git a/application/models/eloquent/Employeehour.php b/application/models/eloquent/Employeehour.php index 6ebcc25..b713fb3 100644 --- a/application/models/eloquent/Employeehour.php +++ b/application/models/eloquent/Employeehour.php @@ -23,15 +23,22 @@ class Employeehour extends BaseModel { public static function getEmployeehours( $month, $year ) { - $employeehours = Employeehour::whereRaw( "MONTH(hourdate) ={$month} AND YEAR(hourdate) = {$year}" ) + $employeehours = Employeehour::whereRaw( "MONTH(hourdate) = " . ( $month + 1 ) . " AND YEAR(hourdate) = {$year}" ) ->with( [ 'user' => function ( $q ) { $q->selectRaw( "id, CONCAT(firstname, ' ', middlename, ' ', lastname) AS fullname" ); }] ) - ->with( 'hourtype' ) - ->get(); + ->with( 'hourtype' ); - return $employeehours; + $projecthours = Employeehour::whereRaw("MONTH(hourdate) = " . ( $month + 1 ) . " AND YEAR(hourdate) = {$year}" )->with( [ + 'user' => function ( $q ) { + $q->selectRaw( "id, CONCAT(firstname, ' ', middlename, ' ', lastname) AS fullname" ); + }] ) + ->with( 'hourtype' ); + + $results = $employeehours->union($projecthours)->get(); + + return $results; } public static function saveEmployeehour( $employeehourID, $data ) diff --git a/application/models/eloquent/User.php b/application/models/eloquent/User.php index 9f461eb..166c5a0 100644 --- a/application/models/eloquent/User.php +++ b/application/models/eloquent/User.php @@ -45,6 +45,16 @@ class User extends BaseModel { return $userrole; } + public static function getUserWithprojects() + { + $usersWithProjects = + User::selectRaw( "users.id, CONCAT(users.firstname, ' ', users.middlename, ' ', users.lastname) AS fullname" ) + ->with( 'projectemployees.project' ) + ->get(); + + return $usersWithProjects; + } + public static function checkUsername( $username ) { $username = strtoupper( $username ); diff --git a/application/models/eloquent/queries/EmployeehoursMonthly.php b/application/models/eloquent/queries/EmployeehoursMonthly.php new file mode 100644 index 0000000..69060fe --- /dev/null +++ b/application/models/eloquent/queries/EmployeehoursMonthly.php @@ -0,0 +1,53 @@ +
+
+ +

-
+
+ - - - + - -
medewerker datum soort urenproject uren  
+ + event:{change:$root.changeEmployee}"> + - + + + + + + + uur @@ -74,7 +97,7 @@ data-bind="textInput:hours, visible:inEdit, event:{change:$root.saveEmployeehours,keyup:$root.validateNumber.bind($data, 'hours')}"/> + @@ -83,7 +106,7 @@
+ diff --git a/public/css/main.css b/public/css/main.css index a9f7440..d996169 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -104,6 +104,9 @@ th.focus-green{ border:0; font-weight: bold; } +.red-line{ + border-bottom: 1px solid red !important; +} /*********SWITCH************/ .onoffswitch { diff --git a/public/js/lib/dataservices/employeehoursDataService.js b/public/js/lib/dataservices/employeehoursDataService.js index a859a76..c805bec 100644 --- a/public/js/lib/dataservices/employeehoursDataService.js +++ b/public/js/lib/dataservices/employeehoursDataService.js @@ -7,8 +7,8 @@ dbo.employeehoursDataService = { - getEmployeehours: function ( $month, $year, callback ) { - $.getJSON( 'index.php/projects/employeeHoursController/getEmployeehours/' + $month + '/' + $year ) + getEmployeehours: function ( $month, $year, employeeID, callback ) { + $.getJSON( 'index.php/projects/employeeHoursController/getEmployeehours/' + $month + '/' + $year + '/' + employeeID ) .done( function ( data ) { callback( data ); } ); diff --git a/public/js/lib/dataservices/userDataservice.js b/public/js/lib/dataservices/userDataservice.js index 1a4d65d..2e7ebae 100644 --- a/public/js/lib/dataservices/userDataservice.js +++ b/public/js/lib/dataservices/userDataservice.js @@ -21,11 +21,25 @@ dbo.userDataService = { } ); }, - getUniqueProjectEmployees:function(callback){ - $.post('index.php/beheer/usersController/getUniqueprojectEmployees', 'json') - .done(function(data){ - callback(data); - }); + getCurrentUser: function ( callback ) { + $.getJSON( 'index.php/beheer/usersController/getCurrentUser' ) + .done( function ( data ) { + callback( data ); + } ); + }, + + getUserWithprojects: function ( callback ) { + $.getJSON( 'index.php/beheer/usersController/getUserWithprojects' ) + .done( function ( data ) { + callback( data ); + } ); + }, + + getUniqueProjectEmployees: function ( callback ) { + $.post( 'index.php/beheer/usersController/getUniqueprojectEmployees', 'json' ) + .done( function ( data ) { + callback( data ); + } ); }, checkUsername: function ( username, callback ) { @@ -44,11 +58,11 @@ dbo.userDataService = { } ); }, - archiveUser: function(userID, status, callback){ - $.get('index.php/beheer/usersController/archiveUser/' + userID + '/' + status) - .done(function(){ + archiveUser: function ( userID, status, callback ) { + $.get( 'index.php/beheer/usersController/archiveUser/' + userID + '/' + status ) + .done( function () { callback(); - }); + } ); }, removeUser: function ( userID, callback ) { @@ -57,6 +71,8 @@ dbo.userDataService = { callback( data ); } ); } +} - -} \ No newline at end of file +dbo.userDataService.getCurrentUser(function(data){ + dbo.currentUser = data; +}); \ No newline at end of file diff --git a/public/js/lib/helpers.js b/public/js/lib/helpers.js index aa949d0..34f8d72 100644 --- a/public/js/lib/helpers.js +++ b/public/js/lib/helpers.js @@ -56,7 +56,7 @@ dbo.helpers = { }, findArrayElement: function ( toFind, element, value, array ) { -// console.log( toFind ); +// console.log( toFind ); // het element in de array // console.log( element ); // console.log( value ); // console.log( array ); diff --git a/public/js/lib/modules/projects/employeehoursModule.js b/public/js/lib/modules/projects/employeehoursModule.js index 184a31e..112a935 100644 --- a/public/js/lib/modules/projects/employeehoursModule.js +++ b/public/js/lib/modules/projects/employeehoursModule.js @@ -13,30 +13,34 @@ dbo.employeehoursInit = function () { } else { dbo.employeehoursModel = { - employeehours: ko.observableArray( [] ), - archive : ko.observable( false ), - months : ko.observableArray( [] ), - years : ko.observableArray( [] ), - hourtypes : ko.observableArray( [] ), - employees : ko.observableArray( [] ), - selectedYear : ko.observable(), - selectedMonth: ko.observable(), - busy : false, + employeehours : ko.observableArray( [] ), + archive : ko.observable( false ), + months : ko.observableArray( [] ), + years : ko.observableArray( [] ), + hourtypes : ko.observableArray( [] ), + employees : ko.observableArray( [] ), + selectedYear : ko.observable(), + selectedMonth : ko.observable(), + busy : false, + selectedEmployeeID: ko.observable(), init: function () { var vm = dbo.employeehoursModel; - vm.createMonths(); - vm.createYears(); + vm.months( dbo.monthArray ); + vm.years( dbo.years ); - var d = new Date(); - vm.selectedMonth( d.getMonth() + 1 ); - vm.selectedYear( d.getFullYear() ); + vm.selectedMonth( dbo.currentMonth ); + vm.selectedYear( dbo.currentYear ); dbo.employeehoursDataService.getHourtypes( function ( data ) { vm.hourtypes( data ); - dbo.userDataService.getAllUsers( 'F', function ( data ) { - vm.employees( data ); + dbo.userDataService.getUserWithprojects( function ( data ) { + vm.employees.removeAll(); + _.each( data, function ( p ) { + vm.employees.push( new vm.Employee( p ) ); + } ); + vm.selectedEmployeeID( dbo.currentUser.id ) vm.refreshEmployeehours(); } ); @@ -46,12 +50,22 @@ dbo.employeehoursInit = function () { newEmployeehour: function () { var vm = dbo.employeehoursModel; + var employeeHour = vm.employeehours()[vm.employeehours().length - 1]; + + var employeeID = null; + if ( !vm.selectedEmployeeID ) { + employeeID = employeeHour ? employeeHour.employee_id() : null; + } else { + employeeID = vm.selectedEmployeeID(); + } + var employeehour = { id : 0, - employee_id: null, - hourdate : null, - hourtype_id: null, - hours : 0, + employee_id: employeeID, + hourdate : employeeHour ? employeeHour.hourdate() : null, + hourtype_id: employeeHour ? employeeHour.hourtype_id() : 9, + project_id : employeeHour ? employeeHour.projectID() : null, + hours : employeeHour ? employeeHour.hours() : 0, inEdit : true }; @@ -66,19 +80,22 @@ dbo.employeehoursInit = function () { vm.refreshHours(); }, - saveEmployeehours: function () { - var self = this; + saveEmployeehours: function ( self = false ) { + if ( !self ) self = this; if ( !self.employee_id() ) return; if ( !self.hourtype_id() ) return; if ( !self.hourdate() ) return; + if ( self.hourType() == 'PROJECTS' && !self.projectID() ) return; var submitDATA = { id : self.id, employee_id: self.employee_id(), hourdate : self.hourdate(), hourtype_id: self.hourtype_id(), - hours : self.hours() + hours : self.hours(), + hourType : self.hourType(), + project_id : self.projectID() }; dbo.employeehoursDataService.saveEmployeehour( submitDATA, function ( data ) { @@ -90,6 +107,15 @@ dbo.employeehoursInit = function () { this.inEdit( !this.inEdit() ); }, + changeEmployee: function () { + var vm = dbo.employeehoursModel; + this.projects( vm.setEmployeeProjects( this ) ); + + this.projectID( null ); + + vm.saveEmployeehours( this ); + }, + removeEmployeehour: function () { var vm = dbo.employeehoursModel; var self = this; @@ -118,58 +144,73 @@ dbo.employeehoursInit = function () { } ); }, - createMonths: function () { - var vm = dbo.employeehoursModel; - - var months = [ - {id: 1, monthName: 'januari'}, - {id: 2, monthName: 'februari'}, - {id: 3, monthName: 'maart'}, - {id: 4, monthName: 'april'}, - {id: 5, monthName: 'mei'}, - {id: 6, monthName: 'juni'}, - {id: 7, monthName: 'juli'}, - {id: 8, monthName: 'augustus'}, - {id: 9, monthName: 'september'}, - {id: 10, monthName: 'oktober'}, - {id: 11, monthName: 'november'}, - {id: 12, monthName: 'december'}, - ] - - vm.months( months ); - }, - - createYears: function () { - var vm = dbo.employeehoursModel; - var years = [{id: 2015}, {id: 2016}, {id: 2017}, {id: 2018}]; - - vm.years( years ); - }, - refreshEmployeehours: function () { var vm = dbo.employeehoursModel; + var employeeID = vm.selectedEmployeeID() || 0; + vm.employeehours.removeAll(); - dbo.employeehoursDataService.getEmployeehours( vm.selectedMonth(), vm.selectedYear(), function ( data ) { - $.each( data, function ( i, p ) { - vm.employeehours.push( new vm.Employeehour( p ) ); + dbo.employeehoursDataService.getEmployeehours( + vm.selectedMonth(), vm.selectedYear(), employeeID, function ( data ) { + $.each( data, function ( i, p ) { + vm.employeehours.push( new vm.Employeehour( p ) ); + } ); } ); - } ); }, validateNumber: function ( field ) { this[field]( dbo.helpers.validateNumber( this[field](), true ) ); }, + Employee: function ( data ) { + var vm = dbo.employeehoursModel; + var self = this; + + self.id = data.id; + self.fullname = data.fullname; + + self.projecten = ko.observableArray( [] ); + _.each( data.projectemployees, function ( p ) { + self.projecten.push( new vm.Project( p ) ); + } ); + }, + + Project: function ( data ) { + this.projectEmployeeID = data.id; + this.projectID = data.project.id; + this.project = data.project.projectnumber + ' - ' + data.project.projectname; + }, + Employeehour: function ( data ) { var vm = dbo.employeehoursModel; + var self = this; - this.id = data.id; - this.employee_id = ko.observable( data.employee_id ); - this.hourtype_id = ko.observable( data.hourtype_id ); - this.hourdate = ko.observable( data.hourdate ); - this.hours = ko.observable( data.hours ); - this.inEdit = ko.observable( data.inEdit || false ); + self.id = data.id; + self.employee_id = ko.observable( data.employee_id ); + self.hourtype_id = ko.observable( data.hourtype_id ); + self.hourdate = ko.observable( data.hourdate ); + self.hours = ko.observable( data.hours ); + self.inEdit = ko.observable( data.inEdit || false ); + self.projectID = ko.observable( data.project_id ); + self.hourType = ko.pureComputed( function () { + return dbo.helpers.findArrayElement( 'id', 'key', this.hourtype_id(), vm.hourtypes() ); + }, this ); + + vm.setEmployeeProjects( self ); + }, + + setEmployeeProjects: function ( self ) { + var vm = dbo.employeehoursModel; + + var employeeProjects = + dbo.helpers.findArrayElement( 'id', 'projecten', self.employee_id(), vm.employees() )(); + self.projects = ko.observableArray( [] ); + _.each( employeeProjects, function ( p ) { + self.projects.push( { + projectID : p.projectID, + projectname: p.project + } ); + } ); } };