• Tidak ada hasil yang ditemukan

LAMPIRAN. Lampiran 1. Proses Installasi

N/A
N/A
Protected

Academic year: 2021

Membagikan "LAMPIRAN. Lampiran 1. Proses Installasi"

Copied!
54
0
0

Teks penuh

(1)

Persyarat:

Sistem Operasi : Linux (dianjurkan Red Hat 9)

Web Server

: Apache

Database Server : MySQL

Program lain

: PHP

Instalasi:

a.

Instalasi Web Server

Langkah pertama yang harus dilakukan adalah instalasi web server. Biasanya

di sistem operasi Linux telah tersedia Web Server Apache, terkecuali Linux

yang dibuat oleh distro tertentu yang tidak menyertakan Apache di dalamnya.

b.

Instalasi PHP

PHP ini diperlukan karena aplikasi ini disusun dengan menggunakan bahasa

pemrograman PHP. PHP yang digunakan adalah PHP versi 4 ke atas. Pada

Linux yang menyediakan fasilitas Web Services umumnya telah menyediakan

PHP di dalamnya.

c.

Copy Program

Pada konfigurasi Apache standard di Linux, semua data website disimpan

dalam direktory /var/www/html. Maka direktori eoffice dikopikan ke direktori

website tersebut dengan melakukan perintah cp –r * /var/www/html, dari

dalam direktori eoffice.

d.

Instalasi Database Server

Database

server yang digunakan pada aplikasi ini adalah MySQL, dimana

umumnya Linux pun menyertakan program ini dalam sistem operasinya. Dan

untuk mengoperasikannya, kita bisa masuk dengan mengetikkan perintah

mysql di dalam console Linux.

(2)

e.

Create Database

Pada awalnya, MySQL tidak menyediakan database kecuali database milik

MySQL sendiri. Untuk itu kita harus membuat sebuah database dengan nama

“eoffice” untuk menjalankan E-Office ini. Gunakan console Linux dan

ketikkan perintah mysql dan tekan enter. Kita berada di dalam console

MySQL, dan di dalamnya kita masukkan perintah CREATE DATABASE

eoffice.

f.

Create User pada Database

Untuk mengaktifkan user agar bisa website E-Office bisa mengakses database

eoffice ini, di dalam console MySQL kita mengetikkan GRANT all privileges

on eoffice.* to eoffice@localhost identified by "AuraLL" with grant option;

g.

Memasukkan isi database

Untuk memasukkan isi inisial database ini, maka kita harus memasukkan

seluruh isi query awal ke dalam database mysql dengan menggunakan

perintah mysql eoffice < [eoffice dir]/query/eoffice.sql

(3)

Lampiran 2. Source code class date

<?PHP

/*

COMPLETE DATE TIME FUNCTIONS FOR COMPLEX CALCULATION OF DATE AND TIME

USING SOME DIFFERENT STANDARD OF DATE AND TIME, FOR DECREASING CALCULATION

COMPLEXITY. THIS IS USED MOST BY CALENDAR AND TIMELINE CLASS */ define( 'D_SUNDAY', 0 ); define( 'D_MONDAY', 1 ); define( 'D_TUESDAY', 2 ); define( 'D_WENESDAY', 3 ); define( 'D_THURSDAY', 4 ); define( 'D_FRIDAY', 5 ); define( 'D_SATURDAY', 6 ); define( 'M_JANUARY', 1 ); define( 'M_FEBRUARY', 2 ); define( 'M_MARCH', 3 ); define( 'M_APRIL', 4 ); define( 'M_MAY', 5 ); define( 'M_JUNE', 6 ); define( 'M_JULY', 7 ); define( 'M_AUGUST', 8 ); define( 'M_SEPTEMBER', 9 ); define( 'M_OCTOBER', 10); define( 'M_NOVEMBER', 11); define( 'M_DECEMBER', 12); define( 'SEC_MINUTE', 60 ); define( 'SEC_HOUR', 3600 ); define( 'SEC_DAY', 86400 ); class eo_date {

// VARIABLE USED BY THIS CLASS

var $current_date = null;

var $current_day = null;

var $current_day_on_week = null;

var $current_month = null;

var $current_year = null;

var $current_day_string = null; var $current_day_short_string = null; var $current_month_string = null; var $current_month_short_string = null; var $current_week_on_month = null; var $current_day_on_year = null; var $current_week_on_year = null;

var $date_flag = null;

// FUNCTION USED BY THIS CLASS //CONSTRUCTOR

(4)

* @return eo_date * @param unknown $d * @param unknown $m * @param unknown $y

* @desc EOffice Date Object Constructor */

function eo_date($d=null, $m=null, $y=null) {

$this->init();

$this->set_now();

if ($d != null) $this->set_day($d); if ($m != null) $this->set_month($m); if ($y != null) $this->set_year($y); $this->apply_current(); } function init() { $this->current_day = 0; $this->current_day_on_week = 0; $this->current_month = 0; $this->current_year = 0; $this->current_day_string = ""; $this->current_day_short_string = ""; $this->current_month_string = ""; $this->current_month_short_string = ""; $this->current_week_on_month = 0; $this->current_day_on_year = 0; $this->current_week_on_year = 0; } function apply_from_date() { $this->current_day =

$this->current_date["mday"]; //TANGGAL DLM BULAN

$this->current_day_on_week =

$this->current_date["wday"]; //TANGGAL DLM MINGGU, HARI KE-

$this->current_month =

$this->current_date["mon"];

$this->current_year =

$this->current_date["year"];

$this->current_day_string =

$this->current_date["weekday"]; //HARI DALAM NAMA, SENIN, DKK $this->current_day_short_string =

$this->num_to_short_days($this->current_date["wday"]); //HARI DALAM NAMA, SENIN, DKK

$this->current_month_string = $this->current_date["month"]; //BULAN DLM NAMA, JANUARY, DKK >current_month_short_string =

$this->num_to_short_month($this->current_date["mon"]); //BULAN DLM NAMA, JANUARY, DKK

$this->current_day_on_year = $this->current_date["yday"]; //HARI DLM TAHUN, HARI KE-2XX

$this->current_week_on_month = floor($this->current_day / 7) + 1; //MINGGU DLM BULAN, MINGGU KE-

$this->current_week_on_year = floor($this->current_day_on_year / 7) + 1; //MINGGU DLM TAHUN, MINGGU KE 2X }

(5)

$stamp = mktime(0, 0, 0, $this->current_month, $this->current_day, $this->current_year); $this->current_date = getdate($stamp); $this->apply_from_date(); } function check_date() {

return (checkdate(>current_month, $this->current_day, $this->current_year));

}

function if_false_then_reset_date() {

if (!$this->check_date()) $this->set_now(); }

//BASIC FUNCTIONS SET

function set_now($timestamp=null) { if ($timestamp == null) { $d = date("d"); $m = date("m"); $y = date("Y");

$stamp = mktime(0, 0, 0, $m, $d, $y); $this->current_date = getdate($stamp); $this->set_date($d, $m, $y); } else { $this->current_date = getdate($timestamp); } $this->apply_from_date(); } function set_day($d) { $this->current_day = $d; } function set_month($m) { $this->current_month = $m; } function set_year($y) { $this->current_year = $y; }

function set_date($d, $m, $y) { $this->current_day = $d; $this->current_month = $m; $this->current_year = $y; } function set_mysql_date($mysd) { $tmp = explode("-", $mysd); $this->set_date($tmp[2], $tmp[1], $tmp[0]); $this->apply_current(); }

//BASIC FUNCTION GET

(6)

return ($this->current_day." ".$this->current_month_string." ".$this->current_year); } function get_day_string() { return ($this->current_day_string); } function get_day_number_week() { return ($this->current_day_on_week); } function get_day_number() { return ($this->current_day); } function get_day_on_year_number() { return ($this->current_day_on_year); } function get_days_in_month() {

return (cal_days_in_month($cal, $this->get_month(), $this->get_year())); } function get_date_number() { return ($this->current_day); } function get_month() { return ($this->current_month); } function get_month_string() { return ($this->current_month_string); } function get_year() { return ($this->current_year); } function get_week_on_month() { return ($this->current_week_on_month); } function get_days_before_new_year() { $total = $this->get_days_before_new_month();

for (($count = $this->current_month + 1); $count <= 12; $count++) {

$total += cal_days_in_month($cal, $count, $this->current_year);

}

return ($total);

}

function get_days_before_new_month() {

$days_month_total = cal_days_in_month($cal, $this->current_month, $this->current_year);

(7)

return ($days_month_total - $this->current_day); } function get_weeks_before_new_year() { return (floor($this->get_days_before_new_year() / 7)); } function get_months_before_new_year() { return (12 - $this->current_month); } //MOVEMENT FUNCTIONS function next_year($inc=null) { if ($inc == null) $inc = 1;

$this->current_year += $inc; $this->apply_current(); } function next_beginning_year($inc=null) { $this->current_month = 1; $this->current_day = 1; $this->next_year(); } function previous_year($inc=null) { if ($inc == null) $inc = 1;

$this->current_year -= $inc; $this->apply_current(); }

function next_month($inc=null) { if ($inc == null) $inc = 1; $this->current_month += $inc; $this->apply_current(); }

function next_beginning_month($inc=null) { if ($inc == null) $inc = 1;

$this->set_day(1);

$this->next_month($inc); }

function previous_month($inc=null) { if ($inc == null) $inc = 1; $this->current_month -= $inc; $this->apply_current(); }

function next_week($inc=null) { if ($inc == null) $inc = 1;

$this->current_day += (7 * $inc); $this->apply_current(); }

(8)

function previous_week($inc=null) { if ($inc == null) $inc = 1;

$this->current_day = $month_end_date - ($inc * 7); $this->apply_current();

}

function next_day($inc=null) { if ($inc == null) $inc = 1; $this->current_day += $inc; $this->apply_current(); }

function previous_day($inc=null) { if ($inc == null) $inc = 1; $this->current_day -= $inc; $this->apply_current(); }

//WRITING FUNCTIONS

function write_vars() {

echo "Day | ".$this->current_day_string."<BR>"; echo "Date | ".$this->current_day."<BR>"; echo "Month | ".$this->current_month."<BR>"; echo "Month Word |

".$this->current_month_string."<BR>";

echo "Year | ".$this->current_year."<BR>"; echo "Days of Year |

".$this->current_day_on_year."<BR>";

echo "Weeks of Month | ".$this->current_week_on_month."<BR>";

echo "Weeks of Year| ".$this->current_week_on_year."<BR>";

echo "Days before New Month | ".$this->get_days_before_new_month()."<BR>";

echo "Days before New Year | ".$this->get_days_before_new_year()."<BR>";

echo "Weeks before New Year | ".$this->get_weeks_before_new_year()."<BR>"; } function write_date($code) { } function write_date_simple() { $buffer = "\n".$this->current_day."-".$this->current_month."-".substr($this->current_year, 2, 2); echo $buffer; } function write_date_short() {

$buffer = $this->current_day_short_string.", ".$this->current_day." ".$this->current_month_short_string."

".substr($this->current_year, 2, 2);

echo $buffer;

(9)

function write_date_complete() {

$buffer = $this->current_day_string.", >current_day." >current_month_string." ".$this->current_year; echo $buffer; } function write_date_numbers() { $buffer = $this->current_year."-".$this->current_month."-".$this->current_day; echo $buffer; } //CONVERTING FUNCTIONS function timestamp_to_string($time){ $year = substr($time, 0, 4); $month = substr($time, 4, 2); $month_word = $this->num_to_month($month); $date = substr($time, 6, 2); $hour = substr($time, 8, 2); $minute = substr($time, 10, 2); $second = substr($time, 12, 2);

$stamp = mktime($hour, $minute, $second, $month, $date, $year);

$str_date = $date." ".$month_word." ".$year; $str_time = $hour.":".$minute.":".$second; return array ($year, $month_word, $date, $hour, $minute, $second, $stamp, $str_date, $str_time);

}

function num_to_days($num) {

$num %= 7;

if ($num == "01") $day_word = "Sunday"; if ($num == "02") $day_word = "Monday"; if ($num == "03") $day_word = "Tuesday"; if ($num == "04") $day_word = "Wednesday"; if ($num == "05") $day_word = "Thursday"; if ($num == "06") $day_word = "Friday"; if ($num == "07") $day_word = "Saturday";

return ($day_word);

}

function num_to_month($num) {

$num %= 13;

if ($num == "01") $month_word = "January"; if ($num == "02") $month_word = "February"; if ($num == "03") $month_word = "March"; if ($num == "04") $month_word = "April"; if ($num == "05") $month_word = "May"; if ($num == "06") $month_word = "June"; if ($num == "07") $month_word = "July";

(10)

if ($num == "08") $month_word = "August"; if ($num == "09") $month_word = "September"; if ($num == "10") $month_word = "October"; if ($num == "11") $month_word = "November"; if ($num == "12") $month_word = "December";

return ($month_word);

}

function num_to_short_days($num) {

$num %= 7;

if ($num == "01") $day_word = "Sun"; if ($num == "02") $day_word = "Mon"; if ($num == "03") $day_word = "Tue"; if ($num == "04") $day_word = "Wed"; if ($num == "05") $day_word = "Thu"; if ($num == "06") $day_word = "Fri"; if ($num == "07") $day_word = "Sat";

return ($day_word); } function num_to_bit_days($num) { $num %= 7; if ($num == "01") $day_word = "S"; if ($num == "02") $day_word = "M"; if ($num == "03") $day_word = "T"; if ($num == "04") $day_word = "W"; if ($num == "05") $day_word = "T"; if ($num == "06") $day_word = "F"; if ($num == "07") $day_word = "S"; return ($day_word); } function num_to_short_month($num) { $num %= 13; if ($num == 0) $num = 1;

if ($num == "01") $month_word = "Jan"; if ($num == "02") $month_word = "Feb"; if ($num == "03") $month_word = "Mar"; if ($num == "04") $month_word = "Apr"; if ($num == "05") $month_word = "May"; if ($num == "06") $month_word = "Jun"; if ($num == "07") $month_word = "Jul"; if ($num == "08") $month_word = "Aug"; if ($num == "09") $month_word = "Sep"; if ($num == "10") $month_word = "Oct"; if ($num == "11") $month_word = "Nov"; if ($num == "12") $month_word = "Dec";

return ($month_word);

} }

//================================================================ ===============================

(11)

//================================================================ ===============================

//================================================================ ===============================

/*

FUNCTIONS FOR DATE CALCULATING, USE EO_DATE ABOVE ============================================== */

function cal_days_of_year($y) { $total = 0;

for ($count = 1; $count < 12; $count++) {

$total += cal_days_in_month($cal, $count, $y); }

return ($total);

}

function cal_count_to_days($d, $m, $y=null) { if ($y == null) $cy = date("Y");

$days = $d;

for ($count = 1; $count <= $y; $count++) {

$days += cal_days_of_year($cy + $count - 1); }

for ($count_2 = 1; $count_2 <= $m; $count_2++) {

$days += cal_days_in_month($cal, $count_2, $cy + $count) + 1;

}

return ($days);

}

function cal_count_to_months($m=null, $y=null) { return ($m + ($y * 12));

}

function cal_count_2_days($d2, $m2=null, $y2=null, $d1=null, $m1=null, $y1=null) {

$total = 0;

$date_1 = new eo_date($d1, $m1, $y1); $date_2 = new eo_date($d2, $m2, $y2);

$year = abs($date_2->get_year() - $date_1->get_year());

switch ($year) {

case 0 : {

if ($date_1->current_month == $date_2->current_month) {

$total = $date_2->current_day - $date_1->current_day;

} else {

$total =

$date_1->get_days_before_new_month();

for (($count = $date_1->current_month + 1); $count < $date_2->current_month; $count++) {

(12)

$total += cal_days_in_month($cal, $count, $date_1->current_year); } $total += $date_2->current_day; } break; } default: { $total = $date_1->get_days_before_new_year();

for (($count = $date_1->current_year + 1); $count < $date_2->current_year; $count++) {

$total += cal_days_of_year($count); } $total += $date_2->current_day_on_year; break; } } return ($total); }

function cal_count_2_days_date($date_1, $date_2) { $total = 0;

$year = abs($date_2->get_year() - $date_1->get_year()); switch ($year) {

case 0 : {

if ($date_1->current_month == $date_2->current_month) {

$total = $date_2->current_day - $date_1->current_day;

} else {

$total =

$date_1->get_days_before_new_month();

for (($count = $date_1->current_month + 1); $count < $date_2->current_month; $count++) {

$total += cal_days_in_month($cal, $count, $date_1->current_year); } $total += $date_2->current_day; } break; } default: { $total = $date_1->get_days_before_new_year();

for (($count = $date_1->current_year + 1); $count < $date_2->current_year; $count++) {

(13)

} $total += $date_2->current_day_on_year; break; } } return ($total); }

function cal_count_2_weeks($d2, $m2, $y2, $d1=null, $m1=null, $y1=null) {

return ((cal_count_days($d2, $m2, $y2, $d1, $m1, $y1)) / 7); }

function cal_count_2_months($d2, $m2, $y2, $d1=null, $m1=null, $y1=null) {

$total = 0;

$date_1 = new eo_date($d1, $m1, $y1); $date_2 = new eo_date($d2, $m2, $y2);

$year = abs($date_2->get_year() - $date_1->get_year()); switch ($year) { case 0 : { if ($date_1->current_month != $date_2->current_month) { $total = ($date_2->current_month - $date_1->current_month) - 1; $sub_total = $date_1->get_days_before_new_month(); $sub_total += $date_2->current_day; $total += $sub_total / 30; } break; } default: { $total = $date_1->get_months_before_new_year(); $total += ($year - 1) * 12; $total += $date_2->current_month - 1; $sub_total = $date_1->get_days_before_new_month(); $sub_total += $date_2->current_day; $total += $sub_total / 30; break; } } return (printfloat($total, 2));

(14)

}

function cal_count_years($d2, $m2, $y2, $d1=null, $m1=null, $y1=null) {

return (printfloat((cal_count_days($d2, $m2, $y2, $d1, $m1, $y1) / 365), 2));

}

function printfloat($float, $dec) {

$tmp = substr($float, 0, strpos($float, ".") + $dec + 1); if (substr($tmp, strlen($tmp) - 1, 1) == ".") $tmp = substr($tmp, 0, strlen($tmp) - 1);

return ($tmp);

}

function cal_days_to_date_complete($days, $m = null) { if ($month == null) $m = 1;

$y = 1970;

$stamp = mktime(0, 0, 0, $m, $days, $y); $date_temp = getdate($stamp);

$td = $date_temp["mday"]; $tm = $date_temp["mon"] - 1; $ty = $date_temp["year"] - $y; return (array($td, $tm, $ty)); }

function copy_date($source, $dest) {

$dest->set_day($source->get_day_number()); $dest->set_month($source->get_month()); $dest->set_year($source->get_year()); $dest->apply_current();

}

function is_bigger($date_1, $date_2) {

if ($date_1->get_year() > $date_2->get_year()) { return(1);

} elseif ($date_1->get_year() < $date_2->get_year()) { return(0);

} else {

if ($date_1->get_month() > $date_2->get_month()) { return(1);

} elseif ($date_1->get_month() < $date_2->get_month()) { return(0); } else { if ($date_1->get_day_number() > $date_2->get_day_number()) { return(1);

} elseif ($date_1->get_day_number() < $date_2->get_day_number()) {

return(0);

} else {

return(0); }

(15)

} }

}

function is_same($date_1, $date_2) {

if (($date_1->get_year() == $date_2->get_year()) && ($date_1->get_month() == $date_2->get_month()) && ($date_1->get_day_number() == $date_2->get_day_number())) { return(1); } else { return(0); } }

function next_beginning_year_until($start, $end) { $tmp = new eo_date();

copy_date($start, &$tmp); $start->next_beginning_year();

$stop = is_bigger($start, $end); copy_date($tmp, &$start);

if ($stop == 1) { //IF STOP TO

END DATE

$interval = cal_count_2_days($end->get_day_number(), $end->get_month(), $end->get_year(), $start->get_day_number(), $start->get_month(), $start->get_year());

copy_date($end, &$start);

} else { //IF NOT

STOP TO END DATE, STILL FAR TO END DATE

$interval = $start->get_days_before_new_year() + 1; $start->next_beginning_year();

}

return(array ($stop, $interval)); }

function list_days_year($start, $end) { $check = 0; $count = 0; $list[] = null; $year[] = null; while ($check == 0) { $year[$count] = $start->get_year(); $tmp = next_beginning_year_until(&$start, $end); $check = $tmp[0]; $list[$count] = $tmp[1]; $count++; } return(array($list, $year)); }

function next_beginning_month_until($start, $end) { $tmp = new eo_date();

(16)

copy_date($start, &$tmp); $start->next_beginning_month();

$stop = is_bigger($start, $end); copy_date($tmp, &$start);

if ($stop == 1) { //IF STOP TO

END DATE

$interval = cal_count_2_days($end->get_day_number(), $end->get_month(), $end->get_year(), $start->get_day_number(), $start->get_month(), $start->get_year());

copy_date($end, &$start);

} else { //IF NOT

STOP TO END DATE, STILL FAR TO END DATE

$interval = $start->get_days_before_new_month() + 1; $start->next_beginning_month();

}

return(array ($stop, $interval)); }

function list_days_month($start, $end) { $check = 0; $count = 0; $list[] = null; $month[] = null; while ($check == 0) { $month[$count] = $start->get_month(); $tmp = next_beginning_month_until(&$start, $end); $check = $tmp[0]; $list[$count] = $tmp[1]; $count++; } return(array($list, $month)); }

(17)

Lampiran 3. Source code class Timeline

<?PHP

/*

TIMELINE FUNCTION, IDENTICALLY SIMILLIAR WITH GANTT CHART BUT THIS TIMELINE IS MORE SIMPLE AND EASY TO UNDERSTAND. SURE, THAT THIS FUNCTION MADE FOR PROGRAMMING OPTIMATION. NEED EO_DATE CLASS : THE MOST COMPLETE DATE FUNCTIONS HAHAHA */

class eo_single_timeline { var $header = null;

var $start_date = null; var $end_date = null;

var $start_line_date = null; var $end_line_date = null; var $link = null;

var $depend = array(null); var $color = null;

var $report = null; var $current_id = null; var $current_type = null;

var $range = null; //COLUMN RANGE, NOT THE DATE RANGE! function eo_single_timeline($id, $type, $header, $date, $rg) {

$this->current_id = $id; $this->current_type = $type;

$this->header = $header;

$this->start_line_date = new eo_date(); $this->end_line_date = new eo_date();

copy_date($date, &$this->start_line_date); $this->start_date = new eo_date();

$this->end_date = new eo_date(); $this->set_range($rg); }

function set_data($id, $type) { $this->current_id = $id; $this->current_type = $type; } function set_range($rg) { $this->range = $rg; copy_date($this->start_line_date, &$this->end_line_date); $this->end_line_date->next_day($rg); }

function set_date_mysql($start, $end) {

$this->start_date->set_mysql_date($start); $this->end_date->set_mysql_date($end); }

(18)

function draw_row() {

global $_GET;

$start = new eo_date(); $end = new eo_date();

if (is_bigger(>start_date, $this->start_line_date) == 1) { copy_date($this->start_date, &$start); } else { copy_date($this->start_line_date, &$start); } if (is_bigger($this->end_date, $this->end_line_date) == 1) { copy_date($this->end_line_date, &$end); } else { copy_date($this->end_date, &$end); }

$show = !is_bigger($start, $end);

$length_1 = cal_count_2_days_date($this->start_line_date, $start);

$length_2 = cal_count_2_days_date($start, $end); if ($length_2 != 0) $length_2 += 1;

$length_3 = cal_count_2_days_date($end, $this->end_line_date) - 1;

/*

if ($length_1 + $length_2 + $length_3 > $this->range) { if ($length_3 == 0) { if ($length_2 == 0) { $length_1 -= 1; } else { $length_2 -= 1; } } */ echo "<TR bgcolor=\"#FFFFFF\">\n";

echo "<TD NOWRAP align=\"right\" height=\"30\" bgcolor=\"#EEEEEE\">";

switch ($_GET["menu"]) { case 0 : echo "<A

href=\"main.php?action=4&menu=1&project=".$this->current_id."\" class=\"tl_font_2_red\" >"; break;

case 1 : echo "<A

href=\"main.php?action=4&menu=2&project=".$_GET["project"]."&modul e=".$this->current_id."\" class=\"tl_font_2_red\" >"; break;

case 2 : echo "<A

(19)

e=".$_GET["module"]."&task=".$this->current_id."\" class=\"tl_font_2_red\" >"; break;

}

echo "&nbsp; : : &nbsp;".$this->header."&nbsp; : :&nbsp;"; echo "</A></TD>\n"; if ($length_1 > 0) { echo "<TD colspan=\"".$length_1."\" align=\"center\" class=\"tl_td_outline_soft\">"; echo "&gt;"; echo "</TD>\n"; } if ($show) { if ($length_2 > 0) { echo "<TD colspan=\"".$length_2."\" align=\"center\" class=\"tl_td_outline_hard\">"; echo $length_2; echo "</TD>\n"; } } if ($length_3 > 0) { echo "<TD colspan=\"".$length_3."\" align=\"center\" class=\"tl_td_outline_soft\">"; echo "&lt;"; echo "</TD>\n"; }

// echo "<TD width=\"10\" bgcolor=\"EEEEEE\"></TD>"; echo "</TR>\n"; } } //================================================================ =================================== //================================================================ =================================== //============================================= TIMELINE CLASS //================================================================ =================================== //================================================================ =================================== class eo_timeline { var $start_date = null; var $end_date = null; var $temp = null; var $day_range = null; var $month_range = null; var $main_link = null;

var $time_rows = array(null); var $global_type = null; var $global_id = null; var $user_id = null;

(20)

var $range = null; /**

* @return eo_timeline * @param unknown $type

* @desc eoffice timeline (semi gantt chart) graphic shows projects, modules or task schedules. $type: 1 -> projects 2 -> modules 3 -> tasks */

function eo_timeline($type, $id=null, $user=null) {

global $_SERVER; global $_GET; global $_POST; global $_SESSION; $this->init(); $this->global_type = $type;

if ($id == null) >global_id = 0; else $this->global_id = $id;

if ($user != null) $this->user_id = $user; } //INITIALIZATION============================================ ============================ function process_submit() { $this->get_header_url(); $this->get_post_var(); if($_POST["post"] == 1) { $this->start_date->set_mysql_date($_POST["start"]); $this->end_date->set_mysql_date($_POST["end"]); if ($_POST["next"] == 1) { $this->start_date->next_day($this->range); $this->end_date->next_day($this->range); } if ($_POST["prev"] == 1) { $this->start_date->previous_day($this->range); $this->end_date->previous_day($this->range); } } else { $this->set_date_range($this->range); }

(21)

$this->fit_to_week(); }

function init() {

$this->start_date = new eo_date(); $this->end_date = new eo_date(); $this->range = 35; $this->process_submit(); } //SETTING PARAMETERS======================================================== ============== function get_header_url() { $tmp = $_SERVER['QUERY_STRING']; $head = $_SERVER['PHP_SELF'];

$header = substr($head, strrpos($head, "/") + 1, strlen($head));

$this->main_link = $header."?".$tmp; }

function set_date($d1, $m1, $y1, $d2, $m2, $y2) { $this->start_date->set_date($d1, $m1, $y1); $this->end_date->set_date($d2, $m2, $y2); $this->fit_to_week(); } function fit_to_week() { $first = $this->start_date->get_day_number_week(); $last = $this->end_date->get_day_number_week(); if ($first != 0) $this->start_date->previous_day($first);

if ($last != 0) $this->end_date->next_day(7 - $last); $this->range =

cal_count_2_days_date($this->start_date, $this->end_date); }

function set_date_range ($d=null, $m=null) {

if ($d == null) >day_range = 30; else $this->day_range = $d;

if ($d == null) >month_range = 0; else $this->month_range = $m; $this->range = cal_count_to_days($this->day_range, $this->month_range); if ($this->range % 7 != 0) $this->range = (floor($this->range / 7) + 1) * 7; copy_date($this->start_date, &$this->end_date);

(22)

if ($d > 0) $this->end_date->next_day($d); if ($m > 0) $this->end_date->next_month($m); $this->fit_to_week(); } //TIMELINE PROCCESSES======================================================== ========= function exec_query() { if (isset($_GET["project"])) { if (isset($_GET["module"])) { $this->global_type = 3; } else { $this->global_type = 2; } } else { $this->global_type = 1; } switch ($this->global_type) { case 1 : {

$query = "SELECT * FROM projects";

} break;

case 2 : {

$query = "SELECT * FROM project_modules WHERE module_project_id = ".$_GET["project"];

} break;

case 3 : {

$query = "SELECT * FROM tasks WHERE task_module_id = ".$_GET["module"]." AND task_project_id = ".$_GET["project"]; } break; default: { $query = ""; } } $result = mysql_query($query);

while ($row[] = mysql_fetch_array($result));

for ($count = 0; $count < mysql_num_rows($result); $count++) {

switch ($this->global_type) {

case 1 : {

$this->time_rows[$count] = new

eo_single_timeline($row[$count]["project_id"], $this->global_type, $row[$count]["project_name"], $this->start_date, $this->range); $this->time_rows[$count]->set_date_mysql($row[$count]["project_start_date"], $row[$count]["project_end_date"]); } break; case 2 : { $this->time_rows[$count] = new eo_single_timeline($row[$count]["module_id"], $this->global_type,

(23)

$row[$count]["module_name"], $this->start_date, $this->range); $this->time_rows[$count]->set_date_mysql($row[$count]["module_start_date"], $row[$count]["module_end_date"]); } break; case 3 : { $this->time_rows[$count] = new eo_single_timeline($row[$count]["task_id"], $this->global_type, $row[$count]["task_name"], $this->start_date, $this->range); $this->time_rows[$count]->set_date_mysql($row[$count]["task_start_date"], $row[$count]["task_end_date"]); } break; default: { } } } } function draw_navigator() {

echo "<LINK href=\"./css/timeline.css\" rel=\"stylesheet\" type=\"text/css\">";

if ($_POST["link"] == "") $_POST["link"] = $this->main_link;

?>

<SCRIPT language="JavaScript">

function next() {

var form = document.timeline;

form.next.value = "1";

set_post(); }

function prev() {

var form = document.timeline;

form.prev.value = "1";

set_post(); }

function set_post() {

var form = document.timeline;

form.start.value = form.start_date_year.value + "-" + form.start_date_month.value + "-" + form.start_date_day.value; form.end.value = form.end_date_year.value + "-" + form.end_date_month.value + "-" + form.end_date_day.value; form.post.value = "1"; form.submit(); } </SCRIPT>

<TABLE align="center" cellpadding="5" cellspacing="0" class="tl_table_2" width="100%" bgcolor="#DDDDDD">

(24)

<FORM name="timeline" action="<?PHP echo $_POST["link"]."&type=".$this->global_type."&id=".$this->global_id;?>" method="POST"> <TR bgcolor="#AAAAAA"> <TD colspan="3" align="left" class="tl_header_1_white"> <?PHP switch ($this->global_type) {

case 1 : echo "<I>&nbsp;

P r o j e c t s &nbsp; T i m e l i n e</I>"; break;

case 2 : echo "<I>&nbsp;

M o d u l e s &nbsp; T i m e l i n e</I>"; break;

case 3 : echo "<I>&nbsp;

T a s k s &nbsp; T i m e l i n e</I>"; break; } ?> </TD> </TR> <TR> <TD align="right" width="20" class="tl_font_1_white"> <A href="javascript:prev();"> <IMG

src="./images/prev.gif" width="16" height="16" alt="next" border="0"> </A> </TD> <TD align="center" width="450" class="tl_font_1_white"> <?PHP $this->draw_date_input("start_date",

>start_date->get_day_number(), >start_date->get_month(), $this->start_date->get_year());

echo "<A

class=\"tl_header_2_gray\">&nbsp; until &nbsp;</A>";

$this->draw_date_input("end_date", $this->end_date->get_day_number(), $this->end_date->get_month(), $this->end_date->get_year());

echo "<INPUT

name=\"submit_timeline\" type=\"button\" value=\"Submit\" onClick=\"set_post();\" class=\"tl_button\">"; ?> </TD> <TD align="left" class="tl_font_1_white"> <A href="javascript:next()"> <IMG

src="./images/next.gif" width="16" height="16" alt="next" border="0">

</A> </TD> </TR>

<INPUT type="hidden" name="prev"> <INPUT type="hidden" name="next"> <INPUT type="hidden" name="start"> <INPUT type="hidden" name="end">

(25)

<INPUT type="hidden" name="post"> <INPUT type="hidden" name="link" value="<?PHP echo $_POST["link"]; ?>">

</FORM> </TABLE> <?PHP } function draw_timeline() { ?>

<TABLE align="center" cellpadding="5" cellspacing="0" class="tl_table_1" bgcolor="#EEEEEE">

<?PHP

//CREATING THE COLUMNS WIDTH FOR FIXING THE CELL'S SIZE echo "<TR>\n";

echo "<TD NOWRAP height=\"0\"></TD>"; for ($count_2 = 1; $count_2 < $this->range; $count_2++) {

echo "<TD height=\"0\" width=\"10\"></TD>";

}

echo "</TR>\n"; //CREATING DATE RANGE

//YEARS $list = list_days_year($this->start_date, $this->end_date); echo "<TR>\n"; echo "<TD height=\"20\">"; echo "</TD>";

for ($count = 0; $count < count($list[0]); $count++) { if ($list[0][$count] > 0) { echo "<TD colspan=\"".$list[0][$count]."\" align=\"center\" class=\"tl_td_year\"><B>". $list[1][$count]."</B></TD>"; } } //MONTHS $list = list_days_month($this->start_date, $this->end_date); echo "<TR>\n"; echo "<TD height=\"20\">"; echo "</TD>";

for ($count = 0; $count < count($list[0]); $count++) {

if ($list[0][$count] > 0) {

echo "<TD

colspan=\"".$list[0][$count]."\" align=\"center\" class=\"tl_td_line_left_now\"><B>".

(26)

num_to_short_month($list[1][$count])."</B></TD>"; } } echo "</TR>\n"; //WEEKS $tmp = new eo_date(); echo "<TR>\n"; echo "<TD height=\"10\"></TD>"; copy_date($this->start_date, &$tmp); $num = $tmp->get_day_number_week(); $count = 0;

while ($count < $this->range) { echo "<TD colspan=\"7\" align=\"left\" class=\"tl_td_blank\">".$tmp->get_day_number()."</TD>"; $count += 7; $tmp->next_week(); } /*

while ($count < $this->range) {

switch ($num) {

case 0 : { echo "<TD colspan=\"7\" align=\"left\" class=\"tl_td_blank\">".$tmp->get_day_number()."</TD>"; } break; } $num++; $count++; $tmp->next_day(); $num %= 7; } */ echo "</TR>\n"; //DAYS echo "<TR>\n"; echo "<TD height=\"10\"></TD>"; $tmp = new eo_date(); copy_date($this->start_date, &$tmp); $num = $tmp->get_day_number_week(); $count = 0;

$now = new eo_date();

while ($count < $this->range) {

if (is_same($now, $tmp)) {

echo "<TD align=\"center\"

(27)

} else { switch ($num) { case 0 : { echo "<TD align=\"center\" class=\"tl_td_line_left\">".num_to_bit_days($num + 1)."</TD>"; } break; case 6 : { echo "<TD align=\"center\" class=\"tl_td_line_left\">".num_to_bit_days($num + 1)."</TD>"; } break; default: { echo "<TD align=\"center\" class=\"tl_td_white\">".num_to_bit_days($num + 1)."</TD>"; } break; } } $tmp->next_day(); $num = $tmp->get_day_number_week(); $count++; } echo "</TR>\n";

//DRAWING THE ROWS OF TIMELINE FROM EACH DATA LIST

for ($count = 0; $count < count($this->time_rows); $count++) { $this->time_rows[$count]->draw_row(); } ?> <TR> <TD> </TD> </TR> </TABLE> <?PHP } function draw() { $this->exec_query(); $this->draw_navigator(); //echo "<BR>"; $this->draw_timeline(); } //OTHER FUNCTIONS========================================================= =============== function get_post_var() {

if ($_GET["id"] != null) $this->global_id = $_GET["id"]; else $this->global_id = 1;

if ($_GET["type"] != null) $this->global_type = $_GET["type"]; else $this->global_type = 1;

if ($_GET["user"] != null) $this->user_id = $_GET["user"]; else $this->user_id = null;

(28)

function draw_date_input($input_name, $current_date=null, $current_month=null, $current_year=null) {

if (is_null($current_date)) $current_date = date(d); if (is_null($current_month)) $current_month = date(m); if (is_null($current_year)) $current_year = date(Y); //HARI

echo "<SELECT name=\"".$input_name."_day\" id=\"".$input_name."_day\" class=\"tl_combo\">";

for ($i=01; $i<=31; $i++){

echo "<OPTION value=\"".$i."\""; if ($i == $current_date) echo " SELECTED"; echo ">".$i."</OPTION>";

}

echo "</SELECT>"; //BULAN

echo "<SELECT name=\"".$input_name."_month\" id=\"".$input_name."_month\" class=\"tl_combo_year\">";

for ($i=1; $i<=12; $i++){

echo "<OPTION value=\"".$i."\"";

if ($i == $current_month) echo " SELECTED"; echo ">".num_to_short_month($i)."</OPTION>"; }

echo "</SELECT>"; //TAHUN

echo "<SELECT name=\"".$input_name."_year\" id=\"".$input_name."_year\" class=\"tl_combo_year\">";

for ($i = $current_year - 40; $i <= ($current_year + 5); $i++){

echo "<OPTION value=\"".$i."\""; if ($i == $current_year) echo " SELECTED"; echo ">".$i."</OPTION>"; } echo "</SELECT>"; } } ?>

(29)

1.

Proses Installasi

Persyarat:

Sistem Operasi

: Linux (dianjurkan Red Hat 9)

Web Server

: Apache

Database Server

: MySQL

Program lain

: PHP

Instalasi:

a.

Instalasi

Web Server

Langkah pertama yang harus dilakukan adalah instalasi

web server. Biasanya di

sistem operasi Linux telah tersedia Web Server Apache, terkecuali Linux yang

dibuat oleh distro tertentu yang tidak menyertakan Apache di dalamnya.

b.

Instalasi PHP

PHP ini diperlukan karena aplikasi ini disusun dengan menggunakan bahasa

pemrograman PHP. PHP yang digunakan adalah PHP versi 4 ke atas. Pada Linux

yang menyediakan fasilitas

Web Services

umumnya telah menyediakan PHP di

dalamnya.

c.

Copy Program

Pada konfigurasi Apache standard di Linux, semua data website disimpan dalam

direktory

/var/www/html. Maka direktori eoffice dikopikan ke direktori website

tersebut dengan melakukan perintah

cp –r * /var/www/html, dari dalam direktori

eoffice.

d.

Instalasi Database Server

Database

server yang digunakan pada aplikasi ini adalah MySQL, dimana

umumnya Linux pun menyertakan program ini dalam sistem operasinya. Dan

untuk mengoperasikannya, kita bisa masuk dengan mengetikkan perintah

mysql

di dalam console Linux.

(30)

MySQL sendiri. Untuk itu kita harus membuat sebuah database dengan nama

“eoffice” untuk menjalankan

E-Office ini. Gunakan

console Linux dan ketikkan

perintah

mysql dan tekan enter. Kita berada di dalam

console MySQL, dan di

dalamnya kita masukkan perintah CREATE DATABASE eoffice.

f.

Create User pada Database

Untuk mengaktifkan user agar bisa website

E-Office bisa mengakses database

eoffice ini, di dalam console MySQL kita mengetikkan

GRANT all privileges on

eoffice.* to eoffice@localhost identified by "AuraLL" with grant option;

g.

Memasukkan isi database

Untuk memasukkan isi inisial database ini, maka kita harus memasukkan seluruh

isi query awal ke dalam database mysql dengan menggunakan perintah

mysql

eoffice < [eoffice dir]/query/eoffice.sql

(31)

user akan masuk dengan hak akses apa. Di sini user diminta memasukkan username

dan password dan menekan tombol login.

Gambar 1. Form Login

Setelah login ini, user akan masuk ke dalam halaman utama yang menampilkan

halaman news sebagai kolom berita utama.

Announcement

Di halaman ini user akan dihadapkan pada berita-berita kiriman administrator

atau setingkat itu diurutkan dari yang paling baru. Jadi untuk user biasa, di luar

administrator dan sejenisnya, tidak dapat melakukan penambahan announcement

apalagi menghapusnya. Dan untuk administrator, ada menu tambahan yaitu Add dan

(32)

Manage, yang hanya dapat dipilih oleh administrator saja.

Gambar 3. Add Announcement

Dan setelah admin memasukkan judul dan isi dari

announcement, maka

halaman

website akan dikembalikan ke View. Dan sub-menu yang terakhir dari

announcement ini ialah

Manage, yang isinya ialah list dari

announcement yang

terdapat pilihan delete dan edit.

(33)

Pilihan

Edit akan dihubungkan dengan halaman yang serupa dengan halaman

Add

Announcement, namun form di dalamnya telah terisi dengan

announcement yang

mau di edit.

Berbeda dengan edit,

del yang berfungsi untuk menghapus

announcement ini

bekerja mengubah field status pada tabel News, dari yang mulanya bernilai 0 menjadi

1. Jadi sebenarnya

announcement itu belum terhapus, hanya ditandai saja. Dan

administrator bisa menandai banyak announcement untuk dihapus. Announcement itu

baru betul-betul terhapus jika administrator memilih menu

Clear Del yang akan

mengeksekusi

query yang isinya menghapus semua

announcement yang memiliki

nilai status 1.

My Desk

Menu ini merupakan halaman yang berisikan apa yang seharusnya ada di meja

kerja, seperti jadwal yang khusus hanya untuk user itu sendiri, sehingga mereka

dapat mengetahui kegiatan apa saja yang harus mereka lakukan sekarang atau yang

akan datang. Selain itu, mereka juga dapat mengubah profile mereka, juga dapat

melihat message yang masuk dari user-user lain di dalam E-Office ini.

Schedule

Di sub menu ini user dapat melihat jadwal yang harus mereka lakukan

sehubungan dengan proyek yang mereka tangani. Di dalam

Schedule ini

terdapat empat kategori jadwal proyek yang disediakan yaitu

In Progress

(proyek yang sedang berjalan),

In Planning (proyek yang sedang

(34)

proyek, orang cenderung melihat kalender atau tanggalan untuk

memastikan kapan proyek mereka selesai, atau proyek apa yang sedang dan

akan berjalan. Karena itu Schedule ini dijadikan halaman paling depan dari

menu MyDesk.

Gambar 5. My Desk Schedule

My Jobs

Di bagian sub-menu ini menampilkan jadwal yang hampir sama dengan

Schedule, hanya saja ditampilkan dalam bentuk detil dengan tujuan agar

user dapat langsung mengerti tugas yang harus dilakukannya hari itu.

Berbeda tujuan dengan

Schedule yang lebih mengarah pada penanggalan,

My Jobs ini lebih menekankan pada listing tugas dan detil

task yang harus

dikerjakan.

Empat kategori yang disediakan sebagai pilihan ialah

Today, untuk semua

kegiatan hari ini;

Previous Days, untuk kegiatan yang dilakukan beberapa

hari yang lalu;

Next Days, untuk kegiatan yang dilakukan beberapa hari

kedepan; These 3, menunjukkan kegiatan 3 hari sekitar hari ini.

(35)

Fasilitas ini disediakan untuk komunikasi lokal standard dan sederhana. Di

halaman ini disediakan langsung link untuk

reply dan

delete mail secara

langsung. Sub menu yang tersedia selain

inbox yang menjadi halaman

utama Mailbox ini ialah Send New Message.

Gambar 7. Mail Box

Dan untuk menu

Send New Message, user tentu dihadapkan pada sebuah

form untuk mengirim message. Jika dalam email nama penerima dapat

ditulis sendiri, di sini user yang dituju tidak dapat ditulis sendiri, melainkan

telah disediakan dalam sebuah combobox yang isinya semua user

E-Office

kecuali user itu sendiri.

(36)

administrator atau pihak yang selevel dengan administrator. Di halaman ini

ditampilkan biodata lengkap beserta jabatan yang di pegangnya.

Gambar 9. Profile

Di bagian ini pun hanya terdapat satu menu yaitu Edit Profile, dan dibagian

inilah user dapat mengganti segala biodata kecuali nama user.

Gambar 10. Edit Profile

Human Resource Development

(HRD)

Ini ialah bagian untuk mengurusi semua yang berhubungan dengan sumber

daya, mulai dari data semua user, manajemen jabatan hingga jabatan tiap user yang

bisa lebih dari satu. Di halaman awal, user dihadapkan pada listing user-user yang

terdapat dalam E-Office.

(37)

profile pada My Desk. Tentunya administrator saja yang berhak untuk mengubah dan

menghapus user di bagian ini. Jadi jika user yang tidak punya hak akses seperti

administrator masuk ke halaman ini, mereka tidak akan menemukan sub menu

Add

dan Manage.

Di halaman

Add ini administrator bisa memasukkan user baru beserta

biodatanya, dan setelah di submit maka data tersebut langsung terlihat pada list users.

Gambar 12. Add User

Sedangkan pada sub menu

Manage administrator dapat melihat data user

dengan lebih rinci, juga dapat mengeditnya kembali atau menghapusnya. Intinya,

metode pengeditan dan penghapusan tidak berbeda dengan proses edit dan

penghapusan pada announcement.

(38)

seperti yang telah dijelaskan di atas.

Gambar 14. User Detail

Dari sini terdapat menu tambahan yang mana menu

Manage Job Type

hanya bisa dilihat oleh user yang berlevelkan administrator. Dan pada sub

menu

Manage Job Type ini administrator dapat menambahkan atau

mengurangi jabatan yang ada pada tiap user, bahkan juga dapat mengatur

prioritas jabatan yang diemban.

Gambar 15. Manage Job Type

Untuk mengubah prioritas jabatan menjadi jabatan primer, administrator

bisa memilih tulisan

> primary pada sebelah kanan. Sehingga salah satu

jabatan harus menjadi jabatan primer. Sedang untuk menghapusnya,

administrator dapat memlih del di sebelah kanan. Jika ingin menambahnya,

administrator bisa memilih salah satu dari sekian banyak

Job Type dan

menekan tombbol Add to User.

User History

Sedang untuk sub-menu History ini kita bisa lihat pengalaman kerja user,

prestasi user dan apa keahlian user. Tujuan halaman ini sebagai arsip kerja

user, juga sebagai bahan pertimbangan para leader serta pemilik

Software

(39)

yang dipilih sebelum masuk ke level halaman ini.

Gambar 16. User History

Dan sama seperti sub menu listing lainnya, pada pilihan Add, administrator

dapat memasukkan history baru.

Gambar 17. Add History

Demikian dengan sub-menu

Manage, isi yang ditampilkan di sana sangat

mirip dengan view, hanya saja lebih detil dan di dalamnya terdapat pilihan

Edit dan

Del. Dan semua fungsi

Edit dan

Del bekerja dengan jalan yang

hampir sama dengan menu dari announcement.

Gambar 18. Manage History

Job Type

Ini ialah bagian terakhir dari HRD yang berperan dalam memanajemen

jabatan yang ada dalam

E-Office. Dari halaman ini user bisa lihat, apa

definisi jabatan yang dipegangnya, siapa atasannya, dan apa level hak akses

yang diberikan pada jabatannya. Dan seperti sub-menu lainnya, pada

Job

(40)

Gambar 19. Job Types

Dan berikut ialah halaman untuk menambahkan jabatan.

Gambar 20. Add Job Type

Tak jauh berbeda dengan halaman

Manage lain,

Job Types pun memiliki

halaman yang serupa dengan fitur yang sama.

Gambar 4.25. Manage Job Type

Projects

Ini ialah bagian paling rumit di antara semua bagian

E-Office ini, namun pada

intinya pembagian dan model struktur halamannya tetap sama. Mulai dari fitur View,

Add,

dan Manage. Struktur proyek ini melingkupi pekerja yang menjadi pemimpin

proyek, beserta pekerja yang terlibat dalam tiap

task-nya dan

log report serta

dokumentasi file.

Dan pada halaman ini diperlihatkan semua Proyek yang sedang berjalan. Untuk

berbagai kategori proyek ini dapat dipilih di bagian kanan atas diantaranya ialah:

In

(41)

Di bawah list proyek langsung tergambar Gantt Chart sederhana dari proyek

yang ditampilkan, sehingga nampak jelas jadwalnya berdasarkan hari ini.

Gambar 4.27. Project View

Menu

Add dan

Manage di atas hanya bisa diakses oleh administrator atau

pemilik perusahaan. Dan berikut ini ialah halaman Add Project.

Gambar 4.28. Add Project

Setelah memasukkan nama project, selanjutnya memasukkan nama client.

Client ini berdasarkan Client list pada bagian

About Company, yang akan dibahas di

bagian terakhir. Pada awal project dibuat, harus ada kondisi awal, apakah proyek ini

masih perencanaan saja, atau tengah berjalan, bagaimanapun hal itu di set pada

bagian

condition. Dan terakhir, administrator harus menentukan siapa yang

memimpin proyek ini. Dan pemimpin proyek mendapat hak akses khusus untuk

mengendalikan project sepenuhnya hingga orang-orang yang terlibat, pengaturan

module sampai task.

Sedang bagian

Manage, terpampang listing project secara detil, ditambah

pilihan untuk

Edit

dan

Delete. Fungsi edit inipun akan membawa user ke halaman

Add, hanya saja telah terisi project yang bersangkutan. Fungsi delete pun berfungsi

mengubah nilai status yang tadinya 0 menjadi 1, sehingga jika user memilih

Clear

Del maka semua project yang berstatus 1 akan dihapus.

(42)

Module

Dengan mengklik nama project di halaman project, maka kita akan mendapati

halaman modul seperti di bawah ini.

Gambar 4.30. Module View

Di awal halaman modul ini ditampilkan detil project sehingga user tau di

lingkup apa

module-module ini berjalan. Baru kemudian di bawahnya tertera list

module yang terdiri atas dua bagian, yaitu

module dan

milestone.

Milestone

merupakan suatu penanda dalam proyek yang berarti proyek tersebut telah mencapai

satu tahapan yang diinginkan. Jika user ingin kembali ke project yang berada di atas

module ini, di kanan atas tertera tulisan

<<project untuk link kembali ke project

sebelumnya.

Sub menu untuk module ini lebih banyak dari project, antara lain tambahannya

ialah

Add Milestone, Timeline, Log

dan

Files. Adapun menu

Add dan

Manage

memang tidak berbeda jauh dengan proyek, tapi kali ini yang dibahas hanya yang

Add karena ada sedikit perbedaan di dalam menginputkan module dan project.

Pada

Add Module ini terdapat dependencies atau ketergantungan suatu module

dengan module lain. Dan untuk gambar detilnya akan ditampilkan berikut ini:

(43)

dilakukan

dependencies, dan sebelah kanan ialah tempat

module yang di

dependencies. Maka setelah submit ditekan,

module akan segera ditambahkan dan

terlihat di halaman view.

Untuk menambahkan milestone, user bisa memilih menu

Add Milestone dan

setelah itu halaman akan berganti ke sebuah form milestone

Gambar 4.32 Module Add Milestone

Satu perbedaan baru pada menu

module ini ialah Log report dengan memilih

link

Logs pada sub menu

module. Dan di halaman

Logs inilah ditampilkan laporan

kerja dalam yang tingkatannya ialah proyek. Di sini pun user bisa langsung

mengambil file yang di upload oleh user lain.

Gambar 4.33. Logs View

Untuk menambah laporan ini, disediakan link bertulisan

Add Log yang cukup

besar dan setelah diklik, akan muncul sebuah popup form yang berisikan form untuk

(44)

Gambar 4.34. Form Input Log

Dan yang menjadi sub menu terakhir ialah Files yang berisikan semua file yang

terkirim dari Logs project ini. Dan informasi yang ditampilkan cukup sederhana

mulai dari nama file, tipe data, dan ukuran file.

Gambar 4.35. Files View

Ini merupakan garis besar apa yang terdapat pada menu

Module, dimana

jabarannya telah dibahas. Jika kita memilih salah satu

module dari list module pada

sub menu

View, maka akan user akan menemukan halaman

module yang berisikan

kmpulan task.

Sekarang kita lihat sub-menu yang menjadi fitur utama

E-Office ini yaitu

Timeline berupa Gantt Chart sederhana. Fasilitas ini dibuat langsung melalui PHP

dan diolah menjadi HTML. Timeline ini mengambil dulu

module yang ada dan

membaca tanggal awal dan akhir kemudian menggambarkannya dalam satu baris.

(45)

jangauan waktu yang kita inginkan, batas penglihatan Timeline ini di bulatkan

menjadi mingguan atau tepat kelipatan tujuh.

Task

Di bagian ini diperlihatkan

task yang terdapat dalam satu

module. Seperti

halnya halaman module, di bagian atas di tulis kembali detil dari

module supaya user

mengerti task-task berikut ini bergerak dalam lingkup module seperti apa.

Gambar 4.37.Task View

Sub Menu yang tertera di sini sama sekali sama dengan module, sehingga untuk

detilnya sub menu tidak dibahas. Penekanannya di sini ialah kedetilan

task yang

dibuat pada halaman

Add. Dimana selain terdapat

task dependencies juga terdapat

user assign, untuk memasukkan user-user untuk bekerja di task ini.

Gambar 4.38. Add Task

Untuk bisa melakukan pemindahan resources dan dependencies secara realtime

pada

website, penulis menggunakan

Java Script. Dengan script itu kita dapat

melakukan pemindahan dari listbox satu ke listbox yang lain.

(46)

Manajemen Proyek Software House

NRP :

26499161

Nama :

Stefanus

Wayanartha

Dosen Pembimbing

: Ir. Resmana Lim, M.Eng.

Ir. Sukanto T., M.Sc

Tahun lulus Tugas Akhir : 2005

(47)

UNIVERSITAS KRISTEN PETRA

USULAN TUGAS AKHIR

Nama

: Stefanus Wayanartha A. K.

NRP :

26499161

Bidang Studi

: Teknologi Perangkat Lunak

Judul Tugas Akhir

: Perancangan dan Pembuatan Sistem e-Office untuk

Manajemen Proyek Software House

Pembimbing I

: Ir. Resmana Lim, M.Eng.

Pembimbing II

: Sukanto T., Ir., M.Sc.

Dilaksanakan

: Semester Gasal 2003/2004

Surabaya, 23 Desember 2003

Yang Mengusulkan,

Stefanus Wayanartha

Mengetahui,

Pembimbing I

Ir. Resmana Lim, M.Eng

Pembimbing II

Ir. Sukanto T., M.Sc.

Kordinator Tugas Akhir,

(48)

Software House

B.

LATAR BELAKANG MASALAH

Impian setiap pegawai ialah mengerjakan pekerjaan kantor di rumahnya

dan mendapatkan suasana yang diinginkan untuk melakukan pekerjaannya.

Namun impian seorang pemimpin perusahaan ialah menjalankan perusahaan di

mana saja, kapan saja dan tetap berjalan dengan baik.

Pekerjaan kantor yang umumnya berhadapan dengan meja kerja dan

setumpuk kertas beserta alat-alat tulis, seharusnya dapat dikerjakan di mana saja

selama meja beserta berkas-berkas tersebut ikut serta ke tempat pegawai tersebut

berada. Yang menjadi permasalahan setelah hal di atas ialah komunikasi dan

aliran dokumen yang juga mesti berjalan dari satu tempat ke tempat lain dengan

lancar walaupun meja kerja tersebut dibawa kemana saja.

Impian tersebut dapat diwujudkan dengan komunikasi dan sistem yang

terintegrasi dan memadai. Salah satunya dengan menggunakan internet dan

website sebagai media untuk komunikasi, pertukaran data dan manajemen yang

dapat diakses dimana saja selama masih terhubung dengan jaringan internet. Jadi

seorang pegawai dapat bekerja di rumah dengan sebuah komputer yang terhubung

internet dan mengirimkan berkas-berkasnya melalui internet dan mengetahui

pekerjaan dan tugas-tugasnya melalui website. Sedangkan pimpinan perusahaan

atau pimpinan proyek dapat memantau dan memanajemen kerja

pegawai-pegawainya melalui website tersebut.

Sedang jenis perusahaan dan proyek yang ditangani website ini ialah

software house, yang mana di zaman sekarang banyak dibutuhkan terutama

software house yang belum memiliki kantor.

(49)

bisa bekerja di rumah umumnya ialah kondisi sakit yang membuat tidak bisa

bergerak banyak dan biasanya istirahat di rumah. Kondisi lain terjadi pula jika

pegawai tersebut berada di luar kota, atau ada hal yang menyebabkan dia tidak

memungkinkan berada di kantor.

Dari hal di atas dapat dilihat, bahwa inti permasalahan utama ialah

bagaimana caranya membawa tugas-tugas itu ke tempat yang berbeda dan

mengerjakannya, serta berkomunikasi, bertukar data dengan orang-orang yang

seharusnya kita hubungi di lingkungan kerja. Dokumen kerja sesungguhnya

merupakan perihal yang bisa dibawa kemana saja dan dikerjakan di mana saja,

masalahnya bagaimana cara memberikan dokumen tersebut jika tempat antar

pegawai saling berjauhan, dan bagaimana cara manajer memantau kerja

pegawainya dari jarak jauh, merupakan hal utama yang perlu diselesaikan dari

kasus ini.

Dengan pesatnya media komunikasi, terutama dalam hal pertukaran data,

masalah dokumentasi menjadi hal yang mudah dipecahkan. Solusi utama yang

akan dipecahkan dalam kasus ini ialah bagaimana terjadinya alur dokumen

tersebut dan manajemen kerja jarak jauh dengan menggunakan fasilitas

komunikasi yang telah maju, dalam hal ini kita pilih media internet.

Oleh

karenanya

website yang dinamakan e-Office ini dibuat dan

diharapkan bisa digunakan dalam situasi kerja software house yang

sesungguhnya.

D.

TUJUAN TUGAS AKHIR

Tujuan tugas akhir ini adalah membuat website sebagai kantor maya di

mana orang yang terlibat di dalamnya dapat mengerjakan pekerjaan kantornya

selayaknya berada di kantor, yang mana dalam kasus ini jenis kantor yang dituju

ialah jenis kantor software house.

(50)

menjadi kantor maya di mana semua pegawai hingga pimpinan perusahaan bisa

menjalankan aktivitas kantor seperti berada di sebuah ruang kerja kantor.

Proses kerja kantor secara umum yang digunakan dalam e-Office ini

meliputi:

a.

Aliran dokumen, mulai dari pengiriman, persetujuan dan penerimaan

dokumen.

b.

Manajemen Proyek, meliputi beberapa hal antara lain:

1.

Detail proyek, antar lain definisi, alur data, agenda dan

2.

Manajemen sumber daya, yang di dalamnya termasuk daftar pegawai

beserta status lengkap, prestasi, bagian pekerjaan yang ditangani dalam

proyek dan evaluasi pegawai.

3.

Penjadwalan, mengatur jadwal per proyek secara garis besar yang

mencakup waktu kerja per hari, tugas yang harus dilakukan dan siapa yang

mengerjakan, dan hanya bisa diubah oleh pemimpin proyek atau

pemimpin perusahaan.

4.

Dokumentasi, mencakup laporan dan dokumentasi mengenai jalannya

proyek.

c.

Komunikasi, diantaranya menggunakan news,

milis dan chat untuk

berhubungan satu dengan yang lain.

Tentunya dalam website ini dilakukan pembedaan pengguna, diantaranya:

a.

Pegawai biasa, yang hanya bisa melihat jadwal, mengirim dan menerima data,

serta melakukan komunikasi antar pengguna.

b.

Manajer proyek, mengubah jadwal, melihat alur dokumen yang telah terjadi,

melihat komunikasi yang terjadi antar pengguna dalam suatu proyek,

mengirim dan menerima data, menambahkan berita dalam suatu proyek,

memberi penilaian kepada pegawai, serta memasukkan dan mengeluarkan

pegawai dalam suatu proyek.

c.

Pemimpin perusahaan, melihat seluruh aktivitas proyek yang ada, mengirim

dan menerima data, memasukkan dan mengeluarkan pegawai dalam

perusahaan, memberi penilaian pada pegawai, komunikasi ke semua proyek

(51)

d.

Administrator, melakukan semua hal yang bisa dilakukan oleh pemimpin

perusahaan, ditambah melihat semua proses yang terjadi selama website

berjalan juga dapat memasukkan semua jenis pengguna dan mengatur news.

Kelompok pengguna di atas masing-masing memiliki peran dan fungsi

sendiri-sendiri. Oleh karenanya ada hak akses yang diberikan untuk masing-masing jenis

pengguna tergantung dari jabatan yang dimiliki dalam lingkungan kerjanya.

Keamanan

website

ini dilakukan hanya dengan melakukan pembatasan

fasilitas pada masing-masing kelompok pengguna disesuaikan dengan fungsi

kerjanya. Yang dapat melakukan akses penuh hanya administrator

di mana

administrator mengendalikan penuh website e-Office tersebut. Setiap pengguna

dapat masuk ke website

dengan memasukkan identitas pengguna dan

password-nya masing-masing, yang mana password di enkripsi sehingga sukar untuk

dilacak.

Untuk mewujudkan fungsi di atas dibutuhkan minimal webserver sebagai

media visualisasi data-data e-Office, dan database server sebagai wadah

penyimpanan data-data e-Office. Di server inilah semua proses e-Office dilakukan,

dan user hanya mengaksesnya melalui internet yang ditampilkan berupa webpage.

Dalam kasus ini dibutuhkan sebuah server yang optimal dan mampu menjalankan

fungsi web dengan baik. Sistem operasi yang dipilih untuk menjalankan e-Office

ini adalah Linux Redhat 9, dengan menggunakan Apache sebagai webserver. Dan

untuk bahasa pemrogamannya digunakan PHP dan HTML untuk menampilkan

visualisasi web yang dinamis dan interaktif. Sedang untuk database server

digunakan MySQL yang telah terintegrasi dengan Linux Redhat 9.

F.

TINJAUAN PUSTAKA

e-Office adalah sebuah website yang memanajemen kerja kantor sehingga

pegawai kantor dapat melakukan aktivitas kantornya selayaknya berada di kantor.

Untuk menyimpan data-data kantor yang demikian banyak diperlukan suatu

database. Di dalam database, data-data tersebut disimpan secara terstruktur

Gambar

Gambar 1. Form Login
Gambar 3. Add Announcement

Referensi

Dokumen terkait

Isolasi dan identifikasi bakteri termofilik penghasil kitinase dari sumber air panas Danau Ranau Suma- tera Selatan, diperoleh 2 isolat yang mampu meng- hasilkan kitinase dengan

Hal ini ditunjukkan dengan nilai signifikasi untuk kedua model Altman Modifikasi dan Springate sebesar 0,135 lebih besar dari tingkat signifikan sebesar 0,05

Pada emulsi ganda A/M/A yang dibuat dengan menggunakan hidrokoloid sebagai penstabil antara fase dispers A/M dan fase air eksternal, viskositasnya dapat lebih

Dalam perusahaan yang telah pergi ke penggunaan tujuan kualitas strategis, proses penyebaran (lihat di bawah) akan membuat tujuan kualitas tambahan yang harus

William J Schull, Effects off Aetocic Radiatioi: Ae H alff-CCeitury off Studies ffroc H iroshica aid Nagasaki, 1995... Radiation Safety • Hiroshima

– Zat atau obat yg berasal dari tanaman a bukan tanaman, sintetis a semi sintetis yg dapat menyebabkan penurunan atau perubahan kesadaran, hilangnya rasa, mengurangi

Pertama, penyalurannya dijelaskan secara detil di website baik Global Qurban maupun Aksi Cepat Tanggap, seperti cara bayarnya yang cukup jelas,”