| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Lines of code | 9272 |
| Technical Name |
erpoxa_smart_dashboard |
| License | OPL-1 |
| Website | https://erpoxa.com/ |
Smart Dashboard
Power BI-grade business intelligence — built into Odoo. Zero external dependencies. Zero monthly fees. Zero SQL.
26 widget types · cross-filtering · Edit Interactions · conditional formatting · AI Create + Chat + Insight · KPI alerts · 3-step no-code wizard · 21 pre-built templates · mobile responsive · PDF export.
login: admin · password: admin
One dashboard tying together $1.7M revenue, 117 leads, 94 customers and 23 products — built in 3 minutes with the wizard.
|
26
Widget types
|
21
Pre-built templates
|
3
AI features built-in
|
0
External libraries shipped
|
3-step
No-code wizard
|
🎨 No-code, 3 stepsName → Starting point → Open. No SQL, no formulas, no "custom views". |
📊 26 widget typesKPIs, every chart type, plus advanced viz: heatmap, treemap, waterfall, calendar. |
🤖 AI everywhereCreate dashboards from a sentence. Chat with your data. Per-tile auto-summary. |
⚡ Power BI parityCross-filter, drill-through, Edit Interactions, conditional formatting, bookmarks. |
Everything explained, in order
This page walks you through Smart Dashboard from first-install to advanced AI features — in the exact order you'll use it.
Part 1 SetupInstall · configure AI · open the app |
Part 2 BuildCreate dashboard · add widgets · arrange |
Part 3 InteractCross-filter · Edit Interactions · alerts |
Part 4 Reference26 widgets · templates · use cases |
⚙ Setup & configuration
Install the module · configure the AI key (optional) · open the Smart Dashboards app
1.1 Install Smart Dashboard
From the Odoo Apps page, search "Smart Dashboard" → click Install. The module pulls only Odoo's bundled base · web · mail — no external Python packages, no JavaScript libraries shipped. Install completes in seconds.
📌 What gets installed: two security groups (Smart Dashboard / User, Smart Dashboard / Designer) · one menu in the navbar · one cron job for KPI alerts · one cron job for email subscriptions (hidden from the menu by default). No data, no users — your existing Odoo is untouched.
1.2 Configure AI (optional, 30 seconds)
Smart Dashboard works fully without any setup. The AI features (Create / Chat / Insight) light up the moment you paste an OpenAI-compatible API key. Bring your own — OpenAI, Azure OpenAI, OpenRouter, or any self-hosted LLM.
|
1
Open Configuration → SettingsIn the Smart Dashboards top navbar, click Configuration → Settings. The menu only appears for users in the Designer or Admin group — regular users won't see it. |
![]() |
![]() |
2
Paste your API keyScroll to AI-Assisted Dashboards. Three fields:
|
|
3
Save — AI features light upClick Save at the top-left. The ✨ Create with AI menu, the dashboard's AI chat panel, and the per-tile AI insight action become available instantly. |
![]() |
Compatible providers (any OpenAI-compatible REST endpoint)
🟢 OpenAI
|
🔷 Azure OpenAIYour Azure deployment URL |
🌐 OpenRouter100+ models · pay-per-use |
🏠 Self-hostedOllama · LM Studio · vLLM |
🔒 Privacy: The key never leaves your Odoo. Nothing is sent to Erpoxa or any third party. Only the requests you explicitly trigger (AI insight click, AI chat message, Create with AI) make outbound calls — and only to the endpoint you configured.
1.3 Open the app — your dashboard library
Click Smart Dashboards in the navbar and you land here: a kanban grid of every dashboard you've created, with widget count, public/private state, refresh interval, owner, and last edit.
🎨 Colour-coded headersSales = green, HR = purple, finance = teal. Match the dashboard to its team at a glance. |
⚙️ Quick-action gearRename, share with groups, change refresh interval, delete — without opening the dashboard. |
⭐ Star & favouritePin daily favourites to the top of the kanban so you never hunt for them. |
⚡ Live refresh badge"Live 120 s" tells you how often each dashboard refreshes. Configurable per dashboard. |
🏗 Build your first dashboard
Create the dashboard · add widgets one by one · arrange the layout
2.1 Create a dashboard — 3 steps
Click ✨ New Dashboard in the navbar. The stepper takes you from blank to finished in under a minute.
|
1
Name itOne input. Pick something descriptive — your team sees this in the menu, the kanban tile, the email subscription subject, and any PDF you export. |
![]() |
![]() |
2
Pick how to start
|
|
3
Pick template & openIf you chose a template, you'll see the catalog. Each card shows widget count + category. Templates whose required Odoo apps aren't installed are dimmed and disabled — no half-broken dashboards. Click Create & open. Done. |
![]() |
2.2 Add a widget — 6 guided steps
Click the toolbar's + Add widget button. The wizard walks you through category → model → fields → intent → visualisation → preview. AI suggests the best widget type from your intent — you don't need to know the difference between a bar and a polar-area chart.
1Category Pick a business area (Sales · Purchase · CRM · Inventory · Accounting · HR · Custom). Only categories whose apps are installed appear. ![]() |
2Model Pick the Odoo model to read. The recommended choice is starred. Each shows its technical name ( ![]() |
3Fields The wizard groups available fields by kind: numeric (measure), date (filter), group-by. Just for context — no input needed yet. ![]() |
4Intent Type what you want to see in plain English ("Monthly revenue by salesperson") or pick a preset. AI uses this to choose the widget type. ![]() |
5Visualisation AI proposes the best-fit widget (KPI, bar, treemap, heatmap, …). Override with one click if you'd prefer something else. ![]() |
6Preview & save Live preview of the actual tile on your real data. Tweak the name, save — and it lands on your dashboard. ![]() |
2.3 Arrange the layout — drag & resize
Click Edit on the toolbar. Dashed borders appear, resize handles light up in the corner. Drag any tile by its header, resize from the bottom-right. Click Done to lock the layout. Works on touch devices too.
![]() |
2.4 Per-tile actionsEvery tile has a kebab menu (⋮) at the top-right with 8 actions:
|
⚡ Interact & analyse
Cross-filter · Edit Interactions · conditional formatting · bookmarks · alerts
3.1 Cross-filtering — click any segment
Click a bar, segment or slice — every other tile on the same Odoo model instantly re-renders with that filter applied. A pill at the top of the dashboard shows what's filtered; one click clears it.
⌨ Shift + click Drills straight to the Odoo records list for that segment — useful for "show me the actual orders behind this bar". |
⌨ Click another bar Adds a second filter. Combines with the global Period filter and any custom filters you've set. |
3.2 Edit Interactions — Power BI's flagship feature
Want one chart to filter some tiles but not others? Open the chart's kebab → ↔ Edit interactions → click Affected / Ignored on each target. Configuration persists per source tile.
📌 How to use: Open a chart's kebab menu (⋮) → ↔ Edit interactions. Click the green Affected badge on any tile to flip it to red Ignored. Click Done. Whenever this source tile is clicked, ignored tiles won't re-render.
3.3 Conditional formatting — at-a-glance status
Set kpi_alert_high and kpi_warn_low on any KPI. The tile paints itself red / amber / green automatically — and re-evaluates after every cross-filter.
📌 How to configure: Edit any KPI tile → "Conditional formatting (optional)" section → set alert high for the alarm threshold (e.g. 30,000), warn low for the danger floor (e.g. 5,000). Tick invert for "lower is better" metrics like response time.
![]() |
3.4 Bookmarks — save your filter combinationsGot a filter combo you check every Monday? Save it as a bookmark. Restore the exact state — period + cross-filters + custom filters — with one click. How to use: Toolbar → Views → + Save current view. Give it a name. Reopen the panel anytime to switch. |
3.5 KPI Alerts — get an email when a number matters
A cron job evaluates every alert every 30 minutes. When a KPI crosses your threshold — revenue dips, leads above a target, sudden % changes — recipients get an email immediately.
📈 Value greater thanUseful for "leads in pipeline above 100", "overtime hours above 200". |
📉 Value less thanUseful for "revenue below $200k", "stock level below safety threshold". |
⚡ % changeCatches sudden swings — "30% revenue drop in one period". |
📌 How to create: Top menu → 🔔 Alerts → New. Pick a widget (any KPI / Bullet / Progress tile), pick a condition, set the threshold, add recipients. Save — done.
3.6 Auto-refresh — dashboards stay current
Every dashboard has a configurable refresh interval (default: 120 seconds). The client schedules a silent re-fetch in the background, the server returns only what's changed since the last fetch, and the UI swaps the new values in without flashing. Manual refresh is one click on the toolbar; per-tile refresh is one click on the tile kebab.
🔄 Per-dashboard intervalSet |
⚡ Smart cache invalidationThe two-layer cache keys on the underlying model's max |
⏸ Pause on inactivityWhen the browser tab is hidden, polling pauses automatically. Resumes on focus. Saves server CPU on tabs no one is watching. |
📚 Widget catalog & reference
All 26 widgets · advanced visualisations · AI features · templates · use cases · comparison
4.1 The 26 widget types — every shape your data wants
Each widget tells a different story. Below: every type with a real-data screenshot, when to use it, and how to configure it.
📊 Numbers (single-value tiles)
![]() KPI TileBig number. One aggregate value with optional delta vs. previous period and conditional formatting. Best for: headline metrics, scorecards, summaries. Configure: model + measure (sum/avg/count) + optional target + compare-period. |
![]() Bullet / ProgressValue vs. target. Horizontal bar that fills as you approach the goal. Best for: sales targets, campaign goals, OKRs. Configure: set |
![]() Progress RingDonut showing % of target. Same as bullet but circular. Best for: compact target tracking on KPI strip. |
![]() GaugeSpeedometer. Min/max bracket with a needle indicator. Best for: capacity-bound metrics (server load, fulfilment). Configure: |
📈 Standard charts
![]() Bar chartCompare categories. Vertical bars; great for ranking. Best for: revenue by rep, orders by status, items by category. |
![]() Stacked barTwo dimensions at once. X-axis primary, each bar split by secondary group. Best for: revenue by month, split by product category. |
![]() Horizontal barLong category names. Same as bar but rotated — labels readable. Best for: customer rankings, country lists. |
![]() Line chartTrend over time. Smooth line through data points. Best for: monthly orders, weekly leads, daily traffic. |
![]() Stepped lineDiscrete trend. Right-angle steps emphasise "constant between samples". Best for: headcount, subscribers, contract count. |
![]() Area chartFilled trend. Visual emphasis on magnitude. Includes optional forecast. Best for: cumulative revenue, stock value over time. |
![]() Pie chartShare of total. Each slice is one category's contribution. Best for: order status split, payment-method breakdown. |
![]() Doughnut chartPie with a hole. Same purpose; centre lets you show the total. Best for: companies vs. individuals, channel split. |
![]() Polar area chartRadial slices. Each segment has the same angle; the radius is the value. Best for: visual comparison across 4-10 categories. |
![]() Radar chartMulti-attribute "shape". Each spoke is a category; polygon shows the profile. Best for: employee skills, product mix, customer segments. |
![]() Scatter chart2D correlation. Each record at its (x, y) values to reveal clusters and outliers. Best for: revenue vs. discount, lead score vs. conversion. |
![]() Bubble chartScatter with a third dimension. Bubble size encodes another value. Best for: deal value (size) by lead score (x) and age (y). |
![]() Mixed (bar + line)Two metrics, one chart. Bars + a line on twin Y-axes. Best for: revenue (bars) + order count (line). |
![]() FunnelDrop-off across stages. Each bar narrows as records progress. Best for: lead → opportunity → quotation → sale. |
📋 Tables & lists
![]() Pivot / TableNumbers, not pictures. Group by rows × split by columns. Best for: finance reports, audit trails. |
![]() Top-N listLeaderboard with bars. Top N by your chosen measure; each row has an inline progress bar. Best for: top customers, top products. |
![]() Records listReal Odoo records. Click a row to open the record in Odoo. Best for: recent orders, leads needing follow-up. |
![]() Rich-text panelNarration tile. Embed instructions, notes, links. Best for: "About this dashboard" intros, contact info. |
🆕 Advanced visualisations — things you usually need a separate BI tool for
![]() 🔥 Heatmap (matrix)2D grid where colour intensity = value. Spot patterns instantly. Configure: set both primary AND secondary Example: orders by status × month. |
![]() 🌲 TreemapRectangles sized by value. The biggest contributors take the biggest area. Configure: standard group_by + measure. Optional Example: revenue by customer. |
![]() 📅 Calendar heatmapOne year, GitHub-style. 53 weeks × 7 weekdays, each cell colour-coded by daily activity. Configure: set Example: daily order activity, ticket volume. |
![]() 💧 WaterfallSequential contributions to a total. Each bar starts where the previous one ended. Configure: typical sum + group_by_date. Example: monthly revenue building to YTD. |
4.2 AI features — three places AI helps you
Optional. Bring your own API key (see 1.2 Configure AI). Disable any of the three independently if you don't want them. Smart Dashboard works fully without any AI configured.
✨ Create with AIDescribe what you want to track. The AI reads your installed Odoo apps + data model and proposes a complete dashboard. Trigger: top menu → ✨ Create with AI |
💬 Chat with the dashboardOpen the AI panel and ask any question about the current view. The AI reads live tile data and answers. Trigger: dashboard toolbar → AI chat |
💡 Per-tile AI insightRight-click any tile → ✨ AI insight. Get a 1-paragraph summary with notable outliers called out. Trigger: tile kebab (⋮) → ✨ AI insight |
✨ Create with AI — example briefs
"Sales overview for this quarter: revenue, AOV, top customers, monthly trend, recent orders." |
"HR dashboard: headcount, leaves by month, attendance heatmap, top departments." |
"Marketing performance: campaign ROI by channel, lead conversion funnel, monthly spend vs. budget." |
"Inventory health: stock value, low-stock products, top movements." |
4.3 21 templates — pre-built for every team
CEO Overview · Sales Performance · CRM Pipeline · HR Pulse · Finance · Marketing Funnel · Customer Insights · Inventory · Purchase · Project · Manufacturing · Helpdesk · POS · Expenses · Mailings · Events · Fleet · Maintenance · Contacts · Business Overview · All Widgets Showcase.
Templates whose required Odoo apps aren't installed are dimmed automatically — install on any DB without surprise crashes.
4.4 Built for every business team
Whichever team you're on, there's a pre-built template that fits — and dozens of widgets you can mix to build your own.
👔 CEO / Executive High-level visibility, zero noiseHeadline numbers for the board meeting: revenue vs. target, AR aging, top customers, monthly trend. One screen, no scrolling. Start with: CEO Overview · 8 widgets |
💼 Sales Pipeline you can actually act onSales-rep leaderboard, win-rate funnel, top customers, pipeline by stage. Cross-filter to any rep and the whole dashboard pivots. Start with: Sales Performance+ · 10 widgets |
👥 HR / People Headcount, leaves, attendanceEmployees by department, leaves by month, attendance heatmap, top departments. Installs in one click. Start with: HR Pulse · 4 widgets |
💰 Finance P&L, cash flow, AR agingRevenue waterfall by month, expense breakdown, top vendors, cash flow trend. Compare-period KPIs catch dips fast. Start with: Finance Overview · 9 widgets |
📣 Marketing Campaign ROI & funnel performanceLead → opportunity → won funnel, campaign spend vs. budget, top-converting sources, monthly trend. Start with: Marketing Funnel · 10 widgets |
📦 Operations Inventory, purchasing & manufacturingStock value, low-stock alerts, top movements, PO status, manufacturing throughput, helpdesk team load. Start with: Inventory Health · Helpdesk Performance |
4.5 vs. the alternatives
Why people pick Smart Dashboard over Odoo's built-in Spreadsheets, third-party BI tools, or building it themselves.
| Feature | Smart Dashboard | Odoo Spreadsheets | Power BI / Tableau |
|---|---|---|---|
| No-code wizard | ✓ 3-step | Limited | ✗ Drag-and-build |
| 26 widget types | ✓ All in-app | ~6 chart types | ✓ Many |
| Heatmap / Treemap / Waterfall | ✓ Built-in | ✗ | ✓ (paid plugins for some) |
| Cross-filtering across tiles | ✓ Click any segment | ✗ | ✓ |
| Edit Interactions | ✓ Built-in | ✗ | ✓ (Power BI) |
| AI: prompt → dashboard | ✓ Optional | ✗ | Copilot (paid add-on) |
| AI: chat with the dashboard | ✓ Optional | ✗ | Q&A (limited) |
| Conditional formatting | ✓ red/amber/green + invert | Cell rules only | ✓ |
| KPI threshold email alerts | ✓ Built-in cron | ✗ | Power Automate |
| Works on any Odoo model | ✓ Yes | ✓ Yes | Needs ETL |
| Mobile responsive | ✓ Native | Read-only | Separate mobile app |
| External infrastructure | ✓ None — runs in Odoo | ✓ Runs in Odoo | Separate server + license |
4.6 Mobile-first — works on every screen
Below 800 px, tiles auto-stack into a single column. Tile menus stay tappable. Filters become full-width. No "responsive" excuses — it actually works.
![]() 📊 KPI strip Big numbers + conditional formatting |
![]() 📈 Charts & tables Bar, line, area — all single-column |
![]() 🔥 Advanced widgets Heatmap, treemap — full quality |
![]() ⋮ Tile menu Always visible on touch — no hover needed |
![]() 🔍 Period filter Full-width dropdown for thumbs |
![]() 📚 Dashboard library Browse and pick from your phone |
🖨 Export to PDF
Click Export in the dashboard toolbar → browser's print dialog opens → choose "Save as PDF". A print stylesheet hides the toolbar, filters and AI chat panel so the output is a clean, board-ready report. No backend rendering, no headless browser, no extra dependency.
4.7 Performance & scale — fast on real-world datasets
Smart Dashboard is built on Odoo's native aggregation engine. It never loads records into Python objects — only the aggregated numbers that the chart needs. Combined with a two-layer cache, dashboards stay responsive even on databases with millions of records.
⚡ Query layer
|
💾 Cache architecture
|
📊 Real-world numbers: On a database with 1M+ sale.order records, a 12-tile dashboard typically loads in under 800 ms cold (no cache), and instantly when cached. Cross-filter clicks complete in 150-300 ms on a typical Odoo deployment.
4.8 Security & permissions — Odoo-native ACLs
Two security groups ship out of the box. Standard Odoo access rights, record rules and multi-company filters all apply. AI features never bypass them.
| Action | User | Designer | Admin |
|---|---|---|---|
| View public dashboards | ✓ | ✓ | ✓ |
| Filter, bookmark, cross-filter | ✓ | ✓ | ✓ |
| Use AI chat / per-tile insight | ✓ | ✓ | ✓ |
| Export CSV / PNG / PDF | ✓ | ✓ | ✓ |
| Create / edit / delete dashboards | ✗ | ✓ | ✓ |
| Add / edit widgets, drag-resize | ✗ | ✓ | ✓ |
| Install templates | ✗ | ✓ | ✓ |
| Create / edit KPI alerts | ✓ (own) | ✓ | ✓ |
| Configure AI key / settings | ✗ | ✗ | ✓ |
| Use developer-mode features | ✗ | ✗ | ✓ |
🔒 Row-level security: Every aggregation respects Odoo record rules and multi-company filters. A salesperson sees only their own sales in a "Revenue by salesperson" chart; a manager sees the team. The cache is sharded per user, so caches never leak.
4.9 Multi-company, i18n & accessibility
Built for global Odoo deployments. Multi-company aware, fully translatable, keyboard-navigable, and accessible.
🏢 Multi-company
|
🌐 Internationalisation
|
♿ Accessibility
|
🌙 Light / dark theme
|
4.10 Customisation — themes, palettes & brand colours
Every dashboard and widget can be styled to match your brand without touching code.
🎨 5 chart palettesPick a palette per widget:
|
🌈 Per-dashboard accentEach dashboard has its own accent colour applied to:
|
🖌 Per-tile icon + colourEach tile lets you pick:
|
4.11 Keyboard shortcuts — work faster
For power users who navigate without a mouse.
| Action | Shortcut |
|---|---|
| Drill into records (from a chart bar) | Shift + click |
| Add second cross-filter (instead of replacing) | Ctrl + click |
| Print / export to PDF | Ctrl + P |
| Refresh all widgets | Ctrl + R (browser refresh) |
| Submit AI chat message | Enter |
| Newline in AI chat input | Shift + Enter |
| Next step in Add Widget wizard | Enter in any input |
| Close dialog / cancel | Esc |
4.12 Extend with custom widgets & data sources
Smart Dashboard is built as a standard Odoo module. Every model is documented, every JS component is registered cleanly, and the data layer respects ORM conventions. Easy to extend in your own addon.
🧩 Add a custom widget type
|
🪝 Hooks & extension points
|
4.13 "How I built my Monday-morning sales dashboard"
A step-by-step example, top to bottom. From clicking "New Dashboard" to having a 12-tile dashboard for the weekly leadership stand-up. ~6 minutes total.
⏱ 0:00 — Open Smart Dashboards → ✨ New DashboardName it "Monday Sales Review". Pick 📦 Use a template. The catalogue opens. |
⏱ 0:30 — Pick "Sales Performance+" template10 widgets land: Total revenue KPI, Pipeline funnel, Revenue by salesperson bar chart, Top 10 customers list, Monthly revenue trend, Quote conversion rate, Recent orders list, plus a few more. |
⏱ 1:30 — Add 2 custom widgetsClick + Add widget. Through the 6-step wizard:
|
⏱ 4:30 — Configure conditional formatting on Total revenueEdit the Total revenue tile → set alert high = 110% of target, warn low = 80% of target. The tile now paints itself green/amber/red automatically each Monday. |
⏱ 5:00 — Create an alert🔔 Alerts → New → "Weekly revenue under 80% of target" → email me + the sales lead. The cron checks every 30 min. We get a Slack-style ping the moment things drift. |
⏱ 6:00 — Done. Bookmark the Monday view.Set Period = "Last 7 days", click Views → + Save current view → name it "Monday standup". Every Monday at 9 AM, one click loads the exact state needed for the meeting. |
📌 Total time: ~6 minutes. The dashboard now runs itself. The team gets emails when KPIs cross thresholds. The bookmark restores the exact filter combination for the standup. The AI chat panel handles ad-hoc "why was revenue down in April?" questions during the meeting.
Try it before you commit
Open the live demo, log in as admin, and play with every feature. Cross-filter, build a widget, ask the AI a question. No signup.
🚀 Try the Live DemoFrequently asked questions
No. Everything renders inside Odoo. Charts use Chart.js (bundled with Odoo). Heatmap / treemap / calendar render with pure SVG / HTML / CSS. Zero external libraries shipped.
Yes. Sales, CRM, HR, accounting, custom — anything with a stored or related field can be measured, grouped or filtered. The 6-step wizard reads the model schema and exposes only fields that make sense.
100% optional. Smart Dashboard works fully without an API key. AI features (Create / Chat / Insight) light up only when a key is configured. No telemetry, no required cloud service.
Yes. Each dashboard has explicit user-group sharing. Bookmarks are per-user. Dashboards can be public or private to a specific group.
Two groups ship: Smart Dashboard / User (read-only) and Smart Dashboard / Designer (create + edit). Standard Odoo ACLs & record rules apply — AI never bypasses them.
Yes. Queries use Odoo's native read_group — no record loading. A two-layer cache (per-widget + per-data-version) keeps the dashboard snappy and invalidates automatically when underlying records change.
Built & supported by Erpoxa
We build production-grade Odoo apps and answer every customer email personally.
Email support@erpoxa.com |
Website erpoxa.com |
Live demo apps.erpoxa.com |
Smart Dashboard for Odoo 19 · v1.5.1 · © 2026 Erpoxa
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Lines of code | 9272 |
| Technical Name |
erpoxa_smart_dashboard |
| License | OPL-1 |
| Website | https://erpoxa.com/ |
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.














































Please log in to comment on this module