Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
WIKIPEDIA
/
imaliapi
/
app
/
Http
/
Controllers
:
DebitOrderController-bkp-27112025.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace App\Http\Controllers; use App\DebitOrder; use App\Imali\BusinessAccount; use App\Classes\TransactionGeneration; use App\PaymentMethod; use App\User; use Illuminate\Http\Request; class DebitOrderController extends Controller { // // Supervisores criam ordens public function create_debit(Request $request) { $request->validate([ 'credit_account_number' => 'required', 'amount' => 'required|numeric|min:0.01', 'description' => 'nullable|string|max:255', 'payment_methods_id' => 'required', ]); $business = BusinessAccount::find(auth()->user()->business_accounts_id); $order = DebitOrder::create([ 'created_by' => auth()->user()->id, 'created_by_name' => auth()->user()->name . ' ' . auth()->user()->last_name, 'amount' => $request->amount, 'credit_account_number' => (string)$request->credit_account_number, 'debit_account_number' => $business->account_number, 'description' => $request->description, 'payment_methods_id' => $request->payment_methods_id, 'status' => 'PENDING', ]); return response()->json([ 'message' => 'Ordem de débito criada e aguarda aprovação do administrador.', 'order' => $order, ]); } // Admin aprova ou rejeita public function approve($id) { if (auth()->user()->type !== 'ADMIN') return response()->json(['message' => 'Operação não autorizada.'], 400); $order = DebitOrder::findOrFail($id); if ($order->status !== 'PENDING') { return response()->json(['message' => 'Esta ordem já foi processada.'], 400); } $order->update([ 'approved_by' => auth()->user()->id, 'approved_by_name' => auth()->user()->name . ' ' . auth()->user()->last_name, 'status' => 'APPROVED', ]); return response()->json([ 'message' => 'Ordem aprovada com sucesso.', 'order' => $order, ]); } public function reject($id) { if (auth()->user()->type !== 'ADMIN') return response()->json(['message' => 'Operação não autorizada.'], 400); $order = DebitOrder::findOrFail($id); if ($order->status !== 'PENDING') { return response()->json(['message' => 'Esta ordem já foi processada.'], 400); } $order->update([ 'approved_by' => auth()->user()->id, 'approved_by_name' => auth()->user()->name . ' ' . auth()->user()->last_name, 'status' => 'REJECTED', ]); return response()->json([ 'message' => 'Ordem rejeitada.', 'order' => $order, ]); } // Apenas Admin conclui após aprovação (efectuar movimento real) public function complete(Request $request, $id) { if (auth()->user()->type !== 'ADMIN') return response()->json(['message' => 'Operação não autorizada.'], 400); $order = DebitOrder::findOrFail($id); if ($order->status !== 'APPROVED') { return response()->json(['message' => 'A ordem precisa estár aprovada antes de ser concluída.'], 400); } // chamar o Metodo que faz o b2c $third = new ThirdPartController; $payment_method = PaymentMethod::find($order->payment_methods_id); $trasactionGeneration = new TransactionGeneration(); $transaction = $trasactionGeneration->generateTransaction(); $request->request->add([ 'transaction_type' => $order->type, 'amount' => $order->amount . '.00', 'store_account_number' => $order->debit_account_number, 'payment_method' => strtolower($payment_method->name), 'client_account_number' => (string)$order->credit_account_number, 'partner_transaction_id' => $transaction, ]); $resp = $third->imaliway_guard_new25($request); if ($resp->getStatusCode() == 200 || $resp->getStatusCode() == 201) { $order->update(['status' => 'COMPLETED']); return response()->json([ 'message' => 'Ordem de débito concluída com sucesso.', 'order' => $order, ]); } else { $order->update(['status' => 'FAILED']); return response()->json([ 'message' => 'A ordem de débito falhou.', 'order' => $order, ]); } } // public function get_debit(Request $request) // { // $user = User::getUserDetails(auth()->user()->user_id); // // if ($user->profile === 'business' && $user->accept_loans === 1) { // // Inicia a query base // $query = DebitOrder::query(); // // Lista de status válidos // $validStatuses = ['PENDING', 'APPROVED', 'REJECTED', 'COMPLETED', 'FAILED']; // // Verifica se foi informado um status // if ($request->has('status')) { // $status = strtoupper($request->status); // // Se o status informado não for válido, retorna erro // if (!in_array($status, $validStatuses)) { // return response()->json([], 400); // // return response()->json([ // // 'message' => 'Status inválido. Os status permitidos são: ' . implode(', ', $validStatuses) . '.' // // ], 400); // } // // Aplica o filtro de status válido // $query->where('status', $status); // } // // Número de itens por página (padrão = 10) // $perPage = $request->get('per_page', 10); // // Ordena por data de criação (mais recente primeiro) // $orders = $query->orderBy('created_at', 'desc')->get(); // $orders = $query->orderBy('created_at', 'desc')->paginate($perPage); // // Se não houver registros // if ($orders->isEmpty()) { // return response()->json(['message' => 'Nenhuma informação encontrada.'], 404); // } // // Retorna os resultados // return response()->json(['orders' => $orders]); // // } // // Caso o usuário não cumpra as condições // return response()->json([ // 'data' => [], // 'message' => 'Conta Business não autorizada a visualizar ordens de débito.' // ], 403); // } public function get_debit(Request $request) { $user = User::getUserDetails(auth()->user()->user_id); // Inicia a query base $query = DebitOrder::query(); // Lista de status válidos $validStatuses = ['PENDING', 'APPROVED', 'REJECTED', 'COMPLETED', 'FAILED', 'ALL']; // Verifica se foi informado um status if ($request->has('status')) { $status = strtoupper($request->status); // Se o status informado não for válido, retorna erro if (!in_array($status, $validStatuses)) { return response()->json([ 'message' => 'Status inválido. Os status permitidos são: ' . implode(', ', $validStatuses) . '.' ], 400); } // Se o status for diferente de "ALL", aplica o filtro if ($status !== 'ALL') { $query->where('status', $status); } } // Número de itens por página (padrão = 10) $perPage = $request->get('per_page', 10); // Ordena por data de criação (mais recente primeiro) $orders = $query->orderBy('created_at', 'desc')->paginate($perPage); // Se não houver registros if ($orders->isEmpty()) { return response()->json(['message' => 'Nenhuma informação encontrada.'], 404); } // Retorna os resultados return response()->json(['orders' => $orders]); } }