diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index 82974aa..050dd2e 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -4,6 +4,7 @@ namespace App\Entities\Projects; use App\Entities\Payments\Payment; use App\Entities\Projects\ProjectPresenter; +use App\Entities\Subscriptions\Subscription; use App\Entities\Users\User; use Illuminate\Database\Eloquent\Model; use Laracasts\Presenter\PresentableTrait; @@ -16,11 +17,26 @@ class Project extends Model { protected $guarded = ['id','created_at','updated_at']; // protected $dates = ['start_date','end_date']; - public function features() + public function allFeatures() { return $this->hasMany(Feature::class)->orderBy('position'); } + public function features() + { + return $this->hasMany(Feature::class)->orderBy('position')->whereTypeId(1); + } + + public function additionalFeatures() + { + return $this->hasMany(Feature::class)->orderBy('position')->whereTypeId(2); + } + + public function subscriptions() + { + return $this->hasMany(Subscription::class); + } + public function payments() { return $this->hasMany(Payment::class)->orderBy('date','desc'); diff --git a/app/Entities/Projects/ProjectsRepository.php b/app/Entities/Projects/ProjectsRepository.php index 669e1ee..fdd8990 100755 --- a/app/Entities/Projects/ProjectsRepository.php +++ b/app/Entities/Projects/ProjectsRepository.php @@ -81,21 +81,22 @@ class ProjectsRepository extends BaseRepository $project->payments()->delete(); // Delete features tasks - $featureIds = $project->features->lists('id')->all(); + $featureIds = $project->allFeatures->lists('id')->all(); DB::table('tasks')->whereIn('feature_id', $featureIds)->delete(); // Delete features - $project->features()->delete(); + $project->allFeatures()->delete(); // Delete project $project->delete(); + DB::commit(); return 'deleted'; } - public function getProjectFeatures($projectId) + public function getProjectFeatures($projectId, $type = 1) { - return Feature::whereProjectId($projectId)->orderBy('position')->with('worker','tasks')->get(); + return Feature::whereProjectId($projectId)->whereTypeId($type)->orderBy('position')->with('worker','tasks')->get(); } public function updateStatus($statusId, $projectId) diff --git a/app/Entities/Subscriptions/Subscription.php b/app/Entities/Subscriptions/Subscription.php index 18213d3..8158418 100755 --- a/app/Entities/Subscriptions/Subscription.php +++ b/app/Entities/Subscriptions/Subscription.php @@ -25,4 +25,9 @@ class Subscription extends Model { return $this->belongsTo(User::class,'customer_id'); } + public function status() + { + return $this->status_id ? 'Aktif' : 'Non Aktif'; + } + } diff --git a/app/Entities/Subscriptions/SubscriptionsRepository.php b/app/Entities/Subscriptions/SubscriptionsRepository.php index ffc64ad..ce7a28d 100755 --- a/app/Entities/Subscriptions/SubscriptionsRepository.php +++ b/app/Entities/Subscriptions/SubscriptionsRepository.php @@ -18,6 +18,8 @@ class SubscriptionsRepository extends BaseRepository public function getAll($q) { - return $this->model->orderBy('due_date')->where('domain_name','like','%' . $q . '%')->paginate($this->_paginate); + return $this->model->orderBy('due_date') + ->where('domain_name','like','%' . $q . '%') + ->paginate($this->_paginate); } } \ No newline at end of file diff --git a/app/Http/Controllers/Projects/ProjectsController.php b/app/Http/Controllers/Projects/ProjectsController.php index ae862dd..736b282 100755 --- a/app/Http/Controllers/Projects/ProjectsController.php +++ b/app/Http/Controllers/Projects/ProjectsController.php @@ -84,19 +84,27 @@ class ProjectsController extends Controller { return redirect()->route('projects.index'); } - public function features($projectId) + public function features(Request $req, $projectId) { + $featureType = $req->get('feature_type', 1); $project = $this->repo->requireById($projectId); - $features = $this->repo->getProjectFeatures($projectId); + $features = $this->repo->getProjectFeatures($projectId, $featureType); return view('projects.features', compact('project','features')); } - public function featuresExport($projectId, $type = 'excel') + public function subscriptions($projectId) { $project = $this->repo->requireById($projectId); - $features = $this->repo->getProjectFeatures($projectId); + return view('projects.subscriptions', compact('project')); + } + + public function featuresExport(Request $req, $projectId, $exportType = 'excel') + { + $featureType = $req->get('feature_type', 1); + $project = $this->repo->requireById($projectId); + $features = $this->repo->getProjectFeatures($projectId, $featureType); // return view('projects.features-export', compact('project','features')); - if ($type == 'excel') { + if ($exportType == 'excel') { \Excel::create(str_slug(trans('project.features') . '-' . $project->name), function($excel) use ($project, $features) { $excel->sheet('testng', function($sheet) use ($project, $features) { $sheet->loadView('projects.features-export-excel',compact('project','features')); diff --git a/app/Http/Controllers/References/OptionsController.php b/app/Http/Controllers/References/OptionsController.php index 0a7afde..4d5d9ff 100755 --- a/app/Http/Controllers/References/OptionsController.php +++ b/app/Http/Controllers/References/OptionsController.php @@ -20,8 +20,13 @@ class OptionsController extends Controller { public function index(Request $req) { + $editableOption = null; $options = $this->repo->getAll(); - return view('options.index',compact('options')); + + if (in_array($req->get('action'), ['del','edit']) && $req->has('id')) + $editableOption = $this->repo->requireById($req->get('id')); + + return view('options.index',compact('options','editableOption')); } public function create() diff --git a/app/Http/routes/projects.php b/app/Http/routes/projects.php index f90e0fd..9744c42 100644 --- a/app/Http/routes/projects.php +++ b/app/Http/routes/projects.php @@ -8,6 +8,7 @@ Route::group(['middleware' => ['web','role:admin'], 'namespace' => 'Projects'], Route::get('projects/{id}/features', ['as'=>'projects.features', 'uses'=>'ProjectsController@features']); Route::get('projects/{id}/features-export/{type?}', ['as'=>'projects.features-export', 'uses'=>'ProjectsController@featuresExport']); Route::get('projects/{id}/payments', ['as'=>'projects.payments', 'uses'=>'ProjectsController@payments']); + Route::get('projects/{id}/subscriptions', ['as'=>'projects.subscriptions', 'uses'=>'ProjectsController@subscriptions']); Route::post('projects/{id}/features-reorder', ['as'=>'projects.features-reorder', 'uses'=>'ProjectsController@featuresReorder']); Route::patch('projects/{id}/status-update', ['as'=>'projects.status-update', 'uses'=>'ProjectsController@statusUpdate']); Route::resource('projects','ProjectsController'); diff --git a/config/backup-manager.php b/config/backup-manager.php new file mode 100644 index 0000000..f2dd3dc --- /dev/null +++ b/config/backup-manager.php @@ -0,0 +1,61 @@ + [ + 'type' => 'Local', + 'root' => storage_path('app'), + ], + 's3' => [ + 'type' => 'AwsS3', + 'key' => '', + 'secret' => '', + 'region' => 'us-east-1', + 'bucket' => '', + 'root' => '', + ], + 'gcs' => [ + 'type' => 'Gcs', + 'key' => '', + 'secret' => '', + 'bucket' => '', + 'root' => '', + ], + 'rackspace' => [ + 'type' => 'Rackspace', + 'username' => '', + 'key' => '', + 'container' => '', + 'zone' => '', + 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/', + 'root' => '', + ], + 'dropbox' => [ + 'type' => 'Dropbox', + 'token' => '', + 'key' => '', + 'secret' => '', + 'app' => '', + 'root' => '', + ], + 'ftp' => [ + 'type' => 'Ftp', + 'host' => '', + 'username' => '', + 'password' => '', + 'port' => 21, + 'passive' => true, + 'ssl' => true, + 'timeout' => 30, + 'root' => '', + ], + 'sftp' => [ + 'type' => 'Sftp', + 'host' => '', + 'username' => '', + 'password' => '', + 'port' => 21, + 'timeout' => 10, + 'privateKey' => '', + 'root' => '', + ], +]; diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index f26be01..a8afcc0 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -75,6 +75,7 @@ $factory->define(Subscription::class, function (Faker\Generator $faker) { return [ 'project_id' => factory(Project::class)->create()->id, + 'status_id' => 1, 'domain_name' => 'www.' . str_random(10) . '.com', 'domain_price' => 125000, 'epp_code' => str_random(10), diff --git a/resources/lang/id/option.php b/resources/lang/id/option.php index f8f7a83..ee2f41f 100644 --- a/resources/lang/id/option.php +++ b/resources/lang/id/option.php @@ -1,9 +1,11 @@ 'Daftar Option', 'create' => 'Buat Option Baru', 'created' => 'Option baru berhasil dibuat', 'updated' => 'Option berhasil disimpan', + 'delete' => 'Hapus Option', 'deleted' => 'Option berhasil dihapus', 'undeleted' => 'Option tidak berhasil dihapus', 'key' => 'Key', diff --git a/resources/lang/id/project.php b/resources/lang/id/project.php index cde5bd1..6689479 100644 --- a/resources/lang/id/project.php +++ b/resources/lang/id/project.php @@ -26,6 +26,7 @@ return [ 'features' => 'Daftar Fitur', 'features_export_html' => 'Export Fitur ke HTML', 'features_export_excel' => 'Export Fitur ke Excel', + 'subscriptions' => 'Langganan', 'worker' => 'Pekerja', 'status' => 'Status Project', 'payments' => 'Pembayaran', diff --git a/resources/views/features/add-from-other-project.blade.php b/resources/views/features/add-from-other-project.blade.php index 10f2a08..5e9be76 100755 --- a/resources/views/features/add-from-other-project.blade.php +++ b/resources/views/features/add-from-other-project.blade.php @@ -26,7 +26,7 @@ @if ($selectedProject) {!! Form::open(['route'=>['features.store-from-other-project', $project->id]]) !!}