hasMany( 'Offer' ); } public function offer() { return $this->hasOne( 'Offer' ); } public function projectemployees() { return $this->hasMany( 'Projectemployee' ); } public function projectcosts() { return $this->hasMany( 'Projectcost' ); } public function invoices() { return $this->hasMany( 'Invoice' ); } public function forecasts() { return $this->hasMany( 'Forecast' ); } public function reservations() { return $this->hasMany( 'Reservation' ); } public function vat() { return $this->belongsTo( 'Vat' ); } public function projectleader() { return $this->belongsTo( 'User', 'projectleader_id' ); } public function customer() { return $this->belongsTo( 'Customer' ); } public static function getAllProjects( $archive, $search, $order, $direction ) { $projects = Project::getBaseProject(); $projects = $projects->selectRaw( 'projects.*' ) ->join( 'customers AS CUS', 'CUS.id', '=', 'projects.customer_id' ) ->join( 'users AS USR', 'USR.id', '=', 'projects.projectleader_id' ) ->where( 'projects.projectnumber', 'LIKE', "%{$search}%" ) ->orderBy( $order, $direction ); if ( $archive == 'F' ) $projects = $projects->where( 'projects.archive', '=', 'F' ); $projects = $projects->get(); return $projects; } public static function getProject( $projectID ) { $project = Project::getBaseProject(); $project = $project->whereArchive( 'F' ) ->whereId( $projectID ) ->first(); return $project; } public static function removeProject( $projectID ) { Offer::whereProjectId( $projectID )->update( ['project_id' => NULL] ); Project::whereId( $projectID )->delete(); } public static function getActiveProjects($archive = 'T') { $projects = Project::selectRaw( "projects.id, YEAR(projects.startdate) AS instroom, YEAR(projects.enddate) AS uitstroom, projectnumber, current_financial_year, projectname, CUS.name, OFF.own_revenue, OFF.other_revenue" ) ->join( 'customers AS CUS', 'CUS.id', '=', 'projects.customer_id' ) ->join( 'offers AS OFF', 'OFF.project_id', '=', 'projects.id' ) ->groupBy( 'projects.id' ) ->groupBy( 'OFF.own_revenue' ) ->groupBy( 'OFF.other_revenue' ); if( $archive == 'F') $projects = $projects->where('projects.archive', '=', 'F'); $projects = $projects->get(); return $projects; } public static function getProjectsForReport( $orderType, $orderDirection, $archive = 'F' ) { $projects = self::getBaseProject(); if ( $archive == 'F' ) $projects = $projects->whereArchive( 'F' ); $projects = $projects->orderBy( $orderType, $orderDirection )->get(); return $projects; } public static function getBaseProject() { $project = Project::with( [ 'projectleader' => function ( $q ) { $q->selectRaw( "id, CONCAT(firstname, ' ', middlename, ' ', lastname) AS fullname" ); }] ) ->with( 'offer' ) ->with( [ 'projectemployees.user' => function ( $q ) { $q->selectRaw( "id, CONCAT(firstname, ' ', middlename, ' ', lastname) AS fullname" ); }] ) ->with( 'vat' ) ->with( ['forecasts'] ) ->with( ['reservations'] ) ->with( 'projectemployees.projecthours' ) ->with( 'projectcosts.external' ) ->with( 'invoices.payments' ) ->with( 'invoices.vat' ) ->with( 'vat' ) ->with( 'customer' ); return $project; } public static function createProject() { $data = ['startdate' => date( 'Y-m-d' )]; $project = Project::create( $data ); return $project->id; } public static function saveProject( $projectID, $project ) { $project = (array) $project; if ( $projectID == 0 ) { $project = Project::create( $project ); $projectID = $project['id'];; } else { Project::whereId( $projectID )->update( $project ); } return $projectID; } }