Files
sirpremiumv2/app/Http/Livewire/ShowTop.php
T
2025-02-27 15:19:52 -05:00

112 lines
4.0 KiB
PHP
Executable File

<?php
namespace App\Http\Livewire;
use App\Models\Configuracione;
use App\Models\Log_general;
use App\Models\Notificacion;
use App\Models\PremioEntregado;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Livewire\Component;
use Jantinnerezo\LivewireAlert\LivewireAlert;
class ShowTop extends Component
{
public $configuracion;
public $showLastMonth = false;
use LivewireAlert;
public function render()
{
$this->configuracion = Configuracione::orderby('id', 'desc')->first();
$monthYear = date('m-Y', strtotime('last month'));
$month = $this->showLastMonth ? date('m', strtotime('last month')) : date('m');
$currentYear = $this->showLastMonth && $month == 12 ? date('Y', strtotime('last year')) : date('Y');
$consulta_ventas = User::with(['historiales_venta' => function ($query) use ($month, $currentYear) {
$query->whereMonth('fecha_inicio', $month)
->whereYear('fecha_inicio', $currentYear)
->where('estado', 'activo');
}])
->withCount(['historiales_venta' => function ($query) use ($month, $currentYear) {
$query->whereMonth('fecha_inicio', $month)
->whereYear('fecha_inicio', $currentYear)
->where('estado', 'activo');
}])
->orderBy('historiales_venta_count', 'desc')
->limit(10)
->get();
//
$consultaPremioEntregado = PremioEntregado::where('fecha', $monthYear)
->first();
return view('livewire.show-top', [
'usuarios' => $consulta_ventas,
'consultaPremioEntregado' => $consultaPremioEntregado
]);
}
public function entregarPremio()
{
$previousMonthDate = strtotime('first day of last month');
$month = date('m', $previousMonthDate);
$year = date('Y', $previousMonthDate);
$rangos = ['primero', 'segundo', 'tercero', 'cuarto', 'quinto', 'sexto', 'séptimo', 'octavo', 'noveno', 'décimo'];
$top_vendedores = User::with(['historiales_venta' => function ($query) use ($month, $year) {
$query->whereMonth('fecha_inicio', $month)
->whereYear('fecha_inicio', $year)
->where('estado', 'activo');
}])
->withCount(['historiales_venta' => function ($query) use ($month, $year) {
$query->whereMonth('fecha_inicio', $month)
->whereYear('fecha_inicio', $year)
->where('estado', 'activo');
}])
->orderBy('historiales_venta_count', 'desc')
->limit(10)
->get();
foreach ($top_vendedores as $index => $vendedor) {
$premio = $this->configuracion->{'premio_' . ($index + 1)};
$notificacion = new Notificacion();
$notificacion->remitente_id = Auth::user()->id;
// $notificacion->destinatario_id = 410;`
$notificacion->destinatario_id = $vendedor->id;
$notificacion->titulo = 'Felicidades ' . $vendedor->name ?? '' . ' 🎊';
$notificacion->descripcion = 'Quedaste ' . $rangos[$index] . ' en el #Top10MejoresDistribuidores del mes de ' . date('M', strtotime('last month'));
$notificacion->estado = 1;
$notificacion->todos = 0;
$notificacion->premio = str_replace('.', '', str_replace('$', '', $premio));
$notificacion->save();
Log_general::create([
'user_id' => Auth::user()->id,
'detalle' => 'El usuario ' . Auth::user()->name . ' ha entregado el premio ' . $premio . ' para el usuario: ' . $vendedor->name . ' - ' . $vendedor->email,
'tipo' => 'premio',
'historial_id' => null
]);
}
PremioEntregado::create([
'user_id' => Auth::user()->id,
'fecha' => $month . '-' . $year,
'entregado' => 1
]);
$this->alert('success', 'Premios entregados correctamente', [
'position' => 'top'
]);
}
}