Skip to content

Quotes / estimates

A quote (estimate / proposal) is a pre-sale price summary. Easy Invoice ships a full quote system in the free plugin — separate CPT, separate list, separate numbering, online accept/decline.

What a quote is, technically

  • Custom post type: easy_invoice_quote (registered in includes/EasyInvoice.php:314–346).
  • Slug: easy-invoice-quote/<post-slug>.
  • Lifecycle: draft → sent → accepted / declined → (optional) converted to invoice.

When to use a quote vs an invoice

ScenarioUse
Client hasn't agreed yet ("send me a quote for…")Quote
You're locking in scope and waiting on approvalQuote
Client agreed; you're billingInvoice
Client paid up-front (deposits)Invoice with deposit (Pro)

Building a quote

Open Easy Invoice → Add New Quote.

The builder mirrors the invoice builder:

  • Quote number — auto-incremented from Settings → Quote → Next quote number. Default prefix QUO-.
  • Client — search WP users.
  • Quote date + Expiry date (default = today + N days).
  • Line items — name, description, quantity, unit price, optional tax/discount per line.
  • Currency override (per quote).
  • Notes — customer + private.

Click Save Draft to keep it private, or Send to Client when ready.

The accept / decline flow

When the client opens the public quote URL:

  1. They see the quote on a styled single template.
  2. Accept and Decline buttons appear at the bottom (free).
  3. Clicking Accept flips the post status to "accepted" and fires easy_invoice_quote_accepted action.
  4. Clicking Decline flips to "declined" and fires easy_invoice_quote_declined.

On accept, you (admin) get an email — see Settings → Email → Quote Available / Accepted / Declined.

Convert quote → invoice

Open the accepted quote → click Convert to Invoice:

  1. A new invoice is created with the same line items, totals, currency, and client.
  2. The new invoice starts in draft (so you can tweak before sending).
  3. The original quote stays in the system (not deleted).

The conversion preserves the link via meta — you can always click "Source quote" from the new invoice.

Quote-only settings

Open Easy Invoice → Settings → Quote:

SettingDefaultWhat it does
Quote prefixQUO-Visible in the number.
Next quote number1Auto-increments.
Default validity30 daysUsed to compute the expiry date when you create a new quote.
Auto-expireOnDaily cron flips expired quotes to "expired" via easy_invoice_quote_expiration_check.

Email templates

Quote-related templates live under Easy Invoice → Settings → Email:

  • Quote Available — sent on Send to Client.
  • Quote Accepted — sent to admin when client accepts.
  • Quote Declined — sent to admin when client declines.

Merge tags include {quote_number}, {quote_total}, {client_name}, {accept_url}, {decline_url}. See Email & notifications for the full table.

Public quote shortcode

Linking to a quote inside a page or email body? Use:

[easy_quote_url id="123" text="View your quote"]

See Shortcodes for every attribute.

Bulk actions

The quote list supports the same filters and bulk delete as invoices. Pro adds CSV export.

Cron: expiration

Hook: easy_invoice_quote_expiration_check (daily). Marks quotes as expired when:

  • The quote is in sent status.
  • The expiry date is in the past.
  • "Auto-expire" is enabled.

If WP-Cron is broken, quotes won't expire automatically — see Troubleshooting.

What's NOT in quotes

  • No coupon system.
  • No e-signature field (use a separate plugin if you need a legal signature).
  • No version history (saving overwrites the previous draft).

Where to go next