mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-28 04:01:10 -04:00
100 lines
2.3 KiB
PHP
100 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace Crater\Models;
|
|
|
|
use Crater\Http\Requests\MailSenderRequest;
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Config;
|
|
|
|
class MailSender extends Model
|
|
{
|
|
use HasFactory;
|
|
|
|
protected $guarded = [
|
|
'id'
|
|
];
|
|
|
|
protected $casts = [
|
|
'settings' => 'array',
|
|
'is_default' => 'boolean'
|
|
];
|
|
|
|
public function company()
|
|
{
|
|
return $this->belongsTo(Company::class);
|
|
}
|
|
|
|
public function setSettingsAttribute($value)
|
|
{
|
|
$this->attributes['settings'] = json_encode($value);
|
|
}
|
|
|
|
public function scopeWhereOrder($query, $orderByField, $orderBy)
|
|
{
|
|
$query->orderBy($orderByField, $orderBy);
|
|
}
|
|
|
|
public function scopeApplyFilters($query, array $filters)
|
|
{
|
|
$filters = collect($filters);
|
|
|
|
if ($filters->get('orderByField') || $filters->get('orderBy')) {
|
|
$field = $filters->get('orderByField') ? $filters->get('orderByField') : 'name';
|
|
$orderBy = $filters->get('orderBy') ? $filters->get('orderBy') : 'desc';
|
|
$query->whereOrder($field, $orderBy);
|
|
}
|
|
}
|
|
|
|
public function scopePaginateData($query, $limit)
|
|
{
|
|
if ($limit == 'all') {
|
|
return $query->get();
|
|
}
|
|
|
|
return $query->paginate($limit);
|
|
}
|
|
|
|
public function scopeWhereCompany($query)
|
|
{
|
|
$query->where('mail_senders.company_id', request()->header('company'));
|
|
}
|
|
|
|
public static function createFromRequest(MailSenderRequest $request)
|
|
{
|
|
$senderMail = self::create($request->getMailSenderPayload());
|
|
|
|
return $senderMail;
|
|
}
|
|
|
|
public function updateFromRequest(MailSenderRequest $request)
|
|
{
|
|
$data = $request->getMailSenderPayload();
|
|
|
|
$this->update($data);
|
|
|
|
return $this;
|
|
}
|
|
|
|
public static function setMailConfiguration($id, $check = null)
|
|
{
|
|
$mailSender = MailSender::find($id);
|
|
|
|
$settings = $mailSender->settings;
|
|
$settings['driver'] = $mailSender->driver;
|
|
$settings['from'] = [
|
|
'address' => $mailSender->from_address,
|
|
'name' => $mailSender->from_name
|
|
];
|
|
|
|
Config::set('mail', $settings);
|
|
|
|
if ($check) {
|
|
return $mailSender;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
}
|