feat-add-coa-master-to-connect-kasmasuk
WMS API/ERP-API/pipeline/head This commit looks good
Details
WMS API/ERP-API/pipeline/head This commit looks good
Details
This commit is contained in:
parent
16ca1e9c01
commit
872942d770
|
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Coa;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CoaController extends Controller
|
||||
{
|
||||
// Ambil semua data COA
|
||||
public function index()
|
||||
{
|
||||
return response()->json(Coa::all(), 200);
|
||||
}
|
||||
|
||||
// Simpan COA baru
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'code' => 'required|string|unique:coas,code',
|
||||
'name' => 'required|string',
|
||||
]);
|
||||
|
||||
$coa = Coa::create($request->all());
|
||||
|
||||
return response()->json($coa, 201);
|
||||
}
|
||||
|
||||
// Ambil detail COA
|
||||
public function show($id)
|
||||
{
|
||||
$coa = Coa::findOrFail($id);
|
||||
return response()->json($coa, 200);
|
||||
}
|
||||
|
||||
// Update COA
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$coa = Coa::findOrFail($id);
|
||||
|
||||
$request->validate([
|
||||
'code' => 'sometimes|string|unique:coas,code,' . $id,
|
||||
'name' => 'sometimes|string',
|
||||
]);
|
||||
|
||||
$coa->update($request->all());
|
||||
|
||||
return response()->json($coa, 200);
|
||||
}
|
||||
|
||||
// Hapus COA
|
||||
public function destroy($id)
|
||||
{
|
||||
Coa::destroy($id);
|
||||
return response()->json(['message' => 'Akun bank berhasil dihapus'], 200);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
|
||||
class Coa extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $fillable = ['code', 'name'];
|
||||
|
||||
/**
|
||||
* Relasi ke Kas Masuk (satu akun bisa memiliki banyak transaksi).
|
||||
*/
|
||||
public function kasMasuks(): HasMany
|
||||
{
|
||||
return $this->hasMany(KasMasuk::class, 'coa_id');
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use App\Models\Coa;
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
/**
|
||||
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Coa>
|
||||
*/
|
||||
class CoaFactory extends Factory
|
||||
{
|
||||
protected $model = Coa::class;
|
||||
|
||||
public function definition()
|
||||
{
|
||||
return [
|
||||
'code' => $this->faker->unique()->numerify('10#'), // 101, 102, 103, dll
|
||||
'name' => $this->faker->company(),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration {
|
||||
public function up()
|
||||
{
|
||||
Schema::create('coas', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('code')->unique(); // Kode akun bank
|
||||
$table->string('name'); // Nama akun bank
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('coas');
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
use App\Models\Coa;
|
||||
|
||||
|
||||
class CoaSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
Coa::insert([
|
||||
['code' => '101', 'name' => 'Kas Besar'],
|
||||
['code' => '102', 'name' => 'Kas Kecil'],
|
||||
['code' => '103', 'name' => 'Bank BCA'],
|
||||
['code' => '104', 'name' => 'Bank Mandiri'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use App\Http\Controllers\KasMasukController;
|
||||
use App\Http\Controllers\CoaController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
@ -24,3 +25,8 @@ Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
|
|||
Route::middleware('auth:sanctum')->group(function () {
|
||||
Route::apiResource('kas-masuk', KasMasukController::class);
|
||||
});
|
||||
|
||||
|
||||
Route::middleware('auth:sanctum')->group(function () {
|
||||
Route::apiResource('coas', CoaController::class);
|
||||
});
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
<?php
|
||||
|
||||
namespace Tests\Unit;
|
||||
|
||||
use Tests\TestCase;
|
||||
use App\Models\Coa;
|
||||
use App\Models\User;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
|
||||
class CoaApiTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
protected $user;
|
||||
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
$this->user = User::factory()->create(); // ✅ Create test user
|
||||
}
|
||||
|
||||
|
||||
public function test_can_get_all_coas()
|
||||
{
|
||||
Coa::factory()->count(3)->create();
|
||||
|
||||
$response = $this->actingAs($this->user)->getJson('/api/coas'); // ✅ Authenticate request
|
||||
|
||||
$response->assertStatus(200)
|
||||
->assertJsonCount(3);
|
||||
}
|
||||
|
||||
|
||||
public function test_can_create_coa()
|
||||
{
|
||||
$coaData = [
|
||||
'code' => '105',
|
||||
'name' => 'Bank BRI'
|
||||
];
|
||||
|
||||
$response = $this->actingAs($this->user)->postJson('/api/coas', $coaData);
|
||||
|
||||
$response->assertStatus(201)
|
||||
->assertJson($coaData);
|
||||
|
||||
$this->assertDatabaseHas('coas', $coaData);
|
||||
}
|
||||
|
||||
|
||||
public function test_can_get_single_coa()
|
||||
{
|
||||
$coa = Coa::factory()->create();
|
||||
|
||||
$response = $this->actingAs($this->user)->getJson("/api/coas/{$coa->id}");
|
||||
|
||||
$response->assertStatus(200)
|
||||
->assertJson([
|
||||
'id' => $coa->id,
|
||||
'code' => $coa->code,
|
||||
'name' => $coa->name
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
public function test_can_update_coa()
|
||||
{
|
||||
$coa = Coa::factory()->create();
|
||||
|
||||
$updatedData = [
|
||||
'code' => '106',
|
||||
'name' => 'Bank Permata'
|
||||
];
|
||||
|
||||
$response = $this->actingAs($this->user)->putJson("/api/coas/{$coa->id}", $updatedData);
|
||||
|
||||
$response->assertStatus(200)
|
||||
->assertJson($updatedData);
|
||||
|
||||
$this->assertDatabaseHas('coas', $updatedData);
|
||||
}
|
||||
|
||||
|
||||
public function test_can_delete_coa()
|
||||
{
|
||||
$coa = Coa::factory()->create();
|
||||
|
||||
$response = $this->actingAs($this->user)->deleteJson("/api/coas/{$coa->id}");
|
||||
|
||||
$response->assertStatus(200)
|
||||
->assertJson(['message' => 'Akun bank berhasil dihapus']);
|
||||
|
||||
$this->assertDatabaseMissing('coas', ['id' => $coa->id]);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue