2014-06-18 21:36:00 +02:00
< ? php
/* Copyright ( C ) 2012 - 2014 Charles - François BENKE < charles . fr @ benke . fr >
2014-12-23 16:37:53 +01:00
* Copyright ( C ) 2014 Marcos García < marcosgdf @ gmail . com >
2015-01-25 01:20:58 +01:00
* Copyright ( C ) 2015 Frederic France < frederic . france @ free . fr >
2016-10-04 16:51:44 +02:00
* Copyright ( C ) 2016 Juan José Menent < jmenent @ 2 byte . es >
2020-02-04 09:17:02 +01:00
* Copyright ( C ) 2020 Pierre Ardoin < mapiolca @ me . com >
2015-01-25 01:20:58 +01:00
*
2014-06-18 21:36:00 +02:00
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2014-06-18 21:36:00 +02:00
*/
/**
2019-12-12 08:17:14 +01:00
* \file htdocs / core / boxes / box_project . php
2015-01-06 17:54:36 +01:00
* \ingroup projet
* \brief Module to show Projet activity of the current Year
2014-06-18 21:36:00 +02:00
*/
2018-07-26 11:57:25 +02:00
include_once DOL_DOCUMENT_ROOT . " /core/boxes/modules_boxes.php " ;
2014-06-18 21:36:00 +02:00
2014-06-20 23:19:57 +02:00
/**
* Class to manage the box to show last projet
*/
2014-06-20 23:56:03 +02:00
class box_project extends ModeleBoxes
2014-06-20 23:19:57 +02:00
{
2020-10-31 14:32:18 +01:00
public $boxcode = " project " ;
public $boximg = " object_projectpub " ;
public $boxlabel ;
//var $depends = array("projet");
/**
* @ var DoliDB Database handler .
*/
public $db ;
public $param ;
public $info_box_head = array ();
public $info_box_contents = array ();
/**
* Constructor
*
* @ param DoliDB $db Database handler
* @ param string $param More parameters
*/
public function __construct ( $db , $param = '' )
{
global $user , $langs ;
// Load translation files required by the page
$langs -> loadLangs ( array ( 'boxes' , 'projects' ));
$this -> db = $db ;
$this -> boxlabel = " OpenedProjects " ;
$this -> hidden = ! ( $user -> rights -> projet -> lire );
}
/**
* Load data for box to show them later
*
* @ param int $max Maximum number of records to load
* @ return void
*/
public function loadBox ( $max = 5 )
{
global $conf , $user , $langs ;
$this -> max = $max ;
$totalMnt = 0 ;
$totalnb = 0 ;
$totalnbTask = 0 ;
$textHead = $langs -> trans ( " OpenedProjects " );
$this -> info_box_head = array ( 'text' => $textHead , 'limit' => dol_strlen ( $textHead ));
// list the summary of the orders
if ( $user -> rights -> projet -> lire ) {
include_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php' ;
$projectstatic = new Project ( $this -> db );
$socid = 0 ;
//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement.
// Get list of project id allowed to user (in a string list separated by coma)
$projectsListId = '' ;
2021-02-23 22:03:23 +01:00
if ( ! $user -> rights -> projet -> all -> lire ) {
$projectsListId = $projectstatic -> getProjectsAuthorizedForUser ( $user , 0 , 1 , $socid );
}
2020-10-31 14:32:18 +01:00
$sql = " SELECT p.rowid, p.ref, p.title, p.fk_statut as status, p.public " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " projet as p " ;
$sql .= " WHERE p.entity IN ( " . getEntity ( 'project' ) . " ) " ; // Only current entity or severals if permission ok
2020-04-10 10:59:32 +02:00
$sql .= " AND p.fk_statut = 1 " ; // Only open projects
2021-02-23 22:03:23 +01:00
if ( ! $user -> rights -> projet -> all -> lire ) {
2021-03-22 11:30:18 +01:00
$sql .= " AND p.rowid IN ( " . $this -> db -> sanitize ( $projectsListId ) . " ) " ; // public and assigned to, or restricted to company for external users
2021-02-23 22:03:23 +01:00
}
2020-10-31 14:32:18 +01:00
$sql .= " ORDER BY p.datec DESC " ;
//$sql.= $this->db->plimit($max, 0);
$result = $this -> db -> query ( $sql );
if ( $result ) {
$num = $this -> db -> num_rows ( $result );
$i = 0 ;
while ( $i < min ( $num , $max )) {
$objp = $this -> db -> fetch_object ( $result );
$projectstatic -> id = $objp -> rowid ;
$projectstatic -> ref = $objp -> ref ;
$projectstatic -> title = $objp -> title ;
$projectstatic -> public = $objp -> public ;
$projectstatic -> statut = $objp -> status ;
$this -> info_box_contents [ $i ][] = array (
'td' => 'class="nowraponall"' ,
'text' => $projectstatic -> getNomUrl ( 1 ),
'asis' => 1
);
$this -> info_box_contents [ $i ][] = array (
'td' => 'class="tdoverflowmax150 maxwidth200onsmartphone"' ,
'text' => $objp -> title ,
);
$sql = " SELECT count(*) as nb, sum(progress) as totprogress " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " projet as p LEFT JOIN " . MAIN_DB_PREFIX . " projet_task as pt on pt.fk_projet = p.rowid " ;
$sql .= " WHERE p.entity IN ( " . getEntity ( 'project' ) . ')' ;
$sql .= " AND p.rowid = " . $objp -> rowid ;
$resultTask = $this -> db -> query ( $sql );
if ( $resultTask ) {
$objTask = $this -> db -> fetch_object ( $resultTask );
$this -> info_box_contents [ $i ][] = array (
'td' => 'class="right"' ,
'text' => $objTask -> nb . " " . $langs -> trans ( " Tasks " ),
);
2021-02-23 22:03:23 +01:00
if ( $objTask -> nb > 0 ) {
2020-10-31 14:32:18 +01:00
$this -> info_box_contents [ $i ][] = array (
'td' => 'class="right"' ,
'text' => round ( $objTask -> totprogress / $objTask -> nb , 0 ) . " % " ,
);
2021-02-23 22:03:23 +01:00
} else {
$this -> info_box_contents [ $i ][] = array ( 'td' => 'class="right"' , 'text' => " N/A " );
}
2020-10-31 14:32:18 +01:00
$totalnbTask += $objTask -> nb ;
} else {
$this -> info_box_contents [ $i ][] = array ( 'td' => 'class="right"' , 'text' => round ( 0 ));
$this -> info_box_contents [ $i ][] = array ( 'td' => 'class="right"' , 'text' => " N/A " );
}
$this -> info_box_contents [ $i ][] = array ( 'td' => 'class="right"' , 'text' => $projectstatic -> getLibStatut ( 3 ));
$i ++ ;
}
2021-02-23 22:03:23 +01:00
if ( $max < $num ) {
2020-10-31 14:32:18 +01:00
$this -> info_box_contents [ $i ][] = array ( 'td' => 'colspan="5"' , 'text' => '...' );
$i ++ ;
}
}
}
// Add the sum à the bottom of the boxes
$this -> info_box_contents [ $i ][] = array (
'td' => 'class="liste_total"' ,
'text' => $langs -> trans ( " Total " ) . " " . $textHead ,
'text' => " " ,
);
$this -> info_box_contents [ $i ][] = array (
'td' => 'class="right liste_total" ' ,
'text' => round ( $num , 0 ) . " " . $langs -> trans ( " Projects " ),
);
$this -> info_box_contents [ $i ][] = array (
'td' => 'class="right liste_total" ' ,
'text' => (( $max < $num ) ? '' : ( round ( $totalnbTask , 0 ) . " " . $langs -> trans ( " Tasks " ))),
);
$this -> info_box_contents [ $i ][] = array (
'td' => 'class="liste_total"' ,
'text' => " " ,
);
$this -> info_box_contents [ $i ][] = array (
'td' => 'class="liste_total"' ,
'text' => " " ,
);
}
/**
* Method to show box
*
* @ param array $head Array with properties of box title
* @ param array $contents Array with properties of box lines
* @ param int $nooutput No print , only return string
* @ return string
*/
public function showBox ( $head = null , $contents = null , $nooutput = 0 )
{
return parent :: showBox ( $this -> info_box_head , $this -> info_box_contents , $nooutput );
}
2014-06-18 21:36:00 +02:00
}