271 lines
7.7 KiB
JavaScript
271 lines
7.7 KiB
JavaScript
/**
|
|
* Created by Pensare Software.
|
|
* User: Theo Weijmer
|
|
* Date: 05/01/2018
|
|
* Time: 15:54
|
|
*/
|
|
|
|
|
|
dbo.employeehoursInit = function () {
|
|
|
|
var timeout;
|
|
|
|
if ( dbo.employeehoursModel !== undefined ) {
|
|
dbo.employeehoursModel.init();
|
|
} 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,
|
|
selectedEmployeeID : ko.observable(),
|
|
offersWithoutProject: ko.observableArray( [] ),
|
|
projects : ko.observableArray( [] ),
|
|
|
|
init: function () {
|
|
var vm = dbo.employeehoursModel;
|
|
|
|
vm.busy = true;
|
|
|
|
vm.months( dbo.monthArray );
|
|
vm.years( dbo.years );
|
|
|
|
vm.selectedMonth( dbo.currentMonth );
|
|
vm.selectedYear( dbo.currentYear );
|
|
|
|
vm.selectedEmployeeID( dbo.currentUser.id );
|
|
|
|
dbo.userDataService.getAllUsers( 'F', function ( data ) {
|
|
vm.employees( data );
|
|
|
|
dbo.employeehoursDataService.getHourtypes( function ( data ) {
|
|
vm.hourtypes( data );
|
|
dbo.offerDataService.getOffersWithoutProject( function ( data ) {
|
|
vm.offersWithoutProject( data );
|
|
vm.busy = false;
|
|
vm.refreshEmployeehours();
|
|
} );
|
|
} );
|
|
} );
|
|
},
|
|
|
|
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: employeeID,
|
|
hourdate : employeeHour ? employeeHour.hourdate() : null,
|
|
hourtype_id: employeeHour ? employeeHour.hourtype_id() : 9,
|
|
project_id : employeeHour ? employeeHour.projectID() : null,
|
|
hours : 0,
|
|
inEdit : true,
|
|
dirty : true,
|
|
archive : 'F'
|
|
};
|
|
|
|
vm.employeehours.push( new vm.Employeehour( employeehour ) );
|
|
},
|
|
|
|
toggleArchive: function () {
|
|
var vm = dbo.employeehoursModel;
|
|
|
|
vm.archive( !vm.archive() );
|
|
|
|
vm.refreshHours();
|
|
},
|
|
|
|
saveDelayedEmployeehours: function () {
|
|
var vm = dbo.employeehoursModel;
|
|
var self = this;
|
|
self.dirty( true );
|
|
if ( timeout ) {
|
|
clearTimeout( timeout );
|
|
timeout = null;
|
|
}
|
|
timeout = setTimeout( function () {
|
|
vm.saveEmployeehours( self );
|
|
}, 300 );
|
|
},
|
|
|
|
saveEmployeehours: function ( self = false ) {
|
|
console.log( 'inside' );
|
|
self.dirty( true );
|
|
if ( !self ) self = this;
|
|
|
|
if ( !self.employee_id() ) return;
|
|
if ( !self.hourtype_id() ) return;
|
|
if ( !self.hourdate() ) return;
|
|
if ( self.hours() <= 0 ) return;
|
|
if ( self.hourType() == 'PROJECTS' && !self.projectID() ) return;
|
|
if ( self.hourType() == 'OFFERS' && !self.projectID() ) return;
|
|
|
|
var submitDATA = {
|
|
id : self.id(),
|
|
employee_id: self.employee_id(),
|
|
hourdate : self.hourdate(),
|
|
hourtype_id: self.hourtype_id(),
|
|
hours : self.hours(),
|
|
hourType : self.hourType(),
|
|
project_id : self.projectID()
|
|
};
|
|
|
|
dbo.employeehoursDataService.saveEmployeehour( submitDATA, function ( data ) {
|
|
self.id( data.employeehourID );
|
|
self.dirty( false );
|
|
} );
|
|
},
|
|
|
|
editEmployeehour: function () {
|
|
dbo.employeehoursModel.saveEmployeehours( this );
|
|
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;
|
|
|
|
tellMe( {
|
|
title : 'verwijderen uren',
|
|
message : 'weet u zeker dat u deze uren wilt verwijderen, dit kan niet ongedaan worden gemaakt',
|
|
notify : true,
|
|
noText : 'nee verwijder de uren niet',
|
|
yesText : 'ja verwijder de uren',
|
|
modalClass: 'modal-warning'
|
|
}, function ( response ) {
|
|
if ( response ) {
|
|
dbo.employeehoursDataService.removeEmployeehour( self.id(), self.hourType(), function ( data ) {
|
|
if ( data.result ) {
|
|
vm.refreshEmployeehours();
|
|
} else {
|
|
tellMe( {
|
|
title : 'fout bij verwijderen uren',
|
|
message : 'de uren konden niet worden verwijderd',
|
|
modalClass: 'modal-danger'
|
|
} );
|
|
}
|
|
} );
|
|
}
|
|
} );
|
|
},
|
|
|
|
refreshEmployeehours: function () {
|
|
var vm = dbo.employeehoursModel;
|
|
|
|
if ( vm.busy == true ) return;
|
|
|
|
var employeeID = vm.selectedEmployeeID() || 0;
|
|
|
|
vm.employeehours.removeAll();
|
|
|
|
setTimeout(function(){
|
|
dbo.employeehoursDataService.getEmployeehours(
|
|
vm.selectedMonth(), vm.selectedYear(), employeeID, function ( data ) {
|
|
$.each( data, function ( i, p ) {
|
|
vm.employeehours.push( new vm.Employeehour( p ) );
|
|
} );
|
|
} );
|
|
}, 1000);
|
|
},
|
|
|
|
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 ) {
|
|
if ( p.project )
|
|
self.projecten.push( new vm.Project( p ) );
|
|
} );
|
|
// _.each( vm.offersWithoutProject(), function ( p ) {
|
|
// self.projecten.push( new vm.Offer( p, self.id ) );
|
|
// } );
|
|
},
|
|
|
|
Project: function ( data ) {
|
|
this.projectEmployeeID = data.id;
|
|
this.type = 'PROJECT';
|
|
this.projectID = data.project.id;
|
|
this.project = data.project.projectnumber + ' - ' + data.project.projectname;
|
|
this.projectname = data.project.projectnumber + ' - ' + data.project.projectname;
|
|
},
|
|
|
|
Offer: function ( data, employeeID ) {
|
|
this.projectemployeeID = employeeID;
|
|
this.type = 'OFFER';
|
|
this.projectID = data.id;
|
|
this.project = data.offernumber + ' - ' + data.offername;
|
|
},
|
|
|
|
Employeehour: function ( data ) {
|
|
var vm = dbo.employeehoursModel;
|
|
var self = this;
|
|
|
|
self.id = ko.observable( 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.type = ko.observable( data.type );
|
|
self.archive = ko.observable( data.archive );
|
|
self.dirty = ko.observable( data.dirty || false );
|
|
self.projectname = ko.observable( data.projectname );
|
|
self.hourType = ko.pureComputed( function () {
|
|
return dbo.helpers.findArrayElement( 'id', 'key', this.hourtype_id(), vm.hourtypes() );
|
|
}, this );
|
|
self.canFillInHours = ko.pureComputed( function () {
|
|
if ( self.hourType() == 'PROJECTS' || self.hourType() == 'OFFERS' ) {
|
|
if ( !self.projectID() ) {
|
|
self.hours( 0 );
|
|
}
|
|
}
|
|
return true;
|
|
} );
|
|
}
|
|
};
|
|
|
|
dbo.employeehoursModel.init();
|
|
|
|
ko.applyBindings( dbo.employeehoursModel, document.getElementById( 'EMPLOYEEHOURS' ) );
|
|
|
|
dbo.employeehoursModel.selectedEmployeeID.subscribe( function () {
|
|
dbo.userDataService.getUserActiveProjects( dbo.employeehoursModel.selectedEmployeeID(), function ( data ) {
|
|
dbo.employeehoursModel.projects( data );
|
|
} );
|
|
} );
|
|
}
|
|
}
|