147 lines
3.6 KiB
PHP
147 lines
3.6 KiB
PHP
<?php namespace Lovata\Shopaholic\Models;
|
|
|
|
use Model;
|
|
|
|
use October\Rain\Database\Traits\Validation;
|
|
|
|
use Lovata\Toolbox\Classes\Helper\PriceHelper;
|
|
use Lovata\Toolbox\Traits\Helpers\PriceHelperTrait;
|
|
|
|
/**
|
|
* Class Price
|
|
* @package Lovata\Shopaholic\Models
|
|
* @author Andrey Kharanenka, a.khoronenko@lovata.com, LOVATA Group
|
|
*
|
|
* @mixin \October\Rain\Database\Builder
|
|
* @mixin \Eloquent
|
|
*
|
|
* @property $id
|
|
* @property int $item_id
|
|
* @property string $item_type
|
|
* @property string $price
|
|
* @property float $price_value
|
|
* @property string $discount_price
|
|
* @property float $discount_price_value
|
|
* @property string $old_price
|
|
* @property float $old_price_value
|
|
* @property int $price_type_id
|
|
* @property \October\Rain\Argon\Argon $created_at
|
|
* @property \October\Rain\Argon\Argon $updated_at
|
|
*
|
|
* @property \Lovata\Shopaholic\Models\PriceType $price_type
|
|
* @method \October\Rain\Database\Relations\BelongsTo|PriceType price_type()
|
|
*
|
|
* @method static $this getByItemID(int $iItemID)
|
|
* @method static $this getByItemType(string $sItemType)
|
|
* @method static $this getByPriceType(int $iPriceTypeID)
|
|
*/
|
|
class Price extends Model
|
|
{
|
|
use Validation;
|
|
use PriceHelperTrait;
|
|
|
|
public $table = 'lovata_shopaholic_prices';
|
|
|
|
public $rules = [
|
|
'item_id' => 'required',
|
|
'item_type' => 'required',
|
|
];
|
|
|
|
public $attributeNames = [];
|
|
|
|
public $attachOne = [];
|
|
public $attachMany = [];
|
|
public $hasMany = [];
|
|
public $belongsTo = [
|
|
'price_type' => [PriceType::class],
|
|
];
|
|
public $belongsToMany = [];
|
|
public $morphTo = [
|
|
'item' => [],
|
|
];
|
|
public $morphMany = [];
|
|
|
|
public $dates = ['created_at', 'updated_at'];
|
|
|
|
public $appends = [];
|
|
public $purgeable = [];
|
|
|
|
public $arPriceField = ['price', 'old_price', 'discount_price'];
|
|
|
|
public $fillable = [
|
|
'item_id',
|
|
'item_type',
|
|
'price',
|
|
'discount_price',
|
|
'old_price',
|
|
'price_type_id',
|
|
];
|
|
|
|
public $visible = [];
|
|
public $hidden = [];
|
|
|
|
/**
|
|
* Get by item id
|
|
* @param Offer $obQuery
|
|
* @param int $sData
|
|
*
|
|
* @return Offer
|
|
*/
|
|
public function scopeGetByItemID($obQuery, $sData)
|
|
{
|
|
if (!empty($sData)) {
|
|
$obQuery->where('item_id', $sData);
|
|
}
|
|
|
|
return $obQuery;
|
|
}
|
|
|
|
/**
|
|
* Get by item type
|
|
* @param Offer $obQuery
|
|
* @param int $sData
|
|
*
|
|
* @return Offer
|
|
*/
|
|
public function scopeGetByItemType($obQuery, $sData)
|
|
{
|
|
if (!empty($sData)) {
|
|
$obQuery->where('item_type', $sData);
|
|
}
|
|
|
|
return $obQuery;
|
|
}
|
|
|
|
/**
|
|
* Get by price type ID
|
|
* @param Offer $obQuery
|
|
* @param int $sData
|
|
*
|
|
* @return Offer
|
|
*/
|
|
public function scopeGetByPriceType($obQuery, $sData)
|
|
{
|
|
if (!empty($sData)) {
|
|
$obQuery->where('price_type_id', $sData);
|
|
} else {
|
|
$obQuery->whereNull('price_type_id');
|
|
}
|
|
|
|
return $obQuery;
|
|
}
|
|
|
|
/**
|
|
* Get discount_price_value attribute
|
|
* @return float
|
|
*/
|
|
protected function getDiscountPriceValueAttribute()
|
|
{
|
|
$fPrice = 0;
|
|
if ($this->old_price_value > 0) {
|
|
$fPrice = PriceHelper::round($this->old_price_value - $this->price_value);
|
|
}
|
|
|
|
return $fPrice;
|
|
}
|
|
}
|