'$invoice',
            'account' => '$account',
            'quote' => '$quote',
            'number' => '$number',
        ]);
    }
    /**
     * @param $entityType
     *
     * @return mixed
     */
    public function getEmailSubject($entityType)
    {
        if ($this->hasFeature(FEATURE_CUSTOM_EMAILS)) {
            $field = "email_subject_{$entityType}";
            $value = $this->account_email_settings->$field;
            if ($value) {
                $value = preg_replace("/\r\n|\r|\n/", ' ', $value);
                return HTMLUtils::sanitizeHTML($value);
            }
        }
        return $this->getDefaultEmailSubject($entityType);
    }
    /**
     * @param $entityType
     * @param bool $message
     *
     * @return string
     */
    public function getDefaultEmailTemplate($entityType, $message = false)
    {
        if (strpos($entityType, 'reminder') !== false) {
            $entityType = ENTITY_INVOICE;
        }
        $template = '
$client,
';
        if ($this->hasFeature(FEATURE_CUSTOM_EMAILS) && $this->email_design_id != EMAIL_DESIGN_PLAIN) {
            $template .= '' . trans("texts.{$entityType}_message_button", ['amount' => '$amount']) . '
' .
                         '$viewButton
';
        } else {
            $template .= '' . trans("texts.{$entityType}_message", ['amount' => '$amount']) . '
' .
                         '$viewLink
';
        }
        if ($message) {
            $template .= "$message";
        }
        return $template . '$emailSignature';
    }
    /**
     * @param $entityType
     * @param bool $message
     *
     * @return mixed
     */
    public function getEmailTemplate($entityType, $message = false)
    {
        $template = false;
        if ($this->hasFeature(FEATURE_CUSTOM_EMAILS)) {
            $field = "email_template_{$entityType}";
            $template = $this->account_email_settings->$field;
        }
        if (! $template) {
            $template = $this->getDefaultEmailTemplate($entityType, $message);
        }
        $template = preg_replace("/\r\n|\r|\n/", ' ', $template);
        // 
 is causing page breaks with the email designs
        $template = str_replace('/>', ' />', $template);
        return HTMLUtils::sanitizeHTML($template);
    }
    /**
     * @param string $view
     *
     * @return string
     */
    public function getTemplateView($view = '')
    {
        return $this->getEmailDesignId() == EMAIL_DESIGN_PLAIN ? $view : 'design' . $this->getEmailDesignId();
    }
    /**
     * @return mixed|string
     */
    public function getEmailFooter()
    {
        if ($this->isPro() && $this->email_footer) {
            // Add line breaks if HTML isn't already being used
            return strip_tags($this->email_footer) == $this->email_footer ? nl2br($this->email_footer) : $this->email_footer;
        } else {
            return '' . trans('texts.email_signature') . "\n
\$account
";
        }
    }
    /**
     * @param $reminder
     *
     * @return bool
     */
    public function getReminderDate($reminder, $filterEnabled = true)
    {
        if ($filterEnabled && ! $this->{"enable_reminder{$reminder}"}) {
            return false;
        }
        $numDays = $this->{"num_days_reminder{$reminder}"};
        $plusMinus = $this->{"direction_reminder{$reminder}"} == REMINDER_DIRECTION_AFTER ? '-' : '+';
        return date('Y-m-d', strtotime("$plusMinus $numDays days"));
    }
    /**
     * @param Invoice $invoice
     *
     * @return bool|string
     */
    public function getInvoiceReminder($invoice, $filterEnabled = true)
    {
        for ($i = 1; $i <= 3; $i++) {
            if ($date = $this->getReminderDate($i, $filterEnabled)) {
                if ($this->{"field_reminder{$i}"} == REMINDER_FIELD_DUE_DATE) {
                    if (($invoice->partial && $invoice->partial_due_date == $date)
                        || $invoice->due_date == $date) {
                        return "reminder{$i}";
                    }
                } else {
                    if ($invoice->invoice_date == $date) {
                        return "reminder{$i}";
                    }
                }
            }
        }
        return false;
    }
    public function setTemplateDefaults($type, $subject, $body)
    {
        $settings = $this->account_email_settings;
        if ($subject) {
            $settings->{"email_subject_" . $type} = $subject;
        }
        if ($body) {
            $settings->{"email_template_" . $type} = $body;
        }
        $settings->save();
    }
    public function getBccEmail()
    {
        return $this->isPro() ? $this->account_email_settings->bcc_email : false;
    }
    public function getReplyToEmail()
    {
        return $this->isPro() ? $this->account_email_settings->reply_to_email : false;
    }
    public function getFromEmail()
    {
        if (! $this->isPro() || ! Utils::isNinja() || Utils::isReseller()) {
            return false;
        }
        return Domain::getEmailFromId($this->domain_id);
    }
}