2020-04-13 03:48:23 +02:00
< ? php
2020-09-21 12:54:58 +02:00
/**
* Invoice Ninja ( https :// invoiceninja . com ) .
*
* @ link https :// github . com / invoiceninja / invoiceninja source repository
*
2022-04-27 05:20:41 +02:00
* @ copyright Copyright ( c ) 2022. Invoice Ninja LLC ( https :// invoiceninja . com )
2020-09-21 12:54:58 +02:00
*
2021-06-16 08:58:16 +02:00
* @ license https :// www . elastic . co / licensing / elastic - license
2020-09-21 12:54:58 +02:00
*/
2020-04-13 03:48:23 +02:00
namespace App\Utils\ClientPortal\CustomMessage ;
use App\Models\Client ;
use App\Models\ClientContact ;
use App\Models\Company ;
use App\Models\GroupSetting ;
class CustomMessage
{
protected $message ;
protected $values ;
protected $client ;
protected $company ;
protected $contact ;
protected $group ;
protected $entity ;
protected $invitation ;
public function client ( Client $client ) : self
{
$this -> client = $client ;
return $this ;
}
public function company ( Company $company ) : self
{
$this -> company = $company ;
return $this ;
}
public function contact ( ClientContact $contact ) : self
{
$this -> contact = $contact ;
return $this ;
}
public function group ( GroupSetting $group ) : self
{
$this -> group = $group ;
return $this ;
}
public function entity ( $entity ) : self
{
$this -> entity = $entity ;
return $this ;
}
public function invitation ( $invitation ) : self
{
$this -> invitation = $invitation ;
return $this ;
}
public function message ( string $message ) : string
{
$this -> message = $message ;
$this -> values = $this -> compose ();
return strtr ( $message , $this -> values );
}
private function compose () : array
{
return [
'$company.id' => optional ( $this -> company ) -> id ,
'$company.name' => optional ( $this -> company ) -> getSetting ( 'name' ),
'$company.website' => optional ( $this -> company ) -> getSetting ( 'website' ),
2020-04-14 00:19:48 +02:00
'$client.id' => optional ( $this -> client ) -> id ,
'$client.name' => optional ( $this -> client ) -> name ,
'$client.website' => optional ( $this -> client ) -> website ,
'$client.public_notes' => optional ( $this -> client ) -> public_notes ,
'$client.phone' => optional ( $this -> client ) -> phone ,
'$client.balance' => optional ( $this -> client ) -> balance ,
2020-04-13 03:48:23 +02:00
'$client.address1' => optional ( optional ( $this -> client ) -> present ()) -> address1 ,
'$client.address2' => optional ( optional ( $this -> client ) -> present ()) -> address2 ,
'$client.city' => optional ( optional ( $this -> client ) -> present ()) -> city ,
'$client.state' => optional ( optional ( $this -> client ) -> present ()) -> state ,
'$client.postal_code' => optional ( optional ( $this -> client ) -> present ()) -> postal_code ,
'$client.country' => optional ( optional ( optional ( $this -> client ) -> present ()) -> country ) -> full_name ,
2020-04-14 00:19:48 +02:00
'$client.address' => optional ( optional ( $this -> client ) -> present ()) -> address (),
'$client.shipping_address' => optional ( optional ( $this -> client ) -> present ()) -> shipping_address (),
'$client.primary_contact_name' => optional ( optional ( $this -> client ) -> present ()) -> primary_contact_name (),
'$client.city_state' => optional ( optional ( $this -> client ) -> present ()) -> getCityState (),
2020-04-13 03:48:23 +02:00
'$contact.first_name' => optional ( $this -> contact ) -> first_name ,
'$contact.last_name' => optional ( $this -> contact ) -> last_name ,
'$contact.phone' => optional ( $this -> contact ) -> phone ,
'$contact.email' => optional ( $this -> contact ) -> email ,
'$contact.avatar' => optional ( $this -> contact ) -> avatar ,
'$group.id' => optional ( $this -> group ) -> id ,
'$entity.id' => optional ( $this -> entity ) -> hashed_id ,
'$entity.number' => optional ( $this -> entity ) -> number ,
'$entity.discount' => optional ( $this -> entity ) -> discount ,
'$entity.date' => optional ( $this -> entity ) -> date , // Todo: Handle formatDate
'$entity.due_date' => optional ( $this -> entity ) -> due_date , // Todo: Handle formatDate
'$entity.last_sent_date' => optional ( $this -> entity ) -> last_sent_date ,
'$entity.public_notes' => optional ( $this -> entity ) -> public_notes ,
'$entity.terms' => optional ( $this -> entity ) -> terms ,
'$entity.amount' => optional ( $this -> entity ) -> amount , // Todo: Handle moneyformat
'$entity.balance' => optional ( $this -> entity ) -> balance , // Todo: Handle moneyformat
'$entity.created_at' => optional ( $this -> entity ) -> created_at , // Todo: Handle formatDate
'$entity.status' => optional ( optional ( $this -> entity )) -> badgeForStatus ( optional ( $this -> entity ) -> status_id ), // It would be nice if we have method that will only return status as text, not with markup.
'$entity.project' => optional ( optional ( $this -> entity ) -> project ) -> name ,
'$entity.project.date' => optional ( optional ( $this -> entity ) -> project ) -> date ,
'$invitation.id' => optional ( $this -> invitation ) -> id ,
'$invitation.user.first_name' => optional ( optional ( $this -> invitation ) -> user ) -> first_name ,
'$invitation.user.last_name' => optional ( optional ( $this -> invitation ) -> user ) -> last_name ,
'$invitation.sent_date' => optional ( $this -> invitation ) -> sent_date , // Todo: Handle formatDate
'$invitation.viewed_date' => optional ( $this -> invitation ) -> viewed_date , // Todo: Handle formatDate,
'$invitation.opened_date' => optional ( $this -> invitation ) -> opened_date , // Todo: Handle formatDate,
];
}
}