feat(portal): lead module, WHMCS sync report/contacts/mapping, service lifecycle email templates
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5.5
parent
3c7710f1de
commit
a443ec3bf6
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lead\App\Models;
|
||||
|
||||
use App\Models\Customer;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Concerns\HasUuids;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
|
||||
class Lead extends Model
|
||||
{
|
||||
use HasUuids;
|
||||
|
||||
public const STATUSES = ['new', 'contacted', 'converted', 'lost'];
|
||||
|
||||
public const SOURCES = ['manual', 'whmcs_contact'];
|
||||
|
||||
protected $fillable = [
|
||||
'legacy_id',
|
||||
'customer_id',
|
||||
'whmcs_client_id',
|
||||
'fullname',
|
||||
'company',
|
||||
'email',
|
||||
'phone',
|
||||
'address',
|
||||
'source',
|
||||
'status',
|
||||
'receives_invoice_emails',
|
||||
'receives_domain_emails',
|
||||
'receives_support_emails',
|
||||
'receives_product_emails',
|
||||
'receives_general_emails',
|
||||
'note',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'receives_invoice_emails' => 'boolean',
|
||||
'receives_domain_emails' => 'boolean',
|
||||
'receives_support_emails' => 'boolean',
|
||||
'receives_product_emails' => 'boolean',
|
||||
'receives_general_emails' => 'boolean',
|
||||
];
|
||||
|
||||
public function uniqueIds(): array
|
||||
{
|
||||
return ['uuid'];
|
||||
}
|
||||
|
||||
public function customer(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Customer::class);
|
||||
}
|
||||
|
||||
public function scopeSearch(Builder $query, ?string $term): Builder
|
||||
{
|
||||
$term = trim((string) $term);
|
||||
|
||||
return $term === '' ? $query : $query->where(function (Builder $query) use ($term) {
|
||||
$like = '%' . addcslashes($term, '%_\\') . '%';
|
||||
$query->where('fullname', 'like', $like)
|
||||
->orWhere('company', 'like', $like)
|
||||
->orWhere('email', 'like', $like)
|
||||
->orWhere('phone', 'like', $like);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user