toJson(); } /** * 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([ 'customer_id' => 'required', 'deposit' => 'required', 'give_leftover' => 'nullable' ]); if ($request->manual_deposit === 1) { $customer = Customer::where('id',$request->customer_id)->first(); } else { $customer = Customer::where('lan_id',$request->customer_id)->first(); } if (!$customer) { return response()->json([ 'success' => false, 'message' => 'Hittade ingen deltagare' ], 404); } // A group member pays into the group's balance if ($customer->is_in_group) { $account = Customer::where('customer_group_id', $customer->customer_group_id)->where('is_in_group', 0)->first(); } else { $account = $customer; } // Work out where the money goes before writing anything. Creating the // deposit first would leave a receipt behind for money never credited. if (!$account) { return response()->json([ 'success' => false, 'message' => 'Hittade inget konto att sätta in på' ], 404); } $amount = (int) $request->deposit; DB::transaction(function () use ($customer, $account, $amount, $request) { $account->deposit += $amount; $account->amount_left += $amount; $account->give_leftover = $request->give_leftover; $account->save(); // The balance lives on the group, so the member keeps none of it if ($account->id !== $customer->id) { $customer->deposit = 0; $customer->save(); } Deposit::create([ 'customer_id' => $customer->id, 'amount' => $amount, ]); }); if ($request->manual_deposit === 1) { return redirect('customer/' . $request->customer_id); } return response()->json([ 'success' => true, 'message' => 'Deposit added successfully' ]); } /** * Display the specified resource. */ public function show(Purchase $purchase) { // } /** * Show the form for editing the specified resource. */ public function edit(Purchase $purchase) { // } /** * Update the specified resource in storage. */ public function update(Request $request, Purchase $purchase) { // } /** * Remove the specified resource from storage. */ public function destroy($id) { $deposit = Deposit::findOrFail( $id ); $customer = Customer::findOrFail( $deposit->customer_id ); $amount = (int) $deposit->amount; // The deposit was added to the group's balance for a member, so that is // where it has to be taken from again — same resolution as in store() if ($customer->is_in_group) { $account = Customer::where('customer_group_id', $customer->customer_group_id) ->where('is_in_group', 0) ->first(); } else { $account = $customer; } $account->deposit = $account->deposit - $amount; $account->amount_left = $account->amount_left - $amount; $account->save(); $deposit->delete(); return response()->json([ 'success' => true, 'message' => 'Deposit deleted successfully' ]); } }