Advertisement.php 4.43 KB
<?php

namespace App\Models;

use App\Models\Pivots\GoalAdGroup;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Collection;

class Advertisement extends Model
{
    use SoftDeletes;

    const STATUS_ACCEPTED = 'ACCEPTED';
    const STATUS_DRAFT = 'DRAFT';
    const STATUS_MODERATION = 'MODERATION';
    const STATUS_PREACCEPTED = 'PREACCEPTED';
    const STATUS_REJECTED = 'REJECTED';
    const STATUS_UNKNOWN = 'UNKNOWN';

    const STATE_OFF = 'OFF';
    const STATE_ON = 'ON';
    const STATE_SUSPENDED = 'SUSPENDED';
    const STATE_OFF_BY_MONITORING = 'OFF_BY_MONITORING';
    const STATE_ARCHIVED = 'ARCHIVED';
    const STATE_UNKNOWN = 'UNKNOWN';

    const AGE_LABEL_0 = 'AGE_0';
    const AGE_LABEL_6 = 'AGE_6';
    const AGE_LABEL_12 = 'AGE_12';
    const AGE_LABEL_16 = 'AGE_16';
    const AGE_LABEL_18 = 'AGE_18';
    const AGE_LABEL_MONTHS_0 = 'MONTHS_0';
    const AGE_LABEL_MONTHS_1 = 'MONTHS_1';
    const AGE_LABEL_MONTHS_2 = 'MONTHS_2';
    const AGE_LABEL_MONTHS_3 = 'MONTHS_3';
    const AGE_LABEL_MONTHS_4 = 'MONTHS_4';
    const AGE_LABEL_MONTHS_5 = 'MONTHS_5';
    const AGE_LABEL_MONTHS_6 = 'MONTHS_6';
    const AGE_LABEL_MONTHS_7 = 'MONTHS_7';
    const AGE_LABEL_MONTHS_8 = 'MONTHS_8';
    const AGE_LABEL_MONTHS_9 = 'MONTHS_9';
    const AGE_LABEL_MONTHS_10 = 'MONTHS_10';
    const AGE_LABEL_MONTHS_11 = 'MONTHS_11';
    const AGE_LABEL_MONTHS_12 = 'MONTHS_12';

    const TYPE_TEXT_AD = 'TEXT_AD';
    const TYPE_MOBILE_APP_AD = 'MOBILE_APP_AD';
    const TYPE_DYNAMIC_TEXT_AD = 'DYNAMIC_TEXT_AD';
    const TYPE_IMAGE_AD = 'IMAGE_AD';
    const TYPE_CPC_VIDEO_AD = 'CPC_VIDEO_AD';
    const TYPE_CPM_BANNER_AD = 'CPM_BANNER_AD';
    const TYPE_CPM_VIDEO_AD = 'CPM_VIDEO_AD';
    const TYPE_SMART_AD = 'SMART_AD';

    const SUB_TYPE_NONE = 'NONE';
    const SUB_TYPE_TEXT_IMAGE_AD = 'TEXT_IMAGE_AD';
    const SUB_TYPE_MOBILE_APP_IMAGE_AD = 'MOBILE_APP_IMAGE_AD';
    const SUB_TYPE_MOBILE_APP_CPC_VIDEO_AD_BUILDER_AD = 'MOBILE_APP_CPC_VIDEO_AD_BUILDER_AD';
    const SUB_TYPE_TEXT_AD_BUILDER_AD = 'TEXT_AD_BUILDER_AD';
    const SUB_TYPE_MOBILE_APP_AD_BUILDER_AD = 'MOBILE_APP_AD_BUILDER_AD';


    protected $fillable = [
        'external_id',
        'campaign_external_id',
        'ad_group_external_id',
        'campaign_id',
        'ad_group_id',

        'status',
        'state',
        'status_clarification',
        'ad_categories',
        'age_label',

        'title',
        'title2',
        'text',
        'href',
        'mobile',
        'display_domain',
        'display_url_path',
        'v_card_id',
        'ad_image_hash',
        'site_link_set_id',
        'display_url_path_moderation',
        'v_card_moderation',
        'site_links_moderation',
        'ad_image_moderation',
        'ad_extensions',
        'video_extension',
        'price_extension',
        'turbo_page_id',
        'turbo_page_moderation',
        'business_id',
        'prefer_v_card_over_business',

        'updated_self',
    ];

    protected $casts = [
        'ad_categories' => 'array',
        'mobile' => 'boolean',
        'display_url_path_moderation' => 'json',
        'v_card_moderation' => 'json',
        'site_links_moderation' => 'json',
        'ad_image_moderation' => 'json',
        'ad_extensions' => 'json',
        'video_extension' => 'json',
        'price_extension' => 'json',
        'turbo_page_moderation' => 'json',
        'prefer_v_card_over_business' => 'boolean',
    ];

    /**
     * @return Collection
     */
    static public function getPropertiesWatch()
    {
        return collect([

        ]);
    }

    public static function boot()
    {
        parent::boot();

        static::created(function (Advertisement $advertisement) {
            //
        });

        static::updated(function (Advertisement $advertisement) {
            //
        });
    }

    /**
     * @param Builder $query
     * @return Builder
     */
    public function scopeForUpdatedSelf($query)
    {
        return $query->whereNotNull("{$query->getModel()->getTable()}.updated_self");
    }

    public function groups()
    {
        return $this->hasMany(AdGroup::class, 'ad_group_id');
    }

    public function campaign()
    {
        return $this->belongsTo(Campaigns::class, 'campaign_id');
    }

    public function campaignForEnabledForManaged()
    {
        return $this->campaign()->forEnabled()->forManaged();
    }

}