PRJ001.php 7.8 KB
<?php 
//*****************************************************************************
//* 
//* プログラム名:プロジェクト管理
//* プログラムID:PRJ001.php
//* 機能        :一覧画面
//* 作成者      :
//* 
//*****************************************************************************

header( "Content-type: text/html; charset=EUC-JP");
include("inc/session_start.inc");
include("inc/SessionChk.inc");

include('./include/smarty.conf');

$strDBinc="include/dbcon.inc";
include($strDBinc);

//表示カテゴリ
if($ctg == "A" || (int) $ctg == 0){
	$strCTGSQL = "left join prj_ctg_tbl on prj_ctg_tbl.prj_seq = prj_tbl.seq ";
	$strCTGSQL .= "left join mst_prj_category on mst_prj_category.ctg_seq = prj_ctg_tbl.ctg_seq ";
}else{
	$strCTGSQL = "join prj_ctg_tbl on prj_ctg_tbl.prj_seq = prj_tbl.seq and prj_ctg_tbl.ctg_seq = ".$ctg." ";
	$strCTGSQL .= "join mst_prj_category on mst_prj_category.ctg_seq = prj_ctg_tbl.ctg_seq ";
}

//表示モード
if($dmode == 1){
	$strSQL = "select seq, prj_name, sekinin_list, kansa_list, sanka_list, prj_naiyo, prj_etc, start_date, end_date, mst_prj_category.ctg_seq, mst_prj_category.ctg_name from prj_tbl ";
	$strSQL .= $strCTGSQL;
	$strSQL .= "where (sekinin_list like '%/".$PHP_SYAIN_CD."/%' or kansa_list like '%/".$PHP_SYAIN_CD."/%' or sanka_list like '%/".$PHP_SYAIN_CD."/%') and end_flg = 1 order by seq desc";
}else if($dmode == 0){
//	$strSQL = "select seq, prj_name, sekinin_list, kansa_list, sanka_list, prj_naiyo, prj_etc, start_date, end_date from prj_tbl ";
//	$strSQL .= "where (sekinin_list like '%/".$PHP_SYAIN_CD."/%' or kansa_list like '%/".$PHP_SYAIN_CD."/%' or sanka_list like '%/".$PHP_SYAIN_CD."/%') and end_flg = 0 order by seq desc";
	$strSQL = "select seq, prj_name, sekinin_list, kansa_list, sanka_list, prj_naiyo, prj_etc, start_date, end_date, mst_prj_category.ctg_seq, mst_prj_category.ctg_name from prj_tbl ";
	$strSQL .= $strCTGSQL;
	$strSQL .= "where (sekinin_list like '%/".$PHP_SYAIN_CD."/%' or kansa_list like '%/".$PHP_SYAIN_CD."/%' or sanka_list like '%/".$PHP_SYAIN_CD."/%') and end_flg = 0 order by seq desc";
}else if($dmode == 2){
	$strSQL = "select seq, prj_name, sekinin_list, kansa_list, sanka_list, prj_naiyo, prj_etc, start_date, end_date, mst_prj_category.ctg_seq, mst_prj_category.ctg_name from prj_tbl ";
	$strSQL .= $strCTGSQL;
	$strSQL .= "where end_flg = 0 order by seq desc";
}else if($dmode == 3){
	$strSQL = "select seq, prj_name, sekinin_list, kansa_list, sanka_list, prj_naiyo, prj_etc, start_date, end_date, mst_prj_category.ctg_seq, mst_prj_category.ctg_name from prj_tbl ";
	$strSQL .= $strCTGSQL;
	$strSQL .= "where end_flg = 1 order by seq desc";
}


//$o_smarty->assign('debug',$strSQL);

//プロジェクト情報
	$objRec = pg_exec($strSQL);
	if($objRec == false){
		echo("SQL実行に失敗しました(SELECT)");
		exit;
	}

	if(pg_numrows($objRec) > 0){
		for($i=0;$i<pg_numrows($objRec);$i++){
			$objftc = pg_fetch_object($objRec, $i);
			//プロジェクト名
			$strPrjName[$i] = $objftc->prj_name;
			//カテゴリ名
			if ($objftc->ctg_name == null){
				$strCTGName[$i] = "カテゴリなし";
			}else{
				$strCTGName[$i] = $objftc->ctg_name;
			}
			//責任者
			syainName_get(trim($objftc->sekinin_list),$strSekinin[$i]);
			//プロジェクトSEQ
			$strPrjSeq[$i] = $objftc->seq;
			//監査新着表示
			if(strpos($objftc->kansa_list, "/".$PHP_SYAIN_CD."/") !== false){
				$strSQLK = "select comment from prj_comm_tbl where seq = ".$objftc->seq." and comm_flg = 3 and syain_cd = '".$PHP_SYAIN_CD."'";
				$objRecK = pg_exec($strSQLK);
				if($objRecK == false){
					echo("SQL実行に失敗しました(SELECT)");
					exit;
				}
				if(pg_numrows($objRecK) > 0){
					$objftcK = pg_fetch_object($objRecK, 0);
					$kansaNew[$i] = (int) $objftcK->comment;
				}else{
					$kansaNew[$i] = 0;
				}
			}else{
				$kansaNew[$i] = 1;
			}
//期間は要修正かも			
			//期間取得
			$strSQL2 = "select min(start_date) as minDate, max(end_date) as maxDate from prj_task_tbl where seq = ".$objftc->seq." and start_date <> ''";
			$objRec2 = pg_exec($strSQL2);
			if($objRec2 == false){
				echo("SQL実行に失敗しました(SELECT)");
				exit;
			}
			$strStart[$i] = pg_result($objRec2,0,"minDate");
			$strStart[$i] = substr($strStart[$i],0,4)."/".substr($strStart[$i],4,2)."/".substr($strStart[$i],6,2);
			$strEnd[$i] = pg_result($objRec2,0,"maxDate");
			$strEnd[$i] = substr($strEnd[$i],0,4)."/".substr($strEnd[$i],4,2)."/".substr($strEnd[$i],6,2);
			if(trim($strStart[$i]) == "//"){
				$strStart[$i] = "未設定";
			}
			if(trim($strEnd[$i]) == "//"){
				$strEnd[$i] = "未設定";
			}

			//率
			$strSQL2 = "select seq, task_seq, task_sub_seq, task_name, task_naiyo, start_date, end_date, unit_seq, progress_max, progress, tanto_list, koshin_date from prj_task_tbl ";
			$strSQL2 .= "where seq = ".$objftc->seq." and task_sub_seq = 0";
			$objRec2 = pg_exec($strSQL2);
			if($objRec2 == false){
				echo("SQL実行に失敗しました(SELECT)");
				exit;
			}
			if(pg_numrows($objRec2) == 0){
				$strProg[$i] = "未設定";			
				$strProgMax[$i] = "";
				$strProgUnit[$i] = "";			
			}else{
				$numProg = 0;
				for($j=0;$j<pg_numrows($objRec2);$j++){
					$objftc2 = pg_fetch_object($objRec2, $j);
					//率計算
					$numProg = $numProg + $objftc2->progress / $objftc2->progress_max;
				}
				$strProg[$i] = floor($numProg / pg_numrows($objRec2) * 100);
				$strProgMax[$i] = "100";
				$strProgUnit[$i] = "%";			
			}
		//グラフ用
			//外枠サイズ
			$baseWidth = "310";
			//グラフ最大サイズ
			$maxWidth = "300";
			//日数
			if($strStart[$i] != "未設定" && $strEnd[$i] != "未設定"){
				//開始〜終了
				$kikann_all = hiduke_diff($strStart[$i],$strEnd[$i]);
				//開始〜今日
				$kikan_doday = hiduke_diff($strStart[$i],date("Y/m/d"));
				//今日の位置
				if($strStart[$i] > date("Y/m/d")){
					$dayPos[$i] = 0;
				}else{
					$dayPos[$i] = floor($kikan_doday / $kikann_all * $maxWidth);
				}
			}
			//進捗
			if(pg_numrows($objRec2) > 0){
				//進捗幅
				$progWidth[$i] = floor($strProg[$i] / $strProgMax[$i] * $maxWidth);
				//残り幅
				$progLeft[$i] = $maxWidth - $progWidth[$i];
				if($dayPos[$i] > $progWidth[$i]){
					$progColor[$i] = "#FF9900";
				}else{
					$progColor[$i] = "#00FF00";
				}
			}
		}

	}

$o_smarty->assign('strPrjName',$strPrjName);
$o_smarty->assign('strCTGName',$strCTGName);
$o_smarty->assign('strSekinin',$strSekinin);
$o_smarty->assign('strStart',$strStart);
$o_smarty->assign('strEnd',$strEnd);

$o_smarty->assign('strPrjSeq',$strPrjSeq);
$o_smarty->assign('dmode',$dmode);
$o_smarty->assign('pmode',$pmode);

$o_smarty->assign('strProg',$strProg);
$o_smarty->assign('strProgMax',$strProgMax);
$o_smarty->assign('strProgUnit',$strProgUnit);

$o_smarty->assign('kansaNew',$kansaNew);

$o_smarty->assign('baseWidth',$baseWidth);
$o_smarty->assign('maxWidth',$maxWidth);
$o_smarty->assign('dayPos',$dayPos);
$o_smarty->assign('progWidth',$progWidth);
$o_smarty->assign('progLeft',$progLeft);
$o_smarty->assign('progColor',$progColor);

$o_smarty->assign('PHP_TITLE_NAME',"プロジェクト管理(静的表示)");

$o_smarty->display('PRJ001.tpl');

//社員名取得関数
function syainName_get($pList,&$pNameArr){
	if($pList != "/"){
		$strwhere = str_replace("//", "", $pList);
		$strwhere = substr($strwhere, 1, (strlen($strwhere) - 1));
		$strwhere = str_replace("/", "' or syain_cd = '", $strwhere);
	
		$strSQL = "select name_kj_sei, name_kj_mei from syain_tbl ";
		$strSQL .= "where syain_cd = '".$strwhere."' order by disp_rank";
		$objRec = pg_exec($strSQL);
		if($objRec == false){
			echo("SQL実行に失敗しました(SELECT)");
			exit;
		}
		if(pg_numrows($objRec) > 0){
			for($i=0;$i<pg_numrows($objRec);$i++){
				$objftc = pg_fetch_object($objRec, $i);
				$pNameArr[$i] = $objftc->name_kj_sei.$objftc->name_kj_mei;
			}
		}
	}else{
		$pNameArr[0] = "なし";
	}	
}

//日数取得関数
function hiduke_diff($day1,$day2){
	list($y1,$m1,$d1)=split("/",$day1);
	list($y2,$m2,$d2)=split("/",$day2);
	$t1=mktime(0,0,0,$m1,$d1,$y1);
	$t2=mktime(0,0,0,$m2,$d2,$y2);
	return 1+abs($t1-$t2)/(60*60*24);
}


?>