From 06065e3d527497fc6bb398cf18f083791084b5d4 Mon Sep 17 00:00:00 2001 From: W <W> Date: Sun, 24 Feb 2019 16:05:51 +0700 Subject: [PATCH] adding history api --- .rnd | Bin 0 -> 1024 bytes app/GroupHistory.php | 55 ++++++++++++ .../Controllers/GroupHistoryController.php | 24 +++++ app/Tasks.php | 82 +++++++++++++++++- ...2_24_054218_create_group_history_table.php | 34 ++++++++ routes/api.php | 2 + 6 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 .rnd create mode 100644 app/GroupHistory.php create mode 100644 app/Http/Controllers/GroupHistoryController.php create mode 100644 database/migrations/2019_02_24_054218_create_group_history_table.php diff --git a/.rnd b/.rnd new file mode 100644 index 0000000000000000000000000000000000000000..8aa16cfcdb5cb2710c78dbfa194deaaa34a286d1 GIT binary patch literal 1024 zcmV+b1poU!tN8^81Xx7t*uh37-M2v-k#;@|Pl+D#g@1A5-=5wwdXkfnNb$cL(6F0h z28n^d>(an}BIhmwKaeWuW?8t3FVotJPp^n2S97|EYV*9np8xGSIzP|q3aIgo%icL> zp*Q%D{-_8uU?44gOtu~mbcCZ>)ClSkF>Nq_3k)qvMI2OoEu6h0m-yI<jbXu+MZWPV zrprsier}<k3&?(n(2r>LljHQ&+4aKvwWxYh5DS({E~{+fUilW!XD<#dSN^eCC!g#6 zNz%7QGco7GW&_N0_W!VpGGH(qoibe@VN4sP^;}2oa`gp??6M~L%(sAIT0%XmzFGj? z!4G#fU$<mCM4MLj*5fj>g+QstvYoXzUQ`mhaQ*V7<kf0J+FkB?I1z#BMW#FTYR4Ab z0&(%>Mhrq>c3$VSt?7JYH6`EZPP&`~134t^J2A#Rv~d5w2%po|fgnFc-TL#PAR_AY z&&XVd<=D*^X<}@|1(t;;Zf~V;I<G59K7(+$t=&zXEkqOM3TCt$A|uOWHVsWU6^+Ef z+1Mz;Pu78cI9lGVs)CsIEaOu*empWe4^Xx#A%ZT<f)Efo6S`(&)6o{Lmby_wnH;94 zA2jx3hJL~az=^y}$5tPW`3q?93e>^OdM7jw?C5HZ_Ih%?iTV_{S1@(~rGb?Lr?}-5 zfNyMFn9nR19ynZy?GUEV-dXHyrTtN*MaGQCqQB2{dqI>&`hUqwS2$Fwsw3|QE=^~| zK)D8C;hBDh7bjMpjf+B>-)~b#2T&)M_Xu-$j{EB!(t0u`P%-+5<udZYF0e7-TOsY# zL`zF&7=6V$qb>dif`}HdcCe4*i$7Ps(e3Vdfj5Z=bVZ!U!iDkrvQ^BuqPM5DeE_gZ zmK6leGp|mvUt#sh(vSRp3umX>qI&#kWc0!9XR?jb7*@MJYe=s->&%7|&l~!#O-tfr z-?Hg>5PRLp`6W6}fjWbJ8z|C_%6iaWG9NjK!^g2CLg4V|qr#?AzBQkTEX(?dF-D@4 zdT4Ayt1MA=g6-1?j`GPf!guspKCJ--g}-%M{L{)n(}VFUgOvMYlAk0Uf%xcF#8T{B zpt!v+uLo14t)t}E6|>TI?55$EkJz7~_-US{M{xvIvtUFTSlF8}0XuF9I0Tc-kLMMy ztBlcu2F+5tErs}0XB~ey9b?tXJLywhUt%4(lXi2hi=K+kK!Y#TQ}l=rc1Efy8*f3i zl>6mf+8r=+H36z(1b9~79=lzGvLvDpQxwa(nLXT-Y$2!h)HRQrU@Ggm`(3Lx_>v4g uygWghzfR4*yIB}M9BPxRR!)YQ9O3Wyz*7q#xm5(+A%QLBD{UXusuJc~1p^EK literal 0 HcmV?d00001 diff --git a/app/GroupHistory.php b/app/GroupHistory.php new file mode 100644 index 0000000..4fb7400 --- /dev/null +++ b/app/GroupHistory.php @@ -0,0 +1,55 @@ +<?php + +namespace App; + +use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Builder; +class GroupHistory extends Model +{ + // + protected $table = 'group_history'; + protected $primaryKey = ['group_id', 'tanggal']; + protected $fillable = [ + 'group_id', 'score_sisa', 'tanggal' + ]; + public $incrementing = false; + + /** + * Set the keys for a save update query. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + protected function setKeysForSaveQuery(Builder $query) + { + $keys = $this->getKeyName(); + if(!is_array($keys)){ + return parent::setKeysForSaveQuery($query); + } + + foreach($keys as $keyName){ + $query->where($keyName, '=', $this->getKeyForSaveQuery($keyName)); + } + + return $query; + } + + /** + * Get the primary key value for a save query. + * + * @param mixed $keyName + * @return mixed + */ + protected function getKeyForSaveQuery($keyName = null) + { + if(is_null($keyName)){ + $keyName = $this->getKeyName(); + } + + if (isset($this->original[$keyName])) { + return $this->original[$keyName]; + } + + return $this->getAttribute($keyName); + } +} diff --git a/app/Http/Controllers/GroupHistoryController.php b/app/Http/Controllers/GroupHistoryController.php new file mode 100644 index 0000000..121d668 --- /dev/null +++ b/app/Http/Controllers/GroupHistoryController.php @@ -0,0 +1,24 @@ +<?php + +namespace App\Http\Controllers; + +use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; +class GroupHistoryController extends Controller +{ + // + public function getHistory($groupId) { + $history = DB::table('group_history') + ->select('score_sisa','tanggal') + ->where([ + 'group_id' => $groupId + ]) + ->orderBy('tanggal', 'asc') + ->get(); + + return response(json_encode([ + 'data' => $history->toArray(), + 'statusMessage' => 'success' + ]), 200); + } +} diff --git a/app/Tasks.php b/app/Tasks.php index 2ecce70..364c3a9 100644 --- a/app/Tasks.php +++ b/app/Tasks.php @@ -3,7 +3,9 @@ namespace App; use Illuminate\Database\Eloquent\Model; - +use App\GroupHistory; +use Illuminate\Support\Facades\Config; +use Illuminate\Support\Facades\DB; class Tasks extends Model { @@ -20,4 +22,82 @@ class Tasks extends Model public function pic() { return $this->hasOne('App\TasksMember', 'task_id'); } + + + public static function boot() { + parent::boot(); + static::created(function (Tasks $item) { + if ($item->kanban_status !== Config::get('constants.KANBAN_STATUS.PRODUCT_BACKLOG') && $item->kanban_status !== Config::get('constants.KANBAN_STATUS.DONE')) { + $groupHistory = GroupHistory::where([ + 'group_id' => $item->group_id, + 'tanggal' => date("Y-m-d") + ])->first(); + if (is_null($groupHistory)) { + $groupWorkHour = DB::table('tasks') + ->select('group_id', DB::raw('SUM(work_hour) as total_work_hour')) + ->where([ + ['group_id' , '=', $item->group_id], + ['kanban_status', '<>', Config::get('constants.KANBAN_STATUS.PRODUCT_BACKLOG')], + ['kanban_status', '<>', Config::get('constants.KANBAN_STATUS.DONE')] + ]) + ->groupBy('group_id')->get()->first(); + $score_sisa = 0; + if (!is_null($groupWorkHour)) { + $score_sisa = $groupWorkHour->total_work_hour; + } + $score_sisa = $score_sisa < 0 ? 0 : $score_sisa; + GroupHistory::create([ + 'group_id' => $item->group_id, + 'tanggal' => date("Y-m-d"), + 'score_sisa' => $score_sisa + ]); + } else { + $score_sisa = $groupHistory->score_sisa + $item->work_hour; + $score_sisa = $score_sisa < 0 ? 0 : $score_sisa; + $groupHistory->score_sisa = $score_sisa; + $groupHistory->save(); + } + } + }); + static::updating(function (Tasks $item) { + $taskNow = Tasks::where([ + 'id' => $item->id + ])->first(); + if ( !is_null($taskNow) && $taskNow->kanban_status != Config::get('constants.KANBAN_STATUS.DONE') && $item->kanban_status == Config::get('constants.KANBAN_STATUS.DONE')) { + $groupHistory = GroupHistory::where([ + 'group_id' => $item->group_id, + 'tanggal' => '2019-03-24' + ])->first(); + if (is_null($groupHistory)) { + $groupWorkHour = DB::table('tasks') + ->select('group_id', DB::raw('SUM(work_hour) as total_work_hour')) + ->where([ + ['group_id' , '=', $item->group_id], + ['kanban_status', '<>', Config::get('constants.KANBAN_STATUS.PRODUCT_BACKLOG')], + ['kanban_status', '<>', Config::get('constants.KANBAN_STATUS.DONE')] + ]) + ->groupBy('group_id')->get()->first(); + $score_sisa = 0; + if (!is_null($groupWorkHour)) { + $score_sisa = $groupWorkHour->total_work_hour - $item->work_hour; + } + $score_sisa = $score_sisa < 0 ? 0 : $score_sisa; + GroupHistory::create([ + 'group_id' => $item->group_id, + 'tanggal' => '2019-03-24', + 'score_sisa' => $score_sisa + ]); + } else { + $score_sisa = $groupHistory->score_sisa - $item->work_hour; + $score_sisa = $score_sisa < 0 ? 0 : $score_sisa; + $groupHistory->score_sisa = $score_sisa; + $groupHistory->save(); + } + } + }); + } + + // public function loggingInsertHistory(Tasks $item){ + + // } } diff --git a/database/migrations/2019_02_24_054218_create_group_history_table.php b/database/migrations/2019_02_24_054218_create_group_history_table.php new file mode 100644 index 0000000..f695dcb --- /dev/null +++ b/database/migrations/2019_02_24_054218_create_group_history_table.php @@ -0,0 +1,34 @@ +<?php + +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Database\Migrations\Migration; + +class CreateGroupHistoryTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('group_history', function (Blueprint $table) { + $table->unsignedInteger('group_id'); + $table->unsignedInteger('score_sisa'); + $table->date('tanggal'); + $table->primary(['group_id', 'tanggal']); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('group_history'); + } +} diff --git a/routes/api.php b/routes/api.php index 03b7208..b6edc48 100644 --- a/routes/api.php +++ b/routes/api.php @@ -54,6 +54,8 @@ Route::get('/group/{groupId}/members', 'GroupsMemberController@show'); //Bisa am Route::put('/group/{groupId}/member/{userId}', 'GroupsMemberController@update'); Route::delete('/group/{groupId}/member/{userId}', 'GroupsMemberController@delete'); +//Get History Group +Route::get('/group/{groupId}/history', 'GroupHistoryController@getHistory'); //Bisa ambil seluruh member dari suatu group // Route::group(['middleware' => 'auth:api'], function() // { -- GitLab