File: /home/imensosw/www/mpl.imenso.co/app/Models/PointAdjustment.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class PointAdjustment extends Model
{
protected $fillable = [
'user_id',
'amount',
'label',
];
public function user()
{
return $this->belongsTo(\App\Models\User::class);
}
public static function addNew($data)
{
$adjustment = self::create([
'user_id' => $data['user_id'],
'amount' => $data['amount'],
'label' => $data['label'],
]);
return $adjustment;
}
public static function calculate($data, $save = true)
{
switch ($data['type']) {
case 'ticket-created':
$now = new \Carbon\Carbon;
$ticket = $data['ticket'];
if (isset($ticket->event->announced_at) &&
$ticket->event->announced_at->format('Y-m-d') == $now->format('Y-m-d')) {
//Same day as announcement
if ($save) {
return self::addNew([
'user_id' => $ticket->owner->id,
'amount' => 30,
'label' => 'Ticket Purchase - '.$ticket->event->getName().' (day of release)',
]);
} else {
return 30;
}
} elseif ($ticket->event->event_at->isToday()) {
//Same day as event
if ($save) {
return self::addNew([
'user_id' => $ticket->owner->id,
'amount' => 5,
'label' => 'Ticket Purchase - '.$ticket->event->getName().' (on the day)',
]);
} else {
return 5;
}
} elseif ($ticket->event->event_at->diffInDays($now) <= 7) {
//Week of event
if ($save) {
return self::addNew([
'user_id' => $ticket->owner->id,
'amount' => 10,
'label' => 'Ticket Purchase - '.$ticket->event->getName().' (week of show)',
]);
} else {
return 10;
}
} else {
//Between 1 week and announced_at
if ($save) {
return self::addNew([
'user_id' => $ticket->owner->id,
'amount' => 20,
'label' => 'Ticket Purchase - '.$ticket->event->getName().' (more than 1 week before show)',
]);
} else {
return 20;
}
}
break;
case 'order':
$now = new \Carbon\Carbon;
$event = $data['order']->getTicketEvent();
if (isset($event->announced_at) &&
$event->announced_at->format('Y-m-d') == $now->format('Y-m-d')) {
//Same day as announcement
return 30;
} elseif ($event->event_at->isToday()) {
//Same day as event
return 5;
} elseif ($event->event_at->diffInDays($now) <= 7) {
//Week of event
return 10;
} else {
//Between 1 week and announced_at
return 20;
}
break;
}
}
}