/** * Created by Pensare Software. * User: Theo Weijmer * Date: 05/01/2018 * Time: 15:54 */ dbo.employeehoursInit = function () { 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( [] ), 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 ); dbo.employeehoursDataService.getHourtypes( function ( data ) { vm.hourtypes( data ); dbo.offerDataService.getOffersWithoutProject( function ( data ) { vm.offersWithoutProject( data ); console.log( data ); console.log( vm.offersWithoutProject() ); 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.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 : employeeHour ? employeeHour.hours() : 0, inEdit : true }; vm.employeehours.push( new vm.Employeehour( employeehour ) ); }, toggleArchive: function () { var vm = dbo.employeeemployeehoursModel; vm.archive( !vm.archive() ); vm.refreshHours(); }, 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; 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 ); } ); }, 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(), 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(); 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 ) ); } ); _.each( vm.offersWithoutProject(), function ( p ) { console.log( 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; }, 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.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 } ); } ); } }; dbo.employeehoursModel.init(); ko.applyBindings( dbo.employeehoursModel, document.getElementById( 'EMPLOYEEHOURS' ) ); } }