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