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:
2026-06-16 21:21:44 -06:00
parent fb5caeab6e
commit b34622b289
71 changed files with 3303 additions and 1576 deletions

View File

@@ -1,7 +1,13 @@
@extends('layouts.app')
@push('styles')
<style>
.main-content { padding: 0 !important; overflow: hidden !important; }
</style>
@endpush
@section('content')
<div class="container" style="display: block; width: 100%; height: calc(100% + 25px); background-image: url('../img/background_ic.jpg')">
<div class="container" style="display: block; width: 100%; height: 100%; background-image: url('../img/background_ic.jpg')">
<div class="row justify-content-center">
<div class="col-md-8" style="padding-top: 3em">
<div class="card">

View File

@@ -1,7 +1,11 @@
@extends('layouts.app')
@push('styles')
<style>.main-content { padding: 0 !important; overflow: hidden !important; }</style>
@endpush
@section('content')
<div class="container" style="display: block; width: 100%; height: calc(100% + 25px); background-image: url('../img/background_ic.jpg')">
<div class="container" style="display: block; width: 100%; height: 100%; background-image: url('../img/background_ic.jpg')">
<div class="row justify-content-center">
<div class="col-md-8" style="padding-top: 3em">
<div class="card">

View File

@@ -1,7 +1,11 @@
@extends('layouts.app')
@push('styles')
<style>.main-content { padding: 0 !important; overflow: hidden !important; }</style>
@endpush
@section('content')
<div class="container" style="display: block; width: 100%; height: calc(100% + 25px); background-image: url('../img/background_ic.jpg')">
<div class="container" style="display: block; width: 100%; height: 100%; background-image: url('../img/background_ic.jpg')">
<div class="row justify-content-center">
<div class="col-md-8" style="padding-top: 3em">
<div class="card">

View File

@@ -1,7 +1,11 @@
@extends('layouts.app')
@push('styles')
<style>.main-content { padding: 0 !important; overflow: hidden !important; }</style>
@endpush
@section('content')
<div class="container" style="display: block; width: 100%; height: calc(100% + 25px); background-image: url('../img/background_ic.jpg')">
<div class="container" style="display: block; width: 100%; height: 100%; background-image: url('../img/background_ic.jpg')">
<div class="row justify-content-center">
<div class="col-md-8" style="padding-top: 3em">
<div class="card">

View File

@@ -12,5 +12,5 @@
@endsection
@section('js')
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
<script src="{{ asset('js/ajaxcrud.js') }}?v={{ filemtime(public_path('js/ajaxcrud.js')) }}"></script>
@endsection

View File

@@ -1,10 +1,7 @@
@extends('layouts.app')
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -76,8 +73,5 @@
</tbody>
</table>
<ul class="pagination">
{{ $banks->links() }}
</ul>
{{ $banks->links() }}
</div>
@endsection

View File

@@ -12,5 +12,5 @@
@endsection
@section('js')
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
<script src="{{ asset('js/ajaxcrud.js') }}?v={{ filemtime(public_path('js/ajaxcrud.js')) }}"></script>
@endsection

View File

@@ -1,10 +1,7 @@
@extends('layouts.app')
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -71,8 +68,5 @@
</tbody>
</table>
<ul class="pagination">
{{ $cards->links() }}
</ul>
{{ $cards->links() }}
</div>
@endsection

View File

@@ -12,5 +12,5 @@
@endsection
@section('js')
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
<script src="{{ asset('js/ajaxcrud.js') }}?v={{ filemtime(public_path('js/ajaxcrud.js')) }}"></script>
@endsection

View File

@@ -1,10 +1,7 @@
@extends('layouts.app')
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -76,8 +73,5 @@
</tbody>
</table>
<ul class="pagination">
{{ $categories->links() }}
</ul>
{{ $categories->links() }}
</div>
@endsection

View File

@@ -12,5 +12,5 @@
@endsection
@section('js')
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
<script src="{{ asset('js/ajaxcrud.js') }}?v={{ filemtime(public_path('js/ajaxcrud.js')) }}"></script>
@endsection

View File

@@ -1,10 +1,7 @@
@extends('layouts.app')
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -84,8 +81,5 @@
</tbody>
</table>
<ul class="pagination">
{{ $coupons->links() }}
</ul>
{{ $coupons->links() }}
</div>
@endsection

View File

@@ -12,5 +12,5 @@
@endsection
@section('js')
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
<script src="{{ asset('js/ajaxcrud.js') }}?v={{ filemtime(public_path('js/ajaxcrud.js')) }}"></script>
@endsection

View File

@@ -1,10 +1,7 @@
@extends('layouts.app')
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -116,8 +113,5 @@
</tbody>
</table>
<ul class="pagination">
{{ $currentcontracts->links() }}
</ul>
{{ $currentcontracts->links() }}
</div>
@endsection

View File

@@ -7,8 +7,7 @@
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -60,8 +59,6 @@
'markers' => $mapMarkers
])
<ul class="pagination">
{{ $currentcontracts->links() }}
</ul>
{{ $currentcontracts->links() }}
</div>
@endsection

View File

@@ -12,5 +12,5 @@
@endsection
@section('js')
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
<script src="{{ asset('js/ajaxcrud.js') }}?v={{ filemtime(public_path('js/ajaxcrud.js')) }}"></script>
@endsection

View File

@@ -1,10 +1,7 @@
@extends('layouts.app')
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -124,8 +121,5 @@
</tbody>
</table>
<ul class="pagination">
{{ $finishedcontracts->links() }}
</ul>
{{ $finishedcontracts->links() }}
</div>
@endsection

View File

@@ -7,8 +7,7 @@
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -60,8 +59,6 @@
'markers' => $mapMarkers
])
<ul class="pagination">
{{ $finishedcontracts->links() }}
</ul>
{{ $finishedcontracts->links() }}
</div>
@endsection

View File

@@ -3,8 +3,7 @@
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; margin-top: 1em; float: left">
<div>
@else
<div class="container">
@endif

View File

@@ -7,10 +7,7 @@
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'iChamba') }}</title>
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}"></script>
<title>{{ config('app.name', 'JobHero') }}</title>
<!-- Fonts -->
<link rel="dns-prefetch" href="//fonts.gstatic.com">
@@ -22,69 +19,136 @@
<link href="{{ asset('css/bootstrap-tagsinput.css') }}" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
@stack('styles')
<style>
html, body {
height: 100%;
overflow: hidden;
}
.navbar-fixed {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1030;
height: 56px;
}
.app-body {
position: fixed;
top: 56px;
left: 0;
right: 0;
bottom: 0;
display: flex;
}
.sidebar-wrapper {
background-color: #1e3a5f;
flex-shrink: 0;
overflow-y: auto;
height: 100%;
}
.sidebar-nav {
display: flex;
flex-direction: column;
padding: 0.5rem 0;
}
.sidebar-link {
color: rgba(255,255,255,0.75);
padding: 0.65rem 1.25rem;
text-decoration: none;
display: flex;
align-items: center;
gap: 10px;
transition: background 0.15s, color 0.15s;
font-size: 0.875rem;
white-space: nowrap;
}
.sidebar-link:hover {
background: rgba(255,255,255,0.08);
color: #fff;
text-decoration: none;
}
.sidebar-link.active {
background: rgba(255,255,255,0.15);
color: #fff;
border-left: 3px solid #5ba8ff;
padding-left: calc(1.25rem - 3px);
}
.sidebar-link i {
width: 18px;
text-align: center;
opacity: 0.85;
}
.main-content {
flex: 1;
min-width: 0;
overflow-y: auto;
height: 100%;
padding: 2rem 0.5rem 0.5rem 0.5rem;
}
.loading { display: none; }
</style>
</head>
<body>
<div id="app" style="height: 100%">
<nav class="navbar navbar-expand-md navbar-dark bg-primary shadow-sm">
<div class="container" style="padding-top: 0px">
<!--
<a class="navbar-brand" href="{{ url('/home') }}">
<img id='logo' src="{{asset('/img/ichamba.svg')}}">
</a>
-->
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
<span class="navbar-toggler-icon"></span>
</button>
<nav class="navbar navbar-fixed navbar-expand-md navbar-dark bg-primary shadow-sm">
<div class="container-fluid">
<a class="navbar-brand" href="{{ url('/home') }}">
<img id='logo' src="{{ asset('/img/jobhero.svg') }}" style="height:32px;">
</a>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<!-- Left Side Of Navbar -->
<ul class="navbar-nav mr-auto">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
<span class="navbar-toggler-icon"></span>
</button>
</ul>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto"></ul>
<!-- Right Side Of Navbar -->
<ul class="navbar-nav ml-auto">
<!-- Authentication Links -->
@guest
<li class="nav-item">
<a class="nav-link" href="{{ route('login') }}">{{ __('Iniciar sesión') }}</a>
</li>
@else
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre style="padding-left:55px;">
<img src="{{ isset(Auth::user()->profile_photo) ? asset('img/users/' . Auth::user()->id . '/' . Auth::user()->profile_photo):asset('img/users/default.png') }}" style="width:48px; height:auto; position:absolute; top:-5px; left:-1px; border-radius:50%"/>
{{ Auth::user()->name }} <span class="caret"></span>
<ul class="navbar-nav ml-auto">
@guest
<li class="nav-item">
<a class="nav-link" href="{{ route('login') }}">{{ __('Iniciar sesión') }}</a>
</li>
@else
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre style="padding-left:55px;">
<img src="{{ isset(Auth::user()->profile_photo) ? asset('img/users/' . Auth::user()->id . '/' . Auth::user()->profile_photo) : asset('img/users/default.png') }}" style="width:48px; height:auto; position:absolute; top:-5px; left:-1px; border-radius:50%"/>
{{ Auth::user()->name }} <span class="caret"></span>
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route('logout') }}"
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
{{ __('Cerrar sesión') }}
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route('logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Cerrar sesión') }}
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
@csrf
</form>
</div>
</li>
@endguest
</ul>
</div>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
@csrf
</form>
</div>
</li>
@endguest
</ul>
</div>
</nav>
</div>
</nav>
<main class="py-4">
<div class="app-body">
@auth
@if(Auth::user()->role_id >= 5)
@include('sidebar')
@endif
@endauth
<main class="main-content">
@yield('content')
{!! GoogleReCaptchaV3::init() !!}
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script src="https://twitter.github.io/typeahead.js/releases/latest/typeahead.bundle.js"></script>
<script src="{{ asset('js/bootstrap-tagsinput.min.js') }}"></script>
@yield('js')
{!! GoogleReCaptchaV3::init() !!}
</main>
</div>
@mapscripts
<script src="{{ asset('js/app.js') }}"></script>
<script src="https://code.jquery.com/ui/1.13.2/jquery-ui.min.js"></script>
<script src="https://twitter.github.io/typeahead.js/releases/latest/typeahead.bundle.js"></script>
<script src="{{ asset('js/bootstrap-tagsinput.min.js') }}"></script>
@yield('js')
</body>
</html>

View File

@@ -12,5 +12,5 @@
@endsection
@section('js')
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
<script src="{{ asset('js/ajaxcrud.js') }}?v={{ filemtime(public_path('js/ajaxcrud.js')) }}"></script>
@endsection

View File

@@ -1,10 +1,7 @@
@extends('layouts.app')
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -80,8 +77,5 @@
</tbody>
</table>
<ul class="pagination">
{{ $ichambaparameters->links() }}
</ul>
{{ $ichambaparameters->links() }}
</div>
@endsection

View File

@@ -12,5 +12,5 @@
@endsection
@section('js')
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
<script src="{{ asset('js/ajaxcrud.js') }}?v={{ filemtime(public_path('js/ajaxcrud.js')) }}"></script>
@endsection

View File

@@ -1,103 +1,73 @@
@extends('layouts.app')
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@php
$currentField = request('field', 'total_amount');
$currentSort = request('sort', 'desc');
$nextSort = $currentSort === 'asc' ? 'desc' : 'asc';
$sortUrl = fn($f) => url('payments') . '?' . http_build_query(array_filter(['date_from' => $dateFrom, 'date_to' => $dateTo, 'field' => $f, 'sort' => $currentField === $f ? $nextSort : 'desc']));
@endphp
<div class="row">
<div class="col-sm-7">
<h3>Pagos</h3>
</div>
<div class="col-sm-5">
<h3>Pagos a Proveedores</h3>
</div>
<div class="col-sm-7">
<div class="pull-right">
{!! Form::open(['method'=>'GET','url'=>'finishedcontracts','class'=>'navbar-form navbar-left','role'=>'search']) !!}
<div class="input-group">
<input class="form-control" id="search"
value="{{ request()->session()->get('search') }}"
placeholder="Buscar" name="search"
type="text" id="search"/>
<div class="input-group-btn">
<button type="submit" class="btn btn-primary">
<i class="fa fa-search" aria-hidden="true"></i>
</button>
</div>
</div>
{!! Form::open(['method' => 'GET', 'url' => 'payments', 'class' => 'form-inline', 'role' => 'search']) !!}
<label class="mr-2 mb-0">Filtrar</label>
<input type="date" class="form-control mr-1" name="date_from" value="{{ $dateFrom }}">
<input type="date" class="form-control mr-1" name="date_to" value="{{ $dateTo }}">
<button type="submit" class="btn btn-primary mr-1">
<i class="fa fa-filter" aria-hidden="true"></i>
</button>
<a href="{{ url('payments') }}" class="btn btn-default">
<i class="fa fa-times" aria-hidden="true"></i>
</a>
{!! Form::close() !!}
</div>
</div>
</div>
<table class="table">
<thead>
<tr>
<th style="vertical-align: middle"><a href="{{url('payment?field=id&sort='.(request()->session()->get('sort')=='asc'?'desc':'asc'))}}">ID</a></th>
{{request()->session()->get('field')=='id'?(request()->session()->get('sort')=='asc'?'':''):''}}
<th style="vertical-align: middle"><a href="{{url('payment?field=user_id&sort='.(request()->session()->get('sort')=='asc'?'desc':'asc'))}}">Usuario</a></th>
{{request()->session()->get('field')=='user_id'?(request()->session()->get('sort')=='asc'?'':''):''}}
<th style="vertical-align: middle"><a href="{{url('payment?field=membership&sort='.(request()->session()->get('sort')=='asc'?'desc':'asc'))}}">Email</a></th>
{{request()->session()->get('field')=='membership'?(request()->session()->get('sort')=='asc'?'':''):''}}
<th style="vertical-align: middle"><a href="{{url('payment?field=RFC&sort='.(request()->session()->get('sort')=='asc'?'desc':'asc'))}}">RFC o CURP</a></th>
{{request()->session()->get('field')=='RFC'?(request()->session()->get('sort')=='asc'?'':''):''}}
<th style="vertical-align: middle"><a href="{{url('payment?field=clabe&sort='.(request()->session()->get('sort')=='asc'?'desc':'asc'))}}">CLABE</a></th>
{{request()->session()->get('field')=='clabe'?(request()->session()->get('sort')=='asc'?'':''):''}}
<th style="vertical-align: middle"><a href="{{url('payment?field=bank_id&sort='.(request()->session()->get('sort')=='asc'?'desc':'asc'))}}">Banco</a></th>
{{request()->session()->get('field')=='bank_id'?(request()->session()->get('sort')=='asc'?'':''):''}}
<th style="vertical-align: middle"><a href="{{url('payment?field=bank_id&sort='.(request()->session()->get('sort')=='asc'?'desc':'asc'))}}">Código Banco</a></th>
{{request()->session()->get('field')=='bank_id'?(request()->session()->get('sort')=='asc'?'':''):''}}
<th style="vertical-align: middle"><a href="{{url('payment?field=amount&sort='.(request()->session()->get('sort')=='asc'?'desc':'asc'))}}">Monto</a></th>
{{request()->session()->get('field')=='amount'?(request()->session()->get('sort')=='asc'?'':''):''}}
<th style="vertical-align: middle"><a href="{{url('payment?field=revenue&sort='.(request()->session()->get('sort')=='asc'?'desc':'asc'))}}">Utilidad</a></th>
{{request()->session()->get('field')=='revenue'?(request()->session()->get('sort')=='asc'?'':''):''}}
<th style="vertical-align: middle"><a href="{{url('payment?field=IVA&sort='.(request()->session()->get('sort')=='asc'?'desc':'asc'))}}">Retención IVA</a></th>
{{request()->session()->get('field')=='IVA'?(request()->session()->get('sort')=='asc'?'':''):''}}
<th style="vertical-align: middle"><a href="{{url('payment?field=ISR&sort='.(request()->session()->get('sort')=='asc'?'desc':'asc'))}}">Retención ISR</a></th>
{{request()->session()->get('field')=='ISR'?(request()->session()->get('sort')=='asc'?'':''):''}}
<th style="vertical-align: middle"><a href="{{url('payment?field=ichamba_fee&sort='.(request()->session()->get('sort')=='asc'?'desc':'asc'))}}">Retención iChamba</a></th>
{{request()->session()->get('field')=='ichamba_fee'?(request()->session()->get('sort')=='asc'?'':''):''}}
<th style="vertical-align: middle"><a href="{{ $sortUrl('company_name') }}">Proveedor</a></th>
<th style="vertical-align: middle"><a href="{{ $sortUrl('email') }}">Email</a></th>
<th style="vertical-align: middle"><a href="{{ $sortUrl('rfc_curp') }}">RFC / CURP</a></th>
<th style="vertical-align: middle"><a href="{{ $sortUrl('clabe') }}">CLABE</a></th>
<th style="vertical-align: middle"><a href="{{ $sortUrl('bank') }}">Banco</a></th>
<th style="vertical-align: middle"><a href="{{ $sortUrl('contract_count') }}">Contratos</a></th>
<th style="vertical-align: middle"><a href="{{ $sortUrl('total_amount') }}">Monto Total</a></th>
<th style="vertical-align: middle"><a href="{{ $sortUrl('total_revenue') }}">Utilidad</a></th>
<th style="vertical-align: middle"><a href="{{ $sortUrl('total_iva') }}">Ret. IVA</a></th>
<th style="vertical-align: middle"><a href="{{ $sortUrl('total_isr') }}">Ret. ISR</a></th>
<th style="vertical-align: middle"><a href="{{ $sortUrl('total_fee') }}">Ret. JobHero</a></th>
</tr>
</thead>
<tbody>
@php
$i=1;
@endphp
@foreach ($payments as $payment)
<tr>
<th>{{ $payment->id }}</th>
<td>{{ $payment->suppliers->company_name }}</td>
<td >{{ $payment->suppliers->user->email }}</td>
<td >{{ (!$payment->suppliers->RFC) ? $payment->suppliers->CURP : $payment->suppliers->RFC }}</td>
<td >{{ $payment->suppliers->clabe }}</td>
<td >{{ (isset($payment->suppliers->banks->name) ? $payment->suppliers->banks->name : null) }}</td>
<td >{{ (isset($payment->suppliers->banks->code) ? $payment->suppliers->banks->code : null) }}</td>
<td >{{ $payment->amount }}</td>
<td >{{ $payment->revenue }}</td>
<td >{{ $payment->IVA }}</td>
<td >{{ $payment->ISR }}</td>
<td >{{ $payment->ichamba_fee }}</td>
@foreach ($payments as $row)
<tr>
<th>{{ optional($row->suppliers)->company_name ?? '—' }}</th>
<td>{{ optional(optional($row->suppliers)->user)->email ?? '—' }}</td>
<td>{{ optional($row->suppliers)->RFC ?: optional($row->suppliers)->CURP ?? '—' }}</td>
<td>{{ optional($row->suppliers)->clabe ?? '—' }}</td>
<td>{{ optional(optional($row->suppliers)->banks)->name ?? '—' }}</td>
<td>{{ $row->contract_count }}</td>
<td>${{ number_format($row->total_amount, 2) }}</td>
<td>${{ number_format($row->total_revenue, 2) }}</td>
<td>${{ number_format($row->total_iva, 2) }}</td>
<td>${{ number_format($row->total_isr, 2) }}</td>
<td>${{ number_format($row->total_fee, 2) }}</td>
</tr>
@endforeach
</tbody>
</table>
<ul class="pagination">
{{ $payments->links() }}
</ul>
{{ $payments->links() }}
</div>
@endsection

View File

@@ -12,5 +12,5 @@
@endsection
@section('js')
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
<script src="{{ asset('js/ajaxcrud.js') }}?v={{ filemtime(public_path('js/ajaxcrud.js')) }}"></script>
@endsection

View File

@@ -1,10 +1,7 @@
@extends('layouts.app')
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -100,8 +97,5 @@
</tbody>
</table>
<ul class="pagination">
{{ $postulations->links() }}
</ul>
{{ $postulations->links() }}
</div>
@endsection

View File

@@ -7,8 +7,7 @@
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -58,8 +57,6 @@
'markers' => $mapMarkers
])
<ul class="pagination">
{{ $postulations->links() }}
</ul>
{{ $postulations->links() }}
</div>
@endsection

View File

@@ -12,5 +12,5 @@
@endsection
@section('js')
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
<script src="{{ asset('js/ajaxcrud.js') }}?v={{ filemtime(public_path('js/ajaxcrud.js')) }}"></script>
@endsection

View File

@@ -4,8 +4,7 @@
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -112,8 +111,6 @@
</tbody>
</table>
<ul class="pagination">
{{ $comments->links() }}
</ul>
{{ $comments->links() }}
</div>
@endsection

View File

@@ -1,10 +1,7 @@
@extends('layouts.app')
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -79,8 +76,5 @@
</tbody>
</table>
<ul class="pagination">
{{ $reports->links() }}
</ul>
{{ $reports->links() }}
</div>
@endsection

View File

@@ -1,19 +1,46 @@
<div style="width:10%; height: calc(100% + 25px); margin-left:-15px; float: left; background-color:#c6e0f5">
<!-- Sidebar-->
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action list-group-item-secondary p-3" href="/home">Inicio</a>
<a class="list-group-item list-group-item-action list-group-item-primary p-3" href="/users">Usuarios</a>
<a class="list-group-item list-group-item-action list-group-item-primary p-3" href="/supplier">Proveedores</a>
<a class="list-group-item list-group-item-action list-group-item-primary p-3" href="/categories">Categorias</a>
<a class="list-group-item list-group-item-action list-group-item-primary p-3" href="/banks">Bancos</a>
<a class="list-group-item list-group-item-action list-group-item-primary p-3" href="/cards">Tarjetas</a>
<a class="list-group-item list-group-item-action list-group-item-primary p-3" href="/payments">Pagos</a>
<a class="list-group-item list-group-item-action list-group-item-primary p-3" href="/postulations">Postulaciones</a>
<a class="list-group-item list-group-item-action list-group-item-primary p-3" href="/currentcontracts">Contratos Actuales</a>
<a class="list-group-item list-group-item-action list-group-item-primary p-3" href="/finishedcontracts">Contratos Finalizados</a>
<a class="list-group-item list-group-item-action list-group-item-primary p-3" href="/reports">Reportes</a>
<a class="list-group-item list-group-item-action list-group-item-primary p-3" href="/coupons">Cupones</a>
<a class="list-group-item list-group-item-action list-group-item-primary p-3" href="/parameters">Parámetros</a>
<a class="list-group-item list-group-item-action list-group-item-primary p-3" href="/status">Status de contratos</a>
</div>
<div class="sidebar-wrapper">
<nav class="sidebar-nav">
<a href="/home" class="sidebar-link {{ Request::is('home') ? 'active' : '' }}">
<i class="fa fa-home"></i> Inicio
</a>
<a href="/users" class="sidebar-link {{ Request::is('users*') ? 'active' : '' }}">
<i class="fa fa-users"></i> Usuarios
</a>
<a href="/supplier" class="sidebar-link {{ Request::is('supplier*') ? 'active' : '' }}">
<i class="fa fa-wrench"></i> Proveedores
</a>
<a href="/categories" class="sidebar-link {{ Request::is('categories*') ? 'active' : '' }}">
<i class="fa fa-list-alt"></i> Categorías
</a>
<a href="/banks" class="sidebar-link {{ Request::is('banks*') ? 'active' : '' }}">
<i class="fa fa-university"></i> Bancos
</a>
<a href="/cards" class="sidebar-link {{ Request::is('cards*') ? 'active' : '' }}">
<i class="fa fa-credit-card"></i> Tarjetas
</a>
<a href="/payments" class="sidebar-link {{ Request::is('payments*') ? 'active' : '' }}">
<i class="fa fa-money"></i> Pagos
</a>
<a href="/postulations" class="sidebar-link {{ Request::is('postulations*') ? 'active' : '' }}">
<i class="fa fa-file-text"></i> Postulaciones
</a>
<a href="/currentcontracts" class="sidebar-link {{ Request::is('currentcontracts*') ? 'active' : '' }}">
<i class="fa fa-handshake-o"></i> Contratos Actuales
</a>
<a href="/finishedcontracts" class="sidebar-link {{ Request::is('finishedcontracts*') ? 'active' : '' }}">
<i class="fa fa-check-circle"></i> Contratos Finalizados
</a>
<a href="/reports" class="sidebar-link {{ Request::is('reports*') ? 'active' : '' }}">
<i class="fa fa-flag"></i> Reportes
</a>
<a href="/coupons" class="sidebar-link {{ Request::is('coupons*') ? 'active' : '' }}">
<i class="fa fa-ticket"></i> Cupones
</a>
<a href="/parameters" class="sidebar-link {{ Request::is('parameters*') ? 'active' : '' }}">
<i class="fa fa-cog"></i> Parámetros
</a>
<a href="/status" class="sidebar-link {{ Request::is('status*') ? 'active' : '' }}">
<i class="fa fa-toggle-on"></i> Status de contratos
</a>
</nav>
</div>

View File

@@ -12,5 +12,5 @@
@endsection
@section('js')
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
<script src="{{ asset('js/ajaxcrud.js') }}?v={{ filemtime(public_path('js/ajaxcrud.js')) }}"></script>
@endsection

View File

@@ -1,10 +1,7 @@
@extends('layouts.app')
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -15,21 +12,19 @@
</div>
<div class="col-sm-5">
<div class="pull-right">
{!! Form::open(['method'=>'GET','url'=>'status','class'=>'navbar-form navbar-left','role'=>'search']) !!}
<div class="input-group">
<input class="form-control" id="search"
value="{{ request()->session()->get('search') }}"
onkeydown="if (event.keyCode == 13) ajaxLoad('{{url('status')}}?search='+this.value)"
placeholder="Buscar" name="search"
type="text" id="search"/>
type="text"/>
<div class="input-group-btn">
<a href="{{url('status')}}">
<button type="submit" class="btn btn-primary"
onclick="ajaxLoad('{{url('/status')}}?search='+$('#search').val())">
<i class="fa fa-search" aria-hidden="true"></i>
<button type="submit" class="btn btn-primary">
<i class="fa fa-search" aria-hidden="true"></i>
</button>
</a>
</div>
</div>
{!! Form::close() !!}
</div>
</div>
</div>
@@ -74,8 +69,5 @@
</tbody>
</table>
<ul class="pagination">
{{ $status->links() }}
</ul>
{{ $status->links() }}
</div>
@endsection

View File

@@ -12,5 +12,5 @@
@endsection
@section('js')
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
<script src="{{ asset('js/ajaxcrud.js') }}?v={{ filemtime(public_path('js/ajaxcrud.js')) }}"></script>
@endsection

View File

@@ -10,45 +10,7 @@
@else
{!! Form::open(['id'=>'frm', 'files' => 'true']) !!}
@endif
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBmkTsg0-1VKllM_vHD6V1EhPnF0YUP-88&libraries=places"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script type="text/javascript">
google.maps.event.addDomListener(window, 'load', function () {
var searchBox = new google.maps.places.Autocomplete(document.getElementById('address'));
google.maps.event.addListener(searchBox, 'place_changed', function () {
var place = searchBox.getPlace();
var lat = place.geometry.location.lat();
console.log(lat);
var lng = place.geometry.location.lng();
console.log(lng);
$('#lat').val(lat);
$('#lng').val(lng);
});
});
</script>
<script type="text/javascript">
$( function() {
var categories = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.whitespace,
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: {
url: "/api/categories-name",
}
});
categories.initialize();
$('#categories').tagsinput({
typeaheadjs: {
name: 'categories',
source: categories.ttAdapter()
}
});
});
</script>
<div class="form-group row required">
{!! Form::label("company_name","Tu nombre o nombre de la empresa*",["class"=>"col-form-label col-md-3 col-lg-2"]) !!}
<div class="col-md-8">
@@ -180,3 +142,29 @@
</div>
</div>
@endsection
@section('js')
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBmkTsg0-1VKllM_vHD6V1EhPnF0YUP-88&libraries=places"></script>
<script type="text/javascript">
var mapSearchBox = new google.maps.places.Autocomplete(document.getElementById('address'));
google.maps.event.addListener(mapSearchBox, 'place_changed', function () {
var place = mapSearchBox.getPlace();
$('#lat').val(place.geometry.location.lat());
$('#lng').val(place.geometry.location.lng());
});
var categories = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.whitespace,
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: { url: "/api/categories-name" }
});
categories.initialize();
$('#categories').tagsinput({
typeaheadjs: {
name: 'categories',
source: categories.ttAdapter()
}
});
</script>
@endsection

View File

@@ -1,10 +1,7 @@
@extends('layouts.app')
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -147,8 +144,5 @@
</tbody>
</table>
<ul class="pagination">
{{ $suppliers->links() }}
</ul>
{{ $suppliers->links() }}
</div>
@endsection

View File

@@ -12,5 +12,5 @@
@endsection
@section('js')
<script src="{{ asset('js/ajaxcrud.js') }}"></script>
<script src="{{ asset('js/ajaxcrud.js') }}?v={{ filemtime(public_path('js/ajaxcrud.js')) }}"></script>
@endsection

View File

@@ -1,10 +1,7 @@
@extends('layouts.app')
@section('content')
@if (Auth::user()->role_id >= 5)
<div class="container-fluid" style="height:100%">
@include('sidebar')
<div style="width:90%; float: left; margin:1em 0 0 1em">
<div>
@else
<div class="container" style="margin:0 1em">
@endif
@@ -108,8 +105,5 @@
</tbody>
</table>
<ul class="pagination">
{{ $users->links() }}
</ul>
{{ $users->links() }}
</div>
@endsection

View File

@@ -1,7 +1,7 @@
<tr>
<td class="header" style="background-color:#0080ff">
<a href="{{ $url }}">
<img alt="logo" style="max-width:15em" src="https://jobheroglobal.com/img/jobhero.svg">
<img alt="logo" style="max-width:15em" src="{{ asset('/img/jobhero.svg') }}">
</a>
</td>
</tr>