From 708a22f7343b6aa18f7ca4e76ae8b7395ac1d41c Mon Sep 17 00:00:00 2001 From: Theo Weijmer Date: Mon, 30 Jul 2018 10:45:53 +0200 Subject: [PATCH] Offrte gours --- .../projects/EmployeeHoursController.php | 1 + .../controllers/projects/OffersController.php | 7 +++ .../projects/ProjectsController.php | 24 ++++++-- application/models/eloquent/Offer.php | 10 ++++ .../models/eloquent/Projectemployee.php | 19 +++++++ .../views/pages/employeehours_view.php | 24 ++++++-- .../js/lib/dataservices/offerDataservice.js | 7 +++ .../modules/projects/employeehoursModule.js | 57 ++++++++++++------- 8 files changed, 119 insertions(+), 30 deletions(-) diff --git a/application/controllers/projects/EmployeeHoursController.php b/application/controllers/projects/EmployeeHoursController.php index 52df6d8..769377a 100644 --- a/application/controllers/projects/EmployeeHoursController.php +++ b/application/controllers/projects/EmployeeHoursController.php @@ -51,6 +51,7 @@ class EmployeeHoursController extends MY_Controller { unset( $data['id'] ); unset( $data['hourType'] ); unset( $data['project_id'] ); + if( $hourType == 'OFFERS' ) $data['offer_id'] = $projectID; $data['hourdate'] = date2mysql( $data['hourdate'] ); diff --git a/application/controllers/projects/OffersController.php b/application/controllers/projects/OffersController.php index 5c764e5..928aab6 100644 --- a/application/controllers/projects/OffersController.php +++ b/application/controllers/projects/OffersController.php @@ -34,6 +34,13 @@ class OffersController extends MY_Controller { $this->json( $offers ); } + public function getOffersWithoutProject() + { + $offersWithoutProject = Offer::getOffersWithoutProject(); + + $this->json( $offersWithoutProject); + } + public function saveOffer() { $offerValidation = new OfferValidation(); diff --git a/application/controllers/projects/ProjectsController.php b/application/controllers/projects/ProjectsController.php index 48ef453..c7748f5 100644 --- a/application/controllers/projects/ProjectsController.php +++ b/application/controllers/projects/ProjectsController.php @@ -79,11 +79,25 @@ class ProjectsController extends MY_Controller { Offer::whereId( $offerID )->update( ['project_id' => $project->id] ); - Projectemployee::create( [ - 'project_id' => $project->id, - 'user_id' => $offer->offerleader_id, - 'tarif' => User::find( $offer->offerleader_id )->hourlyrate - ] ); + Projectemployee::firstOrCreateProjectemployee( $offer->offerleader_id, $project->id ); + + $offerteHours = Employeehour::whereOfferId( $offerID )->get(); + foreach ( $offerteHours as $offerteHour ) + { + $projectemployee = + Projectemployee::firstOrCreateProjectemployee( $offerteHour->employee_id, $project->id ); + + $data = [ + 'projectemployee_id' => $projectemployee->id, + 'hourtype_id' => 10, + 'hourdate' => $offerteHour->hourdate, + 'hours' => $offerteHour->hours + ]; + + Projecthour::create( $data ); + + Employeehour::whereId( $offerteHour->id )->delete(); + } $this->json( ['success' => TRUE, 'projectnumber' => $projectnumber] ); } diff --git a/application/models/eloquent/Offer.php b/application/models/eloquent/Offer.php index 78a1928..5e77a87 100644 --- a/application/models/eloquent/Offer.php +++ b/application/models/eloquent/Offer.php @@ -41,6 +41,16 @@ class Offer extends BaseModel { return $offers; } + public static function getOffersWithoutProject( ) + { + $offersWithoutProject = Offer::orderBy('startdate') + ->whereNull('rejectdate') + ->whereNull('project_id') + ->get(); + + return $offersWithoutProject; + } + public static function saveOffer( $offerID, $offer ) { $offer = (array) $offer; diff --git a/application/models/eloquent/Projectemployee.php b/application/models/eloquent/Projectemployee.php index 4dd56fc..d2d1579 100644 --- a/application/models/eloquent/Projectemployee.php +++ b/application/models/eloquent/Projectemployee.php @@ -59,6 +59,25 @@ class Projectemployee extends BaseModel { return $details; } + public static function firstOrCreateProjectemployee( $userID, $projectID ) + { + $projectemployee = self::whereUserId($userID)->whereProjectId($projectID); + + if( $projectemployee->count() > 0 ) return $projectemployee->first(); + + $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( [ diff --git a/application/views/pages/employeehours_view.php b/application/views/pages/employeehours_view.php index 1c4b835..1f7b5f3 100644 --- a/application/views/pages/employeehours_view.php +++ b/application/views/pages/employeehours_view.php @@ -76,12 +76,24 @@ visible: ! inEdit()"> + optionsText:'projectname', + optionsValue:'projectID', + value:projectID, + optionsCaption:'selecteer...', + visible:inEdit(), + event:{change:$root.saveEmployeehours}"> + + + + diff --git a/public/js/lib/dataservices/offerDataservice.js b/public/js/lib/dataservices/offerDataservice.js index 0c50415..0005981 100644 --- a/public/js/lib/dataservices/offerDataservice.js +++ b/public/js/lib/dataservices/offerDataservice.js @@ -14,6 +14,13 @@ dbo.offerDataService = { } ); }, + getOffersWithoutProject: function ( callback ) { + $.getJSON( 'index.php/projects/offersController/getOffersWithoutProject' ) + .done( function ( data ) { + callback(data); + } ); + }, + getOffer: function ( userID, callback ) { $.getJSON( 'index.php/projects/offersController/getOffer/' + userID ) .done( function ( data ) { diff --git a/public/js/lib/modules/projects/employeehoursModule.js b/public/js/lib/modules/projects/employeehoursModule.js index 0228524..351df42 100644 --- a/public/js/lib/modules/projects/employeehoursModule.js +++ b/public/js/lib/modules/projects/employeehoursModule.js @@ -9,20 +9,21 @@ dbo.employeehoursInit = function () { if ( dbo.employeehoursModel !== undefined ) { - dbo.employeehoursModel.refreshHours(); + 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(), + 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; @@ -37,15 +38,20 @@ dbo.employeehoursInit = function () { dbo.employeehoursDataService.getHourtypes( function ( data ) { vm.hourtypes( 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 ) + 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(); + vm.busy = false; + vm.refreshEmployeehours(); + } ); } ); } ); }, @@ -90,6 +96,7 @@ dbo.employeehoursInit = function () { 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(), @@ -179,14 +186,26 @@ dbo.employeehoursInit = function () { _.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;