partial update opnames and detail table

This commit is contained in:
2025-06-04 18:29:05 +07:00
parent 8305e44c42
commit ff498cd98f
20 changed files with 864 additions and 174 deletions

View File

@@ -0,0 +1,54 @@
<?php
namespace App\Http\Controllers\WarehouseManagement;
use App\Http\Controllers\Controller;
use App\Models\Menu;
use App\Models\Opname;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use Yajra\DataTables\Facades\DataTables;
class OpnamesController extends Controller
{
public function index(Request $request){
$menu = Menu::where('link','opnames.index')->first();
if($request->ajax()){
$data = Opname::with('user','dealer');
return DataTables::of($data)
->addIndexColumn()
->addColumn('user_name', function ($row){
return $row->user ? $row->user->name : '-';
})
->addColumn('dealer_name', function ($row){
return $row->dealer ? $row->dealer->name : '-';
})
->addColumn('action', function ($row) use ($menu) {
$btn = '<div class="d-flex">';
$btn .= '<button class="btn btn-sm btn-secondary btn-product-stock-dealers">Detail</button>';
$btn .= '</div>';
return $btn;
})
->rawColumns(['action'])
->make(true);
}
return view('warehouse_management.opnames.index');
}
public function create(){
return view('warehouse_management.opnames.create');
}
public function store(Request $request){
try{
}catch(\Exception $ex){
Log::error($ex->getMessage());
}
}
}

View File

@@ -32,16 +32,10 @@ class ProductsController extends Controller
return $row->category ? $row->category->name : '-';
})
->addColumn('total_stock', function ($row){
return $row->dealers->sum(function($dealer){
return $dealer->pivot->quantity ?? 0;
});
return 0;
})
->addColumn('action', function ($row) use ($menu) {
$btn = '<div class="d-flex">';
// if (Auth::user()->can('delete', $menu)) {
// $btn .= '<button style="margin-right: 8px;" class="btn btn-danger btn-sm btn-destroy-product" data-action="' . route('products.destroy', $row->id) . '" data-id="' . $row->id . '">Hapus</button>';
// }
if (Auth::user()->can('update', $menu)) {
$btn .= '<a href="' . route('products.edit', $row->id) . '" class="btn btn-warning btn-sm" style="margin-right: 8px;">Edit</a>';

View File

@@ -23,9 +23,7 @@ class Dealer extends Model
return $this->hasMany(Transaction::class, 'dealer_id', 'id');
}
public function products(){
return $this->belongsToMany(Product::class, 'stock')
->withPivot('quantity')
->withTimestamps();
public function opnames(){
return $this->hasMany(Opname::class);
}
}

26
app/Models/Opname.php Normal file
View File

@@ -0,0 +1,26 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Opname extends Model
{
use HasFactory, SoftDeletes;
protected $fillable = ['dealer_id','opname_date','user_id','note'];
public function dealer(){
return $this->belongsTo(Dealer::class);
}
public function details(){
return $this->hasMany(OpnameDetail::class);
}
public function user(){
return $this->belongsTo(User::class);
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class OpnameDetail extends Model
{
use HasFactory, SoftDeletes;
protected $fillable = [
'opname_id',
'product_id',
'physical_stock',
'system_stock',
'difference',
'note',
];
public function opname()
{
return $this->belongsTo(Opname::class);
}
public function product()
{
return $this->belongsTo(Product::class);
}
}

View File

@@ -16,9 +16,7 @@ class Product extends Model
return $this->belongsTo(ProductCategory::class, 'product_category_id');
}
public function dealers(){
return $this->belongsToMany(Dealer::class, 'stock')
->withPivot('quantity')
->withTimestamps();
public function opnameDetails(){
return $this->hasMany(OpnameDetail::class);
}
}