[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)
|
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);
|
return response()->json($item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ class ItemController extends Controller
|
|||||||
|
|
||||||
// custom methods
|
// custom methods
|
||||||
public function brankasItem(){
|
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);
|
return response()->json($items);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -80,19 +80,16 @@ class TransaksiController extends Controller
|
|||||||
// if (!$item) {
|
// if (!$item) {
|
||||||
// throw new \Exception("Item dengan kode_item {$it['kode_item']} tidak ditemukan.");
|
// 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([
|
ItemTransaksi::create([
|
||||||
'id_transaksi' => $transaksi->id,
|
'id_transaksi' => $transaksi->id,
|
||||||
'id_item' => $item->id,
|
'id_produk' => $item->produk->id,
|
||||||
'harga_deal' => $it['harga_deal'],
|
'harga_deal' => $it['harga_deal'],
|
||||||
'posisi_asal' => $item->nampan ? 'Nampan ' . $item->nampan->nama : 'Brankas',
|
'posisi_asal' => $item->nampan ? 'Nampan ' . $item->nampan->nama : 'Brankas',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$item->update([
|
$item->delete();
|
||||||
'is_sold' => true,
|
|
||||||
'id_nampan' => null,
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|||||||
@ -13,8 +13,7 @@ class Item extends Model
|
|||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'id_produk',
|
'id_produk',
|
||||||
'id_nampan',
|
'id_nampan',
|
||||||
'is_sold',
|
'kode_item',
|
||||||
'kode_item', // ✅ ditambahkan agar bisa diisi otomatis
|
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $hidden = ['created_at', 'updated_at', 'deleted_at'];
|
protected $hidden = ['created_at', 'updated_at', 'deleted_at'];
|
||||||
@ -50,18 +49,8 @@ class Item extends Model
|
|||||||
return $this->belongsTo(Produk::class, 'id_produk');
|
return $this->belongsTo(Produk::class, 'id_produk');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function scopeBelumTerjual($query)
|
|
||||||
{
|
|
||||||
return $query->where('is_sold', false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function nampan()
|
public function nampan()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Nampan::class, 'id_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 = [
|
protected $fillable = [
|
||||||
'id_transaksi',
|
'id_transaksi',
|
||||||
'id_item',
|
'id_produk',
|
||||||
'harga_deal',
|
'harga_deal',
|
||||||
'posisi_asal'
|
'posisi_asal'
|
||||||
];
|
];
|
||||||
@ -24,8 +24,8 @@ class ItemTransaksi extends Model
|
|||||||
return $this->belongsTo(Transaksi::class, 'id_transaksi');
|
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 [
|
return [
|
||||||
'id_produk' => \App\Models\Produk::factory(),
|
'id_produk' => \App\Models\Produk::factory(),
|
||||||
'id_nampan' => null,
|
'id_nampan' => null,
|
||||||
'is_sold' => false,
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
namespace Database\Factories;
|
namespace Database\Factories;
|
||||||
|
|
||||||
use App\Models\Item;
|
use App\Models\Item;
|
||||||
|
use App\Models\Produk;
|
||||||
use App\Models\Transaksi;
|
use App\Models\Transaksi;
|
||||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||||
|
|
||||||
@ -20,7 +21,7 @@ class ItemTransaksiFactory extends Factory
|
|||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'id_transaksi' => Transaksi::factory(),
|
'id_transaksi' => Transaksi::factory(),
|
||||||
'id_item' => Item::factory(),
|
'id_produk' => Produk::factory(),
|
||||||
'harga_deal' => $this->faker->randomFloat(2, 100000, 5000000),
|
'harga_deal' => $this->faker->randomFloat(2, 100000, 5000000),
|
||||||
'created_at' => now(),
|
'created_at' => now(),
|
||||||
];
|
];
|
||||||
|
|||||||
@ -15,7 +15,6 @@ return new class extends Migration
|
|||||||
$table->id();
|
$table->id();
|
||||||
$table->foreignId('id_produk')->constrained('produks')->cascadeOnDelete();
|
$table->foreignId('id_produk')->constrained('produks')->cascadeOnDelete();
|
||||||
$table->foreignId('id_nampan')->nullable()->constrained('nampans');
|
$table->foreignId('id_nampan')->nullable()->constrained('nampans');
|
||||||
$table->boolean('is_sold')->default(false);
|
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,7 +14,7 @@ return new class extends Migration
|
|||||||
Schema::create('item_transaksis', function (Blueprint $table) {
|
Schema::create('item_transaksis', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->id();
|
||||||
$table->foreignId('id_transaksi')->constrained('transaksis')->onDelete('cascade');
|
$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->double('harga_deal');
|
||||||
$table->string('posisi_asal', 100);
|
$table->string('posisi_asal', 100);
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
|
|||||||
@ -64,7 +64,6 @@ class DatabaseSeeder extends Seeder
|
|||||||
$jumlah_item = rand(1, 20);
|
$jumlah_item = rand(1, 20);
|
||||||
Item::factory($jumlah_item)->create([
|
Item::factory($jumlah_item)->create([
|
||||||
'id_produk' => $produk->id,
|
'id_produk' => $produk->id,
|
||||||
'is_sold' => false,
|
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -84,19 +83,16 @@ class DatabaseSeeder extends Seeder
|
|||||||
|
|
||||||
Transaksi::factory(40)->create()->each(function ($transaksi) {
|
Transaksi::factory(40)->create()->each(function ($transaksi) {
|
||||||
$jumlah_item = rand(1, 2);
|
$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;
|
if ($items->isEmpty()) return;
|
||||||
$total_harga = $transaksi->total_harga;
|
$total_harga = $transaksi->total_harga;
|
||||||
foreach ($items as $item) {
|
foreach ($items as $item) {
|
||||||
$transaksi->itemTransaksi()->create([
|
$transaksi->itemTransaksi()->create([
|
||||||
'id_item' => $item->id,
|
'id_produk' => $item->produk->id,
|
||||||
'harga_deal' => $item->produk->harga_jual,
|
'harga_deal' => $item->produk->harga_jual,
|
||||||
'posisi_asal' => $item->id_nampan ? 'Nampan ' . $item->nampan->nama : 'Brankas',
|
'posisi_asal' => $item->id_nampan ? 'Nampan ' . $item->nampan->nama : 'Brankas',
|
||||||
]);
|
]);
|
||||||
$item->update([
|
$item->delete();
|
||||||
'id_nampan' => null,
|
|
||||||
'is_sold' => true,
|
|
||||||
]);
|
|
||||||
$total_harga += $item->produk->harga_jual;
|
$total_harga += $item->produk->harga_jual;
|
||||||
}
|
}
|
||||||
$transaksi->update(['total_harga' => $total_harga]);
|
$transaksi->update(['total_harga' => $total_harga]);
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
message="Yakin ingin menghapus item ini?" @confirm="hapusPesanan" @cancel="closeDeleteModal" />
|
message="Yakin ingin menghapus item ini?" @confirm="hapusPesanan" @cancel="closeDeleteModal" />
|
||||||
|
|
||||||
<!-- ==== TAMBAHAN: Struk Overlay ==== -->
|
<!-- ==== TAMBAHAN: Struk Overlay ==== -->
|
||||||
<StrukOverlay v-if="showStruk" :isOpen="showStruk" :pesanan="pesanan" :total="total" @close="closeStruk"/>
|
<StrukOverlay v-if="showStruk" :isOpen="showStruk" :pesanan="pesanan" :total="total" @close="closeStruk" />
|
||||||
<!-- ==== END TAMBAHAN ==== -->
|
<!-- ==== END TAMBAHAN ==== -->
|
||||||
|
|
||||||
<div class="p-2 sm:p-4">
|
<div class="p-2 sm:p-4">
|
||||||
@ -90,7 +90,7 @@
|
|||||||
{{ item.produk.nama }}
|
{{ item.produk.nama }}
|
||||||
</td>
|
</td>
|
||||||
<td class="border border-B p-2 truncate max-w-[80px]">
|
<td class="border border-B p-2 truncate max-w-[80px]">
|
||||||
{{ item.posisi ? item.posisi : "Brankas" }}
|
{{ item.nampan ? item.nampan.nama : "Brankas" }}
|
||||||
</td>
|
</td>
|
||||||
<td class="border border-B p-2 whitespace-nowrap">
|
<td class="border border-B p-2 whitespace-nowrap">
|
||||||
Rp{{ item.harga_deal.toLocaleString() }}
|
Rp{{ item.harga_deal.toLocaleString() }}
|
||||||
@ -150,14 +150,15 @@ const inputItem = async () => {
|
|||||||
item.value = response.data;
|
item.value = response.data;
|
||||||
hargaJual.value = item.value.produk.harga_jual;
|
hargaJual.value = item.value.produk.harga_jual;
|
||||||
|
|
||||||
|
console.log(item.value);
|
||||||
|
|
||||||
if (item.value.is_sold) {
|
if (item.value.is_sold) {
|
||||||
throw new Error("Item sudah terjual");
|
throw new Error("Item sudah terjual");
|
||||||
}
|
}
|
||||||
if (pesanan.value.some((p) => p.id === item.value.id)) {
|
if (pesanan.value.some((p) => p.id === item.value.id)) {
|
||||||
throw new Error("Item sedang dipesan");
|
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(() => {
|
infoTimeout = setTimeout(() => {
|
||||||
info.value = "";
|
info.value = "";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user