6
0
Fork 0
jiqu-library-server/app/Models/DealerOrder.php

220 lines
4.7 KiB
PHP

<?php
namespace App\Models;
use App\Casts\JsonArray;
use App\Enums\DealerOrderSettleState;
use App\Enums\DealerOrderStatus;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Model;
class DealerOrder extends Model
{
use Filterable;
use HasDateTimeFormatter;
protected $attributes = [
'status' => DealerOrderStatus::Pending,
'settle_state' => DealerOrderSettleState::Pending,
];
protected $casts = [
'status' => DealerOrderStatus::class,
'settle_state' => DealerOrderSettleState::class,
'pay_info'=>JsonArray::class,
'pay_time'=> 'datetime',
'paied_time'=>'datetime',
'shipping_time'=>'datetime',
'shippinged_time'=>'datetime',
];
protected $fillable = [
'status',
'pay_info',
'pay_image',
'consignor_id',
'settle_state',
'consignee_name',
'consignee_telephone',
'consignee_zone',
'consignee_address',
'pay_time',
'paied_time',
'shipping_time',
'shippinged_time',
];
/**
* 获取待确认订单
*/
public function scopeOnlyPending($query)
{
return $query->where('status', DealerOrderStatus::Pending);
}
/**
* 已确认/待付款
*/
public function scopeOnlyPendinged($query)
{
return $query->where('status', DealerOrderStatus::Paying);
}
/**
* 待收款+待发货
*/
public function scopeOnlyPaid($query)
{
return $query->where('status', DealerOrderStatus::Confirming);
}
/**
* 已发货/待收货
*/
public function scopeOnlyShipping($query)
{
return $query->where('status', DealerOrderStatus::Shipped);
}
/**
* 已完成
*/
public function scopeOnlyCompleted($query)
{
return $query->where('status', DealerOrderStatus::Completed);
}
/**
* 已取消
*/
public function scopeOnlyCancelled($query)
{
return $query->where('status', DealerOrderStatus::Cancelled);
}
/**
* 此订单所属的用户的信息
*/
public function userInfo()
{
return $this->belongsTo(UserInfo::class, 'user_id', 'user_id');
}
/**
* 属于此订单的商品
*/
public function products()
{
return $this->hasMany(DealerOrderProduct::class, 'order_id');
}
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
public function consignor()
{
return $this->belongsTo(User::class, 'consignor_id');
}
public function isUser($userId)
{
return $this->user_id == $userId;
}
public function isConsignor($userId)
{
return $this->consignor_id == $userId;
}
/**
* 是否待确认订单
*
* @return boolean
*/
public function isPending()
{
return $this->status == DealerOrderStatus::Pending;
}
/**
* 是否待打款订单
*
* @return boolean
*/
public function isPendinged()
{
return $this->status == DealerOrderStatus::Paying;
}
/**
* 是待确认打款订单
*
* @return boolean
*/
public function isPay()
{
return $this->status == DealerOrderStatus::Confirming;
}
/**
* 是已确认收款的订单
*
* @return boolean
*/
public function isPaid()
{
return $this->status == DealerOrderStatus::Paid;
}
/**
* 是否待收货订单
*
* @return boolean
*/
public function isShipping()
{
return $this->status == DealerOrderStatus::Shipped;
}
/**
* 是否已取消
*
* @return boolean
*/
public function isCancelled()
{
return $this->status == DealerOrderStatus::Cancelled;
}
public function canCurd($userId)
{
return $this->isUser($userId) || $this->isConsignor($userId);
}
/**
* 获取发货人的打款信息
*
* @return void
*/
public function getConsignorPayInfo()
{
if ($this->isPendinged()) {//待打款订单显示发货人收款信息
if ($this->consignor?->dealer) {
$payInfo = $this->consignor->dealer->pay_info;
} else {
$payInfo = [
//todo-公司的收款信息
];
}
} elseif ($this->isPending() || $this->isCancelled()) {//如果是已取消订单或者待确认订单不显示收款信息
$payInfo = [];
} else {
$payInfo = $this->pay_info;
}
return $payInfo;
}
}