Fix búsqueda en tiempo real, paginación, OneSignal, bancos/categorías y vistas auth
- ajaxcrud.js: fix race condition en búsqueda, abort de requests en vuelo
- Layout: mover @yield('js') después de app.js para corregir orden de carga
- Paginación: useBootstrapFour() + eliminar wrappers <ul> duplicados en 17 vistas
- OneSignal: migrar de UserTag iChamba_ID a ExternalId en controladores
- API: agregar endpoint GET /api/banks y campos rfc/bank/bank_account/fee en hero()
- Seeders: BanksSeeder (239 bancos) y CategoriesSeeder (100 categorías)
- Auth views: corregir padding/scroll en register, login, password reset
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
use Carbon\Carbon;
|
||||
use App\Models\User;
|
||||
use App\Models\Suppliers;
|
||||
@@ -25,32 +26,71 @@ class PaymentController extends Controller
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
//
|
||||
$request->session()->put('search', $request
|
||||
->has('search') ? strip_tags($request->get('search')) : ($request->session()
|
||||
->has('search') ? strip_tags($request->session()->get('search')) : ''));
|
||||
$dateFrom = $request->has('date_from') ? strip_tags($request->get('date_from')) : $request->session()->get('pay_date_from', '');
|
||||
$dateTo = $request->has('date_to') ? strip_tags($request->get('date_to')) : $request->session()->get('pay_date_to', '');
|
||||
|
||||
$request->session()->put('field', $request
|
||||
->has('field') ? strip_tags($request->get('field')) : ($request->session()
|
||||
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
|
||||
if ($request->has('date_from')) $request->session()->put('pay_date_from', $dateFrom);
|
||||
if ($request->has('date_to')) $request->session()->put('pay_date_to', $dateTo);
|
||||
|
||||
$request->session()->put('sort', $request
|
||||
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
|
||||
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
|
||||
$contracts = FinishedContracts::with(['suppliers.user', 'suppliers.banks'])
|
||||
->where('status_id', 3)
|
||||
->where('paid', false)
|
||||
->where('transaction_id', '!=', 'NO APPLY')
|
||||
->when($dateFrom, fn($q) => $q->whereDate('appointment', '>=', $dateFrom))
|
||||
->when($dateTo, fn($q) => $q->whereDate('appointment', '<=', $dateTo))
|
||||
->get();
|
||||
|
||||
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
|
||||
$field = in_array($request->input('field'), ['company_name', 'email', 'rfc_curp', 'clabe', 'bank', 'contract_count', 'total_amount', 'total_revenue', 'total_iva', 'total_isr', 'total_fee'])
|
||||
? $request->input('field')
|
||||
: 'total_amount';
|
||||
$sort = $request->input('sort', 'desc') === 'asc' ? 'asc' : 'desc';
|
||||
|
||||
$payments = new FinishedContracts();
|
||||
$payments = $payments->where('status_id', 3)->where('paid', false)->where('transaction_id', '!=', 'NO APPLY')
|
||||
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
|
||||
->paginate(10);
|
||||
$grouped = $contracts->groupBy('supplier_id')->map(function ($group) {
|
||||
$first = $group->first();
|
||||
return (object) [
|
||||
'suppliers' => $first->suppliers,
|
||||
'contract_count' => $group->count(),
|
||||
'total_amount' => $group->sum('amount'),
|
||||
'total_revenue' => $group->sum('revenue'),
|
||||
'total_iva' => $group->sum('IVA'),
|
||||
'total_isr' => $group->sum('ISR'),
|
||||
'total_fee' => $group->sum('ichamba_fee'),
|
||||
];
|
||||
})->values();
|
||||
|
||||
$sortCallbacks = [
|
||||
'company_name' => fn($r) => optional($r->suppliers)->company_name,
|
||||
'email' => fn($r) => optional(optional($r->suppliers)->user)->email,
|
||||
'rfc_curp' => fn($r) => optional($r->suppliers)->RFC ?: optional($r->suppliers)->CURP,
|
||||
'clabe' => fn($r) => optional($r->suppliers)->clabe,
|
||||
'bank' => fn($r) => optional(optional($r->suppliers)->banks)->name,
|
||||
'contract_count' => fn($r) => $r->contract_count,
|
||||
'total_amount' => fn($r) => $r->total_amount,
|
||||
'total_revenue' => fn($r) => $r->total_revenue,
|
||||
'total_iva' => fn($r) => $r->total_iva,
|
||||
'total_isr' => fn($r) => $r->total_isr,
|
||||
'total_fee' => fn($r) => $r->total_fee,
|
||||
];
|
||||
|
||||
$grouped = $sort === 'asc'
|
||||
? $grouped->sortBy($sortCallbacks[$field])->values()
|
||||
: $grouped->sortByDesc($sortCallbacks[$field])->values();
|
||||
|
||||
$perPage = 15;
|
||||
$page = $request->input('page', 1);
|
||||
$payments = new LengthAwarePaginator(
|
||||
$grouped->slice(($page - 1) * $perPage, $perPage)->values(),
|
||||
$grouped->count(),
|
||||
$perPage,
|
||||
$page,
|
||||
['path' => $request->url(), 'query' => $request->query()]
|
||||
);
|
||||
|
||||
if ($request->ajax()) {
|
||||
return view('payments.index', compact('payments'));
|
||||
} else {
|
||||
return view('payments.ajax', compact('payments'));
|
||||
}
|
||||
|
||||
return view('payments.index', compact('payments', 'dateFrom', 'dateTo'));
|
||||
} else {
|
||||
return view('payments.ajax', compact('payments', 'dateFrom', 'dateTo'));
|
||||
}
|
||||
}
|
||||
|
||||
public function cardsindex(Request $request)
|
||||
|
||||
Reference in New Issue
Block a user