get(); $customers = Customer::whereNull('customer_group_id')->where('is_in_group', false)->orderBy('name', 'asc')->get(); return Inertia::render('CustomerGroups', ['groups' => $groups, 'customers' => $customers]); } /** * Show the form for creating a new resource. */ public function create() { // } /** * Store a newly created resource in storage. */ public function store(Request $request) { $request->validate([ 'group_name' => 'required', 'customers' => 'required', ]); $customers = $request->customers; $guardian_name = Customer::where('id', (int) $customers[0])->pluck('guardian_name'); $customerGroup = CustomerGroup::create([ 'name' => $request->group_name, ]); $groupCustomer = Customer::create([ 'name' => $request->group_name, 'guardian_name' => $guardian_name[0], 'is_in_group' => false, 'customer_group_id' => $customerGroup->id ]); $groupAmount= 0; foreach ($customers as $customerItem) { $groupAmount += Customer::findOrFail($customerItem)->joinGroup($customerGroup->id); } Deposit::create([ 'customer_id' => $groupCustomer->id, 'amount' => $groupAmount, ]); $groupCustomer->amount_left = $groupAmount; $groupCustomer->deposit = $groupAmount; $groupCustomer->save(); return redirect('customer-groups/'); } /** * Display the specified resource. */ public function show(CustomerGroup $customerGroup) { // } /** * Show the form for editing the specified resource. */ public function edit(CustomerGroup $customerGroup) { // } /** * Update the specified resource in storage. */ public function update($id, Request $request) { $request->validate([ 'customers' => 'required', ]); $customers = $request->customers; $groupCustomer = Customer::where('customer_group_id', $id)->where('is_in_group', 0)->first(); if (!$groupCustomer) { return response()->json([ 'success' => false, 'message' => 'Customer group not found' ], 404); } $movedAmount = 0; foreach ($customers as $customerItem) { $movedAmount += Customer::findOrFail($customerItem)->joinGroup($id); } $groupCustomer->deposit += $movedAmount; $groupCustomer->amount_left += $movedAmount; $groupCustomer->save(); if ($movedAmount > 0) { Deposit::create([ 'customer_id' => $groupCustomer->id, 'amount' => $movedAmount, ]); } return response()->json([ 'success' => true, 'message' => 'Customer group was updated' ]); } /** * Remove the specified resource from storage. */ public function destroy($id) { $group = CustomerGroup::findOrFail( $id ); $groupCustomer = Customer::where('customer_group_id', $group->id) ->where('is_in_group', 0) ->first(); // The balance lives on the group's own row and would disappear with it if ($groupCustomer && $groupCustomer->amount_left > 0) { return response()->json([ 'success' => false, 'message' => 'Gruppen har ' . $groupCustomer->amount_left . ' kr kvar på saldot. Betala ut eller använd upp det innan gruppen tas bort.' ], 422); } // The members are real participants — they leave the group, they are not deleted Customer::where('customer_group_id', $group->id) ->where('is_in_group', 1) ->update(['customer_group_id' => null, 'is_in_group' => 0]); $groupCustomer?->delete(); $group->delete(); return response()->json([ 'success' => true, 'message' => 'Customer group deleted successfully' ]); } }