update marketing
All checks were successful
Build, Push and Deploy / build-and-push (push) Successful in 5m14s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 17s
Build, Push and Deploy / deploy-staging (push) Successful in 41s
Build, Push and Deploy / deploy-production (push) Has been skipped

This commit is contained in:
2026-05-14 11:55:22 +07:00
parent f80fcc4c1b
commit 05fd3230b8
448 changed files with 17545 additions and 5128 deletions

View File

@@ -4,6 +4,7 @@
use App\Http\Controllers\Controller;
use App\Models\Vat;
use App\Models\VatStateItem;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
@@ -19,22 +20,41 @@ public function __construct()
public function index(Request $request)
{
$vats = Vat::where('business_id', auth()->user()->business_id)->orderBy('status', 'desc')->whereNull('sub_vat')->latest()->paginate(20);
$vat_groups = Vat::where('business_id', auth()->user()->business_id)->orderBy('status', 'desc')->whereNotNull('sub_vat')->latest()->paginate(20);
$business_id = auth()->user()->business_id;
$vats = Vat::where('business_id', $business_id)
->orderBy('status', 'desc')
->whereNull('sub_vat')
->where('manage_state', 0)
->latest()
->paginate(20);
$vat_groups = Vat::where('business_id', $business_id)
->where(function ($query) {
$query->whereNotNull('sub_vat')
->orWhere('manage_state', 1);
})
->with('stateVats.childVat:id,name,rate')
->orderBy('status', 'desc')
->latest()
->paginate(20);
return view('business::vats.index', compact('vats', 'vat_groups'));
}
public function acnooFilter(Request $request)
{
$vats = Vat::where('business_id', auth()->user()->business_id)->whereNull('sub_vat')
->when($request->search, function ($query) use ($request) {
$query->where(function ($q) use ($request) {
$search = $request->search;
$q->where('name', 'like', "%$search%");
});
})
->latest()
->paginate(20);
$vats = Vat::where('business_id', auth()->user()->business_id)
->whereNull('sub_vat')
->when($request->search, function ($query) use ($request) {
$query->where(function ($q) use ($request) {
$search = $request->search;
$q->where('name', 'like', "%$search%");
});
})
->where('manage_state', 0)
->latest()
->paginate(20);
if ($request->ajax()) {
return response()->json([
@@ -47,75 +67,135 @@ public function acnooFilter(Request $request)
public function VatGroupFilter(Request $request)
{
$vat_groups = Vat::where('business_id', auth()->user()->business_id)->whereNotNull('sub_vat')
->when($request->search, function ($query) use ($request) {
$query->where(function ($q) use ($request) {
$search = $request->search;
$q->where('name', 'like', "%$search%");
});
})
->latest()
->paginate(20);
$vat_groups = Vat::where('business_id', auth()->user()->business_id)
->when($request->search, function ($query) use ($request) {
$query->where(function ($q) use ($request) {
$search = $request->search;
$q->where('name', 'like', "%$search%");
});
})
->with('stateVats.childVat:id,name')
->where(function ($query) {
$query->whereNotNull('sub_vat')
->orWhere('manage_state', 1);
})
->latest()
->paginate(20);
if ($request->ajax()) {
return response()->json([
'data' => view('business::vat-groups.datas', compact('vat_groups'))->render()
]);
}
return redirect(url()->previous());
}
// Vat Group Create
public function create()
{
$vats = Vat::where('business_id', auth()->user()->business_id)->where('status','1')->whereNull('sub_vat')->latest()->get();
$vats = Vat::where('business_id', auth()->user()->business_id)
->where('status','1')
->whereNull('sub_vat')
->where('manage_state', 0)
->latest()
->get();
return view('business::vat-groups.create',compact('vats'));
}
public function store(Request $request)
{
$request->validate([
'vat_ids' => 'array',
'rate' => 'nullable|numeric',
'name' => 'required|string|max:255',
'vat_ids' => 'required_if:rate,null',
'rate' => 'required_if:rate,null|numeric',
'manage_state' => 'nullable|integer|in:0,1',
]);
// single vat
if ($request->rate && !$request->vat_ids) {
Vat::create($request->all() + [
'business_id' => auth()->user()->business_id,
]);
$businessId = auth()->user()->business_id;
}
// group vat
elseif (!$request->rate && $request->vat_ids) {
// SINGLE VAT
if ($request->filled('rate') && !$request->vat_ids) {
$vats = Vat::whereIn('id', $request->vat_ids)->select('id', 'name', 'rate')->get();
$vat = Vat::create([
'name' => $request->name,
'rate' => $request->rate,
'business_id' => $businessId,
'manage_state' => 0,
]);
} elseif ($request->vat_ids && !$request->manage_state) { // GROUP VAT (OLD SYSTEM)
$vats = Vat::whereIn('id', $request->vat_ids)
->where('business_id', $businessId)
->select('id', 'name', 'rate')
->get();
$tax_rate = 0;
$sub_vats = [];
foreach ($vats as $vat) {
foreach ($vats as $vatItem) {
$sub_vats[] = [
'id' => $vat->id,
'name' => $vat->name,
'rate' => $vat->rate,
'id' => $vatItem->id,
'name' => $vatItem->name,
'rate' => $vatItem->rate,
];
$tax_rate += $vat->rate;
$tax_rate += $vatItem->rate;
}
Vat::create([
'rate' => $tax_rate,
'sub_vat' => $sub_vats,
'name' => $request->name,
'business_id' => auth()->user()->business_id,
$vat = Vat::create([
'rate' => $tax_rate,
'sub_vat' => $sub_vats,
'name' => $request->name,
'business_id' => $businessId,
'manage_state' => 0,
]);
} elseif ($request->manage_state == 1) { // STATE WISE VAT (NEW PIVOT SYSTEM)
$request->validate([
'inner_vat_ids' => 'required|array',
'outer_vat_ids' => 'required|array',
]);
} else {
$innerIds = $request->inner_vat_ids ?? [];
$outerIds = $request->outer_vat_ids ?? [];
$innerRate = Vat::whereIn('id', $innerIds)
->where('business_id', $businessId)
->sum('rate');
$outerRate = Vat::whereIn('id', $outerIds)
->where('business_id', $businessId)
->sum('rate');
$vat = Vat::create([
'name' => $request->name,
'rate' => $innerRate ?: $outerRate,
'business_id' => $businessId,
'manage_state' => 1,
]);
// Save pivot inner
foreach ($innerIds as $id) {
VatStateItem::create([
'parent_vat_id' => $vat->id,
'child_vat_id' => $id,
'type' => 'inner'
]);
}
// Save pivot outer
foreach ($outerIds as $id) {
VatStateItem::create([
'parent_vat_id' => $vat->id,
'child_vat_id' => $id,
'type' => 'outer'
]);
}
}
else {
return response()->json([
'message' => 'Invalid data format.',
'message' => 'Invalid data format.'
], 406);
}
@@ -128,27 +208,43 @@ public function store(Request $request)
// Vat Group Edit
public function edit($id)
{
$vat = Vat::where('business_id', auth()->user()->business_id)->findOrFail($id);
$vats = Vat::where('business_id', auth()->user()->business_id)->where('status','1')->whereNull('sub_vat')->latest()->paginate(20);
$vat = Vat::with(['innerStateVats', 'outerStateVats'])->where('business_id', auth()->user()->business_id)->findOrFail($id);
$vats = Vat::where('business_id', auth()->user()->business_id)
->where('status','1')
->whereNull('sub_vat')
->where('manage_state', 0)
->latest()
->get();
return view('business::vat-groups.edit', compact('vat', 'vats'));
}
public function update(Request $request, Vat $vat)
{
$request->validate([
'vat_ids' => 'array',
'rate' => 'nullable|numeric',
'name' => 'required|string|max:255',
'vat_ids' => 'required_if:rate,null',
'rate' => 'required_if:rate,null|numeric',
'manage_state' => 'nullable|integer|in:0,1',
]);
DB::beginTransaction();
try {
// Single VAT update
if ($request->rate && !$request->vat_ids) {
$businessId = auth()->user()->business_id;
$vat->update($request->only(['name', 'rate', 'status']));
VatStateItem::where('parent_vat_id', $vat->id)->delete();
// SINGLE VAT
if ($request->filled('rate') && !$request->vat_ids && !$request->manage_state) {
$vat->update([
'name' => $request->name,
'rate' => $request->rate,
'status' => $request->status ?? $vat->status,
'manage_state' => 0,
]);
// Update group VATs containing this single VAT
$vatGroupExist = Vat::where('sub_vat', 'LIKE', '%"id":' . $vat->id . '%')->get();
foreach ($vatGroupExist as $group) {
$subVats = collect($group->sub_vat)->map(function ($subVat) use ($vat) {
@@ -158,7 +254,6 @@ public function update(Request $request, Vat $vat)
}
return $subVat;
});
$group->update([
'rate' => $subVats->sum('rate'),
'sub_vat' => $subVats->toArray(),
@@ -166,30 +261,79 @@ public function update(Request $request, Vat $vat)
}
}
// Group VAT update
elseif (!$request->rate && $request->vat_ids) {
// GROUP VAT (OLD SYSTEM)
elseif ($request->vat_ids && !$request->manage_state) {
$vats = Vat::whereIn('id', $request->vat_ids)->select('id', 'name', 'rate')->get();
$vats = Vat::whereIn('id', $request->vat_ids)
->where('business_id', $businessId)
->select('id', 'name', 'rate')
->get();
$tax_rate = 0;
$sub_vats = [];
foreach ($vats as $single_tax) {
foreach ($vats as $vatItem) {
$sub_vats[] = [
'id' => $single_tax->id,
'name' => $single_tax->name,
'rate' => $single_tax->rate,
'id' => $vatItem->id,
'name' => $vatItem->name,
'rate' => $vatItem->rate,
];
$tax_rate += $single_tax->rate;
$tax_rate += $vatItem->rate;
}
$vat->update([
'name' => $request->name,
'rate' => $tax_rate,
'sub_vat' => $sub_vats,
'name' => $request->name,
'status' => $request->status ?? $vat->status,
'manage_state' => 0,
]);
} else {
}
// STATE-WISE VAT (NEW SYSTEM)
elseif ($request->manage_state == 1) {
$innerIds = $request->inner_vat_ids ?? [];
$outerIds = $request->outer_vat_ids ?? [];
$innerRate = Vat::whereIn('id', $innerIds)
->where('business_id', $businessId)
->sum('rate');
$outerRate = Vat::whereIn('id', $outerIds)
->where('business_id', $businessId)
->sum('rate');
$vat->update([
'name' => $request->name,
'rate' => $innerRate ?: $outerRate,
'status' => $request->status ?? $vat->status,
'manage_state' => 1,
'sub_vat' => null,
]);
// Delete old pivot entries
VatStateItem::where('parent_vat_id', $vat->id)->delete();
// Insert inner VAT pivot
foreach ($innerIds as $id) {
VatStateItem::create([
'parent_vat_id' => $vat->id,
'child_vat_id' => $id,
'type' => 'inner',
]);
}
// Insert outer VAT pivot
foreach ($outerIds as $id) {
VatStateItem::create([
'parent_vat_id' => $vat->id,
'child_vat_id' => $id,
'type' => 'outer',
]);
}
}
else {
DB::rollBack();
return response()->json([
'message' => 'Invalid data format.',
@@ -197,14 +341,17 @@ public function update(Request $request, Vat $vat)
}
DB::commit();
return response()->json([
'message' => 'Vat updated successfully',
'redirect' => route('business.vats.index'),
]);
} catch (\Exception $e) {
DB::rollback();
return response()->json(['message' => __('Somethings went wrong!')], 404);
return response()->json([
'message' => __('Somethings went wrong!'),
'error' => $e->getMessage(),
], 500);
}
}