2017-01-30 21:40:43 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Models;
|
2015-03-17 07:45:25 +10:00
|
|
|
|
2015-10-28 21:22:07 +02:00
|
|
|
use Carbon;
|
2015-03-31 12:38:24 +03:00
|
|
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
2017-01-30 21:40:43 +02:00
|
|
|
use Utils;
|
2017-04-30 22:18:17 +03:00
|
|
|
use App\Models\LookupInvitation;
|
2015-03-31 12:38:24 +03:00
|
|
|
|
2016-07-03 18:11:58 +02:00
|
|
|
/**
|
2017-01-30 21:40:43 +02:00
|
|
|
* Class Invitation.
|
2016-07-03 18:11:58 +02:00
|
|
|
*/
|
2015-03-17 07:45:25 +10:00
|
|
|
class Invitation extends EntityModel
|
|
|
|
|
{
|
2015-03-31 12:38:24 +03:00
|
|
|
use SoftDeletes;
|
2016-07-03 18:11:58 +02:00
|
|
|
/**
|
|
|
|
|
* @var array
|
|
|
|
|
*/
|
2015-03-31 12:38:24 +03:00
|
|
|
protected $dates = ['deleted_at'];
|
|
|
|
|
|
2016-08-08 23:47:09 +03:00
|
|
|
/**
|
|
|
|
|
* @return mixed
|
|
|
|
|
*/
|
|
|
|
|
public function getEntityType()
|
|
|
|
|
{
|
|
|
|
|
return ENTITY_INVITATION;
|
|
|
|
|
}
|
|
|
|
|
|
2016-07-03 18:11:58 +02:00
|
|
|
/**
|
|
|
|
|
* @return mixed
|
|
|
|
|
*/
|
2015-03-17 07:45:25 +10:00
|
|
|
public function invoice()
|
|
|
|
|
{
|
2015-04-16 22:57:12 +03:00
|
|
|
return $this->belongsTo('App\Models\Invoice')->withTrashed();
|
2015-03-17 07:45:25 +10:00
|
|
|
}
|
|
|
|
|
|
2016-07-03 18:11:58 +02:00
|
|
|
/**
|
|
|
|
|
* @return mixed
|
|
|
|
|
*/
|
2015-03-17 07:45:25 +10:00
|
|
|
public function contact()
|
|
|
|
|
{
|
2015-03-31 12:38:24 +03:00
|
|
|
return $this->belongsTo('App\Models\Contact')->withTrashed();
|
2015-03-17 07:45:25 +10:00
|
|
|
}
|
|
|
|
|
|
2016-07-03 18:11:58 +02:00
|
|
|
/**
|
|
|
|
|
* @return mixed
|
|
|
|
|
*/
|
2015-03-17 07:45:25 +10:00
|
|
|
public function user()
|
|
|
|
|
{
|
2015-03-23 16:52:01 +10:00
|
|
|
return $this->belongsTo('App\Models\User')->withTrashed();
|
2015-03-17 07:45:25 +10:00
|
|
|
}
|
|
|
|
|
|
2016-07-03 18:11:58 +02:00
|
|
|
/**
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
|
|
|
|
*/
|
2015-03-17 07:45:25 +10:00
|
|
|
public function account()
|
|
|
|
|
{
|
2015-03-31 12:38:24 +03:00
|
|
|
return $this->belongsTo('App\Models\Account');
|
2015-03-17 07:45:25 +10:00
|
|
|
}
|
|
|
|
|
|
2016-04-13 13:15:57 +03:00
|
|
|
// If we're getting the link for PhantomJS to generate the PDF
|
|
|
|
|
// we need to make sure it's served from our site
|
2017-01-30 21:40:43 +02:00
|
|
|
|
2016-07-03 18:11:58 +02:00
|
|
|
/**
|
|
|
|
|
* @param string $type
|
2017-01-30 21:40:43 +02:00
|
|
|
* @param bool $forceOnsite
|
|
|
|
|
*
|
2016-07-03 18:11:58 +02:00
|
|
|
* @return string
|
|
|
|
|
*/
|
2017-04-14 13:55:32 +03:00
|
|
|
public function getLink($type = 'view', $forceOnsite = false, $forcePlain = false)
|
2015-03-17 07:45:25 +10:00
|
|
|
{
|
2017-01-30 18:05:31 +02:00
|
|
|
if (! $this->account) {
|
2015-07-02 23:21:29 +03:00
|
|
|
$this->load('account');
|
|
|
|
|
}
|
2015-09-10 20:50:09 +03:00
|
|
|
|
2017-01-12 15:12:02 +02:00
|
|
|
$account = $this->account;
|
|
|
|
|
$iframe_url = $account->iframe_url;
|
2016-07-05 12:28:28 +03:00
|
|
|
$url = trim(SITE_URL, '/');
|
2016-05-15 23:16:08 +03:00
|
|
|
|
2017-03-26 21:44:31 +03:00
|
|
|
if (env('REQUIRE_HTTPS')) {
|
|
|
|
|
$url = str_replace('http://', 'https://', $url);
|
|
|
|
|
}
|
|
|
|
|
|
2017-01-12 15:12:02 +02:00
|
|
|
if ($account->hasFeature(FEATURE_CUSTOM_URL)) {
|
2017-01-12 22:25:01 +02:00
|
|
|
if (Utils::isNinjaProd()) {
|
2017-01-12 15:12:02 +02:00
|
|
|
$url = $account->present()->clientPortalLink();
|
|
|
|
|
}
|
|
|
|
|
|
2017-01-30 21:40:43 +02:00
|
|
|
if ($iframe_url && ! $forceOnsite) {
|
2016-03-24 09:14:27 +02:00
|
|
|
return "{$iframe_url}?{$this->invitation_key}";
|
2017-04-14 13:55:32 +03:00
|
|
|
} elseif ($this->account->subdomain && ! $forcePlain) {
|
2017-01-12 15:12:02 +02:00
|
|
|
$url = Utils::replaceSubdomain($url, $account->subdomain);
|
2015-10-13 10:11:44 +03:00
|
|
|
}
|
2015-04-28 23:13:52 +03:00
|
|
|
}
|
2016-05-15 23:16:08 +03:00
|
|
|
|
2015-12-02 15:26:06 +02:00
|
|
|
return "{$url}/{$type}/{$this->invitation_key}";
|
2015-03-17 07:45:25 +10:00
|
|
|
}
|
2015-07-02 23:21:29 +03:00
|
|
|
|
2016-07-03 18:11:58 +02:00
|
|
|
/**
|
|
|
|
|
* @return bool|string
|
|
|
|
|
*/
|
2015-10-11 17:41:09 +03:00
|
|
|
public function getStatus()
|
|
|
|
|
{
|
|
|
|
|
$hasValue = false;
|
|
|
|
|
$parts = [];
|
|
|
|
|
$statuses = $this->message_id ? ['sent', 'opened', 'viewed'] : ['sent', 'viewed'];
|
|
|
|
|
|
|
|
|
|
foreach ($statuses as $status) {
|
|
|
|
|
$field = "{$status}_date";
|
|
|
|
|
$date = '';
|
2015-10-18 13:37:04 +03:00
|
|
|
if ($this->$field && $this->field != '0000-00-00 00:00:00') {
|
2015-10-11 17:41:09 +03:00
|
|
|
$date = Utils::dateToString($this->$field);
|
|
|
|
|
$hasValue = true;
|
2016-12-04 23:26:38 +02:00
|
|
|
$parts[] = trans('texts.invitation_status_' . $status) . ': ' . $date;
|
2016-12-05 00:35:08 +02:00
|
|
|
}
|
2015-10-11 17:41:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $hasValue ? implode($parts, '<br/>') : false;
|
|
|
|
|
}
|
|
|
|
|
|
2016-07-03 18:11:58 +02:00
|
|
|
/**
|
|
|
|
|
* @return mixed
|
|
|
|
|
*/
|
2015-07-02 23:21:29 +03:00
|
|
|
public function getName()
|
|
|
|
|
{
|
|
|
|
|
return $this->invitation_key;
|
|
|
|
|
}
|
2015-10-11 17:41:09 +03:00
|
|
|
|
2016-07-03 18:11:58 +02:00
|
|
|
/**
|
|
|
|
|
* @param null $messageId
|
|
|
|
|
*/
|
2015-10-29 16:42:05 +02:00
|
|
|
public function markSent($messageId = null)
|
|
|
|
|
{
|
|
|
|
|
$this->message_id = $messageId;
|
|
|
|
|
$this->email_error = null;
|
|
|
|
|
$this->sent_date = Carbon::now()->toDateTimeString();
|
|
|
|
|
$this->save();
|
|
|
|
|
}
|
|
|
|
|
|
2016-12-05 00:35:08 +02:00
|
|
|
public function isSent()
|
|
|
|
|
{
|
|
|
|
|
return $this->sent_date && $this->sent_date != '0000-00-00 00:00:00';
|
|
|
|
|
}
|
|
|
|
|
|
2015-10-28 21:22:07 +02:00
|
|
|
public function markViewed()
|
|
|
|
|
{
|
|
|
|
|
$invoice = $this->invoice;
|
|
|
|
|
$client = $invoice->client;
|
|
|
|
|
|
|
|
|
|
$this->viewed_date = Carbon::now()->toDateTimeString();
|
|
|
|
|
$this->save();
|
|
|
|
|
|
|
|
|
|
$invoice->markViewed();
|
|
|
|
|
$client->markLoggedIn();
|
|
|
|
|
}
|
2016-11-06 13:44:58 +02:00
|
|
|
|
|
|
|
|
public function signatureDiv()
|
|
|
|
|
{
|
2017-01-30 18:05:31 +02:00
|
|
|
if (! $this->signature_base64) {
|
2016-11-06 13:44:58 +02:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return sprintf('<img src="data:image/svg+xml;base64,%s"></img><p/>%s: %s', $this->signature_base64, trans('texts.signed'), Utils::fromSqlDateTime($this->signature_date));
|
|
|
|
|
}
|
2015-03-17 07:45:25 +10:00
|
|
|
}
|
2017-04-30 22:18:17 +03:00
|
|
|
|
|
|
|
|
Invitation::creating(function ($invitation)
|
|
|
|
|
{
|
|
|
|
|
LookupInvitation::createNew($invitation->account->account_key, [
|
|
|
|
|
'invitation_key' => $invitation->invitation_key,
|
|
|
|
|
]);
|
|
|
|
|
});
|