[Update] relasi item
This commit is contained in:
parent
b78a396a51
commit
29a1ebf713
@ -44,7 +44,7 @@ class ItemController extends Controller
|
||||
*/
|
||||
public function show(int $id)
|
||||
{
|
||||
$item = Item::with('produk.foto','nampan','itemTransaksi.transaksi')->findOrFail($id);
|
||||
$item = Item::with('produk.foto','nampan')->findOrFail($id);
|
||||
return response()->json($item);
|
||||
}
|
||||
|
||||
@ -83,7 +83,7 @@ class ItemController extends Controller
|
||||
|
||||
// custom methods
|
||||
public function brankasItem(){
|
||||
$items = Item::with('produk.foto','nampan')->whereNull('id_nampan')->belumTerjual()->get();
|
||||
$items = Item::with('produk.foto','nampan')->whereNull('id_nampan')->get();
|
||||
|
||||
return response()->json($items);
|
||||
}
|
||||
|
||||
@ -80,19 +80,16 @@ class TransaksiController extends Controller
|
||||
// if (!$item) {
|
||||
// throw new \Exception("Item dengan kode_item {$it['kode_item']} tidak ditemukan.");
|
||||
// }
|
||||
$item = Item::find($it['kode_item']);
|
||||
$item = Item::find($it['kode_item'])->with('produk')->first();
|
||||
|
||||
ItemTransaksi::create([
|
||||
'id_transaksi' => $transaksi->id,
|
||||
'id_item' => $item->id,
|
||||
'id_produk' => $item->produk->id,
|
||||
'harga_deal' => $it['harga_deal'],
|
||||
'posisi_asal' => $item->nampan ? 'Nampan ' . $item->nampan->nama : 'Brankas',
|
||||
]);
|
||||
|
||||
$item->update([
|
||||
'is_sold' => true,
|
||||
'id_nampan' => null,
|
||||
]);
|
||||
$item->delete();
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
|
||||
@ -13,8 +13,7 @@ class Item extends Model
|
||||
protected $fillable = [
|
||||
'id_produk',
|
||||
'id_nampan',
|
||||
'is_sold',
|
||||
'kode_item', // ✅ ditambahkan agar bisa diisi otomatis
|
||||
'kode_item',
|
||||
];
|
||||
|
||||
protected $hidden = ['created_at', 'updated_at', 'deleted_at'];
|
||||
@ -50,18 +49,8 @@ class Item extends Model
|
||||
return $this->belongsTo(Produk::class, 'id_produk');
|
||||
}
|
||||
|
||||
public function scopeBelumTerjual($query)
|
||||
{
|
||||
return $query->where('is_sold', false);
|
||||
}
|
||||
|
||||
public function nampan()
|
||||
{
|
||||
return $this->belongsTo(Nampan::class, 'id_nampan');
|
||||
}
|
||||
|
||||
public function itemTransaksi()
|
||||
{
|
||||
return $this->hasOne(ItemTransaksi::class, 'id_item');
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,7 +12,7 @@ class ItemTransaksi extends Model
|
||||
|
||||
protected $fillable = [
|
||||
'id_transaksi',
|
||||
'id_item',
|
||||
'id_produk',
|
||||
'harga_deal',
|
||||
'posisi_asal'
|
||||
];
|
||||
@ -24,8 +24,8 @@ class ItemTransaksi extends Model
|
||||
return $this->belongsTo(Transaksi::class, 'id_transaksi');
|
||||
}
|
||||
|
||||
public function item()
|
||||
public function produk()
|
||||
{
|
||||
return $this->belongsTo(Item::class, 'id_item');
|
||||
return $this->belongsTo(Produk::class, 'id_produk');
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,7 +19,6 @@ class ItemFactory extends Factory
|
||||
return [
|
||||
'id_produk' => \App\Models\Produk::factory(),
|
||||
'id_nampan' => null,
|
||||
'is_sold' => false,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
namespace Database\Factories;
|
||||
|
||||
use App\Models\Item;
|
||||
use App\Models\Produk;
|
||||
use App\Models\Transaksi;
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
|
||||
@ -20,7 +21,7 @@ class ItemTransaksiFactory extends Factory
|
||||
{
|
||||
return [
|
||||
'id_transaksi' => Transaksi::factory(),
|
||||
'id_item' => Item::factory(),
|
||||
'id_produk' => Produk::factory(),
|
||||
'harga_deal' => $this->faker->randomFloat(2, 100000, 5000000),
|
||||
'created_at' => now(),
|
||||
];
|
||||
|
||||
@ -15,7 +15,6 @@ return new class extends Migration
|
||||
$table->id();
|
||||
$table->foreignId('id_produk')->constrained('produks')->cascadeOnDelete();
|
||||
$table->foreignId('id_nampan')->nullable()->constrained('nampans');
|
||||
$table->boolean('is_sold')->default(false);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@ return new class extends Migration
|
||||
Schema::create('item_transaksis', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->foreignId('id_transaksi')->constrained('transaksis')->onDelete('cascade');
|
||||
$table->foreignId('id_item')->constrained('items');
|
||||
$table->foreignId('id_produk')->constrained('produks');
|
||||
$table->double('harga_deal');
|
||||
$table->string('posisi_asal', 100);
|
||||
$table->timestamps();
|
||||
|
||||
@ -64,7 +64,6 @@ class DatabaseSeeder extends Seeder
|
||||
$jumlah_item = rand(1, 20);
|
||||
Item::factory($jumlah_item)->create([
|
||||
'id_produk' => $produk->id,
|
||||
'is_sold' => false,
|
||||
]);
|
||||
});
|
||||
|
||||
@ -84,19 +83,16 @@ class DatabaseSeeder extends Seeder
|
||||
|
||||
Transaksi::factory(40)->create()->each(function ($transaksi) {
|
||||
$jumlah_item = rand(1, 2);
|
||||
$items = Item::where('is_sold', false)->inRandomOrder()->limit($jumlah_item)->get();
|
||||
$items = Item::with('produk')->inRandomOrder()->limit($jumlah_item)->get();
|
||||
if ($items->isEmpty()) return;
|
||||
$total_harga = $transaksi->total_harga;
|
||||
foreach ($items as $item) {
|
||||
$transaksi->itemTransaksi()->create([
|
||||
'id_item' => $item->id,
|
||||
'id_produk' => $item->produk->id,
|
||||
'harga_deal' => $item->produk->harga_jual,
|
||||
'posisi_asal' => $item->id_nampan ? 'Nampan ' . $item->nampan->nama : 'Brankas',
|
||||
]);
|
||||
$item->update([
|
||||
'id_nampan' => null,
|
||||
'is_sold' => true,
|
||||
]);
|
||||
$item->delete();
|
||||
$total_harga += $item->produk->harga_jual;
|
||||
}
|
||||
$transaksi->update(['total_harga' => $total_harga]);
|
||||
|
||||
@ -90,7 +90,7 @@
|
||||
{{ item.produk.nama }}
|
||||
</td>
|
||||
<td class="border border-B p-2 truncate max-w-[80px]">
|
||||
{{ item.posisi ? item.posisi : "Brankas" }}
|
||||
{{ item.nampan ? item.nampan.nama : "Brankas" }}
|
||||
</td>
|
||||
<td class="border border-B p-2 whitespace-nowrap">
|
||||
Rp{{ item.harga_deal.toLocaleString() }}
|
||||
@ -150,14 +150,15 @@ const inputItem = async () => {
|
||||
item.value = response.data;
|
||||
hargaJual.value = item.value.produk.harga_jual;
|
||||
|
||||
console.log(item.value);
|
||||
|
||||
if (item.value.is_sold) {
|
||||
throw new Error("Item sudah terjual");
|
||||
}
|
||||
if (pesanan.value.some((p) => p.id === item.value.id)) {
|
||||
throw new Error("Item sedang dipesan");
|
||||
}
|
||||
info.value = `Item dipilih: ${item.value.produk.nama} dari ${item.value.posisi ? item.value.posisi : "Brankas"
|
||||
}`;
|
||||
info.value = `Item dipilih: ${item.value.produk.nama} dari ${item.value.nampan ? 'Nampan ' + item.value.nampan.nama : "Brankas"}`;
|
||||
|
||||
infoTimeout = setTimeout(() => {
|
||||
info.value = "";
|
||||
|
||||
Loading…
Reference in New Issue
Block a user