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\Http\Request;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use App\Http\Controllers\KasMasukController;
|
use App\Http\Controllers\KasMasukController;
|
||||||
|
use App\Http\Controllers\CoaController;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
@ -23,4 +24,9 @@ Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
|
||||||
|
|
||||||
Route::middleware('auth:sanctum')->group(function () {
|
Route::middleware('auth:sanctum')->group(function () {
|
||||||
Route::apiResource('kas-masuk', KasMasukController::class);
|
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