Sales
What the getodden/crm-sales package adds on top of Odden Core, and the models it provides.
getodden/crm-sales is Odden's sales module. It adds pipelines, deals, products, quotes with online acceptance, forecasting and quotas, lead routing, outbound sequences, qualification playbooks, and public meeting-booking links. It builds on the contacts, companies, activities, associations, and custom properties from Odden Core.
Installation
The package requires PHP 8.3+, Laravel 12 or 13, and getodden/crm-core. See Installation for the full setup.
composer require getodden/crm-sales
php artisan migrateOdden\Sales\SalesServiceProvider is auto-discovered. It loads the package migrations, the odden-sales:: views, and (unless you turn them off) the public quote and meeting routes. To customize the config file, publish it:
php artisan vendor:publish --tag=odden-sales-configWhat it adds to Core
- Deals are Core records.
Odden\Sales\Models\Dealuses Core'sHasActivities,HasAssociations,HasCustomProperties,AuditsProperties, andBelongsToTeamtraits. You log activities on a deal, associate it with contacts and companies, and store custom properties on it the same way as on a contact. - New relations on Core models. The service provider registers
deals()onOdden\Core\Models\ContactandOdden\Core\Models\Company, andsalesSequenceEnrollments()onContact. Deal links to contacts and companies are stored in Core's associations table. - Merges move Sales data. When Core merges two contacts, Sales moves the duplicate's sequence enrollments and meeting bookings to the surviving contact. Deals move with Core's associations. See Merging contacts.
- Activities written for you. Many sales actions log activities on deals and contacts (stage automation tasks, quote views and signatures, routed leads, sequence emails and calls, booked meetings). These are ordinary Core
Activityrecords.
Models
All models live in Odden\Sales\Models. Table names come from odden-sales.tables (see Configuration and routes).
| Model | Default table | Purpose |
|---|---|---|
Pipeline |
odden_pipelines |
A named sales process with ordered stages. |
PipelineStage |
odden_pipeline_stages |
A stage with a win probability, closed won/lost flags, and a rotting threshold. |
StageAutomation |
odden_stage_automations |
Entry requirements and actions that run when a deal enters a stage. |
Deal |
odden_deals |
An opportunity in a pipeline stage, with amount, status, and owner. |
DealStageHistory |
odden_deal_stage_history |
One row per stage a deal has entered, with time spent there. |
DealProduct |
odden_deal_products |
A line item on a deal. Line items drive the deal amount. |
Quote |
odden_quotes |
A proposal for a deal, with a public token for online acceptance. |
QuoteItem |
odden_quote_items |
A line item on a quote. |
SalesQuota |
odden_sales_quotas |
A revenue target for one user over a date range. |
LeadRoutingRule |
odden_sales_lead_routing_rules |
Assigns owners to contacts and deals. |
SalesEmailTemplate |
odden_sales_email_templates |
Email subject and body with merge tags. |
SalesSequence |
odden_sales_sequences |
A multi-step outbound cadence. |
SalesSequenceEnrollment |
odden_sales_sequence_enrollments |
A contact's progress through a sequence. |
SalesPlaybook |
odden_sales_playbooks |
A qualification script whose answers are saved as custom properties. |
SalesMeetingLink |
odden_sales_meeting_links |
A public booking page for a user. |
Pages in this section
- Pipelines and stages: stages, probabilities, and stage entry requirements.
- Deals: creating deals, moving stages, won and lost, stage history, products, and events.
- Deal health, forecasts, and quotas: rotting deals, health scores, pipeline forecasts, stage velocity, and quota attainment.
- Quotes: generating quotes, totals, the public acceptance page, and expiry.
- Lead routing: round robin and quota-weighted owner assignment.
- Sequences, templates, and playbooks: outbound cadences, email merge tags, and qualification playbooks.
- Meeting links: public booking pages for reps.
- Configuration and routes: config keys, public routes, Artisan commands, scheduling, and events.
Demo data
The package ships Odden\Sales\Database\Seeders\SalesDatabaseSeeder, which creates sample users, playbooks, templates, sequences, meeting links, routing rules, and deals. It creates users such as admin@odden.test with the password password, so only run it in local or demo environments:
php artisan db:seed --class="Odden\Sales\Database\Seeders\SalesDatabaseSeeder"