Browse Source

Add new Agency entity, create user's agency on registration

Update readme.md file
pull/1/head
Nafies Luthfi 8 years ago
parent
commit
9a664dba09
  1. 10
      app/Entities/Agencies/Agency.php
  2. 8
      app/Http/Controllers/AuthController.php
  3. 24
      app/Http/Requests/Accounts/RegisterRequest.php
  4. 37
      database/migrations/2017_10_28_170121_create_agencies_table.php
  5. 110
      readme.md
  6. 33
      resources/lang/id/agency.php
  7. 12
      resources/views/auth/register.blade.php
  8. 13
      tests/Feature/Auth/MemberRegistrationTest.php

10
app/Entities/Agencies/Agency.php

@ -0,0 +1,10 @@
<?php
namespace App\Entities\Agencies;
use Illuminate\Database\Eloquent\Model;
class Agency extends Model
{
protected $fillable = ['name', 'email', 'address', 'phone', 'website', 'owner_id'];
}

8
app/Http/Controllers/AuthController.php

@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\Entities\Agencies\Agency;
use App\Entities\Users\User;
use App\Http\Requests\Accounts\RegisterRequest;
use Auth;
@ -34,6 +35,13 @@ class AuthController extends Controller
$user->assignRole('worker');
Auth::login($user);
$agency = Agency::create([
'name' => $request->get('agency_name'),
'email' => $request->get('email'),
'website' => $request->get('agency_website'),
'owner_id' => $user->id,
]);
flash()->success(trans('auth.welcome', ['name' => $user->name]));
return redirect()->route('home');
}

24
app/Http/Requests/Accounts/RegisterRequest.php

@ -24,9 +24,11 @@ class RegisterRequest extends Request
public function rules()
{
return [
'name' => 'required',
'email' => 'required|email|unique:users,email',
'password' => 'required|between:6,15|confirmed',
'agency_name' => 'required|max:255',
'agency_website' => 'nullable|url|max:255',
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users,email|unique:agencies,email',
'password' => 'required|between:6,15|confirmed',
'password_confirmation' => 'required',
];
}
@ -34,13 +36,15 @@ class RegisterRequest extends Request
public function messages()
{
return [
'name.required' => 'Nama harus diisi.',
'email.required' => 'Email harus diisi.',
'email.email' => 'Email tidak valid.',
'email.unique' => 'Email ini sudah terdaftar.',
'password.required' => 'Password harus diisi.',
'password.between' => 'Password baru harus antara 6 - 15 karakter.',
'password.confirmed' => 'Konfirmasi password tidak sesuai.',
'agency_name.required' => 'Nama Agensi harus diisi.',
'agency_website.url' => 'Alamat Website Agensi tidak valid.',
'name.required' => 'Nama harus diisi.',
'email.required' => 'Email harus diisi.',
'email.email' => 'Email tidak valid.',
'email.unique' => 'Email ini sudah terdaftar.',
'password.required' => 'Password harus diisi.',
'password.between' => 'Password baru harus antara 6 - 15 karakter.',
'password.confirmed' => 'Konfirmasi password tidak sesuai.',
'password_confirmation.required' => 'Konfirmasi password harus diisi.',
];
}

37
database/migrations/2017_10_28_170121_create_agencies_table.php

@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateAgenciesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('agencies', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('address')->nullable();
$table->string('phone')->nullable();
$table->string('website')->nullable();
$table->unsignedInteger('owner_id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('agencies');
}
}

110
readme.md

@ -1,3 +1,111 @@
# Project Management Office
Project Management Office, is a project management tool for freelancers and agencies to manage their project professionally.
> # PMO.web.id
Project Management Office, is a project management tool for freelancers and agencies to manage their project professionally.
Sebuah aplikasi untuk membantu freelancer dan agensi mengelola project web
## Konsep
### 1. Agency
Agency adalah lembaga yang mengelola dan mengerjakan project, Agency tidak terbatas untuk perusahaan saja, freelancer juga dapat membuat agency
1. User yang mendaftar menjadi seorang admin dari sebuah agency
2. Agency memiliki dari beberapa project
3. Agency memiliki dari beberapa user (pekerja)
4. Agency memiliki dari beberapa vendor
5. Agency memiliki beberapa customer
6. Seorang User yang telah terdaftar sebagai Worker dapat membuat Agency sendiri, untuk mengelola project sendiri.
#### Relasi
1. User has 0 to 1 Agency; Agency belongs to 1 User
2. Agency has 0 to many projects; Project belongs to an Agency
3. Agency has 1 to many workers; Worker (User) belongs to an Agency
4. Agency has 0 to many vendor; Vendor belongs to an Agency
5. Agency has 0 to many customer; Customer belongs to an Agency
### 2. Project
Project adalah pekerjaan yang dikerjakan oleh agency untuk seorang customernya
1. Sebuah project adalah milik sebuah Agency
2. Sebuah project adalah milik sebuah Customer
3. Project memiliki beberapa Fitur/Item pekerjaan
4. Project memiliki beberapa Invoice
5. Project memiliki beberapa Pembayaran (dengan atau tanpa invoice)
6. Project memiliki beberapa Meeting (pertemuan dengan customer)
#### Relasi
1. Project belongs to an Agency; Agency has 0 to many Projects
2. Project belongs to a Customer; Customer has 0 to many Projects
3. Project has 0 to many Features/Project Items; Feature belongs to a Project
4. Project has 0 to many Invoices; Invoice belongs to a Project
5. Project has 0 to many Payments; Payment belongs to a Project
6. Project has 0 to many Meetings; Meeting belongs to a Project
### 3. Fitur/Item pekerjaan
1. Fitur memiliki harga/biaya
2. Fitur memiliki seorang pekerja/PIC
3. Fitur memiliki beberapa sub-fitur
4. Fitur memiliki beberapa task (semacam checklist pekerjaan)
5. Fitur memiliki Atribut:
- Nama fitur
- Deskripsi
- PIC (pekerja/worker)
- Biaya/Fee
- Prioritas
- tanggal mulai
- tanggal selesai
- tanggal batal
6. Fitur memiliki beberapa dependency terhadap fitur lain
- Misal Fitur A merupakan dependency dari Fitur B
- Maka Fitur A harus diselesaikan dulu sebelum fitur B dikerjakan
7. Progress pengerjaan fitur dihitung otomatis berdasarkan rata-rata % Progress task
8. Fitur dapat diurutkan berdasarkan prioritas
### 4. Task
Task adalah item tugas yang dilakukan oleh PIC/Pekerja untuk memgerjakan 1 fitur
1. Task dimiliki oleh sebuah Fitur/Item pekerjaan
2. Task dapat diurutkan berdasarkan prioritas
3. Task memiliki Atribut :
- Nama Task
- Deskripsi
- Progress (0 - 100 %)
- Prioritas
### 5. Meeting
Meeting adalah pertemuan yang dilakukan bersama Customer
1. Meeting dilakukan untuk 1 project
2. Meeting memiliki Berita Acara Pertemuan (BAP)
3. BAP terdiri dari :
- tanggal
- daftar hadir
- agenda
- hasil pertemuan
### 6. Invoice
Invoice adalah tagihan pembayaran yang dibuat oleh Agency kepada diberikan Customer.
1. Invoice adalah milik sebuah project
2. Invoice memiliki beberapa pembayaran (misal invoice dibayar dicicil)
3. Invoice bisa diupdate status Lunas
### 7. Pembayaran
Adalah pembayaran yang dilakukan dari Customer kepada Agency (pemasukan), atau Agency kepada vendor (pengeluaran).
1. Project memiliki beberapa Pembayaran
2. Pembayaran memiliki 1 Project
3. Pembayaran memiliki 1 Invoice
4. Pembayaran dapat cetak Kuitansi/Bukti pembayaran

33
resources/lang/id/agency.php

@ -0,0 +1,33 @@
<?php
return [
// Labels
'agency' => 'Agensi',
'list' => 'Daftar Agensi',
'search' => 'Cari Agensi',
'not_found' => 'Agensi tidak ditemukan',
'empty' => 'Belum ada Agensi',
'back_to_show' => 'Kembali ke detail Agensi',
'back_to_index' => 'Kembali ke daftar Agensi',
// Actions
'create' => 'Input Agensi Baru',
'created' => 'Input Agensi baru telah berhasil.',
'show' => 'Detail Agensi',
'edit' => 'Edit Agensi',
'update' => 'Update Agensi',
'updated' => 'Update data Agensi telah berhasil.',
'delete' => 'Hapus Agensi',
'delete_confirm' => 'Anda yakin akan menghapus Agensi ini?',
'deleted' => 'Hapus data Agensi telah berhasil.',
'undeleted' => 'Data Agensi gagal dihapus.',
'undeleteable' => 'Data Agensi tidak dapat dihapus.',
// Attributes
'name' => 'Nama Agensi',
'email' => 'Email Agensi',
'website' => 'Website Agensi',
'address' => 'Alamat Agensi',
'phone' => 'Telp. Agensi',
'owner' => 'Pemilik Agensi',
];

12
resources/views/auth/register.blade.php

@ -9,6 +9,18 @@
<div class="panel-body">
@include('auth.partials._notifications')
{!! Form::open(['route'=>'auth.register','class'=>'form-horizontal']) !!}
<div class="form-group {!! $errors->has('agency_name') ? 'has-error' : ''; !!}">
{!! Form::label('agency_name', trans('agency.name'), ['class'=>'col-md-4 control-label']) !!}
<div class="col-md-6">
{!! Form::text('agency_name', null, ['class'=>'form-control','placeholder' => trans('agency.name')]) !!}
</div>
</div>
<div class="form-group {!! $errors->has('agency_website') ? 'has-error' : ''; !!}">
{!! Form::label('agency_website', trans('agency.website'), ['class'=>'col-md-4 control-label']) !!}
<div class="col-md-6">
{!! Form::text('agency_website', null, ['class'=>'form-control','placeholder' => trans('agency.website')]) !!}
</div>
</div>
<div class="form-group {!! $errors->has('name') ? 'has-error' : ''; !!}">
{!! Form::label('name', trans('app.name'), ['class'=>'col-md-4 control-label']) !!}
<div class="col-md-6">

13
tests/Feature/Auth/MemberRegistrationTest.php

@ -44,12 +44,25 @@ class MemberRegistrationTest extends TestCase
{
$this->visit(route('auth.register'));
$this->submitForm(trans('auth.register'), [
'agency_name' => 'Nama Agency',
'name' => 'Nama Member',
'email' => 'email@mail.com',
'password' => 'password.111',
'password_confirmation' => 'password.111',
]);
$this->seePageIs(route('home'));
$this->see(trans('auth.welcome', ['name' => 'Nama Member']));
$this->seeInDatabase('users', [
'name' => 'Nama Member',
'email' => 'email@mail.com',
]);
$this->seeInDatabase('agencies', [
'name' => 'Nama Agency',
'email' => 'email@mail.com',
]);
}
}
Loading…
Cancel
Save