belongsTo(Invoice::class)->withTrashed();
    }
    /**
     * @return mixed
     */
    public function contact()
    {
        return $this->belongsTo(ClientContact::class, 'client_contact_id', 'id')->withTrashed();
    }
    /**
     * @return mixed
     */
    public function user()
    {
        return $this->belongsTo(User::class)->withTrashed();
    }
    /**
     * @return BelongsTo
     */
    public function company()
    {
        return $this->belongsTo(Company::class);
    }
    public function signatureDiv()
    {
        if (! $this->signature_base64) {
            return false;
        }
        return sprintf('
%s: %s', $this->signature_base64, ctrans('texts.signed'), $this->createClientDate($this->signature_date, $this->contact->client->timezone()->name));
    }
    public function getName()
    {
        return $this->key;
    }
    public function markViewed()
    {
        $this->viewed_date = Carbon::now();
        $this->save();
    }
    public function markOpened()
    {
        $this->opened_date = Carbon::now();
        $this->save();
    }
    public function pdf_file_path()
    {
        $storage_path = Storage::url($this->invoice->client->invoice_filepath().$this->invoice->numberFormatter().'.pdf');
        if (! Storage::exists($this->invoice->client->invoice_filepath($this).$this->invoice->numberFormatter().'.pdf')) {
            event(new InvoiceWasUpdated($this->invoice, $this->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null)));
            CreateEntityPdf::dispatchSync($this);
        }
        return $storage_path;
    }
}