MOON
Server: Apache
System: Linux e2e-78-16.ssdcloudindia.net 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
User: imensosw (1005)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system
Upload Files
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;
        }
    }
}